Skip to content

Commit f25629d

Browse files
authored
Merge pull request #411 from joreilly/sql_delight_wasm
SQLDelight Wasm aupport
2 parents 11f6de5 + 834b912 commit f25629d

File tree

19 files changed

+281
-227
lines changed

19 files changed

+281
-227
lines changed

common/build.gradle.kts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
@file:OptIn(ExperimentalWasmDsl::class)
2+
3+
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
4+
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
5+
16
plugins {
27
alias(libs.plugins.kotlinMultiplatform)
38
alias(libs.plugins.android.library)
@@ -36,11 +41,16 @@ kotlin {
3641
androidTarget()
3742
jvm()
3843

39-
js(IR) {
40-
useCommonJs()
41-
browser()
44+
wasmJs {
45+
moduleName = "peopleinspaceShared"
46+
browser {
47+
commonWebpackConfig {
48+
outputFileName = "peopleinspaceShared.js"
49+
}
50+
}
4251
}
4352

53+
4454
sourceSets {
4555
commonMain.dependencies {
4656
implementation(libs.bundles.ktor.common)
@@ -83,22 +93,27 @@ kotlin {
8393
implementation(libs.ktor.client.java)
8494
implementation(libs.sqldelight.sqlite.driver)
8595
implementation(libs.slf4j)
96+
implementation(libs.kotlinx.coroutines.swing)
8697
}
8798

8899
appleMain.dependencies {
89100
implementation(libs.ktor.client.darwin)
90101
implementation(libs.sqldelight.native.driver)
91102
}
92103

93-
jsMain.dependencies {
94-
implementation(libs.ktor.client.js)
104+
wasmJsMain.dependencies {
105+
implementation(libs.sqldelight.web.driver)
106+
implementation(npm("@cashapp/sqldelight-sqljs-worker", "2.1.0"))
107+
implementation(npm("sql.js", libs.versions.sqlJs.get()))
108+
implementation(devNpm("copy-webpack-plugin", libs.versions.webPackPlugin.get()))
95109
}
96110
}
97111
}
98112

99113
sqldelight {
100114
databases {
101115
create("PeopleInSpaceDatabase") {
116+
generateAsync = true
102117
packageName.set("com.surrus.peopleinspace.db")
103118
}
104119
}

common/src/androidMain/kotlin/com/surrus/common/repository/actual.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.surrus.common.repository
22

3+
import app.cash.sqldelight.async.coroutines.synchronous
34
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
45
import com.surrus.common.di.PeopleInSpaceDatabaseWrapper
56
import com.surrus.peopleinspace.db.PeopleInSpaceDatabase
@@ -12,9 +13,9 @@ import org.koin.dsl.module
1213
actual fun platformModule() = module {
1314
single {
1415
val driver =
15-
AndroidSqliteDriver(PeopleInSpaceDatabase.Schema, get(), "peopleinspace.db")
16+
AndroidSqliteDriver(PeopleInSpaceDatabase.Schema.synchronous(), get(), "peopleinspace.db")
1617

17-
PeopleInSpaceDatabaseWrapper(PeopleInSpaceDatabase(driver))
18+
PeopleInSpaceDatabaseWrapper(driver, PeopleInSpaceDatabase(driver))
1819
}
1920
single<HttpClientEngine> { Android.create() }
2021
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.surrus.common.di
22

3+
import app.cash.sqldelight.db.SqlDriver
34
import com.surrus.peopleinspace.db.PeopleInSpaceDatabase
45

5-
class PeopleInSpaceDatabaseWrapper(val instance: PeopleInSpaceDatabase?)
6+
class PeopleInSpaceDatabaseWrapper(val driver: SqlDriver, val instance: PeopleInSpaceDatabase)

common/src/commonMain/kotlin/com/surrus/common/repository/PeopleInSpaceRepository.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.surrus.common.repository
22

3+
import app.cash.sqldelight.async.coroutines.awaitCreate
34
import app.cash.sqldelight.coroutines.asFlow
45
import app.cash.sqldelight.coroutines.mapToList
56
import co.touchlab.kermit.Logger
67
import com.surrus.common.di.PeopleInSpaceDatabaseWrapper
78
import com.surrus.common.remote.Assignment
89
import com.surrus.common.remote.IssPosition
910
import com.surrus.common.remote.PeopleInSpaceApi
11+
import com.surrus.peopleinspace.db.PeopleInSpaceDatabase
1012
import kotlinx.coroutines.*
1113
import kotlinx.coroutines.flow.*
1214

@@ -24,12 +26,14 @@ class PeopleInSpaceRepository(
2426
) : PeopleInSpaceRepositoryInterface {
2527

2628
val coroutineScope: CoroutineScope = MainScope()
27-
private val peopleInSpaceQueries = peopleInSpaceDatabase.instance?.peopleInSpaceQueries
29+
private val peopleInSpaceQueries = peopleInSpaceDatabase.instance.peopleInSpaceQueries
2830

2931
val logger = Logger.withTag("PeopleInSpaceRepository")
3032

3133
init {
3234
coroutineScope.launch {
35+
// TODO figure out cleaner place to invoke this
36+
PeopleInSpaceDatabase.Schema.awaitCreate(peopleInSpaceDatabase.driver)
3337
fetchAndStorePeople()
3438
}
3539
}

common/src/commonMain/sqldelight/com/surrus/peopleinspace/db/PeopleInSpace.sq

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CREATE TABLE People(
1+
CREATE TABLE IF NOT EXISTS People(
22
name TEXT NOT NULL PRIMARY KEY,
33
craft TEXT NOT NULL,
44
personImageUrl TEXT,

common/src/iOSMain/kotlin/com/surrus/common/repository/actual.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.surrus.common.repository
22

3+
import app.cash.sqldelight.async.coroutines.synchronous
34
import app.cash.sqldelight.driver.native.NativeSqliteDriver
45
import com.surrus.common.di.PeopleInSpaceDatabaseWrapper
56
import com.surrus.peopleinspace.db.PeopleInSpaceDatabase
@@ -10,8 +11,8 @@ import org.koin.dsl.module
1011

1112
actual fun platformModule() = module {
1213
single {
13-
val driver = NativeSqliteDriver(PeopleInSpaceDatabase.Schema, "peopleinspace.db")
14-
PeopleInSpaceDatabaseWrapper(PeopleInSpaceDatabase(driver))
14+
val driver = NativeSqliteDriver(PeopleInSpaceDatabase.Schema.synchronous(), "peopleinspace.db")
15+
PeopleInSpaceDatabaseWrapper(driver, PeopleInSpaceDatabase(driver))
1516
}
1617
single<HttpClientEngine> { Darwin.create() }
1718
}

common/src/jsMain/kotlin/com/surrus/common/repository/actual.kt

Lines changed: 0 additions & 12 deletions
This file was deleted.

common/src/jvmMain/kotlin/com/surrus/common/repository/actual.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ actual fun platformModule() = module {
1010
single {
1111
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
1212
.also { PeopleInSpaceDatabase.Schema.create(it) }
13-
PeopleInSpaceDatabaseWrapper(PeopleInSpaceDatabase(driver))
13+
PeopleInSpaceDatabaseWrapper(driver, PeopleInSpaceDatabase(driver))
1414
}
1515
single { Java.create() }
1616
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.surrus.common.repository
2+
3+
import app.cash.sqldelight.driver.worker.createDefaultWebWorkerDriver
4+
import com.surrus.common.di.PeopleInSpaceDatabaseWrapper
5+
import com.surrus.peopleinspace.db.PeopleInSpaceDatabase
6+
import io.ktor.client.engine.HttpClientEngine
7+
import io.ktor.client.engine.js.Js
8+
import org.koin.dsl.module
9+
10+
actual fun platformModule() = module {
11+
single {
12+
val driver = createDefaultWebWorkerDriver()
13+
PeopleInSpaceDatabaseWrapper(driver, PeopleInSpaceDatabase(driver))
14+
}
15+
single<HttpClientEngine> { Js.create() }
16+
}

common/src/jsMain/kotlin/com/surrus/common/ui/ISSMapView.js.kt renamed to common/src/wasmJsMain/kotlin/com/surrus/common/ui/ISSMapView.wasmJs.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@ import androidx.compose.ui.Modifier
55
import com.surrus.common.viewmodel.ISSPositionViewModel
66

77
@Composable
8-
actual fun ISSMapView(modifier: Modifier, viewModel: ISSPositionViewModel) {
8+
actual fun ISSMapView(
9+
modifier: Modifier,
10+
viewModel: ISSPositionViewModel
11+
) {
912
}

0 commit comments

Comments
 (0)