diff --git a/README.md b/README.md index fe7f183..fb31737 100644 --- a/README.md +++ b/README.md @@ -105,16 +105,16 @@ You'll need both Synk runtime and the delightful metastore artifacts to get star ```kotlin dependencies { implementation("com.github.charlietap.synk:delight-metastore:xxx") - implementation("com.github.charlietap.synk:runtime:xxx") + implementation("com.github.charlietap.synk:synk:xxx") } ``` Alternatively if you're working with a KMP project you can pull the specialised dependencies for the different targets: ```kotlin dependencies { - implementation("com.github.charlietap.synk:runtime-android:xxx") + implementation("com.github.charlietap.synk:synk-android:xxx") //or - implementation("com.github.charlietap.synk:runtime-jvm:xxx") + implementation("com.github.charlietap.synk:synk-jvm:xxx") } ``` diff --git a/delight-metastore/build.gradle.kts b/delight-metastore/build.gradle.kts index 515aab4..63d5094 100644 --- a/delight-metastore/build.gradle.kts +++ b/delight-metastore/build.gradle.kts @@ -32,7 +32,7 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - implementation(projects.runtime) +// implementation(projects.synk) implementation(projects.concurrentMap) implementation(libs.murmurhash) implementation(libs.androidx.collections.kmp) diff --git a/extension/kotlin-serialization/build.gradle.kts b/extension/kotlin-serialization/build.gradle.kts new file mode 100644 index 0000000..c3d222a --- /dev/null +++ b/extension/kotlin-serialization/build.gradle.kts @@ -0,0 +1,42 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +@Suppress("DSL_SCOPE_VIOLATION") +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.kotlinter) + id("maven-publish") +} +group = "com.tap.synk.extension" +version = libs.versions.version.name.get() + +kotlin { + + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(libs.versions.java.build.version.get().toInt())) + vendor.set(JvmVendorSpec.ADOPTIUM) + } + + targets { + jvm() + } + + sourceSets { + val commonMain by getting { + dependencies { + implementation(projects.synk) + implementation(libs.kotlinx.serialization) + } + } + + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} + +tasks.withType().configureEach { + kotlinOptions.jvmTarget = libs.versions.java.bytecode.version.get() +} diff --git a/extension/kotlin-serialization/src/commonMain/kotlin/com/tap/synk/extension/MessageSerializer.kt b/extension/kotlin-serialization/src/commonMain/kotlin/com/tap/synk/extension/MessageSerializer.kt new file mode 100644 index 0000000..be29c0a --- /dev/null +++ b/extension/kotlin-serialization/src/commonMain/kotlin/com/tap/synk/extension/MessageSerializer.kt @@ -0,0 +1,41 @@ +package com.tap.synk.extension + +import com.tap.synk.meta.Meta +import com.tap.synk.relay.Message +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.buildClassSerialDescriptor +import kotlinx.serialization.encoding.CompositeDecoder +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.encoding.decodeStructure +import kotlinx.serialization.encoding.encodeStructure + +class MessageSerializer( + private val innerSerializer: KSerializer +) : KSerializer> { + + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("message") { + element("crdt", innerSerializer.descriptor) + element("meta", MetaSerializer.descriptor) + } + override fun serialize(encoder: Encoder, value: Message) = encoder.encodeStructure(descriptor) { + encodeSerializableElement(descriptor, 0, innerSerializer, value.crdt) + encodeSerializableElement(descriptor, 1, MetaSerializer, value.meta) + } + + override fun deserialize(decoder: Decoder): Message = decoder.decodeStructure(descriptor) { + var crdt : T? = null + var meta : Meta? = null + while (true) { + when (val index = decodeElementIndex(descriptor)) { + 0 -> crdt = decodeSerializableElement(descriptor, 0, innerSerializer) + 1 -> meta = decodeSerializableElement(descriptor, 1, MetaSerializer) + CompositeDecoder.DECODE_DONE -> break + else -> error("Unexpected index: $index") + } + } + Message(crdt!!, meta!!) + } + +} \ No newline at end of file diff --git a/extension/kotlin-serialization/src/commonMain/kotlin/com/tap/synk/extension/MetaSerializer.kt b/extension/kotlin-serialization/src/commonMain/kotlin/com/tap/synk/extension/MetaSerializer.kt new file mode 100644 index 0000000..abaafeb --- /dev/null +++ b/extension/kotlin-serialization/src/commonMain/kotlin/com/tap/synk/extension/MetaSerializer.kt @@ -0,0 +1,40 @@ +package com.tap.synk.extension + +import com.tap.synk.meta.Meta +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.MapSerializer +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.buildClassSerialDescriptor +import kotlinx.serialization.descriptors.element +import kotlinx.serialization.encoding.CompositeDecoder +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.encoding.decodeStructure +import kotlinx.serialization.encoding.encodeStructure + +object MetaSerializer : KSerializer { + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("meta") { + element("clazz") + element>("timestamp_meta") + } + + override fun serialize(encoder: Encoder, value: Meta) = encoder.encodeStructure(descriptor) { + encodeStringElement(descriptor, 0, value.clazz) + encodeSerializableElement(descriptor, 1, MapSerializer(String.serializer(), String.serializer()), value.timestampMeta) + } + + override fun deserialize(decoder: Decoder): Meta = decoder.decodeStructure(descriptor) { + var clazz = "" + var timestampMeta = emptyMap() + while (true) { + when (val index = decodeElementIndex(descriptor)) { + 0 -> clazz = decodeStringElement(descriptor, 0) + 1 -> timestampMeta = decodeSerializableElement(descriptor, 1, MapSerializer(String.serializer(), String.serializer())) + CompositeDecoder.DECODE_DONE -> break + else -> error("Unexpected index: $index") + } + } + Meta(clazz, timestampMeta) + } +} \ No newline at end of file diff --git a/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/Foo.kt b/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/Foo.kt new file mode 100644 index 0000000..bf2de13 --- /dev/null +++ b/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/Foo.kt @@ -0,0 +1,6 @@ +package com.tap.synk.extension + +import kotlinx.serialization.Serializable + +@Serializable +data class Foo(val name: String, val age: Int) \ No newline at end of file diff --git a/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/MessageSerializerTest.kt b/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/MessageSerializerTest.kt new file mode 100644 index 0000000..1333282 --- /dev/null +++ b/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/MessageSerializerTest.kt @@ -0,0 +1,24 @@ +package com.tap.synk.extension + +import com.tap.synk.meta.Meta +import com.tap.synk.relay.Message +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlinx.serialization.json.Json + +class MessageSerializerTest { + + @Test + fun `serializer correctly serializes and deserializes message`() { + val foo = Foo("bar", 30) + val meta = Meta("foo", mapOf("foo" to "bar")) + val message = Message(foo, meta) + + val serializer = MessageSerializer(Foo.serializer()) + + val json = Json.encodeToString(serializer, message) + val result = Json.decodeFromString(serializer, json) + + assertEquals(message, result) + } +} diff --git a/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/MetaSerializerTest.kt b/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/MetaSerializerTest.kt new file mode 100644 index 0000000..2789266 --- /dev/null +++ b/extension/kotlin-serialization/src/commonTest/kotlin/com/tap/synk/extension/MetaSerializerTest.kt @@ -0,0 +1,19 @@ +package com.tap.synk.extension + + +import com.tap.synk.meta.Meta +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlinx.serialization.json.Json + +class MetaSerializerTest { + + @Test + fun `serializer correctly serializes and deserializes meta`() { + val meta = Meta("test", mapOf("foo" to "bar")) + val json = Json.encodeToString(MetaSerializer, meta) + val result = Json.decodeFromString(MetaSerializer, json) + + assertEquals(meta, result) + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1b33d34..b202ccb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ java-build-version = "19" java-bytecode-version = "11" target-sdk = "32" min-sdk = "24" -version-name = "0.26" +version-name = "0.30" android-build-tools-plugin = "7.4.0-beta02" @@ -48,7 +48,7 @@ kotlinter = "3.11.1" kotlinx-atomic-fu = "0.18.5" kotlinx-coroutines = "1.6.1" kotlinx-datetime = "0.3.3" -kotlinx-serialization = "1.3.3" +kotlinx-serialization = "1.5.0-RC" ktor = "2.0.3" diff --git a/settings.gradle.kts b/settings.gradle.kts index 6e328ec..2bded9c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -33,9 +33,10 @@ dependencyResolutionManagement { //} include(":concurrent-map") -include(":runtime") +include(":synk") +include(":extension:kotlin-serialization") include(":delight-metastore") -rootProject.name = "synk" +rootProject.name = "synk-multiplatform" enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/runtime/build.gradle.kts b/synk/build.gradle.kts similarity index 100% rename from runtime/build.gradle.kts rename to synk/build.gradle.kts diff --git a/runtime/src/androidMain/AndroidManifest.xml b/synk/src/androidMain/AndroidManifest.xml similarity index 100% rename from runtime/src/androidMain/AndroidManifest.xml rename to synk/src/androidMain/AndroidManifest.xml diff --git a/runtime/src/androidMain/kotlin/com/tap/synk/config/ClockStorageConfigurationExtensions.kt b/synk/src/androidMain/kotlin/com/tap/synk/config/ClockStorageConfigurationExtensions.kt similarity index 100% rename from runtime/src/androidMain/kotlin/com/tap/synk/config/ClockStorageConfigurationExtensions.kt rename to synk/src/androidMain/kotlin/com/tap/synk/config/ClockStorageConfigurationExtensions.kt diff --git a/runtime/src/androidMain/kotlin/com/tap/synk/config/SynkBuilderExtensions.kt b/synk/src/androidMain/kotlin/com/tap/synk/config/SynkBuilderExtensions.kt similarity index 100% rename from runtime/src/androidMain/kotlin/com/tap/synk/config/SynkBuilderExtensions.kt rename to synk/src/androidMain/kotlin/com/tap/synk/config/SynkBuilderExtensions.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/Compress.kt b/synk/src/commonMain/kotlin/com/tap/synk/Compress.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/Compress.kt rename to synk/src/commonMain/kotlin/com/tap/synk/Compress.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/Decode.kt b/synk/src/commonMain/kotlin/com/tap/synk/Decode.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/Decode.kt rename to synk/src/commonMain/kotlin/com/tap/synk/Decode.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/Encode.kt b/synk/src/commonMain/kotlin/com/tap/synk/Encode.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/Encode.kt rename to synk/src/commonMain/kotlin/com/tap/synk/Encode.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/Inbound.kt b/synk/src/commonMain/kotlin/com/tap/synk/Inbound.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/Inbound.kt rename to synk/src/commonMain/kotlin/com/tap/synk/Inbound.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/Outbound.kt b/synk/src/commonMain/kotlin/com/tap/synk/Outbound.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/Outbound.kt rename to synk/src/commonMain/kotlin/com/tap/synk/Outbound.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/Synk.kt b/synk/src/commonMain/kotlin/com/tap/synk/Synk.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/Synk.kt rename to synk/src/commonMain/kotlin/com/tap/synk/Synk.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/abstraction/Semigroup.kt b/synk/src/commonMain/kotlin/com/tap/synk/abstraction/Semigroup.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/abstraction/Semigroup.kt rename to synk/src/commonMain/kotlin/com/tap/synk/abstraction/Semigroup.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapter.kt b/synk/src/commonMain/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapter.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapter.kt rename to synk/src/commonMain/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapter.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/adapter/SynkAdapter.kt b/synk/src/commonMain/kotlin/com/tap/synk/adapter/SynkAdapter.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/adapter/SynkAdapter.kt rename to synk/src/commonMain/kotlin/com/tap/synk/adapter/SynkAdapter.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/adapter/store/SynkAdapterStore.kt b/synk/src/commonMain/kotlin/com/tap/synk/adapter/store/SynkAdapterStore.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/adapter/store/SynkAdapterStore.kt rename to synk/src/commonMain/kotlin/com/tap/synk/adapter/store/SynkAdapterStore.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/cache/ReflectionsCache.kt b/synk/src/commonMain/kotlin/com/tap/synk/cache/ReflectionsCache.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/cache/ReflectionsCache.kt rename to synk/src/commonMain/kotlin/com/tap/synk/cache/ReflectionsCache.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/config/ClockStorageConfiguration.kt b/synk/src/commonMain/kotlin/com/tap/synk/config/ClockStorageConfiguration.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/config/ClockStorageConfiguration.kt rename to synk/src/commonMain/kotlin/com/tap/synk/config/ClockStorageConfiguration.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/config/CustomClockStorageConfiguration.kt b/synk/src/commonMain/kotlin/com/tap/synk/config/CustomClockStorageConfiguration.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/config/CustomClockStorageConfiguration.kt rename to synk/src/commonMain/kotlin/com/tap/synk/config/CustomClockStorageConfiguration.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/meta/Meta.kt b/synk/src/commonMain/kotlin/com/tap/synk/meta/Meta.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/meta/Meta.kt rename to synk/src/commonMain/kotlin/com/tap/synk/meta/Meta.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/meta/MetaSemigroup.kt b/synk/src/commonMain/kotlin/com/tap/synk/meta/MetaSemigroup.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/meta/MetaSemigroup.kt rename to synk/src/commonMain/kotlin/com/tap/synk/meta/MetaSemigroup.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStore.kt b/synk/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStore.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStore.kt rename to synk/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStore.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStoreFactory.kt b/synk/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStoreFactory.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStoreFactory.kt rename to synk/src/commonMain/kotlin/com/tap/synk/meta/store/InMemoryMetaStoreFactory.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStore.kt b/synk/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStore.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStore.kt rename to synk/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStore.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStoreFactory.kt b/synk/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStoreFactory.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStoreFactory.kt rename to synk/src/commonMain/kotlin/com/tap/synk/meta/store/MetaStoreFactory.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/relay/Message.kt b/synk/src/commonMain/kotlin/com/tap/synk/relay/Message.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/relay/Message.kt rename to synk/src/commonMain/kotlin/com/tap/synk/relay/Message.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/relay/MessageSemigroup.kt b/synk/src/commonMain/kotlin/com/tap/synk/relay/MessageSemigroup.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/relay/MessageSemigroup.kt rename to synk/src/commonMain/kotlin/com/tap/synk/relay/MessageSemigroup.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/resolver/IDResolver.kt b/synk/src/commonMain/kotlin/com/tap/synk/resolver/IDResolver.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/resolver/IDResolver.kt rename to synk/src/commonMain/kotlin/com/tap/synk/resolver/IDResolver.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/resolver/ReflectionsIDResolver.kt b/synk/src/commonMain/kotlin/com/tap/synk/resolver/ReflectionsIDResolver.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/resolver/ReflectionsIDResolver.kt rename to synk/src/commonMain/kotlin/com/tap/synk/resolver/ReflectionsIDResolver.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/serialize/StringSerializer.kt b/synk/src/commonMain/kotlin/com/tap/synk/serialize/StringSerializer.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/serialize/StringSerializer.kt rename to synk/src/commonMain/kotlin/com/tap/synk/serialize/StringSerializer.kt diff --git a/runtime/src/commonMain/kotlin/com/tap/synk/serialize/hashmap.kt b/synk/src/commonMain/kotlin/com/tap/synk/serialize/hashmap.kt similarity index 100% rename from runtime/src/commonMain/kotlin/com/tap/synk/serialize/hashmap.kt rename to synk/src/commonMain/kotlin/com/tap/synk/serialize/hashmap.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/CompressTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/CompressTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/CompressTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/CompressTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/DecodeTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/DecodeTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/DecodeTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/DecodeTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/EncodeTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/EncodeTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/EncodeTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/EncodeTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/IDCRDT.kt b/synk/src/commonTest/kotlin/com/tap/synk/IDCRDT.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/IDCRDT.kt rename to synk/src/commonTest/kotlin/com/tap/synk/IDCRDT.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/IDCRDTAdapter.kt b/synk/src/commonTest/kotlin/com/tap/synk/IDCRDTAdapter.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/IDCRDTAdapter.kt rename to synk/src/commonTest/kotlin/com/tap/synk/IDCRDTAdapter.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/InboundTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/InboundTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/InboundTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/InboundTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/OutboundTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/OutboundTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/OutboundTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/OutboundTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/SynkBuilderTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/SynkBuilderTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/SynkBuilderTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/SynkBuilderTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/adapter/CustomSynkAdapterTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/adapter/CustomSynkAdapterTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/adapter/CustomSynkAdapterTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/adapter/CustomSynkAdapterTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapterTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapterTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapterTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/adapter/ReflectionsSynkAdapterTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/adapter/SynkAdapterDiffTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/adapter/SynkAdapterDiffTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/adapter/SynkAdapterDiffTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/adapter/SynkAdapterDiffTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/cache/ReflectionsCacheTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/cache/ReflectionsCacheTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/cache/ReflectionsCacheTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/cache/ReflectionsCacheTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/fake/faker.kt b/synk/src/commonTest/kotlin/com/tap/synk/fake/faker.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/fake/faker.kt rename to synk/src/commonTest/kotlin/com/tap/synk/fake/faker.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/meta/InMemoryMetaStoreTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/meta/InMemoryMetaStoreTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/meta/InMemoryMetaStoreTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/meta/InMemoryMetaStoreTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/meta/MetaSemigroupTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/meta/MetaSemigroupTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/meta/MetaSemigroupTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/meta/MetaSemigroupTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/meta/MetaTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/meta/MetaTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/meta/MetaTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/meta/MetaTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/relay/MessageEncodingTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/relay/MessageEncodingTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/relay/MessageEncodingTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/relay/MessageEncodingTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/relay/MessageSemigroupTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/relay/MessageSemigroupTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/relay/MessageSemigroupTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/relay/MessageSemigroupTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/resolver/ReflectionsIDResolverTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/resolver/ReflectionsIDResolverTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/resolver/ReflectionsIDResolverTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/resolver/ReflectionsIDResolverTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/serialize/StringSerializerTest.kt b/synk/src/commonTest/kotlin/com/tap/synk/serialize/StringSerializerTest.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/serialize/StringSerializerTest.kt rename to synk/src/commonTest/kotlin/com/tap/synk/serialize/StringSerializerTest.kt diff --git a/runtime/src/commonTest/kotlin/com/tap/synk/utils/config.kt b/synk/src/commonTest/kotlin/com/tap/synk/utils/config.kt similarity index 100% rename from runtime/src/commonTest/kotlin/com/tap/synk/utils/config.kt rename to synk/src/commonTest/kotlin/com/tap/synk/utils/config.kt