29ad73b508
Documented the 2026-01-26 session, covering Web-App database issue resolution, PingViewModel test fixes, and Gradle build task optimizations. Included technical insights on Webpack, Wasm, and SQLDelight challenges, along with pending tasks for build and runtime testing.
3.3 KiB
3.3 KiB
type, status, owner, date, participants
| type | status | owner | date | participants | ||||
|---|---|---|---|---|---|---|---|---|
| Journal | COMPLETED | Curator | 2026-01-26 |
|
Session Log: 26. Jänner 2026
Zielsetzung
Stabilisierung der Web-Applikation (Wasm/JS) und Behebung von Datenbank-Initialisierungsfehlern (WebWorkerException) im Browser.
Durchgeführte Arbeiten
1. Web-App Datenbank (SQLDelight & Wasm)
- Problem: Die Web-App startete nicht mit einer
WebWorkerException. Ursache war, dass der Web Worker (sqlite.worker.js) und die zugehörige WASM-Datei (sqlite3.wasm) vom Browser nicht gefunden oder falsch geladen wurden. - Lösungsversuche:
- Aktivierung des Wasm-Targets (revertiert, da zu viele Folgefehler).
- Anpassung der Gradle-Tasks (
copySqliteAssetsToWebpackSource,copySqliteAssetsToDist), um Assets korrekt zu kopieren. - Anpassung des Workers (
sqlite.worker.js) für manuelles Laden der WASM-Datei viafetch. - Webpack-Hacks: Umfangreiche Anpassungen in
webpack.config.d/ignore-sqlite-wasm.js, um Webpack daran zu hindern,sqlite3.wasmals Modul zu parsen (was fehlschlug) und stattdessen auf eindummy.jsumzuleiten.
- Aktueller Stand:
- Der Build schlägt noch fehl mit
export 'default' ... was not found. - Die Strategie ist: Webpack sieht
dummy.js(als Ersatz fürsqlite3.mjsundsqlite3.wasm), während der Worker zur Laufzeit die echtesqlite3.wasmDatei manuell lädt. dummy.jsmuss so angepasst werden, dass es einen korrekten Default-Export bereitstellt.
- Der Build schlägt noch fehl mit
2. Unit Tests (Ping Feature)
- Problem:
PingViewModelTestschlug fehl, da Fehlerzustände nicht korrekt im UI-State gesetzt wurden. - Lösung:
PingViewModelangepasst, umerrorMessageim State bei Exceptions korrekt zu setzen. Tests sind wieder grün.
3. Gradle Build Optimierung
- Problem: Zirkuläre Abhängigkeiten zwischen Copy-Tasks und Webpack-Tasks.
- Lösung: Task-Reihenfolge in
build.gradle.ktskorrigiert (mustRunAfterstattdependsOnwo nötig).
Offene Punkte & Nächste Schritte
-
Web-App Build Fix:
dummy.jsmuss einen Default-Export (export default function...) bereitstellen, um den Import insqlite.worker.jszu befriedigen.- Danach sollte der Webpack-Build durchlaufen.
- Laufzeit-Test im Browser: Prüfen, ob der manuelle
fetchim Worker funktioniert und die DB initialisiert wird.
-
Wasm-Strategie:
- Langfristig sollte auf natives Wasm-Target umgestellt werden, sobald die Toolchain (Kotlin/Wasm + SQLDelight) stabiler ist. Aktuell ist der JS-Interop-Weg mit Webpack-Hacks notwendig.
-
Integration Test:
- Sobald die Web-App läuft: Vollständiger Durchstich (Login -> Ping -> DB Sync) im Browser testen.
Technische Erkenntnisse
- Webpack & Wasm: Webpack 5 tut sich schwer mit dynamischen
require-Aufrufen in Libraries wiesqlite-wasm, wenn diese nicht explizit alsexternalsoder viaNormalModuleReplacementPluginbehandelt werden. - SQLDelight im Browser: Die Kombination aus OPFS (Origin Private File System), Web Workern und Wasm erfordert präzise Kontrolle über das Laden der Assets, die Webpack oft "wegabstrahieren" will.
Status: 🟡 Build Failing (Web) / 🟢 Tests Passing (JVM)