You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.6 KiB

import org.jetbrains.kotlin.gradle.targets.js.ir.DefaultIncrementalSyncTask
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
plugins {
kotlin("multiplatform")
id("org.jetbrains.compose")
}
val copyJsResources = tasks.create("copyJsResourcesWorkaround", Copy::class.java) {
from(project(":shared").file("src/commonMain/composeResources"))
into("build/processedResources/js/main")
}
tasks.withType<DefaultIncrementalSyncTask> {
dependsOn(copyJsResources)
}
val copyWasmResources = tasks.create("copyWasmResourcesWorkaround", Copy::class.java) {
from(project(":shared").file("src/commonMain/composeResources"))
into("build/processedResources/wasmJs/main")
}
afterEvaluate {
project.tasks.getByName("jsProcessResources").finalizedBy(copyJsResources)
project.tasks.getByName("wasmJsProcessResources").finalizedBy(copyWasmResources)
project.tasks.getByName("wasmJsDevelopmentExecutableCompileSync").dependsOn(copyWasmResources)
project.tasks.getByName("wasmJsProductionExecutableCompileSync").dependsOn(copyWasmResources)
}
val rootDirPath = project.rootDir.path
kotlin {
js {
moduleName = "imageviewer"
browser {
commonWebpackConfig {
outputFileName = "imageviewer.js"
}
}
binaries.executable()
useEsModules()
}
wasmJs {
moduleName = "imageviewer"
browser {
commonWebpackConfig {
devServer = (devServer ?: KotlinWebpackConfig.DevServer()).apply {
static = (static ?: mutableListOf()).apply {
// Serve sources to debug inside browser
add(rootDirPath)
add(rootDirPath + "/shared/")
add(rootDirPath + "/webApp/")
}
}
}
}
binaries.executable()
}
sourceSets {
val jsWasmMain by creating {
dependencies {
implementation(project(":shared"))
implementation(compose.runtime)
implementation(compose.ui)
implementation(compose.foundation)
implementation(compose.material)
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
implementation(compose.components.resources)
}
}
val jsMain by getting {
dependsOn(jsWasmMain)
}
val wasmJsMain by getting {
dependsOn(jsWasmMain)
}
}
}
compose.experimental {
web.application {}
}