Replaced Room with SQLDelight for improved multiplatform support, enabling JavaScript and WebAssembly targets. Added custom database driver implementations for JVM, JS, and WASM. Updated Gradle configurations, dependencies, and project structure accordingly.
122 lines
3.4 KiB
Plaintext
122 lines
3.4 KiB
Plaintext
@file:OptIn(ExperimentalKotlinGradlePluginApi::class, ExperimentalWasmDsl::class)
|
|
|
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
|
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
|
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile
|
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
|
|
/**
|
|
* Shared Module: Gemeinsame Libraries und Utilities für alle Client-Features
|
|
* KEINE EXECUTABLE - ist eine Library für andere Module
|
|
*/
|
|
plugins {
|
|
alias(libs.plugins.kotlinMultiplatform)
|
|
alias(libs.plugins.kotlinSerialization)
|
|
alias(libs.plugins.composeMultiplatform)
|
|
alias(libs.plugins.composeCompiler)
|
|
}
|
|
|
|
kotlin {
|
|
// Toolchain is now handled centrally in the root build.gradle.kts
|
|
val enableWasm = providers.gradleProperty("enableWasm").orNull == "true"
|
|
|
|
// JVM Target für Desktop
|
|
jvm()
|
|
|
|
// JavaScript Target für Web
|
|
js {
|
|
browser {
|
|
testTask {
|
|
enabled = false
|
|
}
|
|
}
|
|
// ...
|
|
}
|
|
|
|
// WASM, nur wenn explizit aktiviert
|
|
if (enableWasm) {
|
|
@OptIn(ExperimentalWasmDsl::class)
|
|
wasmJs { browser() }
|
|
}
|
|
|
|
sourceSets {
|
|
commonMain.dependencies {
|
|
|
|
api(projects.core.coreUtils)
|
|
api(projects.core.coreDomain)
|
|
api(project(":frontend:core:domain"))
|
|
|
|
// Kotlinx core dependencies (coroutines, serialization, datetime)
|
|
// KORREKTUR: Zugriff auf Bundle korrigiert.
|
|
// In libs.versions.toml: [bundles] kotlinx-core = [...]
|
|
// Gradle Accessor: libs.bundles.kotlinx.core
|
|
// Falls das fehlschlägt, listen wir die Libs einzeln auf, um den Build zu fixen.
|
|
implementation(libs.kotlinx.coroutines.core)
|
|
implementation(libs.kotlinx.serialization.json)
|
|
implementation(libs.kotlinx.datetime)
|
|
|
|
// HTTP Client
|
|
implementation(libs.ktor.client.core)
|
|
implementation(libs.ktor.client.contentNegotiation)
|
|
implementation(libs.ktor.client.serialization.kotlinx.json)
|
|
implementation(libs.ktor.client.logging)
|
|
implementation(libs.ktor.client.auth)
|
|
|
|
// Dependency Injection (Koin)
|
|
implementation(libs.koin.core)
|
|
implementation(libs.koin.compose)
|
|
implementation(libs.koin.compose.viewmodel)
|
|
|
|
// Network module (provides DI `apiClient`)
|
|
implementation(projects.frontend.core.network)
|
|
|
|
// Compose für shared UI components (common)
|
|
implementation(compose.runtime)
|
|
implementation(compose.foundation)
|
|
implementation(compose.material3)
|
|
}
|
|
|
|
commonTest.dependencies {
|
|
implementation(libs.kotlin.test)
|
|
implementation(libs.kotlinx.coroutines.test)
|
|
}
|
|
|
|
jvmMain.dependencies {
|
|
implementation(libs.ktor.client.cio)
|
|
}
|
|
|
|
jsMain.dependencies {
|
|
implementation(libs.ktor.client.js)
|
|
}
|
|
|
|
// WASM SourceSet, nur wenn aktiviert
|
|
if (enableWasm) {
|
|
val wasmJsMain = getByName("wasmJsMain")
|
|
wasmJsMain.dependencies {
|
|
implementation(libs.ktor.client.js) // WASM verwendet JS-Clients
|
|
implementation(compose.runtime)
|
|
implementation(compose.foundation)
|
|
implementation(compose.material3)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// KMP Compile-Optionen
|
|
tasks.withType<KotlinCompile> {
|
|
compilerOptions {
|
|
jvmTarget.set(JvmTarget.JVM_25)
|
|
freeCompilerArgs.addAll(
|
|
"-opt-in=kotlin.RequiresOptIn"
|
|
)
|
|
}
|
|
}
|
|
|
|
tasks.withType<KotlinJsCompile>().configureEach {
|
|
compilerOptions {
|
|
target = "es2015"
|
|
}
|
|
}
|