Skip to content

Commit 3dad302

Browse files
committed
feat: complete multiplatform support
1 parent fa5d846 commit 3dad302

File tree

11 files changed

+77
-60
lines changed

11 files changed

+77
-60
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
kotlin multiplatform json5 for [kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization)
77

8-
supports: jvm, Android, linux, Windows, macOS, iOS, watchOS, tvOS
8+
complete multiplatform support: jvm/js/native
99

1010
## Usage
1111

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
kotlin = "2.2.20"
2+
kotlin = "2.2.21"
33

44
[libraries]
55
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }

json5/build.gradle.kts

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,68 @@
1+
@file:OptIn(ExperimentalWasmDsl::class)
2+
3+
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
14
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
25
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
6+
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
7+
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions
38

49
plugins {
510
alias(libs.plugins.kotlin.multiplatform)
611
alias(libs.plugins.kotlin.serialization)
712
alias(libs.plugins.maven.publish)
813
}
914

10-
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
11-
compilerOptions {
15+
val versionConfigure: KotlinCommonCompilerOptions.() -> Unit = {
16+
languageVersion = KotlinVersion.KOTLIN_2_0
17+
apiVersion = KotlinVersion.KOTLIN_2_0
18+
if (this is KotlinJvmCompilerOptions) {
1219
jvmTarget = JvmTarget.JVM_11
13-
languageVersion = KotlinVersion.KOTLIN_2_0
14-
apiVersion = KotlinVersion.KOTLIN_2_0
1520
}
1621
}
1722

18-
kotlin {
19-
jvm {
20-
compilerOptions {
21-
jvmTarget = JvmTarget.JVM_11
22-
languageVersion = KotlinVersion.KOTLIN_2_0
23-
apiVersion = KotlinVersion.KOTLIN_2_0
24-
}
25-
}
23+
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
24+
compilerOptions(versionConfigure)
25+
}
2626

27-
// Kotlin/Native - Linux
28-
linuxX64()
29-
linuxArm64()
27+
kotlin {
28+
explicitApi()
29+
applyDefaultHierarchyTemplate()
30+
compilerOptions(versionConfigure)
3031

31-
// Kotlin/Native - Windows
32-
mingwX64()
32+
androidNativeArm64()
33+
androidNativeX64()
3334

34-
// Kotlin/Native - Apple
3535
iosArm64()
3636
iosSimulatorArm64()
3737
iosX64()
38+
39+
js().nodejs()
40+
41+
jvm { compilerOptions(versionConfigure) }
42+
43+
linuxArm64()
44+
linuxX64()
45+
3846
macosArm64()
3947
macosX64()
48+
49+
mingwX64()
50+
4051
tvosArm64()
4152
tvosSimulatorArm64()
4253
tvosX64()
54+
55+
wasmJs().nodejs()
56+
wasmWasi().nodejs()
57+
4358
watchosArm64()
59+
watchosDeviceArm64()
60+
watchosSimulatorArm64()
4461
watchosX64()
4562

4663
sourceSets {
4764
commonMain {
48-
compilerOptions {
49-
languageVersion = KotlinVersion.KOTLIN_2_0
50-
apiVersion = KotlinVersion.KOTLIN_2_0
51-
}
65+
compilerOptions(versionConfigure)
5266
dependencies {
5367
api(libs.kotlinx.serialization.json)
5468
}
@@ -62,10 +76,11 @@ kotlin {
6276
}
6377
}
6478

65-
// tip: it will take about 1 hour after GitHub Actions finished
6679
mavenPublishing {
67-
publishToMavenCentral()
68-
signAllPublications()
80+
if (properties.contains("signing.keyId")) {
81+
publishToMavenCentral()
82+
signAllPublications()
83+
}
6984
coordinates("li.songe", "json5", "0.4.1")
7085

7186
val repoUrl = "https://github.com/lisonge/kotlin-json5"

json5/src/commonMain/kotlin/li/songe/json5/Json5.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,25 @@ package li.songe.json5
22

33
import kotlinx.serialization.json.JsonElement
44

5-
object Json5 {
6-
fun parseToJson5Element(input: CharSequence): JsonElement {
5+
public object Json5 {
6+
public fun parseToJson5Element(input: CharSequence): JsonElement {
77
return Json5Decoder(input).read()
88
}
99

10-
fun encodeToString(
10+
public fun encodeToString(
1111
element: JsonElement,
12-
config: Json5EncoderConfig = Json5EncoderConfig(),
12+
config: Json5EncoderConfig = encoderConfig,
1313
): String {
1414
return innerEncodeToString(element, config)
1515
}
1616

17-
fun parseToJson5ElementAndRanges(input: CharSequence): Pair<JsonElement, List<Json5Range>> {
17+
public fun parseToJson5ElementAndRanges(input: CharSequence): Pair<JsonElement, List<Json5Range>> {
1818
return Json5Decoder(input).readElementAndRange()
1919
}
2020

21-
fun parseToJson5LooseRanges(input: CharSequence): List<Json5LooseRange> {
21+
public fun parseToJson5LooseRanges(input: CharSequence): List<Json5LooseRange> {
2222
return Json5LooseDecoder(input).read()
2323
}
24+
25+
public val encoderConfig: Json5EncoderConfig = Json5EncoderConfig()
2426
}

json5/src/commonMain/kotlin/li/songe/json5/Json5EncoderConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package li.songe.json5
22

3-
data class Json5EncoderConfig(
3+
public data class Json5EncoderConfig(
44
val indent: String = "",
55
val quoteStrategy: Json5QuoteStrategy = Json5QuoteStrategy.Single,
66
val unquotedKey: Boolean = true,

json5/src/commonMain/kotlin/li/songe/json5/Json5LooseRange.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package li.songe.json5
22

3-
data class Json5LooseRange(
3+
public data class Json5LooseRange(
44
val start: Int,
55
val end: Int,
66
val token: Json5Token?,

json5/src/commonMain/kotlin/li/songe/json5/Json5Number.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package li.songe.json5
22

33
// just for keep raw number format
4-
class Json5Number(
5-
val value: String,
4+
public class Json5Number(
5+
public val value: String,
66
) : Number() {
77
override fun toString(): String {
88
return value

json5/src/commonMain/kotlin/li/songe/json5/Json5Range.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package li.songe.json5
22

3-
data class Json5Range(
3+
public data class Json5Range(
44
val start: Int,
55
val end: Int,
66
val token: Json5Token,
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
package li.songe.json5
22

3-
sealed class Json5Token {
4-
data object Comment : Json5Token()
5-
data object Whitespace : Json5Token()
3+
public sealed class Json5Token {
4+
public data object Comment : Json5Token()
5+
public data object Whitespace : Json5Token()
66

7-
sealed class FixedChar : Json5Token()
8-
sealed class Bracket : FixedChar()
9-
data object LeftBracket : Bracket()
10-
data object RightBracket : Bracket()
11-
sealed class Brace : FixedChar()
12-
data object LeftBrace : Brace()
13-
data object RightBrace : Brace()
14-
data object Comma : FixedChar()
15-
data object Colon : FixedChar()
7+
public sealed class FixedChar : Json5Token()
8+
public sealed class Bracket : FixedChar()
9+
public data object LeftBracket : Bracket()
10+
public data object RightBracket : Bracket()
11+
public sealed class Brace : FixedChar()
12+
public data object LeftBrace : Brace()
13+
public data object RightBrace : Brace()
14+
public data object Comma : FixedChar()
15+
public data object Colon : FixedChar()
1616

17-
sealed class Literal : Json5Token()
18-
data object NullLiteral : Literal()
19-
data object BooleanLiteral : Literal()
20-
data object NumberLiteral : Literal()
21-
data object StringLiteral : Literal()
17+
public sealed class Literal : Json5Token()
18+
public data object NullLiteral : Literal()
19+
public data object BooleanLiteral : Literal()
20+
public data object NumberLiteral : Literal()
21+
public data object StringLiteral : Literal()
2222

23-
data object Property : Json5Token()
23+
public data object Property : Json5Token()
2424
}

json5/src/commonMain/kotlin/li/songe/json5/JsonExt.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import kotlinx.serialization.json.Json
66
import kotlinx.serialization.json.decodeFromJsonElement
77
import kotlinx.serialization.serializer
88

9-
inline fun <reified T> Json.encodeToJson5String(
9+
public inline fun <reified T> Json.encodeToJson5String(
1010
value: T,
11-
config: Json5EncoderConfig = Json5EncoderConfig(),
11+
config: Json5EncoderConfig = Json5.encoderConfig,
1212
): String {
1313
return Json5.encodeToString(
1414
encodeToJsonElement(serializersModule.serializer(), value),
1515
config
1616
)
1717
}
1818

19-
inline fun <reified T> Json.decodeFromJson5String(value: CharSequence): T {
19+
public inline fun <reified T> Json.decodeFromJson5String(value: CharSequence): T {
2020
return decodeFromJsonElement<T>(Json5.parseToJson5Element(value))
2121
}

0 commit comments

Comments
 (0)