diff --git a/settings.gradle.kts b/settings.gradle.kts index 60ccc99..dfcdffe 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,7 +1,8 @@ @file:Suppress("UnstableApiUsage") include(":worker-core") -include(":worker-serialization") +include(":worker-serialization-json") +include(":worker-serialization-protobuf") include(":worker-gradle-plugin") pluginManagement { diff --git a/worker-core/build.gradle.kts b/worker-core/build.gradle.kts index 259db7f..ad4fb53 100644 --- a/worker-core/build.gradle.kts +++ b/worker-core/build.gradle.kts @@ -9,7 +9,7 @@ kotlin { sourceSets { jsMain.dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") } commonTest.dependencies { diff --git a/worker-serialization-json/build.gradle.kts b/worker-serialization-json/build.gradle.kts new file mode 100644 index 0000000..103a12d --- /dev/null +++ b/worker-serialization-json/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + kotlin("multiplatform") + kotlin("plugin.serialization") +} + +kotlin { + explicitApi() + + js(IR) { + nodejs { binaries.executable() } + } + + sourceSets { + jsMain.dependencies { + api("org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1") + api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1") + } + } +} \ No newline at end of file diff --git a/worker-serialization-json/src/jsMain/kotlin/cn/rtast/cfworker/serialization/json/json.kt b/worker-serialization-json/src/jsMain/kotlin/cn/rtast/cfworker/serialization/json/json.kt new file mode 100644 index 0000000..34f406d --- /dev/null +++ b/worker-serialization-json/src/jsMain/kotlin/cn/rtast/cfworker/serialization/json/json.kt @@ -0,0 +1,31 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/1/17 + */ + + +@file:OptIn(ExperimentalSerializationApi::class) + +package cn.rtast.cfworker.serialization.json + +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.json.Json + +public val json: Json = Json { + ignoreUnknownKeys = true + explicitNulls = false + classDiscriminator = "_json_type_" + encodeDefaults = true + coerceInputValues = true + decodeEnumsCaseInsensitive = true + isLenient = true +} + +public inline fun T.toJson(): String { + return json.encodeToString(this) +} + +public inline fun String.fromJson(): T { + return json.decodeFromString(this) +} \ No newline at end of file diff --git a/worker-serialization-protobuf/build.gradle.kts b/worker-serialization-protobuf/build.gradle.kts new file mode 100644 index 0000000..7665ab4 --- /dev/null +++ b/worker-serialization-protobuf/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + kotlin("multiplatform") + kotlin("plugin.serialization") +} + +kotlin { + explicitApi() + + js(IR) { + nodejs { binaries.executable() } + } + + sourceSets { + jsMain.dependencies { + api("org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1") + api("org.jetbrains.kotlinx:kotlinx-serialization-protobuf:1.8.1") + } + } +} \ No newline at end of file diff --git a/worker-serialization-protobuf/src/jsMain/kotlin/cn/rtast/cfworker/serialization/protobuf/protobuf.kt b/worker-serialization-protobuf/src/jsMain/kotlin/cn/rtast/cfworker/serialization/protobuf/protobuf.kt new file mode 100644 index 0000000..21e61c9 --- /dev/null +++ b/worker-serialization-protobuf/src/jsMain/kotlin/cn/rtast/cfworker/serialization/protobuf/protobuf.kt @@ -0,0 +1,23 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/1/17 + */ + + +@file:OptIn(ExperimentalSerializationApi::class) + +package cn.rtast.cfworker.serialization.protobuf + +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.decodeFromByteArray +import kotlinx.serialization.encodeToByteArray +import kotlinx.serialization.protobuf.ProtoBuf + +public inline fun ByteArray.fromProtobuf(): T { + return ProtoBuf.decodeFromByteArray(this) +} + +public inline fun T.toProtobuf(): ByteArray { + return ProtoBuf.encodeToByteArray(this) +} \ No newline at end of file diff --git a/worker-serialization/build.gradle.kts b/worker-serialization/build.gradle.kts deleted file mode 100644 index d7213d7..0000000 --- a/worker-serialization/build.gradle.kts +++ /dev/null @@ -1,10 +0,0 @@ -plugins { - kotlin("multiplatform") - kotlin("plugin.serialization") -} - -kotlin { - js(IR) { - nodejs { binaries.executable() } - } -} \ No newline at end of file