From 975f1b7c4672573963ec8684a47d642cbacbd07b Mon Sep 17 00:00:00 2001 From: Dmitri Livotov Date: Mon, 7 Jul 2025 14:18:10 +0500 Subject: [PATCH] Add default KmpFsMimeTypes --- .../filesystem/KmpFsMimeTypes.android.kt | 3 ++ .../oskitkmp/filesystem/KmpFsMimeTypes.kt | 46 +++++++++++++++++++ .../oskitkmp/filesystem/KmpFsMimeTypes.ios.kt | 3 ++ .../oskitkmp/filesystem/KmpFsMimeTypes.jvm.kt | 3 ++ .../filesystem/KmpFsMimeTypes.wasm.kt | 3 ++ 5 files changed, 58 insertions(+) create mode 100644 src/androidMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.android.kt create mode 100644 src/commonMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.kt create mode 100644 src/iosMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.ios.kt create mode 100644 src/jvmMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.jvm.kt create mode 100644 src/wasmJsMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.wasm.kt diff --git a/src/androidMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.android.kt b/src/androidMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.android.kt new file mode 100644 index 00000000..b68cfbb8 --- /dev/null +++ b/src/androidMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.android.kt @@ -0,0 +1,3 @@ +package com.outsidesource.oskitkmp.filesystem + +internal actual fun platformMimeTypeHelper(): IMimeTypeHelper = SharedMimeTypeHelper \ No newline at end of file diff --git a/src/commonMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.kt b/src/commonMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.kt new file mode 100644 index 00000000..dec05667 --- /dev/null +++ b/src/commonMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.kt @@ -0,0 +1,46 @@ +package com.outsidesource.oskitkmp.filesystem + +interface IMimeTypeHelper { + fun getMimeType(extension: String): String? + fun getMimeTypes(extensions: List): List + val imageMimeTypes: List + val textMimeTypes: List +} + +object KmpFsMimeTypes : IMimeTypeHelper by platformMimeTypeHelper() + +internal expect fun platformMimeTypeHelper(): IMimeTypeHelper + +internal object SharedMimeTypeHelper : IMimeTypeHelper { + private val extensionToMimeType = mapOf( + "png" to "image/png", + "jpg" to "image/jpeg", + "jpeg" to "image/jpeg", + "svg" to "image/svg+xml", + "bmp" to "image/bmp", + "gif" to "image/gif", + "webp" to "image/webp", + "js" to "application/javascript", + "html" to "text/html", + "xml" to "application/xml", + "txt" to "text/plain" + ) + + override fun getMimeType(extension: String): String? = + extensionToMimeType[extension.lowercase()] + + override fun getMimeTypes(extensions: List): List = + extensions.mapNotNull { getMimeType(it) }.distinct() + + override val imageMimeTypes: List by lazy { + listOf("png", "jpg", "jpeg", "svg", "bmp", "gif", "webp").mapNotNull { + getMimeType(it)?.let { mime -> KmpFileMimetype(it, mime) } + } + } + + override val textMimeTypes: List by lazy { + listOf("txt", "html", "xml", "js").mapNotNull { + getMimeType(it)?.let { mime -> KmpFileMimetype(it, mime) } + } + } +} \ No newline at end of file diff --git a/src/iosMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.ios.kt b/src/iosMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.ios.kt new file mode 100644 index 00000000..b68cfbb8 --- /dev/null +++ b/src/iosMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.ios.kt @@ -0,0 +1,3 @@ +package com.outsidesource.oskitkmp.filesystem + +internal actual fun platformMimeTypeHelper(): IMimeTypeHelper = SharedMimeTypeHelper \ No newline at end of file diff --git a/src/jvmMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.jvm.kt b/src/jvmMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.jvm.kt new file mode 100644 index 00000000..b68cfbb8 --- /dev/null +++ b/src/jvmMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.jvm.kt @@ -0,0 +1,3 @@ +package com.outsidesource.oskitkmp.filesystem + +internal actual fun platformMimeTypeHelper(): IMimeTypeHelper = SharedMimeTypeHelper \ No newline at end of file diff --git a/src/wasmJsMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.wasm.kt b/src/wasmJsMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.wasm.kt new file mode 100644 index 00000000..b68cfbb8 --- /dev/null +++ b/src/wasmJsMain/kotlin/com/outsidesource/oskitkmp/filesystem/KmpFsMimeTypes.wasm.kt @@ -0,0 +1,3 @@ +package com.outsidesource.oskitkmp.filesystem + +internal actual fun platformMimeTypeHelper(): IMimeTypeHelper = SharedMimeTypeHelper \ No newline at end of file