Carter
07/19/2024, 6:07 PMArtem Kobzar
07/19/2024, 6:21 PMArtem Kobzar
07/19/2024, 6:22 PMCarter
07/19/2024, 6:27 PMOliver.O
07/19/2024, 9:44 PMCarter
07/21/2024, 6:21 PMval clientAggregationTask = tasks.register("clientAppAssetsAggregation") {
dependsOn("wasmJsBrowserDistribution")
inputs.files(tasks.named("wasmJsBrowserDistribution"))
val outputDir = layout.buildDirectory.dir("client-app-assets").get().asFile
outputs.dir(outputDir)
doLast {
outputDir.deleteRecursively()
outputDir.mkdirs()
inputs.files
.filter { it.isDirectory }
.forEach { dir ->
dir.listFiles()
?.filter { it.isFile }
?.filter { it.extension == "js" || it.extension == "wasm" || it.extension == "mjs" || it.extension == "map" }
?.forEach { file ->
file.copyTo(outputDir.resolve("asset/wasmJs/${file.name}"))
}
dir.listFiles()
?.filter { it.isDirectory }
?.filter { it.name == "composeResources" }
?.forEach { composeResourceDir ->
composeResourceDir.copyRecursively(outputDir.resolve("asset/wasmJs/${composeResourceDir.name}"))
}
}
}
}
configurations.register("clientAppProduction") {
isCanBeConsumed = true
isCanBeResolved = false
}.also { configuration ->
if (project.property("SIGMA_IS_WASMJS_ENABLED").toString().toBoolean()) {
artifacts {
val resolvedAggregationTask = clientAggregationTask.get()
add(configuration.name, resolvedAggregationTask.outputs.files.single()) {
builtBy(resolvedAggregationTask)
}
}
}
}
client-app/src/commonMain/kotlin/Entrypoint.kt
fun wasmJsApp() {
CanvasBasedWindow(canvasElementId = SharedIds.CANVAS_ID) {
configureWebResources {
resourcePathMapping { path -> "./asset/wasmJs/$path" }
}
App()
}
}
// server-app/build.gradle.kts
kotlin {
sourceSets {
getByName("jvmMain") {
dependencies {
implementation(
project(
mapOf(
"path" to ":client-app",
"configuration" to "clientAppProduction"
)
)
)
}
}
}
}
// server-app/src/jvmMain/kotlin/Application.kt
fun Routing.registerResourceRoutes() {
staticResources("asset/wasmJs", "asset/wasmJs")
// Corner case; can't change path for this file
route("client-app.wasm") {
get {
call.resolveResource("asset/wasmJs/client-app.wasm")?.let { resource ->
call.respond(resource)
}
}
}
}
Carter
07/21/2024, 6:26 PM