diff --git a/settings.gradle.kts b/settings.gradle.kts --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -92,6 +92,7 @@ "driver-sync-kmongo", "driver-coroutines", "driver-coroutines-kmongo", + "driver-multiplatform-wire", "test", diff --git a/driver-multiplatform-wire/README.md b/driver-multiplatform-wire/README.md new file mode 100644 --- /dev/null +++ b/driver-multiplatform-wire/README.md @@ -0,0 +1,7 @@ +# Module KtMongo: MongoDB driver for Kotlin • Multiplatform wire protocol + +Low-level pure Kotlin socket communication with MongoDB. + + + + diff --git a/driver-multiplatform-wire/build.gradle.kts b/driver-multiplatform-wire/build.gradle.kts new file mode 100644 --- /dev/null +++ b/driver-multiplatform-wire/build.gradle.kts @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025-2026, OpenSavvy and contributors. + * + * 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. + */ + +@file:OptIn(ExperimentalWasmDsl::class) + +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl + +plugins { + alias(opensavvyConventions.plugins.base) + alias(opensavvyConventions.plugins.kotlin.library) + alias(libsCommon.plugins.kotlinx.serialization) + alias(libsCommon.plugins.testBalloon) +} + +kotlin { + jvm() + js { + nodejs() + } + linuxX64() + linuxArm64() + macosArm64() + iosArm64() + iosSimulatorArm64() + watchosArm32() + watchosArm64() + watchosSimulatorArm64() + tvosArm64() + tvosSimulatorArm64() + mingwX64() + wasmJs { + nodejs() + } + + sourceSets.commonMain.dependencies { + api(projects.bson) + api(projects.bsonMultiplatform) + api(libs.kotlinx.io) + api(libs.kotlinx.coroutines) + + implementation(libs.ktor.network) + } + + sourceSets.commonTest.dependencies { + implementation(libsCommon.opensavvy.prepared.testBalloon) + implementation(libsCommon.kotlin.test) + } +} + +library { + name.set("KtMongo: MongoDB driver for Kotlin • Multiplatform wire protocol") + description.set("Low-level pure Kotlin implementation of the MongoDB wire protocol") + homeUrl.set("https://ktmongo.opensavvy.dev") + + license.set { + name.set("Apache 2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") + } + + coverage.set(45) // TODO: increase coverage when stabilizing +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,6 +4,7 @@ coroutines = "1.10.2" # https://github.com/Kotlin/kotlinx.coroutines/releases serialization = "1.9.0" # https://github.com/Kotlin/kotlinx.serialization/releases io = "0.8.0" # https://github.com/Kotlin/kotlinx-io/releases +ktor = "3.3.0" # https://ktor.io/docs/releases.html#release-details mongodb-bson-jvm = "5.6.2" # https://central.sonatype.com/artifact/org.mongodb/bson/versions mongodb-bson-js = "6.10.3" # https://www.npmjs.com/package/bson mongodb-driver = "5.6.2" # https://central.sonatype.com/artifact/org.mongodb/mongodb-driver-kotlin-coroutine @@ -22,6 +23,8 @@ kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "serialization" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" } kotlinx-io = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "io" } + +ktor-network = { module = "io.ktor:ktor-network", version.ref = "ktor" } mongodb-bson-jvm = { module = "org.mongodb:bson", version.ref = "mongodb-bson-jvm" } mongodb-core-jvm = { module = "org.mongodb:mongodb-driver-core", version.ref = "mongodb-driver" } diff --git a/driver-multiplatform-wire/src/commonMain/kotlin/MongoClient.kt b/driver-multiplatform-wire/src/commonMain/kotlin/MongoClient.kt new file mode 100644 --- /dev/null +++ b/driver-multiplatform-wire/src/commonMain/kotlin/MongoClient.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025-2026, OpenSavvy and contributors. + * + * 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 opensavvy.ktmongo.multiplatform.wire + +import opensavvy.ktmongo.dsl.LowLevelApi + +@LowLevelApi +interface MongoClient { + + companion object +}