Slackbot
06/06/2025, 3:40 AMYassine Abou
06/06/2025, 3:41 AMbuild.gradle.kts
)
wasmJsMain.dependencies {
implementation(libs.ktor.client.js)
implementation(libs.sqldelight.web.driver)
implementation(npm("@cashapp/sqldelight-sqljs-worker", "2.1.0"))
implementation(npm("sql.js", libs.versions.sqlJs.get()))
implementation(devNpm("copy-webpack-plugin", libs.versions.webPackPlugin.get()))
}
2. Webpack Configurations ( project-root/webpack.config.d/)
a. config.js
const TerserPlugin = require("terser-webpack-plugin");
config.optimization = config.optimization || {};
config.optimization.minimize = true;
config.optimization.minimizer = [
new TerserPlugin({
terserOptions: {
mangle: true,
compress: false,
output: { beautify: false }
}
})
];
b. sqljs-config.js
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'
]
})
);
3. Worker Initialization (Kotlin)
private fun getWorkerUrl(): String =
js("new URL('@cashapp/sqldelight-sqljs-worker/sqljs.worker.js', import.meta.url).href")
actual val platformModule = module {
single {
val workerUrl = getWorkerUrl()
val driver = WebWorkerDriver(Worker(workerUrl))
LlmsDatabaseWrapper(driver, LlmsDatabase(driver))
}
}