From 4190998a84261d40fb58e861d24297d5f6e47a6b Mon Sep 17 00:00:00 2001 From: Jan Tiedemann Date: Thu, 13 Jun 2024 11:46:30 +0200 Subject: [PATCH 1/2] Replace resources library with okio and re-add web targets --- .../elcolto/geokjson/convention/Multiplatform.kt | 13 +++++++++++++ gradle/libs.versions.toml | 7 ++++--- turf/build.gradle.kts | 14 +++++++++++--- .../geokjson/turf/utils/FileSystem.android.kt | 5 +++++ .../elcolto/geokjson/turf/utils/FileSystem.kt | 5 +++++ .../github/elcolto/geokjson/turf/utils/Resource.kt | 4 ++-- .../elcolto/geokjson/turf/utils/FileSystem.js.kt | 6 ++++++ .../elcolto/geokjson/turf/utils/FileSystem.jvm.kt | 5 +++++ .../geokjson/turf/utils/FileSystem.native.kt | 5 +++++ .../geokjson/turf/utils/FileSystem.wasmJs.kt | 6 ++++++ 10 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 turf/src/androidUnitTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.android.kt create mode 100644 turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.kt create mode 100644 turf/src/jsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.js.kt create mode 100644 turf/src/jvmTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.jvm.kt create mode 100644 turf/src/nativeTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.native.kt create mode 100644 turf/src/wasmJsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.wasmJs.kt diff --git a/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt b/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt index abf02e1e..5c966095 100644 --- a/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt +++ b/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt @@ -7,6 +7,7 @@ import org.gradle.kotlin.dsl.getValue import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl @OptIn(ExperimentalKotlinGradlePluginApi::class) internal fun Project.configureKotlinMultiplatform( @@ -28,6 +29,18 @@ internal fun Project.configureKotlinMultiplatform( } } + js(IR) { + browser() + nodejs() + } + + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + browser() + nodejs() + } + + val iosArm64 = iosArm64() val iosX64 = iosX64() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 45d0e9a2..c69472cb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,15 +1,14 @@ [versions] kotlin = "2.0.0" -resources = "0.4.1" benchmark = "0.4.11" agp = "8.4.1" ktlint = "12.1.1" detekt = "1.23.6" binary-validator = "0.15.0-Beta.2" kover = "0.8.0" +okio = "3.9.0" [libraries] -resources = { module = "com.goncalossilva:resources", version.ref = "resources" } kotlinx-serialization = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0" kotlinx-benchmark = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-runtime", version.ref = "benchmark" } android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } @@ -18,6 +17,9 @@ ktlint-gradle-plugin = { module = "org.jlleitschuh.gradle.ktlint:org.jlleitschuh detekt-gradle-plugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } binary-validator-plugin = { module = "org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin", version.ref = "binary-validator" } kover-gradle-plugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", version.ref = "kover" } +okio = { module = "com.squareup.okio:okio", version.ref = "okio" } +okio-nodefilesystem = { module = "com.squareup.okio:okio-nodefilesystem", version.ref = "okio" } +okio-fakefilesystem = { module = "com.squareup.okio:okio-fakefilesystem", version.ref = "okio" } [plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } @@ -25,7 +27,6 @@ kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", versi kotlinx-benchmark = { id = "org.jetbrains.kotlinx.benchmark", version.ref = "benchmark" } publish = { id = "com.vanniktech.maven.publish", version = "0.28.0" } dokka = { id = "org.jetbrains.dokka", version = "1.9.20" } -resources = { id = "com.goncalossilva.resources", version.ref = "resources" } android-library = { id = "com.android.library", version.ref = "agp" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } diff --git a/turf/build.gradle.kts b/turf/build.gradle.kts index e8f46c4f..d9708f69 100644 --- a/turf/build.gradle.kts +++ b/turf/build.gradle.kts @@ -2,7 +2,6 @@ import kotlinx.kover.gradle.plugin.dsl.CoverageUnit plugins { id("io.github.elcolto.geokjson.library") - alias(libs.plugins.resources) } kotlin { @@ -16,10 +15,19 @@ kotlin { val commonTest by getting { dependencies { - implementation(libs.resources) + implementation(libs.okio) + } + } + val jsTest by getting { + dependencies { + implementation(libs.okio.nodefilesystem) + } + } + val wasmJsTest by getting { + dependencies { + implementation(libs.okio.fakefilesystem) } } - } } diff --git a/turf/src/androidUnitTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.android.kt b/turf/src/androidUnitTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.android.kt new file mode 100644 index 00000000..4c85bcbf --- /dev/null +++ b/turf/src/androidUnitTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.android.kt @@ -0,0 +1,5 @@ +package io.github.elcolto.geokjson.turf.utils + +import okio.FileSystem + +actual val fileSystem: FileSystem = FileSystem.SYSTEM diff --git a/turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.kt b/turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.kt new file mode 100644 index 00000000..03a046e0 --- /dev/null +++ b/turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.kt @@ -0,0 +1,5 @@ +package io.github.elcolto.geokjson.turf.utils + +import okio.FileSystem + +expect val fileSystem: FileSystem diff --git a/turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/Resource.kt b/turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/Resource.kt index 40d70b0c..fe96607b 100644 --- a/turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/Resource.kt +++ b/turf/src/commonTest/kotlin/io/github/elcolto/geokjson/turf/utils/Resource.kt @@ -1,7 +1,7 @@ package io.github.elcolto.geokjson.turf.utils -import com.goncalossilva.resources.Resource +import okio.Path.Companion.toPath const val RESOURCE_PATH = "./src/commonTest/resources" -fun readResource(name: String) = Resource("$RESOURCE_PATH/$name").readText() +fun readResource(name: String) = fileSystem.read("$RESOURCE_PATH/$name".toPath()) { readUtf8() } diff --git a/turf/src/jsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.js.kt b/turf/src/jsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.js.kt new file mode 100644 index 00000000..4ed87fbc --- /dev/null +++ b/turf/src/jsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.js.kt @@ -0,0 +1,6 @@ +package io.github.elcolto.geokjson.turf.utils + +import okio.FileSystem +import okio.NodeJsFileSystem + +actual val fileSystem: FileSystem = NodeJsFileSystem diff --git a/turf/src/jvmTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.jvm.kt b/turf/src/jvmTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.jvm.kt new file mode 100644 index 00000000..4c85bcbf --- /dev/null +++ b/turf/src/jvmTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.jvm.kt @@ -0,0 +1,5 @@ +package io.github.elcolto.geokjson.turf.utils + +import okio.FileSystem + +actual val fileSystem: FileSystem = FileSystem.SYSTEM diff --git a/turf/src/nativeTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.native.kt b/turf/src/nativeTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.native.kt new file mode 100644 index 00000000..4c85bcbf --- /dev/null +++ b/turf/src/nativeTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.native.kt @@ -0,0 +1,5 @@ +package io.github.elcolto.geokjson.turf.utils + +import okio.FileSystem + +actual val fileSystem: FileSystem = FileSystem.SYSTEM diff --git a/turf/src/wasmJsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.wasmJs.kt b/turf/src/wasmJsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.wasmJs.kt new file mode 100644 index 00000000..048dcc64 --- /dev/null +++ b/turf/src/wasmJsTest/kotlin/io/github/elcolto/geokjson/turf/utils/FileSystem.wasmJs.kt @@ -0,0 +1,6 @@ +package io.github.elcolto.geokjson.turf.utils + +import okio.FileSystem +import okio.fakefilesystem.FakeFileSystem + +actual val fileSystem: FileSystem = FakeFileSystem() From 92b9c2f93bce0e8b4c1ecd44e73a7e6a9d57e24f Mon Sep 17 00:00:00 2001 From: Sebastian Heeschen Date: Thu, 11 Jul 2024 20:14:14 +0200 Subject: [PATCH 2/2] Correct sourceset configuration --- .../geokjson/convention/Multiplatform.kt | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt b/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt index 5c966095..ef6ff2b3 100644 --- a/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt +++ b/build-logic/convention/src/main/kotlin/io/github/elcolto/geokjson/convention/Multiplatform.kt @@ -1,18 +1,16 @@ package io.github.elcolto.geokjson.convention import org.gradle.api.Project -import org.gradle.kotlin.dsl.creating import org.gradle.kotlin.dsl.get import org.gradle.kotlin.dsl.getValue +import org.gradle.kotlin.dsl.getting import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl @OptIn(ExperimentalKotlinGradlePluginApi::class) -internal fun Project.configureKotlinMultiplatform( - extension: KotlinMultiplatformExtension -) = extension.apply { +internal fun Project.configureKotlinMultiplatform(extension: KotlinMultiplatformExtension) = extension.apply { jvmToolchain(17) // targets @@ -40,8 +38,6 @@ internal fun Project.configureKotlinMultiplatform( nodejs() } - - val iosArm64 = iosArm64() val iosX64 = iosX64() val iosSimulatorArm64 = iosSimulatorArm64() @@ -49,8 +45,11 @@ internal fun Project.configureKotlinMultiplatform( val watchosArm64 = watchosArm64() val watchosSimulatorArm64 = watchosSimulatorArm64() val appleTargets = listOf( - iosArm64, iosX64, iosSimulatorArm64, - watchosArm32, watchosArm64, + iosArm64, + iosX64, + iosSimulatorArm64, + watchosArm32, + watchosArm64, watchosSimulatorArm64, ) @@ -66,19 +65,14 @@ internal fun Project.configureKotlinMultiplatform( applyDefaultHierarchyTemplate() - //common dependencies + // common dependencies sourceSets.apply { - commonTest.dependencies { implementation(kotlin("test")) implementation(kotlin("test-annotations-common")) } - val ioMain by creating { - dependsOn(commonMain.get()) - sourceSets["iosArm64Main"].dependsOn(this) - sourceSets["iosX64Main"].dependsOn(this) - sourceSets["iosSimulatorArm64Main"].dependsOn(this) + val iosMain by getting { sourceSets["watchosArm32Main"].dependsOn(this) sourceSets["watchosArm64Main"].dependsOn(this) sourceSets["watchosSimulatorArm64Main"].dependsOn(this)