diff --git a/.fleet/settings.json b/.fleet/settings.json new file mode 100644 index 0000000..af76c34 --- /dev/null +++ b/.fleet/settings.json @@ -0,0 +1,3 @@ +{ + "backend.maxHeapSizeMb": 4096 +} \ No newline at end of file diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 2e5b5d2..b320253 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -16,5 +16,14 @@ jobs: java-version: 21 - name: Debug build run: ./gradlew assembleDebug --stacktrace + - name: API check + run: ./gradlew apiCheck - name: Unit test - run: ./gradlew testDebugUnitTest --stacktrace + run: ./gradlew allTests test --stacktrace + env: + IS_CI_TEST: yup + - name: Upload test results + uses: actions/upload-artifact@v4 + with: + name: test-results + path: '*/build/reports/tests' diff --git a/.gitignore b/.gitignore index 727c48c..0ba75ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.iml .gradle +.kotlin /local.properties /.idea .DS_Store diff --git a/README.md b/README.md index 1dcda5c..f6d3ed5 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,80 @@ # requireKTX -**requireKTX** is a collection of small utility functions to make it easier to deal with some otherwise nullable APIs on Android, using the same idea as [`requireContext`](https://developer.android.com/reference/androidx/fragment/app/Fragment.html#requireContext()), [`requireArguments`](https://developer.android.com/reference/androidx/fragment/app/Fragment.html#requireArguments()), and other similar Android SDK methods. +**requireKTX** is a collection of small utility functions to make it easier to work with **values that should always exist** on Android and Kotlin Multiplatform, in the style of [`requireContext`](https://developer.android.com/reference/androidx/fragment/app/Fragment.html#requireContext()), [`requireArguments`](https://developer.android.com/reference/androidx/fragment/app/Fragment.html#requireArguments()), and other similar Android SDK methods. Types that requireKTX provides extensions for: -- [Bundle](#bundle) -- [Intent](#intent) -- [NavBackStackEntry](#navbackstackentry) -- [WorkManager Data](#workmanager-data) +- [Bundle](#bundle) (Kotlin Multiplatform) +- [NavBackStackEntry](#navbackstackentry) (Kotlin Multiplatform) +- [Intent](#intent) (Android) +- [WorkManager Data](#workmanager-data) (Android) ## Why? -Take the example of grabbing a Fragment argument bundle and reading a String ID from it that should always be there: you have two choices, and none of them are great: +Take the example of grabbing a Bundle and reading a String ID from it that should always be there: the Bundle APIs give you a nullable result, which means you'll have to do some kind of null handling. ```kotlin -// Providing no default value -// Results in a nullable return type, caller has to do null handling -val id: String = requireArguments().getString("user_id")!! - -// Providing a (meaningless) default value -// Results in a platform return type, caller has to explicitly type as non-null -val id: String = requireArguments().getString("user_id", "") -if (id == "") { ... } // ... and check to avoid accidentally using the default value +// Without requireKTX 😥 +val id: String = argumentBundle.getString("user_id")!! ``` -requireKTX provides methods such as `requireString` so that you can demand that a value be there, or otherwise get an exception: +The exception potentially thrown by this code also won't be too helpful in tracking down the problem, as it won't tell you details such as whether the value was missing, or if it was the wrong type for the request. + +Another problem with Bundles is accessing primitive values, as they're always returned as non-nullable, defaulting to `0` (or even worse, `false` for Booleans) if the key is not found or its associated value has the wrong type: + +```kotlin +val bundle = Bundle() +bundle.putDouble("count", 123.0) + +// These both pass 😱 +assertEquals(0, bundle.getInt("count")) +assertEquals(0, bundle.getInt("score")) +``` + +This makes it difficult to know if what you received was a real `0` value, or if something silently went wrong. + +--- + +Instead of using these methods, requireKTX provides extensions such as `requireString`, which you can use to *require* a value that must always be there: ```kotlin -val id: String = requireArguments().requireString("user_id") +// With requireKTX 🥳 +val id: String = argumentBundle.requireString("user_id") +val count: Int = argumentBundle.requireInt("count") ``` -These methods in the library will throw meaningful exceptions based on the error that occurred - see the method docs for details. +These methods give you non-nullable return types. If the key isn't set or the value doesn't have the expected type, they throw meaningful exceptions based on the error that occurred. This is true for accessing primitive values as well. ### getOrNull -To make the nullable case more obvious and explicit, requireKTX **also includes `getOrNull` style methods for everything that it covers with `require` style methods**. These match the conventions of the Kotlin Standard Library, and can make it clearer that `null` is returned if a value for a key couldn't be fetched. +requireKTX **also includes `getOrNull` style methods for everything that it covers with `require` style methods**,to make the nullable case more obvious and explicit. These match the conventions of the Kotlin Standard Library, and can make it clearer that `null` is returned if a value for a key couldn't be fetched. ```kotlin val userId: String? = requireArguments().getStringOrNull("user_id") -``` +val count: Int? = requireArguments().getIntOrNull("count") +``` ## Dependencies -requireKTX is available from MavenCentral. +requireKTX is published on [Maven Central](https://repo1.maven.org/maven2/co/zsmb/). -```groovy +```kotlin repositories { mavenCentral() } ``` -It's available in several artifacts which you can import depending on which types you want to get extensions for - see the module descriptions below for more info: +There are several artifacts you can import depending on which types you want to get extensions for - see the module descriptions below to learn more. -```groovy +```kotlin dependencies { - implementation "co.zsmb:requirektx-bundle:1.2.0" - implementation "co.zsmb:requirektx-intent:1.2.0" - implementation "co.zsmb:requirektx-navigation:1.2.0" - implementation "co.zsmb:requirektx-work:1.2.0" + // commonMain or Android + implementation("co.zsmb:requirektx-bundle:2.0.0-alpha01") + implementation("co.zsmb:requirektx-navigation:2.0.0-alpha01") + + // Android only + implementation("co.zsmb:requirektx-intent:2.0.0-alpha01") + implementation("co.zsmb:requirektx-work:2.0.0-alpha01") } ``` @@ -65,9 +82,11 @@ dependencies { ### Bundle +*The `requirektx-bundle` artifact works with the `androidx.core.bundle.Bundle` type, available on Android and other Kotlin Multiplatform targets from `org.jetbrains.androidx.core:core-bundle`.* + Given a `Bundle`, you can require the following types of values: -``` +```kotlin // Primitives (examples) bundle.requireBoolean() bundle.requireByte() @@ -92,9 +111,36 @@ bundle.requireFloatArray() ... and many more! +### NavBackStackEntry + +*The `requirektx-navigation` artifact works with the `androidx.navigation.NavBackStackEntry` type, available on Android and other Kotlin Multiplatform targets from `org.jetbrains.androidx.navigation:navigation-runtime`.* + +*This is compatible with both the [Jetpack Navigation component on Android](https://developer.android.com/guide/navigation) (with or without Compose) and the [Compose Multiplatform navigation library](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-navigation-routing.html).* + +To get the bundle of arguments from an entry, use `requireArguments`: + +```kotlin +val args: Bundle = navBackStackEntry.requireArguments() +``` + +Here's an example of using this with Compose Navigation, in combination with the [Bundle extensions](#bundle): + +```kotlin +composable( + "detail/{objectId}", + arguments = listOf(navArgument("objectId") { type = NavType.IntType }), +) { backStackEntry -> + val args = backStackEntry.requireArguments() + val objectId = args.requireInt("objectId") + // UI implementation +} +``` + ### Intent -Given a `Intent`, you can require its extras `Bundle` (and then require values from it as seen above): +*The `requirektx-intent` artifact works with the [`android.content.Intent`](https://developer.android.com/reference/android/content/Intent) type, available on Android only.* + +Given an `Intent`, you can require its extras `Bundle` (and then require values from it as seen above): ```kotlin val extras: Bundle = intent.requireExtras() @@ -127,16 +173,10 @@ intent.requireFloatArrayExtra() ... and many more! -### NavBackStackEntry - -The navigation module provides an extension to require the arguments of a `NavBackStackEntry`, same as you could do for a `Fragment`: - -```kotlin -val args: Bundle = navBackStackEntry.requireArguments() -``` - ### WorkManager Data +*The `requirektx-work` artifact provides extensions for the [`androidx.work.Data`](https://developer.android.com/reference/androidx/work/Data) type, available on Android only.* + Given a WorkManager `Data` object (such as `inputData` inside a worker), you can require the following types of values: ```kotlin diff --git a/app/src/androidMain/kotlin/co/zsmb/requirektx/MainActivity.kt b/app/src/androidMain/kotlin/co/zsmb/requirektx/MainActivity.kt deleted file mode 100644 index 5cb38d2..0000000 --- a/app/src/androidMain/kotlin/co/zsmb/requirektx/MainActivity.kt +++ /dev/null @@ -1,11 +0,0 @@ -package co.zsmb.requirektx - -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle - -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - } -} diff --git a/app/src/androidMain/res/layout/activity_main.xml b/app/src/androidMain/res/layout/activity_main.xml deleted file mode 100644 index 4fc2444..0000000 --- a/app/src/androidMain/res/layout/activity_main.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/androidMain/res/values-night/themes.xml b/app/src/androidMain/res/values-night/themes.xml deleted file mode 100644 index 7f60004..0000000 --- a/app/src/androidMain/res/values-night/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/androidMain/res/values/colors.xml b/app/src/androidMain/res/values/colors.xml deleted file mode 100644 index f8c6127..0000000 --- a/app/src/androidMain/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/app/src/androidMain/res/values/strings.xml b/app/src/androidMain/res/values/strings.xml deleted file mode 100644 index 3245b7e..0000000 --- a/app/src/androidMain/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - RequireKTX - \ No newline at end of file diff --git a/app/src/androidMain/res/values/themes.xml b/app/src/androidMain/res/values/themes.xml deleted file mode 100644 index 2637047..0000000 --- a/app/src/androidMain/res/values/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 2cfbb20..5d54131 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -23,9 +23,13 @@ dependencies { gradlePlugin { plugins { - register("androidLibrary") { + register("library") { id = "co.zsmb.requirektx.library" - implementationClass = "AndroidLibraryConventionPlugin" + implementationClass = "KmpLibraryConventionPlugin" + } + register("publishing") { + id = "co.zsmb.requirektx.publishing" + implementationClass = "PublishingConventionPlugin" } } } diff --git a/build-logic/convention/src/main/kotlin/KmpLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KmpLibraryConventionPlugin.kt new file mode 100644 index 0000000..ad938ac --- /dev/null +++ b/build-logic/convention/src/main/kotlin/KmpLibraryConventionPlugin.kt @@ -0,0 +1,122 @@ +import com.android.build.gradle.LibraryExtension +import org.gradle.api.JavaVersion +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.* +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType + +class KmpLibraryConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("com.android.library") + apply("org.jetbrains.kotlin.multiplatform") + } + + configure { + // Create Kotlin Multiplatform targets + applyDefaultHierarchyTemplate() + when { + isAndroidOnly() -> configureAndroid() + isCiTest() -> configureCiTestTargets() + else -> configureAllTargets() + } + + // Create jbMain source set (all - android) + val commonMain by sourceSets.commonMain + val jbMain by sourceSets.creating { + dependsOn(commonMain) + } + targets.forEach { target -> + if (target.platformType !in listOf(KotlinPlatformType.androidJvm, KotlinPlatformType.common)) { + target.compilations.getByName("main").defaultSourceSet { + dependsOn(jbMain) + } + } + } + + // Create jbTest source set (all - android) + val commonTest by sourceSets.commonTest + val jbTest by sourceSets.creating { + dependsOn(commonTest) + } + targets.forEach { target -> + if (target.platformType !in listOf(KotlinPlatformType.androidJvm, KotlinPlatformType.common)) { + target.compilations.getByName("test").defaultSourceSet { + dependsOn(jbTest) + } + } + } + + // Compiler settings + explicitApi() + @OptIn(ExperimentalKotlinGradlePluginApi::class) + compilerOptions { + freeCompilerArgs.add("-progressive") + } + } + + configure { + compileSdk = 34 + defaultConfig { + minSdk = 21 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + } + } + } + + private fun KotlinMultiplatformExtension.configureAndroid() { + androidTarget { + publishLibraryVariants("release") + compilations.all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + } + } + } + + private fun KotlinMultiplatformExtension.configureCiTestTargets() { + configureAndroid() + jvm() + iosSimulatorArm64() + js { + browser() + nodejs() + } + macosArm64() + } + + private fun KotlinMultiplatformExtension.configureAllTargets() { + configureAndroid() + jvm() + iosArm64() + iosSimulatorArm64() + iosX64() + js { + browser() + nodejs() + } + linuxArm64() + linuxX64() + macosArm64() + macosX64() + tvosArm64() + tvosSimulatorArm64() + tvosX64() + wasmJs() + watchosArm32() + watchosArm64() + watchosSimulatorArm64() + watchosX64() + } + + private fun Project.isAndroidOnly() = hasProperty("android-only") + private fun Project.isCiTest() = System.getenv("IS_CI_TEST") != null || hasProperty("is-ci-test") +} diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/PublishingConventionPlugin.kt similarity index 55% rename from build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt rename to build-logic/convention/src/main/kotlin/PublishingConventionPlugin.kt index 348fe42..155dd81 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/PublishingConventionPlugin.kt @@ -1,51 +1,16 @@ -import com.android.build.gradle.LibraryExtension import com.vanniktech.maven.publish.MavenPublishBaseExtension import com.vanniktech.maven.publish.SonatypeHost -import org.gradle.api.JavaVersion import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.kotlin.dsl.configure -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.gradle.kotlin.dsl.* -class AndroidLibraryConventionPlugin : Plugin { +class PublishingConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("com.android.library") - apply("org.jetbrains.kotlin.multiplatform") apply("com.vanniktech.maven.publish") } - configure { - androidTarget { - publishLibraryVariants("release") - compilations.all { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() - } - } - } - - explicitApi() - - @OptIn(ExperimentalKotlinGradlePluginApi::class) - compilerOptions { - freeCompilerArgs.add("-progressive") - } - } - - configure { - compileSdk = 34 - defaultConfig { - minSdk = 21 - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - } - configure { publishToMavenCentral(SonatypeHost.DEFAULT) signAllPublications() @@ -53,7 +18,7 @@ class AndroidLibraryConventionPlugin : Plugin { pom { name.set("requireKTX") description.set("Kotlin utilities for easily grabbing required values") - inceptionYear.set("2020") + inceptionYear.set("2021") url.set("https://github.com/zsmb13/requireKTX") licenses { license { diff --git a/build.gradle.kts b/build.gradle.kts index 57a273d..a87c05b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,4 +3,16 @@ plugins { alias(libs.plugins.androidLibrary) apply false alias(libs.plugins.kotlinMultiplatform) apply false alias(libs.plugins.mavenPublish) apply false + alias(libs.plugins.binaryCompatValidator) +} + +apiValidation { + ignoredProjects += listOf( + "sample", + "requirektx-test-helper", + ) + klib { + enabled = true + strictValidation = true + } } diff --git a/gradle.properties b/gradle.properties index 9c0fdc2..4c27758 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,4 @@ kotlin.code.style=official # Publishing group=co.zsmb -version=1.3.0 +version=2.0.0-alpha01 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d30ed6c..e3ff620 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,39 +1,43 @@ [versions] +androidx-activityCompose = "1.9.0" agp = "8.2.2" androidTools = "31.4.0" -appcompat = "1.6.1" -constraintlayout = "2.1.4" -core-ktx = "1.13.1" +binary-compat-validator = "0.15.0-Beta.2" +compose-multiplatform = "1.6.10-rc03" +core-bundle = "1.0.0-rc03" junit = "4.13.2" -junit-jupiter-api = "5.9.2" -kotlin = "1.9.24" -material = "1.12.0" +junit-jupiter-api = "5.10.2" +kotlin = "2.0.0-RC3" maven-publish = "0.28.0" -navigation-runtime = "2.7.7" +navigationCompose = "2.7.0-alpha06" robolectric = "4.12.1" work-runtime = "2.9.0" [libraries] +androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" } android-gradle-plugin = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" } android-tools-common = { group = "com.android.tools", name = "common", version.ref = "androidTools" } -appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } -constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" } -core-ktx = { module = "androidx.core:core-ktx", version.ref = "core-ktx" } +core-bundle = { module = "org.jetbrains.androidx.core:core-bundle", version.ref = "core-bundle" } junit = { module = "junit:junit", version.ref = "junit" } junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit-jupiter-api" } junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit-jupiter-api" } junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit-jupiter-api" } kotlin-gradle-plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -material = { module = "com.google.android.material:material", version.ref = "material" } maven-publish = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "maven-publish" } -navigation-runtime = { module = "androidx.navigation:navigation-runtime", version.ref = "navigation-runtime" } +navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigationCompose" } +navigation-runtime = { module = "org.jetbrains.androidx.navigation:navigation-runtime", version.ref = "navigationCompose" } robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" } work-runtime = { module = "androidx.work:work-runtime", version.ref = "work-runtime" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } androidLibrary = { id = "com.android.library", version.ref = "agp" } +binaryCompatValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compat-validator" } +composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" } kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } mavenPublish = { id = "com.vanniktech.maven.publish", version.ref = "maven-publish" } + requireKtxLibrary = { id = "co.zsmb.requirektx.library", version = "unspecified" } +requireKtxPublishing = { id = "co.zsmb.requirektx.publishing", version = "unspecified" } diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock new file mode 100644 index 0000000..7466aac --- /dev/null +++ b/kotlin-js-store/yarn.lock @@ -0,0 +1,1996 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== + +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/cors@^2.8.12": + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/json-schema@*", "@types/json-schema@^7.0.8": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/node@*", "@types/node@>=10.0.0": + version "20.12.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" + integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== + dependencies: + undici-types "~5.26.4" + +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + 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@^8.7.1, acorn@^8.8.2: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + 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-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +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" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +body-parser@^1.19.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.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== + +browserslist@^4.21.10: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001587: + version "1.0.30001617" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz#809bc25f3f5027ceb33142a7d6c40759d7a901eb" + integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA== + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + 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: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +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== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== + +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.4, 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" + +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== + +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +di@^0.0.1: + version "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== + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.668: + version "1.4.762" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.762.tgz#c29c9d47cf7cc128a9c364baa28adbadde95a47c" + integrity sha512-rrFvGweLxPwwSwJOjIopy3Vr+J3cIPtZzuc74bmlvmBIgQO3VYJDvVrlj94iKZ3ukXUH64Ex31hSfRTLqvjYJQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +engine.io-parser@~5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" + integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== + +engine.io@~6.5.2: + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== + dependencies: + "@types/cookie" "^0.4.1" + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + 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== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== + +envinfo@^7.7.3: + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.2.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.2.tgz#00b423304f2500ac59359cc9b6844951f372d497" + integrity sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA== + +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-html@~1.0.3: + version "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: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + 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" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.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" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.7: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +follow-redirects@^1.0.0: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +format-util@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" + integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "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@^7.1.3, glob@^7.1.7: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +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== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.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== + dependencies: + argparse "^2.0.1" + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +karma-chrome-launcher@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9" + integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== + dependencies: + which "^1.2.1" + +karma-mocha@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" + integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== + dependencies: + minimist "^1.2.3" + +karma-sourcemap-loader@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz#b01d73f8f688f533bcc8f5d273d43458e13b5488" + integrity sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA== + dependencies: + graceful-fs "^4.2.10" + +karma-webpack@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.1.tgz#4eafd31bbe684a747a6e8f3e4ad373e53979ced4" + integrity sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ== + dependencies: + glob "^7.1.3" + minimatch "^9.0.3" + webpack-merge "^4.1.5" + +karma@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.3.tgz#763e500f99597218bbb536de1a14acc4ceea7ce8" + integrity sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q== + dependencies: + "@colors/colors" "1.5.0" + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.5.1" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + glob "^7.1.7" + graceful-fs "^4.2.6" + http-proxy "^1.18.1" + isbinaryfile "^4.0.8" + lodash "^4.17.21" + log4js "^6.4.1" + mime "^2.5.2" + minimatch "^3.0.4" + mkdirp "^0.5.5" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^4.7.2" + source-map "^0.6.1" + tmp "^0.2.1" + ua-parser-js "^0.7.30" + yargs "^16.1.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +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== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log4js@^6.4.1: + version "6.9.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + flatted "^3.2.7" + rfdc "^1.3.0" + streamroller "^3.1.5" + +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== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +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" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + 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: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + 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" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "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: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +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== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.20.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rfdc@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +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: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +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" + integrity sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg== + dependencies: + debug "~4.3.4" + ws "~8.11.0" + +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + +socket.io@^4.7.2: + version "4.7.5" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" + integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== + dependencies: + accepts "~1.3.4" + base64id "~2.0.0" + cors "~2.8.5" + debug "~4.3.2" + engine.io "~6.5.2" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" + +source-map-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== + dependencies: + iconv-lite "^0.6.3" + source-map-js "^1.0.2" + +source-map-support@0.5.21, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + fs-extra "^8.1.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== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.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-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" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + 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" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.26.0: + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +tmp@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + 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== + +ua-parser-js@^0.7.30: + version "0.7.37" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.37.tgz#e464e66dac2d33a7a1251d7d7a99d6157ec27832" + integrity sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.13: + version "1.0.15" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz#60ed9f8cba4a728b7ecf7356f641a31e3a691d97" + integrity sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +vary@^1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webpack-cli@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-merge@^4.1.5: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "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== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.16.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +which@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + 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== + +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== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + +y18n@^5.0.5: + version "5.0.8" + 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: + 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: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/requirektx-bundle/api/android/requirektx-bundle.api b/requirektx-bundle/api/android/requirektx-bundle.api new file mode 100644 index 0000000..9c66cb4 --- /dev/null +++ b/requirektx-bundle/api/android/requirektx-bundle.api @@ -0,0 +1,79 @@ +public final class co/zsmb/requirektx/BundleArrayListKt { + public static final fun getCharSequenceArrayListOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun getIntegerArrayListOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun getStringArrayListOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireCharSequenceArrayList (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireIntegerArrayList (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireStringArrayList (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; +} + +public final class co/zsmb/requirektx/BundleArrayList_androidKt { + public static final fun getParcelableArrayListOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireParcelableArrayList (Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; +} + +public final class co/zsmb/requirektx/BundleArraysKt { + public static final fun getBooleanArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[Z + public static final fun getByteArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[B + public static final fun getCharArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[C + public static final fun getCharSequenceArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/CharSequence; + public static final fun getDoubleArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[D + public static final fun getFloatArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[F + public static final fun getIntArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[I + public static final fun getLongArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[J + public static final fun getShortArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[S + public static final fun getStringArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/String; + public static final fun requireBooleanArray (Landroid/os/Bundle;Ljava/lang/String;)[Z + public static final fun requireByteArray (Landroid/os/Bundle;Ljava/lang/String;)[B + public static final fun requireCharArray (Landroid/os/Bundle;Ljava/lang/String;)[C + public static final fun requireCharSequenceArray (Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/CharSequence; + public static final fun requireDoubleArray (Landroid/os/Bundle;Ljava/lang/String;)[D + public static final fun requireFloatArray (Landroid/os/Bundle;Ljava/lang/String;)[F + public static final fun requireIntArray (Landroid/os/Bundle;Ljava/lang/String;)[I + public static final fun requireLongArray (Landroid/os/Bundle;Ljava/lang/String;)[J + public static final fun requireShortArray (Landroid/os/Bundle;Ljava/lang/String;)[S + public static final fun requireStringArray (Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/String; +} + +public final class co/zsmb/requirektx/BundleArrays_androidKt { + public static final fun getParcelableArrayOrNull (Landroid/os/Bundle;Ljava/lang/String;)[Landroid/os/Parcelable; + public static final fun requireParcelableArray (Landroid/os/Bundle;Ljava/lang/String;)[Landroid/os/Parcelable; +} + +public final class co/zsmb/requirektx/BundlePrimitivesKt { + public static final fun getBooleanOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Boolean; + public static final fun getByteOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Byte; + public static final fun getCharOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Character; + public static final fun getDoubleOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Double; + public static final fun getFloatOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Float; + public static final fun getIntOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Integer; + public static final fun getLongOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Long; + public static final fun getShortOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/Short; + public static final fun requireBoolean (Landroid/os/Bundle;Ljava/lang/String;)Z + public static final fun requireByte (Landroid/os/Bundle;Ljava/lang/String;)B + public static final fun requireChar (Landroid/os/Bundle;Ljava/lang/String;)C + public static final fun requireDouble (Landroid/os/Bundle;Ljava/lang/String;)D + public static final fun requireFloat (Landroid/os/Bundle;Ljava/lang/String;)F + public static final fun requireInt (Landroid/os/Bundle;Ljava/lang/String;)I + public static final fun requireLong (Landroid/os/Bundle;Ljava/lang/String;)J + public static final fun requireShort (Landroid/os/Bundle;Ljava/lang/String;)S +} + +public final class co/zsmb/requirektx/BundleReferenceKt { + public static final fun getBundleOrNull (Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/Bundle; + public static final fun getCharSequenceOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/CharSequence; + public static final fun getStringOrNull (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/String; + public static final fun requireBundle (Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/Bundle; + public static final fun requireCharSequence (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/CharSequence; + public static final fun requireString (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/String; +} + +public final class co/zsmb/requirektx/BundleReference_androidKt { + public static final fun getBinderOrNull (Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/Binder; + public static final fun getSizeFOrNull (Landroid/os/Bundle;Ljava/lang/String;)Landroid/util/SizeF; + public static final fun getSizeOrNull (Landroid/os/Bundle;Ljava/lang/String;)Landroid/util/Size; + public static final fun requireBinder (Landroid/os/Bundle;Ljava/lang/String;)Landroid/os/Binder; + public static final fun requireSize (Landroid/os/Bundle;Ljava/lang/String;)Landroid/util/Size; + public static final fun requireSizeF (Landroid/os/Bundle;Ljava/lang/String;)Landroid/util/SizeF; +} + diff --git a/requirektx-bundle/api/jvm/requirektx-bundle.api b/requirektx-bundle/api/jvm/requirektx-bundle.api new file mode 100644 index 0000000..26b6530 --- /dev/null +++ b/requirektx-bundle/api/jvm/requirektx-bundle.api @@ -0,0 +1,60 @@ +public final class co/zsmb/requirektx/BundleArrayListKt { + public static final fun getCharSequenceArrayListOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun getIntegerArrayListOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun getStringArrayListOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireCharSequenceArrayList (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireIntegerArrayList (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireStringArrayList (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/util/ArrayList; +} + +public final class co/zsmb/requirektx/BundleArraysKt { + public static final fun getBooleanArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[Z + public static final fun getByteArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[B + public static final fun getCharArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[C + public static final fun getCharSequenceArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[Ljava/lang/CharSequence; + public static final fun getDoubleArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[D + public static final fun getFloatArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[F + public static final fun getIntArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[I + public static final fun getLongArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[J + public static final fun getShortArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[S + public static final fun getStringArrayOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[Ljava/lang/String; + public static final fun requireBooleanArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[Z + public static final fun requireByteArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[B + public static final fun requireCharArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[C + public static final fun requireCharSequenceArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[Ljava/lang/CharSequence; + public static final fun requireDoubleArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[D + public static final fun requireFloatArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[F + public static final fun requireIntArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[I + public static final fun requireLongArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[J + public static final fun requireShortArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[S + public static final fun requireStringArray (Landroidx/core/bundle/Bundle;Ljava/lang/String;)[Ljava/lang/String; +} + +public final class co/zsmb/requirektx/BundlePrimitivesKt { + public static final fun getBooleanOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Boolean; + public static final fun getByteOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Byte; + public static final fun getCharOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Character; + public static final fun getDoubleOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Double; + public static final fun getFloatOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Float; + public static final fun getIntOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Integer; + public static final fun getLongOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Long; + public static final fun getShortOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/Short; + public static final fun requireBoolean (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Z + public static final fun requireByte (Landroidx/core/bundle/Bundle;Ljava/lang/String;)B + public static final fun requireChar (Landroidx/core/bundle/Bundle;Ljava/lang/String;)C + public static final fun requireDouble (Landroidx/core/bundle/Bundle;Ljava/lang/String;)D + public static final fun requireFloat (Landroidx/core/bundle/Bundle;Ljava/lang/String;)F + public static final fun requireInt (Landroidx/core/bundle/Bundle;Ljava/lang/String;)I + public static final fun requireLong (Landroidx/core/bundle/Bundle;Ljava/lang/String;)J + public static final fun requireShort (Landroidx/core/bundle/Bundle;Ljava/lang/String;)S +} + +public final class co/zsmb/requirektx/BundleReferenceKt { + public static final fun getBundleOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Landroidx/core/bundle/Bundle; + public static final fun getCharSequenceOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/CharSequence; + public static final fun getStringOrNull (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/String; + public static final fun requireBundle (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Landroidx/core/bundle/Bundle; + public static final fun requireCharSequence (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/CharSequence; + public static final fun requireString (Landroidx/core/bundle/Bundle;Ljava/lang/String;)Ljava/lang/String; +} + diff --git a/requirektx-bundle/api/requirektx-bundle.klib.api b/requirektx-bundle/api/requirektx-bundle.klib.api new file mode 100644 index 0000000..ce3aa82 --- /dev/null +++ b/requirektx-bundle/api/requirektx-bundle.klib.api @@ -0,0 +1,58 @@ +// Klib ABI Dump +// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, tvosArm64, tvosSimulatorArm64, tvosX64, wasmJs, watchosArm32, watchosArm64, watchosSimulatorArm64, watchosX64] +// Rendering settings: +// - Signature version: 2 +// - Show manifest properties: true +// - Show declarations: true + +// Library unique name: +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getBooleanArrayOrNull(kotlin/String): kotlin/BooleanArray? // co.zsmb.requirektx/getBooleanArrayOrNull|getBooleanArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getBooleanOrNull(kotlin/String): kotlin/Boolean? // co.zsmb.requirektx/getBooleanOrNull|getBooleanOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getBundleOrNull(kotlin/String): androidx.core.bundle/Bundle? // co.zsmb.requirektx/getBundleOrNull|getBundleOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getByteArrayOrNull(kotlin/String): kotlin/ByteArray? // co.zsmb.requirektx/getByteArrayOrNull|getByteArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getByteOrNull(kotlin/String): kotlin/Byte? // co.zsmb.requirektx/getByteOrNull|getByteOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getCharArrayOrNull(kotlin/String): kotlin/CharArray? // co.zsmb.requirektx/getCharArrayOrNull|getCharArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getCharOrNull(kotlin/String): kotlin/Char? // co.zsmb.requirektx/getCharOrNull|getCharOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getCharSequenceArrayListOrNull(kotlin/String): kotlin.collections/ArrayList? // co.zsmb.requirektx/getCharSequenceArrayListOrNull|getCharSequenceArrayListOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getCharSequenceArrayOrNull(kotlin/String): kotlin/Array? // co.zsmb.requirektx/getCharSequenceArrayOrNull|getCharSequenceArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getCharSequenceOrNull(kotlin/String): kotlin/CharSequence? // co.zsmb.requirektx/getCharSequenceOrNull|getCharSequenceOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getDoubleArrayOrNull(kotlin/String): kotlin/DoubleArray? // co.zsmb.requirektx/getDoubleArrayOrNull|getDoubleArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getDoubleOrNull(kotlin/String): kotlin/Double? // co.zsmb.requirektx/getDoubleOrNull|getDoubleOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getFloatArrayOrNull(kotlin/String): kotlin/FloatArray? // co.zsmb.requirektx/getFloatArrayOrNull|getFloatArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getFloatOrNull(kotlin/String): kotlin/Float? // co.zsmb.requirektx/getFloatOrNull|getFloatOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getIntArrayOrNull(kotlin/String): kotlin/IntArray? // co.zsmb.requirektx/getIntArrayOrNull|getIntArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getIntOrNull(kotlin/String): kotlin/Int? // co.zsmb.requirektx/getIntOrNull|getIntOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getIntegerArrayListOrNull(kotlin/String): kotlin.collections/ArrayList? // co.zsmb.requirektx/getIntegerArrayListOrNull|getIntegerArrayListOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getLongArrayOrNull(kotlin/String): kotlin/LongArray? // co.zsmb.requirektx/getLongArrayOrNull|getLongArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getLongOrNull(kotlin/String): kotlin/Long? // co.zsmb.requirektx/getLongOrNull|getLongOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getShortArrayOrNull(kotlin/String): kotlin/ShortArray? // co.zsmb.requirektx/getShortArrayOrNull|getShortArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getShortOrNull(kotlin/String): kotlin/Short? // co.zsmb.requirektx/getShortOrNull|getShortOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getStringArrayListOrNull(kotlin/String): kotlin.collections/ArrayList? // co.zsmb.requirektx/getStringArrayListOrNull|getStringArrayListOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getStringArrayOrNull(kotlin/String): kotlin/Array? // co.zsmb.requirektx/getStringArrayOrNull|getStringArrayOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/getStringOrNull(kotlin/String): kotlin/String? // co.zsmb.requirektx/getStringOrNull|getStringOrNull@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireBoolean(kotlin/String): kotlin/Boolean // co.zsmb.requirektx/requireBoolean|requireBoolean@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireBooleanArray(kotlin/String): kotlin/BooleanArray // co.zsmb.requirektx/requireBooleanArray|requireBooleanArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireBundle(kotlin/String): androidx.core.bundle/Bundle // co.zsmb.requirektx/requireBundle|requireBundle@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireByte(kotlin/String): kotlin/Byte // co.zsmb.requirektx/requireByte|requireByte@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireByteArray(kotlin/String): kotlin/ByteArray // co.zsmb.requirektx/requireByteArray|requireByteArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireChar(kotlin/String): kotlin/Char // co.zsmb.requirektx/requireChar|requireChar@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireCharArray(kotlin/String): kotlin/CharArray // co.zsmb.requirektx/requireCharArray|requireCharArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireCharSequence(kotlin/String): kotlin/CharSequence // co.zsmb.requirektx/requireCharSequence|requireCharSequence@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireCharSequenceArray(kotlin/String): kotlin/Array // co.zsmb.requirektx/requireCharSequenceArray|requireCharSequenceArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireCharSequenceArrayList(kotlin/String): kotlin.collections/ArrayList // co.zsmb.requirektx/requireCharSequenceArrayList|requireCharSequenceArrayList@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireDouble(kotlin/String): kotlin/Double // co.zsmb.requirektx/requireDouble|requireDouble@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireDoubleArray(kotlin/String): kotlin/DoubleArray // co.zsmb.requirektx/requireDoubleArray|requireDoubleArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireFloat(kotlin/String): kotlin/Float // co.zsmb.requirektx/requireFloat|requireFloat@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireFloatArray(kotlin/String): kotlin/FloatArray // co.zsmb.requirektx/requireFloatArray|requireFloatArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireInt(kotlin/String): kotlin/Int // co.zsmb.requirektx/requireInt|requireInt@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireIntArray(kotlin/String): kotlin/IntArray // co.zsmb.requirektx/requireIntArray|requireIntArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireIntegerArrayList(kotlin/String): kotlin.collections/ArrayList // co.zsmb.requirektx/requireIntegerArrayList|requireIntegerArrayList@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireLong(kotlin/String): kotlin/Long // co.zsmb.requirektx/requireLong|requireLong@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireLongArray(kotlin/String): kotlin/LongArray // co.zsmb.requirektx/requireLongArray|requireLongArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireShort(kotlin/String): kotlin/Short // co.zsmb.requirektx/requireShort|requireShort@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireShortArray(kotlin/String): kotlin/ShortArray // co.zsmb.requirektx/requireShortArray|requireShortArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireString(kotlin/String): kotlin/String // co.zsmb.requirektx/requireString|requireString@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireStringArray(kotlin/String): kotlin/Array // co.zsmb.requirektx/requireStringArray|requireStringArray@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireStringArrayList(kotlin/String): kotlin.collections/ArrayList // co.zsmb.requirektx/requireStringArrayList|requireStringArrayList@androidx.core.bundle.Bundle(kotlin.String){}[0] +final inline fun <#A: reified kotlin/Any> (androidx.core.bundle/Bundle).co.zsmb.requirektx/getOrNullImpl(kotlin/String): #A? // co.zsmb.requirektx/getOrNullImpl|getOrNullImpl@androidx.core.bundle.Bundle(kotlin.String){0§}[0] +final inline fun <#A: reified kotlin/Any> (androidx.core.bundle/Bundle).co.zsmb.requirektx/requireImpl(kotlin/String): #A // co.zsmb.requirektx/requireImpl|requireImpl@androidx.core.bundle.Bundle(kotlin.String){0§}[0] diff --git a/requirektx-bundle/build.gradle.kts b/requirektx-bundle/build.gradle.kts index e16c119..118f7d6 100644 --- a/requirektx-bundle/build.gradle.kts +++ b/requirektx-bundle/build.gradle.kts @@ -1,19 +1,23 @@ plugins { alias(libs.plugins.requireKtxLibrary) + alias(libs.plugins.requireKtxPublishing) } android.namespace = "co.zsmb.requirektx.bundle" kotlin { sourceSets { - commonMain.dependencies {} + commonMain.dependencies { + api(libs.core.bundle) + } commonTest.dependencies { implementation(libs.kotlin.test) + implementation(project(":requirektx-test-helper")) } val androidUnitTest by getting { dependencies { - implementation(libs.robolectric) implementation(libs.junit) + implementation(libs.robolectric) } } } diff --git a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrayList.android.kt b/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrayList.android.kt new file mode 100644 index 0000000..8670041 --- /dev/null +++ b/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrayList.android.kt @@ -0,0 +1,20 @@ +@file:Suppress("NOTHING_TO_INLINE") + +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import android.os.Parcelable + +/** + * Returns the value associated with the given key. + * + * @throws IllegalArgumentException if the key does not exist. + * @throws IllegalStateException if the stored value is of the wrong type. + */ +public inline fun Bundle.requireParcelableArrayList(key: String): ArrayList = requireImpl(key) + +/** + * Returns the value associated with the given key, or null if the key doesn't exist, + * or the stored value is of the wrong type. + */ +public inline fun Bundle.getParcelableArrayListOrNull(key: String): ArrayList? = getOrNullImpl(key) diff --git a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrays.android.kt b/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrays.android.kt new file mode 100644 index 0000000..67a2fe3 --- /dev/null +++ b/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrays.android.kt @@ -0,0 +1,35 @@ +@file:Suppress("NOTHING_TO_INLINE") + +package co.zsmb.requirektx + +import android.os.Parcelable +import android.util.SparseArray +import androidx.core.bundle.Bundle + +/** + * Returns the value associated with the given key. + * + * @throws IllegalArgumentException if the key does not exist. + * @throws IllegalStateException if the stored value is of the wrong type. + */ +public inline fun Bundle.requireParcelableArray(key: String): Array = requireImpl(key) + +/** + * Returns the value associated with the given key, or null if the key doesn't exist, + * or the stored value is of the wrong type. + */ +public inline fun Bundle.getParcelableArrayOrNull(key: String): Array? = getOrNullImpl(key) + +/** + * Returns the value associated with the given key. + * + * @throws IllegalArgumentException if the key does not exist. + * @throws IllegalStateException if the stored value is of the wrong type. + */ +public inline fun Bundle.requireSparseParcelableArray(key: String): SparseArray = requireImpl(key) + +/** + * Returns the value associated with the given key, or null if the key doesn't exist, + * or the stored value is of the wrong type. + */ +public inline fun Bundle.getSparseParcelableArrayOrNull(key: String): SparseArray? = getOrNullImpl(key) diff --git a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleReference.kt b/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleReference.android.kt similarity index 64% rename from requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleReference.kt rename to requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleReference.android.kt index d653187..b7d8947 100644 --- a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleReference.kt +++ b/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleReference.android.kt @@ -3,40 +3,12 @@ package co.zsmb.requirektx import android.os.Binder -import android.os.Bundle import android.os.Parcelable import android.util.Size import android.util.SizeF +import androidx.core.bundle.Bundle import java.io.Serializable -/** - * Returns the value associated with the given key. - * - * @throws IllegalArgumentException if the key does not exist. - * @throws IllegalStateException if the stored value is of the wrong type. - */ -public inline fun Bundle.requireString(key: String): String = requireImpl(key) - -/** - * Returns the value associated with the given key, or null if the key doesn't exist, - * or the stored value is of the wrong type. - */ -public inline fun Bundle.getStringOrNull(key: String): String? = getOrNullImpl(key) - -/** - * Returns the value associated with the given key. - * - * @throws IllegalArgumentException if the key does not exist. - * @throws IllegalStateException if the stored value is of the wrong type. - */ -public inline fun Bundle.requireCharSequence(key: String): CharSequence = requireImpl(key) - -/** - * Returns the value associated with the given key, or null if the key doesn't exist, - * or the stored value is of the wrong type. - */ -public inline fun Bundle.getCharSequenceOrNull(key: String): CharSequence? = getOrNullImpl(key) - /** * Returns the value associated with the given key. * @@ -106,18 +78,3 @@ public inline fun Bundle.requireBinder(key: String): Binder = requireImpl(key) * or the stored value is of the wrong type. */ public inline fun Bundle.getBinderOrNull(key: String): Binder? = getOrNullImpl(key) - -/** - * Returns the value associated with the given key. - * - * @throws IllegalArgumentException if the key does not exist. - * @throws IllegalStateException if the stored value is of the wrong type. - */ -public inline fun Bundle.requireBundle(key: String): Bundle = requireImpl(key) - -/** - * Returns the value associated with the given key, or null if the key doesn't exist, - * or the stored value is of the wrong type. - */ -public inline fun Bundle.getBundleOrNull(key: String): Bundle? = getOrNullImpl(key) - diff --git a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.kt b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.android.kt similarity index 98% rename from requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.kt rename to requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.android.kt index 0133b53..64cf2ef 100644 --- a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.kt +++ b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.android.kt @@ -2,7 +2,7 @@ package co.zsmb.requirektx import android.location.Location import android.net.Uri -import android.os.Bundle +import androidx.core.bundle.Bundle import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Test @@ -11,7 +11,7 @@ import org.robolectric.RobolectricTestRunner import java.util.ArrayList @RunWith(RobolectricTestRunner::class) -internal class BundleArrayListTest { +internal class BundleArrayListTestAndroid { // Parcelables private val testParcelable1: Uri diff --git a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArraysTest.kt b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArraysTest.android.kt similarity index 99% rename from requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArraysTest.kt rename to requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArraysTest.android.kt index fd83f0a..b6f5f38 100644 --- a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArraysTest.kt +++ b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleArraysTest.android.kt @@ -2,9 +2,8 @@ package co.zsmb.requirektx import android.location.Location import android.net.Uri -import android.os.Bundle +import androidx.core.bundle.Bundle import android.util.SparseArray -import org.junit.Assert import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertEquals import org.junit.Assert.assertThrows @@ -13,7 +12,7 @@ import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) -internal class BundleArraysTest { +internal class BundleArraysTestAndroid { // Parcelables private val testParcelable1: Uri diff --git a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.kt b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.android.kt similarity index 98% rename from requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.kt rename to requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.android.kt index e8be433..faf04bb 100644 --- a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.kt +++ b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.android.kt @@ -1,6 +1,6 @@ package co.zsmb.requirektx -import android.os.Bundle +import androidx.core.bundle.Bundle import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Test @@ -8,7 +8,7 @@ import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) -internal class BundlePrimitivesTest { +internal class BundlePrimitivesTestAndroid { private val testBundle = Bundle().apply { putBoolean("boolean", true) diff --git a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleReferenceTest.kt b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleReferenceTest.kt index ca58bb6..cb9e765 100644 --- a/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleReferenceTest.kt +++ b/requirektx-bundle/src/androidUnitTest/kotlin/co/zsmb/requirektx/BundleReferenceTest.kt @@ -3,12 +3,9 @@ package co.zsmb.requirektx import android.location.Location import android.net.Uri import android.os.Binder -import android.os.Bundle -import android.util.Size -import android.util.SizeF +import androidx.core.bundle.Bundle import org.junit.Assert.assertEquals import org.junit.Assert.assertThrows -import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @@ -16,7 +13,7 @@ import java.util.Calendar import java.util.UUID @RunWith(RobolectricTestRunner::class) -internal class BundleReferenceTest { +internal class BundleReferenceTestAndroid { // Parcelables private val testParcelable1: Uri diff --git a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrayList.kt b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleArrayList.kt similarity index 73% rename from requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrayList.kt rename to requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleArrayList.kt index c047326..5e4b589 100644 --- a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrayList.kt +++ b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleArrayList.kt @@ -2,8 +2,7 @@ package co.zsmb.requirektx -import android.os.Bundle -import android.os.Parcelable +import androidx.core.bundle.Bundle /** * Returns the value associated with the given key. @@ -19,20 +18,6 @@ public inline fun Bundle.requireIntegerArrayList(key: String): ArrayList = */ public inline fun Bundle.getIntegerArrayListOrNull(key: String): ArrayList? = getOrNullImpl(key) -/** - * Returns the value associated with the given key. - * - * @throws IllegalArgumentException if the key does not exist. - * @throws IllegalStateException if the stored value is of the wrong type. - */ -public inline fun Bundle.requireParcelableArrayList(key: String): ArrayList = requireImpl(key) - -/** - * Returns the value associated with the given key, or null if the key doesn't exist, - * or the stored value is of the wrong type. - */ -public inline fun Bundle.getParcelableArrayListOrNull(key: String): ArrayList? = getOrNullImpl(key) - /** * Returns the value associated with the given key. * diff --git a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrays.kt b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleArrays.kt similarity index 80% rename from requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrays.kt rename to requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleArrays.kt index bef15f2..04ce76c 100644 --- a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleArrays.kt +++ b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleArrays.kt @@ -2,11 +2,7 @@ package co.zsmb.requirektx -import android.content.Intent -import android.os.Bundle -import android.os.Parcelable -import android.util.SparseArray -import java.io.Serializable +import androidx.core.bundle.Bundle /** * Returns the value associated with the given key. @@ -147,31 +143,3 @@ public inline fun Bundle.requireCharSequenceArray(key: String): Array? = getOrNullImpl(key) - -/** - * Returns the value associated with the given key. - * - * @throws IllegalArgumentException if the key does not exist. - * @throws IllegalStateException if the stored value is of the wrong type. - */ -public inline fun Bundle.requireParcelableArray(key: String): Array = requireImpl(key) - -/** - * Returns the value associated with the given key, or null if the key doesn't exist, - * or the stored value is of the wrong type. - */ -public inline fun Bundle.getParcelableArrayOrNull(key: String): Array? = getOrNullImpl(key) - -/** - * Returns the value associated with the given key. - * - * @throws IllegalArgumentException if the key does not exist. - * @throws IllegalStateException if the stored value is of the wrong type. - */ -public inline fun Bundle.requireSparseParcelableArray(key: String): SparseArray = requireImpl(key) - -/** - * Returns the value associated with the given key, or null if the key doesn't exist, - * or the stored value is of the wrong type. - */ -public inline fun Bundle.getSparseParcelableArrayOrNull(key: String): SparseArray? = getOrNullImpl(key) diff --git a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleImpl.kt b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleImpl.kt similarity index 77% rename from requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleImpl.kt rename to requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleImpl.kt index 5f9a903..85239c9 100644 --- a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundleImpl.kt +++ b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleImpl.kt @@ -2,7 +2,7 @@ package co.zsmb.requirektx -import android.os.Bundle +import androidx.core.bundle.Bundle /** * Returns the value associated with the given key. @@ -12,9 +12,10 @@ import android.os.Bundle */ @PublishedApi internal inline fun Bundle.requireImpl(key: String): T { - if (key !in this) { + if (!this.containsKey(key)) { throw IllegalArgumentException("Bundle has no key $key") } + @Suppress("DEPRECATION") return get(key) as? T ?: throw IllegalStateException("Wrong type found in Bundle for key $key") } @@ -24,14 +25,9 @@ internal inline fun Bundle.requireImpl(key: String): T { */ @PublishedApi internal inline fun Bundle.getOrNullImpl(key: String): T? { - if (key !in this) { + if (!this.containsKey(key)) { return null } + @Suppress("DEPRECATION") return get(key) as? T? } - -/** - * Check if [this] Bundle contains the given [key]. - */ -@PublishedApi -internal inline operator fun Bundle.contains(key: String): Boolean = containsKey(key) diff --git a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundlePrimitives.kt b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundlePrimitives.kt similarity index 98% rename from requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundlePrimitives.kt rename to requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundlePrimitives.kt index 0b1fd85..4dd221f 100644 --- a/requirektx-bundle/src/androidMain/kotlin/co/zsmb/requirektx/BundlePrimitives.kt +++ b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundlePrimitives.kt @@ -2,9 +2,7 @@ package co.zsmb.requirektx -import android.os.Bundle -import java.io.Serializable -import android.os.Parcelable +import androidx.core.bundle.Bundle /** * Returns the value associated with the given key. diff --git a/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleReference.kt b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleReference.kt new file mode 100644 index 0000000..02b5eea --- /dev/null +++ b/requirektx-bundle/src/commonMain/kotlin/co/zsmb/requirektx/BundleReference.kt @@ -0,0 +1,48 @@ +@file:Suppress("NOTHING_TO_INLINE") + +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle + +/** + * Returns the value associated with the given key. + * + * @throws IllegalArgumentException if the key does not exist. + * @throws IllegalStateException if the stored value is of the wrong type. + */ +public inline fun Bundle.requireString(key: String): String = requireImpl(key) + +/** + * Returns the value associated with the given key, or null if the key doesn't exist, + * or the stored value is of the wrong type. + */ +public inline fun Bundle.getStringOrNull(key: String): String? = getOrNullImpl(key) + +/** + * Returns the value associated with the given key. + * + * @throws IllegalArgumentException if the key does not exist. + * @throws IllegalStateException if the stored value is of the wrong type. + */ +public inline fun Bundle.requireCharSequence(key: String): CharSequence = requireImpl(key) + +/** + * Returns the value associated with the given key, or null if the key doesn't exist, + * or the stored value is of the wrong type. + */ +public inline fun Bundle.getCharSequenceOrNull(key: String): CharSequence? = getOrNullImpl(key) + +/** + * Returns the value associated with the given key. + * + * @throws IllegalArgumentException if the key does not exist. + * @throws IllegalStateException if the stored value is of the wrong type. + */ +public inline fun Bundle.requireBundle(key: String): Bundle = requireImpl(key) + +/** + * Returns the value associated with the given key, or null if the key doesn't exist, + * or the stored value is of the wrong type. + */ +public inline fun Bundle.getBundleOrNull(key: String): Bundle? = getOrNullImpl(key) + diff --git a/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.kt b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.kt new file mode 100644 index 0000000..0544183 --- /dev/null +++ b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleArrayListTest.kt @@ -0,0 +1,45 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import kotlin.test.* + +class BundleArrayListTest : RoboTest() { + + private val testBundle = Bundle().apply { + putIntegerArrayList("int-arraylist", arrayListOf(1, 2, -3)) + putStringArrayList("string-arraylist", arrayListOf("a", "b", "c")) + + // Example for invalid types + putString("string", "a") + } + + @Test + fun testIntegerArrayList() { + assertEquals(arrayListOf(1, 2, -3), testBundle.getIntegerArrayListOrNull("int-arraylist")) + assertEquals(null, testBundle.getIntegerArrayListOrNull("string")) + assertEquals(null, testBundle.getIntegerArrayListOrNull("invalid")) + + assertEquals(arrayListOf(1, 2, -3), testBundle.requireIntegerArrayList("int-arraylist")) + assertFailsWith { + testBundle.requireIntegerArrayList("invalid") + } + assertFailsWith { + testBundle.requireIntegerArrayList("string") + } + } + + @Test + fun testStringArrayList() { + assertEquals(arrayListOf("a", "b", "c"), testBundle.getStringArrayListOrNull("string-arraylist")) + assertEquals(null, testBundle.getStringArrayListOrNull("string")) + assertEquals(null, testBundle.getStringArrayListOrNull("invalid")) + + assertEquals(arrayListOf("a", "b", "c"), testBundle.requireStringArrayList("string-arraylist")) + assertFailsWith { + testBundle.requireStringArrayList("invalid") + } + assertFailsWith { + testBundle.requireStringArrayList("string") + } + } +} diff --git a/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleArraysTest.kt b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleArraysTest.kt new file mode 100644 index 0000000..cfe1e80 --- /dev/null +++ b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleArraysTest.kt @@ -0,0 +1,182 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import kotlin.test.Test +import kotlin.test.assertContentEquals +import kotlin.test.assertFailsWith + +class BundleArraysTest : RoboTest() { + + private val testBundle = Bundle().apply { + putBooleanArray("boolean-array", booleanArrayOf(true, false, true)) + putByteArray("byte-array", byteArrayOf(1, 2, -3)) + putCharArray("char-array", charArrayOf('a', 'b', 'c')) + putDoubleArray("double-array", doubleArrayOf(1.0, 2.0, -3.0)) + putFloatArray("float-array", floatArrayOf(1f, 2f, -3f)) + putIntArray("int-array", intArrayOf(1, 2, -3)) + putLongArray("long-array", longArrayOf(1L, 2L, -3L)) + putShortArray("short-array", shortArrayOf(1, 2, -3)) + + putStringArray("string-array", arrayOf("a", "b", "c")) + putCharSequenceArray("charsequence-array", arrayOf("a" as CharSequence, "b" as CharSequence, "c" as CharSequence)) + + // Example for invalid types + putString("string", "a") + } + + @Test + fun testBooleanArray() { + assertContentEquals(booleanArrayOf(true, false, true), testBundle.getBooleanArrayOrNull("boolean-array")) + assertContentEquals(null, testBundle.getBooleanArrayOrNull("string")) + assertContentEquals(null, testBundle.getBooleanArrayOrNull("invalid")) + + assertContentEquals(booleanArrayOf(true, false, true), testBundle.requireBooleanArray("boolean-array")) + assertFailsWith { + testBundle.requireBooleanArray("invalid") + } + assertFailsWith { + testBundle.requireBooleanArray("string") + } + } + + @Test + fun testByteArray() { + assertContentEquals(byteArrayOf(1, 2, -3), testBundle.getByteArrayOrNull("byte-array")) + assertContentEquals(null, testBundle.getByteArrayOrNull("int-array")) + assertContentEquals(null, testBundle.getByteArrayOrNull("invalid")) + + assertContentEquals(byteArrayOf(1, 2, -3), testBundle.requireByteArray("byte-array")) + assertFailsWith { + testBundle.requireByteArray("invalid") + } + assertFailsWith { + testBundle.requireByteArray("string") + } + } + + @Test + fun testCharArray() { + assertContentEquals(charArrayOf('a', 'b', 'c'), testBundle.getCharArrayOrNull("char-array")) + assertContentEquals(null, testBundle.getCharArrayOrNull("string")) + assertContentEquals(null, testBundle.getCharArrayOrNull("invalid")) + + assertContentEquals(charArrayOf('a', 'b', 'c'), testBundle.requireCharArray("char-array")) + assertFailsWith { + testBundle.requireCharArray("invalid") + } + assertFailsWith { + testBundle.requireCharArray("string") + } + } + + @Test + fun testDoubleArray() { + assertContentEquals(doubleArrayOf(1.0, 2.0, -3.0), testBundle.getDoubleArrayOrNull("double-array")) + assertContentEquals(null, testBundle.getDoubleArrayOrNull("string")) + assertContentEquals(null, testBundle.getDoubleArrayOrNull("invalid")) + + assertContentEquals(doubleArrayOf(1.0, 2.0, -3.0), testBundle.requireDoubleArray("double-array")) + assertFailsWith { + testBundle.requireDoubleArray("invalid") + } + assertFailsWith { + testBundle.requireDoubleArray("string") + } + } + + @Test + fun testFloatArray() { + assertContentEquals(floatArrayOf(1f, 2f, -3f), testBundle.getFloatArrayOrNull("float-array")) + assertContentEquals(null, testBundle.getFloatArrayOrNull("string")) + assertContentEquals(null, testBundle.getFloatArrayOrNull("invalid")) + + assertContentEquals(floatArrayOf(1f, 2f, -3f), testBundle.requireFloatArray("float-array")) + assertFailsWith { + testBundle.requireFloatArray("invalid") + } + assertFailsWith { + testBundle.requireFloatArray("string") + } + } + + @Test + fun testIntArray() { + assertContentEquals(intArrayOf(1, 2, -3), testBundle.getIntArrayOrNull("int-array")) + assertContentEquals(null, testBundle.getIntArrayOrNull("string")) + assertContentEquals(null, testBundle.getIntArrayOrNull("invalid")) + + assertContentEquals(intArrayOf(1, 2, -3), testBundle.requireIntArray("int-array")) + assertFailsWith { + testBundle.requireIntArray("invalid") + } + assertFailsWith { + testBundle.requireIntArray("string") + } + } + + @Test + fun testLongArray() { + assertContentEquals(longArrayOf(1L, 2L, -3L), testBundle.getLongArrayOrNull("long-array")) + assertContentEquals(null, testBundle.getLongArrayOrNull("string")) + assertContentEquals(null, testBundle.getLongArrayOrNull("invalid")) + + assertContentEquals(longArrayOf(1L, 2L, -3L), testBundle.requireLongArray("long-array")) + assertFailsWith { + testBundle.requireLongArray("invalid") + } + assertFailsWith { + testBundle.requireLongArray("string") + } + } + + @Test + fun testShortArray() { + assertContentEquals(shortArrayOf(1, 2, -3), testBundle.getShortArrayOrNull("short-array")) + assertContentEquals(null, testBundle.getShortArrayOrNull("string")) + assertContentEquals(null, testBundle.getShortArrayOrNull("invalid")) + + assertContentEquals(shortArrayOf(1, 2, -3), testBundle.requireShortArray("short-array")) + assertFailsWith { + testBundle.requireShortArray("invalid") + } + assertFailsWith { + testBundle.requireShortArray("string") + } + } + + @Test + fun testStringArray() { + assertContentEquals(arrayOf("a", "b", "c"), testBundle.getStringArrayOrNull("string-array")) + assertContentEquals(null, testBundle.getStringArrayOrNull("string")) + assertContentEquals(null, testBundle.getStringArrayOrNull("invalid")) + + assertContentEquals(arrayOf("a", "b", "c"), testBundle.requireStringArray("string-array")) + assertFailsWith { + testBundle.requireStringArray("invalid") + } + assertFailsWith { + testBundle.requireStringArray("string") + } + } + + @Test + fun testCharSequenceArray() { + assertContentEquals( + arrayOf("a" as CharSequence, "b" as CharSequence, "c" as CharSequence), + testBundle.getCharSequenceArrayOrNull("charsequence-array") + ) + assertContentEquals(null, testBundle.getCharSequenceArrayOrNull("string")) + assertContentEquals(null, testBundle.getCharSequenceArrayOrNull("invalid")) + + assertContentEquals( + arrayOf("a" as CharSequence, "b" as CharSequence, "c" as CharSequence), + testBundle.requireCharSequenceArray("charsequence-array") + ) + assertFailsWith { + testBundle.requireCharSequenceArray("invalid") + } + assertFailsWith { + testBundle.requireCharSequenceArray("string") + } + } +} diff --git a/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.kt b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.kt new file mode 100644 index 0000000..d3c1b5a --- /dev/null +++ b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundlePrimitivesTest.kt @@ -0,0 +1,144 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +internal class BundlePrimitivesTest : RoboTest() { + + private val testBundle = Bundle().apply { + putBoolean("boolean", true) + putByte("byte", 1.toByte()) + putChar("char", 'a') + putDouble("double", 1.0) + putFloat("float", 1f) + putLong("long", 1L) + putInt("int", 1) + putShort("short", 1.toShort()) + + // Example for invalid types + putString("string", "a") + } + + @Test + fun testBoolean() { + assertEquals(true, testBundle.getBooleanOrNull("boolean")) + assertEquals(null, testBundle.getBooleanOrNull("string")) + assertEquals(null, testBundle.getBooleanOrNull("invalid")) + + assertEquals(true, testBundle.requireBoolean("boolean")) + assertFailsWith { + testBundle.requireBoolean("invalid") + } + assertFailsWith { + testBundle.requireBoolean("string") + } + } + + @Test + fun testByte() { + assertEquals(1.toByte(), testBundle.getByteOrNull("byte")) + assertEquals(null, testBundle.getByteOrNull("string")) + assertEquals(null, testBundle.getByteOrNull("invalid")) + + assertEquals(1.toByte(), testBundle.requireByte("byte")) + assertFailsWith { + testBundle.requireByte("invalid") + } + assertFailsWith { + testBundle.requireByte("string") + } + } + + @Test + fun testChar() { + assertEquals('a', testBundle.getCharOrNull("char")) + assertEquals(null, testBundle.getCharOrNull("string")) + assertEquals(null, testBundle.getCharOrNull("invalid")) + + assertEquals('a', testBundle.requireChar("char")) + assertFailsWith { + testBundle.requireChar("invalid") + } + assertFailsWith { + testBundle.requireChar("string") + } + } + + @Test + fun testDouble() { + assertEquals(1.0, testBundle.getDoubleOrNull("double")) + assertEquals(null, testBundle.getDoubleOrNull("string")) + assertEquals(null, testBundle.getDoubleOrNull("invalid")) + + assertEquals(1.0, testBundle.requireDouble("double"), 0.0) + assertFailsWith { + testBundle.requireDouble("invalid") + } + assertFailsWith { + testBundle.requireDouble("string") + } + } + + @Test + fun testFloat() { + assertEquals(1f, testBundle.getFloatOrNull("float")) + assertEquals(null, testBundle.getFloatOrNull("string")) + assertEquals(null, testBundle.getFloatOrNull("invalid")) + + assertEquals(1f, testBundle.requireFloat("float")) + assertFailsWith { + testBundle.requireFloat("invalid") + } + assertFailsWith { + testBundle.requireFloat("string") + } + } + + @Test + fun testInt() { + assertEquals(1, testBundle.getIntOrNull("int")) + assertEquals(null, testBundle.getIntOrNull("string")) + assertEquals(null, testBundle.getIntOrNull("invalid")) + + assertEquals(1, testBundle.requireInt("int")) + assertFailsWith { + testBundle.requireInt("invalid") + } + assertFailsWith { + testBundle.requireInt("string") + } + } + + @Test + fun testLong() { + assertEquals(1L, testBundle.getLongOrNull("long")) + assertEquals(null, testBundle.getLongOrNull("string")) + assertEquals(null, testBundle.getLongOrNull("invalid")) + + assertEquals(1L, testBundle.requireLong("long")) + assertFailsWith { + testBundle.requireLong("invalid") + } + assertFailsWith { + testBundle.requireLong("string") + } + } + + @Test + fun testShort() { + assertEquals(1.toShort(), testBundle.getShortOrNull("short")) + assertEquals(null, testBundle.getShortOrNull("string")) + assertEquals(null, testBundle.getShortOrNull("invalid")) + + assertEquals(1.toShort(), testBundle.requireShort("short")) + assertFailsWith { + testBundle.requireShort("invalid") + } + assertFailsWith { + testBundle.requireShort("string") + } + } + +} diff --git a/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleReferenceTest.kt b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleReferenceTest.kt new file mode 100644 index 0000000..5934920 --- /dev/null +++ b/requirektx-bundle/src/commonTest/kotlin/co/zsmb/requirektx/BundleReferenceTest.kt @@ -0,0 +1,70 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +class BundleReferenceTest : RoboTest() { + + private val testNestedBundle = Bundle().apply { putString("key", "value") } + + private val testBundle = Bundle().apply { + putString("string", "a") + putCharSequence("charsequence", "b" as CharSequence) + putBundle("bundle", testNestedBundle) + + // Produces a java.lang.NoSuchMethodError +// putBinder("binder", testBinder) +// putSize("size", Size(10, 20)) +// putSizeF("sizef", SizeF(30f, 40f)) + + // Example for invalid types + putInt("int", 1) + } + + @Test + fun testString() { + assertEquals("a", testBundle.getStringOrNull("string")) + assertEquals(null, testBundle.getStringOrNull("int")) + assertEquals(null, testBundle.getStringOrNull("invalid")) + + assertEquals("a", testBundle.requireString("string")) + assertFailsWith { + testBundle.requireString("invalid") + } + assertFailsWith { + testBundle.requireString("int") + } + } + + @Test + fun testCharSequence() { + assertEquals("b", testBundle.getCharSequenceOrNull("charsequence")) + assertEquals(null, testBundle.getCharSequenceOrNull("int")) + assertEquals(null, testBundle.getCharSequenceOrNull("invalid")) + + assertEquals("b", testBundle.requireCharSequence("charsequence")) + assertFailsWith { + testBundle.requireCharSequence("invalid") + } + assertFailsWith { + testBundle.requireCharSequence("int") + } + } + + @Test + fun testBundle() { + assertEquals(testNestedBundle, testBundle.getBundleOrNull("bundle")) + assertEquals(null, testBundle.getBundleOrNull("int")) + assertEquals(null, testBundle.getBundleOrNull("invalid")) + + assertEquals(testNestedBundle, testBundle.requireBundle("bundle")) + assertFailsWith { + testBundle.requireBundle("invalid") + } + assertFailsWith { + testBundle.requireBundle("int") + } + } +} diff --git a/requirektx-intent/api/requirektx-intent.api b/requirektx-intent/api/requirektx-intent.api new file mode 100644 index 0000000..2c7f548 --- /dev/null +++ b/requirektx-intent/api/requirektx-intent.api @@ -0,0 +1,68 @@ +public final class co/zsmb/requirektx/IntentExtrasArrayListKt { + public static final fun getCharSequenceArrayListExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun getIntegerArrayListExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun getParcelableArrayListExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun getStringArrayListExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireCharSequenceArrayListExtra (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireIntegerArrayListExtra (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireParcelableArrayListExtra (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; + public static final fun requireStringArrayListExtra (Landroid/content/Intent;Ljava/lang/String;)Ljava/util/ArrayList; +} + +public final class co/zsmb/requirektx/IntentExtrasArraysKt { + public static final fun getBooleanArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[Z + public static final fun getByteArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[B + public static final fun getCharArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[C + public static final fun getCharSequenceArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[Ljava/lang/CharSequence; + public static final fun getDoubleArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[D + public static final fun getFloatArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[F + public static final fun getIntArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[I + public static final fun getLongArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[J + public static final fun getParcelableArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[Landroid/os/Parcelable; + public static final fun getShortArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[S + public static final fun getStringArrayExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)[Ljava/lang/String; + public static final fun requireBooleanArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[Z + public static final fun requireByteArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[B + public static final fun requireCharArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[C + public static final fun requireCharSequenceArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[Ljava/lang/CharSequence; + public static final fun requireDoubleArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[D + public static final fun requireFloatArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[F + public static final fun requireIntArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[I + public static final fun requireLongArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[J + public static final fun requireParcelableArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[Landroid/os/Parcelable; + public static final fun requireShortArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[S + public static final fun requireStringArrayExtra (Landroid/content/Intent;Ljava/lang/String;)[Ljava/lang/String; +} + +public final class co/zsmb/requirektx/IntentExtrasPrimitivesKt { + public static final fun getBooleanExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Boolean; + public static final fun getByteExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Byte; + public static final fun getCharExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Character; + public static final fun getDoubleExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Double; + public static final fun getFloatExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Float; + public static final fun getIntExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Integer; + public static final fun getLongExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Long; + public static final fun getShortExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/Short; + public static final fun requireBooleanExtra (Landroid/content/Intent;Ljava/lang/String;)Z + public static final fun requireByteExtra (Landroid/content/Intent;Ljava/lang/String;)B + public static final fun requireCharExtra (Landroid/content/Intent;Ljava/lang/String;)C + public static final fun requireDoubleExtra (Landroid/content/Intent;Ljava/lang/String;)D + public static final fun requireFloatExtra (Landroid/content/Intent;Ljava/lang/String;)F + public static final fun requireIntExtra (Landroid/content/Intent;Ljava/lang/String;)I + public static final fun requireLongExtra (Landroid/content/Intent;Ljava/lang/String;)J + public static final fun requireShortExtra (Landroid/content/Intent;Ljava/lang/String;)S +} + +public final class co/zsmb/requirektx/IntentExtrasReferenceKt { + public static final fun getBundleExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Landroid/os/Bundle; + public static final fun getCharSequenceExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/CharSequence; + public static final fun getStringExtraOrNull (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/String; + public static final fun requireBundleExtra (Landroid/content/Intent;Ljava/lang/String;)Landroid/os/Bundle; + public static final fun requireCharSequenceExtra (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/CharSequence; + public static final fun requireStringExtra (Landroid/content/Intent;Ljava/lang/String;)Ljava/lang/String; +} + +public final class co/zsmb/requirektx/IntentKt { + public static final fun requireExtras (Landroid/content/Intent;)Landroid/os/Bundle; +} + diff --git a/requirektx-intent/build.gradle.kts b/requirektx-intent/build.gradle.kts index c945401..e549d86 100644 --- a/requirektx-intent/build.gradle.kts +++ b/requirektx-intent/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.requireKtxLibrary) + alias(libs.plugins.requireKtxPublishing) } android.namespace = "co.zsmb.requirektx.intent" diff --git a/requirektx-intent/gradle.properties b/requirektx-intent/gradle.properties new file mode 100644 index 0000000..6e6665c --- /dev/null +++ b/requirektx-intent/gradle.properties @@ -0,0 +1 @@ +android-only=true \ No newline at end of file diff --git a/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/Intent.kt b/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/Intent.kt index 74cef4e..dfd4621 100644 --- a/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/Intent.kt +++ b/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/Intent.kt @@ -3,7 +3,7 @@ package co.zsmb.requirektx import android.content.Intent -import android.os.Bundle +import androidx.core.bundle.Bundle /** * Returns the extras of [this] Intent. diff --git a/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentExtrasReference.kt b/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentExtrasReference.kt index 878319d..24e9a7d 100644 --- a/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentExtrasReference.kt +++ b/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentExtrasReference.kt @@ -3,7 +3,7 @@ package co.zsmb.requirektx import android.content.Intent -import android.os.Bundle +import androidx.core.bundle.Bundle import android.os.Parcelable import java.io.Serializable diff --git a/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentImpl.kt b/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentImpl.kt index 2bd4a90..9175bfc 100644 --- a/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentImpl.kt +++ b/requirektx-intent/src/androidMain/kotlin/co/zsmb/requirektx/IntentImpl.kt @@ -3,7 +3,7 @@ package co.zsmb.requirektx import android.content.Intent -import android.os.Bundle +import androidx.core.bundle.Bundle /** * Returns the value associated with the given key. @@ -15,9 +15,10 @@ import android.os.Bundle @PublishedApi internal inline fun Intent.requireExtraImpl(key: String): T { val extras = checkNotNull(extras) { "Intent has no extras" } - if (key !in extras) { + if (!extras.containsKey(key)) { throw IllegalArgumentException("Intent extras has no key $key") } + @Suppress("DEPRECATION") return extras[key] as? T ?: throw IllegalStateException("Wrong type found in Intent for key $key") } @@ -27,11 +28,6 @@ internal inline fun Intent.requireExtraImpl(key: String): T { */ @PublishedApi internal inline fun Intent.getExtraOrNullImpl(key: String): T? { + @Suppress("DEPRECATION") return extras?.get(key) as? T? } - -/** - * Check if [this] Bundle contains the given [key]. - */ -@PublishedApi -internal inline operator fun Bundle.contains(key: String): Boolean = containsKey(key) diff --git a/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasPrimitivesTest.kt b/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasPrimitivesTest.kt index 516d2b0..f3b7ba7 100644 --- a/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasPrimitivesTest.kt +++ b/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasPrimitivesTest.kt @@ -3,7 +3,7 @@ package co.zsmb.requirektx import android.content.Intent import android.location.Location import android.net.Uri -import android.os.Bundle +import androidx.core.bundle.Bundle import org.junit.Assert import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertEquals diff --git a/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasReferenceTest.kt b/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasReferenceTest.kt index 4aa603e..087cff4 100644 --- a/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasReferenceTest.kt +++ b/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentExtrasReferenceTest.kt @@ -3,7 +3,7 @@ package co.zsmb.requirektx import android.content.Intent import android.location.Location import android.net.Uri -import android.os.Bundle +import androidx.core.bundle.Bundle import org.junit.Assert.assertEquals import org.junit.Assert.assertThrows import org.junit.Test diff --git a/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentTest.kt b/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentTest.kt index b6a90ba..2ebda94 100644 --- a/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentTest.kt +++ b/requirektx-intent/src/androidUnitTest/kotlin/co/zsmb/requirektx/IntentTest.kt @@ -1,19 +1,10 @@ package co.zsmb.requirektx import android.content.Intent -import android.location.Location -import android.net.Uri -import android.os.Bundle -import org.junit.Assert -import org.junit.Assert.assertArrayEquals -import org.junit.Assert.assertEquals import org.junit.Assert.assertThrows import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import java.lang.Exception -import java.util.Calendar -import java.util.UUID @RunWith(RobolectricTestRunner::class) internal class IntentTest { diff --git a/requirektx-intent/src/commonMain/kotlin/co/zsmb/requirektx/Dummy.kt b/requirektx-intent/src/commonMain/kotlin/co/zsmb/requirektx/Dummy.kt new file mode 100644 index 0000000..3b007c0 --- /dev/null +++ b/requirektx-intent/src/commonMain/kotlin/co/zsmb/requirektx/Dummy.kt @@ -0,0 +1,2 @@ +package co.zsmb.requirektx + diff --git a/requirektx-navigation/api/android/requirektx-navigation.api b/requirektx-navigation/api/android/requirektx-navigation.api new file mode 100644 index 0000000..ba524a1 --- /dev/null +++ b/requirektx-navigation/api/android/requirektx-navigation.api @@ -0,0 +1,4 @@ +public final class co/zsmb/requirektx/NavBackStackEntryKt { + public static final fun requireArguments (Landroidx/navigation/NavBackStackEntry;)Landroid/os/Bundle; +} + diff --git a/requirektx-navigation/api/jvm/requirektx-navigation.api b/requirektx-navigation/api/jvm/requirektx-navigation.api new file mode 100644 index 0000000..6dc5e59 --- /dev/null +++ b/requirektx-navigation/api/jvm/requirektx-navigation.api @@ -0,0 +1,4 @@ +public final class co/zsmb/requirektx/NavBackStackEntryKt { + public static final fun requireArguments (Landroidx/navigation/NavBackStackEntry;)Landroidx/core/bundle/Bundle; +} + diff --git a/requirektx-navigation/api/requirektx-navigation.klib.api b/requirektx-navigation/api/requirektx-navigation.klib.api new file mode 100644 index 0000000..7b9339a --- /dev/null +++ b/requirektx-navigation/api/requirektx-navigation.klib.api @@ -0,0 +1,9 @@ +// Klib ABI Dump +// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, tvosArm64, tvosSimulatorArm64, tvosX64, wasmJs, watchosArm32, watchosArm64, watchosSimulatorArm64, watchosX64] +// Rendering settings: +// - Signature version: 2 +// - Show manifest properties: true +// - Show declarations: true + +// Library unique name: +final inline fun (androidx.navigation/NavBackStackEntry).co.zsmb.requirektx/requireArguments(): androidx.core.bundle/Bundle // co.zsmb.requirektx/requireArguments|requireArguments@androidx.navigation.NavBackStackEntry(){}[0] diff --git a/requirektx-navigation/build.gradle.kts b/requirektx-navigation/build.gradle.kts index 5c8f949..4e568ef 100644 --- a/requirektx-navigation/build.gradle.kts +++ b/requirektx-navigation/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.requireKtxLibrary) + alias(libs.plugins.requireKtxPublishing) } android.namespace = "co.zsmb.requirektx.navigation" @@ -8,18 +9,11 @@ kotlin { sourceSets { commonMain.dependencies { api(project(":requirektx-bundle")) + implementation(libs.navigation.runtime) } commonTest.dependencies { implementation(libs.kotlin.test) - } - androidMain.dependencies { - implementation(libs.navigation.runtime) - } - val androidUnitTest by getting { - dependencies { - implementation(libs.robolectric) - implementation(libs.junit) - } + implementation(project(":requirektx-test-helper")) } } } diff --git a/requirektx-navigation/src/androidUnitTest/kotlin/co/zsmb/requirektx/CreateEntry.android.kt b/requirektx-navigation/src/androidUnitTest/kotlin/co/zsmb/requirektx/CreateEntry.android.kt new file mode 100644 index 0000000..68f75a8 --- /dev/null +++ b/requirektx-navigation/src/androidUnitTest/kotlin/co/zsmb/requirektx/CreateEntry.android.kt @@ -0,0 +1,13 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import androidx.navigation.NavBackStackEntry +import androidx.navigation.NavDestination + +actual fun createNavBackstackEntry( + arguments: Bundle? +): NavBackStackEntry = NavBackStackEntry.create( + context = null, + destination = NavDestination(""), + arguments = arguments +) diff --git a/requirektx-navigation/src/androidMain/java/co/zsmb/requirektx/NavBackStackEntry.kt b/requirektx-navigation/src/commonMain/kotlin/co/zsmb/requirektx/NavBackStackEntry.kt similarity index 92% rename from requirektx-navigation/src/androidMain/java/co/zsmb/requirektx/NavBackStackEntry.kt rename to requirektx-navigation/src/commonMain/kotlin/co/zsmb/requirektx/NavBackStackEntry.kt index 54e1655..0ec5325 100644 --- a/requirektx-navigation/src/androidMain/java/co/zsmb/requirektx/NavBackStackEntry.kt +++ b/requirektx-navigation/src/commonMain/kotlin/co/zsmb/requirektx/NavBackStackEntry.kt @@ -2,7 +2,7 @@ package co.zsmb.requirektx -import android.os.Bundle +import androidx.core.bundle.Bundle import androidx.navigation.NavBackStackEntry /** diff --git a/requirektx-navigation/src/commonTest/kotlin/co/zsmb/requirektx/CreateEntry.kt b/requirektx-navigation/src/commonTest/kotlin/co/zsmb/requirektx/CreateEntry.kt new file mode 100644 index 0000000..0204f8e --- /dev/null +++ b/requirektx-navigation/src/commonTest/kotlin/co/zsmb/requirektx/CreateEntry.kt @@ -0,0 +1,6 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import androidx.navigation.NavBackStackEntry + +expect fun createNavBackstackEntry(arguments: Bundle?): NavBackStackEntry diff --git a/requirektx-navigation/src/commonTest/kotlin/co/zsmb/requirektx/NavBackStackEntryTest.kt b/requirektx-navigation/src/commonTest/kotlin/co/zsmb/requirektx/NavBackStackEntryTest.kt new file mode 100644 index 0000000..2ff4477 --- /dev/null +++ b/requirektx-navigation/src/commonTest/kotlin/co/zsmb/requirektx/NavBackStackEntryTest.kt @@ -0,0 +1,35 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +class NavBackStackEntryTest : RoboTest() { + @Test + fun testMissingArgs() { + val entry = createNavBackstackEntry(arguments = null) + + assertFailsWith { + entry.requireArguments() + } + } + + @Test + fun testPresentArgs() { + val argBundle = Bundle().apply { + putString("hello", "world") + putInt("answer", 42) + } + + val entry = createNavBackstackEntry(arguments = argBundle) + + val args = entry.requireArguments() + + assertEquals(argBundle.keySet(), args.keySet()) + argBundle.keySet().forEach { key -> + @Suppress("DEPRECATION") + assertEquals(argBundle[key], args[key]) + } + } +} diff --git a/requirektx-navigation/src/jbTest/kotlin/co/zsmb/requirektx/CreateEntry.jbtest.kt b/requirektx-navigation/src/jbTest/kotlin/co/zsmb/requirektx/CreateEntry.jbtest.kt new file mode 100644 index 0000000..e7b1630 --- /dev/null +++ b/requirektx-navigation/src/jbTest/kotlin/co/zsmb/requirektx/CreateEntry.jbtest.kt @@ -0,0 +1,12 @@ +package co.zsmb.requirektx + +import androidx.core.bundle.Bundle +import androidx.navigation.NavBackStackEntry +import androidx.navigation.NavDestination + +actual fun createNavBackstackEntry( + arguments: Bundle? +): NavBackStackEntry = NavBackStackEntry.create( + destination = NavDestination(""), + arguments = arguments +) diff --git a/app/.gitignore b/requirektx-test-helper/.gitignore similarity index 100% rename from app/.gitignore rename to requirektx-test-helper/.gitignore diff --git a/requirektx-test-helper/build.gradle.kts b/requirektx-test-helper/build.gradle.kts new file mode 100644 index 0000000..f3b69e3 --- /dev/null +++ b/requirektx-test-helper/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + alias(libs.plugins.requireKtxLibrary) +} + +android.namespace = "co.zsmb.requirektx.bundle" + +kotlin { + sourceSets { + androidMain.dependencies { + implementation(libs.robolectric) + implementation(libs.junit) + } + } +} diff --git a/requirektx-test-helper/src/androidMain/kotlin/co/zsmb/requirektx/RoboTest.android.kt b/requirektx-test-helper/src/androidMain/kotlin/co/zsmb/requirektx/RoboTest.android.kt new file mode 100644 index 0000000..3f96e2e --- /dev/null +++ b/requirektx-test-helper/src/androidMain/kotlin/co/zsmb/requirektx/RoboTest.android.kt @@ -0,0 +1,8 @@ +package co.zsmb.requirektx + +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner + +@RunWith(RobolectricTestRunner::class) +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +public actual abstract class RoboTest diff --git a/requirektx-test-helper/src/commonMain/kotlin/co/zsmb/requirektx/RoboTest.kt b/requirektx-test-helper/src/commonMain/kotlin/co/zsmb/requirektx/RoboTest.kt new file mode 100644 index 0000000..7934bb2 --- /dev/null +++ b/requirektx-test-helper/src/commonMain/kotlin/co/zsmb/requirektx/RoboTest.kt @@ -0,0 +1,4 @@ +package co.zsmb.requirektx + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +public expect abstract class RoboTest() diff --git a/requirektx-test-helper/src/jbMain/kotlin/co/zsmb/requirektx/RoboTest.jbMain.kt b/requirektx-test-helper/src/jbMain/kotlin/co/zsmb/requirektx/RoboTest.jbMain.kt new file mode 100644 index 0000000..eaacee3 --- /dev/null +++ b/requirektx-test-helper/src/jbMain/kotlin/co/zsmb/requirektx/RoboTest.jbMain.kt @@ -0,0 +1,4 @@ +package co.zsmb.requirektx + +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +public actual abstract class RoboTest diff --git a/requirektx-work/api/requirektx-work.api b/requirektx-work/api/requirektx-work.api new file mode 100644 index 0000000..184d7f4 --- /dev/null +++ b/requirektx-work/api/requirektx-work.api @@ -0,0 +1,34 @@ +public final class co/zsmb/requirektx/DataArraysKt { + public static final fun getBooleanArrayOrNull (Landroidx/work/Data;Ljava/lang/String;)[Z + public static final fun getByteArrayOrNull (Landroidx/work/Data;Ljava/lang/String;)[B + public static final fun getDoubleArrayOrNull (Landroidx/work/Data;Ljava/lang/String;)[D + public static final fun getFloatArrayOrNull (Landroidx/work/Data;Ljava/lang/String;)[F + public static final fun getIntArrayOrNull (Landroidx/work/Data;Ljava/lang/String;)[I + public static final fun getLongArrayOrNull (Landroidx/work/Data;Ljava/lang/String;)[J + public static final fun getStringArrayOrNull (Landroidx/work/Data;Ljava/lang/String;)[Ljava/lang/String; + public static final fun requireBooleanArray (Landroidx/work/Data;Ljava/lang/String;)[Z + public static final fun requireByteArray (Landroidx/work/Data;Ljava/lang/String;)[B + public static final fun requireDoubleArray (Landroidx/work/Data;Ljava/lang/String;)[D + public static final fun requireFloatArray (Landroidx/work/Data;Ljava/lang/String;)[F + public static final fun requireIntArray (Landroidx/work/Data;Ljava/lang/String;)[I + public static final fun requireLongArray (Landroidx/work/Data;Ljava/lang/String;)[J + public static final fun requireStringArray (Landroidx/work/Data;Ljava/lang/String;)[Ljava/lang/String; +} + +public final class co/zsmb/requirektx/DataValuesKt { + public static final fun getBooleanOrNull (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/Boolean; + public static final fun getByteOrNull (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/Byte; + public static final fun getDoubleOrNull (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/Double; + public static final fun getFloatOrNull (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/Float; + public static final fun getIntOrNull (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/Integer; + public static final fun getLongOrNull (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/Long; + public static final fun getStringOrNull (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/String; + public static final fun requireBoolean (Landroidx/work/Data;Ljava/lang/String;)Z + public static final fun requireByte (Landroidx/work/Data;Ljava/lang/String;)B + public static final fun requireDouble (Landroidx/work/Data;Ljava/lang/String;)D + public static final fun requireFloat (Landroidx/work/Data;Ljava/lang/String;)F + public static final fun requireInt (Landroidx/work/Data;Ljava/lang/String;)I + public static final fun requireLong (Landroidx/work/Data;Ljava/lang/String;)J + public static final fun requireString (Landroidx/work/Data;Ljava/lang/String;)Ljava/lang/String; +} + diff --git a/requirektx-work/build.gradle.kts b/requirektx-work/build.gradle.kts index 57b91d6..3bc6bb4 100644 --- a/requirektx-work/build.gradle.kts +++ b/requirektx-work/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.requireKtxLibrary) + alias(libs.plugins.requireKtxPublishing) } android.namespace = "co.zsmb.requirektx.work" diff --git a/requirektx-work/gradle.properties b/requirektx-work/gradle.properties new file mode 100644 index 0000000..6e6665c --- /dev/null +++ b/requirektx-work/gradle.properties @@ -0,0 +1 @@ +android-only=true \ No newline at end of file diff --git a/requirektx-work/src/commonMain/kotlin/co/zsmb/requirektx/Dummy.kt b/requirektx-work/src/commonMain/kotlin/co/zsmb/requirektx/Dummy.kt new file mode 100644 index 0000000..3b007c0 --- /dev/null +++ b/requirektx-work/src/commonMain/kotlin/co/zsmb/requirektx/Dummy.kt @@ -0,0 +1,2 @@ +package co.zsmb.requirektx + diff --git a/sample/.gitignore b/sample/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/sample/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/sample/build.gradle.kts similarity index 62% rename from app/build.gradle.kts rename to sample/build.gradle.kts index 2083f13..a3d021a 100644 --- a/app/build.gradle.kts +++ b/sample/build.gradle.kts @@ -1,6 +1,8 @@ plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidApplication) + alias(libs.plugins.composeCompiler) + alias(libs.plugins.composeMultiplatform) } kotlin { @@ -11,18 +13,32 @@ kotlin { } } } + + jvm("desktop") sourceSets { - androidMain.dependencies { - implementation(libs.core.ktx) - implementation(libs.appcompat) - implementation(libs.material) - implementation(libs.constraintlayout) + val desktopMain by getting + + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation(compose.ui) + implementation(compose.components.uiToolingPreview) + + implementation(libs.navigation.compose) implementation(project(":requirektx-bundle")) - implementation(project(":requirektx-intent")) implementation(project(":requirektx-navigation")) + } + androidMain.dependencies { + implementation(project(":requirektx-intent")) implementation(project(":requirektx-work")) + + implementation(libs.androidx.activity.compose) + } + desktopMain.dependencies { + implementation(compose.desktop.currentOs) } } } @@ -57,3 +73,9 @@ android { } } } + +compose.desktop { + application { + mainClass = "co.zsmb.requirektx.MainKt" + } +} diff --git a/app/src/androidMain/AndroidManifest.xml b/sample/src/androidMain/AndroidManifest.xml similarity index 88% rename from app/src/androidMain/AndroidManifest.xml rename to sample/src/androidMain/AndroidManifest.xml index f361bd9..4f38971 100644 --- a/app/src/androidMain/AndroidManifest.xml +++ b/sample/src/androidMain/AndroidManifest.xml @@ -7,12 +7,12 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.RequireKTX"> + android:theme="@android:style/Theme.Material.Light.NoActionBar"> - + - + diff --git a/sample/src/androidMain/kotlin/co/zsmb/requirektx/MainActivity.kt b/sample/src/androidMain/kotlin/co/zsmb/requirektx/MainActivity.kt new file mode 100644 index 0000000..ef1b66e --- /dev/null +++ b/sample/src/androidMain/kotlin/co/zsmb/requirektx/MainActivity.kt @@ -0,0 +1,14 @@ +package co.zsmb.requirektx + +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.core.bundle.Bundle + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + App() + } + } +} diff --git a/app/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml b/sample/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from app/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml rename to sample/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml diff --git a/app/src/androidMain/res/drawable/ic_launcher_background.xml b/sample/src/androidMain/res/drawable/ic_launcher_background.xml similarity index 100% rename from app/src/androidMain/res/drawable/ic_launcher_background.xml rename to sample/src/androidMain/res/drawable/ic_launcher_background.xml diff --git a/app/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from app/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml rename to sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/app/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from app/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/app/src/androidMain/res/mipmap-hdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from app/src/androidMain/res/mipmap-hdpi/ic_launcher.png rename to sample/src/androidMain/res/mipmap-hdpi/ic_launcher.png diff --git a/app/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from app/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png rename to sample/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png diff --git a/app/src/androidMain/res/mipmap-mdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from app/src/androidMain/res/mipmap-mdpi/ic_launcher.png rename to sample/src/androidMain/res/mipmap-mdpi/ic_launcher.png diff --git a/app/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from app/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png rename to sample/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png diff --git a/app/src/androidMain/res/mipmap-xhdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from app/src/androidMain/res/mipmap-xhdpi/ic_launcher.png rename to sample/src/androidMain/res/mipmap-xhdpi/ic_launcher.png diff --git a/app/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from app/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png rename to sample/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/app/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from app/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png rename to sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png diff --git a/app/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png rename to sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/app/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from app/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png rename to sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/app/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png rename to sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/sample/src/androidMain/res/values/strings.xml b/sample/src/androidMain/res/values/strings.xml new file mode 100644 index 0000000..4050a93 --- /dev/null +++ b/sample/src/androidMain/res/values/strings.xml @@ -0,0 +1,3 @@ + + requireKTX sample + \ No newline at end of file diff --git a/sample/src/commonMain/kotlin/co/zsmb/requirektx/App.kt b/sample/src/commonMain/kotlin/co/zsmb/requirektx/App.kt new file mode 100644 index 0000000..3b5a573 --- /dev/null +++ b/sample/src/commonMain/kotlin/co/zsmb/requirektx/App.kt @@ -0,0 +1,94 @@ +package co.zsmb.requirektx + +import androidx.compose.foundation.layout.* +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.navigation.NavHostController +import androidx.navigation.compose.* +import androidx.compose.ui.unit.sp +import androidx.navigation.NavType +import androidx.navigation.navArgument +import org.jetbrains.compose.ui.tooling.preview.Preview + +@Composable +fun App() { + val navController: NavHostController = rememberNavController() + NavHost( + navController, + startDestination = "home" + ) { + composable("home") { + Home(onSelectNumber = { number -> navController.navigate("detail/$number") }) + } + composable( + "detail/{param}", + arguments = listOf(navArgument("param") { type = NavType.IntType }), + ) { backStackEntry -> + val args = backStackEntry.requireArguments() + val number = args.requireInt("param") + Detail(number = number, onNavigateBack = { navController.popBackStack() }) + } + } +} + +@Composable +@Preview +fun DetailPreview() { + Detail(42, {}) +} + +@Composable +fun Detail(number: Int, onNavigateBack: () -> Unit) { + Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + IconButton(onClick = { onNavigateBack() }, modifier = Modifier.align(Alignment.TopStart)) { + Icon(Icons.AutoMirrored.Default.ArrowBack, "Back") + } + Text("Your number was $number", fontSize = 20.sp) + } +} + +@Composable +@Preview +fun HomePreview() { + Home(onSelectNumber = {}) +} + +@Preview +@Composable +fun Home(onSelectNumber: (Int) -> Unit) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text("Enter a number", fontSize = 24.sp) + + Spacer(Modifier.height(20.dp)) + + var inputState by remember { mutableStateOf("") } + val number = inputState.toIntOrNull() + + TextField( + value = inputState, + onValueChange = { inputState = it }, + ) + + Spacer(Modifier.height(20.dp)) + + Button( + onClick = { onSelectNumber(number!!) }, + enabled = number != null, + ) { + Text("Send") + } + } +} + diff --git a/sample/src/desktopMain/kotlin/co/zsmb/requirektx/Main.kt b/sample/src/desktopMain/kotlin/co/zsmb/requirektx/Main.kt new file mode 100644 index 0000000..475c85d --- /dev/null +++ b/sample/src/desktopMain/kotlin/co/zsmb/requirektx/Main.kt @@ -0,0 +1,13 @@ +package co.zsmb.requirektx + +import androidx.compose.ui.window.Window +import androidx.compose.ui.window.application + +fun main() = application { + Window( + onCloseRequest = ::exitApplication, + title = "requireKTX sample", + ) { + App() + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 3668d92..e31cad3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,8 +16,11 @@ dependencyResolutionManagement { rootProject.name = "requireKTX" -include(":app") -include(":requirektx-bundle") -include(":requirektx-intent") -include(":requirektx-navigation") -include(":requirektx-work") +include( + ":sample", + ":requirektx-test-helper", + ":requirektx-bundle", + ":requirektx-intent", + ":requirektx-navigation", + ":requirektx-work", +)