Add verified Ktor-backed networking modules to lyngio

This commit is contained in:
sergeych committed 2026-04-02 16:19:14 +03:00
1 parent f168e9f6ed
commit d409a4bb8b
35 files changed
+4025 -23

No files matched your search

+26 -13
View File
@@ -80,6 +80,9 @@ kotlin {
api(libs.okio)
api(libs.kotlinx.coroutines.core)
api(libs.mordant.core)
api(libs.ktor.client.core)
implementation(libs.ktor.client.cio)
implementation(libs.ktor.client.websockets)
}
}
val nativeMain by creating {
@@ -123,6 +126,7 @@ kotlin {
implementation(libs.mordant.jvm.jna)
implementation("org.jline:jline-reader:3.29.0")
implementation("org.jline:jline-terminal:3.29.0")
implementation(libs.ktor.network)
}
}
// // For Wasm we use in-memory VFS for now
@@ -135,10 +139,10 @@ kotlin {
}
}
abstract class GenerateLyngioConsoleDecls : DefaultTask() {
@get:InputFile
abstract class GenerateLyngioDecls : DefaultTask() {
@get:InputDirectory
@get:PathSensitive(PathSensitivity.RELATIVE)
abstract val sourceFile: RegularFileProperty
abstract val sourceDir: DirectoryProperty
@get:OutputDirectory
abstract val outputDir: DirectoryProperty
@@ -148,9 +152,9 @@ abstract class GenerateLyngioConsoleDecls : DefaultTask() {
val targetPkg = "net.sergeych.lyngio.stdlib_included"
val pkgPath = targetPkg.replace('.', '/')
val targetDir = outputDir.get().asFile.resolve(pkgPath)
if (targetDir.exists()) targetDir.deleteRecursively()
targetDir.mkdirs()
val text = sourceFile.get().asFile.readText()
fun escapeForQuoted(s: String): String = buildString {
for (ch in s) when (ch) {
'\\' -> append("\\\\")
@@ -165,30 +169,39 @@ abstract class GenerateLyngioConsoleDecls : DefaultTask() {
val out = buildString {
append("package ").append(targetPkg).append("\n\n")
append("@Suppress(\"Unused\", \"MemberVisibilityCanBePrivate\")\n")
append("internal val consoleLyng = \"")
append(escapeForQuoted(text))
append("\"\n")
sourceDir.get().asFile
.listFiles { file -> file.isFile && file.extension == "lyng" }
?.sortedBy { it.name }
?.forEach { file ->
val propertyName = buildString {
append(file.nameWithoutExtension)
append("Lyng")
}
append("internal val ").append(propertyName).append(" = \"")
append(escapeForQuoted(file.readText()))
append("\"\n")
}
}
targetDir.resolve("console_types_lyng.generated.kt").writeText(out)
targetDir.resolve("lyngio_types_lyng.generated.kt").writeText(out)
}
}
val lyngioConsoleDeclsFile = layout.projectDirectory.file("stdlib/lyng/io/console.lyng")
val lyngioDeclsDir = layout.projectDirectory.dir("stdlib/lyng/io")
val generatedLyngioDeclsDir = layout.buildDirectory.dir("generated/source/lyngioDecls/commonMain/kotlin")
val generateLyngioConsoleDecls by tasks.registering(GenerateLyngioConsoleDecls::class) {
sourceFile.set(lyngioConsoleDeclsFile)
val generateLyngioDecls by tasks.registering(GenerateLyngioDecls::class) {
sourceDir.set(lyngioDeclsDir)
outputDir.set(generatedLyngioDeclsDir)
}
kotlin.sourceSets.named("commonMain") {
kotlin.srcDir(generateLyngioConsoleDecls)
kotlin.srcDir(generateLyngioDecls)
}
kotlin.targets.configureEach {
compilations.configureEach {
compileTaskProvider.configure {
dependsOn(generateLyngioConsoleDecls)
dependsOn(generateLyngioDecls)
}
}
}