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 { id("dev.adamko.factoriowebmap.archetype.base") kotlin("multiplatform") // id("dev.adamko.factoriowebmap.archetype.kotlin-jvm") id("dev.adamko.gradle.pbandg.pb-and-g") } val projectId: String by project.extra 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") } 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") optIn("kotlin.js.ExperimentalJsExport") // 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")) } } } // } //rootProject.tasks.withType().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("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")) }