Kafkatorio/modules/events-library/build.gradle.kts

176 lines
4.7 KiB
Text
Raw Normal View History

import kafkatorio.tasks.GenerateTypeScriptTask
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2022-10-04 23:47:16 +02:00
import dev.adamko.gradle.factorio.typescriptAttributes
plugins {
id("kafkatorio.conventions.lang.kotlin-multiplatform")
2022-10-04 23:47:16 +02:00
id("dev.adamko.factorio-mod") apply false // only needed for 'attributes' - need to split up the plugin?
kotlin("plugin.serialization")
distribution
}
2021-10-25 23:35:18 +02:00
description = "shared data structures and utilities"
2021-12-08 17:43:08 +01:00
kotlin {
2021-12-08 17:43:08 +01:00
js(IR) {
browser {}
// this is a library - don't set binaries.executable()
2021-12-08 17:43:08 +01:00
}
2022-01-09 11:06:15 +01:00
jvm {
val main by compilations.getting {
kotlinOptions {
jvmTarget = "11"
}
}
testRuns.configureEach {
executionTask.configure {
useJUnitPlatform()
}
2022-01-09 11:06:15 +01:00
}
}
2021-12-08 17:43:08 +01:00
sourceSets {
2022-09-11 00:25:58 +02:00
configureEach {
2021-12-08 17:43:08 +01:00
languageSettings.apply {
optIn("kotlin.ExperimentalStdlibApi")
optIn("kotlin.ExperimentalUnsignedTypes")
2022-07-02 10:21:13 +02:00
optIn("kotlin.RequiresOptIn")
optIn("kotlin.js.ExperimentalJsExport")
2021-12-08 17:43:08 +01:00
optIn("kotlin.time.ExperimentalTime")
2022-07-02 10:21:13 +02:00
optIn("kotlinx.coroutines.FlowPreview")
2021-12-08 17:43:08 +01:00
optIn("kotlinx.serialization.ExperimentalSerializationApi")
}
}
val commonMain by getting {
dependencies {
implementation(dependencies.platform(projects.modules.versionsPlatform))
2021-12-08 17:43:08 +01:00
2022-09-11 00:48:16 +02:00
implementation(libs.kotlinxSerialization.core)
implementation(libs.kotlinxSerialization.json)
api(libs.kotlinxSerialization.kxsTsGen)
implementation(libs.okio.core)
implementation(libs.kotlinx.coroutines.core)
2021-12-08 17:43:08 +01:00
}
}
val commonTest by getting {
dependencies {
implementation(dependencies.platform(projects.modules.versionsPlatform))
2021-12-08 17:43:08 +01:00
implementation(kotlin("test"))
implementation(libs.kotest.core)
implementation(libs.kotest.datatest)
implementation(libs.kotest.frameworkEngine)
implementation(libs.kotest.json)
implementation(libs.kotest.prop)
2021-12-08 17:43:08 +01:00
}
}
2021-12-08 17:43:08 +01:00
val jvmMain by getting {
dependencies {
implementation(dependencies.platform(projects.modules.versionsPlatform))
implementation(kotlin("reflect"))
2021-12-08 17:43:08 +01:00
}
}
2021-12-08 17:43:08 +01:00
val jvmTest by getting {
dependencies {
implementation(dependencies.platform(projects.modules.versionsPlatform))
implementation(libs.kotest.runnerJunit5)
2021-12-08 17:43:08 +01:00
}
}
val jsTest by getting {
dependencies { }
}
2021-12-08 17:43:08 +01:00
}
2021-10-31 09:13:41 +01:00
}
2022-07-02 10:21:13 +02:00
val kotlinJvmMainCompilation: NamedDomainObjectProvider<KotlinJvmCompilation> =
kotlin.jvm().compilations.named(KotlinCompilation.MAIN_COMPILATION_NAME)
2022-05-07 20:22:54 +02:00
val jvmJar: TaskProvider<Jar> = tasks.named<Jar>(kotlin.jvm().artifactsTaskName)
val kotlinMainRuntimeDependencies: Provider<FileCollection> =
kotlinJvmMainCompilation.map { it.runtimeDependencyFiles }
val kotlinMainCompileDependencies: Provider<FileCollection> =
kotlinJvmMainCompilation.map { it.compileDependencyFiles }
val kotlinMainCompileTask: Provider<KotlinCompile> =
kotlinJvmMainCompilation.map { it.compileKotlinTask }
2021-12-08 17:43:08 +01:00
val generateTypeScript by tasks.registering(GenerateTypeScriptTask::class) {
dependsOn(jvmJar)
// dependsOn(kotlinMainCompileTask)
// inputs.files(jvmJar.map { it.outputs.files })
// inputs.files(kotlinMainCompileTask.map { it.javaSources })
2021-12-08 17:43:08 +01:00
classpath(
jvmJar,
kotlinMainRuntimeDependencies,
// kotlinMainCompileTask.map { it.libraries }
// kotlinMainDependencies,
2021-12-08 17:43:08 +01:00
)
2022-05-07 20:22:54 +02:00
output.set(layout.buildDirectory.dir("generated/typescript"))
mainClass.set("dev.adamko.kafkatorio.schema.Kt2ts2Kt")
2022-05-07 20:22:54 +02:00
args(temporaryDir.canonicalPath)
}
2021-12-08 17:43:08 +01:00
2022-07-02 10:21:13 +02:00
val schemaTsDistributionName: Provider<String> = providers.provider {
2022-05-07 20:22:54 +02:00
"${rootProject.name}-${project.name}"
}
2022-07-02 10:21:13 +02:00
val generateTypeScriptOutputFiles: Provider<FileTree> =
generateTypeScript.map { it.outputs.files.asFileTree }
2022-07-02 10:21:13 +02:00
//val schemaTs by distributions.registering {
// distributionBaseName.set(schemaTsDistributionName)
// contents {
// from(generateTypeScriptOutputFiles)
// }
//}
//val schemaTsZipTask: TaskProvider<Zip> = tasks.named<Zip>("${schemaTs.name}DistZip")
//val schemaTsZipTaskArchiveFile: Provider<RegularFile> = schemaTsZipTask.flatMap { it.archiveFile }
2022-07-02 10:21:13 +02:00
val schemaTsZip by tasks.registering(Zip::class) {
group = "kt2ts"
archiveBaseName.set("schema-ts")
from(generateTypeScriptOutputFiles)
destinationDirectory.set(layout.buildDirectory.dir("distributions/kt2ts"))
}
val schemaTsZipTaskArchiveFile: Provider<RegularFile> = schemaTsZip.flatMap { it.archiveFile }
2022-05-07 20:22:54 +02:00
2022-07-02 10:21:13 +02:00
2022-09-11 00:25:58 +02:00
val typeScriptModelGenerated by configurations.creating<Configuration> {
asProvider()
typescriptAttributes(objects)
2021-12-08 17:43:08 +01:00
outgoing.artifact(schemaTsZipTaskArchiveFile)
// outgoing.artifact(schemaTsZipTaskArchiveFile)
}