maximilianosorich
11/01/2025, 11:03 PMkotlin {
@OptIn(ExperimentalWasmDsl::class)
wasmJs("store") {
browser {
commonWebpackConfig {
outputFileName = "store.js"
}
}
binaries.executable()
}
storeMain.dependencies {
// DB Web worker
implementation(libs.web.worker.driver)
implementation(devNpm("copy-webpack-plugin", "9.1.0"))
implementation(npm("@cashapp/sqldelight-sqljs-worker", "2.1.0"))
implementation(npm("sql.js", "1.8.0"))
}
}
sqldelight {
databases {
create("Database") {
packageName.set("ar.com.cancerbero")
deriveSchemaFromMigrations.set(true)
verifyMigrations.set(true)
generateAsync.set(true)
}
}
}
the webpack.config.d/sqljs.js seems to be working...
config.resolve = {
fallback: {
fs: false,
path: false,
crypto: false,
}
};
const CopyWebpackPlugin = require('copy-webpack-plugin');
config.plugins.push(
new CopyWebpackPlugin({
patterns: [
'../../node_modules/sql.js/dist/sql-wasm.wasm'
]
})
);
the provideDbDriver:
private val workerScriptUrl: String = js("""new URL("@cashapp/sqldelight-sqljs-worker/sqljs.worker.js", import.meta.url)""")
actual suspend fun provideDbDriver(
schema: SqlSchema<QueryResult.AsyncValue<Unit>>
): SqlDriver {
return WebWorkerDriver(
Worker(workerScriptUrl)
).also { schema.create(it).await() }
}
The initialization logic:
object StoreApp {
val scope = CoroutineScope(Dispatchers.Default)
private var database: Database? = null
init {
scope.launch {
val driver = provideDbDriver(Database.Schema)
database = createDatabase(driver)
}
}
}
This error appears at first moment, with no use... So LATER when i try to do something like:
it crashes:
db!!.key_valuesQueries.selectValue("selectedStoreId").asFlow().mapToOneOrNull(Dispatchers.Default),
because of null pointer exception...
The Database,kt in commonMain:
expect suspend fun provideDbDriver(
schema: SqlSchema<QueryResult.AsyncValue<Unit>>
): SqlDriver
fun createDatabase(driver: SqlDriver): Database {
return Database(driver)
// Do more work with the database (see below).
}