From 8e94a20a792e9f4cedefbc7c32f502c0443ccc32 Mon Sep 17 00:00:00 2001 From: Adam <897017+asemy@users.noreply.github.com> Date: Fri, 22 Oct 2021 18:17:48 +0200 Subject: [PATCH] rename data model, and experiment with K-mmp classes --- modules/data-model/build.gradle.kts | 8 --- .../build.gradle.kts | 46 ++++++++++++++ .../FactorioEvent.kt | 63 +++++++++++++++++++ .../JsonPrimitiveType.kt | 31 +++++++++ .../factorioevents/model/JsonPrimitiveType.kt | 27 ++++++++ .../src/main/kotlin/PlayerModel.kt | 0 6 files changed, 167 insertions(+), 8 deletions(-) delete mode 100644 modules/data-model/build.gradle.kts create mode 100644 modules/factorio-events-data-model/build.gradle.kts create mode 100644 modules/factorio-events-data-model/src/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt create mode 100644 modules/factorio-events-data-model/src/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt create mode 100644 modules/factorio-events-data-model/src/jvmMain/kotlin/dev/adamko/factorioevents/model/JsonPrimitiveType.kt rename modules/{data-model => factorio-events-data-model}/src/main/kotlin/PlayerModel.kt (100%) diff --git a/modules/data-model/build.gradle.kts b/modules/data-model/build.gradle.kts deleted file mode 100644 index 8a701aa..0000000 --- a/modules/data-model/build.gradle.kts +++ /dev/null @@ -1,8 +0,0 @@ -plugins { - id("dev.adamko.factoriowebmap.archetype.kotlin-js") -} - -val projectId: String by project.extra -val buildDir: Directory = layout.buildDirectory.dir(projectId).get() -val nodeModulesDir: Directory by project.extra - diff --git a/modules/factorio-events-data-model/build.gradle.kts b/modules/factorio-events-data-model/build.gradle.kts new file mode 100644 index 0000000..26f24fc --- /dev/null +++ b/modules/factorio-events-data-model/build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id("dev.adamko.factoriowebmap.archetype.base") + kotlin("multiplatform") +} + +val projectId: String by project.extra +val buildDir: Directory = layout.buildDirectory.dir(projectId).get() +val nodeModulesDir: Directory by project.extra + +kotlin { + + js(IR) { + binaries.executable() +// browser { +// commonWebpackConfig { +// cssSupport.enabled = true +// } +// } + + nodejs() + useCommonJs() + + compilations["main"].apply { + packageJson { + customField( + "scripts", + mapOf( + "build" to "tstl", + "dev" to "tstl --watch", + ) + ) + } + } + + } + + jvm { + compilations.all { + kotlinOptions.jvmTarget = "11" + } + testRuns["test"].executionTask.configure { + useJUnitPlatform() + } + } + +} diff --git a/modules/factorio-events-data-model/src/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt b/modules/factorio-events-data-model/src/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt new file mode 100644 index 0000000..058d02d --- /dev/null +++ b/modules/factorio-events-data-model/src/commonMain/kotlin/dev.adamko.factorioevents.model/FactorioEvent.kt @@ -0,0 +1,63 @@ +package dev.adamko.factorioevents.model + +import kotlin.js.JsExport +import kotlin.jvm.JvmInline + +//expect sealed interface JsonPrimitive { +// value class JsonString(val string: String) : JsonPrimitive +// value class JsonNumber(val number: Number) : JsonPrimitive +// value class JsonBoolean(val boolean: Boolean) : JsonPrimitive +//} + +sealed interface JsonPrimitive { + @JvmInline + value class JsonString(val string: String) : JsonPrimitive + @JvmInline + value class JsonNumber(val number: Number) : JsonPrimitive + @JvmInline + value class JsonBoolean(val boolean: Boolean) : JsonPrimitive +} + +class JsonArray( + private val list: MutableList = mutableListOf() +) : MutableList by list + + +sealed interface JsonTableValue { + @JvmInline + value class JsonPrimitiveTV(val primitive: JsonPrimitive) : JsonTableValue + @JvmInline + value class JsonArrayTV(val array: JsonArray) : JsonTableValue + @JvmInline + value class JsonTableTV(val array: JsonTable) : JsonTableValue +} + +//expect class JsonNumber() : JsonPrimitiveType + +//expect class JsonArray + +//expect open class JsonTable + +open class JsonTable( + protected val map: MutableMap = mutableMapOf() +) : MutableMap by map { + + inline fun get2(key: String): T? { + + val jKey = JsonPrimitive.JsonString(key) + + return when { + T::class is Number -> ((get(jKey) as? JsonTableValue.JsonPrimitiveTV)?.primitive as? JsonPrimitive.JsonNumber)?.number as? T + else -> return get(jKey) as? T + } + + } + +} + +//@JsExport +class FactorioEvent : JsonTable() { + val tick: UInt? + get() = get2("tick") +// set(value) = map.put("tick", value) +} \ No newline at end of file diff --git a/modules/factorio-events-data-model/src/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt b/modules/factorio-events-data-model/src/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt new file mode 100644 index 0000000..06519b0 --- /dev/null +++ b/modules/factorio-events-data-model/src/jsMain/kotlin/dev.adamko.factorioevents.model/JsonPrimitiveType.kt @@ -0,0 +1,31 @@ +package dev.adamko.factorioevents.model + + +//actual sealed interface JsonPrimitive { +// actual value class JsonString(val string: String) : JsonPrimitive +// actual value class JsonNumber(val number: Number) : JsonPrimitive +// actual value class JsonBoolean(val boolean: Boolean) : JsonPrimitive +//} + +//actual class JsonArray( +// private val list: MutableList = mutableListOf() +//) : MutableList by list + +//actual sealed interface JsonTableValue { +// actual value class JsonPrimitiveTV(val primitive: JsonPrimitive) : JsonTableValue +// actual value class JsonArrayTV(val array: JsonArray) : JsonTableValue +//} + + +//actual open class JsonTable( +// private val map: MutableMap = mutableMapOf() +//) : MutableMap by map + + +fun printMap() { + val f = JsonPrimitive.JsonString("test") + + println(f.string) + println(f) + +} diff --git a/modules/factorio-events-data-model/src/jvmMain/kotlin/dev/adamko/factorioevents/model/JsonPrimitiveType.kt b/modules/factorio-events-data-model/src/jvmMain/kotlin/dev/adamko/factorioevents/model/JsonPrimitiveType.kt new file mode 100644 index 0000000..013584a --- /dev/null +++ b/modules/factorio-events-data-model/src/jvmMain/kotlin/dev/adamko/factorioevents/model/JsonPrimitiveType.kt @@ -0,0 +1,27 @@ +package dev.adamko.factorioevents.model + + +//actual sealed interface JsonPrimitive { +// @JvmInline +// actual value class JsonString(val string: String) : JsonPrimitive +// @JvmInline +// actual value class JsonNumber(val number: Number) : JsonPrimitive +// @JvmInline +// actual value class JsonBoolean(val boolean: Boolean) : JsonPrimitive +//} + +//actual class JsonArray( +// private val list: MutableList = mutableListOf() +//) : MutableList by list + +//actual sealed interface JsonTableValue { +// @JvmInline +// actual value class JsonPrimitiveTV(val primitive: JsonPrimitive) : JsonTableValue +// @JvmInline +// actual value class JsonArrayTV(val array: JsonArray) : JsonTableValue +//} + +//actual open class JsonTable( +// private val map: MutableMap = mutableMapOf() +//) : MutableMap by map + diff --git a/modules/data-model/src/main/kotlin/PlayerModel.kt b/modules/factorio-events-data-model/src/main/kotlin/PlayerModel.kt similarity index 100% rename from modules/data-model/src/main/kotlin/PlayerModel.kt rename to modules/factorio-events-data-model/src/main/kotlin/PlayerModel.kt