diff --git a/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/IntelliJPattern.kt b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/IntelliJPattern.kt index 4adc9d2..8749884 100644 --- a/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/IntelliJPattern.kt +++ b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/IntelliJPattern.kt @@ -50,4 +50,4 @@ class IntelliJPattern : Plugin { } } -} \ No newline at end of file +} diff --git a/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinProjectConfiguration.kt b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinJvmProjectConfiguration.kt similarity index 66% rename from buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinProjectConfiguration.kt rename to buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinJvmProjectConfiguration.kt index cdcca3c..4d0c429 100644 --- a/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinProjectConfiguration.kt +++ b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinJvmProjectConfiguration.kt @@ -7,7 +7,7 @@ import org.gradle.api.tasks.SourceSetContainer import org.gradle.kotlin.dsl.findByType import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension -class KotlinProjectConfiguration : Plugin { +class KotlinJvmProjectConfiguration : Plugin { override fun apply(project: Project) { addSourceSets(project) @@ -15,16 +15,18 @@ class KotlinProjectConfiguration : Plugin { private fun addSourceSets(project: Project) { - project.extensions.findByType()?.apply { - - project.extensions.findByType() - ?.named(SourceSet.MAIN_SOURCE_SET_NAME) - ?.configure { - java { - srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java")) - srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin")) + project.beforeEvaluate { + extensions.findByType()?.apply { + extensions.findByType() + ?.named(SourceSet.MAIN_SOURCE_SET_NAME) + ?.configure { + java { + srcDir(layout.buildDirectory.dir("pbAndG/generated-sources/java")) + srcDir(layout.buildDirectory.dir("pbAndG/generated-sources/kotlin")) + } } - } + + } // val srcSet = project.extensions.getByName(SourceSet.MAIN_SOURCE_SET_NAME) // diff --git a/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinMultiplatformProjectConfiguration.kt b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinMultiplatformProjectConfiguration.kt new file mode 100644 index 0000000..79845f4 --- /dev/null +++ b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pattern/KotlinMultiplatformProjectConfiguration.kt @@ -0,0 +1,61 @@ +package dev.adamko.gradle.pbandg.pattern + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.findByType +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension + +class KotlinMultiplatformProjectConfiguration : Plugin { + + override fun apply(project: Project) { + project.afterEvaluate { + addSourceSets(this) + } + } + + private fun addSourceSets(project: Project) { + + project.extensions.findByType()?.apply { + project.logger.lifecycle("Kotlin Multiplatform source sets: ${sourceSets.joinToString { "${it.name} / ${it.kotlin.sourceDirectories.files.joinToString()}" }}") + + sourceSets.whenObjectAdded { + this.name + } +// +// val protoJvm = this.sourceSets.maybeCreate("protoJvm").apply { +// kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java")) +// kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin")) +// } +// +// val protoTypescript = this.sourceSets.maybeCreate("protoJvm").apply { +// kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/typescript")) +// } + + this.sourceSets.named("jvmMain").configure { +// dependsOn(protoJvm) + kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java")) + kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin")) + } + this.sourceSets.named("jsMain").configure { +// dependsOn(protoTypescript) + kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/typescript")) + } + + project.logger.lifecycle("Kotlin Multiplatform source sets: ${sourceSets.joinToString { "${it.name} / ${it.kotlin.sourceDirectories.files.joinToString()}" }}") + +// +// targets .forEach { +// when (it.platformType){ +// KotlinPlatformType.jvm -> TODO() +// KotlinPlatformType.js -> { +// it.defaultConfigurationName +// } +// KotlinPlatformType.androidJvm -> {} +// KotlinPlatformType.common -> {} +// KotlinPlatformType.native -> {} +// } +// } + + } + } +} diff --git a/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pb-and-g.gradle.kts b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pb-and-g.gradle.kts index c015322..232bbea 100644 --- a/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pb-and-g.gradle.kts +++ b/buildSrc/src/main/kotlin/dev/adamko/gradle/pbandg/pb-and-g.gradle.kts @@ -1,7 +1,7 @@ package dev.adamko.gradle.pbandg -import dev.adamko.gradle.pbandg.pattern.IntelliJPattern -import dev.adamko.gradle.pbandg.pattern.KotlinProjectConfiguration +import dev.adamko.gradle.pbandg.pattern.KotlinJvmProjectConfiguration +import dev.adamko.gradle.pbandg.pattern.KotlinMultiplatformProjectConfiguration import dev.adamko.gradle.pbandg.settings.PBAndGSettings import dev.adamko.gradle.pbandg.task.ProtobufCompileTask import dev.adamko.gradle.pbandg.task.ProtobufPrepareLibrariesTask @@ -24,8 +24,15 @@ plugins { //if (plugins.hasPlugin(IdeaPlugin::class)) { // IntelliJPattern().apply(project) //} -if (plugins.hasPlugin("org.jetbrains.kotlin.jvm")) { - KotlinProjectConfiguration().apply(project) + +plugins.withId("org.jetbrains.kotlin.jvm") { + logger.info("Configuring Kotlin JVM plugin for PB&G") + KotlinJvmProjectConfiguration().apply(project) +} + +plugins.withId("org.jetbrains.kotlin.multiplatform") { + logger.info("Configuring Kotlin Multiplatform plugin for PB&G") + KotlinMultiplatformProjectConfiguration().apply(project) } val pbAndGSettings = diff --git a/modules/factorio-events-data-model/build.gradle.kts b/modules/factorio-events-data-model/build.gradle.kts index 4787ac5..fac3999 100644 --- a/modules/factorio-events-data-model/build.gradle.kts +++ b/modules/factorio-events-data-model/build.gradle.kts @@ -1,7 +1,9 @@ plugins { - id("dev.adamko.factoriowebmap.archetype.kotlin-jvm") + id("dev.adamko.factoriowebmap.archetype.base") + kotlin("multiplatform") + +// id("dev.adamko.factoriowebmap.archetype.kotlin-jvm") id("dev.adamko.gradle.pbandg.pb-and-g") - `kotlin-dsl` } val projectId: String by project.extra @@ -10,15 +12,128 @@ val buildDir: Directory = layout.buildDirectory.dir(projectId).get() dependencies { protobufLibrary("com.google.protobuf:protobuf-javalite:3.19.1") - - api("com.google.protobuf:protobuf-javalite:3.19.1") - api("com.google.protobuf:protobuf-kotlin-lite:3.19.1") +// +// api("com.google.protobuf:protobuf-javalite:3.19.1") +// api("com.google.protobuf:protobuf-kotlin-lite:3.19.1") } tasks.protobufCompile { - protoFile.set(layout.projectDirectory.file("src/main/proto/FactorioServerLogRecord.proto")) + protoFile.set(layout.projectDirectory.file("src/proto/FactorioServerLogRecord.proto")) } -sourceSets { +idea { + workspace { + + } +} + +kotlin { + sourceSets.all { + languageSettings.apply { + languageVersion = "1.5" +// enableLanguageFeature("InlineClasses") // language feature name + optIn("kotlin.OptIn") + optIn("kotlin.ExperimentalStdlibApi") + optIn("kotlin.time.ExperimentalTime") + optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") +// progressiveMode = true // false by default + } + } + + // + sourceSets { + val proto by creating { + } + } + // + + // + jvm { + compilations.configureEach { + kotlinOptions { + jvmTarget = "11" + } + } + } + + sourceSets { + val jvmMain by getting { + dependencies { + api("com.google.protobuf:protobuf-javalite:3.19.1") + api("com.google.protobuf:protobuf-kotlin-lite:3.19.1") + } + } + val jvmTest by getting { + } + } + // + + // + js(IR) { + binaries.executable() + browser { + commonWebpackConfig { + cssSupport.enabled = true + } + } + + useCommonJs() + nodejs() + + compilations["main"].apply { + packageJson { + customField( + "scripts", + mapOf( + "build" to "tstl", + "dev" to "tstl --watch", + ) + ) + } + } + + } + + sourceSets { + + val jsMain by getting { + kotlin.srcDir("externals02") +// kotlin.srcDir("externals") + + dependencies { + + val kotlinWrappersVersion = "0.0.1-pre.254-kotlin-1.5.31" + implementation( + project.dependencies.enforcedPlatform( + "org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:${kotlinWrappersVersion}" + ) + ) + +// implementation("org.jetbrains.kotlin-wrappers:kotlin-react") +// implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom") +// implementation(npm("react", "17.0.2")) +// implementation(npm("react-dom", "17.0.2")) + +// implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7") { +// because("https://github.com/Kotlin/kotlinx-nodejs") +// } + +// implementation(npm("typescript-to-lua", "1.0.1")) +// implementation(npm("typed-factorio", "0.7.1")) +// implementation(npm("lua-types", "2.11.0")) +// implementation(npm("typescript", "4.4.3")) + + + implementation(npm("ts-proto", "1.83.3")) + } + } + + val jsTest by getting { + dependencies { + implementation(kotlin("test-js")) + } + } + } + // } diff --git a/modules/factorio-events-data-model/src/main/proto/FactorioServerLogRecord.proto b/modules/factorio-events-data-model/src/proto/FactorioServerLogRecord.proto similarity index 100% rename from modules/factorio-events-data-model/src/main/proto/FactorioServerLogRecord.proto rename to modules/factorio-events-data-model/src/proto/FactorioServerLogRecord.proto diff --git a/modules/factorio-events-data-model/src/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt b/modules/factorio-events-data-model/xsrc/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt similarity index 100% rename from modules/factorio-events-data-model/src/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt rename to modules/factorio-events-data-model/xsrc/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt diff --git a/modules/factorio-events-data-model/src/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt b/modules/factorio-events-data-model/xsrc/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt similarity index 100% rename from modules/factorio-events-data-model/src/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt rename to modules/factorio-events-data-model/xsrc/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt diff --git a/modules/factorio-events-data-model/src/main/kotlin/PlayerModel.kt b/modules/factorio-events-data-model/xsrc/main/kotlin/PlayerModel.kt similarity index 100% rename from modules/factorio-events-data-model/src/main/kotlin/PlayerModel.kt rename to modules/factorio-events-data-model/xsrc/main/kotlin/PlayerModel.kt