proto2typescript working!!!!!!!!!!!!!
This commit is contained in:
parent
6dce641d6b
commit
00b3dc3554
6 changed files with 91 additions and 27 deletions
|
|
@ -16,8 +16,6 @@ plugins {
|
||||||
id("dev.adamko.factoriowebmap.archetype.node")
|
id("dev.adamko.factoriowebmap.archetype.node")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
js(IR) {
|
js(IR) {
|
||||||
binaries.executable()
|
binaries.executable()
|
||||||
|
|
|
||||||
|
|
@ -22,21 +22,23 @@ class KotlinMultiplatformProjectConfiguration : Plugin<Project> {
|
||||||
this.name
|
this.name
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// val protoJvm = this.sourceSets.maybeCreate("protoJvm").apply {
|
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/java"))
|
||||||
// kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
|
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 {
|
val protoTypescript = this.sourceSets.maybeCreate("protoJvm").apply {
|
||||||
|
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/typescript"))
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sourceSets.findByName("jvmMain")?.apply {
|
||||||
|
// protoJvm.dependsOn(this)
|
||||||
// dependsOn(protoJvm)
|
// dependsOn(protoJvm)
|
||||||
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java"))
|
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java"))
|
||||||
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
|
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
|
||||||
}
|
}
|
||||||
this.sourceSets.named("jsMain").configure {
|
this.sourceSets.findByName("jsMain")?.apply {
|
||||||
|
// protoTypescript.dependsOn(this)
|
||||||
// dependsOn(protoTypescript)
|
// dependsOn(protoTypescript)
|
||||||
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/typescript"))
|
kotlin.srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/typescript"))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ plugins {
|
||||||
base
|
base
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO investigate builtBy and sourceDirectorySet?
|
// TODO investigate builtBy and sourceDirectorySet?
|
||||||
// project.objects.fileCollection().builtBy()
|
// project.objects.fileCollection().builtBy()
|
||||||
// val pbSrcSet = project.objects.sourceDirectorySet("protobuf", "protobuf")
|
// val pbSrcSet = project.objects.sourceDirectorySet("protobuf", "protobuf")
|
||||||
|
|
@ -77,19 +76,19 @@ val protobufPrepareLibrariesTask =
|
||||||
//// implementation("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
//// implementation("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
project.tasks.withType<ProtobufCompileTask> {
|
||||||
/** Convert `.proto` files to Kotlin */
|
|
||||||
val pbCompileTask = project.tasks.register<ProtobufCompileTask>(Constants.PBG_TASK_COMPILE) {
|
|
||||||
dependsOn(protocDep, protobufPrepareLibrariesTask)
|
dependsOn(protocDep, protobufPrepareLibrariesTask)
|
||||||
|
|
||||||
protobufLibraryDirectories.add(protobufPrepareLibrariesTask.flatMap { it.librariesDirectory })
|
protobufLibraryDirectories.add(protobufPrepareLibrariesTask.flatMap { it.librariesDirectory })
|
||||||
|
|
||||||
protocOutputs += KotlinOutput()
|
|
||||||
protocOutputs += JavaOutput()
|
|
||||||
|
|
||||||
val exe = protocDep.singleFile
|
val exe = protocDep.singleFile
|
||||||
logger.lifecycle("protoc.exe: $exe")
|
logger.lifecycle("protoc.exe: $exe")
|
||||||
protocExecutable.set(exe)
|
protocExecutable.set(exe)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Convert `.proto` files to Kotlin */
|
||||||
|
val pbCompileTask = project.tasks.register<ProtobufCompileTask>(Constants.PBG_TASK_COMPILE) {
|
||||||
|
protocOutputs += KotlinOutput()
|
||||||
|
protocOutputs += JavaOutput()
|
||||||
|
}
|
||||||
|
|
||||||
project.tasks.assemble { dependsOn(pbCompileTask) }
|
project.tasks.assemble { dependsOn(pbCompileTask) }
|
||||||
|
|
@ -33,6 +33,9 @@ abstract class ProtobufCompileTask : DefaultTask() {
|
||||||
abstract val protocOutputs: DomainObjectSet<ProtocOutput>
|
abstract val protocOutputs: DomainObjectSet<ProtocOutput>
|
||||||
// = project.objects.domainObjectSet(ProtocOutput::class.java)
|
// = project.objects.domainObjectSet(ProtocOutput::class.java)
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val cliArgs: ListProperty<String>
|
||||||
|
|
||||||
@get:InputFile
|
@get:InputFile
|
||||||
abstract val protoFile: RegularFileProperty
|
abstract val protoFile: RegularFileProperty
|
||||||
|
|
||||||
|
|
@ -48,7 +51,7 @@ abstract class ProtobufCompileTask : DefaultTask() {
|
||||||
fun compile() {
|
fun compile() {
|
||||||
|
|
||||||
val workDir = temporaryDir
|
val workDir = temporaryDir
|
||||||
project.delete(workDir)
|
// project.delete(workDir)
|
||||||
|
|
||||||
project.exec {
|
project.exec {
|
||||||
executable(protocExecutable.asFile.get())
|
executable(protocExecutable.asFile.get())
|
||||||
|
|
@ -65,9 +68,11 @@ abstract class ProtobufCompileTask : DefaultTask() {
|
||||||
// set args
|
// set args
|
||||||
mapOutputsToOutputDir
|
mapOutputsToOutputDir
|
||||||
.map { (opt, dir) ->
|
.map { (opt, dir) ->
|
||||||
"${opt.cliParam}=${opt.protocOptions}:${dir}"
|
val optionsSuffix = if (opt.protocOptions.isBlank()) "" else ":"
|
||||||
|
"${opt.cliParam}=${opt.protocOptions}$optionsSuffix$dir"
|
||||||
}
|
}
|
||||||
.also { args(it) }
|
.also { args(it) }
|
||||||
|
args(cliArgs.get())
|
||||||
|
|
||||||
val protoPath = cliParamProtoPath.get()
|
val protoPath = cliParamProtoPath.get()
|
||||||
val libArgs = protobufLibraryDirectories.get().map { "$protoPath${it.asFile}" }
|
val libArgs = protobufLibraryDirectories.get().map { "$protoPath${it.asFile}" }
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
import dev.adamko.gradle.pbandg.task.ProtobufCompileTask
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("dev.adamko.factoriowebmap.archetype.base")
|
id("dev.adamko.factoriowebmap.archetype.base")
|
||||||
kotlin("multiplatform")
|
kotlin("multiplatform")
|
||||||
|
|
@ -17,10 +21,6 @@ dependencies {
|
||||||
// api("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
// api("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.protobufCompile {
|
|
||||||
protoFile.set(layout.projectDirectory.file("src/proto/FactorioServerLogRecord.proto"))
|
|
||||||
}
|
|
||||||
|
|
||||||
idea {
|
idea {
|
||||||
workspace {
|
workspace {
|
||||||
|
|
||||||
|
|
@ -36,6 +36,7 @@ kotlin {
|
||||||
optIn("kotlin.ExperimentalStdlibApi")
|
optIn("kotlin.ExperimentalStdlibApi")
|
||||||
optIn("kotlin.time.ExperimentalTime")
|
optIn("kotlin.time.ExperimentalTime")
|
||||||
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
|
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
|
||||||
|
optIn("kotlin.js.ExperimentalJsExport")
|
||||||
// progressiveMode = true // false by default
|
// progressiveMode = true // false by default
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -137,3 +138,62 @@ kotlin {
|
||||||
//</editor-fold>
|
//</editor-fold>
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//rootProject.tasks.withType<RootPackageJsonTask>().configureEach {
|
||||||
|
//}
|
||||||
|
|
||||||
|
val rootPackageJson by rootProject.tasks.getting(RootPackageJsonTask::class)
|
||||||
|
val nodePath: Directory by extra {
|
||||||
|
val file = rootPackageJson.rootPackageJson.parentFile.normalize()
|
||||||
|
logger.lifecycle("Kotlin/JS NODE_PATH: $file")
|
||||||
|
project.layout.dir(provider { file }).get()
|
||||||
|
}
|
||||||
|
|
||||||
|
val nodeModulesDir: Directory by extra {
|
||||||
|
val file = nodePath.dir(NpmProject.NODE_MODULES)
|
||||||
|
logger.lifecycle("Kotlin/JS NODE_MODULES: $file")
|
||||||
|
file
|
||||||
|
}
|
||||||
|
|
||||||
|
// build/js/node_modules/ts-proto/node_modules/.bin
|
||||||
|
|
||||||
|
tasks.protobufCompile {
|
||||||
|
description = "proto2java"
|
||||||
|
protoFile.set(layout.projectDirectory.file("src/proto/FactorioServerLogRecord.proto"))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tasks.create<ProtobufCompileTask>("protobufTypescript") {
|
||||||
|
description = "proto2typescript"
|
||||||
|
|
||||||
|
// data class PluginTs(
|
||||||
|
// override val cliParam: String = "--plugin",
|
||||||
|
// override val protocOptions: String = "",
|
||||||
|
// override val outputDirectoryName: String =
|
||||||
|
// "${project.buildDir}/js/packages/factorio-web-map-factorio-events-data-model/node_modules/.bin/protoc-gen-ts_proto.cmd",
|
||||||
|
// ) : ProtocOutput
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// data class OutputTs(
|
||||||
|
// override val cliParam: String = "--ts_proto_out",
|
||||||
|
// override val protocOptions: String = "",
|
||||||
|
// override val outputDirectoryName: String = "${project.buildDir}/pbAndG/generated-sources/typescript",
|
||||||
|
// ) : ProtocOutput
|
||||||
|
//
|
||||||
|
// protocOutputs.add(PluginTs())
|
||||||
|
// protocOutputs.add(OutputTs())
|
||||||
|
|
||||||
|
|
||||||
|
// cliArgs.add("--plugin=${rootProject.buildDir}/js/packages/factorio-web-map-factorio-events-data-model/node_modules/.bin/protoc-gen-ts_proto.cmd")
|
||||||
|
|
||||||
|
cliArgs.add("--plugin=protoc-gen-ts_proto=${rootProject.buildDir}/js/packages/factorio-web-map-factorio-events-data-model/node_modules/.bin/protoc-gen-ts_proto.cmd")
|
||||||
|
|
||||||
|
val outdir = temporaryDir.resolve("typescript")
|
||||||
|
val f: File = project.mkdir(outdir)
|
||||||
|
|
||||||
|
cliArgs.add("--ts_proto_out=${outdir.canonicalPath}")
|
||||||
|
cliArgs.add("--ts_proto_opt=useOptionals=true")
|
||||||
|
// cliArgs.add("--proto_path=${rootProject.rootDir}")
|
||||||
|
|
||||||
|
protoFile.set(layout.projectDirectory.file("src/proto/FactorioServerLogRecord.proto"))
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ rootProject.name = "factorio-web-map"
|
||||||
include(
|
include(
|
||||||
":modules:mod",
|
":modules:mod",
|
||||||
// ":modules:mod2",
|
// ":modules:mod2",
|
||||||
":modules:server",
|
// ":modules:server",
|
||||||
":modules:kt-rcon",
|
":modules:kt-rcon",
|
||||||
":modules:factorio-events-data-model",
|
":modules:factorio-events-data-model",
|
||||||
// ":modules:factorio-events-data-model2",
|
// ":modules:factorio-events-data-model2",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue