From 464d4c28fbb17aa7f5fb5536015e7602e7221d57 Mon Sep 17 00:00:00 2001 From: Adam <897017+asemy@users.noreply.github.com> Date: Wed, 3 Nov 2021 12:08:07 +0100 Subject: [PATCH] tasks to move generated ts files to mod project --- .../adamko/gradle/pbandg/pb-and-g.gradle.kts | 4 +- .../build.gradle.kts | 33 ++++++- modules/mod/build.gradle.kts | 62 +++++++++++++- .../proto/FactorioServerLogRecord.ts | 85 +++++++++++++++++++ 4 files changed, 177 insertions(+), 7 deletions(-) create mode 100644 modules/mod/src/main/typescript/proto/FactorioServerLogRecord.ts 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 a19e654..5735a4b 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 @@ -74,11 +74,11 @@ project.tasks.withType { val aggregateTask = project.tasks.register("protobufCompileAll") { group = Constants.PBG_TASK_GROUP - dependsOn(tasks.withType()) + val pbCompileTasks = tasks.withType() + dependsOn(pbCompileTasks) val genSrcDir = project.layout.pbAndGBuildDir.map { it.dir("generated-sources") } - val pbCompileTasks = tasks.withType() from(pbCompileTasks.map { it.temporaryDir }) into(genSrcDir) includeEmptyDirs = false diff --git a/modules/factorio-events-data-model/build.gradle.kts b/modules/factorio-events-data-model/build.gradle.kts index c1122f5..0b363db 100644 --- a/modules/factorio-events-data-model/build.gradle.kts +++ b/modules/factorio-events-data-model/build.gradle.kts @@ -88,21 +88,35 @@ val nodeModulesDir: Directory by extra { } afterEvaluate { - tasks.register("protobufJava") { + val protobufJava by tasks.creating(ProtobufCompileTask::class) { description = "proto2java" protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto")) cliArgs.add("--java_out=lite:${project.mkdir("$temporaryDir/java").canonicalPath}") } - - tasks.register("protobufKotlin") { + val protobufKotlin by tasks.creating(ProtobufCompileTask::class) { description = "proto2kotlin" protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto")) cliArgs.add("--kotlin_out=lite:${project.mkdir("$temporaryDir/kotlin").canonicalPath}") } - tasks.register("protobufTypescript") { + + val ktProto by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true + } + + artifacts { + add(ktProto.name, protobufJava.outputDir) { + builtBy(protobufJava) + } + add(ktProto.name, protobufKotlin.outputDir) { + builtBy(protobufKotlin) + } + } + + val protobufTypescript by tasks.creating(ProtobufCompileTask::class) { description = "proto2typescript" // linux: @@ -126,4 +140,15 @@ afterEvaluate { protoFile.set(file("$projectDir/src/proto/FactorioServerLogRecord.proto")) } + + val tsProto by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true + } + artifacts { + add(tsProto.name, protobufTypescript.outputDir) { + builtBy(protobufTypescript) + } + } + } diff --git a/modules/mod/build.gradle.kts b/modules/mod/build.gradle.kts index 70dd20c..aa0a501 100644 --- a/modules/mod/build.gradle.kts +++ b/modules/mod/build.gradle.kts @@ -1,6 +1,6 @@ import com.github.gradle.node.npm.task.NpmTask -import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs import org.apache.tools.ant.filters.ReplaceTokens +import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs plugins { id("dev.adamko.factoriowebmap.archetype.node") @@ -16,6 +16,66 @@ node { nodeProjectDir.set(tsSrcDir) } +val tsProto: Configuration by configurations.creating { + isCanBeConsumed = false + isCanBeResolved = true +} + +dependencies { + tsProto(projects.modules.factorioEventsDataModel.dependencyProject.configurations.getByName("tsProto")) +} + +val tsProtoFetch by tasks.creating(Sync::class) { + group = project.name + + dependsOn(projects.modules.factorioEventsDataModel.dependencyProject.tasks.named("protobufTypescript")) + + val genSrcDir = projects + .modules + .factorioEventsDataModel + .dependencyProject + .layout + .buildDirectory + .dir("pbAndG/generated-sources/typescript") + + val targetDir = "$projectDir/src/main/typescript/proto" + + inputs.dir(genSrcDir) + + from(genSrcDir) + into(targetDir) + + doLast { + + fileTree(targetDir).forEach { + var text = it.readText() + + text = text.replace( + Regex( + """if \(_m0\.util\.Long !== Long\)\s*\{\s*_m0\.util\.Long = Long as any;\s*_m0\.configure\(\);\s*\}""" + ), + "" + ) + + text = text.replace( + Regex("""import Long from "long";"""), + "" + ) + + text = text.replace( + Regex("""import _m0 from "protobufjs\/minimal";"""), + "" + ) + + it.writeText(text) + } + } + +} + +tasks.assemble { dependsOn(tsProtoFetch) } + + val tstlTask = tasks.register("typescriptToLua") { description = "Convert Typescript To Lua" group = projectId diff --git a/modules/mod/src/main/typescript/proto/FactorioServerLogRecord.ts b/modules/mod/src/main/typescript/proto/FactorioServerLogRecord.ts new file mode 100644 index 0000000..c305e96 --- /dev/null +++ b/modules/mod/src/main/typescript/proto/FactorioServerLogRecord.ts @@ -0,0 +1,85 @@ +/* eslint-disable */ + + + +export interface FactorioServerLogRecord { + modVersion: string; + tick: number; + eventType: string; + data?: FactorioLuaObject; +} + +export interface FactorioLuaObject { + objectName: string; + luaControl?: LuaControl | undefined; +} + +/** https://lua-api.factorio.com/next/LuaControl.html */ +export interface LuaControl { + isPlayer: boolean; + surfaceIndex: number; + position?: Position; + forceIndex: number; + player?: LuaPlayer | undefined; + entity?: LuaEntity | undefined; +} + +/** https://lua-api.factorio.com/next/LuaPlayer.html */ +export interface LuaPlayer { + /** unique ID */ + index: number; + name: string; + data: number[]; + colour?: Colour; + isConnected: boolean; + isAdmin: boolean; + afkTimeTicks: number; + onlineTimeTicks: number; + lastOnlineTicks: number; +} + +/** https://lua-api.factorio.com/next/LuaEntity.html */ +export interface LuaEntity { + /** (optional) unique ID */ + unitNumber?: number | undefined; + name: string; + type: string; + /** https://lua-api.factorio.com/next/defines.html#defines.entity_status */ + status: string; + isActive: boolean; + isMoving: boolean; + /** (optional) The player connected to this character or nil if none. */ + playerIndex?: number | undefined; + /** (optional) The last player that changed any setting on this entity. */ + lastUserIndex?: number | undefined; + /** (optional) */ + colour?: Colour; +} + +export interface LuaSurface { + /** unique ID */ + index: number; + name: string; + daytime: number; +} + +export interface LuaForce { + /** unique ID */ + index: number; + forceName: string; + playerIds: number[]; +} + +export interface Position { + x: number; + y: number; +} + +export interface Colour { + red: number; + green: number; + blue: number; + alpha: number; +} + +