From 68e357e5d59b05fad01ce95513b4056d8c22d1c4 Mon Sep 17 00:00:00 2001 From: Alexander Zhirkevich Date: Tue, 17 Sep 2024 03:54:15 +0300 Subject: [PATCH] Core network module (#22) * wip * wip * add url param name * refactor * fix duplicate jvm class name, hide io dispatcher * cleanup * cleanup * ktor3 by default --------- Co-authored-by: Zhirkevich Alexander Y --- README.md | 34 +- build.gradle.kts | 1 - compottie-dot/build.gradle.kts | 2 +- .../compottie/DotLottieCompositionSpec.kt | 2 +- compottie-network-core/build.gradle.kts | 16 + .../src/androidMain/AndroidManifest.xml | 0 .../compottie/NetworkFontManager.android.kt | 2 - .../alexzhirkevich/compottie/DiskCache.kt | 2 +- .../compottie/DiskCacheStrategy.kt | 6 +- .../alexzhirkevich/compottie/DiskLruCache.kt | 0 .../compottie/FaultHidingSink.kt | 0 .../compottie/LottieCacheStrategy.kt | 0 .../alexzhirkevich/compottie/Network.kt | 18 +- .../compottie/NetworkAssetsManager.kt | 60 ++ .../compottie/NetworkFontManager.kt | 79 +++ .../alexzhirkevich/compottie/RealDiskCache.kt | 0 .../compottie/UrlCompositionSpec.kt | 95 +++ .../compottie/NetworkFontManager.skiko.kt | 0 compottie-network/build.gradle.kts | 6 +- .../compottie/DefaultHttpClient.kt | 23 +- .../compottie/NetworkAssetsManager.kt | 56 +- .../compottie/NetworkFontManager.kt | 66 +- .../compottie/UrlCompositionSpec.kt | 84 +-- compottie-resources/build.gradle.kts | 2 +- .../alexzhirkevich/compottie/IODispatcher.kt | 3 +- .../compottie/LottieComposition.kt | 4 +- .../compottie/LottieCompositionSpec.kt | 2 +- .../alexzhirkevich/compottie/LottiePainter.kt | 8 +- .../compottie/IoDispatcher.jvmNative.kt | 2 +- .../compottie/IoDispatcher.web.kt | 2 +- .../kotlin/ktorwasm.workaround.gradle.kts | 2 +- example/shared/build.gradle.kts | 1 - .../lottiefiles/LottieFilesViewModel.kt | 5 +- example/webApp/build.gradle.kts | 1 - gradle.properties | 2 +- gradle/libs.versions.toml | 14 +- kotlin-js-store/yarn.lock | 630 ++++++------------ settings.gradle.kts | 1 + 38 files changed, 516 insertions(+), 715 deletions(-) create mode 100644 compottie-network-core/build.gradle.kts rename {compottie-network => compottie-network-core}/src/androidMain/AndroidManifest.xml (100%) rename {compottie-network => compottie-network-core}/src/androidMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.android.kt (90%) rename {compottie-network => compottie-network-core}/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCache.kt (98%) rename {compottie-network => compottie-network-core}/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCacheStrategy.kt (93%) rename {compottie-network => compottie-network-core}/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskLruCache.kt (100%) rename {compottie-network => compottie-network-core}/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/FaultHidingSink.kt (100%) rename {compottie-network => compottie-network-core}/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCacheStrategy.kt (100%) rename {compottie-network => compottie-network-core}/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/Network.kt (67%) create mode 100644 compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt create mode 100644 compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt rename {compottie-network => compottie-network-core}/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/RealDiskCache.kt (100%) create mode 100644 compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt rename {compottie-network => compottie-network-core}/src/skikoMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.skiko.kt (100%) diff --git a/README.md b/README.md index 854f1340..9dd935b7 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,13 @@ Compose Multiplatform Adobe After Effects Bodymovin (Lottie) animations renderin >
Please [report](https://github.com/alexzhirkevich/compottie/issues) if you find any, preferably with a reproducible animation. >
List of supported AE Lottie features can be found [here](/supported_features.md) -| Module | Description | -| :----: | ------------- | -| `compottie` | Main module with rendering engine and `JsonString` animation spec. Currently has two branches - 1.x (with platform renderers - Skottie and lottie-android) and 2.x (with own renderer). 1.x is maintained until the new renderer becomes stable | -| `compottie⁠-⁠dot` | Contains [dotLottie](https://dotlottie.io/) and ZIP animation spec. For Compottie 2.x only | -| `compottie⁠-⁠network` | Contains `Url` animation spec and asset/font managers (with [Ktor](https://ktor.io/) and local cache with [Okio](https://square.github.io/okio/)). Allows loading animations and assets from web. For Compottie 2.x only | -| `compottie⁠-⁠resources` | Contains asset and font managers powered by official Compose resources. For Compottie 2.x only | +| Module | Description | +|:--------------------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `compottie` | Main module with rendering engine and `JsonString` animation spec. Currently has two branches - 1.x (with platform renderers - Skottie and lottie-android) and 2.x (with own renderer). 1.x is maintained until the new renderer becomes stable | +| `compottie⁠-⁠dot` | Contains [dotLottie](https://dotlottie.io/) and ZIP animation spec. For Compottie 2.x only | +| `compottie⁠-⁠network` | Contains `Url` animation spec and asset/font managers (with [Ktor3](https://ktor.io/) and local cache with [Okio](https://square.github.io/okio/)). Allows loading animations and assets from web. For Compottie 2.x only | +| `compottie⁠-⁠network-core` | Contains base HttpClient-free implementations for `network` module. Allows to specify custom HTTP client (Ktor3 or any other). | +| `compottie⁠-⁠resources` | Contains asset and font managers powered by official Compose resources. For Compottie 2.x only | [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.alexzhirkevich/compottie/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.github.alexzhirkevich/compottie) @@ -234,7 +235,7 @@ Images should be avoided whenever possible. They are much larger, less performan val painter = rememberLottiePainter( composition = composition, assetsManager = rememberResourcesAssetsManager( - directory = "files" // by default, + directory = "files", // by default readBytes = Res::readBytes ) ) @@ -285,22 +286,6 @@ The network module also brings the `NetworkAssetsManager` that have similar para If you are using Url composition spec then specifying `NetworkAssetsManager` is redundant. Url composition spec automatically prepares url assets -There is no stable Ktor client for wasm so to use network module on this target you need to add -the following to the bottom of your build script: - -```kotlin -configurations - .filter { it.name.contains("wasmJs") } - .onEach { - it.resolutionStrategy.eachDependency { - if (requested.group.startsWith("io.ktor") && - requested.name.startsWith("ktor-client-") - ) { - useVersion("3.0.0-wasm2") - } - } - } -``` ## Dynamic Properties Lottie allows you to update animation properties at runtime. Some reasons you may want to do this are: @@ -346,9 +331,6 @@ val painter = rememberLottiePainter( // for each layer named 'Shape Layer 4' on any level deep shapeLayer("**", "Shape Layer 4") { - transform { - rotation { current -> current * progress } - } // for each fill named 'Fill 4' on the 2nd level deep fill("*", "Fill 4") { color { Color.Red } diff --git a/build.gradle.kts b/build.gradle.kts index c3ad7810..fea85fb5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,6 @@ plugins { alias(libs.plugins.android.library) apply false alias(libs.plugins.compose).apply(false) alias(libs.plugins.composeCompiler).apply(false) - alias(libs.plugins.dokka).apply(false) alias(libs.plugins.serialization).apply(false) } diff --git a/compottie-dot/build.gradle.kts b/compottie-dot/build.gradle.kts index e0a8615a..d38f9a3f 100644 --- a/compottie-dot/build.gradle.kts +++ b/compottie-dot/build.gradle.kts @@ -8,12 +8,12 @@ kotlin { sourceSets { commonMain.dependencies { + api(project(":compottie")) implementation(compose.ui) implementation(libs.serialization) implementation(libs.okio) implementation(libs.okio.fakefilesystem) implementation(libs.coroutines.core) - api(project(":compottie")) } } } diff --git a/compottie-dot/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DotLottieCompositionSpec.kt b/compottie-dot/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DotLottieCompositionSpec.kt index c7cb7f49..d2b33dea 100644 --- a/compottie-dot/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DotLottieCompositionSpec.kt +++ b/compottie-dot/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DotLottieCompositionSpec.kt @@ -50,7 +50,7 @@ private class DotLottieCompositionSpec( @OptIn(InternalCompottieApi::class) override suspend fun load(): LottieComposition { - return withContext(ioDispatcher()) { + return withContext(Compottie.ioDispatcher()) { val fileSystem = FakeFileSystem() val path = "lottie".toPath() diff --git a/compottie-network-core/build.gradle.kts b/compottie-network-core/build.gradle.kts new file mode 100644 index 00000000..88fa96e8 --- /dev/null +++ b/compottie-network-core/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + id("kotlinx-atomicfu") +} + +kotlin { + sourceSets { + commonMain.dependencies { + api(project(":compottie")) + implementation(project(":compottie-dot")) + implementation(compose.ui) + implementation(libs.serialization) + api(libs.okio) + implementation(libs.coroutines.core) + } + } +} diff --git a/compottie-network/src/androidMain/AndroidManifest.xml b/compottie-network-core/src/androidMain/AndroidManifest.xml similarity index 100% rename from compottie-network/src/androidMain/AndroidManifest.xml rename to compottie-network-core/src/androidMain/AndroidManifest.xml diff --git a/compottie-network/src/androidMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.android.kt b/compottie-network-core/src/androidMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.android.kt similarity index 90% rename from compottie-network/src/androidMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.android.kt rename to compottie-network-core/src/androidMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.android.kt index 371c45ec..17059901 100644 --- a/compottie-network/src/androidMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.android.kt +++ b/compottie-network-core/src/androidMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.android.kt @@ -3,8 +3,6 @@ package io.github.alexzhirkevich.compottie import androidx.compose.ui.text.font.Font import io.github.alexzhirkevich.compottie.assets.LottieFontSpec import okio.Path -import java.io.FileOutputStream -import java.io.FilterOutputStream private const val CACHE_FONT_DIR = "compottie_font_cache" diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCache.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCache.kt similarity index 98% rename from compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCache.kt rename to compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCache.kt index a51487c2..ea2164ec 100644 --- a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCache.kt +++ b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCache.kt @@ -119,7 +119,7 @@ public fun DiskCache( directory: Path = FileSystem.SYSTEM_TEMPORARY_DIRECTORY.resolve("compottie_disc_cache".toPath()), fileSystem : FileSystem = defaultFileSystem(), maxSizeBytes : Long = MB_250, - cleanupDispatcher : CoroutineDispatcher = ioDispatcher() + cleanupDispatcher : CoroutineDispatcher = Compottie.ioDispatcher() ) : DiskCache = RealDiskCache( maxSize = maxSizeBytes, directory = directory, diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCacheStrategy.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCacheStrategy.kt similarity index 93% rename from compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCacheStrategy.kt rename to compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCacheStrategy.kt index 798b3b8c..377f5564 100644 --- a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCacheStrategy.kt +++ b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskCacheStrategy.kt @@ -60,8 +60,10 @@ public class DiskCacheStrategy( private fun key(url: String) = url.encodeUtf8().sha256().hex() - internal companion object { - val Instance by lazy { + public companion object { + + @InternalCompottieApi + public val Instance: DiskCacheStrategy by lazy { DiskCacheStrategy() } } diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskLruCache.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskLruCache.kt similarity index 100% rename from compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskLruCache.kt rename to compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DiskLruCache.kt diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/FaultHidingSink.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/FaultHidingSink.kt similarity index 100% rename from compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/FaultHidingSink.kt rename to compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/FaultHidingSink.kt diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCacheStrategy.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCacheStrategy.kt similarity index 100% rename from compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCacheStrategy.kt rename to compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCacheStrategy.kt diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/Network.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/Network.kt similarity index 67% rename from compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/Network.kt rename to compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/Network.kt index 1e7f042b..cbd43574 100644 --- a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/Network.kt +++ b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/Network.kt @@ -1,10 +1,5 @@ package io.github.alexzhirkevich.compottie -import io.ktor.client.HttpClient -import io.ktor.client.statement.bodyAsChannel -import io.ktor.http.URLParserException -import io.ktor.http.Url -import io.ktor.util.toByteArray import kotlinx.coroutines.withContext import okio.Path @@ -13,12 +8,11 @@ private val NetworkLock = MapMutex() @OptIn(InternalCompottieApi::class) internal suspend fun networkLoad( - client: HttpClient, + request : suspend (url: String) -> ByteArray, cacheStrategy: LottieCacheStrategy, - request : NetworkRequest, url: String ): Pair { - return withContext(ioDispatcher()) { + return withContext(Compottie.ioDispatcher()) { NetworkLock.withLock(url) { try { try { @@ -28,13 +22,7 @@ internal suspend fun networkLoad( } catch (_: Throwable) { } - val ktorUrl = try { - Url(url) - } catch (t: URLParserException) { - return@withLock null to null - } - - val bytes = request(client, ktorUrl).execute().bodyAsChannel().toByteArray() + val bytes = request(url) try { cacheStrategy.save(url, bytes)?.let { diff --git a/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt new file mode 100644 index 00000000..59787bcd --- /dev/null +++ b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt @@ -0,0 +1,60 @@ +@file:JvmName("CoreNetworkAssetsManager") + + +package io.github.alexzhirkevich.compottie + +import androidx.compose.runtime.Stable +import io.github.alexzhirkevich.compottie.assets.ImageRepresentable +import io.github.alexzhirkevich.compottie.assets.LottieAssetsManager +import io.github.alexzhirkevich.compottie.assets.LottieImageSpec +import kotlin.jvm.JvmName + +/** + * Asset manager that load images from web using [request] . + * + * @param request network request used for loading assets + * @param cacheStrategy caching strategy. Caching to system temp dir by default + * */ +@OptIn(InternalCompottieApi::class) +@Stable +public fun NetworkAssetsManager( + request : suspend (url: String) -> ByteArray, + cacheStrategy: LottieCacheStrategy = DiskCacheStrategy.Instance, +) : LottieAssetsManager = NetworkAssetsManagerImpl( + request = request, + cacheStrategy = cacheStrategy, +) + + +@Stable +private class NetworkAssetsManagerImpl( + private val request : suspend (url: String) -> ByteArray, + private val cacheStrategy: LottieCacheStrategy, +) : LottieAssetsManager { + + override suspend fun image(image: LottieImageSpec): ImageRepresentable? { + return networkLoad( + request = request, + cacheStrategy = cacheStrategy, + url = image.path + image.name + ).second?.let(ImageRepresentable::Bytes) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || this::class != other::class) return false + + other as NetworkAssetsManagerImpl + + if (request != other.request) return false + if (cacheStrategy != other.cacheStrategy) return false + + return true + } + + override fun hashCode(): Int { + var result = request.hashCode() + result = 31 * result + cacheStrategy.hashCode() + return result + } +} \ No newline at end of file diff --git a/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt new file mode 100644 index 00000000..07719488 --- /dev/null +++ b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt @@ -0,0 +1,79 @@ +@file:JvmName("CoreNetworkFontManager") + + +package io.github.alexzhirkevich.compottie + +import androidx.compose.runtime.Stable +import androidx.compose.ui.text.font.Font +import io.github.alexzhirkevich.compottie.assets.LottieFontManager +import io.github.alexzhirkevich.compottie.assets.LottieFontSpec +import okio.Path +import kotlin.jvm.JvmName + +/** + * Font manager that loads fonts from the web using [request]. + * + * Guaranteed to work only with [LottieFontSpec.FontOrigin.FontUrl] .ttf fonts + * (support may be higher on non-Android platforms). + * + * Note: [LottieCacheStrategy.path] should return valid file system paths to make [NetworkFontManager] work. + * Default [DiskCacheStrategy] supports it. + * + * @param request network request used for loading fonts + * @param cacheStrategy caching strategy. Caching to system temp dir by default + * */ +@OptIn(InternalCompottieApi::class) +@Stable +public fun NetworkFontManager( + request : suspend (url: String) -> ByteArray, + cacheStrategy: LottieCacheStrategy = DiskCacheStrategy.Instance, +) : LottieFontManager = NetworkFontManagerImpl( + request = request, + cacheStrategy = cacheStrategy, +) + +@Stable +private class NetworkFontManagerImpl( + private val request : suspend (url: String) -> ByteArray, + private val cacheStrategy: LottieCacheStrategy, +) : LottieFontManager { + + override suspend fun font(font: LottieFontSpec): Font? { + + if (font.origin != LottieFontSpec.FontOrigin.FontUrl){ + return null + } + + val (path, bytes) = networkLoad( + request = request, + cacheStrategy = cacheStrategy, + url = font.path ?: return null + ) + + if (path == null || bytes == null){ + return null + } + + return makeFont(font, path, bytes) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || this::class != other::class) return false + + other as NetworkFontManagerImpl + + if (request != other.request) return false + if (cacheStrategy != other.cacheStrategy) return false + + return true + } + + override fun hashCode(): Int { + var result = request.hashCode() + result = 31 * result + cacheStrategy.hashCode() + return result + } +} + +internal expect suspend fun makeFont(spec: LottieFontSpec, path: Path, bytes: ByteArray) : Font \ No newline at end of file diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/RealDiskCache.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/RealDiskCache.kt similarity index 100% rename from compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/RealDiskCache.kt rename to compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/RealDiskCache.kt diff --git a/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt new file mode 100644 index 00000000..654a8d43 --- /dev/null +++ b/compottie-network-core/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt @@ -0,0 +1,95 @@ +@file:JvmName("CoreUrlCompositionSpec") + +package io.github.alexzhirkevich.compottie + +import androidx.compose.runtime.Stable +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlin.jvm.JvmName + +/** + * [LottieComposition] from network [url] + * + * @param request network request used for loading animations + * @param format animation format (JSON/dotLottie). Composition spec will try to guess format if format is not specified. + * @param cacheStrategy caching strategy. Caching to system temp dir by default + * + * URL assets will be automatically prepared with [NetworkAssetsManager] + * */ +@OptIn(InternalCompottieApi::class) +@Stable +public fun LottieCompositionSpec.Companion.Url( + url : String, + request: suspend (url: String) -> ByteArray, + format: LottieAnimationFormat = LottieAnimationFormat.Undefined, + cacheStrategy: LottieCacheStrategy = DiskCacheStrategy.Instance, +) : LottieCompositionSpec = NetworkCompositionSpec( + url = url, + format = format, + request = request, + cacheStrategy = cacheStrategy, +) + +@Stable +private class NetworkCompositionSpec( + private val url : String, + private val format: LottieAnimationFormat, + private val request : suspend (url: String) -> ByteArray, + private val cacheStrategy: LottieCacheStrategy, +) : LottieCompositionSpec { + + override val key: String + get() = "url_$url" + + private val assetsManager = NetworkAssetsManager( + request = request, + cacheStrategy = cacheStrategy + ) + + private val fontManager = NetworkFontManager( + request = request, + cacheStrategy = cacheStrategy + ) + + @OptIn(InternalCompottieApi::class) + override suspend fun load(): LottieComposition { + return withContext(Compottie.ioDispatcher()) { + + val (_, bytes) = networkLoad(request, cacheStrategy, url) + + checkNotNull(bytes?.decodeToLottieComposition(format)){ + "Failed to load animation $url" + }.apply { + launch { + prepareAssets(assetsManager) + } + launch { + prepareFonts(fontManager) + } + } + } + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || this::class != other::class) return false + + other as NetworkCompositionSpec + + if (url != other.url) return false + if (format != other.format) return false + if (request != other.request) return false + if (cacheStrategy != other.cacheStrategy) return false + + return true + } + + override fun hashCode(): Int { + var result = url.hashCode() + result = 31 * result + format.hashCode() + result = 31 * result + request.hashCode() + result = 31 * result + cacheStrategy.hashCode() + return result + } +} + diff --git a/compottie-network/src/skikoMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.skiko.kt b/compottie-network-core/src/skikoMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.skiko.kt similarity index 100% rename from compottie-network/src/skikoMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.skiko.kt rename to compottie-network-core/src/skikoMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.skiko.kt diff --git a/compottie-network/build.gradle.kts b/compottie-network/build.gradle.kts index 3294d1fc..73824970 100644 --- a/compottie-network/build.gradle.kts +++ b/compottie-network/build.gradle.kts @@ -1,17 +1,17 @@ plugins { id("kotlinx-atomicfu") - id("ktorwasm.workaround") } kotlin { sourceSets { commonMain.dependencies { + api(project(":compottie")) + api(project(":compottie-network-core")) + implementation(project(":compottie-dot")) implementation(compose.ui) implementation(libs.serialization) api(libs.okio) api(libs.ktor.client.core) - api(project(":compottie")) - implementation(project(":compottie-dot")) } } } diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DefaultHttpClient.kt b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DefaultHttpClient.kt index 4efffeb0..aff8486e 100644 --- a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DefaultHttpClient.kt +++ b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/DefaultHttpClient.kt @@ -2,10 +2,11 @@ package io.github.alexzhirkevich.compottie import io.ktor.client.HttpClient import io.ktor.client.plugins.HttpRequestRetry -import io.ktor.client.request.prepareGet -import io.ktor.client.request.prepareRequest -import io.ktor.client.statement.HttpStatement -import io.ktor.http.Url +import io.ktor.client.request.get +import io.ktor.client.statement.bodyAsBytes +import io.ktor.client.statement.bodyAsChannel +import io.ktor.utils.io.InternalAPI +import io.ktor.utils.io.toByteArray internal val DefaultHttpClient by lazy { HttpClient { @@ -13,16 +14,12 @@ internal val DefaultHttpClient by lazy { expectSuccess = true install(HttpRequestRetry) { maxRetries = 2 - constantDelay(250, 250) + constantDelay(1000, 500) } } } -/** - * Http request builder. - * - * See [HttpClient.prepareRequest], [HttpClient.prepareGet], - * */ -public typealias NetworkRequest = suspend (HttpClient, Url) -> HttpStatement - -internal val GetRequest : NetworkRequest = { c, u -> c.prepareGet(u) } \ No newline at end of file +@OptIn(InternalAPI::class) +internal val DefaultHttpRequest : suspend (String) -> ByteArray = { + DefaultHttpClient.get(it).bodyAsBytes() +} \ No newline at end of file diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt index 65cae004..9862f13e 100644 --- a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt +++ b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkAssetsManager.kt @@ -1,64 +1,18 @@ package io.github.alexzhirkevich.compottie import androidx.compose.runtime.Stable -import io.github.alexzhirkevich.compottie.assets.ImageRepresentable -import io.github.alexzhirkevich.compottie.assets.LottieImageSpec import io.github.alexzhirkevich.compottie.assets.LottieAssetsManager -import io.ktor.client.HttpClient /** - * Asset manager that load images from web using [request] with [client]. + * Asset manager that load images from web. * - * @param client http client used for loading animation - * @param request request builder. Simple GET by default * @param cacheStrategy caching strategy. Caching to system temp dir by default * */ +@OptIn(InternalCompottieApi::class) @Stable public fun NetworkAssetsManager( - client: HttpClient = DefaultHttpClient, - request : NetworkRequest = GetRequest, cacheStrategy: LottieCacheStrategy = DiskCacheStrategy.Instance, -) : LottieAssetsManager = NetworkAssetsManagerImpl( - client = client, - cacheStrategy = cacheStrategy, - request = request, +) : LottieAssetsManager = NetworkAssetsManager( + request = DefaultHttpRequest, + cacheStrategy = cacheStrategy ) - - - -@Stable -private class NetworkAssetsManagerImpl( - private val client: HttpClient, - private val cacheStrategy: LottieCacheStrategy, - private val request : NetworkRequest, -) : LottieAssetsManager { - - override suspend fun image(image: LottieImageSpec): ImageRepresentable? { - return networkLoad( - client = client, - cacheStrategy = cacheStrategy, - request = request, - url = image.path + image.name - ).second?.let(ImageRepresentable::Bytes) - } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other == null || this::class != other::class) return false - - other as NetworkAssetsManagerImpl - - if (client != other.client) return false - if (cacheStrategy != other.cacheStrategy) return false - if (request != other.request) return false - - return true - } - - override fun hashCode(): Int { - var result = client.hashCode() - result = 31 * result + cacheStrategy.hashCode() - result = 31 * result + request.hashCode() - return result - } -} \ No newline at end of file diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt index bdfd103c..ff9fca1b 100644 --- a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt +++ b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/NetworkFontManager.kt @@ -1,14 +1,11 @@ package io.github.alexzhirkevich.compottie import androidx.compose.runtime.Stable -import androidx.compose.ui.text.font.Font import io.github.alexzhirkevich.compottie.assets.LottieFontManager import io.github.alexzhirkevich.compottie.assets.LottieFontSpec -import io.ktor.client.HttpClient -import okio.Path /** - * Font manager that loads fonts from the web using [request] with [client]. + * Font manager that loads fonts from the web. * * Guaranteed to work only with [LottieFontSpec.FontOrigin.FontUrl] .ttf fonts * (support may be higher on non-Android platforms). @@ -16,67 +13,14 @@ import okio.Path * Note: [LottieCacheStrategy.path] should return valid file system paths to make [NetworkFontManager] work. * Default [DiskCacheStrategy] supports it. * - * @param client http client used for loading animation - * @param request request builder. Simple GET by default * @param cacheStrategy caching strategy. Caching to system temp dir by default * */ +@OptIn(InternalCompottieApi::class) @Stable public fun NetworkFontManager( - client: HttpClient = DefaultHttpClient, - request : NetworkRequest = GetRequest, cacheStrategy: LottieCacheStrategy = DiskCacheStrategy.Instance, -) : LottieFontManager = NetworkFontManagerImpl( - client = client, - cacheStrategy = cacheStrategy, - request = request, +) : LottieFontManager = NetworkFontManager( + request = DefaultHttpRequest, + cacheStrategy = cacheStrategy ) -@Stable -private class NetworkFontManagerImpl( - private val client: HttpClient, - private val cacheStrategy: LottieCacheStrategy, - private val request : NetworkRequest, -) : LottieFontManager { - - override suspend fun font(font: LottieFontSpec): Font? { - - if (font.origin != LottieFontSpec.FontOrigin.FontUrl){ - return null - } - - val (path, bytes) = networkLoad( - client = client, - cacheStrategy = cacheStrategy, - request = request, - url = font.path ?: return null - ) - - if (path == null || bytes == null){ - return null - } - - return makeFont(font, path, bytes) - } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other == null || this::class != other::class) return false - - other as NetworkFontManagerImpl - - if (client != other.client) return false - if (cacheStrategy != other.cacheStrategy) return false - if (request != other.request) return false - - return true - } - - override fun hashCode(): Int { - var result = client.hashCode() - result = 31 * result + cacheStrategy.hashCode() - result = 31 * result + request.hashCode() - return result - } -} - -internal expect suspend fun makeFont(spec: LottieFontSpec, path: Path, bytes: ByteArray) : Font \ No newline at end of file diff --git a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt index d83c6457..8f8778ef 100644 --- a/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt +++ b/compottie-network/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/UrlCompositionSpec.kt @@ -1,104 +1,26 @@ package io.github.alexzhirkevich.compottie import androidx.compose.runtime.Stable -import io.ktor.client.HttpClient -import io.ktor.client.plugins.ClientRequestException -import io.ktor.client.statement.bodyAsChannel -import io.ktor.client.statement.bodyAsText -import io.ktor.http.Url -import io.ktor.http.isSuccess -import io.ktor.util.toByteArray -import kotlinx.coroutines.launch -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock -import kotlinx.coroutines.withContext /** * [LottieComposition] from network [url] * * @param format animation format (JSON/dotLottie). Composition spec will try to guess format if format is not specified. - * @param client http client used for loading animation - * @param request request builder. Simple GET by default * @param cacheStrategy caching strategy. Caching to system temp dir by default * * URL assets will be automatically prepared with [NetworkAssetsManager] * */ +@OptIn(InternalCompottieApi::class) @Stable public fun LottieCompositionSpec.Companion.Url( url : String, format: LottieAnimationFormat = LottieAnimationFormat.Undefined, - client: HttpClient = DefaultHttpClient, - request : NetworkRequest = GetRequest, cacheStrategy: LottieCacheStrategy = DiskCacheStrategy.Instance, -) : LottieCompositionSpec = NetworkCompositionSpec( +) : LottieCompositionSpec = Url( url = url, + request = DefaultHttpRequest, format = format, - client = client, cacheStrategy = cacheStrategy, - request = request ) -@Stable -private class NetworkCompositionSpec( - private val url : String, - private val format: LottieAnimationFormat, - private val client : HttpClient, - private val cacheStrategy: LottieCacheStrategy, - private val request : NetworkRequest, -) : LottieCompositionSpec { - - override val key: String - get() = "url_$url" - - private val assetsManager = NetworkAssetsManager(client, request, cacheStrategy) - private val fontManager = NetworkFontManager(client, request, cacheStrategy) - - @OptIn(InternalCompottieApi::class) - override suspend fun load(): LottieComposition { - return withContext(ioDispatcher()) { - - val (_, bytes) = networkLoad(client, cacheStrategy, request, url) - - checkNotNull(bytes?.decodeToLottieComposition(format)){ - "Failed to load animation $url" - }.apply { - launch { - prepareAssets(assetsManager) - } - launch { - prepareFonts(fontManager) - } - } - } - } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other == null || this::class != other::class) return false - - other as NetworkCompositionSpec - - if (url != other.url) return false - if (format != other.format) return false - if (client != other.client) return false - if (cacheStrategy != other.cacheStrategy) return false - if (request != other.request) return false - - return true - } - - override fun hashCode(): Int { - var result = url.hashCode() - result = 31 * result + format.hashCode() - result = 31 * result + client.hashCode() - result = 31 * result + cacheStrategy.hashCode() - result = 31 * result + request.hashCode() - return result - } - - companion object { - private val mainMutex = Mutex() - private val mutexByUrl = mutableMapOf() - } -} diff --git a/compottie-resources/build.gradle.kts b/compottie-resources/build.gradle.kts index 4d7be32c..3e672e18 100644 --- a/compottie-resources/build.gradle.kts +++ b/compottie-resources/build.gradle.kts @@ -2,10 +2,10 @@ kotlin { sourceSets { commonMain.dependencies { + api(project(":compottie")) implementation(compose.ui) implementation(compose.components.resources) implementation(libs.coroutines.core) - api(project(":compottie")) } } } diff --git a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/IODispatcher.kt b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/IODispatcher.kt index 75fc7728..06eebe96 100644 --- a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/IODispatcher.kt +++ b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/IODispatcher.kt @@ -1,7 +1,6 @@ package io.github.alexzhirkevich.compottie import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.Dispatchers @InternalCompottieApi -public expect fun ioDispatcher() : CoroutineDispatcher \ No newline at end of file +public expect fun Compottie.ioDispatcher() : CoroutineDispatcher \ No newline at end of file diff --git a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieComposition.kt b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieComposition.kt index 92d6befd..e052009b 100644 --- a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieComposition.kt +++ b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieComposition.kt @@ -63,7 +63,7 @@ public fun rememberLottieComposition( LaunchedEffect(result) { try { - val composition = withContext(ioDispatcher()) { + val composition = withContext(Compottie.ioDispatcher()) { val specInstance = updatedSpec() val k = when (key) { UnspecifiedCompositionKey -> specInstance.key @@ -105,7 +105,7 @@ public fun rememberLottieComposition( LaunchedEffect(result) { try { - val composition = withContext(ioDispatcher()) { + val composition = withContext(Compottie.ioDispatcher()) { spec.load() } result.complete(composition) diff --git a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCompositionSpec.kt b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCompositionSpec.kt index 52838e9c..ccbdddf3 100644 --- a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCompositionSpec.kt +++ b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottieCompositionSpec.kt @@ -40,7 +40,7 @@ private value class JsonStringImpl( @OptIn(InternalCompottieApi::class) override suspend fun load(): LottieComposition { - return withContext(ioDispatcher()) { + return withContext(Compottie.ioDispatcher()) { LottieComposition.parse(jsonString) } } diff --git a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottiePainter.kt b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottiePainter.kt index d6193c8d..1b565572 100644 --- a/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottiePainter.kt +++ b/compottie/src/commonMain/kotlin/io/github/alexzhirkevich/compottie/LottiePainter.kt @@ -93,10 +93,10 @@ public fun rememberLottiePainter( dp != null ) { if (composition != null) { - val assets = async(ioDispatcher()) { + val assets = async(Compottie.ioDispatcher()) { composition.loadAssets(assetsManager ?: EmptyAssetsManager, true) } - val fonts = async(ioDispatcher()) { + val fonts = async(Compottie.ioDispatcher()) { composition.loadFonts(fontManager ?: EmptyFontManager) } @@ -222,12 +222,12 @@ public suspend fun LottiePainter( enableMergePaths: Boolean = false, enableExpressions: Boolean = true, ) : Painter = coroutineScope { - val assets = async(ioDispatcher()) { + val assets = async(Compottie.ioDispatcher()) { assetsManager?.let { composition.loadAssets(it, true) } } - val fonts = async(ioDispatcher()) { + val fonts = async(Compottie.ioDispatcher()) { fontManager?.let { composition.loadFonts(it) } diff --git a/compottie/src/jvmNativeMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.jvmNative.kt b/compottie/src/jvmNativeMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.jvmNative.kt index f4a3365d..7a10a964 100644 --- a/compottie/src/jvmNativeMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.jvmNative.kt +++ b/compottie/src/jvmNativeMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.jvmNative.kt @@ -4,5 +4,5 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO -public actual fun ioDispatcher() : CoroutineDispatcher = Dispatchers.IO +public actual fun Compottie.ioDispatcher() : CoroutineDispatcher = Dispatchers.IO diff --git a/compottie/src/webMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.web.kt b/compottie/src/webMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.web.kt index b7aed50d..520e0504 100644 --- a/compottie/src/webMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.web.kt +++ b/compottie/src/webMain/kotlin/io/github/alexzhirkevich/compottie/IoDispatcher.web.kt @@ -3,4 +3,4 @@ package io.github.alexzhirkevich.compottie import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers -public actual fun ioDispatcher() : CoroutineDispatcher = Dispatchers.Default \ No newline at end of file +public actual fun Compottie.ioDispatcher() : CoroutineDispatcher = Dispatchers.Default \ No newline at end of file diff --git a/convention-plugins/src/main/kotlin/ktorwasm.workaround.gradle.kts b/convention-plugins/src/main/kotlin/ktorwasm.workaround.gradle.kts index 69d90ef0..bc911ab3 100644 --- a/convention-plugins/src/main/kotlin/ktorwasm.workaround.gradle.kts +++ b/convention-plugins/src/main/kotlin/ktorwasm.workaround.gradle.kts @@ -5,7 +5,7 @@ configurations if (requested.group.startsWith("io.ktor") && requested.name.startsWith("ktor-client-") ) { - useVersion("3.0.0-wasm2") + useVersion("3.0.0-rc-1") } } } diff --git a/example/shared/build.gradle.kts b/example/shared/build.gradle.kts index 63193731..b8e3bc45 100644 --- a/example/shared/build.gradle.kts +++ b/example/shared/build.gradle.kts @@ -4,7 +4,6 @@ plugins { id("module.android") id("module.multiplatform") - id("ktorwasm.workaround") alias(libs.plugins.serialization) } diff --git a/example/shared/src/commonMain/kotlin/lottiefiles/LottieFilesViewModel.kt b/example/shared/src/commonMain/kotlin/lottiefiles/LottieFilesViewModel.kt index 5fb1aaf7..79f370bd 100644 --- a/example/shared/src/commonMain/kotlin/lottiefiles/LottieFilesViewModel.kt +++ b/example/shared/src/commonMain/kotlin/lottiefiles/LottieFilesViewModel.kt @@ -2,6 +2,7 @@ package lottiefiles import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import io.github.alexzhirkevich.compottie.Compottie import io.github.alexzhirkevich.compottie.InternalCompottieApi import io.github.alexzhirkevich.compottie.ioDispatcher import io.ktor.client.HttpClient @@ -64,7 +65,7 @@ internal class LottieFilesViewModel() : ViewModel() { init { @OptIn(InternalCompottieApi::class) - viewModelScope.launch(ioDispatcher()) { + viewModelScope.launch(Compottie.ioDispatcher()) { combine(search.debounce(1000), sortOrder, page) { q, s, p -> Triple(q, s, p) }.collectLatest { (q, s, p) -> @@ -99,7 +100,7 @@ internal class LottieFilesViewModel() : ViewModel() { } @OptIn(InternalCompottieApi::class) - viewModelScope.launch(ioDispatcher()) { + viewModelScope.launch(Compottie.ioDispatcher()) { search.debounce(1000) .collectLatest { s -> if (s.isBlank()){ diff --git a/example/webApp/build.gradle.kts b/example/webApp/build.gradle.kts index 225da948..f887f19a 100644 --- a/example/webApp/build.gradle.kts +++ b/example/webApp/build.gradle.kts @@ -55,7 +55,6 @@ kotlin { } } -plugins.apply("ktorwasm.workaround") /** ./gradlew clean compatBrowserProductionDistribution diff --git a/gradle.properties b/gradle.properties index f6e4d917..9e034076 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ #Gradle -org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M" +org.gradle.jvmargs=-Xmx4096M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx4096M" #Kotlin kotlin.code.style=official diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7ab28f40..3e71b350 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,17 +2,16 @@ androidx-activity-compose="1.9.0" androidx-core-ktx="1.13.1" androidx-startup="1.1.1" -kotlin="2.0.0" -dokka="1.9.0" +kotlin="2.0.20" compose="1.6.11" agp = "8.1.1" okio = "3.9.0" -serialization="1.6.3" -ktor="2.3.12" +serialization="1.7.2" +ktor="3.0.0-rc-1" atomicfu="0.23.2" -coroutines="1.8.0" +coroutines="1.8.1" nexus-publish="2.0.0" -coil="3.0.0-alpha08" +coil="3.0.0-alpha10" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } @@ -31,13 +30,12 @@ nexus-publish = { module = "io.github.gradle-nexus.publish-plugin:io.github.grad kotlin-gp = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } android-gp = { module = "com.android.tools.build:gradle", version.ref = "agp" } coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" } -coil-network = { module = "io.coil-kt.coil3:coil-network-ktor", version.ref = "coil" } +coil-network = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" } [plugins] compose = { id = "org.jetbrains.compose", version.ref = "compose" } kotlin-multiplatform = { id ="org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } -dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index bd682f3c..b672a7d6 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -12,18 +12,6 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - "@jridgewell/gen-mapping@^0.3.0": version "0.3.4" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" @@ -69,36 +57,11 @@ resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273" integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg== -"@jsonjoy.com/base64@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" - integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== - -"@jsonjoy.com/json-pack@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz#ab59c642a2e5368e8bcfd815d817143d4f3035d0" - integrity sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg== - dependencies: - "@jsonjoy.com/base64" "^1.1.1" - "@jsonjoy.com/util" "^1.1.2" - hyperdyperid "^1.2.0" - thingies "^1.20.0" - -"@jsonjoy.com/util@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.1.3.tgz#75b1c3cf21b70e665789d1ad3eabeff8b7fd1429" - integrity sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg== - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" @@ -112,14 +75,14 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.13": +"@types/bonjour@^3.5.9": version "3.5.13" resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" -"@types/connect-history-api-fallback@^1.5.4": +"@types/connect-history-api-fallback@^1.3.5": version "1.5.4" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== @@ -177,7 +140,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.21": +"@types/express@*", "@types/express@^4.17.13": version "4.17.21" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== @@ -238,10 +201,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/retry@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" - integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/send@*": version "0.17.4" @@ -251,7 +214,7 @@ "@types/mime" "^1" "@types/node" "*" -"@types/serve-index@^1.9.4": +"@types/serve-index@^1.9.1": version "1.9.4" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== @@ -267,7 +230,7 @@ "@types/mime" "*" "@types/node" "*" -"@types/serve-static@^1.15.5": +"@types/serve-static@^1.13.10": version "1.15.7" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== @@ -276,17 +239,17 @@ "@types/node" "*" "@types/send" "*" -"@types/sockjs@^0.3.36": +"@types/sockjs@^0.3.33": version "0.3.36" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" -"@types/ws@^8.5.10": - version "8.5.10" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== +"@types/ws@^8.5.5": + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" @@ -451,10 +414,10 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn@^8.7.1, acorn@^8.8.2: version "8.11.3" @@ -500,10 +463,10 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-html-community@^0.0.8: version "0.0.8" @@ -515,11 +478,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -527,11 +485,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -606,7 +559,7 @@ body-parser@^1.19.0: type-is "~1.6.18" unpipe "1.0.0" -bonjour-service@^1.2.1: +bonjour-service@^1.0.11: version "1.2.1" resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== @@ -636,7 +589,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== @@ -656,13 +609,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -702,22 +648,7 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.5.1, chokidar@^3.6.0: +chokidar@^3.5.1, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -862,7 +793,7 @@ cors@~2.8.5: object-assign "^4" vary "^1" -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -888,31 +819,25 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.1.0, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: +debug@^4.1.0, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@^4.3.5: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -default-browser-id@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" - integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== - -default-browser@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" - integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== - dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.0.0" - default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -929,10 +854,10 @@ define-data-property@^1.1.2: es-errors "^1.3.0" gopd "^1.0.1" -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== depd@2.0.0: version "2.0.0" @@ -959,10 +884,10 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dns-packet@^5.2.2: version "5.6.1" @@ -981,11 +906,6 @@ dom-serialize@^2.2.1: extend "^3.0.0" void-elements "^2.0.0" -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1001,11 +921,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -1032,10 +947,10 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" -enhanced-resolve@^5.16.0: - version "5.16.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" - integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== +enhanced-resolve@^5.17.0: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -1077,7 +992,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@4.0.0: +escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -1239,14 +1154,6 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -1255,6 +1162,14 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -1270,14 +1185,6 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - format-util@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" @@ -1302,6 +1209,11 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-monkey@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1350,28 +1262,6 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^10.3.7: - version "10.4.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" - integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - path-scurry "^1.11.1" - glob@^7.1.3, glob@^7.1.7: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -1384,6 +1274,17 @@ glob@^7.1.3, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -1430,7 +1331,7 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -he@1.2.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -1445,7 +1346,7 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^2.4.0: +html-entities@^2.3.2: version "2.5.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== @@ -1506,11 +1407,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -hyperdyperid@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" - integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -1561,7 +1457,7 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.1.0: +ipaddr.js@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== @@ -1580,10 +1476,10 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" @@ -1602,18 +1498,6 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-network-error@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.1.0.tgz#d26a760e3770226d11c169052f266a4803d9c997" - integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1646,12 +1530,12 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: - is-inside-container "^1.0.0" + is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" @@ -1673,15 +1557,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jackspeak@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" - integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -1691,7 +1566,7 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -js-yaml@4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -1785,10 +1660,10 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -launch-editor@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" - integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== +launch-editor@^2.6.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.9.1.tgz#253f173bd441e342d4344b4dae58291abb425047" + integrity sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" @@ -1817,7 +1692,7 @@ lodash@^4.17.15, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -1836,25 +1711,17 @@ log4js@^6.4.1: rfdc "^1.3.0" streamroller "^3.1.5" -lru-cache@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^4.6.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.9.2.tgz#42e7b48207268dad8c9c48ea5d4952c5d3840433" - integrity sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ== +memfs@^3.4.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: - "@jsonjoy.com/json-pack" "^1.0.3" - "@jsonjoy.com/util" "^1.1.2" - sonic-forest "^1.0.0" - tslib "^2.0.0" + fs-monkey "^1.0.4" merge-descriptors@1.0.1: version "1.0.1" @@ -1911,13 +1778,6 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -1925,14 +1785,14 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: +minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.3, minimatch@^9.0.4: +minimatch@^9.0.3: version "9.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== @@ -1944,11 +1804,6 @@ minimist@^1.2.3, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -1956,31 +1811,31 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" - integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "8.1.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" +mocha@10.7.0: + version "10.7.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.0.tgz#9e5cbed8fa9b37537a25bd1f7fb4f6fc45458b9a" + integrity sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" ms@2.0.0: version "2.0.0" @@ -1992,7 +1847,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -2059,7 +1914,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1, on-finished@^2.4.1: +on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -2092,15 +1947,14 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^10.0.3: - version "10.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" - integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== +open@^8.0.9: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^3.1.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" p-limit@^2.2.0: version "2.3.0" @@ -2130,13 +1984,12 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-retry@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd" - integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA== +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: - "@types/retry" "0.12.2" - is-network-error "^1.0.0" + "@types/retry" "0.12.0" retry "^0.13.1" p-try@^2.0.0: @@ -2169,14 +2022,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -2350,18 +2195,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@^5.0.5: - version "5.0.7" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74" - integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg== - dependencies: - glob "^10.3.7" - -run-applescript@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" - integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -2386,7 +2219,7 @@ schema-utils@^3.1.1, schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0, schema-utils@^4.2.0: +schema-utils@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== @@ -2401,7 +2234,7 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.4.1: +selfsigned@^2.1.1: version "2.4.1" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== @@ -2428,14 +2261,7 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: +serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== @@ -2526,11 +2352,6 @@ signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - socket.io-adapter@~2.5.2: version "2.5.4" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006" @@ -2569,13 +2390,6 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -sonic-forest@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sonic-forest/-/sonic-forest-1.0.3.tgz#81363af60017daba39b794fce24627dc412563cb" - integrity sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ== - dependencies: - tree-dump "^1.0.0" - source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" @@ -2644,7 +2458,7 @@ streamroller@^3.1.5: debug "^4.3.4" fs-extra "^8.1.0" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2653,15 +2467,6 @@ streamroller@^3.1.5: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -2676,37 +2481,23 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@8.1.1, supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2714,6 +2505,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -2745,11 +2543,6 @@ terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" -thingies@^1.20.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" - integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -2777,16 +2570,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tree-dump@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.1.tgz#b448758da7495580e6b7830d6b7834fca4c45b96" - integrity sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA== - -tslib@^2.0.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -2795,10 +2578,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.4.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== ua-parser-js@^0.7.30: version "0.7.37" @@ -2899,53 +2682,52 @@ webpack-cli@5.1.4: rechoir "^0.8.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^7.1.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz#2af00538b6e4eda05f5afdd5d711dbebc05958f7" - integrity sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA== +webpack-dev-middleware@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== dependencies: colorette "^2.0.10" - memfs "^4.6.0" + memfs "^3.4.3" mime-types "^2.1.31" - on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz#cb6ea47ff796b9251ec49a94f24a425e12e3c9b8" - integrity sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA== - dependencies: - "@types/bonjour" "^3.5.13" - "@types/connect-history-api-fallback" "^1.5.4" - "@types/express" "^4.17.21" - "@types/serve-index" "^1.9.4" - "@types/serve-static" "^1.15.5" - "@types/sockjs" "^0.3.36" - "@types/ws" "^8.5.10" +webpack-dev-server@4.15.2: + version "4.15.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" + integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.5" ansi-html-community "^0.0.8" - bonjour-service "^1.2.1" - chokidar "^3.6.0" + bonjour-service "^1.0.11" + chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" - html-entities "^2.4.0" + html-entities "^2.3.2" http-proxy-middleware "^2.0.3" - ipaddr.js "^2.1.0" - launch-editor "^2.6.1" - open "^10.0.3" - p-retry "^6.2.0" - rimraf "^5.0.5" - schema-utils "^4.2.0" - selfsigned "^2.4.1" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^7.1.0" - ws "^8.16.0" + webpack-dev-middleware "^5.3.4" + ws "^8.13.0" webpack-merge@^4.1.5: version "4.2.2" @@ -2968,10 +2750,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.91.0: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== +webpack@5.93.0: + version "5.93.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5" + integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" @@ -2979,10 +2761,10 @@ webpack@5.91.0: "@webassemblyjs/wasm-edit" "^1.12.1" "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" + enhanced-resolve "^5.17.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" @@ -3039,12 +2821,12 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -3053,15 +2835,6 @@ workerpool@6.2.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -3072,10 +2845,10 @@ ws@8.5.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== -ws@^8.16.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" - integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== +ws@^8.13.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== ws@~8.11.0: version "8.11.0" @@ -3087,17 +2860,12 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@2.0.0: +yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== @@ -3107,7 +2875,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0, yargs@^16.1.1: +yargs@^16.1.1, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== diff --git a/settings.gradle.kts b/settings.gradle.kts index 7d123b78..99c08d13 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,6 +21,7 @@ rootProject.name = "compottie" include(":compottie") include(":compottie-dot") include(":compottie-network") +include(":compottie-network-core") include(":compottie-resources") include(":example:desktopApp") include(":example:webApp")