diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1e8742f..b4207d2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,21 +7,23 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - name: Set up JDK + uses: actions/setup-java@v4 with: - java-version: '11' + java-version: '21' + distribution: corretto + architecture: x64 - name: Set up Gradle - uses: gradle/actions/setup-gradle@v3 + uses: gradle/actions/setup-gradle@v4 - name: Run linters and unit tests run: ./gradlew check --stacktrace - name: Publish test reports - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: test-reports path: build/reports/tests diff --git a/build.gradle.kts b/build.gradle.kts index 3dc5a11..d45a844 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,12 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompileCommon plugins { - kotlin("multiplatform") version "1.9.22" + kotlin("multiplatform") version "2.0.20" `maven-publish` } group = "com.eidu" -version = "1.1.1" +version = "1.1.1-eidu-3" repositories { mavenCentral() diff --git a/settings.gradle.kts b/settings.gradle.kts index f45412e..836f8f5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1 @@ - rootProject.name = "nonemptycollections" - diff --git a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/NonEmptyCollection.kt b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/NonEmptyCollection.kt index 772a3e6..b73c63b 100644 --- a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/NonEmptyCollection.kt +++ b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/NonEmptyCollection.kt @@ -1,5 +1,11 @@ +@file:OptIn(ExperimentalJsExport::class) + package com.quickbirdstudios.nonEmptyCollection +import kotlin.js.ExperimentalJsExport +import kotlin.js.JsExport + +@JsExport interface NonEmptyCollection : Collection { @Deprecated( diff --git a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyList.kt b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyList.kt index d5166c7..08ce504 100644 --- a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyList.kt +++ b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyList.kt @@ -1,7 +1,14 @@ +@file:OptIn(ExperimentalJsExport::class) + package com.quickbirdstudios.nonEmptyCollection.list import com.quickbirdstudios.nonEmptyCollection.NonEmptyCollection +import kotlin.js.ExperimentalJsExport +import kotlin.js.ExperimentalJsStatic +import kotlin.js.JsExport +import kotlin.js.JsStatic +@JsExport class NonEmptyList internal constructor( internal val full: List ) : List by full, NonEmptyCollection { @@ -27,4 +34,10 @@ class NonEmptyList internal constructor( override fun equals(other: Any?): Boolean = full == other override fun hashCode(): Int = full.hashCode() + + companion object { + @OptIn(ExperimentalJsStatic::class) + @JsStatic + fun fromArray(array: Array): NonEmptyList = NonEmptyList(array.first(), array.drop(1)) + } } diff --git a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/set/NonEmptySet.kt b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/set/NonEmptySet.kt index 4bdedd8..537d403 100644 --- a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/set/NonEmptySet.kt +++ b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/set/NonEmptySet.kt @@ -1,7 +1,14 @@ +@file:OptIn(ExperimentalJsExport::class) + package com.quickbirdstudios.nonEmptyCollection.set import com.quickbirdstudios.nonEmptyCollection.NonEmptyCollection +import kotlin.js.ExperimentalJsExport +import kotlin.js.ExperimentalJsStatic +import kotlin.js.JsExport +import kotlin.js.JsStatic +@JsExport class NonEmptySet internal constructor( internal val full: Set ) : Set by full, NonEmptyCollection { @@ -27,4 +34,11 @@ class NonEmptySet internal constructor( "Fatal Error! This is a bug. Please contact the library author." } } + + companion object { + @OptIn(ExperimentalJsStatic::class) + @JsStatic + fun fromArray(array: Array): NonEmptySet = + array.toSet().let { NonEmptySet(it.first(), it - it.first()) } + } } diff --git a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/toNonEmptyOrNull.kt b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/toNonEmptyOrNull.kt index 964d24d..bf52c0e 100644 --- a/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/toNonEmptyOrNull.kt +++ b/src/commonMain/kotlin/com/quickbirdstudios/nonEmptyCollection/toNonEmptyOrNull.kt @@ -10,6 +10,6 @@ import com.quickbirdstudios.nonEmptyCollection.unsafe.toNonEmptySet fun List.toNonEmptyListOrNull() = if (isEmpty()) null else toNonEmptyList() -fun Set.toNonEmptyMapOrNull() = if (isEmpty()) null else toNonEmptySet() +fun Set.toNonEmptySetOrNull() = if (isEmpty()) null else toNonEmptySet() fun Map.toNonEmptyMapOrNull() = if (isEmpty()) null else toNonEmptyMap() diff --git a/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/ToNonEmptyOrNullTest.kt b/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/ToNonEmptyOrNullTest.kt index 0d9e80c..324cd96 100644 --- a/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/ToNonEmptyOrNullTest.kt +++ b/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/ToNonEmptyOrNullTest.kt @@ -12,7 +12,7 @@ class ToNonEmptyOrNullTest { val map = mapOf() assertNull(list.toNonEmptyListOrNull()) - assertNull(set.toNonEmptyMapOrNull()) + assertNull(set.toNonEmptySetOrNull()) assertNull(map.toNonEmptyMapOrNull()) } @@ -23,7 +23,7 @@ class ToNonEmptyOrNullTest { val map = mapOf(69 to "430", -12 to "Hallo") assertEquals?>(list, list.toNonEmptyListOrNull()) - assertEquals?>(set, set.toNonEmptyMapOrNull()) + assertEquals?>(set, set.toNonEmptySetOrNull()) assertEquals?>(map, map.toNonEmptyMapOrNull()) } } diff --git a/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyListOperatorsTest.kt b/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyListOperatorsTest.kt index ca4c0a5..01ea23b 100644 --- a/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyListOperatorsTest.kt +++ b/src/jvmTest/kotlin/com/quickbirdstudios/nonEmptyCollection/list/NonEmptyListOperatorsTest.kt @@ -133,7 +133,7 @@ class NonEmptyListOperatorsTest { @Test fun flatMap() { assertOperationEquals( - Iterable::flatMap, + { transform: (String) -> Iterable -> flatMap(transform) }, NonEmptyCollection::flatMap, { value -> nonEmptyListOf(value, value) }, "dffd", "324334", "3434", "Stefan", "234234" @@ -143,7 +143,7 @@ class NonEmptyListOperatorsTest { @Test fun flatMapIndexed() { assertOperationEquals( - Iterable::flatMapIndexed, + { transform: (Int, String) -> Iterable -> flatMapIndexed(transform) }, NonEmptyCollection::flatMapIndexed, { index, _ -> nonEmptyListOf(index * 2) }, "dffd", "324334", "3434", "Stefan", "234234"