From ce064af7d3097b73d5794e0e08ef8244050360f1 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Sat, 25 Nov 2023 19:50:49 -0500 Subject: [PATCH 001/269] Prepare next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c1700fab..af50a5df 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.3.1 +VERSION_NAME=1.4.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From ac88094033f98d13a2c8cd35cbfc8b9e5cf9823c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Nov 2023 06:59:34 -0500 Subject: [PATCH 002/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v6.23.0 (#335) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 806cef7a..987d726b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -45,7 +45,7 @@ ktlint = "com.pinterest.ktlint:ktlint-cli:1.0.1" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.22.0" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.0" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From d075382d6bb45a81df09a4baf4820a38bdb631ce Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 28 Nov 2023 16:30:20 -0500 Subject: [PATCH 003/269] Add Compose ktlint rules (#337) --- build.gradle | 12 ++++++++---- gradle/libs.versions.toml | 3 ++- .../src/main/kotlin/com/example/CountToThree.kt | 2 +- .../example/molecule/viewmodel/presentationLogic.kt | 4 ++-- .../main/java/com/example/molecule/viewmodel/ui.kt | 8 ++++---- .../molecule/viewmodel/PupperPicsPresenterTest.kt | 6 +++--- .../java/com/example/molecule/CounterActivity.kt | 2 +- .../src/main/java/com/example/molecule/presenter.kt | 3 +-- .../com/example/molecule/CounterPresenterTest.kt | 4 ++-- 9 files changed, 24 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index 7881b7bd..4c1fb2de 100644 --- a/build.gradle +++ b/build.gradle @@ -76,10 +76,14 @@ subprojects { spotless { kotlin { target("src/**/*.kt") - ktlint(libs.ktlint.get().version).editorConfigOverride([ - 'ktlint_standard_filename': 'disabled', - 'ktlint_function_naming_ignore_when_annotated_with': 'Composable', - ]) + ktlint(libs.ktlint.core.get().version) + .editorConfigOverride([ + 'ktlint_standard_filename': 'disabled', + 'ktlint_function_naming_ignore_when_annotated_with': 'Composable', + ]) + .customRuleSets([ + libs.ktlint.composeRules.get().toString(), + ]) licenseHeaderFile(rootProject.file('gradle/license-header.txt')) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 987d726b..96cc8005 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,7 +41,8 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" -ktlint = "com.pinterest.ktlint:ktlint-cli:1.0.1" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.3" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } diff --git a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt index 2a4c6a78..05e9d824 100644 --- a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt +++ b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt @@ -24,7 +24,7 @@ import androidx.compose.runtime.setValue import kotlinx.coroutines.delay @Composable -fun CountToThree(): Int { +fun countToThree(): Int { var count by remember { mutableStateOf(1) } LaunchedEffect(Unit) { diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt index 611493b4..e589f247 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt @@ -38,12 +38,12 @@ data class Model( class PupperPicsViewModel : MoleculeViewModel() { @Composable override fun models(events: Flow): Model { - return PupperPicsPresenter(events, PupperPicsService()) + return pupperPicsPresenter(events, PupperPicsService()) } } @Composable -fun PupperPicsPresenter(events: Flow, service: PupperPicsService): Model { +fun pupperPicsPresenter(events: Flow, service: PupperPicsService): Model { var breeds: List by remember { mutableStateOf(emptyList()) } var currentBreed: String? by remember { mutableStateOf(null) } var currentUrl: String? by remember { mutableStateOf(null) } diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt index 9c8e9c6e..de2d15ad 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt @@ -65,9 +65,9 @@ import coil.compose.AsyncImage import coil.compose.AsyncImagePainter @Composable -fun PupperPicsScreen(model: Model, onEvent: (Event) -> Unit) { +fun PupperPicsScreen(model: Model, modifier: Modifier = Modifier, onEvent: (Event) -> Unit) { Box( - modifier = Modifier + modifier = modifier .fillMaxSize() .background(MaterialTheme.colorScheme.background), ) { @@ -183,7 +183,7 @@ private fun BreedSelectionList(model: Model, onBreedClick: (String) -> Unit) { } @Composable -private fun Content(model: Model, modifier: Modifier) { +private fun Content(model: Model, modifier: Modifier = Modifier) { var imageLoading by remember { mutableStateOf(true) } Box(modifier) { @@ -201,7 +201,7 @@ private fun Content(model: Model, modifier: Modifier) { } @Composable -private fun Loading(modifier: Modifier) { +private fun Loading(modifier: Modifier = Modifier) { val rotation by rememberInfiniteTransition().animateFloat( initialValue = 0f, targetValue = 360f, diff --git a/sample-viewmodel/src/test/java/com/example/molecule/viewmodel/PupperPicsPresenterTest.kt b/sample-viewmodel/src/test/java/com/example/molecule/viewmodel/PupperPicsPresenterTest.kt index 91d6546b..1e28afb9 100644 --- a/sample-viewmodel/src/test/java/com/example/molecule/viewmodel/PupperPicsPresenterTest.kt +++ b/sample-viewmodel/src/test/java/com/example/molecule/viewmodel/PupperPicsPresenterTest.kt @@ -34,7 +34,7 @@ class PupperPicsPresenterTest { fun `on launch, breeds are loaded followed by an image url`() = runBlocking { val picsService = FakePicsService() moleculeFlow(mode = RecompositionMode.Immediate) { - PupperPicsPresenter(emptyFlow(), picsService) + pupperPicsPresenter(emptyFlow(), picsService) }.distinctUntilChanged().test { assertEquals( Model( @@ -78,7 +78,7 @@ class PupperPicsPresenterTest { val picsService = FakePicsService() val events = Channel() moleculeFlow(mode = RecompositionMode.Immediate) { - PupperPicsPresenter(events.receiveAsFlow(), picsService) + pupperPicsPresenter(events.receiveAsFlow(), picsService) }.distinctUntilChanged().test { picsService.breeds.add(listOf("akita", "boxer", "corgi")) picsService.urls.add("akita.jpg") @@ -127,7 +127,7 @@ class PupperPicsPresenterTest { val picsService = FakePicsService() val events = Channel() moleculeFlow(mode = RecompositionMode.Immediate) { - PupperPicsPresenter(events.receiveAsFlow(), picsService) + pupperPicsPresenter(events.receiveAsFlow(), picsService) }.distinctUntilChanged().test { picsService.breeds.add(listOf("akita", "boxer", "corgi")) assertThat(picsService.urlRequestArgs.awaitItem()).isEqualTo("akita") diff --git a/sample/src/main/java/com/example/molecule/CounterActivity.kt b/sample/src/main/java/com/example/molecule/CounterActivity.kt index 5954b8a7..6b24f694 100644 --- a/sample/src/main/java/com/example/molecule/CounterActivity.kt +++ b/sample/src/main/java/com/example/molecule/CounterActivity.kt @@ -44,7 +44,7 @@ class CounterActivity : Activity() { val randomService = RandomService() val models = scope.launchMolecule(mode = RecompositionMode.ContextClock) { - CounterPresenter(events, randomService) + counterPresenter(events, randomService) } scope.launch(start = UNDISPATCHED) { diff --git a/sample/src/main/java/com/example/molecule/presenter.kt b/sample/src/main/java/com/example/molecule/presenter.kt index bbce3671..c302b85e 100644 --- a/sample/src/main/java/com/example/molecule/presenter.kt +++ b/sample/src/main/java/com/example/molecule/presenter.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.Snapshot import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch sealed interface CounterEvent @@ -36,7 +35,7 @@ data class CounterModel( ) @Composable -fun CounterPresenter( +fun counterPresenter( events: Flow, randomService: RandomService, ): CounterModel { diff --git a/sample/src/test/java/com/example/molecule/CounterPresenterTest.kt b/sample/src/test/java/com/example/molecule/CounterPresenterTest.kt index 3e73656d..1fab8d39 100644 --- a/sample/src/test/java/com/example/molecule/CounterPresenterTest.kt +++ b/sample/src/test/java/com/example/molecule/CounterPresenterTest.kt @@ -32,7 +32,7 @@ class CounterPresenterTest { fun localChanges() = runTest { val events = Channel() moleculeFlow(mode = RecompositionMode.Immediate) { - CounterPresenter(events.receiveAsFlow(), randomService) + counterPresenter(events.receiveAsFlow(), randomService) } .test { assertThat(awaitItem()).isEqualTo(CounterModel(0, false)) @@ -49,7 +49,7 @@ class CounterPresenterTest { fun randomChange() = runTest { val events = Channel() moleculeFlow(mode = RecompositionMode.Immediate) { - CounterPresenter(events.receiveAsFlow(), randomService) + counterPresenter(events.receiveAsFlow(), randomService) } .test { assertThat(awaitItem()).isEqualTo(CounterModel(0, false)) From 68c60e90f9ea8adecba841a3a3524a9c192feedb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 17:08:55 -0500 Subject: [PATCH 004/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.4 (#338) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 96cc8005..e25cc8f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.3" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.4" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } From 487e95faa39280c95349c09385ada7a3277acf43 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 11:13:03 -0500 Subject: [PATCH 005/269] Update dependency gradle to v8.5 (#340) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 744c64d1..3499ded5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 23d78beca797e15cc4e0f862e5ed1665771dd3da Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 16:50:31 +0000 Subject: [PATCH 006/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.5 (#339) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e25cc8f1..4fd05a1f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.4" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.5" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } From e5582302f8262e00e319a2e662a566c53cc9982e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 17:04:12 +0000 Subject: [PATCH 007/269] Update actions/setup-java action to v4 (#341) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yaml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 30e6354f..a5041d0b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 20 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fdd77691..cf3e83ca 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -11,7 +11,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 20 From ca7b2e55b9f23e49e0b2376eed7729336eeb1302 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 20:04:45 +0000 Subject: [PATCH 008/269] Update dependency androidx.compose.compiler:compiler to v1.5.5 (#342) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4fd05a1f..7dda7c31 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.1" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2023.10.01" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.4" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.5" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" From 288b05488728b8058079955ddfe4fcaa834d378a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 20:30:03 +0000 Subject: [PATCH 009/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v6.23.2 (#343) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7dda7c31..d06e5e9e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,7 +46,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.5" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.0" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.2" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From b07d52772a3ba344f32320f5bba1720ee8df20ec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 09:50:40 -0500 Subject: [PATCH 010/269] Update dependency com.android.tools.build:gradle to v8.2.0 (#344) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d06e5e9e..0a56180c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.1.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.2.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.1" } From fb9cb512fcd40f94507a69ae6680c6aa73b4bd38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 08:37:15 -0500 Subject: [PATCH 011/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v6.23.3 (#345) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0a56180c..62d3e8f6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,7 +46,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.5" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.2" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.3" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From fc8db5f22254bf5ca1cab5a75b6887f021e2ea25 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 01:53:01 +0000 Subject: [PATCH 012/269] Update dependency com.willowtreeapps.assertk:assertk to v0.28.0 (#346) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 62d3e8f6..70b5f2c1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -54,5 +54,5 @@ squareup-retrofit-client = { module = "com.squareup.retrofit2:retrofit", version squareup-retrofit-converter-scalars = { module = "com.squareup.retrofit2:converter-scalars", version.ref = "squareup-retrofit" } squareup-retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "squareup-retrofit" } -assertk = "com.willowtreeapps.assertk:assertk:0.27.0" +assertk = "com.willowtreeapps.assertk:assertk:0.28.0" turbine = { module = "app.cash.turbine:turbine", version = "1.0.0" } From 09f1e3bf16267a23b43c5b8f9b5d361ad68ae70c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 18:18:39 -0500 Subject: [PATCH 013/269] Update dependency androidx.compose.compiler:compiler to v1.5.6 (#347) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 70b5f2c1..0354ed41 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.1" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2023.10.01" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.5" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.6" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" From 6a2f5ecf631373dd45cf16e189d16addc8b72557 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 00:23:49 +0000 Subject: [PATCH 014/269] Update dependency androidx.activity:activity-compose to v1.8.2 (#348) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0354ed41..b1a8af9f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ squareup-retrofit = "2.9.0" android-plugin = { module = "com.android.tools.build:gradle", version = "8.2.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } -androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.1" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2023.10.01" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.6" From 85f585f61af3faeedfafc394237fe5d782273540 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 19:38:13 -0500 Subject: [PATCH 015/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.6 (#349) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b1a8af9f..43cca5ae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.5" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.6" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } From 819426a3ad27d19f7d559aefcea0cdbd962b7041 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 15:28:48 -0500 Subject: [PATCH 016/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.7 (#350) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 43cca5ae..97de13af 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.6" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.7" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } From 1e34dcab1faf6de3f41d7b50f0db79bcc6ef69ab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Dec 2023 07:25:15 -0500 Subject: [PATCH 017/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.8 (#351) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 97de13af..ef3f1c73 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.7" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.8" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } From affc239ee1a98d3297450ea5df3b4c4ea69dabb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 14:40:26 +0000 Subject: [PATCH 018/269] Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.26.0 (#352) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ef3f1c73..dd88f110 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibili ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.8" -maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.25.3" } +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.26.0" } spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.3" } From 0c3bc0f1fd52364039530138ce8df502794dfccb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 16:12:12 -0500 Subject: [PATCH 019/269] Update dependency androidx.compose.compiler:compiler to v1.5.7 (#353) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dd88f110..ddfe189b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2023.10.01" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.6" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.7" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" From 5c51bfa9cec1b74ed2ed8c0a1b2a28a56d31644b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 16:12:38 -0500 Subject: [PATCH 020/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.1.0 (#354) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddfe189b..b8c67f09 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,7 +41,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.0.1" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.8" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.26.0" } From 4af27f93d3949baeadc05f13131326606557be43 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 15:52:59 -0500 Subject: [PATCH 021/269] Update Kotlin/Compose (#355) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b8c67f09..4890d2a2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.7.3" -kotlin = "1.9.21" +kotlin = "1.9.22" jetbrains-compose = "1.5.11" @@ -23,7 +23,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.4" +jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.7.1" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } From 02456c4b3ce7e7847e1574f90bbd9c30d0f03510 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 2 Jan 2024 16:05:06 -0500 Subject: [PATCH 022/269] Prepare version 1.3.2 --- CHANGELOG.md | 11 ++++++++++- README.md | 3 ++- gradle.properties | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 616b707c..310f9490 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ ## [Unreleased] +## [1.3.2] - 2024-01-02 + +New: +- Support for Kotlin 1.9.22 + +This version works with Kotlin 1.9.22 by default. + + ## [1.3.1] - 2023-11-25 New: @@ -209,7 +217,8 @@ Initial release -[Unreleased]: https://github.com/cashapp/molecule/compare/1.3.1...HEAD +[Unreleased]: https://github.com/cashapp/molecule/compare/1.3.2...HEAD +[1.3.2]: https://github.com/cashapp/molecule/releases/tag/1.3.2 [1.3.1]: https://github.com/cashapp/molecule/releases/tag/1.3.1 [1.3.0]: https://github.com/cashapp/molecule/releases/tag/1.3.0 [1.2.1]: https://github.com/cashapp/molecule/releases/tag/1.2.1 diff --git a/README.md b/README.md index 91ac19eb..966ccaba 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.3.1' + classpath 'app.cash.molecule:molecule-gradle-plugin:1.3.2' } } @@ -183,6 +183,7 @@ certain versions of Kotlin. | Kotlin | Molecule | |--------|----------------| +| 1.9.22 | 1.3.2 | | 1.9.21 | 1.3.1 | | 1.9.20 | 1.3.0 | | 1.9.10 | 1.2.1 | diff --git a/gradle.properties b/gradle.properties index af50a5df..a1c03a66 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.4.0-SNAPSHOT +VERSION_NAME=1.3.2 SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 27289ca5c45b966c61503451aaeaeb01390b0d68 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 2 Jan 2024 16:05:20 -0500 Subject: [PATCH 023/269] Prepare next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a1c03a66..af50a5df 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.3.2 +VERSION_NAME=1.4.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From a0bb5bdbca8f54800b0544fa27c3814043d8b56f Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 2 Jan 2024 16:41:05 -0500 Subject: [PATCH 024/269] Track function rename (#356) --- .../cash/molecule/MoleculeStateFlowTest.kt | 10 ++++----- .../kotlin/app/cash/molecule/MoleculeTest.kt | 22 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt index a73a732f..084d005d 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt @@ -27,7 +27,7 @@ import app.cash.molecule.RecompositionMode.Immediate import assertk.assertFailure import assertk.assertThat import assertk.assertions.isEqualTo -import assertk.assertions.isSameAs +import assertk.assertions.isSameInstanceAs import kotlin.coroutines.CoroutineContext import kotlin.test.Test import kotlinx.coroutines.CoroutineExceptionHandler @@ -98,7 +98,7 @@ class MoleculeStateFlowTest { scope.launchMolecule(ContextClock) { throw runtimeException } - }.isSameAs(runtimeException) + }.isSameInstanceAs(runtimeException) scope.cancel() } @@ -136,7 +136,7 @@ class MoleculeStateFlowTest { runCurrent() clock.sendFrame(0) runCurrent() - assertThat(exceptionHandler.exceptions.single()).isSameAs(runtimeException) + assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) job.cancel() } @@ -162,7 +162,7 @@ class MoleculeStateFlowTest { advanceTimeBy(50) runCurrent() clock.sendFrame(0) - assertThat(exceptionHandler.exceptions.single()).isSameAs(runtimeException) + assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) job.cancel() } @@ -225,7 +225,7 @@ class MoleculeStateFlowTest { job.join() - assertThat(exceptionHandler.exceptions.single()).isSameAs(runtimeException) + assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) } } } diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt index 83f19b5e..a5adf31c 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt @@ -33,8 +33,8 @@ import app.cash.molecule.RecompositionMode.Immediate import assertk.assertFailure import assertk.assertThat import assertk.assertions.isEqualTo -import assertk.assertions.isNotSameAs -import assertk.assertions.isSameAs +import assertk.assertions.isNotSameInstanceAs +import assertk.assertions.isSameInstanceAs import kotlin.coroutines.CoroutineContext import kotlin.test.Test import kotlin.test.fail @@ -107,7 +107,7 @@ class MoleculeTest { scope.launchMolecule(ContextClock, emitter = { fail() }) { throw runtimeException } - }.isSameAs(runtimeException) + }.isSameInstanceAs(runtimeException) scope.cancel() } @@ -145,7 +145,7 @@ class MoleculeTest { runCurrent() clock.sendFrame(0) runCurrent() - assertThat(exceptionHandler.exceptions.single()).isSameAs(runtimeException) + assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) job.cancel() } @@ -172,7 +172,7 @@ class MoleculeTest { advanceTimeBy(50) runCurrent() clock.sendFrame(0) - assertThat(exceptionHandler.exceptions.single()).isSameAs(runtimeException) + assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) job.cancel() } @@ -187,7 +187,7 @@ class MoleculeTest { scope.launchMolecule(ContextClock, emitter = { throw runtimeException }) { 0 } - }.isSameAs(runtimeException) + }.isSameInstanceAs(runtimeException) scope.cancel() } @@ -221,7 +221,7 @@ class MoleculeTest { runCurrent() clock.sendFrame(0) runCurrent() - assertThat(exceptionHandler.exceptions.single()).isSameAs(runtimeException) + assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) job.cancel() } @@ -299,7 +299,7 @@ class MoleculeTest { moleculeFlow(mode = Immediate) { throw runtimeException }.collect() - }.isSameAs(runtimeException) + }.isSameInstanceAs(runtimeException) } @Test @@ -320,7 +320,7 @@ class MoleculeTest { values.send(it) } }.exceptionOrNull() - assertThat(runtimeException).isSameAs(exception) + assertThat(runtimeException).isSameInstanceAs(exception) } assertThat(values.awaitValue()).isEqualTo(0) @@ -347,7 +347,7 @@ class MoleculeTest { values.send(it) } }.exceptionOrNull() - assertThat(runtimeException).isSameAs(exception) + assertThat(runtimeException).isSameInstanceAs(exception) } assertThat(values.awaitValue()).isEqualTo(0) @@ -400,7 +400,7 @@ class MoleculeTest { backgroundScope.launchMolecule(Immediate, myClock) { actualClock = rememberCoroutineScope().coroutineContext[MonotonicFrameClock] } - assertThat(actualClock).isNotSameAs(myClock) + assertThat(actualClock).isNotSameInstanceAs(myClock) } private suspend fun Channel.awaitValue(): T = withTimeout(1000) { receive() } From fac20e24b94d60e71db6d1ae9d3d7397f9ceda7d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:45:30 +0000 Subject: [PATCH 025/269] Update dependency com.android.tools.build:gradle to v8.2.1 (#357) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4890d2a2..e6c681eb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.2.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.2.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } From b57442e15547ea01f58e893508bdc57936ebd83e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 6 Jan 2024 19:54:30 +0000 Subject: [PATCH 026/269] Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.27.0 (#358) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e6c681eb..1fc44d19 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibili ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.8" -maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.26.0" } +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.3" } From 7023f3dd1b1da25d11f8198694eeb03ec70fb77f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 23:35:50 +0000 Subject: [PATCH 027/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.1.1 (#360) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1fc44d19..bcaba7b5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,7 +41,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.0" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.8" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } From 6ad86918c7738267b54fdc915a85f817252dfcb8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 14:28:39 +0000 Subject: [PATCH 028/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.9 (#361) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bcaba7b5..4a7689b0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.8" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.9" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } From 35842761b0954243b6da37493cd11d68edad37db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 19:38:35 +0000 Subject: [PATCH 029/269] Update dependency androidx.compose.compiler:compiler to v1.5.8 (#362) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4a7689b0..c3b218c1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2023.10.01" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.7" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.8" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" From 88cdeedbd492b06a5bacb7c7e8d8be5176151ea6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 02:46:53 +0000 Subject: [PATCH 030/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v6.24.0 (#363) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c3b218c1..73e40f69 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,7 +46,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.9" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.23.3" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.24.0" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From 3cafc55b3365b1a8e8310e8b1ad04e43d8c24eb6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 12:50:51 -0500 Subject: [PATCH 031/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.10 (#364) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 73e40f69..9a572f48 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.9" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.10" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } From cdaa58e8d361f5a83d7463988c28dc7ad2fcce28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Jan 2024 07:04:43 -0500 Subject: [PATCH 032/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v6.25.0 (#367) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9a572f48..51b8f593 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,7 +46,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.10" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.24.0" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.25.0" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From bf13752f85c34af74d083edcbf7ca3ed49421ca9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Jan 2024 19:56:53 +0000 Subject: [PATCH 033/269] Update dependency com.android.tools.build:gradle to v8.2.2 (#368) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 51b8f593..a3fc1cb8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.2.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.2.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } From dfada530587c17c61ede591a2c07e19fbef86908 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:18:47 +0000 Subject: [PATCH 034/269] Update dependency androidx.compose:compose-bom to v2024 (#369) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a3fc1cb8..fdd35c50 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2023.10.01" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.01.00" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.8" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 3a3153b2ba5295f3507ec7185111a98e02151608 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 13:28:50 +0000 Subject: [PATCH 035/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.11 (#370) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fdd35c50..e563689f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.10" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.11" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } From 1ccf808b9562b3975b766662c1f2e2522e403d57 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Jan 2024 17:59:22 +0000 Subject: [PATCH 036/269] Update ffurrer2/extract-release-notes action to v2 (#371) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cf3e83ca..dcfb4837 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -24,7 +24,7 @@ jobs: - name: Extract release notes id: release_notes - uses: ffurrer2/extract-release-notes@v1 + uses: ffurrer2/extract-release-notes@v2 - name: Create release uses: softprops/action-gh-release@v1 From 2b0599f3d71c97e5156b2fa477350fad69af9fa1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 19:14:44 +0000 Subject: [PATCH 037/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.14.0 (#372) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e563689f..f187e5e6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotl kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.13.2" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.14.0" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.11" From a4268cc070e969f54b550522c4be794553625a14 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 19:35:18 -0500 Subject: [PATCH 038/269] Update gradle/wrapper-validation-action action to v2 (#374) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/gradle-wrapper.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper.yaml b/.github/workflows/gradle-wrapper.yaml index 47268b67..c37e4f93 100644 --- a/.github/workflows/gradle-wrapper.yaml +++ b/.github/workflows/gradle-wrapper.yaml @@ -12,4 +12,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: gradle/wrapper-validation-action@v1 + - uses: gradle/wrapper-validation-action@v2 From f8270c20a35c3ede24fc10661e7e99f0a9f8f0ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 12:15:48 +0000 Subject: [PATCH 039/269] Update dependency org.jetbrains.compose:compose-gradle-plugin to v1.5.12 (#373) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f187e5e6..5b11cefb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ coroutine = "1.7.3" kotlin = "1.9.22" -jetbrains-compose = "1.5.11" +jetbrains-compose = "1.5.12" squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" From 96b2514f3f2f82b1e903540b2b3d9d7f5fede6bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 12:22:13 +0000 Subject: [PATCH 040/269] Update dependency org.jetbrains.compose.compiler:compiler to v1.5.8 (#375) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5b11cefb..bffb82b2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.7.1" +jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.8" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } From a0fb6c5cd805b6cbda4f7eb98d0a47dd47894f18 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 19:17:57 +0000 Subject: [PATCH 041/269] Update dependency gradle to v8.6 (#376) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3499ded5..509c4a29 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 4bcc9f2455eb886631cda0f2d383d69d0cf2e15d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 21:30:32 +0000 Subject: [PATCH 042/269] Update dependency androidx.compose:compose-bom to v2024.02.00 (#378) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bffb82b2..37918601 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.01.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.00" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.8" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 293352db63897c70d97689fe565a21ec92b0f284 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 21:53:47 +0000 Subject: [PATCH 043/269] Update dependency androidx.compose.compiler:compiler to v1.5.9 (#377) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 37918601..638a8cfa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.00" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.8" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.9" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" From f69c15004407c1fbd14f4c2e48170ac2926b0b03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:47:02 +0000 Subject: [PATCH 044/269] Update coroutine to v1.8.0 (#380) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 638a8cfa..c317339b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ compileSdk = "34" minSdk = "21" -coroutine = "1.7.3" +coroutine = "1.8.0" kotlin = "1.9.22" From bcdee16193a17d3a8087b49d9936fedf07f2c081 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:02:38 -0500 Subject: [PATCH 045/269] Update dependency org.jetbrains.compose.compiler:compiler to v1.5.8.1 (#381) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c317339b..960a0cc1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.8" +jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.8.1" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } From 77eaef751b2d0d20d95d1f8abc33897d46a89f2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 18:10:26 -0500 Subject: [PATCH 046/269] Update dependency androidx.compose.compiler:compiler to v1.5.10 (#383) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 960a0cc1..88320515 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.00" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.9" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.10" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.5.0" From 8c930c352ee64f8f1319db2e5c2ab6786c32a506 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 19:20:11 -0500 Subject: [PATCH 047/269] Update dependency androidx.compose:compose-bom to v2024.02.01 (#384) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 88320515..f577b760 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.01" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.10" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 2ec5aab0ad888962aac5111f11be71c95733e489 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Thu, 22 Feb 2024 13:27:56 -0500 Subject: [PATCH 048/269] Test tweaks (#385) - Share a the recording exception handler. - Don't use a pointless backing property when the mutable type is exposed. - Remove redundant package qualifier on runCatching. --- .../cash/molecule/MoleculeStateFlowTest.kt | 11 ------- .../kotlin/app/cash/molecule/MoleculeTest.kt | 15 ++-------- .../molecule/RecordingExceptionHandler.kt | 29 +++++++++++++++++++ 3 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 molecule-runtime/src/commonTest/kotlin/app/cash/molecule/RecordingExceptionHandler.kt diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt index 084d005d..4142cc0d 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt @@ -28,9 +28,7 @@ import assertk.assertFailure import assertk.assertThat import assertk.assertions.isEqualTo import assertk.assertions.isSameInstanceAs -import kotlin.coroutines.CoroutineContext import kotlin.test.Test -import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -103,15 +101,6 @@ class MoleculeStateFlowTest { scope.cancel() } - class RecordingExceptionHandler : CoroutineExceptionHandler { - private val _exceptions = mutableListOf() - val exceptions get() = _exceptions - override fun handleException(context: CoroutineContext, exception: Throwable) { - _exceptions += exception - } - override val key get() = CoroutineExceptionHandler - } - @Test fun errorDelayed() = runTest { val job = Job() val clock = BroadcastFrameClock() diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt index a5adf31c..5ab29a54 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt @@ -35,10 +35,8 @@ import assertk.assertThat import assertk.assertions.isEqualTo import assertk.assertions.isNotSameInstanceAs import assertk.assertions.isSameInstanceAs -import kotlin.coroutines.CoroutineContext import kotlin.test.Test import kotlin.test.fail -import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -112,15 +110,6 @@ class MoleculeTest { scope.cancel() } - class RecordingExceptionHandler : CoroutineExceptionHandler { - private val _exceptions = mutableListOf() - val exceptions get() = _exceptions - override fun handleException(context: CoroutineContext, exception: Throwable) { - _exceptions += exception - } - override val key get() = CoroutineExceptionHandler - } - @Test fun errorDelayed() = runTest { val job = Job() val clock = BroadcastFrameClock() @@ -310,7 +299,7 @@ class MoleculeTest { val runtimeException = object : RuntimeException() {} var count by mutableStateOf(0) launch { - val exception = kotlin.runCatching { + val exception = runCatching { moleculeFlow(mode = Immediate) { if (count == 1) { throw runtimeException @@ -336,7 +325,7 @@ class MoleculeTest { // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} launch { - val exception = kotlin.runCatching { + val exception = runCatching { moleculeFlow(mode = Immediate) { LaunchedEffect(Unit) { delay(50) diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/RecordingExceptionHandler.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/RecordingExceptionHandler.kt new file mode 100644 index 00000000..c961a320 --- /dev/null +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/RecordingExceptionHandler.kt @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2021 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +import kotlin.coroutines.CoroutineContext +import kotlinx.coroutines.CoroutineExceptionHandler + +class RecordingExceptionHandler : CoroutineExceptionHandler { + val exceptions = mutableListOf() + + override fun handleException(context: CoroutineContext, exception: Throwable) { + exceptions += exception + } + + override val key get() = CoroutineExceptionHandler +} From 40871f8cbcdf4635d70f2120705b7cb094cf3dc2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 22:23:15 -0500 Subject: [PATCH 049/269] Update dependency io.coil-kt:coil-compose to v2.6.0 (#386) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f577b760..a266cfdb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "202 androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.10" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } -coil-compose = "io.coil-kt:coil-compose:2.5.0" +coil-compose = "io.coil-kt:coil-compose:2.6.0" jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.8.1" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } From e4d20769a95222fef130251e150f594de7499ae5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:27:06 +0000 Subject: [PATCH 050/269] Update jetbrains.compose to v1.6.0 (#387) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- .../app/cash/molecule/gradle/MoleculePlugin.kt | 18 ------------------ 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a266cfdb..787a1aab 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ coroutine = "1.8.0" kotlin = "1.9.22" -jetbrains-compose = "1.5.12" +jetbrains-compose = "1.6.0" squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" diff --git a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt index 5f1a677f..2cfb4d24 100644 --- a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt +++ b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt @@ -26,12 +26,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.androidJvm -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.common -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.js -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.jvm -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.native -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.wasm import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_MAIN_SOURCE_SET_NAME import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact import org.jetbrains.kotlin.gradle.plugin.SubpluginOption @@ -135,18 +129,6 @@ class MoleculePlugin : KotlinCompilerPluginSupportPlugin { } override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider> { - when (kotlinCompilation.platformType) { - js -> { - // This enables a workaround for Compose lambda generation to function correctly in JS. - // Note: We cannot use SubpluginOption to do this because it targets the Compose plugin. - kotlinCompilation.kotlinOptions.freeCompilerArgs += - listOf("-P", "plugin:androidx.compose.compiler.plugins.kotlin:generateDecoys=true") - } - common, androidJvm, jvm, native, wasm -> { - // Nothing to do! - } - } - return kotlinCompilation.target.project.provider { emptyList() } } } From ef3a9ffbda358596f9addb0cd70d1d09fac1be38 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 27 Feb 2024 13:18:18 -0500 Subject: [PATCH 051/269] Prepare version 1.4.0 --- CHANGELOG.md | 11 ++++++++++- README.md | 6 +++--- gradle.properties | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 310f9490..0629cbbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ ## [Unreleased] +## [1.4.0] - 2024-02-27 + +Changed: +- Disable decoy generation for JS target to make compatible with JetBrains Compose 1.6. This is an ABI-breaking change, so all Compose-based libraries targeting JS will also need to have been recompiled. + +This version works with Kotlin 1.9.22 by default. + + ## [1.3.2] - 2024-01-02 New: @@ -217,7 +225,8 @@ Initial release -[Unreleased]: https://github.com/cashapp/molecule/compare/1.3.2...HEAD +[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.0...HEAD +[1.4.0]: https://github.com/cashapp/molecule/releases/tag/1.4.0 [1.3.2]: https://github.com/cashapp/molecule/releases/tag/1.3.2 [1.3.1]: https://github.com/cashapp/molecule/releases/tag/1.3.1 [1.3.0]: https://github.com/cashapp/molecule/releases/tag/1.3.0 diff --git a/README.md b/README.md index 966ccaba..20a1b057 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.3.2' + classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.0' } } @@ -183,7 +183,7 @@ certain versions of Kotlin. | Kotlin | Molecule | |--------|----------------| -| 1.9.22 | 1.3.2 | +| 1.9.22 | 1.3.2 - 1.4.0 | | 1.9.21 | 1.3.1 | | 1.9.20 | 1.3.0 | | 1.9.10 | 1.2.1 | @@ -212,7 +212,7 @@ buildscript { } } dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.0-SNAPSHOT' + classpath 'app.cash.molecule:molecule-gradle-plugin:1.5.0-SNAPSHOT' } } diff --git a/gradle.properties b/gradle.properties index af50a5df..adb77de6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.4.0-SNAPSHOT +VERSION_NAME=1.4.0 SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From d20a7b4159ee57e239271c15968b427b2bf2410f Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 27 Feb 2024 13:18:38 -0500 Subject: [PATCH 052/269] Prepare next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index adb77de6..378030ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.4.0 +VERSION_NAME=1.5.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From b13772c2d25bd827e45707a09e5dcf6bd46b0ac2 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 28 Feb 2024 12:54:20 -0500 Subject: [PATCH 053/269] Add wasmJs and linuxArm64 targets (#388) These were unblocked by the JetBrains Compose 1.6.0 runtime update. --- CHANGELOG.md | 3 ++ molecule-runtime/build.gradle | 49 ++++++++++++++----- .../molecule/WindowAnimationFrameClock.kt | 0 .../kotlin/app/cash/molecule/timeSource.kt | 0 .../kotlin/app/cash/molecule/timeSource.kt | 0 5 files changed, 41 insertions(+), 11 deletions(-) rename molecule-runtime/src/{jsMain => browserMain}/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt (100%) rename molecule-runtime/src/{jsMain => browserMain}/kotlin/app/cash/molecule/timeSource.kt (100%) rename molecule-runtime/src/{linuxX64Main => linuxMain}/kotlin/app/cash/molecule/timeSource.kt (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0629cbbe..a8ab0e61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## [Unreleased] +New: +- Support for `linuxArm64` and `wasmJs` targets. + ## [1.4.0] - 2024-02-27 diff --git a/molecule-runtime/build.gradle b/molecule-runtime/build.gradle index 38045513..4f838bb0 100644 --- a/molecule-runtime/build.gradle +++ b/molecule-runtime/build.gradle @@ -22,6 +22,7 @@ kotlin { jvm() + linuxArm64() linuxX64() macosArm64() @@ -33,11 +34,17 @@ kotlin { tvosSimulatorArm64() tvosX64() + wasmJs { + browser() + } + watchosArm32() watchosArm64() watchosSimulatorArm64() watchosX64() + applyDefaultHierarchyTemplate() + sourceSets { configureEach { languageSettings.optIn("kotlinx.cinterop.BetaInteropApi") @@ -64,6 +71,15 @@ kotlin { } } + // We use a common folder instead of a common source set because there is no commonizer + // which exposes the browser APIs across these two targets. + jsMain { + kotlin.srcDir('src/browserMain/kotlin') + } + wasmJsMain { + kotlin.srcDir('src/browserMain/kotlin') + } + darwinMain { dependsOn(commonMain) } @@ -78,21 +94,32 @@ kotlin { quartzCoreMain { dependsOn(displayLinkMain) } + + iosMain { + dependsOn(quartzCoreMain) + } + iosTest { + // TODO Link against XCTest in order to get frame pulses on iOS. + // dependsOn(displayLinkTest) + } + + tvosMain { + dependsOn(quartzCoreMain) + } + tvosTest { + // TODO Link against XCTest in order to get frame pulses on tvOS. + // dependsOn(displayLinkTest) + } + macosMain { dependsOn(displayLinkMain) } - } + macosTest { + dependsOn(displayLinkTest) + } - targets.each { target -> - if (target.name.startsWith('ios') || target.name.startsWith('tvos')) { - target.compilations.main.defaultSourceSet.dependsOn(sourceSets.quartzCoreMain) - // TODO Link against XCTest in order to get frame pulses on iOS/tvOS. - // target.compilations.test.defaultSourceSet.dependsOn(sourceSets.displayLinkTest) - } else if (target.name.startsWith('macos')) { - target.compilations.main.defaultSourceSet.dependsOn(sourceSets.macosMain) - target.compilations.test.defaultSourceSet.dependsOn(sourceSets.displayLinkTest) - } else if (target.name.startsWith('watchos')) { - target.compilations.main.defaultSourceSet.dependsOn(sourceSets.darwinMain) + watchosMain { + dependsOn(darwinMain) } } } diff --git a/molecule-runtime/src/jsMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt similarity index 100% rename from molecule-runtime/src/jsMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt rename to molecule-runtime/src/browserMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt diff --git a/molecule-runtime/src/jsMain/kotlin/app/cash/molecule/timeSource.kt b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/timeSource.kt similarity index 100% rename from molecule-runtime/src/jsMain/kotlin/app/cash/molecule/timeSource.kt rename to molecule-runtime/src/browserMain/kotlin/app/cash/molecule/timeSource.kt diff --git a/molecule-runtime/src/linuxX64Main/kotlin/app/cash/molecule/timeSource.kt b/molecule-runtime/src/linuxMain/kotlin/app/cash/molecule/timeSource.kt similarity index 100% rename from molecule-runtime/src/linuxX64Main/kotlin/app/cash/molecule/timeSource.kt rename to molecule-runtime/src/linuxMain/kotlin/app/cash/molecule/timeSource.kt From be8e76de0bb84e5709e9dffbd935a57a09ac3304 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 28 Feb 2024 13:09:37 -0500 Subject: [PATCH 054/269] Prepare version 1.4.1 --- CHANGELOG.md | 7 ++++++- README.md | 4 ++-- gradle.properties | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8ab0e61..87d76ef9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] + + +## [1.4.1] - 2024-02-28 + New: - Support for `linuxArm64` and `wasmJs` targets. @@ -228,7 +232,8 @@ Initial release -[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.0...HEAD +[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.1...HEAD +[1.4.1]: https://github.com/cashapp/molecule/releases/tag/1.4.1 [1.4.0]: https://github.com/cashapp/molecule/releases/tag/1.4.0 [1.3.2]: https://github.com/cashapp/molecule/releases/tag/1.3.2 [1.3.1]: https://github.com/cashapp/molecule/releases/tag/1.3.1 diff --git a/README.md b/README.md index 20a1b057..99a637c3 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.0' + classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.1' } } @@ -183,7 +183,7 @@ certain versions of Kotlin. | Kotlin | Molecule | |--------|----------------| -| 1.9.22 | 1.3.2 - 1.4.0 | +| 1.9.22 | 1.3.2 - 1.4.1 | | 1.9.21 | 1.3.1 | | 1.9.20 | 1.3.0 | | 1.9.10 | 1.2.1 | diff --git a/gradle.properties b/gradle.properties index 378030ce..6bdfce85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.5.0-SNAPSHOT +VERSION_NAME=1.4.1 SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 6a4c6b29f1584d2058e52b55036d3a0d179f8391 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 28 Feb 2024 13:10:12 -0500 Subject: [PATCH 055/269] Prepare next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6bdfce85..378030ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.4.1 +VERSION_NAME=1.5.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 818a164f279aec82133eb16dfda6476ab45c5d06 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 02:24:58 +0000 Subject: [PATCH 056/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.2.0 (#389) * Update dependency com.pinterest.ktlint:ktlint-cli to v1.2.0 * Appease ktlint --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 2 +- .../src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt | 2 ++ sample/src/main/java/com/example/molecule/presenter.kt | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 787a1aab..fdd924b7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,7 +41,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.14.0" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.1.1" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.11" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } diff --git a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt index 2cfb4d24..c2a80e75 100644 --- a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt +++ b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt @@ -113,7 +113,9 @@ class MoleculePlugin : KotlinCompilerPluginSupportPlugin { val parts = plugin.split(":") return when (parts.size) { 1 -> SubpluginArtifact("org.jetbrains.compose.compiler", "compiler", parts[0]) + 3 -> SubpluginArtifact(parts[0], parts[1], parts[2]) + else -> error( """ |Illegal format of '$EXTENSION_NAME.${MoleculeExtension::kotlinCompilerPlugin.name}' property. diff --git a/sample/src/main/java/com/example/molecule/presenter.kt b/sample/src/main/java/com/example/molecule/presenter.kt index c302b85e..e56754c1 100644 --- a/sample/src/main/java/com/example/molecule/presenter.kt +++ b/sample/src/main/java/com/example/molecule/presenter.kt @@ -48,6 +48,7 @@ fun counterPresenter( is Change -> { count += event.delta } + Randomize -> { loading = true launch { From 4ea3a63a5a4cbc95ff0a82dbd7f04bd44074483f Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Thu, 29 Feb 2024 13:41:00 -0500 Subject: [PATCH 057/269] Disable klib signature clash checks (#391) These occasionally occur as a result of Compose compiler behavior, and are safe to disable (the first-party JetBrains Compose Gradle plugin also disables them). --- CHANGELOG.md | 8 ++++++++ .../app/cash/molecule/gradle/MoleculePlugin.kt | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87d76ef9..52e73f65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## [Unreleased] +New: +- + +Changed: +- Disable klib signature clash checks for JS compilations. These occasionally occur as a result of Compose compiler behavior, and are safe to disable (the first-party JetBrains Compose Gradle plugin also disables them). + +Fixed: +- ## [1.4.1] - 2024-02-28 diff --git a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt index c2a80e75..623643c1 100644 --- a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt +++ b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt @@ -26,6 +26,8 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.js +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.wasm import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_MAIN_SOURCE_SET_NAME import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact import org.jetbrains.kotlin.gradle.plugin.SubpluginOption @@ -131,6 +133,21 @@ class MoleculePlugin : KotlinCompilerPluginSupportPlugin { } override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider> { + when (kotlinCompilation.platformType) { + js, wasm -> { + // The Compose compiler sometimes chooses to emit a duplicate signature rather than looking + // for an existing one. This occurs on all targets, but JS and WASM (which currently uses + // the JS compiler) have an explicit check for this. We disable this check which is deemed + // safe as the first-party JB Compose plugin does the same thing. + // https://github.com/JetBrains/compose-multiplatform/issues/3418#issuecomment-1971555314 + kotlinCompilation.compilerOptions.configure { + freeCompilerArgs.add("-Xklib-enable-signature-clash-checks=false") + } + } + + else -> {} + } + return kotlinCompilation.target.project.provider { emptyList() } } } From 02d8d6e36572d04dcad24a7ab35acf9f94a7b458 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Thu, 29 Feb 2024 13:49:54 -0500 Subject: [PATCH 058/269] Add PR template (#392) --- .github/pull_request_template.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..e60d0bae --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,3 @@ +--- + +- [ ] `CHANGELOG.md`'s "Unreleased" section has been updated, if applicable. From 8defc55315ebc39f84bf58ff5a1f5675fd6e05fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 19:07:14 +0000 Subject: [PATCH 059/269] Update dependency com.android.tools.build:gradle to v8.3.0 (#393) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fdd924b7..717751c9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.2.2" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } From cd813484de37eef068afac87c402493a156d83c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 19:02:19 -0500 Subject: [PATCH 060/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.2.1 (#394) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 717751c9..7cf4935e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,7 +41,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.14.0" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.0" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.11" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } From 6a9653a7f1f79028e1becee71a62ba67233ca3a4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 19:30:11 +0000 Subject: [PATCH 061/269] Update dependency org.jetbrains.dokka:dokka-gradle-plugin to v1.9.20 (#395) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7cf4935e..baf219b6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.8.1" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } -dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.10" } +dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.20" } buildConfig-plugin = "com.github.gmazzo:gradle-buildconfig-plugin:3.1.0" From 90d13a58491786713061113de03a685281cf4695 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 16:19:47 +0000 Subject: [PATCH 062/269] Update dependency app.cash.turbine:turbine to v1.1.0 (#397) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index baf219b6..7b1f1669 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -55,4 +55,4 @@ squareup-retrofit-converter-scalars = { module = "com.squareup.retrofit2:convert squareup-retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "squareup-retrofit" } assertk = "com.willowtreeapps.assertk:assertk:0.28.0" -turbine = { module = "app.cash.turbine:turbine", version = "1.0.0" } +turbine = { module = "app.cash.turbine:turbine", version = "1.1.0" } From f2cdf8c665a58f38f1bec0c552dc5da087cc092d Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 6 Mar 2024 11:31:37 -0500 Subject: [PATCH 063/269] Remove explicit JS IR opt-in property (#398) It is the default now --- gradle.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 378030ce..e047d74a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -35,7 +35,6 @@ android.defaults.buildfeatures.shaders=false # Signals to our own plugin that we are building within the repo. app.cash.molecule.internal=true -kotlin.js.compiler=ir kotlin.mpp.stability.nowarn=true # This is needed for the JB Compose runtime to link on native targets. They also use this flag From fce605b288b46b444deba928b3f7314cc4b55cc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 19:46:55 +0000 Subject: [PATCH 064/269] Update dependency androidx.compose:compose-bom to v2024.02.02 (#399) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7b1f1669..c101725d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.01" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.02" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.10" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From a1a8d0a4d45f7c8319feb8ce7270074f21db31d3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 07:09:15 -0500 Subject: [PATCH 065/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.12 (#401) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c101725d..d9eb24b4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.14.0" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.11" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.12" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } From 0d4e0e49d1e74d1cde6b81105dd8533ea2233cf0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 21:43:19 +0000 Subject: [PATCH 066/269] Update softprops/action-gh-release action to v2 (#402) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index dcfb4837..3b27dab3 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -27,7 +27,7 @@ jobs: uses: ffurrer2/extract-release-notes@v2 - name: Create release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: body: ${{ steps.release_notes.outputs.release_notes }} env: From d694a887779bbb49d3adfe515e4ae91b0045712a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 19:27:46 -0400 Subject: [PATCH 067/269] Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.28.0 (#403) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d9eb24b4..22d06a09 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibili ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.12" -maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.27.0" } +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.25.0" } From 6f0276efede5aa47bcf1c1fe4555b25a78e7ddc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 22:36:32 -0400 Subject: [PATCH 068/269] Update Kotlin/Compose (#400) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 22d06a09..1560ef70 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.8.0" -kotlin = "1.9.22" +kotlin = "1.9.23" jetbrains-compose = "1.6.0" @@ -23,7 +23,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.8.1" +jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.10.1" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } From 32b5b6503a373150543b67fa9a4c797dc8e06f6c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 22:37:03 -0400 Subject: [PATCH 069/269] Update dependency org.jetbrains.compose:compose-gradle-plugin to v1.6.1 (#404) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1560ef70..10372417 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ coroutine = "1.8.0" kotlin = "1.9.23" -jetbrains-compose = "1.6.0" +jetbrains-compose = "1.6.1" squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" From 1b25e438993cfccf1b25e98145c05ab8c0cc6ad5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 20:25:33 +0000 Subject: [PATCH 070/269] Update dependency com.android.tools.build:gradle to v8.3.1 (#405) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 10372417..9ea7976c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.9.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } From 9d5885bffe737a67be13bbaa6381c3c739216596 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 20:46:00 +0000 Subject: [PATCH 071/269] Update dependency com.squareup.retrofit2:converter-moshi to v2.10.0 (#406) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9ea7976c..f191dc2e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ kotlin = "1.9.23" jetbrains-compose = "1.6.1" squareup-okhttp = "4.12.0" -squareup-retrofit = "2.9.0" +squareup-retrofit = "2.10.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.1" } From e087ce15d016430342dc8d4dc50a3be16c7a028e Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 20 Mar 2024 15:16:01 -0400 Subject: [PATCH 072/269] Enable klib ABI dump (#407) --- gradle/libs.versions.toml | 2 +- .../api/molecule-runtime.klib.api | 37 +++++++++++++++++++ molecule-runtime/build.gradle | 4 ++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 molecule-runtime/api/molecule-runtime.klib.api diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f191dc2e..592899b5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotl kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.14.0" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.1" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.12" diff --git a/molecule-runtime/api/molecule-runtime.klib.api b/molecule-runtime/api/molecule-runtime.klib.api new file mode 100644 index 00000000..d4677504 --- /dev/null +++ b/molecule-runtime/api/molecule-runtime.klib.api @@ -0,0 +1,37 @@ +// Klib ABI Dump +// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, mingwX64, tvosArm64, tvosSimulatorArm64, tvosX64, wasmJs, watchosArm32, watchosArm64, watchosSimulatorArm64, watchosX64] +// Alias: ios => [iosArm64, iosSimulatorArm64, iosX64] +// Alias: macos => [macosArm64, macosX64] +// Alias: tvos => [tvosArm64, tvosSimulatorArm64, tvosX64] +// Rendering settings: +// - Signature version: 2 +// - Show manifest properties: true +// - Show declarations: true + +// Library unique name: +final const val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] +final enum class app.cash.molecule/RecompositionMode : kotlin/Enum { // app.cash.molecule/RecompositionMode|null[0] + enum entry ContextClock // app.cash.molecule/RecompositionMode.ContextClock|null[0] + enum entry Immediate // app.cash.molecule/RecompositionMode.Immediate|null[0] + final fun valueOf(kotlin/String): app.cash.molecule/RecompositionMode // app.cash.molecule/RecompositionMode.valueOf|valueOf#static(kotlin.String){}[0] + final fun values(): kotlin/Array // app.cash.molecule/RecompositionMode.values|values#static(){}[0] + final val entries // app.cash.molecule/RecompositionMode.entries|#static{}entries[0] + final fun (): kotlin.enums/EnumEntries // app.cash.molecule/RecompositionMode.entries.|#static(){}[0] +} +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin.coroutines/CoroutineContext =..., kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin.coroutines/CoroutineContext =..., kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] +// Targets: [ios, macos, tvos] +final const val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] +// Targets: [ios, macos, tvos] +final object app.cash.molecule/DisplayLinkClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/DisplayLinkClock|null[0] + final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/DisplayLinkClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] +} +// Targets: [js, wasmJs] +final const val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] +// Targets: [js, wasmJs] +final object app.cash.molecule/WindowAnimationFrameClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/WindowAnimationFrameClock|null[0] + final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/WindowAnimationFrameClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] +} diff --git a/molecule-runtime/build.gradle b/molecule-runtime/build.gradle index 4f838bb0..b854561d 100644 --- a/molecule-runtime/build.gradle +++ b/molecule-runtime/build.gradle @@ -164,6 +164,10 @@ android { } } +apiValidation { + klib.enabled = true +} + spotless { kotlin { targetExclude( From 2d0878d13b86c9b1db1b2913979fe3a06f26ffbe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 19:37:23 +0000 Subject: [PATCH 073/269] Update dependency androidx.compose:compose-bom to v2024.03.00 (#409) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 592899b5..fe95e4f7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.02.02" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.03.00" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.10" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From e07e24f863fb4d20d37ec34a9b06a1fe43bd4e89 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 20:00:04 +0000 Subject: [PATCH 074/269] Update dependency androidx.compose.compiler:compiler to v1.5.11 (#408) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fe95e4f7..f97286d7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.03.00" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.10" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.11" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" From 3f76671f5a8b541a58c0c618cf38f17eec5cb08b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 17:06:49 +0000 Subject: [PATCH 075/269] Update dependency gradle to v8.7 (#410) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 509c4a29..20db9ad5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From ae9ffe7ea5c69822d638f03c7871d0ce179bef67 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 27 Mar 2024 10:01:20 -0400 Subject: [PATCH 076/269] Prepare version 1.4.2 --- CHANGELOG.md | 19 +++++++++++++++---- README.md | 3 ++- gradle.properties | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52e73f65..4b2079a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,23 @@ ## [Unreleased] New: -- +- ... Changed: -- Disable klib signature clash checks for JS compilations. These occasionally occur as a result of Compose compiler behavior, and are safe to disable (the first-party JetBrains Compose Gradle plugin also disables them). +- ... Fixed: -- +- ... + + +## [1.4.2] - 2024-03-27 +New: +- Support for Kotlin 1.9.23 + +Changed: +- Disable klib signature clash checks for JS compilations. These occasionally occur as a result of Compose compiler behavior, and are safe to disable (the first-party JetBrains Compose Gradle plugin also disables them). + +This version works with Kotlin 1.9.23 by default. ## [1.4.1] - 2024-02-28 @@ -240,7 +250,8 @@ Initial release -[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.1...HEAD +[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.2...HEAD +[1.4.2]: https://github.com/cashapp/molecule/releases/tag/1.4.2 [1.4.1]: https://github.com/cashapp/molecule/releases/tag/1.4.1 [1.4.0]: https://github.com/cashapp/molecule/releases/tag/1.4.0 [1.3.2]: https://github.com/cashapp/molecule/releases/tag/1.3.2 diff --git a/README.md b/README.md index 99a637c3..6dd6f5b4 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.1' + classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.2' } } @@ -183,6 +183,7 @@ certain versions of Kotlin. | Kotlin | Molecule | |--------|----------------| +| 1.9.23 | 1.4.2 | | 1.9.22 | 1.3.2 - 1.4.1 | | 1.9.21 | 1.3.1 | | 1.9.20 | 1.3.0 | diff --git a/gradle.properties b/gradle.properties index e047d74a..ebad6341 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.5.0-SNAPSHOT +VERSION_NAME=1.4.2 SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 16d120d792fd37b4485549b09693960a8ae4e25f Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 27 Mar 2024 10:01:45 -0400 Subject: [PATCH 077/269] Prepare next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ebad6341..e047d74a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.4.2 +VERSION_NAME=1.5.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 667c56b5e74ec8bc42274d613476f8944d11194c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 23:53:14 +0000 Subject: [PATCH 078/269] Update squareup.retrofit to v2.11.0 (#412) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f97286d7..ffd26e9d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ kotlin = "1.9.23" jetbrains-compose = "1.6.1" squareup-okhttp = "4.12.0" -squareup-retrofit = "2.10.0" +squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.1" } From 8b9d8390a1b6db1788eabb4ebb70c8c01fd69781 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 14:09:46 +0000 Subject: [PATCH 079/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.13 (#413) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ffd26e9d..76c3e90e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.1" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.12" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.13" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From f7d7b4abe59a8fef9a13fc7ae66ce45c3ceec3ba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Apr 2024 20:11:09 +0000 Subject: [PATCH 080/269] Update dependency androidx.compose:compose-bom to v2024.04.00 (#414) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 76c3e90e..53afe107 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.03.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.04.00" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.11" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 84bf505f3a8d84996ed00270157e5b82e28daae0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 Apr 2024 07:37:22 -0400 Subject: [PATCH 081/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.15.0-Beta.2 (#415) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 53afe107..eec91ade 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotl kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.1" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.13" From 90856782fe287fa6680b5438d035f1d9af4e545b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 00:10:02 -0400 Subject: [PATCH 082/269] Update dependency com.android.tools.build:gradle to v8.3.2 (#418) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eec91ade..eab62b85 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } From c0f4265e27c83f65e1167dcbfcb453829da12af3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 19:31:41 +0000 Subject: [PATCH 083/269] Update dependency org.jetbrains.compose:compose-gradle-plugin to v1.6.2 (#419) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eab62b85..e0a5ec5a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ coroutine = "1.8.0" kotlin = "1.9.23" -jetbrains-compose = "1.6.1" +jetbrains-compose = "1.6.2" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From cb1e57842b74be27b6778cc8ea9afae92b7182c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 15:03:36 -0400 Subject: [PATCH 084/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.14 (#420) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e0a5ec5a..31e08b14 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.13" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.14" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 66f55d72503861b4ccb0da9a4df661262d6babd2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 23:08:59 +0000 Subject: [PATCH 085/269] Update gradle/wrapper-validation-action action to v3 (#421) * Update gradle/wrapper-validation-action action to v3 * Update gradle-wrapper.yaml --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- .github/workflows/gradle-wrapper.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper.yaml b/.github/workflows/gradle-wrapper.yaml index c37e4f93..5b187541 100644 --- a/.github/workflows/gradle-wrapper.yaml +++ b/.github/workflows/gradle-wrapper.yaml @@ -12,4 +12,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: gradle/wrapper-validation-action@v2 + - uses: gradle/actions/wrapper-validation@v3 From 205b1823566ca2ca11f3b49c91d547e17e0ac522 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 14 Apr 2024 01:27:17 +0000 Subject: [PATCH 086/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.15 (#422) * Update dependency io.nlopez.compose.rules:ktlint to v0.3.15 * Use mutableIntStateOf --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 2 +- .../src/main/kotlin/com/example/CountToThree.kt | 4 ++-- .../app/cash/molecule/MoleculeStateFlowTest.kt | 10 +++++----- .../kotlin/app/cash/molecule/MoleculeTest.kt | 12 ++++++------ .../example/molecule/viewmodel/presentationLogic.kt | 3 ++- .../src/main/java/com/example/molecule/presenter.kt | 3 ++- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 31e08b14..0b54dfd5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.14" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.15" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } diff --git a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt index 05e9d824..8fb975f7 100644 --- a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt +++ b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt @@ -18,14 +18,14 @@ package com.example import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import kotlinx.coroutines.delay @Composable fun countToThree(): Int { - var count by remember { mutableStateOf(1) } + var count by remember { mutableIntStateOf(1) } LaunchedEffect(Unit) { delay(100) diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt index 4142cc0d..51fee0ac 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt @@ -18,7 +18,7 @@ package app.cash.molecule import androidx.compose.runtime.BroadcastFrameClock import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.Snapshot @@ -52,7 +52,7 @@ class MoleculeStateFlowTest { val scope = CoroutineScope(coroutineContext + job + clock) val flow = scope.launchMolecule(ContextClock) { - var count by remember { mutableStateOf(0) } + var count by remember { mutableIntStateOf(0) } LaunchedEffect(Unit) { while (true) { delay(100) @@ -109,7 +109,7 @@ class MoleculeStateFlowTest { // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} - var count by mutableStateOf(0) + var count by mutableIntStateOf(0) val flow = scope.launchMolecule(ContextClock) { println("Sup $count") if (count == 1) { @@ -162,7 +162,7 @@ class MoleculeStateFlowTest { val scope = this + job val flow = scope.launchMolecule(Immediate) { - var count by remember { mutableStateOf(0) } + var count by remember { mutableIntStateOf(0) } LaunchedEffect(Unit) { while (true) { delay(100) @@ -195,7 +195,7 @@ class MoleculeStateFlowTest { val runtimeException = object : RuntimeException() {} val exceptionHandler = RecordingExceptionHandler() - var count by mutableStateOf(0) + var count by mutableIntStateOf(0) supervisorScope { var flow: StateFlow? = null diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt index 5ab29a54..af65ec0b 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt @@ -20,7 +20,7 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MonotonicFrameClock import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue @@ -61,7 +61,7 @@ class MoleculeTest { var value: Int? = null scope.launchMolecule(ContextClock, emitter = { value = it }) { - var count by remember { mutableStateOf(0) } + var count by remember { mutableIntStateOf(0) } LaunchedEffect(Unit) { while (true) { delay(100) @@ -119,7 +119,7 @@ class MoleculeTest { // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} - var count by mutableStateOf(0) + var count by mutableIntStateOf(0) scope.launchMolecule(ContextClock, emitter = { value = it }) { if (count == 1) { throw runtimeException @@ -190,7 +190,7 @@ class MoleculeTest { // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} - var count by mutableStateOf(0) + var count by mutableIntStateOf(0) scope.launchMolecule( ContextClock, emitter = { @@ -247,7 +247,7 @@ class MoleculeTest { val job = launch { moleculeFlow(mode = Immediate) { - var count by remember { mutableStateOf(0) } + var count by remember { mutableIntStateOf(0) } LaunchedEffect(Unit) { while (true) { delay(100) @@ -297,7 +297,7 @@ class MoleculeTest { // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} - var count by mutableStateOf(0) + var count by mutableIntStateOf(0) launch { val exception = runCatching { moleculeFlow(mode = Immediate) { diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt index e589f247..37882bd6 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt @@ -18,6 +18,7 @@ package com.example.molecule.viewmodel import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -47,7 +48,7 @@ fun pupperPicsPresenter(events: Flow, service: PupperPicsService): Model var breeds: List by remember { mutableStateOf(emptyList()) } var currentBreed: String? by remember { mutableStateOf(null) } var currentUrl: String? by remember { mutableStateOf(null) } - var fetchId: Int by remember { mutableStateOf(0) } + var fetchId: Int by remember { mutableIntStateOf(0) } // Grab the list of breeds and sets the current selection to the first in the list. // Errors are ignored in this sample. diff --git a/sample/src/main/java/com/example/molecule/presenter.kt b/sample/src/main/java/com/example/molecule/presenter.kt index e56754c1..62344097 100644 --- a/sample/src/main/java/com/example/molecule/presenter.kt +++ b/sample/src/main/java/com/example/molecule/presenter.kt @@ -18,6 +18,7 @@ package com.example.molecule import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -39,7 +40,7 @@ fun counterPresenter( events: Flow, randomService: RandomService, ): CounterModel { - var count by remember { mutableStateOf(0) } + var count by remember { mutableIntStateOf(0) } var loading by remember { mutableStateOf(false) } LaunchedEffect(Unit) { From 9f8e6c4754bd462bf46f9860476418b9d45febea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:25:38 -0400 Subject: [PATCH 087/269] Update dependency androidx.compose:compose-bom to v2024.04.01 (#424) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0b54dfd5..c92e2609 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.04.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.04.01" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.11" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 5716e84e6091a38437f5744acc18c02dd1af9e37 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 20:52:55 +0000 Subject: [PATCH 088/269] Update dependency androidx.compose.compiler:compiler to v1.5.12 (#423) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c92e2609..b29c8055 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.04.01" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.11" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.12" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" From c198922db7d860b5dcf3a6a7797ea59974086293 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 17:59:35 -0400 Subject: [PATCH 089/269] Update dependency androidx.core:core-ktx to v1.13.0 (#426) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b29c8055..1335852c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.2" } -androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" } +androidx-core = { module = "androidx.core:core-ktx", version = "1.13.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } From 8b714c31359568da4b5f6ca3da36e6b9c2f59ecc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 17:59:43 -0400 Subject: [PATCH 090/269] Update dependency androidx.activity:activity-compose to v1.9.0 (#425) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1335852c..c3ff572c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ squareup-retrofit = "2.11.0" android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } -androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.8.2" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.04.01" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.12" From 2269a408de13f71d9abb88f3b59aea1363e3935c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 22:42:32 +0000 Subject: [PATCH 091/269] Update dependency com.willowtreeapps.assertk:assertk to v0.28.1 (#427) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c3ff572c..7615ddf7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -54,5 +54,5 @@ squareup-retrofit-client = { module = "com.squareup.retrofit2:retrofit", version squareup-retrofit-converter-scalars = { module = "com.squareup.retrofit2:converter-scalars", version.ref = "squareup-retrofit" } squareup-retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "squareup-retrofit" } -assertk = "com.willowtreeapps.assertk:assertk:0.28.0" +assertk = "com.willowtreeapps.assertk:assertk:0.28.1" turbine = { module = "app.cash.turbine:turbine", version = "1.1.0" } From 5e2d5b979b6816567d305b5b3191a68b0dab6cdf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 07:20:23 -0400 Subject: [PATCH 092/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.16 (#428) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7615ddf7..6bfac20f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.15" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.16" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From e0ae5c3f9d5d4d8e2f079924f1ab31376015e2b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 20:41:47 -0400 Subject: [PATCH 093/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.17 (#429) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6bfac20f..87ea574f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.16" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.17" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 40a2cc99160ed69d2e5120c29233dfe71f8cbeb5 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Wed, 24 Apr 2024 19:53:53 +0800 Subject: [PATCH 094/269] Speed up CI (#431) --- .github/workflows/build.yaml | 11 +++++++++-- .github/workflows/release.yaml | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a5041d0b..6c3f5438 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -11,15 +11,22 @@ on: jobs: build: - runs-on: macos-latest + runs-on: ubuntu-latest steps: + # https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/ + - name: Enable KVM group perms + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + ls /dev/kvm - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 20 - + - uses: gradle/actions/setup-gradle@v3 - run: ./gradlew build assembleAndroidTest dokkaHtmlMultiModule - name: Run Tests diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3b27dab3..8f74babf 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -15,7 +15,7 @@ jobs: with: distribution: 'zulu' java-version: 20 - + - uses: gradle/actions/setup-gradle@v3 - run: ./gradlew publish dokkaHtmlMultiModule env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} From 7e9727a16754b40ab9a18518c833fb9d0cd60ec8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Apr 2024 16:53:40 +0000 Subject: [PATCH 095/269] Update dependency org.jetbrains.compose.compiler:compiler to v1.5.10.2 (#433) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 87ea574f..7c36ca3a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.10.1" +jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.10.2" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } From 7994325cf85668d0dd873eb68d67d19ebc365ee5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Apr 2024 07:46:27 -0400 Subject: [PATCH 096/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.18 (#434) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7c36ca3a..b701d4b6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.17" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.18" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From c64d77bf5c373729366a64e7e90851678f6d402c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 08:00:44 -0400 Subject: [PATCH 097/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.19 (#435) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b701d4b6..d29b1c6d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.18" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.19" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 223fa1bbe2b93f012a3ef3b6ec9cb816e0c2d564 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 16:16:50 -0400 Subject: [PATCH 098/269] Update dependency com.android.tools.build:gradle to v8.4.0 (#436) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d29b1c6d..797db61a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.3.2" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.4.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } From 7b49de0e3f26e0e8360b683bbc3ed0a071e88413 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 19:29:26 +0000 Subject: [PATCH 099/269] Update dependency androidx.compose.compiler:compiler to v1.5.13 (#437) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 797db61a..dbe77dbd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.04.01" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.12" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.13" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" From e9f005888bdd8d95ef06a9a0a5945766ae92a9b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 19:31:24 +0000 Subject: [PATCH 100/269] Update dependency androidx.core:core-ktx to v1.13.1 (#438) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dbe77dbd..80736e78 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.4.0" } -androidx-core = { module = "androidx.core:core-ktx", version = "1.13.0" } +androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } From 20ba0ba1e6e760a1e8760144cea7821f1fba2c75 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 19:16:46 -0400 Subject: [PATCH 101/269] Update dependency androidx.compose:compose-bom to v2024.05.00 (#439) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 80736e78..480a4051 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.04.01" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.05.00" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.13" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 215591e2b986b7feeb4b05ccfc8c816e28632350 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 10:07:25 -0400 Subject: [PATCH 102/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.20 (#440) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 480a4051..d763eaf3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.19" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.20" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 15f2716f8e01a805f245dd282dd0fc50c021c398 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 08:10:13 -0400 Subject: [PATCH 103/269] Update coroutine to v1.8.1 (#443) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d763eaf3..40805782 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ compileSdk = "34" minSdk = "21" -coroutine = "1.8.0" +coroutine = "1.8.1" kotlin = "1.9.23" From 62c7fbe6aec7b321ccbaa8c18be6489b3b4adddb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 07:56:51 -0400 Subject: [PATCH 104/269] Update dependency io.nlopez.compose.rules:ktlint to v0.3.21 (#444) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 40805782..017a5a3a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.20" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.21" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 4f8583fa53454f29fe404346b274ada91d9b1a27 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 13:55:37 -0400 Subject: [PATCH 105/269] Update dependency androidx.compose.compiler:compiler to v1.5.14 (#445) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 017a5a3a..aa23d376 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.05.00" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.13" +androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.14" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" From fc2df32a96bc598f13bee0afec4dac1ab3aab282 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 13:16:26 +0000 Subject: [PATCH 106/269] Update Kotlin/Compose (#442) * Update Kotlin/Compose * Update api dump --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 4 ++-- molecule-runtime/api/molecule-runtime.klib.api | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa23d376..1544dfe7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.8.1" -kotlin = "1.9.23" +kotlin = "1.9.24" jetbrains-compose = "1.6.2" @@ -23,7 +23,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.10.2" +jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.13.3" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } diff --git a/molecule-runtime/api/molecule-runtime.klib.api b/molecule-runtime/api/molecule-runtime.klib.api index d4677504..b17f78d9 100644 --- a/molecule-runtime/api/molecule-runtime.klib.api +++ b/molecule-runtime/api/molecule-runtime.klib.api @@ -9,7 +9,6 @@ // - Show declarations: true // Library unique name: -final const val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] final enum class app.cash.molecule/RecompositionMode : kotlin/Enum { // app.cash.molecule/RecompositionMode|null[0] enum entry ContextClock // app.cash.molecule/RecompositionMode.ContextClock|null[0] enum entry Immediate // app.cash.molecule/RecompositionMode.Immediate|null[0] @@ -23,15 +22,16 @@ final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecul final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] -// Targets: [ios, macos, tvos] -final const val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] +final val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] // Targets: [ios, macos, tvos] final object app.cash.molecule/DisplayLinkClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/DisplayLinkClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/DisplayLinkClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } -// Targets: [js, wasmJs] -final const val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] +// Targets: [ios, macos, tvos] +final val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] // Targets: [js, wasmJs] final object app.cash.molecule/WindowAnimationFrameClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/WindowAnimationFrameClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/WindowAnimationFrameClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } +// Targets: [js, wasmJs] +final val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] From 0a6f8137792a9b54950451c13b9af7c7ba7526c1 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 15 May 2024 09:39:42 -0400 Subject: [PATCH 107/269] Prepare version 1.4.3 --- CHANGELOG.md | 18 ++++++++++++++---- README.md | 3 ++- gradle.properties | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b2079a6..0255c9b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,16 +3,25 @@ ## [Unreleased] New: -- ... +- Nothing yet! Changed: -- ... +- Nothing yet! Fixed: -- ... +- Nothing yet! + + +## [1.4.3] - 2024-05-15 + +New: +- Support for Kotlin 1.9.24 + +This version works with Kotlin 1.9.24 by default. ## [1.4.2] - 2024-03-27 + New: - Support for Kotlin 1.9.23 @@ -250,7 +259,8 @@ Initial release -[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.2...HEAD +[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.3...HEAD +[1.4.3]: https://github.com/cashapp/molecule/releases/tag/1.4.3 [1.4.2]: https://github.com/cashapp/molecule/releases/tag/1.4.2 [1.4.1]: https://github.com/cashapp/molecule/releases/tag/1.4.1 [1.4.0]: https://github.com/cashapp/molecule/releases/tag/1.4.0 diff --git a/README.md b/README.md index 6dd6f5b4..754d6b89 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.2' + classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.3' } } @@ -183,6 +183,7 @@ certain versions of Kotlin. | Kotlin | Molecule | |--------|----------------| +| 1.9.24 | 1.4.3 | | 1.9.23 | 1.4.2 | | 1.9.22 | 1.3.2 - 1.4.1 | | 1.9.21 | 1.3.1 | diff --git a/gradle.properties b/gradle.properties index e047d74a..31eaa5f8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.5.0-SNAPSHOT +VERSION_NAME=1.4.3 SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 34e57f70b1f7e7b08e9cd2ce6923e2f2b3be54b9 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 15 May 2024 09:40:35 -0400 Subject: [PATCH 108/269] Prepare next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 31eaa5f8..e047d74a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.4.3 +VERSION_NAME=1.5.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 8bf7e40c65ad884265a4cd05b6fed7b92ea042ab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 May 2024 15:34:36 -0400 Subject: [PATCH 109/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.1 (#447) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1544dfe7..0a27b1d5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.3.21" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.1" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 2246f40c842274426f578018e56febbe5c8879cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 01:56:26 +0000 Subject: [PATCH 110/269] Update dependency com.android.tools.build:gradle to v8.4.1 (#449) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0a27b1d5..7a1fff14 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.4.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.4.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } From e3cbd35d0ee5afc7bbf11159f68ee893af2a754d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 07:56:21 -0400 Subject: [PATCH 111/269] Update dependency org.jetbrains.compose:compose-gradle-plugin to v1.6.10 (#448) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7a1fff14..211bbcf6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ coroutine = "1.8.1" kotlin = "1.9.24" -jetbrains-compose = "1.6.2" +jetbrains-compose = "1.6.10" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From 8c2b1dc4141c9c79dfd2e3b4df96e957167114fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 08:38:32 -0400 Subject: [PATCH 112/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.2 (#451) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 211bbcf6..53fd6364 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.1" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.2" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 13bcc0cfecf1198599c30dd2f14ec17a8159f8fe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 07:18:29 -0400 Subject: [PATCH 113/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.3 (#452) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 53fd6364..5416caeb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.2" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.3" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From dd977a7cd28220daa9308863b40a8616739d0d3c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 14:36:16 +0000 Subject: [PATCH 114/269] Update dependency org.jetbrains.compose.compiler:compiler to v1.5.14 (#446) * Update dependency org.jetbrains.compose.compiler:compiler to v1.5.14 * API dump --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 2 +- molecule-runtime/api/molecule-runtime.klib.api | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5416caeb..a802b2b1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.13.3" +jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.14" jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } diff --git a/molecule-runtime/api/molecule-runtime.klib.api b/molecule-runtime/api/molecule-runtime.klib.api index b17f78d9..d4677504 100644 --- a/molecule-runtime/api/molecule-runtime.klib.api +++ b/molecule-runtime/api/molecule-runtime.klib.api @@ -9,6 +9,7 @@ // - Show declarations: true // Library unique name: +final const val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] final enum class app.cash.molecule/RecompositionMode : kotlin/Enum { // app.cash.molecule/RecompositionMode|null[0] enum entry ContextClock // app.cash.molecule/RecompositionMode.ContextClock|null[0] enum entry Immediate // app.cash.molecule/RecompositionMode.Immediate|null[0] @@ -22,16 +23,15 @@ final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecul final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] -final val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] +// Targets: [ios, macos, tvos] +final const val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] // Targets: [ios, macos, tvos] final object app.cash.molecule/DisplayLinkClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/DisplayLinkClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/DisplayLinkClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } -// Targets: [ios, macos, tvos] -final val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] +// Targets: [js, wasmJs] +final const val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] // Targets: [js, wasmJs] final object app.cash.molecule/WindowAnimationFrameClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/WindowAnimationFrameClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/WindowAnimationFrameClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } -// Targets: [js, wasmJs] -final val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] From 9bd3b3c67b5b2f586c85ae1692d601cb8d9b79d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 12:14:31 -0400 Subject: [PATCH 115/269] Migrate to Kotlin 2.0 and its built-in Compose plugin * Update Kotlin/Compose to v2 * Migrate to built-in Compose plugin * API dump --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- .gitignore | 3 + build-logic/build.gradle | 32 -- build-logic/settings.gradle | 12 - build.gradle | 8 +- gradle/libs.versions.toml | 12 +- kotlin-js-store/yarn.lock | 444 +++++++++--------- .../api/molecule-gradle-plugin.api | 15 - molecule-gradle-plugin/build.gradle | 63 --- molecule-gradle-plugin/gradle.properties | 2 - .../cash/molecule/gradle/MoleculeExtension.kt | 40 -- .../cash/molecule/gradle/MoleculePlugin.kt | 153 ------ .../src/test/fixtures/.gitignore | 2 - .../custom-compiler-coordinates/build.gradle | 30 -- .../settings.gradle | 7 - .../custom-compiler-invalid/build.gradle | 29 -- .../custom-compiler-invalid/settings.gradle | 7 - .../custom-compiler-version/build.gradle | 37 -- .../custom-compiler-version/settings.gradle | 7 - .../build.gradle | 31 -- .../settings.gradle | 7 - .../no-supported-plugin-fails/build.gradle | 20 - .../no-supported-plugin-fails/settings.gradle | 0 .../runtime-added-automatically/build.gradle | 44 -- .../gradle.properties | 7 - .../settings.gradle | 7 - .../main/kotlin/com/example/CountToThree.kt | 38 -- .../molecule/gradle/MoleculePluginTest.kt | 69 --- .../api/android/molecule-runtime.api | 1 - .../api/molecule-runtime.klib.api | 14 +- molecule-runtime/build.gradle | 2 +- .../app/cash/molecule/DisplayLinkClock.kt | 4 +- .../app/cash/molecule/DisplayLinkClock.kt | 38 +- .../app/cash/molecule/DisplayLinkClock.kt | 2 +- sample-viewmodel/build.gradle | 3 +- .../molecule/viewmodel/presentationLogic.kt | 2 +- sample/build.gradle | 11 +- .../java/com/example/molecule/presenter.kt | 2 +- settings.gradle | 7 - 38 files changed, 287 insertions(+), 925 deletions(-) delete mode 100644 build-logic/build.gradle delete mode 100644 build-logic/settings.gradle delete mode 100644 molecule-gradle-plugin/api/molecule-gradle-plugin.api delete mode 100644 molecule-gradle-plugin/build.gradle delete mode 100644 molecule-gradle-plugin/gradle.properties delete mode 100644 molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculeExtension.kt delete mode 100644 molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt delete mode 100644 molecule-gradle-plugin/src/test/fixtures/.gitignore delete mode 100644 molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/build.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/settings.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/build.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/settings.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/build.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/settings.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/build.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/settings.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/no-supported-plugin-fails/build.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/no-supported-plugin-fails/settings.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/build.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/gradle.properties delete mode 100644 molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/settings.gradle delete mode 100644 molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt delete mode 100644 molecule-gradle-plugin/src/test/java/app/cash/molecule/gradle/MoleculePluginTest.kt diff --git a/.gitignore b/.gitignore index eee14ae0..7c62f1da 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ build # Android local.properties +# Kotlin +.kotlin + # IntelliJ /.idea *.iml diff --git a/build-logic/build.gradle b/build-logic/build.gradle deleted file mode 100644 index c5d7351e..00000000 --- a/build-logic/build.gradle +++ /dev/null @@ -1,32 +0,0 @@ -buildscript { - dependencies { - classpath libs.kotlin.plugin - classpath libs.buildConfig.plugin - } - - repositories { - mavenCentral() - gradlePluginPortal() - } -} - -allprojects { - repositories { - mavenCentral() - google() - } - - plugins.withId('java-base') { - java { - toolchain { - languageVersion = JavaLanguageVersion.of(11) - } - } - } - - tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile).configureEach { task -> - task.kotlinOptions { - jvmTarget = '11' - } - } -} diff --git a/build-logic/settings.gradle b/build-logic/settings.gradle deleted file mode 100644 index 0592d95f..00000000 --- a/build-logic/settings.gradle +++ /dev/null @@ -1,12 +0,0 @@ -rootProject.name = 'build-logic' - -include(':molecule-gradle-plugin') -project(':molecule-gradle-plugin').projectDir = new File('../molecule-gradle-plugin') - -dependencyResolutionManagement { - versionCatalogs { - libs { - from(files('../gradle/libs.versions.toml')) - } - } -} diff --git a/build.gradle b/build.gradle index 4c1fb2de..6122e346 100644 --- a/build.gradle +++ b/build.gradle @@ -1,16 +1,12 @@ buildscript { dependencies { classpath libs.android.plugin - classpath libs.kotlin.plugin + classpath libs.kotlin.plugin.core + classpath libs.kotlin.plugin.compose classpath libs.maven.publish.plugin classpath libs.dokka.plugin classpath libs.spotless.plugin - classpath libs.buildConfig.plugin classpath libs.kotlinx.binaryCompatibilityValidator - - // Normally you would declare a version here, but we use dependency substitution in - // settings.gradle to use the version built from inside the repo. - classpath 'app.cash.molecule:molecule-gradle-plugin' } repositories { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a802b2b1..5bca9085 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,11 +3,8 @@ compileSdk = "34" minSdk = "21" coroutine = "1.8.1" - -kotlin = "1.9.24" - +kotlin = "2.0.0" jetbrains-compose = "1.6.10" - squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" @@ -23,17 +20,14 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.6.0" -jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.14" -jetbrains-compose-plugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jetbrains-compose" } jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.20" } -buildConfig-plugin = "com.github.gmazzo:gradle-buildconfig-plugin:3.1.0" - junit = { module = "junit:junit", version = "4.13.2" } -kotlin-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 95363515..397fad62 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -26,6 +26,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" @@ -44,13 +49,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.20": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" @@ -98,10 +108,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -"@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/json-schema@*", "@types/json-schema@^7.0.8": version "7.0.11" @@ -113,10 +123,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" @@ -131,10 +141,10 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" @@ -150,15 +160,15 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" @@ -179,72 +189,72 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-api-error" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.1.0": +"@webpack-cli/configtest@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== -"@webpack-cli/info@^2.0.1": +"@webpack-cli/info@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== -"@webpack-cli/serve@^2.0.3": +"@webpack-cli/serve@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== @@ -259,11 +269,6 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -272,10 +277,10 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== acorn@^8.7.1: version "8.8.2" @@ -392,15 +397,15 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== +browserslist@^4.21.10: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" buffer-from@^1.0.0: version "1.1.2" @@ -425,10 +430,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001449: - version "1.0.30001449" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz#a8d11f6a814c75c9ce9d851dc53eb1d1dfbcd657" - integrity sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw== +caniuse-lite@^1.0.30001587: + version "1.0.30001624" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001624.tgz#0ec4c8fa7a46e5b785477c70b38a56d0b10058eb" + integrity sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA== chalk@^4.1.0: version "4.1.2" @@ -562,7 +567,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4.3.4, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -609,10 +614,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.284: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== +electron-to-chromium@^1.4.668: + version "1.4.783" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz#933887165b8b6025a81663d2d97cf4b85cde27b2" + integrity sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ== emoji-regex@^8.0.0: version "8.0.0" @@ -624,15 +629,15 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -engine.io-parser@~5.0.3: - version "5.0.6" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.6.tgz#7811244af173e157295dec9b2718dfe42a64ef45" - integrity sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw== +engine.io-parser@~5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" + integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== -engine.io@~6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.1.tgz#e3f7826ebc4140db9bbaa9021ad6b1efb175878f" - integrity sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA== +engine.io@~6.5.2: + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -642,13 +647,13 @@ engine.io@~6.2.1: cookie "~0.4.1" cors "~2.8.5" debug "~4.3.1" - engine.io-parser "~5.0.3" - ws "~8.2.3" + engine.io-parser "~5.2.1" + ws "~8.11.0" -enhanced-resolve@^5.13.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== +enhanced-resolve@^5.16.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" + integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -673,6 +678,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -844,17 +854,16 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" glob@^7.1.3, glob@^7.1.7: version "7.2.3" @@ -868,12 +877,12 @@ glob@^7.1.3, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.2.10: +graceful-fs@^4.2.10, graceful-fs@^4.2.11: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1082,19 +1091,19 @@ karma-sourcemap-loader@0.4.0: dependencies: graceful-fs "^4.2.10" -karma-webpack@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" - integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== +karma-webpack@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.1.tgz#4eafd31bbe684a747a6e8f3e4ad373e53979ced4" + integrity sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ== dependencies: glob "^7.1.3" - minimatch "^3.0.4" + minimatch "^9.0.3" webpack-merge "^4.1.5" -karma@6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.2.tgz#a983f874cee6f35990c4b2dcc3d274653714de8e" - integrity sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ== +karma@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.3.tgz#763e500f99597218bbb536de1a14acc4ceea7ce8" + integrity sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q== dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -1115,7 +1124,7 @@ karma@6.4.2: qjobs "^1.2.0" range-parser "^1.2.1" rimraf "^3.0.2" - socket.io "^4.4.1" + socket.io "^4.7.2" source-map "^0.6.1" tmp "^0.2.1" ua-parser-js "^0.7.30" @@ -1210,6 +1219,20 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.3, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" @@ -1222,10 +1245,10 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== +mocha@10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" + integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -1234,13 +1257,12 @@ mocha@10.2.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -1264,11 +1286,6 @@ ms@2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -1279,10 +1296,10 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -node-releases@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" - integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -1378,10 +1395,10 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" @@ -1510,7 +1527,7 @@ schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^3.1.2: +schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -1566,42 +1583,45 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== +socket.io-adapter@~2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006" + integrity sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg== + dependencies: + debug "~4.3.4" + ws "~8.11.0" -socket.io-parser@~4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.2.tgz#1dd384019e25b7a3d374877f492ab34f2ad0d206" - integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw== +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -socket.io@^4.4.1: - version "4.5.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.4.tgz#a4513f06e87451c17013b8d13fdfaf8da5a86a90" - integrity sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ== +socket.io@^4.7.2: + version "4.7.5" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" + integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== dependencies: accepts "~1.3.4" base64id "~2.0.0" + cors "~2.8.5" debug "~4.3.2" - engine.io "~6.2.1" - socket.io-adapter "~2.4.0" - socket.io-parser "~4.2.1" + engine.io "~6.5.2" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" - integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== +source-map-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: - abab "^2.0.6" iconv-lite "^0.6.3" source-map-js "^1.0.2" @@ -1682,21 +1702,21 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.8" + terser "^5.26.0" -terser@^5.16.8: - version "5.19.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.1.tgz#dbd7231f224a9e2401d0f0959542ed74d76d340b" - integrity sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q== +terser@^5.26.0: + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -1730,10 +1750,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" - integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== +typescript@5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== ua-parser-js@^0.7.30: version "0.7.33" @@ -1750,13 +1770,13 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== +update-browserslist-db@^1.0.13: + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" @@ -1780,23 +1800,23 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.0.tgz#abc4b1f44b50250f2632d8b8b536cfe2f6257891" - integrity sha512-a7KRJnCxejFoDpYTOwzm5o21ZXMaNqtRlvS183XzGDUPRdVEzJNImcQokqYZ8BNTnk9DkKiuWxw75+DCCoZ26w== +webpack-cli@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.0" - "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.3" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" colorette "^2.0.14" commander "^10.0.1" cross-spawn "^7.0.3" @@ -1827,34 +1847,34 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.82.0: - version "5.82.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.0.tgz#3c0d074dec79401db026b4ba0fb23d6333f88e7d" - integrity sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg== +webpack@5.91.0: + version "5.91.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" + integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.13.0" + enhanced-resolve "^5.16.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.2" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" webpack-sources "^3.2.3" which@^1.2.1: @@ -1895,10 +1915,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== y18n@^5.0.5: version "5.0.8" diff --git a/molecule-gradle-plugin/api/molecule-gradle-plugin.api b/molecule-gradle-plugin/api/molecule-gradle-plugin.api deleted file mode 100644 index 498ddf78..00000000 --- a/molecule-gradle-plugin/api/molecule-gradle-plugin.api +++ /dev/null @@ -1,15 +0,0 @@ -public abstract interface class app/cash/molecule/gradle/MoleculeExtension { - public abstract fun getKotlinCompilerPlugin ()Lorg/gradle/api/provider/Property; -} - -public final class app/cash/molecule/gradle/MoleculePlugin : org/jetbrains/kotlin/gradle/plugin/KotlinCompilerPluginSupportPlugin { - public fun ()V - public synthetic fun apply (Ljava/lang/Object;)V - public fun apply (Lorg/gradle/api/Project;)V - public fun applyToCompilation (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Lorg/gradle/api/provider/Provider; - public fun getCompilerPluginId ()Ljava/lang/String; - public fun getPluginArtifact ()Lorg/jetbrains/kotlin/gradle/plugin/SubpluginArtifact; - public fun getPluginArtifactForNative ()Lorg/jetbrains/kotlin/gradle/plugin/SubpluginArtifact; - public fun isApplicable (Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;)Z -} - diff --git a/molecule-gradle-plugin/build.gradle b/molecule-gradle-plugin/build.gradle deleted file mode 100644 index 821f1dea..00000000 --- a/molecule-gradle-plugin/build.gradle +++ /dev/null @@ -1,63 +0,0 @@ -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'java-gradle-plugin' -apply plugin: 'com.github.gmazzo.buildconfig' - -// This module is included in two projects: -// - In the root project where it's released as one of our artifacts -// - In build-logic project where we can use it for the test-schema and samples. -// -// We only want to publish when it's being built in the root project. -if (rootProject.name == 'molecule') { - apply plugin: 'com.vanniktech.maven.publish' - apply plugin: 'org.jetbrains.dokka' - apply plugin: 'org.jetbrains.kotlinx.binary-compatibility-validator' -} else { - // Move the build directory when included in build-logic so as to not poison the real build. - // If we don't there's a chance incorrect build config values (configured below) will be used. - layout.buildDirectory = new File(rootDir, "build/molecule-gradle-plugin") -} - -dependencies { - compileOnly gradleApi() - api libs.kotlin.plugin - - testImplementation libs.junit - testImplementation libs.assertk - testImplementation gradleTestKit() -} - -test { - dependsOn(':molecule-gradle-plugin:publishAllPublicationsToInstallLocallyRepository') - dependsOn(':molecule-runtime:publishAllPublicationsToInstallLocallyRepository') - - inputs.dir('src/test/fixtures') - - testLogging { - if (System.getenv("CI") == "true") { - events = ["failed", "skipped", "passed"] - } - exceptionFormat "full" - } -} - -gradlePlugin { - plugins { - molecule { - id = "app.cash.molecule" - displayName = "Molecule" - description = "Molecule Gradle plugin" - implementationClass = "app.cash.molecule.gradle.MoleculePlugin" - } - } -} - -buildConfig { - useKotlinOutput { - internalVisibility = true - topLevelConstants = true - } - - packageName('app.cash.molecule.gradle') - buildConfigField("String", "composeCompilerVersion", "\"${libs.jetbrains.compose.compiler.get().version}\"") - buildConfigField("String", "moleculeVersion", "\"${project.version}\"") -} diff --git a/molecule-gradle-plugin/gradle.properties b/molecule-gradle-plugin/gradle.properties deleted file mode 100644 index f7d78e6d..00000000 --- a/molecule-gradle-plugin/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -POM_ARTIFACT_ID=molecule-gradle-plugin -POM_NAME=Molecule Gradle plugin diff --git a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculeExtension.kt b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculeExtension.kt deleted file mode 100644 index 88687e9d..00000000 --- a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculeExtension.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package app.cash.molecule.gradle - -import org.gradle.api.provider.Property - -interface MoleculeExtension { - /** - * The version of the JetBrains Compose compiler to use, or a Maven coordinate triple of - * the custom Compose compiler to use. - * - * Example: using a custom version of the JetBrains Compose compiler - * ```kotlin - * molecule { - * kotlinCompilerPlugin.set("1.4.8") - * } - * ``` - * - * Example: using a custom Maven coordinate for the Compose compiler - * ```kotlin - * molecule { - * kotlinCompilerPlugin.set("com.example:custom-compose-compiler:1.0.0") - * } - * ``` - */ - val kotlinCompilerPlugin: Property -} diff --git a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt b/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt deleted file mode 100644 index 623643c1..00000000 --- a/molecule-gradle-plugin/src/main/java/app/cash/molecule/gradle/MoleculePlugin.kt +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2021 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package app.cash.molecule.gradle - -import javax.inject.Inject -import org.gradle.api.Project -import org.gradle.api.model.ObjectFactory -import org.gradle.api.plugins.JavaPlugin.API_CONFIGURATION_NAME -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.js -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.wasm -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_MAIN_SOURCE_SET_NAME -import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact -import org.jetbrains.kotlin.gradle.plugin.SubpluginOption - -private const val EXTENSION_NAME = "molecule" -private const val MOLECULE_RUNTIME = "app.cash.molecule:molecule-runtime:$moleculeVersion" - -private abstract class MoleculeExtensionImpl -@Inject constructor(objectFactory: ObjectFactory) : MoleculeExtension { - override val kotlinCompilerPlugin: Property = - objectFactory.property(String::class.java) - .convention(composeCompilerVersion) -} - -class MoleculePlugin : KotlinCompilerPluginSupportPlugin { - private lateinit var extension: MoleculeExtension - - override fun apply(target: Project) { - super.apply(target) - - extension = target.extensions.create( - MoleculeExtension::class.java, - EXTENSION_NAME, - MoleculeExtensionImpl::class.java, - ) - - if (target.isInternal() && target.path == ":molecule-runtime") { - // Being lazy and using our own plugin to configure the Compose compiler on our runtime. - // Bail out because otherwise we create a circular dependency reference on ourselves! - return - } - - target.pluginManager.withPlugin("org.jetbrains.compose") { - throw IllegalStateException( - """ - |The Molecule Gradle plugin cannot be applied to the same project as the JetBrains Compose Gradle plugin. - | - |Both plugins attempt to configure the Compose compiler plugin which is incompatible. To use Molecule - |within a JetBrains Compose project you only need to add the runtime dependency: - | - | kotlin { - | sourceSets { - | commonMain { - | dependencies { - | implementation("$MOLECULE_RUNTIME") - | } - | } - | } - | } - """.trimMargin(), - ) - } - - target.afterEvaluate { - val android = target.extensions.findByType(KotlinAndroidProjectExtension::class.java) - val jvm = target.extensions.findByType(KotlinJvmProjectExtension::class.java) - val multiplatform = target.extensions.findByType(KotlinMultiplatformExtension::class.java) - - val dependency: Any = if (target.isInternal()) { - target.dependencies.project(mapOf("path" to ":molecule-runtime")) - } else { - MOLECULE_RUNTIME - } - - if (jvm != null || android != null) { - target.dependencies.add(API_CONFIGURATION_NAME, dependency) - } else if (multiplatform != null) { - multiplatform.sourceSets.getByName(COMMON_MAIN_SOURCE_SET_NAME) { sourceSet -> - sourceSet.dependencies { - api(dependency) - } - } - } else { - throw IllegalStateException("No supported Kotlin plugin detected!") - } - } - } - - override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true - - override fun getCompilerPluginId(): String = "app.cash.molecule" - - override fun getPluginArtifact(): SubpluginArtifact { - val plugin = extension.kotlinCompilerPlugin.get() - val parts = plugin.split(":") - return when (parts.size) { - 1 -> SubpluginArtifact("org.jetbrains.compose.compiler", "compiler", parts[0]) - - 3 -> SubpluginArtifact(parts[0], parts[1], parts[2]) - - else -> error( - """ - |Illegal format of '$EXTENSION_NAME.${MoleculeExtension::kotlinCompilerPlugin.name}' property. - |Expected format: either '' or '::' - |Actual value: '$plugin' - """.trimMargin(), - ) - } - } - - private fun Project.isInternal(): Boolean { - return properties["app.cash.molecule.internal"].toString() == "true" - } - - override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider> { - when (kotlinCompilation.platformType) { - js, wasm -> { - // The Compose compiler sometimes chooses to emit a duplicate signature rather than looking - // for an existing one. This occurs on all targets, but JS and WASM (which currently uses - // the JS compiler) have an explicit check for this. We disable this check which is deemed - // safe as the first-party JB Compose plugin does the same thing. - // https://github.com/JetBrains/compose-multiplatform/issues/3418#issuecomment-1971555314 - kotlinCompilation.compilerOptions.configure { - freeCompilerArgs.add("-Xklib-enable-signature-clash-checks=false") - } - } - - else -> {} - } - - return kotlinCompilation.target.project.provider { emptyList() } - } -} diff --git a/molecule-gradle-plugin/src/test/fixtures/.gitignore b/molecule-gradle-plugin/src/test/fixtures/.gitignore deleted file mode 100644 index 748ea61d..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -gradle -.gradle diff --git a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/build.gradle b/molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/build.gradle deleted file mode 100644 index 0ee6f108..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/build.gradle +++ /dev/null @@ -1,30 +0,0 @@ -buildscript { - dependencies { - classpath "app.cash.molecule:molecule-gradle-plugin:$moleculeVersion" - classpath libs.kotlin.plugin - } - - repositories { - maven { - url "file://${rootDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() - } -} - -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'app.cash.molecule' - -molecule { - // Use the AndroidX Compose compiler instead of JetBrains Compose compiler. - kotlinCompilerPlugin = libs.androidx.compose.compiler.get().toString() -} - -repositories { - maven { - url "file://${rootDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() -} diff --git a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/settings.gradle b/molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/settings.gradle deleted file mode 100644 index f348f383..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-coordinates/settings.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencyResolutionManagement { - versionCatalogs { - libs { - from(files('../../../../../gradle/libs.versions.toml')) - } - } -} diff --git a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/build.gradle b/molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/build.gradle deleted file mode 100644 index b25cf6f5..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -buildscript { - dependencies { - classpath "app.cash.molecule:molecule-gradle-plugin:$moleculeVersion" - classpath libs.kotlin.plugin - } - - repositories { - maven { - url "file://${rootDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() - } -} - -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'app.cash.molecule' - -molecule { - kotlinCompilerPlugin = 'wrong:format' -} - -repositories { - maven { - url "file://${rootDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() -} diff --git a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/settings.gradle b/molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/settings.gradle deleted file mode 100644 index f348f383..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-invalid/settings.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencyResolutionManagement { - versionCatalogs { - libs { - from(files('../../../../../gradle/libs.versions.toml')) - } - } -} diff --git a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/build.gradle b/molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/build.gradle deleted file mode 100644 index b80fce71..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -buildscript { - ext.kotlinVersion = '1.8.20' - - dependencies { - classpath "app.cash.molecule:molecule-gradle-plugin:$moleculeVersion" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" - } - - repositories { - maven { - url "file://${rootDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() - } -} - -if (kotlinVersion == libs.kotlin.plugin.get().version) { - throw new RuntimeException( - "This test requires a different version of Kotlin then the Molecule build") -} - -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'app.cash.molecule' - -molecule { - // Use the JetBrains Compose compiler version for the version of Kotlin used by this project. - kotlinCompilerPlugin = '1.4.8' -} - -repositories { - maven { - url "file://${rootDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() -} diff --git a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/settings.gradle b/molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/settings.gradle deleted file mode 100644 index f348f383..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/custom-compiler-version/settings.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencyResolutionManagement { - versionCatalogs { - libs { - from(files('../../../../../gradle/libs.versions.toml')) - } - } -} diff --git a/molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/build.gradle b/molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/build.gradle deleted file mode 100644 index 7c5d2a6c..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - dependencies { - classpath libs.jetbrains.compose.plugin - classpath "app.cash.molecule:molecule-gradle-plugin:$moleculeVersion" - } - repositories { - maven { - url "file://${projectDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - } -} - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.compose' -apply plugin: 'app.cash.molecule' - -repositories { - maven { - url "file://${projectDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() -} - -kotlin { - jvm() -} - -compose { - kotlinCompilerPlugin = libs.jetbrains.compose.compiler.get().version -} diff --git a/molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/settings.gradle b/molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/settings.gradle deleted file mode 100644 index 98939e6f..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/jetbrains-compose-plugin-fails/settings.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencyResolutionManagement { - versionCatalogs { - libs { - from(files("../../../../../gradle/libs.versions.toml")) - } - } -} diff --git a/molecule-gradle-plugin/src/test/fixtures/no-supported-plugin-fails/build.gradle b/molecule-gradle-plugin/src/test/fixtures/no-supported-plugin-fails/build.gradle deleted file mode 100644 index 19294a8c..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/no-supported-plugin-fails/build.gradle +++ /dev/null @@ -1,20 +0,0 @@ -buildscript { - dependencies { - classpath "app.cash.molecule:molecule-gradle-plugin:$moleculeVersion" - } - repositories { - maven { - url "file://${projectDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - } -} - -apply plugin: 'app.cash.molecule' - -repositories { - maven { - url "file://${projectDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() -} diff --git a/molecule-gradle-plugin/src/test/fixtures/no-supported-plugin-fails/settings.gradle b/molecule-gradle-plugin/src/test/fixtures/no-supported-plugin-fails/settings.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/build.gradle b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/build.gradle deleted file mode 100644 index 2ba0b571..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -buildscript { - dependencies { - classpath libs.android.plugin - classpath "app.cash.molecule:molecule-gradle-plugin:$moleculeVersion" - } - repositories { - maven { - url "file://${projectDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() - } -} - -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.android' -apply plugin: 'app.cash.molecule' - -repositories { - maven { - url "file://${projectDir.absolutePath}/../../../../../build/localMaven" - } - mavenCentral() - google() -} - -android { - namespace 'com.example' - - compileSdkVersion libs.versions.compileSdk.get().toInteger() - - defaultConfig { - minSdkVersion libs.versions.minSdk.get().toInteger() - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - kotlinOptions { - jvmTarget = '11' - } -} diff --git a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/gradle.properties b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/gradle.properties deleted file mode 100644 index c8651fed..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/gradle.properties +++ /dev/null @@ -1,7 +0,0 @@ -android.useAndroidX=true -android.enableJetifier=false -android.defaults.buildfeatures.buildconfig=false -android.defaults.buildfeatures.aidl=false -android.defaults.buildfeatures.renderscript=false -android.defaults.buildfeatures.resvalues=false -android.defaults.buildfeatures.shaders=false diff --git a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/settings.gradle b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/settings.gradle deleted file mode 100644 index 98939e6f..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/settings.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencyResolutionManagement { - versionCatalogs { - libs { - from(files("../../../../../gradle/libs.versions.toml")) - } - } -} diff --git a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt b/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt deleted file mode 100644 index 8fb975f7..00000000 --- a/molecule-gradle-plugin/src/test/fixtures/runtime-added-automatically/src/main/kotlin/com/example/CountToThree.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2021 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.example - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import kotlinx.coroutines.delay - -@Composable -fun countToThree(): Int { - var count by remember { mutableIntStateOf(1) } - - LaunchedEffect(Unit) { - delay(100) - count++ - delay(100) - count++ - } - - return count -} diff --git a/molecule-gradle-plugin/src/test/java/app/cash/molecule/gradle/MoleculePluginTest.kt b/molecule-gradle-plugin/src/test/java/app/cash/molecule/gradle/MoleculePluginTest.kt deleted file mode 100644 index 33f5013e..00000000 --- a/molecule-gradle-plugin/src/test/java/app/cash/molecule/gradle/MoleculePluginTest.kt +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2021 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package app.cash.molecule.gradle - -import assertk.assertThat -import assertk.assertions.contains -import java.io.File -import org.gradle.testkit.runner.GradleRunner -import org.junit.Test - -class MoleculePluginTest { - @Test fun runtimeAddedAutomatically() { - createRunner("runtime-added-automatically").build() - } - - @Test fun noSupportedPluginFails() { - val result = createRunner("no-supported-plugin-fails").buildAndFail() - assertThat(result.output).contains("No supported Kotlin plugin detected!") - } - - @Test fun jetbrainsComposePluginFails() { - val result = createRunner("jetbrains-compose-plugin-fails").buildAndFail() - assertThat(result.output).contains( - "The Molecule Gradle plugin cannot be applied to the same project as the JetBrains Compose Gradle plugin.", - ) - } - - @Test fun customCompilerCoordinates() { - createRunner("custom-compiler-coordinates").build() - } - - @Test fun customCompilerInvalid() { - val result = createRunner("custom-compiler-invalid").buildAndFail() - assertThat(result.output).contains( - """ - |Illegal format of 'molecule.kotlinCompilerPlugin' property. - |Expected format: either '' or '::' - |Actual value: 'wrong:format' - """.trimMargin(), - ) - } - - @Test fun customCompilerVersion() { - createRunner("custom-compiler-version").build() - } - - private fun createRunner(fixture: String): GradleRunner { - val fixtureDir = File("src/test/fixtures", fixture) - val gradleRoot = File(fixtureDir, "gradle").also { it.mkdir() } - File("../gradle/wrapper").copyRecursively(File(gradleRoot, "wrapper"), true) - return GradleRunner.create() - .withProjectDir(fixtureDir) - .withArguments("clean", "build", "--stacktrace", "-PmoleculeVersion=$moleculeVersion") - .forwardOutput() - } -} diff --git a/molecule-runtime/api/android/molecule-runtime.api b/molecule-runtime/api/android/molecule-runtime.api index cf211fac..79938cb6 100644 --- a/molecule-runtime/api/android/molecule-runtime.api +++ b/molecule-runtime/api/android/molecule-runtime.api @@ -1,7 +1,6 @@ public final class app/cash/molecule/AndroidUiDispatcher : kotlinx/coroutines/CoroutineDispatcher { public static final field $stable I public static final field Companion Lapp/cash/molecule/AndroidUiDispatcher$Companion; - public synthetic fun (Landroid/view/Choreographer;Landroid/os/Handler;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public fun dispatch (Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V public final fun getChoreographer ()Landroid/view/Choreographer; public final fun getFrameClock ()Landroidx/compose/runtime/MonotonicFrameClock; diff --git a/molecule-runtime/api/molecule-runtime.klib.api b/molecule-runtime/api/molecule-runtime.klib.api index d4677504..e7641b81 100644 --- a/molecule-runtime/api/molecule-runtime.klib.api +++ b/molecule-runtime/api/molecule-runtime.klib.api @@ -9,7 +9,6 @@ // - Show declarations: true // Library unique name: -final const val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] final enum class app.cash.molecule/RecompositionMode : kotlin/Enum { // app.cash.molecule/RecompositionMode|null[0] enum entry ContextClock // app.cash.molecule/RecompositionMode.ContextClock|null[0] enum entry Immediate // app.cash.molecule/RecompositionMode.Immediate|null[0] @@ -18,20 +17,21 @@ final enum class app.cash.molecule/RecompositionMode : kotlin/Enum(): kotlin.enums/EnumEntries // app.cash.molecule/RecompositionMode.entries.|#static(){}[0] } -final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin.coroutines/CoroutineContext =..., kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] -final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin.coroutines/CoroutineContext =..., kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin.coroutines/CoroutineContext = ..., kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin.coroutines/CoroutineContext = ..., kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] -// Targets: [ios, macos, tvos] -final const val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] +final val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] // Targets: [ios, macos, tvos] final object app.cash.molecule/DisplayLinkClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/DisplayLinkClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/DisplayLinkClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } -// Targets: [js, wasmJs] -final const val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] +// Targets: [ios, macos, tvos] +final val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] // Targets: [js, wasmJs] final object app.cash.molecule/WindowAnimationFrameClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/WindowAnimationFrameClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/WindowAnimationFrameClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } +// Targets: [js, wasmJs] +final val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] diff --git a/molecule-runtime/build.gradle b/molecule-runtime/build.gradle index b854561d..043351ff 100644 --- a/molecule-runtime/build.gradle +++ b/molecule-runtime/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.library' apply plugin: 'org.jetbrains.kotlin.multiplatform' +apply plugin: 'org.jetbrains.kotlin.plugin.compose' apply plugin: 'com.vanniktech.maven.publish' apply plugin: 'org.jetbrains.dokka' -apply plugin: 'app.cash.molecule' apply plugin: 'org.jetbrains.kotlinx.binary-compatibility-validator' kotlin { diff --git a/molecule-runtime/src/displayLinkMain/kotlin/app/cash/molecule/DisplayLinkClock.kt b/molecule-runtime/src/displayLinkMain/kotlin/app/cash/molecule/DisplayLinkClock.kt index 30277e35..35d9f1da 100644 --- a/molecule-runtime/src/displayLinkMain/kotlin/app/cash/molecule/DisplayLinkClock.kt +++ b/molecule-runtime/src/displayLinkMain/kotlin/app/cash/molecule/DisplayLinkClock.kt @@ -17,4 +17,6 @@ package app.cash.molecule import androidx.compose.runtime.MonotonicFrameClock -public expect object DisplayLinkClock : MonotonicFrameClock +public expect object DisplayLinkClock : MonotonicFrameClock { + override suspend fun withFrameNanos(onFrame: (frameTimeNanos: Long) -> R): R +} diff --git a/molecule-runtime/src/macosMain/kotlin/app/cash/molecule/DisplayLinkClock.kt b/molecule-runtime/src/macosMain/kotlin/app/cash/molecule/DisplayLinkClock.kt index 0d963ef4..ba4cac92 100644 --- a/molecule-runtime/src/macosMain/kotlin/app/cash/molecule/DisplayLinkClock.kt +++ b/molecule-runtime/src/macosMain/kotlin/app/cash/molecule/DisplayLinkClock.kt @@ -17,16 +17,24 @@ package app.cash.molecule import androidx.compose.runtime.BroadcastFrameClock import androidx.compose.runtime.MonotonicFrameClock +import kotlinx.cinterop.COpaquePointer +import kotlinx.cinterop.CPointer +import kotlinx.cinterop.StableRef import kotlinx.cinterop.alloc +import kotlinx.cinterop.asStableRef import kotlinx.cinterop.nativeHeap import kotlinx.cinterop.ptr import kotlinx.cinterop.staticCFunction import kotlinx.cinterop.value import platform.CoreVideo.CVDisplayLinkCreateWithActiveCGDisplays +import platform.CoreVideo.CVDisplayLinkRef import platform.CoreVideo.CVDisplayLinkRefVar import platform.CoreVideo.CVDisplayLinkSetOutputCallback import platform.CoreVideo.CVDisplayLinkStart import platform.CoreVideo.CVDisplayLinkStop +import platform.CoreVideo.CVOptionFlags +import platform.CoreVideo.CVOptionFlagsVar +import platform.CoreVideo.CVTimeStamp import platform.CoreVideo.kCVReturnSuccess public actual object DisplayLinkClock : MonotonicFrameClock { @@ -36,6 +44,7 @@ public actual object DisplayLinkClock : MonotonicFrameClock { // get dispatched on the next available frame. checkDisplayLink(CVDisplayLinkStart(displayLink.value)) } + private val clockPtr = StableRef.create(clock) // We alloc directly to nativeHeap because this singleton object lives for the duration of the // process. We don't care about cleanup and therefore never free this. @@ -46,19 +55,13 @@ public actual object DisplayLinkClock : MonotonicFrameClock { checkDisplayLink( CVDisplayLinkSetOutputCallback( displayLink.value, - staticCFunction { _, _, _, _, _, _ -> - clock.sendFrame(nanoTime()) - - // A frame was delivered. Stop the DisplayLink callback. It will get started again - // when new frame awaiters appear. - CVDisplayLinkStop(displayLink.value) - }, - null, + staticCFunction(::callback), + clockPtr.asCPointer(), ), ) } - override suspend fun withFrameNanos(onFrame: (frameTimeNanos: Long) -> R): R { + actual override suspend fun withFrameNanos(onFrame: (frameTimeNanos: Long) -> R): R { return clock.withFrameNanos(onFrame) } @@ -66,3 +69,20 @@ public actual object DisplayLinkClock : MonotonicFrameClock { check(code == kCVReturnSuccess) { "Could not initialize CVDisplayLink. Error code $code." } } } + +@Suppress("UNUSED_PARAMETER") // Signature required by CVDisplayLinkSetOutputCallback. +private fun callback( + displayLink: CVDisplayLinkRef?, + ignored1: CPointer?, + ignored2: CPointer?, + ignored3: CVOptionFlags, + ignored4: CPointer?, + userInfo: COpaquePointer?, +): Int { + val clock = userInfo!!.asStableRef().get() + clock.sendFrame(nanoTime()) + + // A frame was delivered. Stop the DisplayLink callback. It will get started again + // when new frame awaiters appear. + return CVDisplayLinkStop(displayLink) +} diff --git a/molecule-runtime/src/quartzCoreMain/kotlin/app/cash/molecule/DisplayLinkClock.kt b/molecule-runtime/src/quartzCoreMain/kotlin/app/cash/molecule/DisplayLinkClock.kt index d3980c49..7040bac9 100644 --- a/molecule-runtime/src/quartzCoreMain/kotlin/app/cash/molecule/DisplayLinkClock.kt +++ b/molecule-runtime/src/quartzCoreMain/kotlin/app/cash/molecule/DisplayLinkClock.kt @@ -36,7 +36,7 @@ public actual object DisplayLinkClock : MonotonicFrameClock { displayLink.addToRunLoop(NSRunLoop.currentRunLoop, NSRunLoop.currentRunLoop.currentMode) } - override suspend fun withFrameNanos(onFrame: (frameTimeNanos: Long) -> R): R { + actual override suspend fun withFrameNanos(onFrame: (frameTimeNanos: Long) -> R): R { return clock.withFrameNanos(onFrame) } diff --git a/sample-viewmodel/build.gradle b/sample-viewmodel/build.gradle index f6661935..e3ffef6d 100644 --- a/sample-viewmodel/build.gradle +++ b/sample-viewmodel/build.gradle @@ -1,8 +1,9 @@ apply plugin: 'com.android.application' apply plugin: 'org.jetbrains.kotlin.android' -apply plugin: 'app.cash.molecule' +apply plugin: 'org.jetbrains.kotlin.plugin.compose' dependencies { + implementation projects.moleculeRuntime implementation platform(libs.androidx.compose.bom) implementation libs.androidx.activity.compose implementation libs.androidx.compose.material3 diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt index 37882bd6..d5ae601c 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/presentationLogic.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.flow.Flow sealed interface Event { data class SelectBreed(val breed: String) : Event - object FetchAgain : Event + data object FetchAgain : Event } data class Model( diff --git a/sample/build.gradle b/sample/build.gradle index e45d91a5..c958749e 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,8 +1,9 @@ apply plugin: 'com.android.application' apply plugin: 'org.jetbrains.kotlin.android' -apply plugin: 'app.cash.molecule' +apply plugin: 'org.jetbrains.kotlin.plugin.compose' dependencies { + implementation projects.moleculeRuntime implementation libs.squareup.retrofit.client implementation libs.squareup.retrofit.converter.scalars implementation libs.squareup.okhttp.client @@ -25,11 +26,3 @@ android { unitTests.returnDefaultValues = true } } - -tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile).configureEach { task -> - task.kotlinOptions { - freeCompilerArgs += [ - '-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi', - ] - } -} diff --git a/sample/src/main/java/com/example/molecule/presenter.kt b/sample/src/main/java/com/example/molecule/presenter.kt index 62344097..ca791236 100644 --- a/sample/src/main/java/com/example/molecule/presenter.kt +++ b/sample/src/main/java/com/example/molecule/presenter.kt @@ -28,7 +28,7 @@ import kotlinx.coroutines.launch sealed interface CounterEvent data class Change(val delta: Int) : CounterEvent -object Randomize : CounterEvent +data object Randomize : CounterEvent data class CounterModel( val value: Int, diff --git a/settings.gradle b/settings.gradle index c3249cf1..02a3b2cf 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,15 +1,8 @@ rootProject.name = 'molecule' -include ':molecule-gradle-plugin' include ':molecule-runtime' include ':sample' include ':sample-viewmodel' enableFeaturePreview('TYPESAFE_PROJECT_ACCESSORS') - -includeBuild('build-logic') { - dependencySubstitution { - substitute module('app.cash.molecule:molecule-gradle-plugin') using project(':molecule-gradle-plugin') - } -} From 2f73959c5a3fa7b3c1533327c8052da8f30cacb0 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 28 May 2024 13:19:54 -0400 Subject: [PATCH 116/269] Prepare for 2.0 (#453) --- .github/workflows/build.yaml | 4 +- .github/workflows/release.yaml | 6 +-- CHANGELOG.md | 70 +++++++++++++++++++++++++++++-- README.md | 77 +++++++--------------------------- build.gradle | 2 - gradle.properties | 2 +- 6 files changed, 87 insertions(+), 74 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6c3f5438..31226931 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -27,7 +27,7 @@ jobs: distribution: 'zulu' java-version: 20 - uses: gradle/actions/setup-gradle@v3 - - run: ./gradlew build assembleAndroidTest dokkaHtmlMultiModule + - run: ./gradlew build assembleAndroidTest dokkaHtml - name: Run Tests uses: reactivecircus/android-emulator-runner@v2 @@ -47,6 +47,6 @@ jobs: with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BRANCH: site - FOLDER: build/dokka/htmlMultiModule + FOLDER: molecule-runtime/build/dokka/html TARGET_FOLDER: docs/latest/ CLEAN: true diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 8f74babf..3872f792 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: distribution: 'zulu' java-version: 20 - uses: gradle/actions/setup-gradle@v3 - - run: ./gradlew publish dokkaHtmlMultiModule + - run: ./gradlew publish dokkaHtml env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} @@ -38,6 +38,6 @@ jobs: with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BRANCH: site - FOLDER: build/dokka/htmlMultiModule - TARGET_FOLDER: docs/1.x/ + FOLDER: molecule-runtime/build/dokka/html + TARGET_FOLDER: docs/2.x/ CLEAN: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 0255c9b5..2bc40385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,77 @@ ## [Unreleased] New: -- Nothing yet! +- Support for Kotlin 2.0.0! Changed: -- Nothing yet! +- Remove our Gradle plugin in favor of JetBrains' (see below for more). Fixed: -- Nothing yet! +- Mac OS `DisplayLinkClock` was updated to correctly use a "static" function for pointer-passing to `CVDisplayLink`, as newly-enforced by Kotlin 2.0. This should not cause a behavior change. + + +### Gradle plugin removed + +This version of Molecule removes the custom Gradle plugin in favor of [the official JetBrains Compose compiler plugin](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compiler.html) which ships as part of Kotlin itself. +Each module in which you had previously applied the `app.cash.molecule` plugin should be changed to apply `org.jetbrains.kotlin.plugin.compose` instead. +The Molecule runtime will no longer be added as a result of the plugin change, and so any module which references Molecule APIs like `launchMolecule` should apply the `app.cash.molecule:molecule-runtime` dependency. + +For posterity, the Kotlin version compatibility table and compiler version customization for our old Molecule Gradle plugin will be archived here: + +
+Molecule 1.x Gradle plugin Kotlin compatibility table +

+ +Since Kotlin compiler plugins are an unstable API, certain versions of Molecule only work with +certain versions of Kotlin. + +| Kotlin | Molecule | +|--------|----------------| +| 1.9.24 | 1.4.3 | +| 1.9.23 | 1.4.2 | +| 1.9.22 | 1.3.2 - 1.4.1 | +| 1.9.21 | 1.3.1 | +| 1.9.20 | 1.3.0 | +| 1.9.10 | 1.2.1 | +| 1.9.0 | 1.1.0 - 1.2.0 | +| 1.8.22 | 0.11.0 - 1.0.0 | +| 1.8.21 | 0.10.0 | +| 1.8.20 | 0.9.0 | +| 1.8.10 | 0.8.0 | +| 1.8.0 | 0.7.0 - 0.7.1 | +| 1.7.20 | 0.6.0 - 0.6.1 | +| 1.7.10 | 0.4.0 - 0.5.0 | +| 1.7.0 | 0.3.0 - 0.3.1 | +| 1.6.10 | 0.2.0 | +| 1.5.31 | 0.1.0 | + +

+
+ +
+Molecule 1.x Gradle plugin Compose compiler customization instructions +

+ +Each version of Molecule ships with a specific JetBrains Compose compiler version which works with +a single version of Kotlin (see version table above). Newer versions of the Compose +compiler or alternate Compose compilers can be specified using the Gradle extension. + +To use a new version of the JetBrains Compose compiler version: +```kotlin +molecule { + kotlinCompilerPlugin.set("1.4.8") +} +``` + +To use an alternate Compose compiler dependency: +```kotlin +molecule { + kotlinCompilerPlugin.set("com.example:custom-compose-compiler:1.0.0") +} +``` + +

+
## [1.4.3] - 2024-05-15 diff --git a/README.md b/README.md index 754d6b89..b4a568fc 100644 --- a/README.md +++ b/README.md @@ -163,62 +163,33 @@ For more information see [the `moleculeFlow` documentation](https://cashapp.gith ## Usage -Add the buildscript dependency and apply the plugin to every module which wants to call `launchMolecule` or define `@Composable` functions for use with Molecule. +Molecule is a library for Compose, and it relies on JetBrains' Kotlin Compose plugin to be present for use. +Any module which wants to call `launchMolecule` or define `@Composable` functions for use with Molecule must have this plugin applied. +For more information, see [the JetBrains Compose compiler documentation](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compiler.html). + +Molecule itself can then be added like any other dependency: ```groovy -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.4.3' - } +dependencies { + implementation("app.cash.molecule:molecule-runtime:2.0.0") } - -apply plugin: 'app.cash.molecule' ``` -Since Kotlin compiler plugins are an unstable API, certain versions of Molecule only work with -certain versions of Kotlin. - -| Kotlin | Molecule | -|--------|----------------| -| 1.9.24 | 1.4.3 | -| 1.9.23 | 1.4.2 | -| 1.9.22 | 1.3.2 - 1.4.1 | -| 1.9.21 | 1.3.1 | -| 1.9.20 | 1.3.0 | -| 1.9.10 | 1.2.1 | -| 1.9.0 | 1.1.0 - 1.2.0 | -| 1.8.22 | 0.11.0 - 1.0.0 | -| 1.8.21 | 0.10.0 | -| 1.8.20 | 0.9.0 | -| 1.8.10 | 0.8.0 | -| 1.8.0 | 0.7.0 - 0.7.1 | -| 1.7.20 | 0.6.0 - 0.6.1 | -| 1.7.10 | 0.4.0 - 0.5.0 | -| 1.7.0 | 0.3.0 - 0.3.1 | -| 1.6.10 | 0.2.0 | -| 1.5.31 | 0.1.0 | -
Snapshots of the development version are available in Sonatype's snapshots repository.

```groovy -buildscript { - repositories { - mavenCentral() - maven { - url 'https://oss.sonatype.org/content/repositories/snapshots/' - } - } - dependencies { - classpath 'app.cash.molecule:molecule-gradle-plugin:1.5.0-SNAPSHOT' +repositories { + mavenCentral() + maven { + url "https://oss.sonatype.org/content/repositories/snapshots/" } } -apply plugin: 'app.cash.molecule' +dependencies { + implementation("app.cash.molecule:molecule-runtime:2.1.0-SNAPSHOT") +} ```

@@ -276,26 +247,6 @@ android { } ``` -### Custom Compose Compiler - -Each version of Molecule ships with a specific JetBrains Compose compiler version which works with -a single version of Kotlin (see [version table](#usage) above). Newer versions of the Compose -compiler or alternate Compose compilers can be specified using the Gradle extension. - -To use a new version of the JetBrains Compose compiler version: -```kotlin -molecule { - kotlinCompilerPlugin.set("1.4.8") -} -``` - -To use an alternate Compose compiler dependency: -```kotlin -molecule { - kotlinCompilerPlugin.set("com.example:custom-compose-compiler:1.0.0") -} -``` - ## License diff --git a/build.gradle b/build.gradle index 6122e346..bd5c9355 100644 --- a/build.gradle +++ b/build.gradle @@ -16,8 +16,6 @@ buildscript { } } -apply plugin: 'org.jetbrains.dokka' - allprojects { version = property("VERSION_NAME") as String diff --git a/gradle.properties b/gradle.properties index e047d74a..9a42ffa6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=1.5.0-SNAPSHOT +VERSION_NAME=2.0.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 4ea2b8cec9138eaa4050f7dac97d0f108d409b83 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 28 May 2024 13:29:58 -0400 Subject: [PATCH 117/269] Prepare version 2.0.0 --- CHANGELOG.md | 17 ++++++++++++++++- RELEASING.md | 14 +++++--------- gradle.properties | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bc40385..3a95f7cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ ## [Unreleased] +New: +- Nothing yet! + +Changed: +- Nothing yet! + +Fixed: +- Nothing yet! + + +## [2.0.0] - 2024-05-28 + New: - Support for Kotlin 2.0.0! @@ -11,6 +23,8 @@ Changed: Fixed: - Mac OS `DisplayLinkClock` was updated to correctly use a "static" function for pointer-passing to `CVDisplayLink`, as newly-enforced by Kotlin 2.0. This should not cause a behavior change. +Note: This release is otherwise binary-compatible with the 1.x versions. The major version bump is due to the build change only. + ### Gradle plugin removed @@ -323,7 +337,8 @@ Initial release -[Unreleased]: https://github.com/cashapp/molecule/compare/1.4.3...HEAD +[Unreleased]: https://github.com/cashapp/molecule/compare/2.0.0...HEAD +[2.0.0]: https://github.com/cashapp/molecule/releases/tag/2.0.0 [1.4.3]: https://github.com/cashapp/molecule/releases/tag/1.4.3 [1.4.2]: https://github.com/cashapp/molecule/releases/tag/1.4.2 [1.4.1]: https://github.com/cashapp/molecule/releases/tag/1.4.1 diff --git a/RELEASING.md b/RELEASING.md index e57a63f1..ce8fdf27 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -7,31 +7,27 @@ 2. Add a link URL to ensure the header link works. 3. Add a new `Unreleased` section to the top. -3. Update the `README.md` so the "Usage" section reflects the new release version and the - snapshot section reflects the next "SNAPSHOT" version. Update the Kotlin compatibility - table with the new version. - -4. Commit +3. Commit ``` $ git commit -am "Prepare version X.Y.Z" ``` -5. Tag +4. Tag ``` $ git tag -am "Version X.Y.Z" X.Y.Z ``` -6. Update the `VERSION_NAME` in `gradle.properties` to the next "SNAPSHOT" version. +5. Update the `VERSION_NAME` in `gradle.properties` to the next "SNAPSHOT" version. -7. Commit +6. Commit ``` $ git commit -am "Prepare next development version" ``` -8. Push! +7. Push! ``` $ git push && git push --tags diff --git a/gradle.properties b/gradle.properties index 9a42ffa6..bcce1621 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=2.0.0-SNAPSHOT +VERSION_NAME=2.0.0 SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From f5d873f4a4016e604026036d8d27559084b06b9f Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 28 May 2024 13:30:16 -0400 Subject: [PATCH 118/269] Prepare next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index bcce1621..66fa97d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=2.0.0 +VERSION_NAME=2.1.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 2800bee6d8de99139356914fa0ae1e60526ee66c Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 29 May 2024 15:14:56 -0400 Subject: [PATCH 119/269] Delete Kotlin/Compose Renovate rules (#454) --- renovate.json5 | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/renovate.json5 b/renovate.json5 index a348b158..3e9e13cf 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -3,14 +3,4 @@ "extends": [ "config:base" ], - "packageRules": [ - { - // Compose compiler is tightly coupled to Kotlin version. - "groupName": "Kotlin/Compose", - "matchPackagePrefixes": [ - "org.jetbrains.compose.compiler", - "org.jetbrains.kotlin:kotlin", - ], - }, - ], } From 1d2642d22e77ebbc8b9963ba8bcf0af02de3d04c Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Thu, 30 May 2024 04:06:34 +0800 Subject: [PATCH 120/269] Fix sample-viewmodel running (#430) ``` Caused by: java.lang.IllegalArgumentException: Cannot serialize Kotlin type com.example.molecule.viewmodel.PupperPicsApi$ListResponse. Reflective serialization of Kotlin classes without using kotlin-reflect has undefined and unexpected behavior. Please use KotlinJsonAdapterFactory from the moshi-kotlin artifact or use code gen from the moshi-kotlin-codegen artifact. at com.squareup.moshi.ClassJsonAdapter$1.create(ClassJsonAdapter.java:98) at com.squareup.moshi.Moshi.adapter(Moshi.java:146) at com.squareup.moshi.Moshi.adapter(Moshi.java:106) ``` Co-authored-by: Jake Wharton --- build.gradle | 1 + gradle/libs.versions.toml | 2 ++ renovate.json5 | 10 ++++++++++ sample-viewmodel/build.gradle | 3 +++ .../main/java/com/example/molecule/viewmodel/data.kt | 6 +++++- 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bd5c9355..272109a6 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,7 @@ buildscript { classpath libs.android.plugin classpath libs.kotlin.plugin.core classpath libs.kotlin.plugin.compose + classpath libs.kotlin.ksp.plugin classpath libs.maven.publish.plugin classpath libs.dokka.plugin classpath libs.spotless.plugin diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5bca9085..9293e982 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,6 +29,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.21" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } @@ -47,6 +48,7 @@ squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-i squareup-retrofit-client = { module = "com.squareup.retrofit2:retrofit", version.ref = "squareup-retrofit" } squareup-retrofit-converter-scalars = { module = "com.squareup.retrofit2:converter-scalars", version.ref = "squareup-retrofit" } squareup-retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "squareup-retrofit" } +squareup-moshi-codegen = "com.squareup.moshi:moshi-kotlin-codegen:1.15.1" assertk = "com.willowtreeapps.assertk:assertk:0.28.1" turbine = { module = "app.cash.turbine:turbine", version = "1.1.0" } diff --git a/renovate.json5 b/renovate.json5 index 3e9e13cf..28400558 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -3,4 +3,14 @@ "extends": [ "config:base" ], + "packageRules": [ + { + // KSP is tightly coupled to Kotlin version. + "groupName": "Kotlin/KSP", + "matchPackagePrefixes": [ + "org.jetbrains.kotlin:kotlin", + "com.google.devtools.ksp", + ], + }, + ], } diff --git a/sample-viewmodel/build.gradle b/sample-viewmodel/build.gradle index e3ffef6d..b98ecb66 100644 --- a/sample-viewmodel/build.gradle +++ b/sample-viewmodel/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'com.android.application' apply plugin: 'org.jetbrains.kotlin.android' apply plugin: 'org.jetbrains.kotlin.plugin.compose' +apply plugin: 'com.google.devtools.ksp' dependencies { implementation projects.moleculeRuntime @@ -11,6 +12,8 @@ dependencies { implementation libs.squareup.retrofit.client implementation libs.squareup.retrofit.converter.moshi + ksp libs.squareup.moshi.codegen + testImplementation libs.junit testImplementation libs.kotlinx.coroutines.test testImplementation libs.turbine diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt index d8194457..61543781 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt @@ -15,6 +15,7 @@ */ package com.example.molecule.viewmodel +import com.squareup.moshi.JsonClass import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory import retrofit2.create @@ -50,13 +51,16 @@ fun PupperPicsService(): PupperPicsService { } } -private interface PupperPicsApi { +interface PupperPicsApi { @GET("breeds/list/all") suspend fun listBreeds(): ListResponse @GET("breed/{breed}/images/random") suspend fun randomImageFor(@Path("breed", encoded = true) breed: String): ImageResponse + @JsonClass(generateAdapter = true) data class ListResponse(val message: Map>) + + @JsonClass(generateAdapter = true) data class ImageResponse(val message: String) } From 7edb28ea07c4e8613e360ec79c1196a3136aab6b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 18:38:09 -0400 Subject: [PATCH 121/269] Update dependency gradle to v8.8 (#455) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 3 ++- gradlew | 31 +++++++++++++---------- gradlew.bat | 20 +++++++-------- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..e6441136f3d4ba8a0da8d277868979cfbc8ad796 100644 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 ScNgau(U?ep-K_E5zy1%ZQTdPn diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 20db9ad5..a4413138 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68d..b740cf13 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -83,10 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 6689b85b..7101f8e4 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail From 680bfab7914d4b9fda86e2b503d2ae21edaceb50 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 14:41:01 -0400 Subject: [PATCH 122/269] Update dependency org.jetbrains.compose.runtime:runtime to v1.6.11 (#456) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9293e982..3425c006 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.8.1" kotlin = "2.0.0" -jetbrains-compose = "1.6.10" +jetbrains-compose = "1.6.11" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From 0d8da257c5e37967357b5b3983733dbfdcbe54b4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 20:35:15 -0400 Subject: [PATCH 123/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.0-1.0.22 (#458) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3425c006..de0c3aa8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.21" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.22" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From d802adb051d521008f00c21665791a76abb5e02e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Jun 2024 07:14:34 -0400 Subject: [PATCH 124/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.4 (#459) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index de0c3aa8..cbacd720 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.3" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.4" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From c0be69a12ea34773401f567a77c11b743c7ae409 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 03:58:10 +0000 Subject: [PATCH 125/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.3.0 (#457) * Update dependency com.pinterest.ktlint:ktlint-cli to v1.3.0 * Disable expression body rule --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- build.gradle | 2 ++ gradle/libs.versions.toml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 272109a6..199a308f 100644 --- a/build.gradle +++ b/build.gradle @@ -74,6 +74,8 @@ subprojects { ktlint(libs.ktlint.core.get().version) .editorConfigOverride([ 'ktlint_standard_filename': 'disabled', + // Making something an expression body should be a choice around readability. + 'ktlint_standard_function-expression-body': 'disabled', 'ktlint_function_naming_ignore_when_annotated_with': 'Composable', ]) .customRuleSets([ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cbacd720..0f219e89 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.2.1" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.4" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } From 7ea342f4fb037ccc33e759dc3d5ad95120fedb7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:09:13 +0000 Subject: [PATCH 126/269] Update dependency com.android.tools.build:gradle to v8.4.2 (#460) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0f219e89..226ed9a5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.4.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.4.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } From 1f55de2b8f29e69a2fafb443c2231da3b703f940 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 14:27:31 -0400 Subject: [PATCH 127/269] Update dependency androidx.compose:compose-bom to v2024.06.00 (#461) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 226ed9a5..5b663ae4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.05.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.06.00" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.14" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 9cedc80ab10193a7c3afecbd5b2cb514aa88f9ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 13:16:26 -0400 Subject: [PATCH 128/269] Update dependency com.android.tools.build:gradle to v8.5.0 (#462) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5b663ae4..8272f669 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.4.2" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } From 7f261baca0d781cee22ecd686c08941f98089304 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:46:27 -0400 Subject: [PATCH 129/269] Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.29.0 (#464) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8272f669..7c084ff7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibili ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.4" -maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.28.0" } +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.25.0" } From 4809d86366af837d2ee100fe18ded4beb23c7e0d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 20:06:29 +0000 Subject: [PATCH 130/269] Update dependency androidx.test:runner to v1.6.0 (#466) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7c084ff7..2d18dd9b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } -androidx-test-runner = { module = "androidx.test:runner", version = "1.5.2" } +androidx-test-runner = { module = "androidx.test:runner", version = "1.6.0" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.06.00" } From 6a89cb2305c4f4974769af490807520ac42065f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 00:21:27 +0000 Subject: [PATCH 131/269] Update dependency androidx.test:runner to v1.6.1 (#467) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2d18dd9b..c5d64b97 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } -androidx-test-runner = { module = "androidx.test:runner", version = "1.6.0" } +androidx-test-runner = { module = "androidx.test:runner", version = "1.6.1" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.06.00" } From 765ecefece3d2fb494beec54a4170b3cf9b8e80d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 18:04:04 +0000 Subject: [PATCH 132/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.15.0-Beta.3 (#468) * Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.15.0-Beta.3 * Regenerate dump files --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 2 +- molecule-runtime/api/molecule-runtime.klib.api | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c5d64b97..4a5540de 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plug kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.4" diff --git a/molecule-runtime/api/molecule-runtime.klib.api b/molecule-runtime/api/molecule-runtime.klib.api index e7641b81..4a6942f3 100644 --- a/molecule-runtime/api/molecule-runtime.klib.api +++ b/molecule-runtime/api/molecule-runtime.klib.api @@ -12,26 +12,34 @@ final enum class app.cash.molecule/RecompositionMode : kotlin/Enum { // app.cash.molecule/RecompositionMode|null[0] enum entry ContextClock // app.cash.molecule/RecompositionMode.ContextClock|null[0] enum entry Immediate // app.cash.molecule/RecompositionMode.Immediate|null[0] - final fun valueOf(kotlin/String): app.cash.molecule/RecompositionMode // app.cash.molecule/RecompositionMode.valueOf|valueOf#static(kotlin.String){}[0] - final fun values(): kotlin/Array // app.cash.molecule/RecompositionMode.values|values#static(){}[0] + final val entries // app.cash.molecule/RecompositionMode.entries|#static{}entries[0] final fun (): kotlin.enums/EnumEntries // app.cash.molecule/RecompositionMode.entries.|#static(){}[0] + + final fun valueOf(kotlin/String): app.cash.molecule/RecompositionMode // app.cash.molecule/RecompositionMode.valueOf|valueOf#static(kotlin.String){}[0] + final fun values(): kotlin/Array // app.cash.molecule/RecompositionMode.values|values#static(){}[0] } + +final val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] + final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin.coroutines/CoroutineContext = ..., kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin.coroutines/CoroutineContext = ..., kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] -final val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] + // Targets: [ios, macos, tvos] final object app.cash.molecule/DisplayLinkClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/DisplayLinkClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/DisplayLinkClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } + // Targets: [ios, macos, tvos] final val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] + // Targets: [js, wasmJs] final object app.cash.molecule/WindowAnimationFrameClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/WindowAnimationFrameClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/WindowAnimationFrameClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] } + // Targets: [js, wasmJs] final val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] From 5a1ebc4242d98712dc0bb615be65d5bc3fe33c4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 08:03:30 -0400 Subject: [PATCH 133/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.5 (#469) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4a5540de..63bb0edf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.0" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.4" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.5" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From 5ebc4a15acbb67b0f8f4a35fec84aba3f4287d36 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 18:23:55 +0000 Subject: [PATCH 134/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.3.1 (#470) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 63bb0edf..65df91e9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.3" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.0" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.5" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From b35ce43c8a6e3110b316e1a07202b96c9f29530a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 09:24:31 -0400 Subject: [PATCH 135/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.15.0 (#472) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 65df91e9..c5543be9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plug kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.3" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.5" From 70c2662d6fbf430886ddcd47557b0e87c6a3dfd0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:13:53 -0400 Subject: [PATCH 136/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.15.1 (#474) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c5543be9..c1c91de7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plug kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.1" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.5" From fdc36f8556c868c4153b2bda860a638f80a316d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 13:11:07 -0400 Subject: [PATCH 137/269] Update dependency gradle to v8.9 (#475) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43504 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 ++++- gradlew.bat | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 8703 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 Ojj7^59?Sdh$^Qpp*~F>< delta 8662 zcmYM1RaBhK(uL9BL4pT&ch}$qcL*As0R|^HFD`?-26qkaNwC3nu;A|Q0Yd)oJ7=x) z_f6HatE;=#>YLq{FoYf$!na@pfNwSyI%>|UMk5`vO(z@Ao)eZR(~D#FF?U$)+q)1q z9OVG^Ib0v?R8wYfQ*1H;5Oyixqnyt6cXR#u=LM~V7_GUu}N(b}1+x^JUL#_8Xj zB*(FInWvSPGo;K=k3}p&4`*)~)p`nX#}W&EpfKCcOf^7t zPUS81ov(mXS;$9To6q84I!tlP&+Z?lkctuIZ(SHN#^=JGZe^hr^(3d*40pYsjikBWME6IFf!!+kC*TBc!T)^&aJ#z0#4?OCUbNoa}pwh=_SFfMf|x$`-5~ zP%%u%QdWp#zY6PZUR8Mz1n$f44EpTEvKLTL;yiZrPCV=XEL09@qmQV#*Uu*$#-WMN zZ?rc(7}93z4iC~XHcatJev=ey*hnEzajfb|22BpwJ4jDi;m>Av|B?TqzdRm-YT(EV zCgl${%#nvi?ayAFYV7D_s#07}v&FI43BZz@`dRogK!k7Y!y6r=fvm~=F9QP{QTj>x z#Y)*j%`OZ~;rqP0L5@qYhR`qzh^)4JtE;*faTsB;dNHyGMT+fpyz~LDaMOO?c|6FD z{DYA+kzI4`aD;Ms|~h49UAvOfhMEFip&@&Tz>3O+MpC0s>`fl!T(;ZP*;Ux zr<2S-wo(Kq&wfD_Xn7XXQJ0E4u7GcC6pqe`3$fYZ5Eq4`H67T6lex_QP>Ca##n2zx z!tc=_Ukzf{p1%zUUkEO(0r~B=o5IoP1@#0A=uP{g6WnPnX&!1Z$UWjkc^~o^y^Kkn z%zCrr^*BPjcTA58ZR}?%q7A_<=d&<*mXpFSQU%eiOR`=78@}+8*X##KFb)r^zyfOTxvA@cbo65VbwoK0lAj3x8X)U5*w3(}5 z(Qfv5jl{^hk~j-n&J;kaK;fNhy9ZBYxrKQNCY4oevotO-|7X}r{fvYN+{sCFn2(40 zvCF7f_OdX*L`GrSf0U$C+I@>%+|wQv*}n2yT&ky;-`(%#^vF79p1 z>y`59E$f7!vGT}d)g)n}%T#-Wfm-DlGU6CX`>!y8#tm-Nc}uH50tG)dab*IVrt-TTEM8!)gIILu*PG_-fbnFjRA+LLd|_U3yas12Lro%>NEeG%IwN z{FWomsT{DqMjq{7l6ZECb1Hm@GQ`h=dcyApkoJ6CpK3n83o-YJnXxT9b2%TmBfKZ* zi~%`pvZ*;(I%lJEt9Bphs+j#)ws}IaxQYV6 zWBgVu#Kna>sJe;dBQ1?AO#AHecU~3cMCVD&G})JMkbkF80a?(~1HF_wv6X!p z6uXt_8u)`+*%^c@#)K27b&Aa%m>rXOcGQg8o^OB4t0}@-WWy38&)3vXd_4_t%F1|( z{z(S)>S!9eUCFA$fQ^127DonBeq@5FF|IR7(tZ?Nrx0(^{w#a$-(fbjhN$$(fQA(~|$wMG4 z?UjfpyON`6n#lVwcKQ+#CuAQm^nmQ!sSk>=Mdxk9e@SgE(L2&v`gCXv&8ezHHn*@% zi6qeD|I%Q@gb(?CYus&VD3EE#xfELUvni89Opq-6fQmY-9Di3jxF?i#O)R4t66ekw z)OW*IN7#{_qhrb?qlVwmM@)50jEGbjTiDB;nX{}%IC~pw{ev#!1`i6@xr$mgXX>j} zqgxKRY$fi?B7|GHArqvLWu;`?pvPr!m&N=F1<@i-kzAmZ69Sqp;$)kKg7`76GVBo{ zk+r?sgl{1)i6Hg2Hj!ehsDF3tp(@n2+l%ihOc7D~`vzgx=iVU0{tQ&qaV#PgmalfG zPj_JimuEvo^1X)dGYNrTHBXwTe@2XH-bcnfpDh$i?Il9r%l$Ob2!dqEL-To>;3O>` z@8%M*(1#g3_ITfp`z4~Z7G7ZG>~F0W^byMvwzfEf*59oM*g1H)8@2zL&da+$ms$Dp zrPZ&Uq?X)yKm7{YA;mX|rMEK@;W zA-SADGLvgp+)f01=S-d$Z8XfvEZk$amHe}B(gQX-g>(Y?IA6YJfZM(lWrf);5L zEjq1_5qO6U7oPSb>3|&z>OZ13;mVT zWCZ=CeIEK~6PUv_wqjl)pXMy3_46hB?AtR7_74~bUS=I}2O2CjdFDA*{749vOj2hJ z{kYM4fd`;NHTYQ_1Rk2dc;J&F2ex^}^%0kleFbM!yhwO|J^~w*CygBbkvHnzz@a~D z|60RVTr$AEa-5Z->qEMEfau=__2RanCTKQ{XzbhD{c!e5hz&$ZvhBX0(l84W%eW17 zQ!H)JKxP$wTOyq83^qmx1Qs;VuWuxclIp!BegkNYiwyMVBay@XWlTpPCzNn>&4)f* zm&*aS?T?;6?2>T~+!=Gq4fjP1Z!)+S<xiG>XqzY@WKKMzx?0|GTS4{ z+z&e0Uysciw#Hg%)mQ3C#WQkMcm{1yt(*)y|yao2R_FRX$WPvg-*NPoj%(k*{BA8Xx&0HEqT zI0Swyc#QyEeUc)0CC}x{p+J{WN>Z|+VZWDpzW`bZ2d7^Yc4ev~9u-K&nR zl#B0^5%-V4c~)1_xrH=dGbbYf*7)D&yy-}^V|Np|>V@#GOm($1=El5zV?Z`Z__tD5 zcLUi?-0^jKbZrbEny&VD!zA0Nk3L|~Kt4z;B43v@k~ zFwNisc~D*ZROFH;!f{&~&Pof-x8VG8{gSm9-Yg$G(Q@O5!A!{iQH0j z80Rs>Ket|`cbw>z$P@Gfxp#wwu;I6vi5~7GqtE4t7$Hz zPD=W|mg%;0+r~6)dC>MJ&!T$Dxq3 zU@UK_HHc`_nI5;jh!vi9NPx*#{~{$5Azx`_VtJGT49vB_=WN`*i#{^X`xu$9P@m>Z zL|oZ5CT=Zk?SMj{^NA5E)FqA9q88h{@E96;&tVv^+;R$K`kbB_ zZneKrSN+IeIrMq;4EcH>sT2~3B zrZf-vSJfekcY4A%e2nVzK8C5~rAaP%dV2Hwl~?W87Hdo<*EnDcbZqVUb#8lz$HE@y z2DN2AQh%OcqiuWRzRE>cKd)24PCc)#@o&VCo!Rcs;5u9prhK}!->CC)H1Sn-3C7m9 zyUeD#Udh1t_OYkIMAUrGU>ccTJS0tV9tW;^-6h$HtTbon@GL1&OukJvgz>OdY)x4D zg1m6Y@-|p;nB;bZ_O>_j&{BmuW9km4a728vJV5R0nO7wt*h6sy7QOT0ny-~cWTCZ3 z9EYG^5RaAbLwJ&~d(^PAiicJJs&ECAr&C6jQcy#L{JCK&anL)GVLK?L3a zYnsS$+P>UB?(QU7EI^%#9C;R-jqb;XWX2Bx5C;Uu#n9WGE<5U=zhekru(St>|FH2$ zOG*+Tky6R9l-yVPJk7giGulOO$gS_c!DyCog5PT`Sl@P!pHarmf7Y0HRyg$X@fB7F zaQy&vnM1KZe}sHuLY5u7?_;q!>mza}J?&eLLpx2o4q8$qY+G2&Xz6P8*fnLU+g&i2}$F%6R_Vd;k)U{HBg{+uuKUAo^*FRg!#z}BajS)OnqwXd!{u>Y&aH?)z%bwu_NB9zNw+~661!> zD3%1qX2{743H1G8d~`V=W`w7xk?bWgut-gyAl*6{dW=g_lU*m?fJ>h2#0_+J3EMz_ zR9r+0j4V*k>HU`BJaGd~@*G|3Yp?~Ljpth@!_T_?{an>URYtict~N+wb}%n)^GE8eM(=NqLnn*KJnE*v(7Oo)NmKB*qk;0&FbO zkrIQs&-)ln0-j~MIt__0pLdrcBH{C(62`3GvGjR?`dtTdX#tf-2qkGbeV;Ud6Dp0& z|A6-DPgg=v*%2`L4M&p|&*;;I`=Tn1M^&oER=Gp&KHBRxu_OuFGgX;-U8F?*2>PXjb!wwMMh_*N8$?L4(RdvV#O5cUu0F|_zQ#w1zMA4* zJeRk}$V4?zPVMB=^}N7x?(P7!x6BfI%*)yaUoZS0)|$bw07XN{NygpgroPW>?VcO} z@er3&#@R2pLVwkpg$X8HJM@>FT{4^Wi&6fr#DI$5{ERpM@|+60{o2_*a7k__tIvGJ9D|NPoX@$4?i_dQPFkx0^f$=#_)-hphQ93a0|`uaufR!Nlc^AP+hFWe~(j_DCZmv;7CJ4L7tWk{b;IFDvT zchD1qB=cE)Mywg5Nw>`-k#NQhT`_X^c`s$ODVZZ-)T}vgYM3*syn41}I*rz?)`Q<* zs-^C3!9AsV-nX^0wH;GT)Y$yQC*0x3o!Bl<%>h-o$6UEG?{g1ip>njUYQ}DeIw0@qnqJyo0do(`OyE4kqE2stOFNos%!diRfe=M zeU@=V=3$1dGv5ZbX!llJ!TnRQQe6?t5o|Y&qReNOxhkEa{CE6d^UtmF@OXk<_qkc0 zc+ckH8Knc!FTjk&5FEQ}$sxj!(a4223cII&iai-nY~2`|K89YKcrYFAMo^oIh@W^; zsb{KOy?dv_D5%}zPk_7^I!C2YsrfyNBUw_ude7XDc0-+LjC0!X_moHU3wmveS@GRu zX>)G}L_j1I-_5B|b&|{ExH~;Nm!xytCyc}Ed!&Hqg;=qTK7C93f>!m3n!S5Z!m`N} zjIcDWm8ES~V2^dKuv>8@Eu)Zi{A4;qHvTW7hB6B38h%$K76BYwC3DIQ0a;2fSQvo$ z`Q?BEYF1`@I-Nr6z{@>`ty~mFC|XR`HSg(HN>&-#&eoDw-Q1g;x@Bc$@sW{Q5H&R_ z5Aici44Jq-tbGnDsu0WVM(RZ=s;CIcIq?73**v!Y^jvz7ckw*=?0=B!{I?f{68@V( z4dIgOUYbLOiQccu$X4P87wZC^IbGnB5lLfFkBzLC3hRD?q4_^%@O5G*WbD?Wug6{<|N#Fv_Zf3ST>+v_!q5!fSy#{_XVq$;k*?Ar^R&FuFM7 zKYiLaSe>Cw@`=IUMZ*U#v>o5!iZ7S|rUy2(yG+AGnauj{;z=s8KQ(CdwZ>&?Z^&Bt z+74(G;BD!N^Ke>(-wwZN5~K%P#L)59`a;zSnRa>2dCzMEz`?VaHaTC>?&o|(d6e*Z zbD!=Ua-u6T6O!gQnncZ&699BJyAg9mKXd_WO8O`N@}bx%BSq)|jgrySfnFvzOj!44 z9ci@}2V3!ag8@ZbJO;;Q5ivdTWx+TGR`?75Jcje}*ufx@%5MFUsfsi%FoEx)&uzkN zgaGFOV!s@Hw3M%pq5`)M4Nz$)~Sr9$V2rkP?B7kvI7VAcnp6iZl zOd!(TNw+UH49iHWC4!W&9;ZuB+&*@Z$}>0fx8~6J@d)fR)WG1UndfdVEeKW=HAur| z15zG-6mf`wyn&x@&?@g1ibkIMob_`x7nh7yu9M>@x~pln>!_kzsLAY#2ng0QEcj)qKGj8PdWEuYKdM!jd{ zHP6j^`1g}5=C%)LX&^kpe=)X+KR4VRNli?R2KgYlwKCN9lcw8GpWMV+1Ku)~W^jV2 zyiTv-b*?$AhvU7j9~S5+u`Ysw9&5oo0Djp8e(j25Etbx42Qa=4T~}q+PG&XdkWDNF z7bqo#7KW&%dh~ST6hbu8S=0V`{X&`kAy@8jZWZJuYE}_#b4<-^4dNUc-+%6g($yN% z5ny^;ogGh}H5+Gq3jR21rQgy@5#TCgX+(28NZ4w}dzfx-LP%uYk9LPTKABaQh1ah) z@Y(g!cLd!Mcz+e|XI@@IH9z*2=zxJ0uaJ+S(iIsk7=d>A#L<}={n`~O?UTGX{8Pda z_KhI*4jI?b{A!?~-M$xk)w0QBJb7I=EGy&o3AEB_RloU;v~F8ubD@9BbxV1c36CsTX+wzAZlvUm*;Re06D+Bq~LYg-qF4L z5kZZ80PB&4U?|hL9nIZm%jVj0;P_lXar)NSt3u8xx!K6Y0bclZ%<9fwjZ&!^;!>ug zQ}M`>k@S{BR20cyVXtKK%Qa^7?e<%VSAPGmVtGo6zc6BkO5vW5)m8_k{xT3;ocdpH zudHGT06XU@y6U!&kP8i6ubMQl>cm7=(W6P7^24Uzu4Xpwc->ib?RSHL*?!d{c-aE# zp?TrFr{4iDL3dpljl#HHbEn{~eW2Nqfksa(r-}n)lJLI%e#Bu|+1% zN&!n(nv(3^jGx?onfDcyeCC*p6)DuFn_<*62b92Pn$LH(INE{z^8y?mEvvO zZ~2I;A2qXvuj>1kk@WsECq1WbsSC!0m8n=S^t3kxAx~of0vpv{EqmAmDJ3(o;-cvf zu$33Z)C0)Y4(iBhh@)lsS|a%{;*W(@DbID^$ z|FzcJB-RFzpkBLaFLQ;EWMAW#@K(D#oYoOmcctdTV?fzM2@6U&S#+S$&zA4t<^-!V z+&#*xa)cLnfMTVE&I}o#4kxP~JT3-A)L_5O!yA2ebq?zvb0WO1D6$r9p?!L0#)Fc> z+I&?aog~FPBH}BpWfW^pyc{2i8#Io6e)^6wv}MZn&`01oq@$M@5eJ6J^IrXLI) z4C!#kh)89u5*Q@W5(rYDqBKO6&G*kPGFZfu@J}ug^7!sC(Wcv3Fbe{$Sy|{-VXTct znsP+0v}kduRs=S=x0MA$*(7xZPE-%aIt^^JG9s}8$43E~^t4=MxmMts;q2$^sj=k( z#^suR{0Wl3#9KAI<=SC6hifXuA{o02vdyq>iw%(#tv+@ov{QZBI^*^1K?Q_QQqA5n9YLRwO3a7JR+1x3#d3lZL;R1@8Z!2hnWj^_5 z^M{3wg%f15Db5Pd>tS!6Hj~n^l478ljxe@>!C;L$%rKfm#RBw^_K&i~ZyY_$BC%-L z^NdD{thVHFlnwfy(a?{%!m;U_9ic*!OPxf&5$muWz7&4VbW{PP)oE5u$uXUZU>+8R zCsZ~_*HLVnBm*^{seTAV=iN)mB0{<}C!EgE$_1RMj1kGUU?cjSWu*|zFA(ZrNE(CkY7>Mv1C)E1WjsBKAE%w}{~apwNj z0h`k)C1$TwZ<3de9+>;v6A0eZ@xHm#^7|z9`gQ3<`+lpz(1(RsgHAM@Ja+)c?;#j- zC=&5FD)m@9AX}0g9XQ_Yt4YB}aT`XxM-t>7v@BV}2^0gu0zRH%S9}!P(MBAFGyJ8F zEMdB&{eGOd$RqV77Lx>8pX^<@TdL{6^K7p$0uMTLC^n)g*yXRXMy`tqjYIZ|3b#Iv z4<)jtQU5`b{A;r2QCqIy>@!uuj^TBed3OuO1>My{GQe<^9|$4NOHTKFp{GpdFY-kC zi?uHq>lF$}<(JbQatP0*>$Aw_lygfmUyojkE=PnV)zc)7%^5BxpjkU+>ol2}WpB2hlDP(hVA;uLdu`=M_A!%RaRTd6>Mi_ozLYOEh!dfT_h0dSsnQm1bk)%K45)xLw zql&fx?ZOMBLXtUd$PRlqpo2CxNQTBb=!T|_>p&k1F})Hq&xksq>o#4b+KSs2KyxPQ z#{(qj@)9r6u2O~IqHG76@Fb~BZ4Wz_J$p_NU9-b3V$$kzjN24*sdw5spXetOuU1SR z{v}b92c>^PmvPs>BK2Ylp6&1>tnPsBA0jg0RQ{({-?^SBBm>=W>tS?_h^6%Scc)8L zgsKjSU@@6kSFX%_3%Qe{i7Z9Wg7~fM_)v?ExpM@htI{G6Db5ak(B4~4kRghRp_7zr z#Pco0_(bD$IS6l2j>%Iv^Hc)M`n-vIu;-2T+6nhW0JZxZ|NfDEh;ZnAe d|9e8rKfIInFTYPwOD9TMuEcqhmizAn{|ERF)u#Xe diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138..09523c0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13..f5feea6d 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 7101f8e4..9b42019c 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## From 7b093f67334a6507593f8e60219b1ac5c58ea160 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:36:57 -0400 Subject: [PATCH 138/269] Update dependency com.android.tools.build:gradle to v8.5.1 (#476) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c1c91de7..c6dc9f4d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.1" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } From 1de54737c40f2baf28d952f8fe9a01a0b7dec3ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:41:07 -0400 Subject: [PATCH 139/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.0-1.0.23 (#477) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c6dc9f4d..032fc0dd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.22" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.23" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 4e0703845afedfdd572a1fb07e58110b86d192c6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:13:17 -0400 Subject: [PATCH 140/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.16.0 (#479) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 032fc0dd..46aec71a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plug kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.1" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.0" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.5" From 308a2f14a73b1d052730734d4da8fb3fcbdd0cfa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:25:17 -0400 Subject: [PATCH 141/269] Update dependency io.coil-kt:coil-compose to v2.7.0 (#478) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 46aec71a..9685a756 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "202 androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.14" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } -coil-compose = "io.coil-kt:coil-compose:2.6.0" +coil-compose = "io.coil-kt:coil-compose:2.7.0" jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } From 74aa855c87bae9e3ad3287295718eb103af12651 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:45:33 +0000 Subject: [PATCH 142/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.16.1 (#480) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9685a756..3a71ea69 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plug kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.0" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.5" From 8d90b53d71212591e2528cd15edb90224f88bc63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:50:31 -0400 Subject: [PATCH 143/269] Update dependency androidx.activity:activity-compose to v1.9.1 (#481) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3a71ea69..04a52494 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-retrofit = "2.11.0" android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.1" } -androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.0" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.1" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.06.00" } androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.14" From 4f5dd7e71bc7c4237209b5ed01d5295493656206 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 09:22:18 -0400 Subject: [PATCH 144/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.6 (#482) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 04a52494..88472980 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.5" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.6" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From 9f48673ad4eac6842cbbc6c1cc12d31069ae8287 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 18:00:07 -0400 Subject: [PATCH 145/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.7 (#483) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 88472980..763d9923 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.6" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.7" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From 21ec9e0d98ae36c9ccefebafc4f5ace0b97c0359 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 01:42:41 +0000 Subject: [PATCH 146/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.0-1.0.24 (#484) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 763d9923..989b2ee9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.23" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.24" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From f13cff2d3bb859150f4997d258673c5b56cb3404 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:17:24 -0400 Subject: [PATCH 147/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.8 (#485) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 989b2ee9..d542d40d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.2" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.7" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.8" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From 6de63c7d892f04b862264622b32bc619eae1d250 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2024 13:37:58 -0400 Subject: [PATCH 148/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.16.3 (#486) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d542d40d..cad23996 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plug kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.2" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.8" From 35a54b6b1873fbccd92ea535b1338ea35878914a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 13:28:59 -0400 Subject: [PATCH 149/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.9 (#490) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cad23996..f21ba1fd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.8" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.9" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From 148e5b2fa501bf749e0e2430a6673f306bd289bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:05:05 +0000 Subject: [PATCH 150/269] Update Kotlin/KSP (#488) * Update Kotlin/KSP * API dump --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 4 ++-- molecule-runtime/api/molecule-runtime.klib.api | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f21ba1fd..610f4333 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "34" minSdk = "21" coroutine = "1.8.1" -kotlin = "2.0.0" +kotlin = "2.0.10" jetbrains-compose = "1.6.11" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" @@ -29,7 +29,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.0-1.0.24" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.10-1.0.24" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } diff --git a/molecule-runtime/api/molecule-runtime.klib.api b/molecule-runtime/api/molecule-runtime.klib.api index 4a6942f3..2304bd4e 100644 --- a/molecule-runtime/api/molecule-runtime.klib.api +++ b/molecule-runtime/api/molecule-runtime.klib.api @@ -27,6 +27,7 @@ final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecul final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] +final fun app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop_getter(): kotlin/Int // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop_getter|app_cash_molecule_GatedFrameClock$stableprop_getter(){}[0] // Targets: [ios, macos, tvos] final object app.cash.molecule/DisplayLinkClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/DisplayLinkClock|null[0] @@ -36,6 +37,9 @@ final object app.cash.molecule/DisplayLinkClock : androidx.compose.runtime/Monot // Targets: [ios, macos, tvos] final val app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop|#static{}app_cash_molecule_DisplayLinkClock$stableprop[0] +// Targets: [ios, macos, tvos] +final fun app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop_getter(): kotlin/Int // app.cash.molecule/app_cash_molecule_DisplayLinkClock$stableprop_getter|app_cash_molecule_DisplayLinkClock$stableprop_getter(){}[0] + // Targets: [js, wasmJs] final object app.cash.molecule/WindowAnimationFrameClock : androidx.compose.runtime/MonotonicFrameClock { // app.cash.molecule/WindowAnimationFrameClock|null[0] final suspend fun <#A1: kotlin/Any?> withFrameNanos(kotlin/Function1): #A1 // app.cash.molecule/WindowAnimationFrameClock.withFrameNanos|withFrameNanos(kotlin.Function1){0§}[0] @@ -43,3 +47,6 @@ final object app.cash.molecule/WindowAnimationFrameClock : androidx.compose.runt // Targets: [js, wasmJs] final val app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop|#static{}app_cash_molecule_WindowAnimationFrameClock$stableprop[0] + +// Targets: [js, wasmJs] +final fun app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop_getter(): kotlin/Int // app.cash.molecule/app_cash_molecule_WindowAnimationFrameClock$stableprop_getter|app_cash_molecule_WindowAnimationFrameClock$stableprop_getter(){}[0] From e5ecf48ab822be3837257d471878e90f5e50d317 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:14:08 +0000 Subject: [PATCH 151/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.10 (#491) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 610f4333..decfce98 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.9" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.10" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From c838f16f7436e3ef0282bea1926bf127ec3137b4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 19:07:23 +0000 Subject: [PATCH 152/269] Update gradle/actions action to v4 (#487) * Update gradle/actions action to v4 * Delete .github/workflows/gradle-wrapper.yaml --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- .github/workflows/build.yaml | 2 +- .github/workflows/gradle-wrapper.yaml | 15 --------------- .github/workflows/release.yaml | 2 +- 3 files changed, 2 insertions(+), 17 deletions(-) delete mode 100644 .github/workflows/gradle-wrapper.yaml diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 31226931..c7b6c5e3 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -26,7 +26,7 @@ jobs: with: distribution: 'zulu' java-version: 20 - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew build assembleAndroidTest dokkaHtml - name: Run Tests diff --git a/.github/workflows/gradle-wrapper.yaml b/.github/workflows/gradle-wrapper.yaml deleted file mode 100644 index 5b187541..00000000 --- a/.github/workflows/gradle-wrapper.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: gradle-wrapper - -on: - pull_request: - paths: - - 'gradlew' - - 'gradlew.bat' - - 'gradle/wrapper/' - -jobs: - validate: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: gradle/actions/wrapper-validation@v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3872f792..fa688b82 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -15,7 +15,7 @@ jobs: with: distribution: 'zulu' java-version: 20 - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew publish dokkaHtml env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} From cea57d047c812522815f1f984188028967bac95b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 22:25:08 -0400 Subject: [PATCH 153/269] Update dependency com.android.tools.build:gradle to v8.5.2 (#493) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index decfce98..7cfdce0a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.1" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.1" } From 51adda4516fa07a15212228db732cc3ac99306ef Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Fri, 9 Aug 2024 00:02:00 -0400 Subject: [PATCH 154/269] Do not declare the Compose compiler version (#494) We get it from Kotlin version and plugin now. --- build.gradle | 3 --- gradle/libs.versions.toml | 1 - 2 files changed, 4 deletions(-) diff --git a/build.gradle b/build.gradle index 199a308f..ae36f670 100644 --- a/build.gradle +++ b/build.gradle @@ -62,9 +62,6 @@ subprojects { checkDependencies true checkReleaseBuilds false // Full lint runs as part of 'build' task. } - android.composeOptions { - kotlinCompilerExtensionVersion = libs.androidx.compose.compiler.get().version - } } apply plugin: 'com.diffplug.spotless' diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7cfdce0a..78943c15 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,6 @@ androidx-test-runner = { module = "androidx.test:runner", version = "1.6.1" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.1" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.06.00" } -androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.14" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 13003a7fd9a6824d6d4e4c83fd2282fbe919ac16 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 10:14:12 -0400 Subject: [PATCH 155/269] Update dependency gradle to v8.10 (#495) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 3990 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0e..9355b415 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From a1bda6969c51049654989cb04a3dd4d00474523e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:42:23 -0400 Subject: [PATCH 156/269] Update dependency androidx.test:runner to v1.6.2 (#496) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 78943c15..9ef03961 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } -androidx-test-runner = { module = "androidx.test:runner", version = "1.6.1" } +androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.1" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.06.00" } From 0ba99e7fce7779d22d54f3c9330c2af0e674c863 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Aug 2024 21:37:24 -0400 Subject: [PATCH 157/269] Update dependency androidx.compose:compose-bom to v2024.08.00 (#497) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9ef03961..70913834 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.1" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.06.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.08.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 32a926daf2fcfb27c5158bfa760e9070636e2e9c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 12:46:42 +0000 Subject: [PATCH 158/269] Update dependency org.jetbrains.kotlin:compose-compiler-gradle-plugin to v2.0.20 (#499) * Update dependency org.jetbrains.kotlin:compose-compiler-gradle-plugin to v2.0.20 * Update Yarn lock --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 2 +- kotlin-js-store/yarn.lock | 236 ++++++++++++++++++++------------------ 2 files changed, 124 insertions(+), 114 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 70913834..ca2515ec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "34" minSdk = "21" coroutine = "1.8.1" -kotlin = "2.0.10" +kotlin = "2.0.20" jetbrains-compose = "1.6.11" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 397fad62..5d5032bc 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -277,10 +277,10 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn@^8.7.1: version "8.8.2" @@ -307,10 +307,10 @@ ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-regex@^5.0.1: version "5.0.1" @@ -392,7 +392,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== @@ -443,7 +443,7 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.3, chokidar@^3.5.1: +chokidar@^3.5.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -458,6 +458,21 @@ chokidar@3.5.3, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -567,13 +582,20 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: +debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@^4.3.5: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" @@ -594,10 +616,10 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dom-serialize@^2.2.1: version "2.2.1" @@ -650,10 +672,10 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" -enhanced-resolve@^5.16.0: - version "5.16.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" - integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== +enhanced-resolve@^5.17.0: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -688,7 +710,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@4.0.0: +escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -768,14 +790,6 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -784,6 +798,14 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -854,17 +876,6 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@^7.1.3, glob@^7.1.7: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -877,6 +888,17 @@ glob@^7.1.3, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -904,7 +926,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -he@1.2.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -1046,7 +1068,7 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -js-yaml@4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -1159,7 +1181,7 @@ lodash@^4.17.15, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -1205,13 +1227,6 @@ mime@^2.5.2: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -1219,7 +1234,7 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: +minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== @@ -1245,31 +1260,31 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" - integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "8.1.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" +mocha@10.7.0: + version "10.7.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.0.tgz#9e5cbed8fa9b37537a25bd1f7fb4f6fc45458b9a" + integrity sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" ms@2.0.0: version "2.0.0" @@ -1281,7 +1296,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -1536,13 +1551,6 @@ schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" @@ -1550,6 +1558,13 @@ serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -1673,18 +1688,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@8.1.1, supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -1692,6 +1700,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -1750,10 +1765,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.4.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== ua-parser-js@^0.7.30: version "0.7.33" @@ -1847,10 +1862,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.91.0: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== +webpack@5.93.0: + version "5.93.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5" + integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" @@ -1858,10 +1873,10 @@ webpack@5.91.0: "@webassemblyjs/wasm-edit" "^1.12.1" "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" + enhanced-resolve "^5.17.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" @@ -1896,10 +1911,10 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== wrap-ansi@^7.0.0: version "7.0.0" @@ -1925,17 +1940,12 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@2.0.0: +yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== @@ -1945,7 +1955,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0, yargs@^16.1.1: +yargs@^16.1.1, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From ecb55a14f8de8e2a3bcb2b7e34a401f5309444cb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 19:14:01 -0400 Subject: [PATCH 159/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.20-1.0.24 (#498) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ca2515ec..298b7275 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.10-1.0.24" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.20-1.0.24" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From d5892dfd1ee18c0cfba3a3d3d13d669a419d60b7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:55:32 +0000 Subject: [PATCH 160/269] Update dependency com.android.tools.build:gradle to v8.6.0 (#500) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 298b7275..edd583bb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.5.2" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.6.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.1" } From 85eb8b88935319cbb9227c213ccb1e475d91e00f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 07:32:27 -0400 Subject: [PATCH 161/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.11 (#501) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index edd583bb..ed2a1375 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.10" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.11" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From b9bac27f3892e0fd29d9466608c51b6f46c0e35e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 18:10:04 -0400 Subject: [PATCH 162/269] Update dependency androidx.activity:activity-compose to v1.9.2 (#502) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ed2a1375..87301832 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-retrofit = "2.11.0" android-plugin = { module = "com.android.tools.build:gradle", version = "8.6.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } -androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.1" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.08.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 35503a29145d49817964daa0ee3afbc3c11a0159 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 18:15:31 -0400 Subject: [PATCH 163/269] Update dependency androidx.compose:compose-bom to v2024.09.00 (#503) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 87301832..72b1543c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.08.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From bf8b66daddadd175957b774d7735089b59211d0c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 18:09:18 -0400 Subject: [PATCH 164/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.20-1.0.25 (#504) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 72b1543c..26ed3adb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.20-1.0.24" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.20-1.0.25" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 350a51120088c3a8fac04a6352041c34960fcd29 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 09:22:02 -0400 Subject: [PATCH 165/269] Update dependency gradle to v8.10.1 (#505) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b415..0aaefbca 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 62af16f9fff16cb838c3243c6f525b9c4b12f482 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 13:56:20 +0000 Subject: [PATCH 166/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.12 (#506) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 26ed3adb..8e13bc35 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.11" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.12" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } From edef320e8b00818af9ec899fa16930789b6189c3 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 10 Sep 2024 10:15:00 -0400 Subject: [PATCH 167/269] Revert to Gradle 8.9 (#507) --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0aaefbca..09523c0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From f0bae5e4b10bf2ad50b197c5e29b1e562dc4700e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 16:33:59 -0400 Subject: [PATCH 168/269] Update dependency androidx.compose:compose-bom to v2024.09.01 (#509) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8e13bc35..a201c949 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.01" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From b3f067122b7933a293d03d4ae3789c2232b3d7db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 12:05:38 -0400 Subject: [PATCH 169/269] Update coroutine to v1.9.0 (#510) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a201c949..d3ec081e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ compileSdk = "34" minSdk = "21" -coroutine = "1.8.1" +coroutine = "1.9.0" kotlin = "2.0.20" jetbrains-compose = "1.6.11" squareup-okhttp = "4.12.0" From ad2d8702975280f5208ccf9df97db2621f98f4e8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 00:19:27 -0400 Subject: [PATCH 170/269] Update dependency com.android.tools.build:gradle to v8.6.1 (#511) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d3ec081e..8c92d0bf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.6.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.6.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } From 66e53970333d5ddd654ce24447d9a3aec0488a03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 14:37:20 -0400 Subject: [PATCH 171/269] Update dependency androidx.compose:compose-bom to v2024.09.02 (#512) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8c92d0bf..2cf91b57 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.01" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.02" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From a419585e7e273fb2580b77f34d5bfbb76546b786 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Mon, 23 Sep 2024 10:02:54 -0400 Subject: [PATCH 172/269] Fix nano calculation (#513) --- CHANGELOG.md | 2 +- .../src/linuxMain/kotlin/app/cash/molecule/timeSource.kt | 2 +- .../kotlin/app/cash/molecule/timeSource.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename molecule-runtime/src/{mingwX64Main => mingwMain}/kotlin/app/cash/molecule/timeSource.kt (94%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a95f7cc..6752694e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ Changed: - Nothing yet! Fixed: -- Nothing yet! +- Correct calculation of frame nano time for native Windows and native Linux targets. ## [2.0.0] - 2024-05-28 diff --git a/molecule-runtime/src/linuxMain/kotlin/app/cash/molecule/timeSource.kt b/molecule-runtime/src/linuxMain/kotlin/app/cash/molecule/timeSource.kt index 1a9be701..cbdfa765 100644 --- a/molecule-runtime/src/linuxMain/kotlin/app/cash/molecule/timeSource.kt +++ b/molecule-runtime/src/linuxMain/kotlin/app/cash/molecule/timeSource.kt @@ -25,5 +25,5 @@ import platform.posix.timespec internal actual inline fun nanoTime(): Long = memScoped { val timespec = alloc() clock_gettime(CLOCK_MONOTONIC_RAW, timespec.ptr) - timespec.tv_nsec * 1_000_000L + timespec.tv_nsec + timespec.tv_sec * 1_000_000L + timespec.tv_nsec } diff --git a/molecule-runtime/src/mingwX64Main/kotlin/app/cash/molecule/timeSource.kt b/molecule-runtime/src/mingwMain/kotlin/app/cash/molecule/timeSource.kt similarity index 94% rename from molecule-runtime/src/mingwX64Main/kotlin/app/cash/molecule/timeSource.kt rename to molecule-runtime/src/mingwMain/kotlin/app/cash/molecule/timeSource.kt index b3b42cea..f5b637dc 100644 --- a/molecule-runtime/src/mingwX64Main/kotlin/app/cash/molecule/timeSource.kt +++ b/molecule-runtime/src/mingwMain/kotlin/app/cash/molecule/timeSource.kt @@ -25,5 +25,5 @@ import platform.posix.timespec internal actual inline fun nanoTime(): Long = memScoped { val timespec = alloc() clock_gettime(CLOCK_MONOTONIC, timespec.ptr) - timespec.tv_nsec * 1_000_000L + timespec.tv_nsec + timespec.tv_sec * 1_000_000L + timespec.tv_nsec } From 62b3d5a628327b87a5bc0cf18edb7f216dad9ef0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 01:06:11 +0000 Subject: [PATCH 173/269] Update dependency gradle to v8.10.2 (#508) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0e..df97d72b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From e8932259d1050ef06c4c166998b3de082784ede5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:39:12 +0000 Subject: [PATCH 174/269] Update dependency com.android.tools.build:gradle to v8.7.0 (#514) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2cf91b57..1d4e8f2e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.6.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } From 11c6253f866c4598a2b338f5ba8d10e08d69a898 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 14:39:56 -0400 Subject: [PATCH 175/269] Update dependency androidx.compose:compose-bom to v2024.09.03 (#515) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1d4e8f2e..bfa1cace 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.02" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.03" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 7b57077f5f0907ea198607a15903295ebf3bd9da Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 12:22:12 +0000 Subject: [PATCH 176/269] Update dependency org.jetbrains.kotlin:compose-compiler-gradle-plugin to v2.0.21 (#518) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bfa1cace..3ef62d54 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "34" minSdk = "21" coroutine = "1.9.0" -kotlin = "2.0.20" +kotlin = "2.0.21" jetbrains-compose = "1.6.11" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From eb14affe8d469e2f431e23ba97a975945f3f1fe6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 12:32:46 +0000 Subject: [PATCH 177/269] Update Kotlin/KSP (#517) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3ef62d54..028af5ff 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.20-1.0.25" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.25" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From e9d6dc86cb329165685d847617cb6fc38a1a3858 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 06:54:42 -0700 Subject: [PATCH 178/269] Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.30.0 (#519) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 028af5ff..e3a4df4c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibili ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.12" -maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.29.0" } +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.25.0" } From b86f87971101853436ee42cc0487bd162eb37aab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 20:01:39 +0000 Subject: [PATCH 179/269] Update dependency com.android.tools.build:gradle to v8.7.1 (#520) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e3a4df4c..0486eae6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } From 587de8127cb6bdd86586441394934a78da122be3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:40:59 +0000 Subject: [PATCH 180/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.16 (#516) * Update dependency io.nlopez.compose.rules:ktlint to v0.4.16 * Do not use trailing event lambda --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 2 +- .../main/java/com/example/molecule/viewmodel/MainActivity.kt | 2 +- .../src/main/java/com/example/molecule/viewmodel/ui.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0486eae6..49cb49fb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.12" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.16" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/MainActivity.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/MainActivity.kt index 8ea36f9f..6d247361 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/MainActivity.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/MainActivity.kt @@ -40,7 +40,7 @@ class MainActivity : ComponentActivity() { setContent { RootContainer { val model by viewModel.models.collectAsState() - PupperPicsScreen(model) { event -> viewModel.take(event) } + PupperPicsScreen(model, onEvent = { event -> viewModel.take(event) }) } } } diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt index de2d15ad..56c7a9f5 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/ui.kt @@ -65,7 +65,7 @@ import coil.compose.AsyncImage import coil.compose.AsyncImagePainter @Composable -fun PupperPicsScreen(model: Model, modifier: Modifier = Modifier, onEvent: (Event) -> Unit) { +fun PupperPicsScreen(model: Model, onEvent: (Event) -> Unit, modifier: Modifier = Modifier) { Box( modifier = modifier .fillMaxSize() From 14bd9a29eac55f8aaaede12aa4a92dd826f93ad5 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 15 Oct 2024 11:14:24 -0700 Subject: [PATCH 181/269] Migrate to hierarchy DSL (#521) --- molecule-runtime/build.gradle | 57 +++++-------------- .../app/cash/molecule/DisplayLinkClockTest.kt | 7 +++ 2 files changed, 21 insertions(+), 43 deletions(-) diff --git a/molecule-runtime/build.gradle b/molecule-runtime/build.gradle index 043351ff..ef6f559e 100644 --- a/molecule-runtime/build.gradle +++ b/molecule-runtime/build.gradle @@ -43,7 +43,20 @@ kotlin { watchosSimulatorArm64() watchosX64() - applyDefaultHierarchyTemplate() + applyDefaultHierarchyTemplate { + it.group("common") { + it.group("darwin") { + it.group("displayLink") { + it.group("quartzCore") { + it.group("ios") {} + it.group("tvos") {} + } + it.group("macos") {} + } + it.group("watchos") {} + } + } + } sourceSets { configureEach { @@ -79,48 +92,6 @@ kotlin { wasmJsMain { kotlin.srcDir('src/browserMain/kotlin') } - - darwinMain { - dependsOn(commonMain) - } - - displayLinkMain { - dependsOn(darwinMain) - } - displayLinkTest { - dependsOn(commonTest) - } - - quartzCoreMain { - dependsOn(displayLinkMain) - } - - iosMain { - dependsOn(quartzCoreMain) - } - iosTest { - // TODO Link against XCTest in order to get frame pulses on iOS. - // dependsOn(displayLinkTest) - } - - tvosMain { - dependsOn(quartzCoreMain) - } - tvosTest { - // TODO Link against XCTest in order to get frame pulses on tvOS. - // dependsOn(displayLinkTest) - } - - macosMain { - dependsOn(displayLinkMain) - } - macosTest { - dependsOn(displayLinkTest) - } - - watchosMain { - dependsOn(darwinMain) - } } } diff --git a/molecule-runtime/src/displayLinkTest/kotlin/app/cash/molecule/DisplayLinkClockTest.kt b/molecule-runtime/src/displayLinkTest/kotlin/app/cash/molecule/DisplayLinkClockTest.kt index 51d5b345..e106fdc5 100644 --- a/molecule-runtime/src/displayLinkTest/kotlin/app/cash/molecule/DisplayLinkClockTest.kt +++ b/molecule-runtime/src/displayLinkTest/kotlin/app/cash/molecule/DisplayLinkClockTest.kt @@ -19,11 +19,18 @@ import assertk.all import assertk.assertThat import assertk.assertions.isLessThan import assertk.assertions.isPositive +import kotlin.experimental.ExperimentalNativeApi import kotlin.test.Test import kotlinx.coroutines.test.runTest +@OptIn(ExperimentalNativeApi::class) class DisplayLinkClockTest { @Test fun ticksWithTime() = runTest { + if (Platform.osFamily == OsFamily.IOS || Platform.osFamily == OsFamily.TVOS) { + // TODO Link against XCTest in order to get frame pulses on iOS and tvOS. + return@runTest + } + val frameTimeA = DisplayLinkClock.withFrameNanos { it } val frameTimeB = DisplayLinkClock.withFrameNanos { it } assertThat(frameTimeA).all { From c90043acc4dca7ef88a83b198c2beb21cdd8a85e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:24:59 -0700 Subject: [PATCH 182/269] Update dependency org.jetbrains.compose.runtime:runtime to v1.7.0 (#522) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 49cb49fb..f9fe879d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.9.0" kotlin = "2.0.21" -jetbrains-compose = "1.6.11" +jetbrains-compose = "1.7.0" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From c07b9ffb8fad11be2ab59bbea243ebd5c4d76811 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:36:34 -0400 Subject: [PATCH 183/269] Update dependency app.cash.turbine:turbine to v1.2.0 (#523) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f9fe879d..9be10b58 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -50,4 +50,4 @@ squareup-retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter squareup-moshi-codegen = "com.squareup.moshi:moshi-kotlin-codegen:1.15.1" assertk = "com.willowtreeapps.assertk:assertk:0.28.1" -turbine = { module = "app.cash.turbine:turbine", version = "1.1.0" } +turbine = { module = "app.cash.turbine:turbine", version = "1.2.0" } From 37d008e4cce2ea106351a16a49d5ad27f436dd3f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:43:57 +0000 Subject: [PATCH 184/269] Update dependency androidx.activity:activity-compose to v1.9.3 (#524) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9be10b58..df132c33 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-retrofit = "2.11.0" android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } -androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.2" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.03" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From acb9b5a74450c7313674409800fc38f3fe05d8c8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:44:23 +0000 Subject: [PATCH 185/269] Update dependency androidx.compose:compose-bom to v2024.10.00 (#525) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index df132c33..91924608 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.09.03" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.10.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 5a4fdc78546acc89f0e7a5a29cc55d6262ec953c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 21:24:05 -0400 Subject: [PATCH 186/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.21-1.0.26 (#526) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 91924608..a2eef226 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.25" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.26" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 0177238c8179f62179df64818b3bb42f80a37059 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:19:17 -0400 Subject: [PATCH 187/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.4.0 (#527) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a2eef226..363bbf8f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.3.1" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.4.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.16" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From d6ee9b27af9483b28b1eb2c0f6b1c1e0a077cf0a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 12:46:15 +0000 Subject: [PATCH 188/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.17 (#529) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 363bbf8f..f89f4201 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.4.0" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.16" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.17" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From 6ef2d460b961bd5aee186a3279fe2321baf72faf Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 29 Oct 2024 06:36:58 -0700 Subject: [PATCH 189/269] Publish on MacOS so all targets are published (#530) --- .github/workflows/build.yaml | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c7b6c5e3..0090f62a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -11,6 +11,17 @@ on: jobs: build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 23 + - uses: gradle/actions/setup-gradle@v4 + - run: ./gradlew build + + emulator: runs-on: ubuntu-latest steps: @@ -25,9 +36,8 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 20 + java-version: 23 - uses: gradle/actions/setup-gradle@v4 - - run: ./gradlew build assembleAndroidTest dokkaHtml - name: Run Tests uses: reactivecircus/android-emulator-runner@v2 @@ -35,14 +45,26 @@ jobs: api-level: 24 script: ./gradlew connectedCheck - - run: ./gradlew publish - if: ${{ github.ref == 'refs/heads/trunk' && github.repository == 'cashapp/molecule' }} + publish: + runs-on: macos-latest + if: ${{ github.ref == 'refs/heads/trunk' && github.repository == 'cashapp/molecule' }} + needs: + - build + - emulator + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 23 + - uses: gradle/actions/setup-gradle@v4 + + - run: ./gradlew publish dokkaHtml env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} - name: Deploy docs to website - if: ${{ github.ref == 'refs/heads/trunk' }} uses: JamesIves/github-pages-deploy-action@releases/v3 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 7141f7561f85500fc3ce28b7ff868bfb13dabdcd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:46:40 +0000 Subject: [PATCH 190/269] Update dependency androidx.core:core-ktx to v1.15.0 (#531) * Update dependency androidx.core:core-ktx to v1.15.0 * compileSdk 35 --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f89f4201..3e8aab30 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -compileSdk = "34" +compileSdk = "35" minSdk = "21" coroutine = "1.9.0" @@ -10,7 +10,7 @@ squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.1" } -androidx-core = { module = "androidx.core:core-ktx", version = "1.13.1" } +androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } From b7af6b4d26fd5329b1537c37f43f1b70d1783778 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 22:05:28 -0400 Subject: [PATCH 191/269] Update dependency com.android.tools.build:gradle to v8.7.2 (#533) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3e8aab30..fde3a6b9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } From f1e0d0d153317fc42c81eeaafc2b599e3def6784 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 22:05:58 -0400 Subject: [PATCH 192/269] Update dependency androidx.compose:compose-bom to v2024.10.01 (#532) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fde3a6b9..2a32f4e0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.10.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.10.01" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 0e47ddec3ad72605adc617ed36ee651a13ffc0a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 15:23:57 -0800 Subject: [PATCH 193/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.4.1 (#534) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2a32f4e0..a887e510 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.4.0" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.4.1" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.17" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From 63aa75e1f6e9764008155e1aa08241021d645295 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 22:20:23 -0500 Subject: [PATCH 194/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.21-1.0.27 (#535) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a887e510..b130b7fa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.26" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.27" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From d3921924457b5b42a1825a9a46f7c36486f920d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 17:23:59 +0000 Subject: [PATCH 195/269] Update dependency gradle to v8.11 (#536) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72b..94113f20 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 0e2822bfb54dfa688e0a0802e185deb8aec8a0a1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 20:23:48 +0000 Subject: [PATCH 196/269] Update dependency org.jetbrains.compose.runtime:runtime to v1.7.1 (#538) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b130b7fa..86259cac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.9.0" kotlin = "2.0.21" -jetbrains-compose = "1.7.0" +jetbrains-compose = "1.7.1" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From f0b95ff2ebd894af64f2d840c76184ead5fd16b6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 15:25:47 -0500 Subject: [PATCH 197/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.18 (#537) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 86259cac..2c63b78b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.4.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.17" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.18" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From 37b213afd92ef329052799f6ba14365415659b13 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 17:03:48 -0500 Subject: [PATCH 198/269] Update dependency androidx.compose:compose-bom to v2024.11.00 (#539) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2c63b78b..6c185f72 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.10.01" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.11.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 15c3de240132ace3fdaa9d43013138acbea277b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:06:27 +0000 Subject: [PATCH 199/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.19 (#541) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6c185f72..1493d363 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.4.1" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.18" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.19" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From 65de12d6fd76da15718d693e244551c16c5dc2d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 19:48:47 +0000 Subject: [PATCH 200/269] Update dependency gradle to v8.11.1 (#543) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 94113f20..e2847c82 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From ba53bd03d8e921de0c75fe7c77a6b5e058df8901 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 15:12:41 +0000 Subject: [PATCH 201/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.0.21-1.0.28 (#540) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1493d363..1576f368 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.27" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.28" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 627cd3e4fb252636664ff79fd218d56ec1f08059 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 18:36:13 +0000 Subject: [PATCH 202/269] Update dependency com.android.tools.build:gradle to v8.7.3 (#548) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1576f368..5ae9ccfa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.2" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.3" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } From 48ff077a6ff12c90394aa494a7d15b92fb95fb67 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 01:50:14 +0000 Subject: [PATCH 203/269] Update dependency com.pinterest.ktlint:ktlint-cli to v1.5.0 (#549) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5ae9ccfa..d7d68c91 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" -ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.4.1" +ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.5.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.19" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From 285c7ea2bd45a71a40ea66bb29053340843c0ab0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 12:54:45 -0500 Subject: [PATCH 204/269] Update dependency com.squareup.moshi:moshi-kotlin-codegen to v1.15.2 (#550) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d7d68c91..f371ed38 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -47,7 +47,7 @@ squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-i squareup-retrofit-client = { module = "com.squareup.retrofit2:retrofit", version.ref = "squareup-retrofit" } squareup-retrofit-converter-scalars = { module = "com.squareup.retrofit2:converter-scalars", version.ref = "squareup-retrofit" } squareup-retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "squareup-retrofit" } -squareup-moshi-codegen = "com.squareup.moshi:moshi-kotlin-codegen:1.15.1" +squareup-moshi-codegen = "com.squareup.moshi:moshi-kotlin-codegen:1.15.2" assertk = "com.willowtreeapps.assertk:assertk:0.28.1" turbine = { module = "app.cash.turbine:turbine", version = "1.2.0" } From 985f397cd7d327582ffb30c3f1311107db8d2180 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:01:10 +0000 Subject: [PATCH 205/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.20 (#551) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f371ed38..1f0acffb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.5.0" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.19" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.20" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From 1d6183c1fb819f6662766711bd255e15462b3b42 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 21:57:16 +0000 Subject: [PATCH 206/269] Update dependency io.nlopez.compose.rules:ktlint to v0.4.22 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1f0acffb..f023b2d6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.5.0" -ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.20" +ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } From 9a3a67bc6c058494f91f5ef633c5ed5a6ad5e928 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 18:59:28 +0000 Subject: [PATCH 207/269] Update dependency androidx.compose:compose-bom to v2024.12.01 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f023b2d6..9d36dafe 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.11.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.12.01" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 2243494023190de1439f3e44ab61dc3039eec505 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:34:54 +0000 Subject: [PATCH 208/269] Update dependency org.jetbrains.dokka:dokka-gradle-plugin to v2 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9d36dafe..cc52f3ec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ coil-compose = "io.coil-kt:coil-compose:2.7.0" jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrains-compose" } -dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.20" } +dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "2.0.0" } junit = { module = "junit:junit", version = "4.13.2" } From c1748832c2d1d3fff915ab6dc6bf7340cbed2453 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 04:25:20 +0000 Subject: [PATCH 209/269] Update Kotlin/KSP (#545) * Update Kotlin/KSP * Update Yarn lock * Duplicate browser externals locally WasmJs removed them from the stdlib, and the kotlinx.browser 'replacements' are not stable. --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 4 +- kotlin-js-store/yarn.lock | 59 +++++++------------ .../molecule/WindowAnimationFrameClock.kt | 1 - .../kotlin/app/cash/molecule/browser.kt | 31 ++++++++++ .../kotlin/app/cash/molecule/timeSource.kt | 2 - 5 files changed, 55 insertions(+), 42 deletions(-) create mode 100644 molecule-runtime/src/browserMain/kotlin/app/cash/molecule/browser.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cc52f3ec..ddadf5f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "35" minSdk = "21" coroutine = "1.9.0" -kotlin = "2.0.21" +kotlin = "2.1.0" jetbrains-compose = "1.7.1" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.0.21-1.0.28" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.0-1.0.29" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 5d5032bc..63d4e859 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -87,33 +87,12 @@ dependencies: "@types/node" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" - integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== -"@types/json-schema@*", "@types/json-schema@^7.0.8": +"@types/json-schema@^7.0.8": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -672,7 +651,7 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" -enhanced-resolve@^5.17.0: +enhanced-resolve@^5.17.1: version "5.17.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== @@ -1122,10 +1101,10 @@ karma-webpack@5.0.1: minimatch "^9.0.3" webpack-merge "^4.1.5" -karma@6.4.3: - version "6.4.3" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.3.tgz#763e500f99597218bbb536de1a14acc4ceea7ce8" - integrity sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q== +karma@6.4.4: + version "6.4.4" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.4.tgz#dfa5a426cf5a8b53b43cd54ef0d0d09742351492" + integrity sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w== dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -1157,6 +1136,13 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kotlin-web-helpers@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-2.0.0.tgz#b112096b273c1e733e0b86560998235c09a19286" + integrity sha512-xkVGl60Ygn/zuLkDPx+oHj7jeLR7hCvoNF99nhwXMn8a3ApB4lLiC9pk4ol4NHPjyoCbvQctBqvzUcp8pkqyWw== + dependencies: + format-util "^1.0.5" + loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" @@ -1260,10 +1246,10 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.7.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.0.tgz#9e5cbed8fa9b37537a25bd1f7fb4f6fc45458b9a" - integrity sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA== +mocha@10.7.3: + version "10.7.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752" + integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== dependencies: ansi-colors "^4.1.3" browser-stdout "^1.3.1" @@ -1862,12 +1848,11 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.93.0: - version "5.93.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5" - integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== +webpack@5.94.0: + version "5.94.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" + integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== dependencies: - "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" "@webassemblyjs/ast" "^1.12.1" "@webassemblyjs/wasm-edit" "^1.12.1" @@ -1876,7 +1861,7 @@ webpack@5.93.0: acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.0" + enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" diff --git a/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt index 5731c4fe..3ebc6d8d 100644 --- a/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt +++ b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/WindowAnimationFrameClock.kt @@ -18,7 +18,6 @@ package app.cash.molecule import androidx.compose.runtime.MonotonicFrameClock import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine -import kotlinx.browser.window public object WindowAnimationFrameClock : MonotonicFrameClock { override suspend fun withFrameNanos( diff --git a/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/browser.kt b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/browser.kt new file mode 100644 index 00000000..b74adcae --- /dev/null +++ b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/browser.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +// This file contains a subset of browser APIs normally provided by the Kotlin stdlib. +// However, these were recently removed in favor of kotlinx.browser which is not stable. +// Thus, we duplicate them for both JS and Wasm JS since this is a shared source set. + +internal external val window: Window + +internal external interface Window { + val performance: Performance + fun requestAnimationFrame(callback: (Double) -> Unit) +} + +internal external interface Performance { + fun now(): Double +} diff --git a/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/timeSource.kt b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/timeSource.kt index ca3f3737..c345b97e 100644 --- a/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/timeSource.kt +++ b/molecule-runtime/src/browserMain/kotlin/app/cash/molecule/timeSource.kt @@ -15,7 +15,5 @@ */ package app.cash.molecule -import kotlinx.browser.window - @Suppress("NOTHING_TO_INLINE") internal actual inline fun nanoTime(): Long = window.performance.now().toLong() * 1_000_000 From 69ec9885e73215bc5f526962bd9c5a39a1668773 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 20:56:51 +0000 Subject: [PATCH 210/269] Update dependency org.jetbrains.kotlinx:binary-compatibility-validator to v0.17.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddadf5f1..64e8c8e8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,7 +33,7 @@ kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plug kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } -kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3" +kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.17.0" ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.5.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" From 9aa821dde0f065cd9b6a75cf6201a9cb0eeb9ac0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 20:56:55 +0000 Subject: [PATCH 211/269] Update kotlinx-coroutines monorepo to v1.10.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddadf5f1..58ed8058 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ compileSdk = "35" minSdk = "21" -coroutine = "1.9.0" +coroutine = "1.10.0" kotlin = "2.1.0" jetbrains-compose = "1.7.1" squareup-okhttp = "4.12.0" From 6371b7e5287e000355e63a359664e06f11bcfd77 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:24:54 +0000 Subject: [PATCH 212/269] Update dependency org.jetbrains.compose.runtime:runtime to v1.7.3 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a0e4139a..8bf837dd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.10.0" kotlin = "2.1.0" -jetbrains-compose = "1.7.1" +jetbrains-compose = "1.7.3" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From 02ebf6dd43be7c8bdcba9e8b0702e717b04f0ee3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:23:41 +0000 Subject: [PATCH 213/269] Update kotlinx-coroutines monorepo to v1.10.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8bf837dd..f27af503 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ compileSdk = "35" minSdk = "21" -coroutine = "1.10.0" +coroutine = "1.10.1" kotlin = "2.1.0" jetbrains-compose = "1.7.3" squareup-okhttp = "4.12.0" From de3b4699c896e91b16d20669edadd7a4bbe1f4e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:26:09 +0000 Subject: [PATCH 214/269] Update dependency gradle to v8.12 --- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e2847c82..cea7a793 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6d..f3b75f3b 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum From c88193c100181f1f2c080d1621b00c2d540c429a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 00:46:29 +0000 Subject: [PATCH 215/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f27af503..ba862f19 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,7 +40,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "6.25.0" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.0" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From f8fd24d72e777214b043a188523010b4f94e6628 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 16:35:58 +0000 Subject: [PATCH 216/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ba862f19..6d39c89d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,7 +40,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.0" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.1" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From 046b38aa2be11a166ba98340f702af7434e16a83 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 14:39:05 +0000 Subject: [PATCH 217/269] Migrate renovate config (#563) * Migrate config renovate.json5 * Update renovate.json5 --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- renovate.json5 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/renovate.json5 b/renovate.json5 index 28400558..96ea9a35 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -1,15 +1,15 @@ { - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base" + $schema: 'https://docs.renovatebot.com/renovate-schema.json', + extends: [ + 'config:recommended', ], - "packageRules": [ + packageRules: [ + // KSP is tightly coupled to Kotlin version. { - // KSP is tightly coupled to Kotlin version. - "groupName": "Kotlin/KSP", - "matchPackagePrefixes": [ - "org.jetbrains.kotlin:kotlin", - "com.google.devtools.ksp", + groupName: 'Kotlin/KSP', + matchPackageNames: [ + 'org.jetbrains.kotlin:kotlin{/,}**', + 'com.google.devtools.ksp{/,}**', ], }, ], From 29983aef5224a820f038786f2fb1216d3c343289 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 8 Jan 2025 13:21:46 -0500 Subject: [PATCH 218/269] Move Renovate configuration to GitHub folder --- renovate.json5 => .github/renovate.json5 | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename renovate.json5 => .github/renovate.json5 (100%) diff --git a/renovate.json5 b/.github/renovate.json5 similarity index 100% rename from renovate.json5 rename to .github/renovate.json5 From e08999d452d2dd33bbfbb3daf3298a3fa581ebd7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:16:03 +0000 Subject: [PATCH 219/269] Update dependency com.android.tools.build:gradle to v8.8.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6d39c89d..ce87526a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.7.3" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } From 9e02da6c1fc2d71003b0023e9f2f8e8397f2d527 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 23:44:47 +0000 Subject: [PATCH 220/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.2 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ce87526a..ccd4956c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,7 +40,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.1" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.2" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From 271c0cbdef14e68d893d9b39b57fbd5e26017cf6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 21:26:14 +0000 Subject: [PATCH 221/269] Update dependency androidx.activity:activity-compose to v1.10.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ccd4956c..6fde538e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-retrofit = "2.11.0" android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } -androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.0" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.12.01" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 8d53c3511d013febeed7c1d73a22053e4a5985dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 21:26:18 +0000 Subject: [PATCH 222/269] Update dependency androidx.compose:compose-bom to v2025 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ccd4956c..f3b30cfb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.9.3" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2024.12.01" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2025.01.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From ec8c2d9fe64d990bf31c817fcab74bcdf25665fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:04:19 +0000 Subject: [PATCH 223/269] Update dependency gradle to v8.12.1 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a793..e18bc253 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 4b76a6110af9710460975a2213d0e8be2dfb59ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 08:34:37 +0000 Subject: [PATCH 224/269] Update dependency org.jetbrains.kotlin:compose-compiler-gradle-plugin to v2.1.10 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f151c5e2..270dc3d2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "35" minSdk = "21" coroutine = "1.10.1" -kotlin = "2.1.0" +kotlin = "2.1.10" jetbrains-compose = "1.7.3" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From 51ff6455ad4e5cc456322cf46eb0a31228537e07 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 08:34:41 +0000 Subject: [PATCH 225/269] Update dependency org.jetbrains.kotlin:kotlin-test to v2.1.10 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f151c5e2..270dc3d2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "35" minSdk = "21" coroutine = "1.10.1" -kotlin = "2.1.0" +kotlin = "2.1.10" jetbrains-compose = "1.7.3" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From 9b48ec2622aa2d4bcbd3a486909e486d37d20452 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 22:05:03 +0000 Subject: [PATCH 226/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.1.10-1.0.29 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 270dc3d2..a068c563 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.0-1.0.29" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.10-1.0.29" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From a3c240c6fe2f44d3e51f66a9eb98ef65f8ab73f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jan 2025 21:15:11 +0000 Subject: [PATCH 227/269] Update dependency androidx.compose:compose-bom to v2025.01.01 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a068c563..9d441264 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.0" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2025.01.00" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2025.01.01" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From b7880aafc3ad0b1f8f227cabff512d8ecbe633e5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 19:00:32 +0000 Subject: [PATCH 228/269] Update dependency androidx.compose:compose-bom to v2025.02.00 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9d441264..a17d731d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.0" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2025.01.01" } +androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2025.02.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } coil-compose = "io.coil-kt:coil-compose:2.7.0" From 9fefa4c3bc7aeaf4ec860ba1ac4c6ea0b107b87c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 19:02:16 +0000 Subject: [PATCH 229/269] Update dependency com.android.tools.build:gradle to v8.8.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9d441264..5f637f11 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.0" } From 57df4abd65a39fe7047496d4b7046bba09f437a9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 07:03:05 +0000 Subject: [PATCH 230/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.1.10-1.0.30 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5f637f11..fa81e4cb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.10-1.0.29" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.10-1.0.30" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 0a457d139558dd650badc67dd4cad8ad9d0b9f76 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 18 Feb 2025 12:48:21 -0500 Subject: [PATCH 231/269] Migrate to new sonatype and signing credentials --- .github/workflows/build.yaml | 6 ++++-- .github/workflows/release.yaml | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0090f62a..6d119c5b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -61,8 +61,10 @@ jobs: - run: ./gradlew publish dokkaHtml env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_USERNAME_APP_CASH }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_PASSWORD_APP_CASH }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} - name: Deploy docs to website uses: JamesIves/github-pages-deploy-action@releases/v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fa688b82..4cd83e87 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -18,9 +18,10 @@ jobs: - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew publish dokkaHtml env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} - ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.ARTIFACT_SIGNING_PRIVATE_KEY }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_USERNAME_APP_CASH }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_PASSWORD_APP_CASH }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} - name: Extract release notes id: release_notes From 183c75c2f6991431fd88052d58045992b79f8723 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 19 Feb 2025 13:18:53 -0500 Subject: [PATCH 232/269] Remove old property We don't have our own plugin anymore --- gradle.properties | 3 --- 1 file changed, 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 66fa97d9..ed427b4a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,9 +32,6 @@ android.defaults.buildfeatures.renderscript=false android.defaults.buildfeatures.resvalues=false android.defaults.buildfeatures.shaders=false -# Signals to our own plugin that we are building within the repo. -app.cash.molecule.internal=true - kotlin.mpp.stability.nowarn=true # This is needed for the JB Compose runtime to link on native targets. They also use this flag From aff8e931082a810c1d365d311a62e2a640ccb6ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 13:17:04 +0000 Subject: [PATCH 233/269] Update dependency gradle to v8.13 --- gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9530d66f5e68d973ea569d8e19de379189..9bbc975c742b298b441bfb90dbc124400a3751b9 100644 GIT binary patch delta 34744 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 delta 34727 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�{ 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 a%EQ2*fnt2> Date: Tue, 25 Feb 2025 11:35:39 -0500 Subject: [PATCH 234/269] Show Gradle stacktraces, disable Kotlin incremental --- .github/workflows/build.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6d119c5b..eb46c5bc 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -9,6 +9,9 @@ on: tags-ignore: - '**' +env: + GRADLE_OPTS: "-Dkotlin.incremental=false -Dorg.gradle.logging.stacktrace=full" + jobs: build: runs-on: macos-latest From 7551e631888959cf34a26153f230cfee00ea4451 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 25 Feb 2025 14:02:14 -0500 Subject: [PATCH 235/269] Fix env var name (#586) * Fix env var name * Fix release, too! --- .github/workflows/build.yaml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index eb46c5bc..712d072d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -67,7 +67,7 @@ jobs: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_USERNAME_APP_CASH }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_PASSWORD_APP_CASH }} ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }} - ORG_GRADLE_PROJECT_signingInMemoryPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} - name: Deploy docs to website uses: JamesIves/github-pages-deploy-action@releases/v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 4cd83e87..c4823512 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -21,7 +21,7 @@ jobs: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_USERNAME_APP_CASH }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_PASSWORD_APP_CASH }} ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }} - ORG_GRADLE_PROJECT_signingInMemoryPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} - name: Extract release notes id: release_notes From 8e10154d3724ed5b58dc0f8c985c21413ff17360 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 26 Feb 2025 14:57:07 -0500 Subject: [PATCH 236/269] Centralize CI build JDK, update with Renovate --- .github/renovate.json5 | 20 ++++++++++++++++++++ .github/workflows/.java-version | 1 + .github/workflows/build.yaml | 6 +++--- .github/workflows/release.yaml | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/.java-version diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 96ea9a35..a3559d10 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -13,4 +13,24 @@ ], }, ], + ignorePresets: [ + // Ensure we get the latest version and are not pinned to old versions. + 'workarounds:javaLTSVersions', + ], + customManagers: [ + // Update .java-version file with the latest JDK version. + { + customType: 'regex', + fileMatch: [ + '\\.java-version$', + ], + matchStrings: [ + '(?.*)\\n', + ], + datasourceTemplate: 'java-version', + depNameTemplate: 'java', + // Only write the major version. + extractVersionTemplate: '^(?\\d+)', + }, + ] } diff --git a/.github/workflows/.java-version b/.github/workflows/.java-version new file mode 100644 index 00000000..40994076 --- /dev/null +++ b/.github/workflows/.java-version @@ -0,0 +1 @@ +23 diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 712d072d..8299a4a6 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -20,7 +20,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 23 + java-version-file: .github/workflows/.java-version - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew build @@ -39,7 +39,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 23 + java-version-file: .github/workflows/.java-version - uses: gradle/actions/setup-gradle@v4 - name: Run Tests @@ -59,7 +59,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 23 + java-version-file: .github/workflows/.java-version - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew publish dokkaHtml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c4823512..49ac53f5 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,7 +14,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 20 + java-version-file: .github/workflows/.java-version - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew publish dokkaHtml env: From 5d7a58533a7e4e3c4e70663bc5b20b37496c5b41 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 19:58:02 +0000 Subject: [PATCH 237/269] Update dependency androidx.activity:activity-compose to v1.10.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cccfe8e6..40f31d59 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ squareup-retrofit = "2.11.0" android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } -androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.0" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2025.02.00" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } From 3322fe201f149b230985dbde7328db8ed5f63ded Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 19:58:06 +0000 Subject: [PATCH 238/269] Update dependency com.android.tools.build:gradle to v8.8.2 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cccfe8e6..c8d8bb0b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.0" } From 738a09ee51e296a523840531db068859ca7c7fbe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:21:07 +0000 Subject: [PATCH 239/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.1.10-1.0.31 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e9f60db6..60470fc8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.10-1.0.30" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.10-1.0.31" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From c239bb216af96e5aafe3412d7588c4f2e2bb68bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 22:24:24 +0000 Subject: [PATCH 240/269] Update dependency com.android.tools.build:gradle to v8.9.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 60470fc8..12bb95a2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.8.2" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.9.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } From cac83452727c41352d171b64c1f2819237c53428 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:49:30 +0000 Subject: [PATCH 241/269] Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.31.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 12bb95a2..2ad80bc8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibili ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.5.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" -maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.30.0" } +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.31.0" } spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.2" } From b471cab2fc532a1d466b1fbafcdd4872a96da3c5 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 12 Mar 2025 15:52:43 -0400 Subject: [PATCH 242/269] Remove Compose BOM It provides no value. --- gradle/libs.versions.toml | 3 +-- sample-viewmodel/build.gradle | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2ad80bc8..0fff1e4b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,8 +14,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } -androidx-compose-bom = { module = "androidx.compose:compose-bom", version = "2025.02.00" } -androidx-compose-material3 = { module = "androidx.compose.material3:material3" } +androidx-compose-material3 = "androidx.compose.material3:material3:1.3.1" coil-compose = "io.coil-kt:coil-compose:2.7.0" diff --git a/sample-viewmodel/build.gradle b/sample-viewmodel/build.gradle index b98ecb66..b59186cf 100644 --- a/sample-viewmodel/build.gradle +++ b/sample-viewmodel/build.gradle @@ -5,7 +5,6 @@ apply plugin: 'com.google.devtools.ksp' dependencies { implementation projects.moleculeRuntime - implementation platform(libs.androidx.compose.bom) implementation libs.androidx.activity.compose implementation libs.androidx.compose.material3 implementation libs.coil.compose From 492cd4630ef5ea6a364611834276683a3df73b4b Mon Sep 17 00:00:00 2001 From: FletchMcKee Date: Mon, 17 Mar 2025 10:12:13 -0500 Subject: [PATCH 243/269] Fix errorDelayed flaky tests (#596) * Fix errorDelayed and errorInEmitterDelayed flaky tests This should provide a more robust solution to this issue as I believe I have discovered why this was happening. - The snapshotHandle from the `errorImmediately` and `errorInEmitterImmediately` tests were leaking into other tests, and this was especially problematic with the delayed tests. - The window for creating this was small but not improbable. I'll write a more detailed report in the PR, but what was happening was the snapshotHandle from the immediately tests was leaking into the delayed tests and intercepting the delayed tests' attempts to call `Snapshot.sendApplyNotifications()` via unregistering its global write observer. This could occur in successful test results as well, but what would ultimately cause the issue was if the interception occurred and `clock.sendFrame(0)` was invoked before the immediately's snapshotHandle had finished advancing the global snapshot. It took me a while to realize how this was happening, but then I realized the `runCurrent` calls in the delayed tests had no effect on the immediately tests. This is why `Snapshot.isApplyObserverNotificationPending` was always true at the moment before failure and why the `clock.hasAwaiters` was always false. * Removed unnecessary `runCurrent` call and assertion. --- .../kotlin/app/cash/molecule/molecule.kt | 3 +- .../cash/molecule/MoleculeStateFlowTest.kt | 25 ++++---- .../kotlin/app/cash/molecule/MoleculeTest.kt | 58 +++++++++++-------- 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt index 1380c98d..64f16707 100644 --- a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.snapshots.Snapshot import kotlin.DeprecationLevel.HIDDEN import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext -import kotlin.coroutines.cancellation.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineStart.UNDISPATCHED import kotlinx.coroutines.channels.Channel @@ -180,7 +179,7 @@ public fun CoroutineScope.launchMolecule( launch(finalContext, start = UNDISPATCHED) { try { recomposer.runRecomposeAndApplyChanges() - } catch (e: CancellationException) { + } finally { composition.dispose() snapshotHandle?.dispose() } diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt index 51fee0ac..8cd1dd8f 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeStateFlowTest.kt @@ -21,19 +21,19 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshots.Snapshot import app.cash.molecule.RecompositionMode.ContextClock import app.cash.molecule.RecompositionMode.Immediate import assertk.assertFailure import assertk.assertThat import assertk.assertions.isEqualTo import assertk.assertions.isSameInstanceAs +import assertk.assertions.isTrue import kotlin.test.Test import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job -import kotlinx.coroutines.cancel +import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.delay import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.job @@ -83,12 +83,13 @@ class MoleculeStateFlowTest { clock.sendFrame(0) assertThat(flow.value).isEqualTo(2) - job.cancel() + job.cancelAndJoin() } - @Test fun errorImmediately() { + @Test fun errorImmediately() = runTest { + val job = Job() val clock = BroadcastFrameClock() - val scope = CoroutineScope(clock) + val scope = CoroutineScope(coroutineContext + job + clock) // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} @@ -98,7 +99,8 @@ class MoleculeStateFlowTest { } }.isSameInstanceAs(runtimeException) - scope.cancel() + // This exception is processed in `composeInitial` and not `runRecomposeAndApplyChanges`, so the job is still active. + job.cancelAndJoin() } @Test fun errorDelayed() = runTest { @@ -121,13 +123,13 @@ class MoleculeStateFlowTest { assertThat(flow.value).isEqualTo(0) count++ - Snapshot.sendApplyNotifications() // Ensure external state mutation is observed. runCurrent() clock.sendFrame(0) runCurrent() assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) - job.cancel() + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } @Test fun errorInEffect() = runTest { @@ -153,7 +155,8 @@ class MoleculeStateFlowTest { clock.sendFrame(0) assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) - job.cancel() + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } @Test @@ -187,7 +190,7 @@ class MoleculeStateFlowTest { runCurrent() assertThat(flow.value).isEqualTo(2) - job.cancel() + job.cancelAndJoin() } @Test fun errorDelayedImmediate() = runTest { @@ -215,6 +218,8 @@ class MoleculeStateFlowTest { job.join() assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } } } diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt index af65ec0b..409deafc 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt @@ -24,7 +24,6 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshots.Snapshot import app.cash.molecule.MoleculeTest.DisposableEffectState.DISPOSED import app.cash.molecule.MoleculeTest.DisposableEffectState.LAUNCHED import app.cash.molecule.MoleculeTest.DisposableEffectState.NOT_LAUNCHED @@ -35,13 +34,13 @@ import assertk.assertThat import assertk.assertions.isEqualTo import assertk.assertions.isNotSameInstanceAs import assertk.assertions.isSameInstanceAs +import assertk.assertions.isTrue import kotlin.test.Test import kotlin.test.fail import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job -import kotlinx.coroutines.cancel import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay @@ -92,12 +91,13 @@ class MoleculeTest { clock.sendFrame(0) assertThat(value).isEqualTo(2) - job.cancel() + job.cancelAndJoin() } - @Test fun errorImmediately() { + @Test fun errorImmediately() = runTest { + val job = Job() val clock = BroadcastFrameClock() - val scope = CoroutineScope(clock) + val scope = CoroutineScope(coroutineContext + job + clock) // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} @@ -107,7 +107,8 @@ class MoleculeTest { } }.isSameInstanceAs(runtimeException) - scope.cancel() + // This exception is processed in `composeInitial` and not `runRecomposeAndApplyChanges`, so the job is still active. + job.cancelAndJoin() } @Test fun errorDelayed() = runTest { @@ -130,13 +131,13 @@ class MoleculeTest { assertThat(value).isEqualTo(0) count++ - Snapshot.sendApplyNotifications() // Ensure external state mutation is observed. runCurrent() clock.sendFrame(0) runCurrent() assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) - job.cancel() + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } @Test fun errorInEffect() = runTest { @@ -163,12 +164,14 @@ class MoleculeTest { clock.sendFrame(0) assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) - job.cancel() + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } - @Test fun errorInEmitterImmediately() { + @Test fun errorInEmitterImmediately() = runTest { + val job = Job() val clock = BroadcastFrameClock() - val scope = CoroutineScope(clock) + val scope = CoroutineScope(coroutineContext + job + clock) // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} @@ -178,7 +181,8 @@ class MoleculeTest { } }.isSameInstanceAs(runtimeException) - scope.cancel() + // This exception is processed in `composeInitial` and not `runRecomposeAndApplyChanges`, so the job is still active. + job.cancelAndJoin() } @Test fun errorInEmitterDelayed() = runTest { @@ -206,13 +210,13 @@ class MoleculeTest { assertThat(value).isEqualTo(0) count++ - Snapshot.sendApplyNotifications() // Ensure external state mutation is observed. runCurrent() clock.sendFrame(0) runCurrent() assertThat(exceptionHandler.exceptions.single()).isSameInstanceAs(runtimeException) - job.cancel() + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } enum class DisposableEffectState { NOT_LAUNCHED, LAUNCHED, DISPOSED } @@ -236,8 +240,7 @@ class MoleculeTest { assertThat(state).isEqualTo(LAUNCHED) - job.cancel() - runCurrent() + job.cancelAndJoin() assertThat(state).isEqualTo(DISPOSED) } @@ -277,7 +280,7 @@ class MoleculeTest { value = values.awaitValue() assertThat(value).isEqualTo(5) - job.cancel() + job.cancelAndJoin() } @Test @@ -298,7 +301,7 @@ class MoleculeTest { // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} var count by mutableIntStateOf(0) - launch { + val job = launch { val exception = runCatching { moleculeFlow(mode = Immediate) { if (count == 1) { @@ -315,7 +318,9 @@ class MoleculeTest { assertThat(values.awaitValue()).isEqualTo(0) count++ - Snapshot.sendApplyNotifications() // Ensure external state mutation is observed. + runCurrent() + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } @Test @@ -324,7 +329,7 @@ class MoleculeTest { // Use a custom subtype to prevent coroutines from breaking referential equality. val runtimeException = object : RuntimeException() {} - launch { + val job = launch { val exception = runCatching { moleculeFlow(mode = Immediate) { LaunchedEffect(Unit) { @@ -341,7 +346,10 @@ class MoleculeTest { assertThat(values.awaitValue()).isEqualTo(0) - Snapshot.sendApplyNotifications() // Ensure external state mutation is observed. + advanceTimeBy(50) + runCurrent() + // Verify `runRecomposeAndApplyChanges` is no longer active. + assertThat(job.isCompleted).isTrue() } @Test @@ -373,23 +381,27 @@ class MoleculeTest { } @Test fun coroutineContextUsed() = runTest { + val job = Job() val expectedName = CoroutineName("test_key") var actualName: CoroutineName? = null - backgroundScope.launchMolecule(Immediate, expectedName) { + backgroundScope.launchMolecule(Immediate, job + expectedName) { actualName = rememberCoroutineScope().coroutineContext[CoroutineName] } assertThat(actualName).isEqualTo(expectedName) + job.cancelAndJoin() } @Test fun coroutineContextClockDoesNotOverrideImmediate() = runTest { + val job = Job() val myClock = BroadcastFrameClock() var actualClock: MonotonicFrameClock? = null - backgroundScope.launchMolecule(Immediate, myClock) { + backgroundScope.launchMolecule(Immediate, job + myClock) { actualClock = rememberCoroutineScope().coroutineContext[MonotonicFrameClock] } assertThat(actualClock).isNotSameInstanceAs(myClock) + job.cancelAndJoin() } private suspend fun Channel.awaitValue(): T = withTimeout(1000) { receive() } From 9a2ee9c15aa2146d926abf400e80c907d0866ee8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:18:05 +0000 Subject: [PATCH 244/269] Update dependency org.jetbrains.kotlin:compose-compiler-gradle-plugin to v2.1.20 (#598) * Update dependency org.jetbrains.kotlin:compose-compiler-gradle-plugin to v2.1.20 * Update KSP --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0fff1e4b..983a410a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "35" minSdk = "21" coroutine = "1.10.1" -kotlin = "2.1.10" +kotlin = "2.1.20" jetbrains-compose = "1.7.3" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" @@ -27,7 +27,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.10-1.0.31" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.20-RC3-1.0.31" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 5bd83dab7c1796a926b77a9add217f0a96b8a7c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 02:42:09 +0000 Subject: [PATCH 245/269] Update Kotlin/KSP to v2.1.20 (#597) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 9ffe3164c7b224efc28a89d82d8597b35b0e8332 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 03:01:28 +0000 Subject: [PATCH 246/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.1.20-1.0.31 (#600) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 983a410a..bed34ce9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.20-RC3-1.0.31" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.20-1.0.31" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 24253b9face9bf747c8b7bbe92ff1e014e2a8754 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 19:29:56 -0400 Subject: [PATCH 247/269] Update dependency com.android.tools.build:gradle to v8.9.1 (#601) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bed34ce9..6b7c95e3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.9.0" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.9.1" } androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } From e3194cde8e473da35a3a9fcc95cae51f3156b4d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 00:41:02 -0400 Subject: [PATCH 248/269] Update dependency com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin to v2.1.20-1.0.32 (#602) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6b7c95e3..4c1cfe53 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.20-1.0.31" +kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.20-1.0.32" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } From 894dcb0e1c3c4192bb6d8c3db8759c24e1e04d42 Mon Sep 17 00:00:00 2001 From: Sripadmanaban Subramanian Date: Sun, 30 Mar 2025 17:17:11 +0530 Subject: [PATCH 249/269] Removing moshi and kSP. (#605) Replacing moshi and ksp with kotlin serialization. --- .github/renovate.json5 | 10 ---------- build.gradle | 2 +- gradle/libs.versions.toml | 7 ++++--- sample-viewmodel/build.gradle | 7 +++---- .../java/com/example/molecule/viewmodel/data.kt | 15 ++++++++++----- 5 files changed, 18 insertions(+), 23 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index a3559d10..5fd1a775 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -3,16 +3,6 @@ extends: [ 'config:recommended', ], - packageRules: [ - // KSP is tightly coupled to Kotlin version. - { - groupName: 'Kotlin/KSP', - matchPackageNames: [ - 'org.jetbrains.kotlin:kotlin{/,}**', - 'com.google.devtools.ksp{/,}**', - ], - }, - ], ignorePresets: [ // Ensure we get the latest version and are not pinned to old versions. 'workarounds:javaLTSVersions', diff --git a/build.gradle b/build.gradle index ae36f670..fe998347 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { classpath libs.android.plugin classpath libs.kotlin.plugin.core classpath libs.kotlin.plugin.compose - classpath libs.kotlin.ksp.plugin + classpath libs.kotlin.plugin.serialization classpath libs.maven.publish.plugin classpath libs.dokka.plugin classpath libs.spotless.plugin diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4c1cfe53..7f576988 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,6 +5,7 @@ minSdk = "21" coroutine = "1.10.1" kotlin = "2.1.20" jetbrains-compose = "1.7.3" +serialization = "1.8.0" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" @@ -26,11 +27,12 @@ junit = { module = "junit:junit", version = "4.13.2" } kotlin-plugin-core = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-plugin-compose = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } +kotlin-plugin-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-ksp-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.20-1.0.32" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } +kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" } kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.17.0" @@ -45,8 +47,7 @@ squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } squareup-retrofit-client = { module = "com.squareup.retrofit2:retrofit", version.ref = "squareup-retrofit" } squareup-retrofit-converter-scalars = { module = "com.squareup.retrofit2:converter-scalars", version.ref = "squareup-retrofit" } -squareup-retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "squareup-retrofit" } -squareup-moshi-codegen = "com.squareup.moshi:moshi-kotlin-codegen:1.15.2" +squareup-retrofit-converter-kotlinx-serialization = { module = "com.squareup.retrofit2:converter-kotlinx-serialization", version.ref = "squareup-retrofit" } assertk = "com.willowtreeapps.assertk:assertk:0.28.1" turbine = { module = "app.cash.turbine:turbine", version = "1.2.0" } diff --git a/sample-viewmodel/build.gradle b/sample-viewmodel/build.gradle index b59186cf..c6b45978 100644 --- a/sample-viewmodel/build.gradle +++ b/sample-viewmodel/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.application' apply plugin: 'org.jetbrains.kotlin.android' apply plugin: 'org.jetbrains.kotlin.plugin.compose' -apply plugin: 'com.google.devtools.ksp' +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' dependencies { implementation projects.moleculeRuntime @@ -9,9 +9,8 @@ dependencies { implementation libs.androidx.compose.material3 implementation libs.coil.compose implementation libs.squareup.retrofit.client - implementation libs.squareup.retrofit.converter.moshi - - ksp libs.squareup.moshi.codegen + implementation libs.squareup.retrofit.converter.kotlinx.serialization + implementation libs.kotlinx.serialization testImplementation libs.junit testImplementation libs.kotlinx.coroutines.test diff --git a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt index 61543781..68719eba 100644 --- a/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt +++ b/sample-viewmodel/src/main/java/com/example/molecule/viewmodel/data.kt @@ -15,9 +15,11 @@ */ package com.example.molecule.viewmodel -import com.squareup.moshi.JsonClass +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import okhttp3.MediaType.Companion.toMediaType import retrofit2.Retrofit -import retrofit2.converter.moshi.MoshiConverterFactory +import retrofit2.converter.kotlinx.serialization.asConverterFactory import retrofit2.create import retrofit2.http.GET import retrofit2.http.Path @@ -28,9 +30,12 @@ interface PupperPicsService { } fun PupperPicsService(): PupperPicsService { + val json = Json { + ignoreUnknownKeys = true + } val api = Retrofit.Builder() .baseUrl("https://dog.ceo/api/") - .addConverterFactory(MoshiConverterFactory.create()) + .addConverterFactory(json.asConverterFactory("application/json; charset=UTF8".toMediaType())) .build() .create() @@ -58,9 +63,9 @@ interface PupperPicsApi { @GET("breed/{breed}/images/random") suspend fun randomImageFor(@Path("breed", encoded = true) breed: String): ImageResponse - @JsonClass(generateAdapter = true) + @Serializable data class ListResponse(val message: Map>) - @JsonClass(generateAdapter = true) + @Serializable data class ImageResponse(val message: String) } From 46c488231c13f6727ecde7756d89533a86de29c4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 17:21:23 +0000 Subject: [PATCH 250/269] Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.8.1 (#606) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7f576988..9854853b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ minSdk = "21" coroutine = "1.10.1" kotlin = "2.1.20" jetbrains-compose = "1.7.3" -serialization = "1.8.0" +serialization = "1.8.1" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From 41d4acb135385191b32377baa2f59d339cae628b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 23:45:05 -0400 Subject: [PATCH 251/269] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.3 (#608) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9854853b..7b978b4d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,7 +41,7 @@ ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.31.0" } -spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.2" } +spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.3" } squareup-okhttp-client = { module = "com.squareup.okhttp3:okhttp", version.ref = "squareup-okhttp" } squareup-okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "squareup-okhttp" } From af1d2bbbc29c040c42a5303be9cf807c4b4bf094 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:03:21 -0400 Subject: [PATCH 252/269] Update kotlinx-coroutines monorepo to v1.10.2 (#609) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7b978b4d..c9b8d69b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ compileSdk = "35" minSdk = "21" -coroutine = "1.10.1" +coroutine = "1.10.2" kotlin = "2.1.20" jetbrains-compose = "1.7.3" serialization = "1.8.1" From f6d9b3fdf00db44cc1907777ea155ebcbc095e9a Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Tue, 8 Apr 2025 10:31:35 -0400 Subject: [PATCH 253/269] Correctly propagate extra context to internal clock ticks (#607) --- CHANGELOG.md | 2 +- .../app/cash/molecule/GatedFrameClock.kt | 8 ++- .../app/cash/molecule/RecompositionMode.kt | 6 ++ .../kotlin/app/cash/molecule/molecule.kt | 4 +- .../app/cash/molecule/GatedFrameClockTest.kt | 3 +- .../cash/molecule/MoleculeConcurrentTest.kt | 64 +++++++++++++++++++ 6 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 molecule-runtime/src/jvmTest/kotlin/app/cash/molecule/MoleculeConcurrentTest.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 6752694e..dfa6cc46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ New: - Nothing yet! Changed: -- Nothing yet! +- Any specified additional coroutine context elements will now be honored in the coroutine used internally with `RecompositionMode.Immediate` to send frames and cause recomposition to occur. This is observable, most notably, when a `CoroutineDispatcher` is included, as now recompositions which occur after the first, synchronous one will occur on that dispatcher. Fixed: - Correct calculation of frame nano time for native Windows and native Linux targets. diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/GatedFrameClock.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/GatedFrameClock.kt index e4de8506..2c4c40ee 100644 --- a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/GatedFrameClock.kt +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/GatedFrameClock.kt @@ -17,6 +17,7 @@ package app.cash.molecule import androidx.compose.runtime.BroadcastFrameClock import androidx.compose.runtime.MonotonicFrameClock +import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel.Factory.CONFLATED @@ -28,11 +29,14 @@ import kotlinx.coroutines.launch * While running, any request for a frame immediately succeeds. If stopped, requests for a frame wait until * the clock is set to run again. */ -internal class GatedFrameClock(scope: CoroutineScope) : MonotonicFrameClock { +internal class GatedFrameClock( + scope: CoroutineScope, + context: CoroutineContext, +) : MonotonicFrameClock { private val frameSends = Channel(CONFLATED) init { - scope.launch { + scope.launch(context) { for (send in frameSends) sendFrame() } } diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/RecompositionMode.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/RecompositionMode.kt index 133ae6ff..6eff58cf 100644 --- a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/RecompositionMode.kt +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/RecompositionMode.kt @@ -25,12 +25,18 @@ public enum class RecompositionMode { * to determine when to run. If no clock is found in the context, an exception is thrown. * * Use this option to drive Molecule with a built-in frame clock or a custom one. + * + * After the initial, synchronous recomposition, future recompositions will run on a thread + * managed by the external clock. */ ContextClock, /** * Run recomposition eagerly whenever one is needed. * Molecule will emit a new item every time the snapshot state is invalidated. + * + * After the initial, synchronous recomposition, future recompositions will run on a thread + * managed by the dispatcher from the coroutine context. */ Immediate, } diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt index 64f16707..6224af81 100644 --- a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt @@ -58,7 +58,7 @@ private fun contextClockFlow(body: @Composable () -> T) = channelFlow { private fun immediateClockFlow(body: @Composable () -> T): Flow = flow { coroutineScope { - val clock = GatedFrameClock(this) + val clock = GatedFrameClock(this, EmptyCoroutineContext) val outputBuffer = Channel(1) launch(clock, start = UNDISPATCHED) { @@ -169,7 +169,7 @@ public fun CoroutineScope.launchMolecule( ) { val clockContext = when (mode) { RecompositionMode.ContextClock -> EmptyCoroutineContext - RecompositionMode.Immediate -> GatedFrameClock(this) + RecompositionMode.Immediate -> GatedFrameClock(this, context) } val finalContext = coroutineContext + context + clockContext diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/GatedFrameClockTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/GatedFrameClockTest.kt index 16fd8f7c..4ba77d8a 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/GatedFrameClockTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/GatedFrameClockTest.kt @@ -19,13 +19,14 @@ import assertk.all import assertk.assertThat import assertk.assertions.isLessThan import assertk.assertions.isPositive +import kotlin.coroutines.EmptyCoroutineContext import kotlin.test.Test import kotlinx.coroutines.test.runTest class GatedFrameClockTest { @Test fun ticksWithTime() = runTest { - val frameClock = GatedFrameClock(backgroundScope) + val frameClock = GatedFrameClock(backgroundScope, EmptyCoroutineContext) val frameTimeA = frameClock.withFrameNanos { it } val frameTimeB = frameClock.withFrameNanos { it } assertThat(frameTimeA).all { diff --git a/molecule-runtime/src/jvmTest/kotlin/app/cash/molecule/MoleculeConcurrentTest.kt b/molecule-runtime/src/jvmTest/kotlin/app/cash/molecule/MoleculeConcurrentTest.kt new file mode 100644 index 00000000..e6f70d7a --- /dev/null +++ b/molecule-runtime/src/jvmTest/kotlin/app/cash/molecule/MoleculeConcurrentTest.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2025 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import app.cash.molecule.RecompositionMode.Immediate +import assertk.assertThat +import assertk.assertions.isNotSameInstanceAs +import assertk.assertions.isSameInstanceAs +import kotlin.test.Test +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.cancelAndJoin +import kotlinx.coroutines.test.runTest + +// These tests are JVM only because they look at the current thread ID. It could be supported on +// all platforms with threads, but all the code is common, so this just gets us coverage quickly. +class MoleculeConcurrentTest { + @Test fun coroutineContextHonoredByImmediateClock() = runTest { + val testThread = Thread.currentThread() + var firstThread: Thread? = null + var secondThread: Thread? = null + + val job = Job() + val cancelLatch = CompletableDeferred() + backgroundScope.launchMolecule(Immediate, job + Dispatchers.Default) { + var count by remember { mutableIntStateOf(0) } + when (count) { + 0 -> firstThread = Thread.currentThread() + 1 -> secondThread = Thread.currentThread() + } + if (count == 1) { + cancelLatch.complete(Unit) + } + SideEffect { + count++ + } + } + cancelLatch.await() + + assertThat(firstThread).isSameInstanceAs(testThread) + assertThat(secondThread).isNotSameInstanceAs(testThread) + + job.cancelAndJoin() + } +} From c0eee7890627516aac72e6d8d9c09dae8958eb01 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 20:03:19 +0000 Subject: [PATCH 254/269] Update dependency androidx.compose.material3:material3 to v1.3.2 (#611) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c9b8d69b..9e35199d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } -androidx-compose-material3 = "androidx.compose.material3:material3:1.3.1" +androidx-compose-material3 = "androidx.compose.material3:material3:1.3.2" coil-compose = "io.coil-kt:coil-compose:2.7.0" From b284bd5ff089612a6a6aac73d0fa17c4a54cfdd4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 20:04:00 +0000 Subject: [PATCH 255/269] Update dependency androidx.core:core-ktx to v1.16.0 (#612) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e35199d..5f0ada28 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ squareup-retrofit = "2.11.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.9.1" } -androidx-core = { module = "androidx.core:core-ktx", version = "1.15.0" } +androidx-core = { module = "androidx.core:core-ktx", version = "1.16.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } From a1e8d4ecd41a6668701582a40cd4ca96faa2c5cf Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Thu, 10 Apr 2025 11:39:30 -0400 Subject: [PATCH 256/269] Add enum to control whether we register a snapshot notifier (#610) --- CHANGELOG.md | 2 +- .../api/android/molecule-runtime.api | 20 ++++- molecule-runtime/api/jvm/molecule-runtime.api | 20 ++++- .../api/molecule-runtime.klib.api | 14 ++++ .../app/cash/molecule/SnapshotNotifier.kt | 59 +++++++++++++ .../kotlin/app/cash/molecule/molecule.kt | 84 ++++++++++++++++--- .../kotlin/app/cash/molecule/MoleculeTest.kt | 55 ++++++++++++ 7 files changed, 235 insertions(+), 19 deletions(-) create mode 100644 molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index dfa6cc46..27985985 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## [Unreleased] New: -- Nothing yet! +- Add `SnapshotNotifier` enum to control whether Molecule automatically sends snapshot apply notifications. If you are using Molecule with another Compose-based library in a single application, you may want to disable our snapshot notification. See the enum for details on when that is appropriate. Changed: - Any specified additional coroutine context elements will now be honored in the coroutine used internally with `RecompositionMode.Immediate` to send frames and cause recomposition to occur. This is observable, most notably, when a `CoroutineDispatcher` is included, as now recompositions which occur after the first, synchronous one will occur on that dispatcher. diff --git a/molecule-runtime/api/android/molecule-runtime.api b/molecule-runtime/api/android/molecule-runtime.api index 79938cb6..a6d44a6e 100644 --- a/molecule-runtime/api/android/molecule-runtime.api +++ b/molecule-runtime/api/android/molecule-runtime.api @@ -21,13 +21,19 @@ public final class app/cash/molecule/AndroidUiFrameClock : androidx/compose/runt } public final class app/cash/molecule/MoleculeKt { - public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; - public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V + public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; + public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; + public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;)V + public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; + public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; + public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V - public static final fun moleculeFlow (Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static final fun moleculeFlow (Lapp/cash/molecule/RecompositionMode;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static final synthetic fun moleculeFlow (Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static synthetic fun moleculeFlow$default (Lapp/cash/molecule/RecompositionMode;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; } public final class app/cash/molecule/RecompositionMode : java/lang/Enum { @@ -38,3 +44,11 @@ public final class app/cash/molecule/RecompositionMode : java/lang/Enum { public static fun values ()[Lapp/cash/molecule/RecompositionMode; } +public final class app/cash/molecule/SnapshotNotifier : java/lang/Enum { + public static final field External Lapp/cash/molecule/SnapshotNotifier; + public static final field WhileActive Lapp/cash/molecule/SnapshotNotifier; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lapp/cash/molecule/SnapshotNotifier; + public static fun values ()[Lapp/cash/molecule/SnapshotNotifier; +} + diff --git a/molecule-runtime/api/jvm/molecule-runtime.api b/molecule-runtime/api/jvm/molecule-runtime.api index e427da01..23d63876 100644 --- a/molecule-runtime/api/jvm/molecule-runtime.api +++ b/molecule-runtime/api/jvm/molecule-runtime.api @@ -1,11 +1,17 @@ public final class app/cash/molecule/MoleculeKt { - public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; - public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V + public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; + public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; + public static final fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;)V + public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V public static final synthetic fun launchMolecule (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/StateFlow; + public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; + public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V public static synthetic fun launchMolecule$default (Lkotlinx/coroutines/CoroutineScope;Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V - public static final fun moleculeFlow (Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static final fun moleculeFlow (Lapp/cash/molecule/RecompositionMode;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static final synthetic fun moleculeFlow (Lapp/cash/molecule/RecompositionMode;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static synthetic fun moleculeFlow$default (Lapp/cash/molecule/RecompositionMode;Lapp/cash/molecule/SnapshotNotifier;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; } public final class app/cash/molecule/RecompositionMode : java/lang/Enum { @@ -16,3 +22,11 @@ public final class app/cash/molecule/RecompositionMode : java/lang/Enum { public static fun values ()[Lapp/cash/molecule/RecompositionMode; } +public final class app/cash/molecule/SnapshotNotifier : java/lang/Enum { + public static final field External Lapp/cash/molecule/SnapshotNotifier; + public static final field WhileActive Lapp/cash/molecule/SnapshotNotifier; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lapp/cash/molecule/SnapshotNotifier; + public static fun values ()[Lapp/cash/molecule/SnapshotNotifier; +} + diff --git a/molecule-runtime/api/molecule-runtime.klib.api b/molecule-runtime/api/molecule-runtime.klib.api index 2304bd4e..2dcb8e4a 100644 --- a/molecule-runtime/api/molecule-runtime.klib.api +++ b/molecule-runtime/api/molecule-runtime.klib.api @@ -20,12 +20,26 @@ final enum class app.cash.molecule/RecompositionMode : kotlin/Enum // app.cash.molecule/RecompositionMode.values|values#static(){}[0] } +final enum class app.cash.molecule/SnapshotNotifier : kotlin/Enum { // app.cash.molecule/SnapshotNotifier|null[0] + enum entry External // app.cash.molecule/SnapshotNotifier.External|null[0] + enum entry WhileActive // app.cash.molecule/SnapshotNotifier.WhileActive|null[0] + + final val entries // app.cash.molecule/SnapshotNotifier.entries|#static{}entries[0] + final fun (): kotlin.enums/EnumEntries // app.cash.molecule/SnapshotNotifier.entries.|#static(){}[0] + + final fun valueOf(kotlin/String): app.cash.molecule/SnapshotNotifier // app.cash.molecule/SnapshotNotifier.valueOf|valueOf#static(kotlin.String){}[0] + final fun values(): kotlin/Array // app.cash.molecule/SnapshotNotifier.values|values#static(){}[0] +} + final val app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop|#static{}app_cash_molecule_GatedFrameClock$stableprop[0] +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin.coroutines/CoroutineContext = ..., app.cash.molecule/SnapshotNotifier = ..., kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.coroutines.CoroutineContext;app.cash.molecule.SnapshotNotifier;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin.coroutines/CoroutineContext = ..., kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin.coroutines/CoroutineContext = ..., app.cash.molecule/SnapshotNotifier = ..., kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.coroutines.CoroutineContext;app.cash.molecule.SnapshotNotifier;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin.coroutines/CoroutineContext = ..., kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.coroutines.CoroutineContext;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function1<#A, kotlin/Unit>, kotlin/Function2) // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> (kotlinx.coroutines/CoroutineScope).app.cash.molecule/launchMolecule(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/StateFlow<#A> // app.cash.molecule/launchMolecule|launchMolecule@kotlinx.coroutines.CoroutineScope(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] +final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, app.cash.molecule/SnapshotNotifier = ..., kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;app.cash.molecule.SnapshotNotifier;kotlin.Function2){0§}[0] final fun <#A: kotlin/Any?> app.cash.molecule/moleculeFlow(app.cash.molecule/RecompositionMode, kotlin/Function2): kotlinx.coroutines.flow/Flow<#A> // app.cash.molecule/moleculeFlow|moleculeFlow(app.cash.molecule.RecompositionMode;kotlin.Function2){0§}[0] final fun app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop_getter(): kotlin/Int // app.cash.molecule/app_cash_molecule_GatedFrameClock$stableprop_getter|app_cash_molecule_GatedFrameClock$stableprop_getter(){}[0] diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt new file mode 100644 index 00000000..deedffd0 --- /dev/null +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2025 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +/** + * The different snapshot notification modes of Molecule. + * + * Compose uses snapshots to provide a consistent view of state. Mutations to state outside of the + * composition are not automatically observed, and notifications of changes must be manually sent. + * This can be achieved by registering a global write observer, for which you need at-minimum one + * per process. Applications which use other Compose-based systems like Compose UI likely already + * have one in place, whereas applications that only use Molecule need its automatic registering + * of this notifier. + * + * @see androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications + */ +public enum class SnapshotNotifier { + /** + * Rely on some other external system for sending snapshot change notifications. + * + * This should only be used if you can guarantee that someone else is listening to global + * snapshot writes and sending apply notifications. Usually this means that some other + * Compose-based system is being used in your application, and that it will always be + * initialized prior to Molecule or at the same time. + * + * Failure to ensure someone else is sending apply notifications will result in state writes + * not triggering additional recomposition. + * + * Some examples where this policy can be used: + * - On Android, using Compose UI _before_ Molecule (e.g., even just calling `setContent { }` on + * an `Activity` or `ComposeView`) will start a singleton snapshot write listener and applier. + * If you are sure that this will _always_ happen, specifying this policy for all Molecule + * launches is valid. + * - On JetBrains' Compose UI for Desktop, calling the `application { }` function is enough to + * ensure their singleton snapshot write listener and applier is started (you do not have to + * even show a window). + */ + External, + + /** + * Register a global snapshot write observer and send apply notifications when new writes occur + * using a coroutine launched on the same scope as the composition. This coroutine will be + * canceled and observer unregistered when that scope is canceled. + */ + WhileActive, +} diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt index 6224af81..06865c68 100644 --- a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt @@ -35,20 +35,37 @@ import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.launch +@Deprecated("", level = HIDDEN) // For binary compatibility. +public fun moleculeFlow(mode: RecompositionMode, body: @Composable () -> T): Flow { + return moleculeFlow( + mode = mode, + snapshotNotifier = SnapshotNotifier.WhileActive, + body = body, + ) +} + /** * Create a [Flow] which will continually recompose `body` to produce a stream of [T] values * when collected. */ -public fun moleculeFlow(mode: RecompositionMode, body: @Composable () -> T): Flow { +public fun moleculeFlow( + mode: RecompositionMode, + snapshotNotifier: SnapshotNotifier = SnapshotNotifier.WhileActive, + body: @Composable () -> T, +): Flow { return when (mode) { - RecompositionMode.ContextClock -> contextClockFlow(body) - RecompositionMode.Immediate -> immediateClockFlow(body) + RecompositionMode.ContextClock -> contextClockFlow(snapshotNotifier, body) + RecompositionMode.Immediate -> immediateClockFlow(snapshotNotifier, body) } } -private fun contextClockFlow(body: @Composable () -> T) = channelFlow { +private fun contextClockFlow( + snapshotNotifier: SnapshotNotifier, + body: @Composable () -> T, +) = channelFlow { launchMolecule( mode = RecompositionMode.ContextClock, + snapshotNotifier = snapshotNotifier, emitter = { trySend(it).getOrThrow() }, @@ -56,7 +73,10 @@ private fun contextClockFlow(body: @Composable () -> T) = channelFlow { ) } -private fun immediateClockFlow(body: @Composable () -> T): Flow = flow { +private fun immediateClockFlow( + snapshotNotifier: SnapshotNotifier, + body: @Composable () -> T, +): Flow = flow { coroutineScope { val clock = GatedFrameClock(this, EmptyCoroutineContext) val outputBuffer = Channel(1) @@ -64,6 +84,7 @@ private fun immediateClockFlow(body: @Composable () -> T): Flow = flow { launch(clock, start = UNDISPATCHED) { launchMolecule( mode = RecompositionMode.ContextClock, + snapshotNotifier = snapshotNotifier, emitter = { clock.isRunning = false outputBuffer.trySend(it).getOrThrow() @@ -106,6 +127,20 @@ public fun CoroutineScope.launchMolecule( body = body, ) +@Deprecated("", level = HIDDEN) // For binary compatibility. +public fun CoroutineScope.launchMolecule( + mode: RecompositionMode, + context: CoroutineContext = EmptyCoroutineContext, + body: @Composable () -> T, +): StateFlow { + return launchMolecule( + mode = mode, + context = context, + snapshotNotifier = SnapshotNotifier.WhileActive, + body = body, + ) +} + /** * Launch a coroutine into this [CoroutineScope] which will continually recompose `body` * to produce a [StateFlow] stream of [T] values. @@ -116,6 +151,7 @@ public fun CoroutineScope.launchMolecule( public fun CoroutineScope.launchMolecule( mode: RecompositionMode, context: CoroutineContext = EmptyCoroutineContext, + snapshotNotifier: SnapshotNotifier = SnapshotNotifier.WhileActive, body: @Composable () -> T, ): StateFlow { var flow: MutableStateFlow? = null @@ -123,6 +159,7 @@ public fun CoroutineScope.launchMolecule( launchMolecule( context = context, mode = mode, + snapshotNotifier = snapshotNotifier, emitter = { value -> val outputFlow = flow if (outputFlow != null) { @@ -151,6 +188,22 @@ public fun CoroutineScope.launchMolecule( ) } +@Deprecated("", level = HIDDEN) // For binary compatibility. +public fun CoroutineScope.launchMolecule( + mode: RecompositionMode, + emitter: (value: T) -> Unit, + context: CoroutineContext = EmptyCoroutineContext, + body: @Composable () -> T, +) { + launchMolecule( + mode = mode, + emitter = emitter, + context = context, + snapshotNotifier = SnapshotNotifier.WhileActive, + body = body, + ) +} + /** * Launch a coroutine into this [CoroutineScope] which will continually recompose `body` * in the optional [context] to invoke [emitter] with each returned [T] value. @@ -165,6 +218,7 @@ public fun CoroutineScope.launchMolecule( mode: RecompositionMode, emitter: (value: T) -> Unit, context: CoroutineContext = EmptyCoroutineContext, + snapshotNotifier: SnapshotNotifier = SnapshotNotifier.WhileActive, body: @Composable () -> T, ) { val clockContext = when (mode) { @@ -175,6 +229,7 @@ public fun CoroutineScope.launchMolecule( val recomposer = Recomposer(finalContext) val composition = Composition(UnitApplier, recomposer) + var snapshotHandle: ObserverHandle? = null launch(finalContext, start = UNDISPATCHED) { try { @@ -185,13 +240,18 @@ public fun CoroutineScope.launchMolecule( } } - var applyScheduled = false - snapshotHandle = Snapshot.registerGlobalWriteObserver { - if (!applyScheduled) { - applyScheduled = true - launch(finalContext) { - applyScheduled = false - Snapshot.sendApplyNotifications() + when (snapshotNotifier) { + SnapshotNotifier.External -> {} + SnapshotNotifier.WhileActive -> { + var applyScheduled = false + snapshotHandle = Snapshot.registerGlobalWriteObserver { + if (!applyScheduled) { + applyScheduled = true + launch(finalContext) { + applyScheduled = false + Snapshot.sendApplyNotifications() + } + } } } } diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt index 409deafc..23e35c0d 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt @@ -24,11 +24,14 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshots.Snapshot import app.cash.molecule.MoleculeTest.DisposableEffectState.DISPOSED import app.cash.molecule.MoleculeTest.DisposableEffectState.LAUNCHED import app.cash.molecule.MoleculeTest.DisposableEffectState.NOT_LAUNCHED import app.cash.molecule.RecompositionMode.ContextClock import app.cash.molecule.RecompositionMode.Immediate +import app.cash.molecule.SnapshotNotifier.External +import app.cash.molecule.SnapshotNotifier.WhileActive import assertk.assertFailure import assertk.assertThat import assertk.assertions.isEqualTo @@ -404,5 +407,57 @@ class MoleculeTest { job.cancelAndJoin() } + @Test fun snapshotNotifierExternal() = runTest { + val job = Job() + val clock = BroadcastFrameClock() + val scope = CoroutineScope(coroutineContext + job + clock) + var value: Int? = null + + var count by mutableIntStateOf(0) + + scope.launchMolecule(ContextClock, emitter = { value = it }, snapshotNotifier = External) { + count + } + + assertThat(value).isEqualTo(0) + + // Ensure the composition is not automatically notified of state mutation. + count++ + runCurrent() + clock.sendFrame(0) + assertThat(value).isEqualTo(0) + + // But we reflect it once someone does the notification. + Snapshot.sendApplyNotifications() + runCurrent() + clock.sendFrame(0) + assertThat(value).isEqualTo(1) + + job.cancelAndJoin() + } + + @Test fun snapshotNotifierWhileActive() = runTest { + val job = Job() + val clock = BroadcastFrameClock() + val scope = CoroutineScope(coroutineContext + job + clock) + var value: Int? = null + + var count by mutableIntStateOf(0) + + scope.launchMolecule(ContextClock, emitter = { value = it }, snapshotNotifier = WhileActive) { + count + } + + assertThat(value).isEqualTo(0) + + // The composition is automatically notified of state mutation. + count++ + runCurrent() + clock.sendFrame(0) + assertThat(value).isEqualTo(1) + + job.cancelAndJoin() + } + private suspend fun Channel.awaitValue(): T = withTimeout(1000) { receive() } } From 37937ff4b569390db1cbdd6be2d136da48675877 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Fri, 11 Apr 2025 15:37:34 -0400 Subject: [PATCH 257/269] Add system property to control snapshot notifier default (#615) Since the Compose UI snapshot notifier is a global singleton that can be started in one place, this allows you to also switch Molecule's default in that same location. Much easier than updating tens or hundreds of call sites. --- CHANGELOG.md | 5 +- molecule-runtime/build.gradle | 21 +++++--- .../app/cash/molecule/SnapshotNotifier.kt | 6 +++ .../kotlin/app/cash/molecule/molecule.kt | 12 ++--- .../kotlin/app/cash/molecule/platform.kt | 18 +++++++ .../kotlin/app/cash/molecule/MoleculeTest.kt | 4 ++ .../kotlin/app/cash/molecule/platform.kt | 24 +++++++++ .../DefaultSnapshotNotifierPropertyTest.kt | 54 +++++++++++++++++++ .../kotlin/app/cash/molecule/platform.kt | 21 ++++++++ 9 files changed, 152 insertions(+), 13 deletions(-) create mode 100644 molecule-runtime/src/commonMain/kotlin/app/cash/molecule/platform.kt create mode 100644 molecule-runtime/src/javaMain/kotlin/app/cash/molecule/platform.kt create mode 100644 molecule-runtime/src/javaTest/kotlin/app/cash/molecule/DefaultSnapshotNotifierPropertyTest.kt create mode 100644 molecule-runtime/src/nonJavaMain/kotlin/app/cash/molecule/platform.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 27985985..19aaf612 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,10 @@ ## [Unreleased] New: -- Add `SnapshotNotifier` enum to control whether Molecule automatically sends snapshot apply notifications. If you are using Molecule with another Compose-based library in a single application, you may want to disable our snapshot notification. See the enum for details on when that is appropriate. +- Add `SnapshotNotifier` enum to control whether Molecule automatically sends snapshot apply notifications. + If you are using Molecule with another Compose-based library in a single application, you may want to disable our snapshot notification. + See the enum for details on when that is appropriate. + Additionally, the `app.cash.molecule.snapshotNotifier` system property can be set to one of the enum entry names to control the default process-wide. Changed: - Any specified additional coroutine context elements will now be honored in the coroutine used internally with `RecompositionMode.Immediate` to send frames and cause recomposition to occur. This is observable, most notably, when a `CoroutineDispatcher` is included, as now recompositions which occur after the first, synchronous one will occur on that dispatcher. diff --git a/molecule-runtime/build.gradle b/molecule-runtime/build.gradle index ef6f559e..41c8aa16 100644 --- a/molecule-runtime/build.gradle +++ b/molecule-runtime/build.gradle @@ -55,6 +55,11 @@ kotlin { } it.group("watchos") {} } + it.group('nonJava') { + it.group('native') {} + it.withJs() + it.withWasmJs() + } } } @@ -84,14 +89,17 @@ kotlin { } } + // We use a common folder instead of a common source set because there is no commonizer + // which exposes the Java APIs across these two targets. + androidMain { kotlin.srcDir('src/javaMain/kotlin') } + androidTest { kotlin.srcDir('src/javaTest/kotlin') } + jvmMain { kotlin.srcDir('src/javaMain/kotlin') } + jvmTest { kotlin.srcDir('src/javaTest/kotlin') } + // We use a common folder instead of a common source set because there is no commonizer // which exposes the browser APIs across these two targets. - jsMain { - kotlin.srcDir('src/browserMain/kotlin') - } - wasmJsMain { - kotlin.srcDir('src/browserMain/kotlin') - } + jsMain { kotlin.srcDir('src/browserMain/kotlin') } + wasmJsMain { kotlin.srcDir('src/browserMain/kotlin') } } } @@ -118,6 +126,7 @@ android { sourceSets { androidTest { java.srcDirs += 'src/commonTest/kotlin' + java.srcDirs += 'src/javaTest/kotlin' } } diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt index deedffd0..d66ff392 100644 --- a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/SnapshotNotifier.kt @@ -15,6 +15,8 @@ */ package app.cash.molecule +import app.cash.molecule.SnapshotNotifier.WhileActive + /** * The different snapshot notification modes of Molecule. * @@ -25,6 +27,10 @@ package app.cash.molecule * have one in place, whereas applications that only use Molecule need its automatic registering * of this notifier. * + * On the JVM and Android, Molecule will read the `app.cash.molecule.snapshotNotifier` system + * property in order to determine the default mechanism. The value is parsed with [enumValueOf], + * or else defaults to [WhileActive] if not set or the property does not parse to a value. + * * @see androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications */ public enum class SnapshotNotifier { diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt index 06865c68..a9514def 100644 --- a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/molecule.kt @@ -39,7 +39,7 @@ import kotlinx.coroutines.launch public fun moleculeFlow(mode: RecompositionMode, body: @Composable () -> T): Flow { return moleculeFlow( mode = mode, - snapshotNotifier = SnapshotNotifier.WhileActive, + snapshotNotifier = defaultSnapshotNotifier(), body = body, ) } @@ -50,7 +50,7 @@ public fun moleculeFlow(mode: RecompositionMode, body: @Composable () -> T): */ public fun moleculeFlow( mode: RecompositionMode, - snapshotNotifier: SnapshotNotifier = SnapshotNotifier.WhileActive, + snapshotNotifier: SnapshotNotifier = defaultSnapshotNotifier(), body: @Composable () -> T, ): Flow { return when (mode) { @@ -136,7 +136,7 @@ public fun CoroutineScope.launchMolecule( return launchMolecule( mode = mode, context = context, - snapshotNotifier = SnapshotNotifier.WhileActive, + snapshotNotifier = defaultSnapshotNotifier(), body = body, ) } @@ -151,7 +151,7 @@ public fun CoroutineScope.launchMolecule( public fun CoroutineScope.launchMolecule( mode: RecompositionMode, context: CoroutineContext = EmptyCoroutineContext, - snapshotNotifier: SnapshotNotifier = SnapshotNotifier.WhileActive, + snapshotNotifier: SnapshotNotifier = defaultSnapshotNotifier(), body: @Composable () -> T, ): StateFlow { var flow: MutableStateFlow? = null @@ -199,7 +199,7 @@ public fun CoroutineScope.launchMolecule( mode = mode, emitter = emitter, context = context, - snapshotNotifier = SnapshotNotifier.WhileActive, + snapshotNotifier = defaultSnapshotNotifier(), body = body, ) } @@ -218,7 +218,7 @@ public fun CoroutineScope.launchMolecule( mode: RecompositionMode, emitter: (value: T) -> Unit, context: CoroutineContext = EmptyCoroutineContext, - snapshotNotifier: SnapshotNotifier = SnapshotNotifier.WhileActive, + snapshotNotifier: SnapshotNotifier = defaultSnapshotNotifier(), body: @Composable () -> T, ) { val clockContext = when (mode) { diff --git a/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/platform.kt b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/platform.kt new file mode 100644 index 00000000..d9968f4f --- /dev/null +++ b/molecule-runtime/src/commonMain/kotlin/app/cash/molecule/platform.kt @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2025 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +internal expect fun defaultSnapshotNotifier(): SnapshotNotifier diff --git a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt index 23e35c0d..9d1d2e43 100644 --- a/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt +++ b/molecule-runtime/src/commonTest/kotlin/app/cash/molecule/MoleculeTest.kt @@ -459,5 +459,9 @@ class MoleculeTest { job.cancelAndJoin() } + @Test fun defaultSnapshotNotifierChangeDetector() { + assertThat(defaultSnapshotNotifier()).isEqualTo(WhileActive) + } + private suspend fun Channel.awaitValue(): T = withTimeout(1000) { receive() } } diff --git a/molecule-runtime/src/javaMain/kotlin/app/cash/molecule/platform.kt b/molecule-runtime/src/javaMain/kotlin/app/cash/molecule/platform.kt new file mode 100644 index 00000000..8a373fa1 --- /dev/null +++ b/molecule-runtime/src/javaMain/kotlin/app/cash/molecule/platform.kt @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2025 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +internal actual fun defaultSnapshotNotifier(): SnapshotNotifier { + return System.getProperty("app.cash.molecule.snapshotNotifier") + ?.let { property -> + runCatching { SnapshotNotifier.valueOf(property) }.getOrNull() + } + ?: SnapshotNotifier.WhileActive +} diff --git a/molecule-runtime/src/javaTest/kotlin/app/cash/molecule/DefaultSnapshotNotifierPropertyTest.kt b/molecule-runtime/src/javaTest/kotlin/app/cash/molecule/DefaultSnapshotNotifierPropertyTest.kt new file mode 100644 index 00000000..5614812d --- /dev/null +++ b/molecule-runtime/src/javaTest/kotlin/app/cash/molecule/DefaultSnapshotNotifierPropertyTest.kt @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2025 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +import app.cash.molecule.SnapshotNotifier.External +import app.cash.molecule.SnapshotNotifier.WhileActive +import assertk.assertThat +import assertk.assertions.isEqualTo +import kotlin.test.Test + +// Note: We do not share this constant with the production code to verify its value doesn't change. +private const val property = "app.cash.molecule.snapshotNotifier" + +class DefaultSnapshotNotifierPropertyTest { + @Test fun propertyEmpty() { + System.setProperty(property, "") + try { + assertThat(defaultSnapshotNotifier()).isEqualTo(WhileActive) + } finally { + System.clearProperty(property) + } + } + + @Test fun propertyInvalid() { + System.setProperty(property, "sup") + try { + assertThat(defaultSnapshotNotifier()).isEqualTo(WhileActive) + } finally { + System.clearProperty(property) + } + } + + @Test fun propertyValid() { + System.setProperty(property, "External") + try { + assertThat(defaultSnapshotNotifier()).isEqualTo(External) + } finally { + System.clearProperty(property) + } + } +} diff --git a/molecule-runtime/src/nonJavaMain/kotlin/app/cash/molecule/platform.kt b/molecule-runtime/src/nonJavaMain/kotlin/app/cash/molecule/platform.kt new file mode 100644 index 00000000..b0313528 --- /dev/null +++ b/molecule-runtime/src/nonJavaMain/kotlin/app/cash/molecule/platform.kt @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2025 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package app.cash.molecule + +@Suppress("NOTHING_TO_INLINE") +internal actual inline fun defaultSnapshotNotifier(): SnapshotNotifier { + return SnapshotNotifier.WhileActive +} From 0705c001aa2ae67b367a7edfd2f71805d62e3130 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Fri, 11 Apr 2025 17:02:25 -0400 Subject: [PATCH 258/269] Prepare version 2.1.0 --- CHANGELOG.md | 10 ++++++++-- README.md | 4 ++-- gradle.properties | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19aaf612..02f15f1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log ## [Unreleased] +[Unreleased]: https://github.com/cashapp/molecule/compare/2.0.0...HEAD + +Nothing yet! + + +## [2.1.0] - 2025-04-11 +[2.1.0]: https://github.com/cashapp/molecule/releases/tag/2.1.0 New: - Add `SnapshotNotifier` enum to control whether Molecule automatically sends snapshot apply notifications. @@ -16,6 +23,7 @@ Fixed: ## [2.0.0] - 2024-05-28 +[2.0.0]: https://github.com/cashapp/molecule/releases/tag/2.0.0 New: - Support for Kotlin 2.0.0! @@ -340,8 +348,6 @@ Initial release -[Unreleased]: https://github.com/cashapp/molecule/compare/2.0.0...HEAD -[2.0.0]: https://github.com/cashapp/molecule/releases/tag/2.0.0 [1.4.3]: https://github.com/cashapp/molecule/releases/tag/1.4.3 [1.4.2]: https://github.com/cashapp/molecule/releases/tag/1.4.2 [1.4.1]: https://github.com/cashapp/molecule/releases/tag/1.4.1 diff --git a/README.md b/README.md index b4a568fc..f6c95f21 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ Molecule itself can then be added like any other dependency: ```groovy dependencies { - implementation("app.cash.molecule:molecule-runtime:2.0.0") + implementation("app.cash.molecule:molecule-runtime:2.1.0") } ``` @@ -188,7 +188,7 @@ repositories { } dependencies { - implementation("app.cash.molecule:molecule-runtime:2.1.0-SNAPSHOT") + implementation("app.cash.molecule:molecule-runtime:2.2.0-SNAPSHOT") } ``` diff --git a/gradle.properties b/gradle.properties index ed427b4a..1d46f2df 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=2.1.0-SNAPSHOT +VERSION_NAME=2.1.0 SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From 36fdeff9d9a70ca85408af07de625e740cc693e7 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Fri, 11 Apr 2025 17:02:46 -0400 Subject: [PATCH 259/269] Prepare next development snapshot --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1d46f2df..39c7c765 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ GROUP=app.cash.molecule # HEY! If you change the major version here be sure to update release.yaml doc target folder! -VERSION_NAME=2.1.0 +VERSION_NAME=2.2.0-SNAPSHOT SONATYPE_AUTOMATIC_RELEASE=true SONATYPE_HOST=DEFAULT From a4e205b92c43061595c3dce20bb61ea90d2b94b8 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Fri, 11 Apr 2025 20:25:20 -0400 Subject: [PATCH 260/269] Disable release build type in samples (#616) --- sample-viewmodel/build.gradle | 6 ++++++ sample/build.gradle | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/sample-viewmodel/build.gradle b/sample-viewmodel/build.gradle index c6b45978..f5a0bfa4 100644 --- a/sample-viewmodel/build.gradle +++ b/sample-viewmodel/build.gradle @@ -24,4 +24,10 @@ android { testOptions { unitTests.returnDefaultValues = true } + + variantFilter { variant -> + if (variant.buildType.name == 'release') { + setIgnore(true) + } + } } diff --git a/sample/build.gradle b/sample/build.gradle index c958749e..84e4dc0a 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -25,4 +25,10 @@ android { testOptions { unitTests.returnDefaultValues = true } + + variantFilter { variant -> + if (variant.buildType.name == 'release') { + setIgnore(true) + } + } } From 94be6af0f70e5a736294b3b21cf782976fc015dc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 02:00:21 +0000 Subject: [PATCH 261/269] Update dependency com.android.tools.build:gradle to v8.9.2 (#618) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5f0ada28..7a5a1b6f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.9.1" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.9.2" } androidx-core = { module = "androidx.core:core-ktx", version = "1.16.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } From eda5345ec8c9fb216e568e5e2e93ff0ddd7cfc79 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:38:02 +0000 Subject: [PATCH 262/269] Update dependency gradle to v8.14 (#619) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43705 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 4 ++-- gradlew.bat | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 9bbc975c742b298b441bfb90dbc124400a3751b9..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 642 zcmdmamFde>rVZJA^}0Q$xegf!xPEW^+5YDM%iT2bEgct9o+jH~+sJas#HZ=szO|** z=Pj=X_vx?W&DSwKck|WWn~hffsvnQ+42*W$b7b0$SCcOoZ`{W{^$^pk;4>8-A*-)$ z?n(Po`1$6Jn_u?t-L+tsPyZ2#X}8T6OS8pAU;kdgd+_Hw4z4TW0p9E!T+=f7-c&O% zFic^X{7^$?^Ho04eona9n#mGMxKhA=~8B%JN`M zMhm5wc-2v)$``sY$!Q`9xiU@DhI73ZxiGEKg>yIPs)NmWwMdF-ngLXpZSqV5ez36n zVkxF2rjrjWR+_xr6e6@_u@s~2uv{9vi*1pj2)BjFD+-%@&pRVP1f{O1glxTOp2-62Ph;v z`N1+vCd)9ea)af*Ol1*JCfnp$%Uu}%OuoN7g2}3C@`L5FlP#(sA=|h@iixuZC?qp^ z=L$=v$ZoI}|87Wh=&h7udff{aieKr*l+zDp?pf)_bbRvUf>kn;HCDMXNlgbbo!QRK I1x7am0No)LiU0rr delta 584 zcmexzm1*ZyrVZJAexH5Moc8h7)w{^+t*dqJ%=yhh23L$9JpFV=_k`zJ-?Q4DI*eSe z+ES)HSrVnWLtJ&)lO%hRkV9zl5qqWRt0e;bb zPPo`)y?HTAyZI&u&X<|2$FDHCf4;!v8}p=?Tm`^F0`u(|1ttf~&t$qP3KUSD>@TJQ zRwJ}Pim6NzEc8KA6)e;S6gs8=7IIL8sQL*MYEuRYO;Uj<%3UbMbV&^&!Zvx+LKmjT z8Zch6rYP7Tw?$Hn(UTJwWiS=$f{lB(C=e*%usDV})0AQIK~sat=ND@+Gg*Pyij!rR z*fa02W|%BsV++>4W{DKDGSIUEHd2$P+8ct!RF+CHDowUuTEZOZ%rJSQv*qOXOSPDN zT|sP-$p*_3ncsWB*qoD7JQcyZ9xan%cJP6Tb4-?AZpr*F6v98hoNaPJm@HV`yya5N z))6pqFXn@}P(3T0nEzM8*c_9KtE9o|_pFd&K35GBXP^9Kg(b6GH-z8S4GDzIl~T+b zdLd#meKKHu$5u))8cu$=GKINkGDPOUD)!0$C(BH(U!}!-e;Q0ok8Sc?V1zRO04>ts AA^-pY diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f853b1..ca025c83 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index faf93008..23d15a93 100755 --- a/gradlew +++ b/gradlew @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019c..5eed7ee8 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell From 391006f1b1065a2e80c01101d760480f7785ac4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:59:06 +0000 Subject: [PATCH 263/269] Update dependency java to v24 (#599) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/.java-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/.java-version b/.github/workflows/.java-version index 40994076..a45fd52c 100644 --- a/.github/workflows/.java-version +++ b/.github/workflows/.java-version @@ -1 +1 @@ -23 +24 From a594d7ee2f71f1266f4499079b006c0dd2e8fbfe Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Fri, 25 Apr 2025 13:45:22 -0400 Subject: [PATCH 264/269] Add trailing comma (#620) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a Very Important Change™ --- .github/renovate.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 5fd1a775..273efba1 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -22,5 +22,5 @@ // Only write the major version. extractVersionTemplate: '^(?\\d+)', }, - ] + ], } From 50dee7602c8acbfd5b3b70160383e5595f63feee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 20:48:08 +0000 Subject: [PATCH 265/269] Update dependency com.android.tools.build:gradle to v8.10.0 (#621) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7a5a1b6f..8d57731b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" [libraries] -android-plugin = { module = "com.android.tools.build:gradle", version = "8.9.2" } +android-plugin = { module = "com.android.tools.build:gradle", version = "8.10.0" } androidx-core = { module = "androidx.core:core-ktx", version = "1.16.0" } androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.10.1" } From 1fd0e47f1333b37df6ffc22f927712e2945354a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 22:25:33 -0400 Subject: [PATCH 266/269] Update dependency org.jetbrains.compose.runtime:runtime to v1.8.0 (#622) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8d57731b..d016c404 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "21" coroutine = "1.10.2" kotlin = "2.1.20" -jetbrains-compose = "1.7.3" +jetbrains-compose = "1.8.0" serialization = "1.8.1" squareup-okhttp = "4.12.0" squareup-retrofit = "2.11.0" From 711f5914e111870be6d5e903bdbd059597d3242c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 10:15:40 -0400 Subject: [PATCH 267/269] Update kotlin monorepo to v2.1.21 (#623) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d016c404..7ea34127 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compileSdk = "35" minSdk = "21" coroutine = "1.10.2" -kotlin = "2.1.20" +kotlin = "2.1.21" jetbrains-compose = "1.8.0" serialization = "1.8.1" squareup-okhttp = "4.12.0" From e2a110ed523a0f53068a2b99c1b613c1cac97cb6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 20:37:49 +0000 Subject: [PATCH 268/269] Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.32.0 (#625) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7ea34127..6b2a567c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ kotlinx-binaryCompatibilityValidator = "org.jetbrains.kotlinx:binary-compatibili ktlint-core = "com.pinterest.ktlint:ktlint-cli:1.5.0" ktlint-composeRules = "io.nlopez.compose.rules:ktlint:0.4.22" -maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.31.0" } +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version = "0.32.0" } spotless-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version = "7.0.3" } From 8c097111e8290e2393cb841d1dbfb0a1d2d908d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 13:31:51 -0400 Subject: [PATCH 269/269] Update retrofit monorepo to v3 (#627) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6b2a567c..8ac62c0b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ kotlin = "2.1.21" jetbrains-compose = "1.8.0" serialization = "1.8.1" squareup-okhttp = "4.12.0" -squareup-retrofit = "2.11.0" +squareup-retrofit = "3.0.0" [libraries] android-plugin = { module = "com.android.tools.build:gradle", version = "8.10.0" }