get a shared kotlin-typescript data model working

This commit is contained in:
Adam 2021-11-27 17:57:50 +01:00
parent d6a9a58dc9
commit 0d85bfca60
10 changed files with 173 additions and 178 deletions

View file

@ -1,56 +0,0 @@
package dev.adamko.factorioevents.model
import kotlin.js.ExperimentalJsExport
import kotlin.js.JsExport
//
//@JsExport
//@ExperimentalJsExport
//data class FactorioEvent(
// val modVersion: String,
// val tick: F_uint,
// val eventType: String,
// val data: FactorioObjectData,
//)
//
//@JsExport
//abstract class FactorioObjectData {
// abstract val objectName: String
//}
//
//@JsExport
//data class PlayerData(
// override val objectName: String,
// val name: String,
// val characterUnitNumber: F_uint,
// val associatedCharactersUnitNumbers: List<F_uint>,
// val position: PositionData,
//) : FactorioObjectData()
//
//
//@JsExport
//data class PositionData(
// val x: F_int,
// val y: F_int,
//)
//
//
//
//typealias F_float = Float
//typealias F_double = Double
//typealias F_int = Int
//typealias F_int8 = Byte
//
//
////@JsExport
////@ExperimentalJsExport
//typealias F_uint = UInt
////expect class F_uint
//
////expect value class F_uint internal constructor(internal val data: Int)
//expect value class F_uint8 internal constructor(internal val data: Int)
//expect value class F_uint16 internal constructor(internal val data: Int)
//expect value class F_uint64 internal constructor(internal val data: Int)
//
//typealias F_table = Any?
//

View file

@ -1,13 +0,0 @@
package dev.adamko.factorioevents.model
import kotlin.js.*
//
//@JsModule("typed-factorio")
//external class uint
//
//actual typealias F_uint = uint
//actual typealias F_uint8 = UByte
//actual typealias F_uint16 = UShort
//actual typealias F_uint64 = ULong
//

View file

@ -7,8 +7,11 @@ import kotlinx.serialization.json.JsonClassDiscriminator
@Serializable
data class FactorioEvent(
/** Schema versioning */
val modVersion: String,
/** game time */
val tick: UInt,
/** the initial Factorio event ({defines.events}) trigger */
val eventType: String,
val data: FactorioObjectData,
)
@ -33,10 +36,10 @@ data class EntityData(
val active: Boolean,
val healthRatio: Float,
val health: Float?,
val surface_index: Int,
val unit_number: UInt?,
val surfaceIndex: Int,
val unitNumber: UInt?,
val position: PositionData,
val player_index: UInt?,
val playerIndex: UInt?,
) : FactorioObjectData
data class SurfaceData(

View file

@ -1,13 +1,14 @@
package dev.adamko.factorioevents.model
import java.io.File
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
import me.ntrrgc.tsGenerator.ClassTransformer
import me.ntrrgc.tsGenerator.TypeScriptGenerator
import me.ntrrgc.tsGenerator.camelCaseToSnakeCase
import org.intellij.lang.annotations.Language
fun main() {
fun main(args: Array<String>) {
val gen =
TypeScriptGenerator(
@ -32,9 +33,32 @@ fun main() {
)
)
println(gen.definitionsText)
val definitions = gen.definitionsText
when (val filename = args.firstOrNull()) {
null -> {
println(definitions)
}
else -> {
val out = File(filename)
out.parentFile.mkdirs()
out.printWriter().use {
it.print(header)
it.print(definitions)
}
println("Generated file: $out")
}
}
}
@Language("TypeScript")
val header = """
// Generated code - do edit this file manually
""".trimIndent()
object PropertyNameTransformer : ClassTransformer {
override fun transformPropertyName(
propertyName: String,