From 54b5c459ed8a82079eaf347737431d8fd1524632 Mon Sep 17 00:00:00 2001 From: Ishaan Jain Date: Thu, 4 Jun 2026 14:39:41 +0530 Subject: [PATCH 1/2] Align fork to kulu-kmp toolchain and publish to GitHub Packages Make this fork consumable by kulu-kmp (the consumer) by pinning the build to kulu-kmp's versions and publishing to GitHub Packages instead of Maven Central. - Toolchain: Kotlin 2.2.0 / Compose 1.8.2 / ktor 3.0.1 / koin 4.0.0 / datetime 0.6.0 / serialization 1.9.0 / coil 3.0.4 / AGP 8.10.0 / Gradle 8.11.1; minSdk 21, compileSdk 35. A KMP library must build with Kotlin <= its consumer or its klib metadata can't be read. - Limit targets to Android + iOS: drop js/wasmJs/jvm(desktop) from the four library modules; remove the okhttp + http4k integrations and all samples. - Publish robustrade:ktor-monitor-{core,core-no-op,logging,logging-no-op}: 1.13.0 to GitHub Packages (Robustrade/KtorMonitor); drop Maven Central + signing; rewrite publish.yml; simplify build.yml/docs.yml. - Remove the Koin compiler plugin; use koin-core's singleOf/factoryOf/ viewModelOf DSL in Modules.kt. - Back-port Compose 1.11 UI to 1.8.2: bare org.jetbrains @Preview (collapse Light/Dark pairs), SegmentedButton instead of expressive ToggleButton/ ButtonGroupDefaults, common LoremIpsum provider, datetime 0.6.0 in Units, drop Material3 1.11 *Fixed color roles and the 1.11 pane-expansion handle. - Regenerate API dumps for the Android+iOS surface. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/build.yml | 119 +- .github/workflows/docs.yml | 4 +- .github/workflows/publish.yml | 56 +- README.md | 99 +- build.gradle.kts | 30 +- core/library-no-op/api/jvm/library-no-op.api | 32 - .../api/{android => }/library-no-op.api | 0 core/library-no-op/api/library-no-op.klib.api | 4 +- core/library-no-op/build.gradle.kts | 20 - core/library/api/jvm/library.api | 38 - core/library/api/{android => }/library.api | 0 core/library/api/library.klib.api | 9 +- core/library/build.gradle.kts | 31 - .../ro/cosminmihu/ktor/monitor/di/Modules.kt | 51 +- .../ktor/monitor/domain/model/Units.kt | 7 +- .../ro/cosminmihu/ktor/monitor/ui/Loading.kt | 2 +- .../ktor/monitor/ui/detail/SummaryScreen.kt | 19 +- .../ktor/monitor/ui/detail/body/Body.kt | 16 +- .../monitor/ui/detail/body/DisplayMode.kt | 47 +- .../ktor/monitor/ui/detail/body/NoBody.kt | 6 +- .../ktor/monitor/ui/detail/headers/Headers.kt | 13 +- .../monitor/ui/detail/headers/NoHeaders.kt | 6 +- .../ui/detail/transaction/Transaction.kt | 2 +- .../ktor/monitor/ui/list/ListEmptyState.kt | 6 +- .../ktor/monitor/ui/list/ListItem.kt | 2 +- .../ktor/monitor/ui/list/ListScreen.kt | 20 +- .../ktor/monitor/ui/list/SearchField.kt | 2 +- .../ktor/monitor/ui/main/MainContent.kt | 45 - .../ktor/monitor/ui/main/MainInactiveState.kt | 6 +- .../ktor/monitor/ui/preview/LoremIpsum.kt | 20 + .../ktor/monitor/ui/preview/PreviewUiModes.kt | 10 - .../ktor/monitor/ui/theme/Colors.kt | 24 - gradle.properties | 5 +- gradle/libs.versions.toml | 56 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../api/android/library-http4k-no-op.api | 22 - .../api/jvm/library-http4k-no-op.api | 22 - .../api/library-http4k-no-op.klib.api | 0 http4k/library-http4k-no-op/build.gradle.kts | 106 - .../ktor/monitor/KtorMonitorFilter.kt | 15 - .../ktor/monitor/KtorMonitorFilterConfig.kt | 27 - .../api/android/library-http4k.api | 22 - .../library-http4k/api/jvm/library-http4k.api | 22 - .../api/library-http4k.klib.api | 0 http4k/library-http4k/build.gradle.kts | 116 - .../ktor/monitor/KtorMonitorFilter.kt | 200 - .../ktor/monitor/KtorMonitorFilterConfig.kt | 71 - kotlin-js-store/wasm/yarn.lock | 285 -- kotlin-js-store/yarn.lock | 3518 ----------------- .../api/jvm/library-ktor-no-op.api | 19 - .../api/{android => }/library-ktor-no-op.api | 0 .../api/library-ktor-no-op.klib.api | 4 +- ktor/library-ktor-no-op/build.gradle.kts | 20 - ktor/library-ktor/api/jvm/library-ktor.api | 19 - .../api/{android => }/library-ktor.api | 0 ktor/library-ktor/api/library-ktor.klib.api | 4 +- ktor/library-ktor/build.gradle.kts | 16 - .../api/android/library-okhttp-no-op.api | 22 - .../api/jvm/library-okhttp-no-op.api | 22 - .../api/library-okhttp-no-op.klib.api | 0 okhttp/library-okhttp-no-op/build.gradle.kts | 106 - .../ktor/monitor/KtorMonitorInterceptor.kt | 14 - .../monitor/KtorMonitorInterceptorConfig.kt | 33 - .../api/android/library-okhttp.api | 21 - .../library-okhttp/api/jvm/library-okhttp.api | 21 - .../api/library-okhttp.klib.api | 0 okhttp/library-okhttp/build.gradle.kts | 116 - .../ktor/monitor/KtorMonitorInterceptor.kt | 308 -- .../monitor/KtorMonitorInterceptorConfig.kt | 70 - sample/http4k/build.gradle.kts | 110 - .../src/androidMain/AndroidManifest.xml | 29 - .../src/androidMain/ic_launcher-playstore.png | Bin 23908 -> 0 bytes .../ktor/monitor/sample/HttpClient.kt | 18 - .../ktor/monitor/sample/SampleActivity.kt | 18 - .../res/drawable/ic_launcher_foreground.xml | 20 - .../res/drawable/ic_launcher_monochrome.xml | 26 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 - .../res/mipmap-hdpi/ic_launcher.webp | Bin 1020 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 1084 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2130 -> 0 bytes .../res/mipmap-mdpi/ic_launcher.webp | Bin 764 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 728 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1360 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher.webp | Bin 1378 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 1536 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 2892 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher.webp | Bin 2158 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 2990 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 4886 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3244 -> 0 bytes .../ic_launcher_foreground.webp | Bin 4006 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 6726 -> 0 bytes .../res/values/ic_launcher_background.xml | 4 - .../src/androidMain/res/values/strings.xml | 3 - .../ro/cosminmihu/ktor/monitor/sample/App.kt | 29 - .../cosminmihu/ktor/monitor/sample/Calls.kt | 181 - .../ktor/monitor/sample/HttpClient.kt | 6 - .../composeResources/drawable/ic_launcher.xml | 15 - .../composeResources/values/strings.xml | 4 - .../ktor/monitor/sample/HttpClient.kt | 18 - .../ktor/monitor/sample/compose/main.kt | 45 - .../ktor/monitor/sample/swing/main.kt | 31 - sample/ktor/build.gradle.kts | 156 - .../ktor/iosApp/Configuration/Config.xcconfig | 3 - .../iosApp/iosApp.xcodeproj/project.pbxproj | 396 -- .../xcshareddata/xcschemes/ios.xcscheme | 36 - .../AccentColor.colorset/Contents.json | 11 - .../AppIcon.appiconset/Contents.json | 14 - .../AppIcon.appiconset/app-icon-1024.png | Bin 90292 -> 0 bytes .../iosApp/Assets.xcassets/Contents.json | 6 - sample/ktor/iosApp/iosApp/ContentView.swift | 20 - sample/ktor/iosApp/iosApp/Info.plist | 50 - .../Preview Assets.xcassets/Contents.json | 6 - sample/ktor/iosApp/iosApp/iOSApp.swift | 10 - .../ktor/src/androidMain/AndroidManifest.xml | 28 - .../src/androidMain/ic_launcher-playstore.png | Bin 23908 -> 0 bytes .../ktor/monitor/sample/SampleActivity.kt | 20 - .../res/drawable/ic_launcher_foreground.xml | 20 - .../res/drawable/ic_launcher_monochrome.xml | 26 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 - .../res/mipmap-hdpi/ic_launcher.webp | Bin 1020 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 1084 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2130 -> 0 bytes .../res/mipmap-mdpi/ic_launcher.webp | Bin 764 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 728 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1360 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher.webp | Bin 1378 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 1536 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 2892 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher.webp | Bin 2158 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 2990 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 4886 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3244 -> 0 bytes .../ic_launcher_foreground.webp | Bin 4006 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 6726 -> 0 bytes .../res/values/ic_launcher_background.xml | 4 - .../src/androidMain/res/values/strings.xml | 3 - .../ro/cosminmihu/ktor/monitor/sample/App.kt | 29 - .../cosminmihu/ktor/monitor/sample/Calls.kt | 224 -- .../ktor/monitor/sample/HttpClient.kt | 20 - .../ktor/monitor/sample/MainViewController.kt | 9 - .../composeResources/drawable/ic_launcher.xml | 15 - .../composeResources/values/strings.xml | 3 - .../ktor/monitor/sample/compose/main.kt | 44 - .../ktor/monitor/sample/swing/main.kt | 30 - .../ro/cosminmihu/ktor/monitor/sample/main.kt | 11 - sample/ktor/src/webMain/resources/index.html | 12 - sample/ktor/src/webMain/resources/styles.css | 7 - sample/ktor/webpack.config.d/sqljs-config.js | 17 - sample/okhttp/build.gradle.kts | 108 - .../src/androidMain/AndroidManifest.xml | 29 - .../src/androidMain/ic_launcher-playstore.png | Bin 23908 -> 0 bytes .../ktor/monitor/sample/SampleActivity.kt | 18 - .../res/drawable/ic_launcher_foreground.xml | 20 - .../res/drawable/ic_launcher_monochrome.xml | 26 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 - .../res/mipmap-hdpi/ic_launcher.webp | Bin 1020 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 1084 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2130 -> 0 bytes .../res/mipmap-mdpi/ic_launcher.webp | Bin 764 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 728 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1360 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher.webp | Bin 1378 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 1536 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 2892 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher.webp | Bin 2158 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 2990 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 4886 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3244 -> 0 bytes .../ic_launcher_foreground.webp | Bin 4006 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 6726 -> 0 bytes .../res/values/ic_launcher_background.xml | 4 - .../src/androidMain/res/values/strings.xml | 3 - .../ro/cosminmihu/ktor/monitor/sample/App.kt | 29 - .../cosminmihu/ktor/monitor/sample/Calls.kt | 188 - .../ktor/monitor/sample/HttpClient.kt | 20 - .../composeResources/drawable/ic_launcher.xml | 15 - .../composeResources/values/strings.xml | 3 - .../ktor/monitor/sample/compose/main.kt | 44 - .../ktor/monitor/sample/swing/main.kt | 30 - sample/shared/build.gradle.kts | 45 - .../monitor/sample/shared/SamplePayloads.kt | 66 - settings.gradle.kts | 8 - 186 files changed, 234 insertions(+), 8295 deletions(-) delete mode 100644 core/library-no-op/api/jvm/library-no-op.api rename core/library-no-op/api/{android => }/library-no-op.api (100%) delete mode 100644 core/library/api/jvm/library.api rename core/library/api/{android => }/library.api (100%) create mode 100644 core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/LoremIpsum.kt delete mode 100644 core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/PreviewUiModes.kt delete mode 100644 http4k/library-http4k-no-op/api/android/library-http4k-no-op.api delete mode 100644 http4k/library-http4k-no-op/api/jvm/library-http4k-no-op.api delete mode 100644 http4k/library-http4k-no-op/api/library-http4k-no-op.klib.api delete mode 100644 http4k/library-http4k-no-op/build.gradle.kts delete mode 100644 http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt delete mode 100644 http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt delete mode 100644 http4k/library-http4k/api/android/library-http4k.api delete mode 100644 http4k/library-http4k/api/jvm/library-http4k.api delete mode 100644 http4k/library-http4k/api/library-http4k.klib.api delete mode 100644 http4k/library-http4k/build.gradle.kts delete mode 100644 http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt delete mode 100644 http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt delete mode 100644 kotlin-js-store/wasm/yarn.lock delete mode 100644 kotlin-js-store/yarn.lock delete mode 100644 ktor/library-ktor-no-op/api/jvm/library-ktor-no-op.api rename ktor/library-ktor-no-op/api/{android => }/library-ktor-no-op.api (100%) delete mode 100644 ktor/library-ktor/api/jvm/library-ktor.api rename ktor/library-ktor/api/{android => }/library-ktor.api (100%) delete mode 100644 okhttp/library-okhttp-no-op/api/android/library-okhttp-no-op.api delete mode 100644 okhttp/library-okhttp-no-op/api/jvm/library-okhttp-no-op.api delete mode 100644 okhttp/library-okhttp-no-op/api/library-okhttp-no-op.klib.api delete mode 100644 okhttp/library-okhttp-no-op/build.gradle.kts delete mode 100644 okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt delete mode 100644 okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt delete mode 100644 okhttp/library-okhttp/api/android/library-okhttp.api delete mode 100644 okhttp/library-okhttp/api/jvm/library-okhttp.api delete mode 100644 okhttp/library-okhttp/api/library-okhttp.klib.api delete mode 100644 okhttp/library-okhttp/build.gradle.kts delete mode 100644 okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt delete mode 100644 okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt delete mode 100644 sample/http4k/build.gradle.kts delete mode 100644 sample/http4k/src/androidMain/AndroidManifest.xml delete mode 100644 sample/http4k/src/androidMain/ic_launcher-playstore.png delete mode 100644 sample/http4k/src/androidMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt delete mode 100644 sample/http4k/src/androidMain/kotlin/ro/cosminmihu/ktor/monitor/sample/SampleActivity.kt delete mode 100644 sample/http4k/src/androidMain/res/drawable/ic_launcher_foreground.xml delete mode 100644 sample/http4k/src/androidMain/res/drawable/ic_launcher_monochrome.xml delete mode 100644 sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp delete mode 100644 sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 sample/http4k/src/androidMain/res/values/ic_launcher_background.xml delete mode 100644 sample/http4k/src/androidMain/res/values/strings.xml delete mode 100644 sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt delete mode 100644 sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt delete mode 100644 sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt delete mode 100644 sample/http4k/src/jvmMain/composeResources/drawable/ic_launcher.xml delete mode 100644 sample/http4k/src/jvmMain/composeResources/values/strings.xml delete mode 100644 sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt delete mode 100644 sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt delete mode 100644 sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt delete mode 100644 sample/ktor/build.gradle.kts delete mode 100644 sample/ktor/iosApp/Configuration/Config.xcconfig delete mode 100644 sample/ktor/iosApp/iosApp.xcodeproj/project.pbxproj delete mode 100644 sample/ktor/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/ios.xcscheme delete mode 100644 sample/ktor/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json delete mode 100644 sample/ktor/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 sample/ktor/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png delete mode 100644 sample/ktor/iosApp/iosApp/Assets.xcassets/Contents.json delete mode 100644 sample/ktor/iosApp/iosApp/ContentView.swift delete mode 100644 sample/ktor/iosApp/iosApp/Info.plist delete mode 100644 sample/ktor/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json delete mode 100644 sample/ktor/iosApp/iosApp/iOSApp.swift delete mode 100644 sample/ktor/src/androidMain/AndroidManifest.xml delete mode 100644 sample/ktor/src/androidMain/ic_launcher-playstore.png delete mode 100644 sample/ktor/src/androidMain/kotlin/ro/cosminmihu/ktor/monitor/sample/SampleActivity.kt delete mode 100644 sample/ktor/src/androidMain/res/drawable/ic_launcher_foreground.xml delete mode 100644 sample/ktor/src/androidMain/res/drawable/ic_launcher_monochrome.xml delete mode 100644 sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp delete mode 100644 sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 sample/ktor/src/androidMain/res/values/ic_launcher_background.xml delete mode 100644 sample/ktor/src/androidMain/res/values/strings.xml delete mode 100644 sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt delete mode 100644 sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt delete mode 100644 sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt delete mode 100644 sample/ktor/src/iosMain/kotlin/ro/cosminmihu/ktor/monitor/sample/MainViewController.kt delete mode 100644 sample/ktor/src/jvmMain/composeResources/drawable/ic_launcher.xml delete mode 100644 sample/ktor/src/jvmMain/composeResources/values/strings.xml delete mode 100644 sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt delete mode 100644 sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt delete mode 100644 sample/ktor/src/webMain/kotlin/ro/cosminmihu/ktor/monitor/sample/main.kt delete mode 100644 sample/ktor/src/webMain/resources/index.html delete mode 100644 sample/ktor/src/webMain/resources/styles.css delete mode 100644 sample/ktor/webpack.config.d/sqljs-config.js delete mode 100644 sample/okhttp/build.gradle.kts delete mode 100644 sample/okhttp/src/androidMain/AndroidManifest.xml delete mode 100644 sample/okhttp/src/androidMain/ic_launcher-playstore.png delete mode 100644 sample/okhttp/src/androidMain/kotlin/ro/cosminmihu/ktor/monitor/sample/SampleActivity.kt delete mode 100644 sample/okhttp/src/androidMain/res/drawable/ic_launcher_foreground.xml delete mode 100644 sample/okhttp/src/androidMain/res/drawable/ic_launcher_monochrome.xml delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-mdpi/ic_launcher.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-mdpi/ic_launcher_round.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp delete mode 100644 sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp delete mode 100644 sample/okhttp/src/androidMain/res/values/ic_launcher_background.xml delete mode 100644 sample/okhttp/src/androidMain/res/values/strings.xml delete mode 100644 sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt delete mode 100644 sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt delete mode 100644 sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt delete mode 100644 sample/okhttp/src/jvmMain/composeResources/drawable/ic_launcher.xml delete mode 100644 sample/okhttp/src/jvmMain/composeResources/values/strings.xml delete mode 100644 sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt delete mode 100644 sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt delete mode 100644 sample/shared/build.gradle.kts delete mode 100644 sample/shared/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/shared/SamplePayloads.kt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f225565..bf643ab2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,116 +11,21 @@ env: GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4096M -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.caching=true" jobs: - test: - name: Run Tests - runs-on: ubuntu-latest + build: + name: Build Library (Android + iOS) + runs-on: macOS-latest steps: - name: Checkout uses: actions/checkout@v6 - - name: Run unit tests - run: ./gradlew jvmTest + - name: Set up JDK 21 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: 21 -# - name: Upload test reports -# uses: actions/upload-artifact@v7 -# with: -# name: test-reports -# path: "**/build/reports/tests/" + - name: Assemble library modules + run: ./gradlew assemble - build-android: - name: Build Android - runs-on: ubuntu-latest - needs: test - steps: - - name: Checkout - uses: actions/checkout@v6 - - - name: Build Android APKs - run: ./gradlew :sample:ktor:assembleDebug :sample:ktor:assembleRelease :sample:okhttp:assembleDebug :sample:okhttp:assembleRelease - -# - name: Upload Android APKs -# uses: actions/upload-artifact@v7 -# with: -# name: android-apks -# path: "**/build/outputs/apk/**/*.apk" - -# build-ios: -# name: Build iOS simulator app -# runs-on: macos-latest -# needs: test -# steps: -# - name: Checkout -# uses: actions/checkout@v6 -# -# - name: Build iOS simulator app -# run: | -# xcodebuild build \ -# -project sample/ktor/iosApp/iosApp.xcodeproj \ -# -configuration Debug \ -# -scheme ios \ -# -sdk iphonesimulator \ -# -arch arm64 \ -# -derivedDataPath ./build \ -# -verbose - -# - name: Upload App Folder -# uses: actions/upload-artifact@v7 -# with: -# name: iphonesimulator-app -# path: build/Build/Products/Debug-iphonesimulator/* - - build-desktop-macos: - name: Build Desktop macOS - runs-on: macos-latest - needs: test - steps: - - name: Checkout - uses: actions/checkout@v6 - - - name: Build macOS DMGs - run: ./gradlew :sample:ktor:packageDmg :sample:okhttp:packageDmg - -# - name: Upload macOS DMGs -# uses: actions/upload-artifact@v7 -# with: -# name: desktop-macos-dmg -# path: "**/build/compose/binaries/main/dmg/*.dmg" - - build-desktop-windows: - name: Build Desktop Windows - runs-on: windows-latest - needs: test - steps: - - name: Checkout - uses: actions/checkout@v6 - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v5.0.0 - - - name: Build Windows MSIs - run: ./gradlew :sample:ktor:packageMsi :sample:okhttp:packageMsi - -# - name: Upload Windows MSIs -# uses: actions/upload-artifact@v7 -# with: -# name: desktop-windows-msi -# path: "**/build/compose/binaries/main/msi/*.msi" - - build-desktop-linux: - name: Build Desktop Linux - runs-on: ubuntu-latest - needs: test - steps: - - name: Checkout - uses: actions/checkout@v6 - - - name: Build Linux DEBs and RPMs - run: ./gradlew :sample:ktor:packageDeb :sample:ktor:packageRpm :sample:okhttp:packageDeb :sample:okhttp:packageRpm - -# - name: Upload Linux DEBs and RPMs -# uses: actions/upload-artifact@v7 -# with: -# name: desktop-linux-deb -# path: | -# **/build/compose/binaries/main/deb/*.deb -# **/build/compose/binaries/main/rpm/*.rpm + - name: Run API check + run: ./gradlew apiCheck diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a331ee8d..1d00f9a6 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -28,11 +28,11 @@ jobs: git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com - - name: Set up JDK 24 + - name: Set up JDK 21 uses: actions/setup-java@v5 with: distribution: 'zulu' - java-version: 24 + java-version: 21 - name: Set up Python uses: actions/setup-python@v6 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 604e4d3b..d3f303ed 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,11 +1,13 @@ -name: Publish to MavenCentral +name: Publish to GitHub Packages on: release: types: [released, prereleased] + workflow_dispatch: permissions: - contents: write + contents: read + packages: write jobs: check: @@ -15,51 +17,31 @@ jobs: - name: Checkout uses: actions/checkout@v6 + - name: Set up JDK 21 + uses: actions/setup-java@v5 + with: + distribution: 'zulu' + java-version: 21 + - name: Run api check run: ./gradlew apiCheck - docs: - name: Generate Docs - runs-on: macOS-latest - needs: check - steps: - - uses: actions/checkout@v6 - - name: Configure Git Credentials - run: | - git config user.name github-actions[bot] - git config user.email 41898282+github-actions[bot]@users.noreply.github.com - - uses: actions/setup-python@v6 - with: - python-version: 3.x - - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV - - uses: actions/cache@v5 - with: - key: mkdocs-material-${{ env.cache_id }} - path: ~/.cache - restore-keys: | - mkdocs-material- - - run: rm -rf docs/api - - run: ./gradlew clean dokkaGenerate - - run: pip install mkdocs-material - - run: mkdocs gh-deploy --force --config-file docs/mkdocs.yml - publish: - name: Release and Publish + name: Publish to GitHub Packages runs-on: macOS-latest - needs: docs + needs: check steps: - name: Check out code uses: actions/checkout@v6 + - name: Set up JDK 21 uses: actions/setup-java@v5 with: distribution: 'zulu' - java-version: 24 - - name: Publish to MavenCentral - run: ./gradlew publishAndReleaseToMavenCentral --no-configuration-cache + java-version: 21 + + - name: Publish to GitHub Packages + run: ./gradlew publishAllPublicationsToGitHubPackagesRepository --no-configuration-cache env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} - ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }} - ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }} - ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY_CONTENTS }} \ No newline at end of file + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 847bb58b..4a4a5a68 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -[![Maven Central](https://img.shields.io/maven-central/v/ro.cosminmihu.ktor/ktor-monitor-logging?logo=apachemaven&label=Maven%20Central&link=https://search.maven.org/artifact/ro.cosminmihu.ktor/ktor-monitor-logging/)](https://search.maven.org/artifact/ro.cosminmihu.ktor/ktor-monitor-logging) +[![GitHub Packages](https://img.shields.io/badge/GitHub%20Packages-robustrade%3Aktor--monitor-2088FF?logo=github&logoColor=white)](https://github.com/Robustrade/KtorMonitor/packages) [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?label=Licence&logo=lintcode&logoColor=white&color=#3DA639)](https://github.com/CosminMihuMDC/KtorMonitor/blob/main/LICENSE) -[![Platforms](https://img.shields.io/badge/Platforms-Android%20+%20iOS%20+%20JVM%20+%20Wasm%20+%20Js-brightgreen?logo=kotlin&logoColor=white&color=8d69e0)](https://cosminmihumdc.github.io/KtorMonitor) +[![Platforms](https://img.shields.io/badge/Platforms-Android%20+%20iOS-brightgreen?logo=kotlin&logoColor=white&color=8d69e0)](https://cosminmihumdc.github.io/KtorMonitor) [![Slack](https://img.shields.io/badge/Slack-kotlinlang-4A164B?logo=sololearn&logoColor=white)](https://kotlinlang.slack.com/archives/C0AB9GA32H0) [![JetBrains Klibs.io](https://img.shields.io/badge/JetBrains-klibs.io-4284F3?logo=jetbrains&logoColor=white)](https://klibs.io/project/CosminMihuMDC/KtorMonitor) [![Documentation](https://img.shields.io/badge/Docs-gray?logo=readthedocs&logoColor=white)](https://cosminmihumdc.github.io/KtorMonitor) @@ -26,6 +26,26 @@ Powerful tool to monitor [Ktor Client](https://ktor.io/), [OkHttp](https://squar * 📡**SSE & WebSockets**: Track one-way streams (*SSE*) and bidirectional traffic (*WebSockets*). * 🛡️**Production Safe**: No-Op version to ensure monitoring code is excluded from your production builds. +## 📦 Repository (GitHub Packages) + +This fork is published to **GitHub Packages** under the `robustrade` group (not Maven Central). +Add the GitHub Packages repository — authenticated with a GitHub token that has `read:packages` — +to your `settings.gradle.kts`: + +```kotlin +dependencyResolutionManagement { + repositories { + maven { + url = uri("https://maven.pkg.github.com/Robustrade/KtorMonitor") + credentials { + username = providers.gradleProperty("gpr.user").orElse(providers.environmentVariable("GITHUB_ACTOR")).orNull + password = providers.gradleProperty("gpr.key").orElse(providers.environmentVariable("GITHUB_TOKEN")).orNull + } + } + } +} +``` + ## 📦 Setup (Kotlin Multiplatform) for [Ktor Client](https://ktor.io/) ### @@ -34,7 +54,7 @@ Powerful tool to monitor [Ktor Client](https://ktor.io/), [OkHttp](https://squar kotlin { sourceSets { commonMain.dependencies { - implementation("ro.cosminmihu.ktor:ktor-monitor-logging:1.13.0") + implementation("robustrade:ktor-monitor-logging:1.13.0") } } } @@ -48,7 +68,7 @@ To isolate KtorMonitor from release builds, use the `ktor-monitor-logging-no-op` kotlin { sourceSets { commonMain.dependencies { - implementation("ro.cosminmihu.ktor:ktor-monitor-logging-no-op:1.13.0") + implementation("robustrade:ktor-monitor-logging-no-op:1.13.0") } } } @@ -60,8 +80,8 @@ kotlin { ```kotlin dependencies { - debugImplementation("ro.cosminmihu.ktor:ktor-monitor-logging:1.13.0") - releaseImplementation("ro.cosminmihu.ktor:ktor-monitor-logging-no-op:1.13.0") + debugImplementation("robustrade:ktor-monitor-logging:1.13.0") + releaseImplementation("robustrade:ktor-monitor-logging-no-op:1.13.0") } ``` @@ -88,71 +108,8 @@ HttpClient { - ```retentionPeriod``` - The retention period for the logs. Default is **1h**. - ```maxContentLength``` - The maximum length of the content that will be logged. After this, body will be truncated. Default is **250_000**. To log the entire body use ```ContentLength.Full```. -## 📦 Setup (Android & JVM) for [OkHttp](https://square.github.io/okhttp/) - -### - -```kotlin -dependencies { - debugImplementation("`ro.cosminmihu.ktor:ktor-monitor-okhttp-interceptor:1.13.0") - releaseImplementation("ro.cosminmihu.ktor:ktor-monitor-okhttp-interceptor-no-op:1.13.0") -} -``` - -For ***Android minSdk < 26***, [Core Library Desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) is required. - -### Install OkHttp Interceptor - -```kotlin -OkHttpClient.Builder() - .addNetworkInterceptor( - KtorMonitorInterceptor { - sanitizeHeader { header -> header == "Authorization" } - filter { request -> !request.url.host.contains("cosminmihu.ro") } - showNotification = true - retentionPeriod = RetentionPeriod.OneHour - maxContentLength = ContentLength.Default - } - ) - .build() -``` - -- ```sanitizeHeader``` - sanitize sensitive headers to avoid their values appearing in the logs -- ```filter``` - filter logs for calls matching a predicate. -- ```showNotification``` - Keep track of latest requests and responses into notification. Default is **true**. Android and iOS only. Notifications permission needs to be granted. -- ```retentionPeriod``` - The retention period for the logs. Default is **1h**. -- ```maxContentLength``` - The maximum length of the content that will be logged. After this, body will be truncated. Default is **250_000**. To log the entire body use ```ContentLength.Full```. - -## 📦 Setup (Android & JVM) for [http4k](https://www.http4k.org/) - -### - -```kotlin -dependencies { - debugImplementation("ro.cosminmihu.ktor:ktor-monitor-http4k-filter:1.13.0") - releaseImplementation("ro.cosminmihu.ktor:ktor-monitor-http4k-filter-no-op:1.13.0") -} -``` - -For ***Android minSdk < 26***, [Core Library Desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) is required. - -### Install http4k Filter - -```kotlin -KtorMonitorFilter { - sanitizeHeader { header -> header == "Authorization" } - filter { request -> !request.uri.host.contains("cosminmihu.ro") } - showNotification = true - retentionPeriod = RetentionPeriod.OneHour - maxContentLength = ContentLength.Default -}.then(JavaHttpClient()) -``` - -- ```sanitizeHeader``` - sanitize sensitive headers to avoid their values appearing in the logs -- ```filter``` - filter logs for calls matching a predicate. -- ```showNotification``` - Keep track of latest requests and responses into notification. Default is **true**. Android only. Notifications permission needs to be granted. -- ```retentionPeriod``` - The retention period for the logs. Default is **1h**. -- ```maxContentLength``` - The maximum length of the content that will be logged. After this, body will be truncated. Default is **250_000**. To log the entire body use ```ContentLength.Full```. +> **Note:** This fork targets **Android + iOS only** for consumption by `kulu-kmp`. The upstream +> OkHttp and http4k integrations are not published here. ## 🧩 Integration diff --git a/build.gradle.kts b/build.gradle.kts index e8587e2c..dab1222d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,21 +8,43 @@ plugins { alias(libs.plugins.kotlinMultiplatform) apply false alias(libs.plugins.sqldelight) apply false alias(libs.plugins.kotlinx.atomicfu) apply false - alias(libs.plugins.koin.compiler) apply false alias(libs.plugins.maven.publish) apply false alias(libs.plugins.binary.compatibility.validator) apply false alias(libs.plugins.dokka) } allprojects { - group = "ro.cosminmihu.ktor" + group = "robustrade" version = "1.13.0" } +subprojects { + plugins.withId("maven-publish") { + extensions.configure("publishing") { + repositories { + maven { + name = "GitHubPackages" + url = uri( + providers.gradleProperty("gpr.url") + .orElse(providers.environmentVariable("GITHUB_PACKAGES_URL")) + .getOrElse("https://maven.pkg.github.com/Robustrade/KtorMonitor") + ) + credentials { + username = providers.gradleProperty("gpr.user") + .orElse(providers.environmentVariable("GITHUB_ACTOR")) + .orNull + password = providers.gradleProperty("gpr.key") + .orElse(providers.environmentVariable("GITHUB_TOKEN")) + .orNull + } + } + } + } + } +} + dependencies { dokka(project(":ktor:library-ktor")) - dokka(project(":okhttp:library-okhttp")) - dokka(project(":http4k:library-http4k")) } dokka { diff --git a/core/library-no-op/api/jvm/library-no-op.api b/core/library-no-op/api/jvm/library-no-op.api deleted file mode 100644 index b6cf11d5..00000000 --- a/core/library-no-op/api/jvm/library-no-op.api +++ /dev/null @@ -1,32 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/ContentLength { - public static final field $stable I - public static final field Default I - public static final field Full I - public static final field INSTANCE Lro/cosminmihu/ktor/monitor/ContentLength; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorKt { - public static final fun KtorMonitor (Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorMenuItemKt { - public static final fun KtorMonitorMenuItem (Landroidx/compose/ui/window/MenuScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorPanelKt { - public static final fun getKtorMonitorPanel ()Ljavax/swing/JLayeredPane; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorWindowKt { - public static final fun KtorMonitorWindow (ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V -} - -public final class ro/cosminmihu/ktor/monitor/RetentionPeriod { - public static final field $stable I - public static final field INSTANCE Lro/cosminmihu/ktor/monitor/RetentionPeriod; - public final fun getForever-UwyO8pc ()J - public final fun getOneDay-UwyO8pc ()J - public final fun getOneHour-UwyO8pc ()J - public final fun getOneWeek-UwyO8pc ()J -} - diff --git a/core/library-no-op/api/android/library-no-op.api b/core/library-no-op/api/library-no-op.api similarity index 100% rename from core/library-no-op/api/android/library-no-op.api rename to core/library-no-op/api/library-no-op.api diff --git a/core/library-no-op/api/library-no-op.klib.api b/core/library-no-op/api/library-no-op.klib.api index a45bf62f..d845380a 100644 --- a/core/library-no-op/api/library-no-op.klib.api +++ b/core/library-no-op/api/library-no-op.klib.api @@ -1,11 +1,11 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, js, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true // - Show declarations: true -// Library unique name: +// Library unique name: final object ro.cosminmihu.ktor.monitor/ContentLength { // ro.cosminmihu.ktor.monitor/ContentLength|null[0] final const val Default // ro.cosminmihu.ktor.monitor/ContentLength.Default|{}Default[0] final fun (): kotlin/Int // ro.cosminmihu.ktor.monitor/ContentLength.Default.|(){}[0] diff --git a/core/library-no-op/build.gradle.kts b/core/library-no-op/build.gradle.kts index a4b0f4cb..04452927 100644 --- a/core/library-no-op/build.gradle.kts +++ b/core/library-no-op/build.gradle.kts @@ -1,4 +1,3 @@ -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { @@ -19,10 +18,6 @@ apiValidation { } mavenPublishing { - publishToMavenCentral() - - signAllPublications() - val artifact = "ktor-monitor-core-no-op" coordinates(group.toString(), artifact, version.toString()) @@ -77,15 +72,6 @@ kotlin { freeCompilerArgs.add("-Xexpect-actual-classes") // TODO remove after jetbrains fix } - js { - browser() - } - - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser() - } - androidTarget { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) @@ -97,16 +83,10 @@ kotlin { iosSimulatorArm64(), ) - jvm() - sourceSets { commonMain.dependencies { implementation(compose.ui) } - webMain.dependencies { - implementation(npm("sql.js", libs.versions.sqljs.get())) - implementation(devNpm("copy-webpack-plugin", libs.versions.webpack.get())) - } } } diff --git a/core/library/api/jvm/library.api b/core/library/api/jvm/library.api deleted file mode 100644 index 2f95c106..00000000 --- a/core/library/api/jvm/library.api +++ /dev/null @@ -1,38 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/ComposableSingletons$KtorMonitorPanelKt { - public static final field INSTANCE Lro/cosminmihu/ktor/monitor/ComposableSingletons$KtorMonitorPanelKt; - public fun ()V - public final fun getLambda$-1421894391$library ()Lkotlin/jvm/functions/Function2; -} - -public final class ro/cosminmihu/ktor/monitor/ContentLength { - public static final field $stable I - public static final field Default I - public static final field Full I - public static final field INSTANCE Lro/cosminmihu/ktor/monitor/ContentLength; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorKt { - public static final fun KtorMonitor (Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorMenuItemKt { - public static final fun KtorMonitorMenuItem (Landroidx/compose/ui/window/MenuScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorPanelKt { - public static final fun getKtorMonitorPanel ()Ljavax/swing/JLayeredPane; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorWindowKt { - public static final fun KtorMonitorWindow (ZZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V -} - -public final class ro/cosminmihu/ktor/monitor/RetentionPeriod { - public static final field $stable I - public static final field INSTANCE Lro/cosminmihu/ktor/monitor/RetentionPeriod; - public final fun getForever-UwyO8pc ()J - public final fun getOneDay-UwyO8pc ()J - public final fun getOneHour-UwyO8pc ()J - public final fun getOneWeek-UwyO8pc ()J -} - diff --git a/core/library/api/android/library.api b/core/library/api/library.api similarity index 100% rename from core/library/api/android/library.api rename to core/library/api/library.api diff --git a/core/library/api/library.klib.api b/core/library/api/library.klib.api index dbbff778..fe2f5664 100644 --- a/core/library/api/library.klib.api +++ b/core/library/api/library.klib.api @@ -1,12 +1,11 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, js, wasmJs] -// Alias: ios => [iosArm64, iosSimulatorArm64] +// Targets: [iosArm64, iosSimulatorArm64] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true // - Show declarations: true -// Library unique name: +// Library unique name: final object ro.cosminmihu.ktor.monitor/ContentLength { // ro.cosminmihu.ktor.monitor/ContentLength|null[0] final const val Default // ro.cosminmihu.ktor.monitor/ContentLength.Default|{}Default[0] final fun (): kotlin/Int // ro.cosminmihu.ktor.monitor/ContentLength.Default.|(){}[0] @@ -30,9 +29,7 @@ final val ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_InternalLibraryB final val ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_RetentionPeriod$stableprop // ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_RetentionPeriod$stableprop|#static{}ro_cosminmihu_ktor_monitor_RetentionPeriod$stableprop[0] final fun ro.cosminmihu.ktor.monitor/KtorMonitor(androidx.compose.ui/Modifier?, kotlin/Boolean, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // ro.cosminmihu.ktor.monitor/KtorMonitor|KtorMonitor(androidx.compose.ui.Modifier?;kotlin.Boolean;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){}[0] +final fun ro.cosminmihu.ktor.monitor/KtorMonitorViewController(): platform.UIKit/UIViewController // ro.cosminmihu.ktor.monitor/KtorMonitorViewController|KtorMonitorViewController(){}[0] final fun ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_ContentLength$stableprop_getter(): kotlin/Int // ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_ContentLength$stableprop_getter|ro_cosminmihu_ktor_monitor_ContentLength$stableprop_getter(){}[0] final fun ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_InternalLibraryBridge$stableprop_getter(): kotlin/Int // ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_InternalLibraryBridge$stableprop_getter|ro_cosminmihu_ktor_monitor_InternalLibraryBridge$stableprop_getter(){}[0] final fun ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_RetentionPeriod$stableprop_getter(): kotlin/Int // ro.cosminmihu.ktor.monitor/ro_cosminmihu_ktor_monitor_RetentionPeriod$stableprop_getter|ro_cosminmihu_ktor_monitor_RetentionPeriod$stableprop_getter(){}[0] - -// Targets: [ios] -final fun ro.cosminmihu.ktor.monitor/KtorMonitorViewController(): platform.UIKit/UIViewController // ro.cosminmihu.ktor.monitor/KtorMonitorViewController|KtorMonitorViewController(){}[0] diff --git a/core/library/build.gradle.kts b/core/library/build.gradle.kts index 9c45ff86..14fb8b8e 100644 --- a/core/library/build.gradle.kts +++ b/core/library/build.gradle.kts @@ -1,4 +1,3 @@ -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { @@ -9,7 +8,6 @@ plugins { alias(libs.plugins.kotlinxSerialization) alias(libs.plugins.sqldelight) alias(libs.plugins.kotlinx.atomicfu) - alias(libs.plugins.koin.compiler) alias(libs.plugins.maven.publish) alias(libs.plugins.binary.compatibility.validator) alias(libs.plugins.dokka) @@ -72,10 +70,6 @@ apiValidation { } mavenPublishing { - publishToMavenCentral() - - signAllPublications() - val artifact = "ktor-monitor-core" coordinates(group.toString(), artifact, version.toString()) @@ -130,15 +124,6 @@ kotlin { freeCompilerArgs.add("-Xexpect-actual-classes") // TODO remove after jetbrains fix } - js { - browser() - } - - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser() - } - androidTarget { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) @@ -155,8 +140,6 @@ kotlin { } } - jvm() - sourceSets { androidMain.dependencies { implementation(libs.androidx.activity.compose) @@ -180,7 +163,6 @@ kotlin { implementation(libs.compose.adaptive) implementation(libs.compose.adaptive.layout) implementation(libs.compose.adaptive.navigation) - implementation(libs.navigation.event) implementation(libs.androidx.lifecycle.viewmodel) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.sqldelight.runtime) @@ -198,19 +180,6 @@ kotlin { implementation(libs.ksoup) implementation(libs.ktor.utils) } - jvmMain.dependencies { - implementation(compose.desktop.currentOs) - implementation(libs.kotlinx.coroutines.swing) - implementation(libs.sqldelight.jvm) - implementation(libs.slf4j.simple) - } - - webMain.dependencies { - implementation(libs.sqldelight.web) - implementation(npm("sql.js", libs.versions.sqljs.get())) - implementation(npm("@cashapp/sqldelight-sqljs-worker", libs.versions.sqldelight.get())) - implementation(devNpm("copy-webpack-plugin", libs.versions.webpack.get())) - } } jvmToolchain { diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/di/Modules.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/di/Modules.kt index 68605149..47aefae3 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/di/Modules.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/di/Modules.kt @@ -3,11 +3,10 @@ package ro.cosminmihu.ktor.monitor.di import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob +import org.koin.core.module.dsl.factoryOf +import org.koin.core.module.dsl.singleOf +import org.koin.core.module.dsl.viewModelOf import org.koin.dsl.module -import org.koin.plugin.module.dsl.create -import org.koin.plugin.module.dsl.factory -import org.koin.plugin.module.dsl.single -import org.koin.plugin.module.dsl.viewModel import ro.cosminmihu.ktor.monitor.core.ClipboardManager import ro.cosminmihu.ktor.monitor.core.ShareManager import ro.cosminmihu.ktor.monitor.db.LibraryDao @@ -37,9 +36,13 @@ internal fun libraryModule() = listOf( ) internal val databaseModule = module { - factory { create(::createDatabaseDriver) } - single { create(::createDatabase) } - factory() + factory { + createDatabaseDriver() + } + single { + createDatabase(get()) + } + factoryOf(::LibraryDao) } internal val coroutineModule = module { @@ -49,30 +52,30 @@ internal val coroutineModule = module { } internal val notificationModule = module { - factory() + factoryOf(::NotificationManager) } internal val viewModelModule = module { - viewModel() - viewModel() - viewModel() + viewModelOf(::MainViewModel) + viewModelOf(::ListViewModel) + viewModelOf(::DetailViewModel) } internal val domainModule = module { - single() + singleOf(::ConfigUseCase) - single() - factory() + singleOf(::ListenByRecentCallsUseCase) + factoryOf(::RetentionUseCase) - factory() - factory() - factory() + factoryOf(::GetCallsUseCase) + factoryOf(::GetCallUseCase) + factoryOf(::DeleteCallsUseCase) - factory() - factory() + factoryOf(::ClipboardManager) + factoryOf(::ShareManager) - factory() - factory() - factory() - factory() -} \ No newline at end of file + factoryOf(::ExportCallUrlUseCase) + factoryOf(::ExportCallRequestAsCurlUseCase) + factoryOf(::ExportCallRequestAsWgetUseCase) + factoryOf(::ExportCallAsTextUseCase) +} diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/domain/model/Units.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/domain/model/Units.kt index 2a5e951b..8b961a74 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/domain/model/Units.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/domain/model/Units.kt @@ -1,5 +1,6 @@ package ro.cosminmihu.ktor.monitor.domain.model +import kotlinx.datetime.Instant import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone import kotlinx.datetime.format @@ -12,10 +13,7 @@ import kotlinx.datetime.toLocalDateTime import kotlin.math.log import kotlin.math.pow import kotlin.math.round -import kotlin.time.ExperimentalTime -import kotlin.time.Instant -@OptIn(ExperimentalTime::class) internal fun Long.formatTime() = Instant.fromEpochMilliseconds(this) .toLocalDateTime(TimeZone.currentSystemDefault()) .format( @@ -25,14 +23,13 @@ internal fun Long.formatTime() = Instant.fromEpochMilliseconds(this) } ) -@OptIn(ExperimentalTime::class) internal fun Long.formatDateTimeTime() = Instant.fromEpochMilliseconds(this) .format( DateTimeComponents.Format { dayOfWeek(DayOfWeekNames.ENGLISH_ABBREVIATED) char(',') char(' ') - year(); char(' '); monthName(MonthNames.ENGLISH_ABBREVIATED); char(' '); day() + year(); char(' '); monthName(MonthNames.ENGLISH_ABBREVIATED); char(' '); dayOfMonth() char(' ') hour(); char(':'); minute(); char(':'); second() optional { char('.'); secondFraction() } diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/Loading.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/Loading.kt index 3bdddc6a..ede1a77c 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/Loading.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/Loading.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.rotate import androidx.compose.ui.text.font.FontStyle import org.jetbrains.compose.resources.stringResource -import androidx.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.Preview import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_in_progress import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/SummaryScreen.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/SummaryScreen.kt index 3d77ab7f..6d3873db 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/SummaryScreen.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/SummaryScreen.kt @@ -36,10 +36,9 @@ import ro.cosminmihu.ktor.monitor.ui.resources.ktor_summary_response_time import ro.cosminmihu.ktor.monitor.ui.resources.ktor_summary_status import ro.cosminmihu.ktor.monitor.ui.resources.ktor_summary_total_size import ro.cosminmihu.ktor.monitor.ui.resources.ktor_summary_url -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.datasource.LoremIpsum -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES +import org.jetbrains.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.PreviewParameter +import ro.cosminmihu.ktor.monitor.ui.preview.LoremIpsum import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme @Composable @@ -210,8 +209,7 @@ private fun String.toSlug(): String = take(24) .trim('-') .ifEmpty { "users" } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun SummaryScreenPreview( @PreviewParameter(LoremIpsum::class) lorem: String, @@ -221,8 +219,7 @@ private fun SummaryScreenPreview( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun SummaryScreenLoadingPreview( @PreviewParameter(LoremIpsum::class) lorem: String, @@ -232,8 +229,7 @@ private fun SummaryScreenLoadingPreview( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun SummaryScreenErrorPreview( @PreviewParameter(LoremIpsum::class) lorem: String, @@ -243,8 +239,7 @@ private fun SummaryScreenErrorPreview( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun SummaryScreenHttpErrorPreview( @PreviewParameter(LoremIpsum::class) lorem: String, diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/Body.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/Body.kt index c45ee969..c5e969ca 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/Body.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/Body.kt @@ -13,9 +13,9 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.datasource.LoremIpsum +import org.jetbrains.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.PreviewParameter +import ro.cosminmihu.ktor.monitor.ui.preview.LoremIpsum import coil3.ImageLoader import coil3.compose.AsyncImage import coil3.compose.LocalPlatformContext @@ -40,7 +40,6 @@ import ro.cosminmihu.ktor.monitor.ui.detail.hasCopyableContent import ro.cosminmihu.ktor.monitor.ui.detail.hasPreview import ro.cosminmihu.ktor.monitor.ui.detail.noBody import ro.cosminmihu.ktor.monitor.ui.detail.transaction.TransactionSection -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_body import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme @@ -175,8 +174,7 @@ internal fun Body( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun BodyPreview( @PreviewParameter(LoremIpsum::class) lorem: String, @@ -197,8 +195,7 @@ private fun BodyPreview( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun BodyJsonPreview( @PreviewParameter(LoremIpsum::class) lorem: String, @@ -220,8 +217,7 @@ private fun BodyJsonPreview( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun BodyEmptyPreview() { LibraryTheme { diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/DisplayMode.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/DisplayMode.kt index d96ea17c..ae4ee9d4 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/DisplayMode.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/DisplayMode.kt @@ -1,23 +1,16 @@ package ro.cosminmihu.ktor.monitor.ui.detail.body -import androidx.compose.foundation.horizontalScroll -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.material3.ButtonGroupDefaults -import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SegmentedButton +import androidx.compose.material3.SegmentedButtonDefaults +import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.Text -import androidx.compose.material3.ToggleButton import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.semantics.Role -import androidx.compose.ui.semantics.role -import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import org.jetbrains.compose.resources.stringResource @@ -29,15 +22,13 @@ import ro.cosminmihu.ktor.monitor.ui.resources.ktor_response_view_binary import ro.cosminmihu.ktor.monitor.ui.resources.ktor_response_view_code import ro.cosminmihu.ktor.monitor.ui.resources.ktor_response_view_preview import ro.cosminmihu.ktor.monitor.ui.resources.ktor_response_view_raw -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.datasource.LoremIpsum +import org.jetbrains.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.PreviewParameter +import ro.cosminmihu.ktor.monitor.ui.preview.LoremIpsum import ro.cosminmihu.ktor.monitor.ui.detail.DisplayMode import ro.cosminmihu.ktor.monitor.ui.detail.hasPreview -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme -@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable internal fun DisplayModeSelector( body: DetailUiState.Body, @@ -101,23 +92,19 @@ internal fun DisplayModeSelector( ) } - FlowRow( + SingleChoiceSegmentedButtonRow( modifier = Modifier - .horizontalScroll(rememberScrollState()) .align(Alignment.CenterEnd) .padding(horizontal = Dimens.Small), - horizontalArrangement = Arrangement.spacedBy(ButtonGroupDefaults.ConnectedSpaceBetween), ) { segmentedButtons.forEachIndexed { index, item -> - ToggleButton( - checked = item.selected, - onCheckedChange = { if (it) item.onClick() }, - shapes = when (index) { - 0 -> ButtonGroupDefaults.connectedLeadingButtonShapes() - segmentedButtons.lastIndex -> ButtonGroupDefaults.connectedTrailingButtonShapes() - else -> ButtonGroupDefaults.connectedMiddleButtonShapes() - }, - modifier = Modifier.semantics { role = Role.RadioButton }, + SegmentedButton( + selected = item.selected, + onClick = item.onClick, + shape = SegmentedButtonDefaults.itemShape( + index = index, + count = segmentedButtons.size, + ), ) { Text(text = item.text, fontWeight = FontWeight.Bold) } @@ -133,8 +120,7 @@ private data class BodyShowTypeSegment( ) -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun DisplayModeSelectorPreview( @PreviewParameter(LoremIpsum::class) lorem: String, @@ -156,8 +142,7 @@ private fun DisplayModeSelectorPreview( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun DisplayModeSelectorTrimmedPreview( @PreviewParameter(LoremIpsum::class) lorem: String, diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/NoBody.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/NoBody.kt index c5e92f6a..217f38e1 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/NoBody.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/body/NoBody.kt @@ -10,8 +10,7 @@ import org.jetbrains.compose.resources.stringResource import ro.cosminmihu.ktor.monitor.ui.Dimens import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_no_body -import androidx.compose.ui.tooling.preview.Preview -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES +import org.jetbrains.compose.ui.tooling.preview.Preview import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme @Composable @@ -27,8 +26,7 @@ internal fun NoBody() { ) } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun NoBodyPreview() { LibraryTheme { diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/Headers.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/Headers.kt index 36197854..3ee6e8a2 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/Headers.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/Headers.kt @@ -13,10 +13,9 @@ import org.jetbrains.compose.resources.stringResource import ro.cosminmihu.ktor.monitor.ui.detail.transaction.TransactionSection import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_headers -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.datasource.LoremIpsum -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES +import org.jetbrains.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.PreviewParameter +import ro.cosminmihu.ktor.monitor.ui.preview.LoremIpsum import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme @Composable @@ -58,8 +57,7 @@ internal fun Headers(headers: Map>) { } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun HeadersPreview( @PreviewParameter(LoremIpsum::class) lorem: String, @@ -77,8 +75,7 @@ private fun HeadersPreview( } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun HeadersEmptyPreview() { LibraryTheme { diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/NoHeaders.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/NoHeaders.kt index ee12cf50..c3cf20cf 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/NoHeaders.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/headers/NoHeaders.kt @@ -10,8 +10,7 @@ import org.jetbrains.compose.resources.stringResource import ro.cosminmihu.ktor.monitor.ui.Dimens import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_no_headers -import androidx.compose.ui.tooling.preview.Preview -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES +import org.jetbrains.compose.ui.tooling.preview.Preview import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme @Composable @@ -27,8 +26,7 @@ internal fun NoHeaders() { ) } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun NoHeadersPreview() { LibraryTheme { diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/transaction/Transaction.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/transaction/Transaction.kt index c2994022..611c5da0 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/transaction/Transaction.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/detail/transaction/Transaction.kt @@ -8,7 +8,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.Preview import ro.cosminmihu.ktor.monitor.ui.Dimens import ro.cosminmihu.ktor.monitor.ui.Loading import ro.cosminmihu.ktor.monitor.ui.detail.DetailUiState diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListEmptyState.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListEmptyState.kt index dadc2ef9..f1b37af4 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListEmptyState.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListEmptyState.kt @@ -18,8 +18,7 @@ import org.jetbrains.compose.resources.stringResource import ro.cosminmihu.ktor.monitor.ui.Dimens import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_list_empty -import androidx.compose.ui.tooling.preview.Preview -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES +import org.jetbrains.compose.ui.tooling.preview.Preview import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme @Composable @@ -47,8 +46,7 @@ internal fun ListEmptyState(modifier: Modifier = Modifier) { } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun ListEmptyStatePreview() { LibraryTheme { diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListItem.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListItem.kt index 7baa2936..f8c5af15 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListItem.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListItem.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.Preview import org.jetbrains.compose.resources.stringResource import ro.cosminmihu.ktor.monitor.domain.model.ContentType import ro.cosminmihu.ktor.monitor.domain.model.asColor diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListScreen.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListScreen.kt index ca43c0cf..41c331bb 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListScreen.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/ListScreen.kt @@ -45,7 +45,7 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.Preview import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.resources.vectorResource import ro.cosminmihu.ktor.monitor.core.URL @@ -89,14 +89,6 @@ internal fun ListScreen( var showSearchBar by rememberSaveable { mutableStateOf(false) } val searchFocusRequester = remember { FocusRequester() } - LaunchedEffect(showSearchBar) { - if (showSearchBar) { - searchFocusRequester.requestFocus() - } else { - searchFocusRequester.freeFocus() - } - } - Scaffold( modifier = modifier, topBar = { @@ -194,6 +186,16 @@ internal fun ListScreen( ) AnimatedVisibility(visible = showSearchBar) { + LaunchedEffect(Unit) { + // Yield coroutine execution to allow a layout pass to attach the FocusRequester + kotlinx.coroutines.yield() + try { + searchFocusRequester.requestFocus() + } catch (_: IllegalStateException) { + // Defensive block to catch edge-case layout delays + } + } + Surface { Column { SearchField( diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/SearchField.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/SearchField.kt index c4269698..63692f96 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/SearchField.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/list/SearchField.kt @@ -20,7 +20,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import org.jetbrains.compose.resources.stringResource -import androidx.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.Preview import ro.cosminmihu.ktor.monitor.ui.Dimens import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_close diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainContent.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainContent.kt index 018f9ec9..dafa549d 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainContent.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainContent.kt @@ -1,24 +1,15 @@ package ro.cosminmihu.ktor.monitor.ui.main -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.LocalMinimumInteractiveComponentSize import androidx.compose.material3.Surface -import androidx.compose.material3.VerticalDragHandle import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi import androidx.compose.material3.adaptive.layout.AnimatedPane import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole -import androidx.compose.material3.adaptive.layout.PaneExpansionAnchor -import androidx.compose.material3.adaptive.layout.rememberPaneExpansionState import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier -import androidx.navigationevent.NavigationEventInfo -import androidx.navigationevent.compose.NavigationEventHandler -import androidx.navigationevent.compose.rememberNavigationEventState import kotlinx.coroutines.launch import ro.cosminmihu.ktor.monitor.ui.detail.DetailRoute import ro.cosminmihu.ktor.monitor.ui.list.ListRoute @@ -29,16 +20,6 @@ internal fun MainContent(modifier: Modifier = Modifier) { val coroutineScope = rememberCoroutineScope() val navigator = rememberListDetailPaneScaffoldNavigator() - NavigationEventHandler( - state = rememberNavigationEventState(NavigationEventInfo.None), - isBackEnabled = navigator.canNavigateBack(), - onBackCompleted = { - coroutineScope.launch { - navigator.navigateBack() - } - } - ) - Surface(modifier = modifier) { ListDetailPaneScaffold( modifier = Modifier.fillMaxSize(), @@ -73,32 +54,6 @@ internal fun MainContent(modifier: Modifier = Modifier) { ) } }, - paneExpansionState = rememberPaneExpansionState( - keyProvider = navigator.scaffoldValue, - anchors = listOf( - PaneExpansionAnchor.Proportion(0.25f), - PaneExpansionAnchor.Proportion(0.3f), - PaneExpansionAnchor.Proportion(0.35f), - PaneExpansionAnchor.Proportion(0.4f), - PaneExpansionAnchor.Proportion(0.45f), - PaneExpansionAnchor.Proportion(0.5f), - PaneExpansionAnchor.Proportion(0.55f), - PaneExpansionAnchor.Proportion(0.6f), - PaneExpansionAnchor.Proportion(0.65f), - PaneExpansionAnchor.Proportion(0.7f), - ) - ), - paneExpansionDragHandle = { state -> - val interactionSource = remember { MutableInteractionSource() } - VerticalDragHandle( - modifier = Modifier.paneExpansionDraggable( - state = state, - minTouchTargetSize = LocalMinimumInteractiveComponentSize.current, - interactionSource = interactionSource, - ), - interactionSource = interactionSource - ) - } ) } } \ No newline at end of file diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainInactiveState.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainInactiveState.kt index e602bbed..cc134ab6 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainInactiveState.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/main/MainInactiveState.kt @@ -14,10 +14,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.tooling.preview.Preview +import org.jetbrains.compose.ui.tooling.preview.Preview import org.jetbrains.compose.resources.stringResource import ro.cosminmihu.ktor.monitor.ui.Dimens -import ro.cosminmihu.ktor.monitor.ui.preview.UI_MODE_NIGHT_YES import ro.cosminmihu.ktor.monitor.ui.resources.Res import ro.cosminmihu.ktor.monitor.ui.resources.ktor_library_disabled import ro.cosminmihu.ktor.monitor.ui.theme.LibraryTheme @@ -47,8 +46,7 @@ internal fun MainInactiveState(modifier: Modifier = Modifier) { } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = UI_MODE_NIGHT_YES) +@Preview @Composable private fun MainInactiveStatePreview() { LibraryTheme { diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/LoremIpsum.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/LoremIpsum.kt new file mode 100644 index 00000000..02abfc91 --- /dev/null +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/LoremIpsum.kt @@ -0,0 +1,20 @@ +package ro.cosminmihu.ktor.monitor.ui.preview + +import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider + +/** + * Common-source replacement for `androidx.compose.ui.tooling.preview.datasource.LoremIpsum`, + * which only ships on Android. Supplies a fixed placeholder string to `@PreviewParameter` + * so the detail previews render in `commonMain` on Compose Multiplatform 1.8.x. + */ +internal class LoremIpsum : PreviewParameterProvider { + override val values: Sequence = sequenceOf(LOREM_IPSUM) +} + +private const val LOREM_IPSUM = + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor " + + "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis " + + "nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. " + + "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu " + + "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in " + + "culpa qui officia deserunt mollit anim id est laborum." diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/PreviewUiModes.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/PreviewUiModes.kt deleted file mode 100644 index 29db95da..00000000 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/preview/PreviewUiModes.kt +++ /dev/null @@ -1,10 +0,0 @@ -package ro.cosminmihu.ktor.monitor.ui.preview - -/** - * `Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL`. - * - * Hard-coded so it can live in `commonMain` (the `android.content.res.Configuration` - * constants are only available on Android). Used by `@Preview(uiMode = …)` to render - * a composable in dark mode. - */ -internal const val UI_MODE_NIGHT_YES: Int = 0x21 \ No newline at end of file diff --git a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/theme/Colors.kt b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/theme/Colors.kt index 3fe3cc27..b9e85e18 100644 --- a/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/theme/Colors.kt +++ b/core/library/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/ui/theme/Colors.kt @@ -75,18 +75,6 @@ internal val lightColorScheme = lightColorScheme( surfaceContainerLow = GraySurfaceContainerLow, surfaceContainerLowest = GraySurfaceContainerLowest, surfaceDim = GraySurfaceDim, - primaryFixed = GrayDark, - primaryFixedDim = GrayMedium, - onPrimaryFixed = Color.White, - onPrimaryFixedVariant = GrayLight, - secondaryFixed = GrayMedium, - secondaryFixedDim = GrayDark, - onSecondaryFixed = Color.White, - onSecondaryFixedVariant = GrayLight, - tertiaryFixed = GrayMedium, - tertiaryFixedDim = GrayDark, - onTertiaryFixed = Color.White, - onTertiaryFixedVariant = GrayLight, ) internal val darkColorScheme = darkColorScheme( @@ -122,16 +110,4 @@ internal val darkColorScheme = darkColorScheme( surfaceContainerLow = DarkSurfaceContainerLow, surfaceContainerLowest = DarkSurfaceContainerLowest, surfaceDim = DarkSurfaceDim, - primaryFixed = DarkAccent, - primaryFixedDim = DarkSurfaceVariant, - onPrimaryFixed = DarkBackground, - onPrimaryFixedVariant = DarkText, - secondaryFixed = DarkAccent, - secondaryFixedDim = DarkSurfaceVariant, - onSecondaryFixed = DarkBackground, - onSecondaryFixedVariant = DarkText, - tertiaryFixed = DarkAccent, - tertiaryFixedDim = DarkSurfaceVariant, - onTertiaryFixed = DarkBackground, - onTertiaryFixedVariant = DarkText, ) \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ec5425eb..649f8360 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,6 +8,5 @@ org.gradle.jvmargs=-Xmx4096M -Dfile.encoding=UTF-8 #Android android.useAndroidX=true -# TODO-libs remove -android.builtInKotlin=false -android.newDsl=false \ No newline at end of file +#Compose (the wasm/js canvas target is opt-in on Compose Multiplatform 1.8.x) +org.jetbrains.compose.experimental.jscanvas.enabled=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4df27272..b6e5c298 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,38 +1,41 @@ [versions] -agp = "9.2.1" -android-compileSdk = "36" -android-minSdk = "24" -android-targetSdk = "36" -androidx-activityCompose = "1.13.0" -androidx-core-ktx = "1.18.0" -androidx-espresso-core = "3.7.0" -androidx-lifecycle = "2.10.0" -androidx-test-junit = "1.3.0" +# Toolchain pinned to match kulu-kmp (the consumer) so the published +# robustrade:ktor-monitor-* artifacts are consumable by kulu-kmp and the android app. +# DO NOT bump kotlin / compose-multiplatform above kulu-kmp's versions (Kotlin 2.2.0 / Compose 1.8.2): +# a KMP library must be built with Kotlin <= its consumer, or klib metadata can't be read. +agp = "8.10.0" +android-compileSdk = "35" +android-minSdk = "21" +android-targetSdk = "35" +androidx-activityCompose = "1.9.3" +androidx-core-ktx = "1.15.0" +androidx-espresso-core = "3.6.1" +androidx-lifecycle = "2.9.0" +androidx-test-junit = "1.2.1" accompanist = "0.37.3" -compose-adaptive = "1.2.0" -compose-multiplatform = "1.11.0" +compose-adaptive = "1.1.2" +compose-multiplatform = "1.8.2" desugar = "2.1.5" junit = "4.13.2" -kotlin = "2.3.21" -kotlinx-coroutines = "1.11.0" -ksoup = "0.2.6" -ktor = "3.5.0" +kotlin = "2.2.0" +kotlinx-coroutines = "1.10.2" +ksoup = "0.2.5" +ktor = "3.0.1" okhttp = "5.3.2" http4k = "6.48.0.0" -material3AdaptiveNavigationSuite = "1.9.0" +material3AdaptiveNavigationSuite = "1.8.2" materialIconsExtended = "1.7.3" -material3 = "1.11.0-alpha07" +material3 = "1.8.2" slf4j = "2.0.18" -sqldelight = "2.3.2" +sqldelight = "2.2.1" sqljs = "1.11.0" webpack = "9.1.0" -koin = "4.2.1" -koin-plugin = "1.0.0" -kotlinx-datetime = "0.8.0" -kotlinx-serialization = "1.11.0" -coil = "3.4.0" -kotlin-atomicfu = "0.32.1" -maven-publish = "0.36.0" +koin = "4.0.0" +kotlinx-datetime = "0.6.0" +kotlinx-serialization = "1.9.0" +coil = "3.0.4" +kotlin-atomicfu = "0.29.0" +maven-publish = "0.34.0" navigation-event = "1.1.0" binary-compatibility-validator = "0.18.1" dokka = "2.2.0" @@ -60,7 +63,7 @@ compose-material3 = { module = "org.jetbrains.compose.material3:material3", vers compose-material3-adaptive-navigation-suite = { module = "org.jetbrains.compose.material3:material3-adaptive-navigation-suite", version.ref = "material3AdaptiveNavigationSuite" } compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose-multiplatform" } navigation-event = { module = "org.jetbrains.androidx.navigationevent:navigationevent-compose", version.ref = "navigation-event" } -compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "compose-multiplatform" } +compose-ui-tooling-preview = { module = "org.jetbrains.compose.components:components-ui-tooling-preview", version.ref = "compose-multiplatform" } kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" } ksoup = { module = "com.fleeksoft.ksoup:ksoup", version.ref = "ksoup" } okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } @@ -104,7 +107,6 @@ composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-mu composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlinxSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } -koin-compiler = { id = "io.insert-koin.compiler.plugin", version.ref = "koin-plugin" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } kotlinx-atomicfu = { id = "org.jetbrains.kotlinx.atomicfu", version.ref = "kotlin-atomicfu" } maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "maven-publish" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5c01b664..1a391361 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ #Sat Jan 25 18:49:14 EET 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/http4k/library-http4k-no-op/api/android/library-http4k-no-op.api b/http4k/library-http4k-no-op/api/android/library-http4k-no-op.api deleted file mode 100644 index 310106c1..00000000 --- a/http4k/library-http4k-no-op/api/android/library-http4k-no-op.api +++ /dev/null @@ -1,22 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilter : org/http4k/core/Filter { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public synthetic fun invoke (Ljava/lang/Object;)Ljava/lang/Object; - public fun invoke (Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/http4k/library-http4k-no-op/api/jvm/library-http4k-no-op.api b/http4k/library-http4k-no-op/api/jvm/library-http4k-no-op.api deleted file mode 100644 index 310106c1..00000000 --- a/http4k/library-http4k-no-op/api/jvm/library-http4k-no-op.api +++ /dev/null @@ -1,22 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilter : org/http4k/core/Filter { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public synthetic fun invoke (Ljava/lang/Object;)Ljava/lang/Object; - public fun invoke (Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/http4k/library-http4k-no-op/api/library-http4k-no-op.klib.api b/http4k/library-http4k-no-op/api/library-http4k-no-op.klib.api deleted file mode 100644 index e69de29b..00000000 diff --git a/http4k/library-http4k-no-op/build.gradle.kts b/http4k/library-http4k-no-op/build.gradle.kts deleted file mode 100644 index 98360ccb..00000000 --- a/http4k/library-http4k-no-op/build.gradle.kts +++ /dev/null @@ -1,106 +0,0 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidLibrary) - alias(libs.plugins.maven.publish) - alias(libs.plugins.binary.compatibility.validator) -} - -mavenPublishing { - publishToMavenCentral() - - signAllPublications() - - val artifact = "ktor-monitor-http4k-filter-no-op" - coordinates(group.toString(), artifact, version.toString()) - - pom { - name.set("Ktor Monitor - http4k Filter (No-Op)") - description.set("""No-op implementation of the http4k Filter for Ktor Monitor.""".trimMargin()) - inceptionYear.set("2026") - url.set("https://github.com/CosminMihuMDC/KtorMonitor") - - licenses { - license { - name = "The Apache Software License, Version 2.0" - url = "https://www.apache.org/licenses/LICENSE-2.0.txt" - distribution = "https://www.apache.org/licenses/LICENSE-2.0.txt" - } - } - - developers { - developer { - id = "Cosmin Mihu" - name = "Cosmin Mihu" - url = "https://www.cosminmihu.ro/" - } - } - - scm { - url = "https://github.com/CosminMihuMDC/KtorMonitor.git" - connection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - developerConnection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - } - - issueManagement { - system = "GitHub Issues" - url = "https://github.com/CosminMihuMDC/KtorMonitor/issues" - } - - ciManagement { - system = "GitHub Actions" - url = "https://github.com/CosminMihuMDC/KtorMonitor/actions" - } - - distributionManagement { - downloadUrl = "https://github.com/CosminMihuMDC/KtorMonitor/releases" - } - } -} - -apiValidation { - @OptIn(kotlinx.validation.ExperimentalBCVApi::class) - klib { - enabled = true - strictValidation = true - } -} - -kotlin { - explicitApi() - - jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } - - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - publishLibraryVariants("debug", "release") - } - - jvm() - - sourceSets { - commonMain.dependencies { - api(projects.core.libraryNoOp) - implementation(libs.http4k.core) - } - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.http4k.noop" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.android.minSdk.get().toInt() - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - diff --git a/http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt b/http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt deleted file mode 100644 index f1b91c08..00000000 --- a/http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt +++ /dev/null @@ -1,15 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import org.http4k.core.Filter -import org.http4k.core.HttpHandler - -/** - * No-op implementation. - */ -public class KtorMonitorFilter() : Filter { - - public constructor(block: KtorMonitorFilterConfig.() -> Unit) : this() - - override fun invoke(next: HttpHandler): HttpHandler = next -} - diff --git a/http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt b/http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt deleted file mode 100644 index 6c7dc878..00000000 --- a/http4k/library-http4k-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt +++ /dev/null @@ -1,27 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import org.http4k.core.Request -import kotlin.time.Duration - -/** - * No-op implementation. - */ -public class KtorMonitorFilterConfig { - - public fun filter(predicate: (Request) -> Boolean) { - // Not implemented. - } - - public fun sanitizeHeader(placeholder: String = "***", predicate: (String) -> Boolean) { - // Not implemented. - } - - public var isActive: Boolean = false - - public var showNotification: Boolean = false - - public var retentionPeriod: Duration = Duration.ZERO - - public var maxContentLength: Int = 0 -} - diff --git a/http4k/library-http4k/api/android/library-http4k.api b/http4k/library-http4k/api/android/library-http4k.api deleted file mode 100644 index 310106c1..00000000 --- a/http4k/library-http4k/api/android/library-http4k.api +++ /dev/null @@ -1,22 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilter : org/http4k/core/Filter { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public synthetic fun invoke (Ljava/lang/Object;)Ljava/lang/Object; - public fun invoke (Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/http4k/library-http4k/api/jvm/library-http4k.api b/http4k/library-http4k/api/jvm/library-http4k.api deleted file mode 100644 index 310106c1..00000000 --- a/http4k/library-http4k/api/jvm/library-http4k.api +++ /dev/null @@ -1,22 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilter : org/http4k/core/Filter { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public synthetic fun invoke (Ljava/lang/Object;)Ljava/lang/Object; - public fun invoke (Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/http4k/library-http4k/api/library-http4k.klib.api b/http4k/library-http4k/api/library-http4k.klib.api deleted file mode 100644 index e69de29b..00000000 diff --git a/http4k/library-http4k/build.gradle.kts b/http4k/library-http4k/build.gradle.kts deleted file mode 100644 index fc933fe1..00000000 --- a/http4k/library-http4k/build.gradle.kts +++ /dev/null @@ -1,116 +0,0 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidLibrary) - alias(libs.plugins.maven.publish) - alias(libs.plugins.binary.compatibility.validator) - alias(libs.plugins.dokka) -} - -mavenPublishing { - publishToMavenCentral() - - signAllPublications() - - val artifact = "ktor-monitor-http4k-filter" - coordinates(group.toString(), artifact, version.toString()) - - pom { - name.set("Ktor Monitor - http4k Filter") - description.set("""http4k Filter that provides the capability to log HTTP calls for Ktor Monitor.""".trimMargin()) - inceptionYear.set("2026") - url.set("https://github.com/CosminMihuMDC/KtorMonitor") - - licenses { - license { - name = "The Apache Software License, Version 2.0" - url = "https://www.apache.org/licenses/LICENSE-2.0.txt" - distribution = "https://www.apache.org/licenses/LICENSE-2.0.txt" - } - } - - developers { - developer { - id = "Cosmin Mihu" - name = "Cosmin Mihu" - url = "https://www.cosminmihu.ro/" - } - } - - scm { - url = "https://github.com/CosminMihuMDC/KtorMonitor.git" - connection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - developerConnection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - } - - issueManagement { - system = "GitHub Issues" - url = "https://github.com/CosminMihuMDC/KtorMonitor/issues" - } - - ciManagement { - system = "GitHub Actions" - url = "https://github.com/CosminMihuMDC/KtorMonitor/actions" - } - - distributionManagement { - downloadUrl = "https://github.com/CosminMihuMDC/KtorMonitor/releases" - } - } -} - -apiValidation { - @OptIn(kotlinx.validation.ExperimentalBCVApi::class) - klib { - enabled = true - strictValidation = true - } -} - -dokka { - moduleName = "http4k Filter" - moduleVersion = project.version.toString() -} - -dependencies { - dokka(projects.core.library) -} - -kotlin { - explicitApi() - - jvmToolchain { - languageVersion = JavaLanguageVersion.of(11) - } - - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - publishLibraryVariants("debug", "release") - } - - jvm() - - sourceSets { - commonMain.dependencies { - api(projects.core.library) - implementation(libs.http4k.core) - } - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.http4k" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.android.minSdk.get().toInt() - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - diff --git a/http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt b/http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt deleted file mode 100644 index 9c826638..00000000 --- a/http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilter.kt +++ /dev/null @@ -1,200 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import kotlinx.coroutines.launch -import org.http4k.core.Filter -import org.http4k.core.HttpHandler -import ro.cosminmihu.ktor.monitor.domain.model.ClientSource -import kotlin.math.abs -import kotlin.random.Random -import kotlin.time.Clock -import kotlin.time.ExperimentalTime - -/** - * An [http4k](https://www.http4k.org/) [Filter] that provides the capability to log HTTP calls. - * - * You can learn more from [KtorMonitor](https://github.com/CosminMihuMDC/KtorMonitor). - * - * ```kotlin - * KtorMonitorFilter { - * sanitizeHeader { header -> header == "Authorization" } - * isActive = true - * showNotification = true - * retentionPeriod = RetentionPeriod.OneHour - * maxContentLength = ContentLength.Default - * }.then(JavaHttpClient()) - * ``` - */ -public class KtorMonitorFilter() : Filter { - - private val config: KtorMonitorFilterConfig = KtorMonitorFilterConfig() - - public constructor(block: KtorMonitorFilterConfig.() -> Unit) : this() { - config.apply(block) - } - - init { - @OptIn(InternalKtorMonitorApi::class) - InternalLibraryBridge.setConfig( - isActive = config.isActive, - showNotification = config.showNotification, - retentionPeriod = config.retentionPeriod, - maxContentLength = config.maxContentLength, - clientSource = ClientSource.Http4k, - ) - - if (config.isActive && config.retentionPeriod.isPositive()) { - @OptIn(InternalKtorMonitorApi::class) - InternalLibraryBridge.startListening() - } - } - - @OptIn(InternalKtorMonitorApi::class, ExperimentalTime::class) - override fun invoke(next: HttpHandler): HttpHandler = { request -> - // Check if plugin is active. - if (!config.isActive || !config.retentionPeriod.isPositive()) { - next(request) - } else { - // Filter. - val shouldLog = config.filters.isEmpty() || config.filters.any { it(request) } - if (!shouldLog) { - next(request) - } else { - // Generate call id. - val id = callIdentifier - - // Log request. - val requestTimestamp = Clock.System.now().toEpochMilliseconds() - val method = request.method.name - val url = request.uri.toString() - val requestContentType = request.header("Content-Type") - - // Request body bytes — duplicate ByteBuffer to avoid consuming the original. - val requestBodyBytes = try { - val buf = request.body.payload.duplicate() - val bytes = ByteArray(buf.remaining()).also { buf.get(it) } - if (config.maxContentLength != ContentLength.Full) { - bytes.take(config.maxContentLength).toByteArray() - } else bytes - } catch (_: Throwable) { - null - } - val requestContentLength = request.body.length - ?: requestBodyBytes?.size?.toLong() - ?: 0L - - // Request headers. - val requestHeaders = request.headers - .groupBy({ it.first }) { it.second ?: "" } - .mapValues { (key, values) -> - val sanitized = config.sanitizedHeaders.firstOrNull { it.predicate(key) } - if (sanitized != null) listOf(sanitized.placeholder) else values - } - .toSortedMap() - - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveRequest( - id = id, - method = method, - url = url, - requestTimestamp = requestTimestamp, - requestHeaders = requestHeaders, - requestContentType = requestContentType, - requestContentLength = requestContentLength, - requestBody = requestBodyBytes, - isRequestBodyTruncated = requestContentLength != 0L && requestContentLength > config.maxContentLength, - ) - } catch (_: Throwable) { - } - } - - // Proceed with request. - val response = try { - next(request) - } catch (cause: Throwable) { - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveRequestError(id = id, error = cause) - } catch (_: Throwable) { - } - } - throw cause - } - - // Log response. - val responseTimestamp = Clock.System.now().toEpochMilliseconds() - val responseCode = response.status.code - // http4k does not expose the HTTP protocol version; default to HTTP/1.1. - val protocol = "HTTP/1.1" - val responseContentType = response.header("Content-Type") - - // Response headers. - val responseHeaders = response.headers - .groupBy({ it.first }) { it.second ?: "" } - .mapValues { (key, values) -> - val sanitized = config.sanitizedHeaders.firstOrNull { it.predicate(key) } - if (sanitized != null) listOf(sanitized.placeholder) else values - } - .toSortedMap() - - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveResponse( - id = id, - protocol = protocol, - requestTimestamp = requestTimestamp, - responseCode = responseCode, - responseTimestamp = responseTimestamp, - responseContentType = responseContentType, - responseHeaders = responseHeaders, - ) - } catch (_: Throwable) { - } - } - - // Response body — duplicate ByteBuffer so the caller still receives a full body. - val responseBodyBytes = try { - val buf = response.body.payload.duplicate() - ByteArray(buf.remaining()).also { buf.get(it) } - } catch (_: Throwable) { - null - } - val responseContentLength = responseBodyBytes?.size?.toLong() - ?: response.body.length - ?: 0L - - val truncatedBody = if (config.maxContentLength != ContentLength.Full) { - responseBodyBytes?.take(config.maxContentLength)?.toByteArray() - } else { - responseBodyBytes - } - val isResponseBodyTruncated = responseContentLength > config.maxContentLength - - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveResponseBody( - id = id, - responseContentLength = responseContentLength, - responseBody = truncatedBody ?: ByteArray(0), - isResponseBodyTruncated = isResponseBodyTruncated, - ) - } catch (_: Throwable) { - } - } - - response - } - } - } -} - -@OptIn(ExperimentalTime::class) -private val callIdentifier: String - get() { - val timestamp = Clock.System.now().toEpochMilliseconds().toString() - val randomLong = Random.nextLong().toString() - val raw = "$timestamp-$randomLong" - val hash = abs(raw.hashCode()).toString(16) - return "$raw-$hash" - } - diff --git a/http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt b/http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt deleted file mode 100644 index e8681dc0..00000000 --- a/http4k/library-http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorFilterConfig.kt +++ /dev/null @@ -1,71 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import org.http4k.core.Request -import kotlin.time.Duration - -/** - * Configuration for [KtorMonitorFilter]. - */ -public class KtorMonitorFilterConfig { - - internal val filters = mutableListOf<(Request) -> Boolean>() - internal val sanitizedHeaders = mutableListOf() - - /** - * Allows you to filter logs for calls matching a [predicate]. - */ - public fun filter(predicate: (Request) -> Boolean) { - filters.add(predicate) - } - - /** - * Allows you to sanitize sensitive headers to avoid their values appearing in the logs. - * In the example below, Authorization header value will be replaced with '***' when logging: - * ```kotlin - * sanitizeHeader { header -> header == "Authorization" } - * ``` - */ - public fun sanitizeHeader(placeholder: String = "***", predicate: (String) -> Boolean) { - sanitizedHeaders.add(SanitizedHeader(placeholder, predicate)) - } - - /** - * Enable or disable the logging of requests and responses. - * By default, enabled. - */ - @OptIn(InternalKtorMonitorApi::class) - public var isActive: Boolean = true - - /** - * Keep track of latest requests and responses into notification. - * By default: - * - android - enabled. android.permission.POST_NOTIFICATIONS needs to be granted. - * - ios - not supported. - * - desktop - not supported. - * - web - not supported. - */ - public var showNotification: Boolean = true - - /** - * The retention period for the logs. - * By default, it is 1 hour. - */ - public var retentionPeriod: Duration = RetentionPeriod.OneHour - - /** - * The maximum length of the content that will be logged. - * After this, body will be truncated. - * By default, it is [ContentLength.Default]. - * Use [ContentLength.Full] to log the full content. - */ - public var maxContentLength: Int = ContentLength.Default -} - -/** - * Configuration for a sanitized header. - */ -internal class SanitizedHeader( - val placeholder: String, - val predicate: (String) -> Boolean, -) - diff --git a/kotlin-js-store/wasm/yarn.lock b/kotlin-js-store/wasm/yarn.lock deleted file mode 100644 index e7d90b30..00000000 --- a/kotlin-js-store/wasm/yarn.lock +++ /dev/null @@ -1,285 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@cashapp/sqldelight-sqljs-worker@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@cashapp/sqldelight-sqljs-worker/-/sqldelight-sqljs-worker-2.3.2.tgz#605d9799130dbb40c8db77cd732258b29dbc83fa" - integrity sha512-j43u8FCiLCz52rI/+NP4sXNviwaKS59eggvqjPRji8l62SYQEps5IlW1/fMm8s9BH4nbfaGX1YPSbbdThkXt4w== - -"@js-joda/core@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273" - integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@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== - -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.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" - integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== - 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" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -copy-webpack-plugin@9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz#2d2c460c4c4695ec0a58afb2801a1205256c4e6b" - integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== - dependencies: - fast-glob "^3.2.7" - glob-parent "^6.0.1" - globby "^11.0.3" - normalize-path "^3.0.0" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -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-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -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== - -fastq@^1.6.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" - integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== - dependencies: - reusify "^1.0.4" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -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-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -globby@^11.0.3: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -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-glob@^4.0.1, is-glob@^4.0.3: - 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== - -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== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -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== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" - integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== - -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== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -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" - -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -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== - -schema-utils@^3.1.1: - 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.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -sql.js@1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/sql.js/-/sql.js-1.11.0.tgz#2fcfb6aa24fae9b8ecc5395c70fc596a71247994" - integrity sha512-GsLUDU3vhOo14Pd5ME0y2te49JQyby6HuoCuadevEV+CGgTUjmYRrm7B7lhRyzOgrmcWmspUfyjNb6sOAEqdsA== - -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" - -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" - -ws@8.18.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -ws@8.18.3: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock deleted file mode 100644 index 7fc39f49..00000000 --- a/kotlin-js-store/yarn.lock +++ /dev/null @@ -1,3518 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@cashapp/sqldelight-sqljs-worker@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@cashapp/sqldelight-sqljs-worker/-/sqldelight-sqljs-worker-2.3.2.tgz#605d9799130dbb40c8db77cd732258b29dbc83fa" - integrity sha512-j43u8FCiLCz52rI/+NP4sXNviwaKS59eggvqjPRji8l62SYQEps5IlW1/fMm8s9BH4nbfaGX1YPSbbdThkXt4w== - -"@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.6.1": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" - integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" - integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - "@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/source-map@^0.3.3": - version "0.3.11" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" - integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - -"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" - integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.31" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" - integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@js-joda/core@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273" - integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg== - -"@jsonjoy.com/base64@17.67.0": - version "17.67.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-17.67.0.tgz#7eeda3cb41138d77a90408fd2e42b2aba10576d7" - integrity sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw== - -"@jsonjoy.com/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" - integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== - -"@jsonjoy.com/buffers@17.67.0", "@jsonjoy.com/buffers@^17.65.0": - version "17.67.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz#5c58dbcdeea8824ce296bd1cfce006c2eb167b3d" - integrity sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw== - -"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" - integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== - -"@jsonjoy.com/codegen@17.67.0": - version "17.67.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz#3635fd8769d77e19b75dc5574bc9756019b2e591" - integrity sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q== - -"@jsonjoy.com/codegen@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" - integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== - -"@jsonjoy.com/fs-core@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.57.2.tgz#e28f357ba9983ce53577ba34fc72d344f19ec459" - integrity sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ== - dependencies: - "@jsonjoy.com/fs-node-builtins" "4.57.2" - "@jsonjoy.com/fs-node-utils" "4.57.2" - thingies "^2.5.0" - -"@jsonjoy.com/fs-fsa@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.2.tgz#ec6dd492ff8c104a0c1eae74959a013960fe8969" - integrity sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g== - dependencies: - "@jsonjoy.com/fs-core" "4.57.2" - "@jsonjoy.com/fs-node-builtins" "4.57.2" - "@jsonjoy.com/fs-node-utils" "4.57.2" - thingies "^2.5.0" - -"@jsonjoy.com/fs-node-builtins@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.2.tgz#9174b87e70213b38caf1ac8669b130c4dfd6a909" - integrity sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg== - -"@jsonjoy.com/fs-node-to-fsa@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.2.tgz#8542449b72dfc48f3bfe311a7b0af5323f9bc926" - integrity sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ== - dependencies: - "@jsonjoy.com/fs-fsa" "4.57.2" - "@jsonjoy.com/fs-node-builtins" "4.57.2" - "@jsonjoy.com/fs-node-utils" "4.57.2" - -"@jsonjoy.com/fs-node-utils@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.2.tgz#c3234c03b1e59d609a0915572dd6f450be0463b1" - integrity sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ== - dependencies: - "@jsonjoy.com/fs-node-builtins" "4.57.2" - -"@jsonjoy.com/fs-node@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.57.2.tgz#8db2875df19683683e5852053e0099e233dc45d2" - integrity sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg== - dependencies: - "@jsonjoy.com/fs-core" "4.57.2" - "@jsonjoy.com/fs-node-builtins" "4.57.2" - "@jsonjoy.com/fs-node-utils" "4.57.2" - "@jsonjoy.com/fs-print" "4.57.2" - "@jsonjoy.com/fs-snapshot" "4.57.2" - glob-to-regex.js "^1.0.0" - thingies "^2.5.0" - -"@jsonjoy.com/fs-print@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.57.2.tgz#286c4ceda19225a5c54aaad657ad9f466d5bd0c1" - integrity sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ== - dependencies: - "@jsonjoy.com/fs-node-utils" "4.57.2" - tree-dump "^1.1.0" - -"@jsonjoy.com/fs-snapshot@4.57.2": - version "4.57.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.2.tgz#800424a076638a605dad5ef1540915bc0167d7f8" - integrity sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw== - dependencies: - "@jsonjoy.com/buffers" "^17.65.0" - "@jsonjoy.com/fs-node-utils" "4.57.2" - "@jsonjoy.com/json-pack" "^17.65.0" - "@jsonjoy.com/util" "^17.65.0" - -"@jsonjoy.com/json-pack@^1.11.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" - integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== - dependencies: - "@jsonjoy.com/base64" "^1.1.2" - "@jsonjoy.com/buffers" "^1.2.0" - "@jsonjoy.com/codegen" "^1.0.0" - "@jsonjoy.com/json-pointer" "^1.0.2" - "@jsonjoy.com/util" "^1.9.0" - hyperdyperid "^1.2.0" - thingies "^2.5.0" - tree-dump "^1.1.0" - -"@jsonjoy.com/json-pack@^17.65.0": - version "17.67.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz#8dd8ff65dd999c5d4d26df46c63915c7bdec093a" - integrity sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w== - dependencies: - "@jsonjoy.com/base64" "17.67.0" - "@jsonjoy.com/buffers" "17.67.0" - "@jsonjoy.com/codegen" "17.67.0" - "@jsonjoy.com/json-pointer" "17.67.0" - "@jsonjoy.com/util" "17.67.0" - hyperdyperid "^1.2.0" - thingies "^2.5.0" - tree-dump "^1.1.0" - -"@jsonjoy.com/json-pointer@17.67.0": - version "17.67.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz#74439573dc046e0c9a3a552fb94b391bc75313b8" - integrity sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA== - dependencies: - "@jsonjoy.com/util" "17.67.0" - -"@jsonjoy.com/json-pointer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" - integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== - dependencies: - "@jsonjoy.com/codegen" "^1.0.0" - "@jsonjoy.com/util" "^1.9.0" - -"@jsonjoy.com/util@17.67.0", "@jsonjoy.com/util@^17.65.0": - version "17.67.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-17.67.0.tgz#7c4288fc3808233e55c7610101e7bb4590cddd3f" - integrity sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew== - dependencies: - "@jsonjoy.com/buffers" "17.67.0" - "@jsonjoy.com/codegen" "17.67.0" - -"@jsonjoy.com/util@^1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" - integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== - dependencies: - "@jsonjoy.com/buffers" "^1.0.0" - "@jsonjoy.com/codegen" "^1.0.0" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" - integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== - -"@noble/hashes@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@peculiar/asn1-cms@^2.6.0", "@peculiar/asn1-cms@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz#cb5445c1bad9197d176073bf142a5c035b460640" - integrity sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw== - dependencies: - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.1" - "@peculiar/asn1-x509-attr" "^2.6.1" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-csr@^2.6.0": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz#9629d403bc5a61254f28ed0b90e99cee61c0e8be" - integrity sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w== - dependencies: - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.1" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-ecc@^2.6.0": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz#d29c4af671508a9934edc78e7c9419fbf7bc9870" - integrity sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g== - dependencies: - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.1" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-pfx@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz#75cddd14d43ef875109e91ea150377d679c8fbc1" - integrity sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw== - dependencies: - "@peculiar/asn1-cms" "^2.6.1" - "@peculiar/asn1-pkcs8" "^2.6.1" - "@peculiar/asn1-rsa" "^2.6.1" - "@peculiar/asn1-schema" "^2.6.0" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-pkcs8@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz#bd56b4bb9e8a3702369049713a89134c87c6931a" - integrity sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw== - dependencies: - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.1" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-pkcs9@^2.6.0": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz#ddc5222952f25b59a0562a6f8cabdb72f586a496" - integrity sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw== - dependencies: - "@peculiar/asn1-cms" "^2.6.1" - "@peculiar/asn1-pfx" "^2.6.1" - "@peculiar/asn1-pkcs8" "^2.6.1" - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.1" - "@peculiar/asn1-x509-attr" "^2.6.1" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-rsa@^2.6.0", "@peculiar/asn1-rsa@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz#2cdf9f9ea6d6fdbaae214b9fed6de0534b654437" - integrity sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA== - dependencies: - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.1" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-schema@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz#0dca1601d5b0fed2a72fed7a5f1d0d7dbe3a6f82" - integrity sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg== - dependencies: - asn1js "^3.0.6" - pvtsutils "^1.3.6" - tslib "^2.8.1" - -"@peculiar/asn1-x509-attr@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz#6425008b8099476010aace5b8ae9f9cbc41db0ab" - integrity sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ== - dependencies: - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.1" - asn1js "^3.0.6" - tslib "^2.8.1" - -"@peculiar/asn1-x509@^2.6.0", "@peculiar/asn1-x509@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz#4e8995659e16178e0e90fe90519aa269045af262" - integrity sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA== - dependencies: - "@peculiar/asn1-schema" "^2.6.0" - asn1js "^3.0.6" - pvtsutils "^1.3.6" - tslib "^2.8.1" - -"@peculiar/x509@^1.14.2": - version "1.14.3" - resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e" - integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA== - dependencies: - "@peculiar/asn1-cms" "^2.6.0" - "@peculiar/asn1-csr" "^2.6.0" - "@peculiar/asn1-ecc" "^2.6.0" - "@peculiar/asn1-pkcs9" "^2.6.0" - "@peculiar/asn1-rsa" "^2.6.0" - "@peculiar/asn1-schema" "^2.6.0" - "@peculiar/asn1-x509" "^2.6.0" - pvtsutils "^1.3.6" - reflect-metadata "^0.2.2" - tslib "^2.8.1" - tsyringe "^4.10.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@socket.io/component-emitter@~3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" - integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== - -"@types/body-parser@*": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" - integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" - integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.5.4": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" - integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/cors@^2.8.12": - version "2.8.19" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" - integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.7": - 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 "9.6.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" - integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" - integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz#1a77faffee9572d39124933259be2523837d7eaa" - integrity sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": - version "4.19.8" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz#99b960322a4d576b239a640ab52ef191989b036f" - integrity sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" - integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^5.0.0" - "@types/serve-static" "^2" - -"@types/express@^4.17.25": - version "4.17.25" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" - integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "^1" - -"@types/http-errors@*": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" - integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== - -"@types/http-proxy@^1.17.8": - version "1.17.17" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.17.tgz#d9e2c4571fe3507343cb210cd41790375e59a533" - integrity sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw== - dependencies: - "@types/node" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - 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/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node@*", "@types/node@>=10.0.0": - version "25.6.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.6.0.tgz#4e09bad9b469871f2d0f68140198cbd714f4edca" - integrity sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ== - dependencies: - undici-types "~7.19.0" - -"@types/qs@*": - version "6.15.0" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.0.tgz#963ab61779843fe910639a50661b48f162bc7f79" - integrity sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/retry@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" - integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== - -"@types/send@*": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" - integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== - dependencies: - "@types/node" "*" - -"@types/send@<1": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" - integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.4": - version "1.9.4" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" - integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== - dependencies: - "@types/express" "*" - -"@types/serve-static@^1", "@types/serve-static@^1.15.5": - version "1.15.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" - integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "<1" - -"@types/serve-static@^2": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" - integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.36": - version "0.3.36" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" - integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== - dependencies: - "@types/node" "*" - -"@types/ws@^8.5.10", "@types/ws@^8.5.12": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" - integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== - dependencies: - "@types/node" "*" - -"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" - integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== - dependencies: - "@webassemblyjs/helper-numbers" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - -"@webassemblyjs/floating-point-hex-parser@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" - integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== - -"@webassemblyjs/helper-api-error@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" - integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== - -"@webassemblyjs/helper-buffer@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" - integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== - -"@webassemblyjs/helper-numbers@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" - integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.13.2" - "@webassemblyjs/helper-api-error" "1.13.2" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" - integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== - -"@webassemblyjs/helper-wasm-section@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" - integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/wasm-gen" "1.14.1" - -"@webassemblyjs/ieee754@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" - integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" - integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" - integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== - -"@webassemblyjs/wasm-edit@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" - integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/helper-wasm-section" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-opt" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - "@webassemblyjs/wast-printer" "1.14.1" - -"@webassemblyjs/wasm-gen@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" - integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wasm-opt@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" - integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - -"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" - integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-api-error" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wast-printer@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" - integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-3.0.1.tgz#76ac285b9658fa642ce238c276264589aa2b6b57" - integrity sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA== - -"@webpack-cli/info@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-3.0.1.tgz#3cff37fabb7d4ecaab6a8a4757d3826cf5888c63" - integrity sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ== - -"@webpack-cli/serve@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-3.0.1.tgz#bd8b1f824d57e30faa19eb78e4c0951056f72f00" - integrity sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg== - -"@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, accepts@~1.3.8: - 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-phases@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" - integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== - -acorn@^8.15.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" - integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -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-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.5: - version "6.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" - integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== - 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" - -ajv@^8.0.0, ajv@^8.9.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" - integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -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-regex@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" - integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== - -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" - -ansi-styles@^6.1.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" - integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== - -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== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -asn1js@^3.0.6: - version "3.0.7" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.7.tgz#15f1f2f59e60f80d5b43ef14047a294a969f824f" - integrity sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ== - dependencies: - pvtsutils "^1.3.6" - pvutils "^1.1.3" - tslib "^2.8.1" - -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== - -baseline-browser-mapping@^2.10.12: - version "2.10.19" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz#7697721c22f94f66195d0c34299b1a91e3299493" - integrity sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -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, body-parser@~1.20.3: - version "1.20.4" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" - integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== - 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.1" - iconv-lite "~0.4.24" - on-finished "~2.4.1" - qs "~6.14.0" - raw-body "~2.5.3" - type-is "~1.6.18" - unpipe "~1.0.0" - -bonjour-service@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" - integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== - dependencies: - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -brace-expansion@^1.1.7: - version "1.1.14" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.14.tgz#d9de602370d91347cd9ddad1224d4fd701eb348b" - integrity sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae" - integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.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.24.0: - version "4.28.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" - integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== - dependencies: - baseline-browser-mapping "^2.10.12" - caniuse-lite "^1.0.30001782" - electron-to-chromium "^1.5.328" - node-releases "^2.0.36" - update-browserslist-db "^1.2.3" - -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== - -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - -bytes@3.1.2, bytes@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -bytestreamjs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" - integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== - -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -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.30001782: - version "1.0.30001788" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz#31e97d1bfec332b3f2d7eea7781460c97629b3bf" - integrity sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ== - -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.1, chokidar@^3.6.0: - 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" - -chokidar@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" - integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== - dependencies: - readdirp "^4.0.1" - -chrome-trace-event@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" - integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== - -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" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - 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.10, 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@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - -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== - -compressible@~2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" - integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== - dependencies: - bytes "3.1.2" - compressible "~2.0.18" - debug "2.6.9" - negotiator "~0.6.4" - on-headers "~1.1.0" - safe-buffer "5.2.1" - vary "~1.1.2" - -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-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -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-disposition@~0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, 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-signature@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" - integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== - -cookie@~0.7.1, cookie@~0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - -copy-webpack-plugin@9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz#2d2c460c4c4695ec0a58afb2801a1205256c4e6b" - integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== - dependencies: - fast-glob "^3.2.7" - glob-parent "^6.0.1" - globby "^11.0.3" - normalize-path "^3.0.0" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@~2.8.5: - version "2.8.6" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" - integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== - dependencies: - object-assign "^4" - vary "^1" - -cross-spawn@^7.0.3, cross-spawn@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - 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.1.0, debug@^4.3.4, debug@^4.3.5, debug@~4.4.1: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -default-browser-id@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" - integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== - -default-browser@^5.2.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.5.0.tgz#2792e886f2422894545947cc80e1a444496c5976" - integrity sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw== - dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.0.0" - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - -depd@2.0.0, 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== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -destroy@1.2.0, destroy@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== - -diff@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" - integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-packet@^5.2.2: - version "5.6.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -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" - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.5.328: - version "1.5.340" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.340.tgz#fe3f76e8d9b9541c123fb7edbc3381688272f79a" - integrity sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA== - -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== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -engine.io-parser@~5.2.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" - integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== - -engine.io@~6.6.0: - version "6.6.6" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.6.tgz#9942111e7a4dc31f057e73470d7b7fcc7f74c390" - integrity sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA== - dependencies: - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - "@types/ws" "^8.5.12" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.7.2" - cors "~2.8.5" - debug "~4.4.1" - engine.io-parser "~5.2.1" - ws "~8.18.3" - -enhanced-resolve@^5.17.3: - version "5.20.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz#eeeb3966bea62c348c40a0cc9e7912e2557d0be0" - integrity sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.3.0" - -ent@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.2.tgz#22a5ed2fd7ce0cbcff1d1474cf4909a44bdb6e85" - integrity sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - punycode "^1.4.1" - safe-regex-test "^1.1.0" - -envinfo@^7.14.0: - version "7.21.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" - integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== - -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -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.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -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== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -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== - -express@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" - integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "~1.20.3" - content-disposition "~0.5.4" - content-type "~1.0.4" - cookie "~0.7.1" - cookie-signature "~1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.3.1" - fresh "~0.5.2" - http-errors "~2.0.0" - merge-descriptors "1.0.3" - methods "~1.1.2" - on-finished "~2.4.1" - parseurl "~1.3.3" - path-to-regexp "~0.1.12" - proxy-addr "~2.0.7" - qs "~6.14.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "~0.19.0" - serve-static "~1.16.2" - setprototypeof "1.2.0" - statuses "~2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -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, fast-deep-equal@^3.1.3: - 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-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -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== - -fast-uri@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" - integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== - -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== - -fastq@^1.6.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" - integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - 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" - -finalhandler@~1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" - integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - escape-html "~1.0.3" - on-finished "~2.4.1" - parseurl "~1.3.3" - statuses "~2.0.2" - unpipe "~1.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" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.7: - version "3.4.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" - integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== - -follow-redirects@^1.0.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" - integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== - -foreground-child@^3.1.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" - integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== - dependencies: - cross-spawn "^7.0.6" - signal-exit "^4.0.1" - -format-util@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" - integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -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.2.5, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -glob-parent@^5.1.2, 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-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" - integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== - -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@^10.4.5: - version "10.5.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" - integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^7.1.3, glob@^7.1.7: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - 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" - -globby@^11.0.3: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -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== - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -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-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.3.tgz#5e5c2b15b60370a4c7930c383dfb76bf17bc403c" - integrity sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg== - 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== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@~1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-errors@~2.0.0, http-errors@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" - integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== - dependencies: - depd "~2.0.0" - inherits "~2.0.4" - setprototypeof "~1.2.0" - statuses "~2.0.2" - toidentifier "~1.0.1" - -http-parser-js@>=0.5.1: - version "0.5.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.10.tgz#b3277bd6d7ed5588e20ea73bf724fcbe44609075" - integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== - -http-proxy-middleware@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" - integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -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" - -hyperdyperid@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" - integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== - -iconv-lite@^0.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" - -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" - -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== - 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, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, 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== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" - integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== - -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.16.1: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - -is-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.3, 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-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-network-error@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.1.tgz#a2a86b80ffd6b05b774755c73c8aaab16597e58d" - integrity sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw== - -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-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -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-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -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-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -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== - -is-wsl@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f" - integrity sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw== - dependencies: - is-inside-container "^1.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -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== - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - 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.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== - 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== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -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@github:Kotlin/karma#6.4.5": - version "6.4.4" - resolved "https://codeload.github.com/Kotlin/karma/tar.gz/239a8fc984584f0d96b1dd750e7a5e2c79da93a6" - 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== - -kotlin-web-helpers@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.0.0.tgz#3ed6b48f694f74bb60a737a9d7e2c0e3b29abdb9" - integrity sha512-kdQO4AJQkUPvpLh9aglkXDRyN+CfXO7pKq+GESEnxooBFkQpytLrqZis3ABvmFN1cGw/ZQ/K38u5sRGW+NfBnw== - dependencies: - format-util "^1.0.5" - -launch-editor@^2.6.1: - version "2.13.2" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.13.2.tgz#41d51baaf8afb393224b89bd2bcb4e02f2306405" - integrity sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg== - dependencies: - picocolors "^1.1.1" - shell-quote "^1.8.3" - -loader-runner@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" - integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== - -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.18.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" - integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== - -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" - -lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^4.43.1: - version "4.57.2" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.57.2.tgz#5f74e977c9a14681ea10d427b3ce5d7db5f817e7" - integrity sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ== - dependencies: - "@jsonjoy.com/fs-core" "4.57.2" - "@jsonjoy.com/fs-fsa" "4.57.2" - "@jsonjoy.com/fs-node" "4.57.2" - "@jsonjoy.com/fs-node-builtins" "4.57.2" - "@jsonjoy.com/fs-node-to-fsa" "4.57.2" - "@jsonjoy.com/fs-node-utils" "4.57.2" - "@jsonjoy.com/fs-print" "4.57.2" - "@jsonjoy.com/fs-snapshot" "4.57.2" - "@jsonjoy.com/json-pack" "^1.11.0" - "@jsonjoy.com/util" "^1.9.0" - glob-to-regex.js "^1.0.1" - thingies "^2.5.0" - tree-dump "^1.0.3" - tslib "^2.0.0" - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -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== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -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-db@>= 1.43.0 < 2", mime-db@^1.54.0: - version "1.54.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - -mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34, mime-types@~2.1.35: - 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-types@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" - integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== - dependencies: - mime-db "^1.54.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -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== - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" - integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: - version "9.0.9" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" - integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== - dependencies: - brace-expansion "^2.0.2" - -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== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" - integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== - -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@11.7.5: - version "11.7.5" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.5.tgz#58f5bbfa5e0211ce7e5ee6128107cefc2515a627" - integrity sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig== - dependencies: - browser-stdout "^1.3.1" - chokidar "^4.0.1" - debug "^4.3.5" - diff "^7.0.0" - escape-string-regexp "^4.0.0" - find-up "^5.0.0" - glob "^10.4.5" - he "^1.2.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - log-symbols "^4.1.0" - minimatch "^9.0.5" - ms "^2.1.3" - picocolors "^1.1.1" - serialize-javascript "^6.0.2" - strip-json-comments "^3.1.1" - supports-color "^8.1.1" - workerpool "^9.2.0" - yargs "^17.7.2" - yargs-parser "^21.1.1" - 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.3, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -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== - -negotiator@~0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - -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.36: - version "2.0.37" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.37.tgz#9bd4f10b77ba39c2b9402d4e8399c482a797f671" - integrity sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg== - -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.3, object-inspect@^1.13.4: - version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@^2.4.1, on-finished@~2.4.1: - 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" - -on-headers@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" - integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== - -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" - -open@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" - integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== - dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - wsl-utils "^0.1.0" - -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-retry@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" - integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== - dependencies: - "@types/retry" "0.12.2" - is-network-error "^1.0.0" - retry "^0.13.1" - -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== - -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -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== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@~0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" - integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" - integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== - -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" - -pkijs@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.4.0.tgz#d9164def30ff6d97be2d88966d5e36192499ca9c" - integrity sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw== - dependencies: - "@noble/hashes" "1.4.0" - asn1js "^3.0.6" - bytestreamjs "^2.0.1" - pvtsutils "^1.3.6" - pvutils "^1.1.3" - tslib "^2.8.1" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -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== - -pvtsutils@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" - integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== - dependencies: - tslib "^2.8.1" - -pvutils@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.5.tgz#84b0dea4a5d670249aa9800511804ee0b7c2809c" - integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA== - -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.14.0: - version "6.14.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" - integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== - dependencies: - side-channel "^1.1.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -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, 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.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" - integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== - dependencies: - bytes "~3.1.2" - http-errors "~2.0.1" - iconv-lite "~0.4.24" - unpipe "~1.0.0" - -readable-stream@^2.0.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" - integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== - -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" - -reflect-metadata@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" - integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== - -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== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -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.12" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" - integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== - dependencies: - es-errors "^1.3.0" - is-core-module "^2.16.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -rfdc@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - -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" - -run-applescript@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" - integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.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== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - -"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: - 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" - -schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.2: - version "4.3.3" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" - integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b" - integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew== - dependencies: - "@peculiar/x509" "^1.14.2" - pkijs "^3.3.3" - -send@~0.19.0, send@~0.19.1: - version "0.19.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" - integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "~0.5.2" - http-errors "~2.0.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.4.1" - range-parser "~1.2.1" - statuses "~2.0.2" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.2" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.2.tgz#2988e3612106d78a5e4849ddff552ce7bd3d9bcb" - integrity sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ== - dependencies: - accepts "~1.3.8" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.8.0" - mime-types "~2.1.35" - parseurl "~1.3.3" - -serve-static@~1.16.2: - version "1.16.3" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" - integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "~0.19.1" - -setprototypeof@1.2.0, 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== - -shell-quote@^1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" - integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== - -side-channel-list@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" - integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.4" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -socket.io-adapter@~2.5.2: - version "2.5.6" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz#c697f609d36a676a46749782274607d8df52c1d8" - integrity sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ== - dependencies: - debug "~4.4.1" - ws "~8.18.3" - -socket.io-parser@~4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.6.tgz#19156bf179af3931abd05260cfb1491822578a6f" - integrity sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.4.1" - -socket.io@^4.7.2: - version "4.8.3" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.3.tgz#ca6ba1431c69532e1e0a6f496deebeb601dbc4df" - integrity sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - cors "~2.8.5" - debug "~4.4.1" - engine.io "~6.6.0" - socket.io-adapter "~2.5.2" - socket.io-parser "~4.2.4" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -source-map-js@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -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.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== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -sql.js@1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/sql.js/-/sql.js-1.11.0.tgz#2fcfb6aa24fae9b8ecc5395c70fc596a71247994" - integrity sha512-GsLUDU3vhOo14Pd5ME0y2te49JQyby6HuoCuadevEV+CGgTUjmYRrm7B7lhRyzOgrmcWmspUfyjNb6sOAEqdsA== - -"statuses@>= 1.5.0 < 2", 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== - -statuses@~2.0.1, statuses@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" - integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== - -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-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - 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" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" - integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== - dependencies: - ansi-regex "^6.2.2" - -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@^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-color@^8.0.0, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tapable@^2.1.1, tapable@^2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.2.tgz#86755feabad08d82a26b891db044808c6ad00f15" - integrity sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA== - -terser-webpack-plugin@^5.3.11: - version "5.4.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" - integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== - dependencies: - "@jridgewell/trace-mapping" "^0.3.25" - jest-worker "^27.4.5" - schema-utils "^4.3.0" - terser "^5.31.1" - -terser@^5.31.1: - version "5.46.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.1.tgz#40e4b1e35d5f13130f82793a8b3eeb7ec3a92eee" - integrity sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.15.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -thingies@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.6.0.tgz#e09b98b9e6f6caf8a759eca8481fea1de974d2b1" - integrity sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg== - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tmp@^0.2.1: - version "0.2.5" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" - integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== - -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, 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== - -tree-dump@^1.0.3, tree-dump@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" - integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tsyringe@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" - integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== - dependencies: - tslib "^1.9.3" - -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" - -ua-parser-js@^0.7.30: - version "0.7.41" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.41.tgz#9f6dee58c389e8afababa62a4a2dc22edb69a452" - integrity sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg== - -undici-types@~7.19.0: - version "7.19.2" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.19.2.tgz#1b67fc26d0f157a0cba3a58a5b5c1e2276b8ba2a" - integrity sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg== - -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: - 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.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" - integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - -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" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -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== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -vary@^1, vary@~1.1.2: - 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.5.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" - integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -webpack-cli@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-6.0.1.tgz#a1ce25da5ba077151afd73adfa12e208e5089207" - integrity sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw== - dependencies: - "@discoveryjs/json-ext" "^0.6.1" - "@webpack-cli/configtest" "^3.0.1" - "@webpack-cli/info" "^3.0.1" - "@webpack-cli/serve" "^3.0.1" - colorette "^2.0.14" - commander "^12.1.0" - cross-spawn "^7.0.3" - envinfo "^7.14.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^3.1.1" - rechoir "^0.8.0" - webpack-merge "^6.0.1" - -webpack-dev-middleware@^7.4.2: - version "7.4.5" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" - integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== - dependencies: - colorette "^2.0.10" - memfs "^4.43.1" - mime-types "^3.0.1" - on-finished "^2.4.1" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz#7f36a78be7ac88833fd87757edee31469a9e47d3" - integrity sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ== - dependencies: - "@types/bonjour" "^3.5.13" - "@types/connect-history-api-fallback" "^1.5.4" - "@types/express" "^4.17.25" - "@types/express-serve-static-core" "^4.17.21" - "@types/serve-index" "^1.9.4" - "@types/serve-static" "^1.15.5" - "@types/sockjs" "^0.3.36" - "@types/ws" "^8.5.10" - ansi-html-community "^0.0.8" - bonjour-service "^1.2.1" - chokidar "^3.6.0" - colorette "^2.0.10" - compression "^1.8.1" - connect-history-api-fallback "^2.0.0" - express "^4.22.1" - graceful-fs "^4.2.6" - http-proxy-middleware "^2.0.9" - ipaddr.js "^2.1.0" - launch-editor "^2.6.1" - open "^10.0.3" - p-retry "^6.2.0" - schema-utils "^4.2.0" - selfsigned "^5.5.0" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^7.4.2" - ws "^8.18.0" - -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@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" - integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.1" - -webpack-sources@^3.3.3: - version "3.3.4" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" - integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== - -webpack@5.101.3: - version "5.101.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.101.3.tgz#3633b2375bb29ea4b06ffb1902734d977bc44346" - integrity sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A== - dependencies: - "@types/eslint-scope" "^3.7.7" - "@types/estree" "^1.0.8" - "@types/json-schema" "^7.0.15" - "@webassemblyjs/ast" "^1.14.1" - "@webassemblyjs/wasm-edit" "^1.14.1" - "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.15.0" - acorn-import-phases "^1.0.3" - browserslist "^4.24.0" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.3" - 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 "^4.3.2" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.11" - watchpack "^2.4.1" - webpack-sources "^3.3.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -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.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -workerpool@^9.2.0: - version "9.3.4" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.4.tgz#f6c92395b2141afd78e2a889e80cb338fe9fca41" - integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@8.18.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -ws@8.18.3, ws@~8.18.3: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - -ws@^8.18.0: - version "8.20.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8" - integrity sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA== - -wsl-utils@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" - integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== - dependencies: - is-wsl "^3.1.0" - -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.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-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -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.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" - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -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/ktor/library-ktor-no-op/api/jvm/library-ktor-no-op.api b/ktor/library-ktor-no-op/api/jvm/library-ktor-no-op.api deleted file mode 100644 index c177009f..00000000 --- a/ktor/library-ktor-no-op/api/jvm/library-ktor-no-op.api +++ /dev/null @@ -1,19 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorLoggingConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorLoggingConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorLoggingKt { - public static final fun getKtorMonitorLogging ()Lio/ktor/client/plugins/api/ClientPlugin; -} - diff --git a/ktor/library-ktor-no-op/api/android/library-ktor-no-op.api b/ktor/library-ktor-no-op/api/library-ktor-no-op.api similarity index 100% rename from ktor/library-ktor-no-op/api/android/library-ktor-no-op.api rename to ktor/library-ktor-no-op/api/library-ktor-no-op.api diff --git a/ktor/library-ktor-no-op/api/library-ktor-no-op.klib.api b/ktor/library-ktor-no-op/api/library-ktor-no-op.klib.api index aa0ca50e..3a64a495 100644 --- a/ktor/library-ktor-no-op/api/library-ktor-no-op.klib.api +++ b/ktor/library-ktor-no-op/api/library-ktor-no-op.klib.api @@ -1,11 +1,11 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, js, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true // - Show declarations: true -// Library unique name: +// Library unique name: final class ro.cosminmihu.ktor.monitor/KtorMonitorLoggingConfig { // ro.cosminmihu.ktor.monitor/KtorMonitorLoggingConfig|null[0] constructor () // ro.cosminmihu.ktor.monitor/KtorMonitorLoggingConfig.|(){}[0] diff --git a/ktor/library-ktor-no-op/build.gradle.kts b/ktor/library-ktor-no-op/build.gradle.kts index 504bf8de..4f8c5546 100644 --- a/ktor/library-ktor-no-op/build.gradle.kts +++ b/ktor/library-ktor-no-op/build.gradle.kts @@ -1,4 +1,3 @@ -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { @@ -9,10 +8,6 @@ plugins { } mavenPublishing { - publishToMavenCentral() - - signAllPublications() - val artifact = "ktor-monitor-logging-no-op" coordinates(group.toString(), artifact, version.toString()) @@ -79,15 +74,6 @@ kotlin { freeCompilerArgs.add("-Xexpect-actual-classes") // TODO remove after jetbrains fix } - js { - browser() - } - - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser() - } - androidTarget { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) @@ -100,18 +86,12 @@ kotlin { iosSimulatorArm64(), ) - jvm() - sourceSets { commonMain.dependencies { api(projects.core.libraryNoOp) implementation(libs.ktor.client.core) } } - - jvmToolchain { - languageVersion = JavaLanguageVersion.of(11) - } } android { diff --git a/ktor/library-ktor/api/jvm/library-ktor.api b/ktor/library-ktor/api/jvm/library-ktor.api deleted file mode 100644 index c177009f..00000000 --- a/ktor/library-ktor/api/jvm/library-ktor.api +++ /dev/null @@ -1,19 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorLoggingConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorLoggingConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorLoggingKt { - public static final fun getKtorMonitorLogging ()Lio/ktor/client/plugins/api/ClientPlugin; -} - diff --git a/ktor/library-ktor/api/android/library-ktor.api b/ktor/library-ktor/api/library-ktor.api similarity index 100% rename from ktor/library-ktor/api/android/library-ktor.api rename to ktor/library-ktor/api/library-ktor.api diff --git a/ktor/library-ktor/api/library-ktor.klib.api b/ktor/library-ktor/api/library-ktor.klib.api index 83ed883c..22259fcc 100644 --- a/ktor/library-ktor/api/library-ktor.klib.api +++ b/ktor/library-ktor/api/library-ktor.klib.api @@ -1,11 +1,11 @@ // Klib ABI Dump -// Targets: [iosArm64, iosSimulatorArm64, js, wasmJs] +// Targets: [iosArm64, iosSimulatorArm64] // Rendering settings: // - Signature version: 2 // - Show manifest properties: true // - Show declarations: true -// Library unique name: +// Library unique name: final class ro.cosminmihu.ktor.monitor/KtorMonitorLoggingConfig { // ro.cosminmihu.ktor.monitor/KtorMonitorLoggingConfig|null[0] constructor () // ro.cosminmihu.ktor.monitor/KtorMonitorLoggingConfig.|(){}[0] diff --git a/ktor/library-ktor/build.gradle.kts b/ktor/library-ktor/build.gradle.kts index 99a3ae40..731e2dab 100644 --- a/ktor/library-ktor/build.gradle.kts +++ b/ktor/library-ktor/build.gradle.kts @@ -1,4 +1,3 @@ -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { @@ -10,10 +9,6 @@ plugins { } mavenPublishing { - publishToMavenCentral() - - signAllPublications() - val artifact = "ktor-monitor-logging" coordinates(group.toString(), artifact, version.toString()) @@ -96,15 +91,6 @@ kotlin { freeCompilerArgs.add("-Xexpect-actual-classes") // TODO remove after jetbrains fix } - js { - browser() - } - - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser() - } - androidTarget { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) @@ -117,8 +103,6 @@ kotlin { iosSimulatorArm64(), ) - jvm() - sourceSets { commonMain.dependencies { api(projects.core.library) diff --git a/okhttp/library-okhttp-no-op/api/android/library-okhttp-no-op.api b/okhttp/library-okhttp-no-op/api/android/library-okhttp-no-op.api deleted file mode 100644 index 30030095..00000000 --- a/okhttp/library-okhttp-no-op/api/android/library-okhttp-no-op.api +++ /dev/null @@ -1,22 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor : okhttp3/Interceptor { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public fun intercept (Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/okhttp/library-okhttp-no-op/api/jvm/library-okhttp-no-op.api b/okhttp/library-okhttp-no-op/api/jvm/library-okhttp-no-op.api deleted file mode 100644 index 30030095..00000000 --- a/okhttp/library-okhttp-no-op/api/jvm/library-okhttp-no-op.api +++ /dev/null @@ -1,22 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor : okhttp3/Interceptor { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public fun intercept (Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/okhttp/library-okhttp-no-op/api/library-okhttp-no-op.klib.api b/okhttp/library-okhttp-no-op/api/library-okhttp-no-op.klib.api deleted file mode 100644 index e69de29b..00000000 diff --git a/okhttp/library-okhttp-no-op/build.gradle.kts b/okhttp/library-okhttp-no-op/build.gradle.kts deleted file mode 100644 index c607faa5..00000000 --- a/okhttp/library-okhttp-no-op/build.gradle.kts +++ /dev/null @@ -1,106 +0,0 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidLibrary) - alias(libs.plugins.maven.publish) - alias(libs.plugins.binary.compatibility.validator) -} - -mavenPublishing { - publishToMavenCentral() - - signAllPublications() - - val artifact = "ktor-monitor-okhttp-interceptor-no-op" - coordinates(group.toString(), artifact, version.toString()) - - pom { - name.set("Ktor Monitor - OkHttp Interceptor (No-Op)") - description.set("""No-op implementation of the OkHttp Interceptor for Ktor Monitor.""".trimMargin()) - inceptionYear.set("2026") - url.set("https://github.com/CosminMihuMDC/KtorMonitor") - - licenses { - license { - name = "The Apache Software License, Version 2.0" - url = "https://www.apache.org/licenses/LICENSE-2.0.txt" - distribution = "https://www.apache.org/licenses/LICENSE-2.0.txt" - } - } - - developers { - developer { - id = "Cosmin Mihu" - name = "Cosmin Mihu" - url = "https://www.cosminmihu.ro/" - } - } - - scm { - url = "https://github.com/CosminMihuMDC/KtorMonitor.git" - connection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - developerConnection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - } - - issueManagement { - system = "GitHub Issues" - url = "https://github.com/CosminMihuMDC/KtorMonitor/issues" - } - - ciManagement { - system = "GitHub Actions" - url = "https://github.com/CosminMihuMDC/KtorMonitor/actions" - } - - distributionManagement { - downloadUrl = "https://github.com/CosminMihuMDC/KtorMonitor/releases" - } - } -} - -apiValidation { - @OptIn(kotlinx.validation.ExperimentalBCVApi::class) - klib { - enabled = true - strictValidation = true - } -} - -kotlin { - explicitApi() - - jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(11)) - } - - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - publishLibraryVariants("debug", "release") - } - - jvm() - - sourceSets { - commonMain.dependencies { - api(projects.core.libraryNoOp) - implementation(libs.okhttp) - } - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.okhttp.noop" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.android.minSdk.get().toInt() - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - diff --git a/okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt b/okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt deleted file mode 100644 index cb583775..00000000 --- a/okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt +++ /dev/null @@ -1,14 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import okhttp3.Interceptor -import okhttp3.Response - -/** - * No-op implementation. - */ -public class KtorMonitorInterceptor() : Interceptor { - - public constructor(block: KtorMonitorInterceptorConfig.() -> Unit) : this() - - override fun intercept(chain: Interceptor.Chain): Response = chain.proceed(chain.request()) -} diff --git a/okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt b/okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt deleted file mode 100644 index d680ea11..00000000 --- a/okhttp/library-okhttp-no-op/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt +++ /dev/null @@ -1,33 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import okhttp3.Request -import kotlin.time.Duration - -/** - * No-op implementation. - */ -public class KtorMonitorInterceptorConfig() { - - private val config: KtorMonitorInterceptorConfig = KtorMonitorInterceptorConfig() - - public constructor(block: KtorMonitorInterceptorConfig.() -> Unit) : this() { - config.apply(block) - } - - public fun filter(predicate: (Request) -> Boolean) { - // Not implemented. - } - - public fun sanitizeHeader(placeholder: String = "***", predicate: (String) -> Boolean) { - // Not implemented. - } - - public var isActive: Boolean = false - - public var showNotification: Boolean = false - - public var retentionPeriod: Duration = Duration.ZERO - - public var maxContentLength: Int = 0 -} - diff --git a/okhttp/library-okhttp/api/android/library-okhttp.api b/okhttp/library-okhttp/api/android/library-okhttp.api deleted file mode 100644 index c9759241..00000000 --- a/okhttp/library-okhttp/api/android/library-okhttp.api +++ /dev/null @@ -1,21 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor : okhttp3/Interceptor { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public fun intercept (Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/okhttp/library-okhttp/api/jvm/library-okhttp.api b/okhttp/library-okhttp/api/jvm/library-okhttp.api deleted file mode 100644 index c9759241..00000000 --- a/okhttp/library-okhttp/api/jvm/library-okhttp.api +++ /dev/null @@ -1,21 +0,0 @@ -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor : okhttp3/Interceptor { - public fun ()V - public fun (Lkotlin/jvm/functions/Function1;)V - public fun intercept (Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; -} - -public final class ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig { - public fun ()V - public final fun filter (Lkotlin/jvm/functions/Function1;)V - public final fun getMaxContentLength ()I - public final fun getRetentionPeriod-UwyO8pc ()J - public final fun getShowNotification ()Z - public final fun isActive ()Z - public final fun sanitizeHeader (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun sanitizeHeader$default (Lro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - public final fun setActive (Z)V - public final fun setMaxContentLength (I)V - public final fun setRetentionPeriod-LRDsOJo (J)V - public final fun setShowNotification (Z)V -} - diff --git a/okhttp/library-okhttp/api/library-okhttp.klib.api b/okhttp/library-okhttp/api/library-okhttp.klib.api deleted file mode 100644 index e69de29b..00000000 diff --git a/okhttp/library-okhttp/build.gradle.kts b/okhttp/library-okhttp/build.gradle.kts deleted file mode 100644 index 2a076f7c..00000000 --- a/okhttp/library-okhttp/build.gradle.kts +++ /dev/null @@ -1,116 +0,0 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidLibrary) - alias(libs.plugins.maven.publish) - alias(libs.plugins.binary.compatibility.validator) - alias(libs.plugins.dokka) -} - -mavenPublishing { - publishToMavenCentral() - - signAllPublications() - - val artifact = "ktor-monitor-okhttp-interceptor" - coordinates(group.toString(), artifact, version.toString()) - - pom { - name.set("Ktor Monitor - OkHttp Interceptor") - description.set("""OkHttp Interceptor that provides the capability to log HTTP calls for Ktor Monitor.""".trimMargin()) - inceptionYear.set("2026") - url.set("https://github.com/CosminMihuMDC/KtorMonitor") - - licenses { - license { - name = "The Apache Software License, Version 2.0" - url = "https://www.apache.org/licenses/LICENSE-2.0.txt" - distribution = "https://www.apache.org/licenses/LICENSE-2.0.txt" - } - } - - developers { - developer { - id = "Cosmin Mihu" - name = "Cosmin Mihu" - url = "https://www.cosminmihu.ro/" - } - } - - scm { - url = "https://github.com/CosminMihuMDC/KtorMonitor.git" - connection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - developerConnection = "scm:git:git://github.com/CosminMihuMDC/KtorMonitor.git" - } - - issueManagement { - system = "GitHub Issues" - url = "https://github.com/CosminMihuMDC/KtorMonitor/issues" - } - - ciManagement { - system = "GitHub Actions" - url = "https://github.com/CosminMihuMDC/KtorMonitor/actions" - } - - distributionManagement { - downloadUrl = "https://github.com/CosminMihuMDC/KtorMonitor/releases" - } - } -} - -apiValidation { - @OptIn(kotlinx.validation.ExperimentalBCVApi::class) - klib { - enabled = true - strictValidation = true - } -} - -dokka { - moduleName = "OkHttp Interceptor" - moduleVersion = project.version.toString() -} - -dependencies { - dokka(projects.core.library) -} - -kotlin { - explicitApi() - - jvmToolchain { - languageVersion = JavaLanguageVersion.of(11) - } - - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - publishLibraryVariants("debug", "release") - } - - jvm() - - sourceSets { - commonMain.dependencies { - api(projects.core.library) - implementation(libs.okhttp) - } - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.okhttp" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.android.minSdk.get().toInt() - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - diff --git a/okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt b/okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt deleted file mode 100644 index bf6c151c..00000000 --- a/okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptor.kt +++ /dev/null @@ -1,308 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import kotlinx.coroutines.launch -import okhttp3.Interceptor -import okhttp3.MediaType -import okhttp3.Response -import okhttp3.ResponseBody -import okhttp3.ResponseBody.Companion.asResponseBody -import okio.Buffer -import okio.BufferedSource -import okio.ForwardingSource -import okio.Source -import okio.buffer -import ro.cosminmihu.ktor.monitor.domain.model.ClientSource -import kotlin.math.abs -import kotlin.math.min -import kotlin.random.Random -import kotlin.time.Clock -import kotlin.time.ExperimentalTime - -/** - * An [OkHttp](https://square.github.io/okhttp/) [Interceptor] that provides the capability to log HTTP calls. - * - * You can learn more from [KtorMonitor](https://github.com/CosminMihuMDC/KtorMonitor). - * - * ```kotlin - * OkHttpClient.Builder() - * .addNetworkInterceptor( - * KtorMonitorInterceptor { - * sanitizeHeader { header -> header == "Authorization" } - * isActive = true - * showNotification = true - * retentionPeriod = RetentionPeriod.OneHour - * maxContentLength = ContentLength.Default - * } - * ) - * .build() - * ``` - */ -public class KtorMonitorInterceptor() : Interceptor { - - private val config: KtorMonitorInterceptorConfig = KtorMonitorInterceptorConfig() - - public constructor(block: KtorMonitorInterceptorConfig.() -> Unit) : this() { - config.apply(block) - } - - init { - @OptIn(InternalKtorMonitorApi::class) - InternalLibraryBridge.setConfig( - isActive = config.isActive, - showNotification = config.showNotification, - retentionPeriod = config.retentionPeriod, - maxContentLength = config.maxContentLength, - clientSource = ClientSource.OkHttp, - ) - - if (config.isActive && config.retentionPeriod.isPositive()) { - @OptIn(InternalKtorMonitorApi::class) - InternalLibraryBridge.startListening() - } - } - - @OptIn(InternalKtorMonitorApi::class, ExperimentalTime::class) - override fun intercept(chain: Interceptor.Chain): Response { - val request = chain.request() - - // Check if plugin is active. - if (!config.isActive) return chain.proceed(request) - // Check if retention period is zero. - if (!config.retentionPeriod.isPositive()) return chain.proceed(request) - - // Filter. - val shouldLog = config.filters.isEmpty() || config.filters.any { it(request) } - if (!shouldLog) return chain.proceed(request) - - // Generate call id. - val id = callIdentifier - - // Log request. - val requestTimestamp = Clock.System.now().toEpochMilliseconds() - val method = request.method - val url = request.url.toString() - val requestContentType = request.body?.contentType()?.toString() - val requestContentLength = request.body?.contentLength() ?: 0L - - // Headers. - val requestHeaders = request.headers.toMultimap() - .mapValues { (key, values) -> - val sanitized = config.sanitizedHeaders.firstOrNull { it.predicate(key) } - if (sanitized != null) listOf(sanitized.placeholder) else values - } - .toSortedMap() - - // Request body. - val requestBody = try { - val buffer = okio.Buffer() - request.body?.writeTo(buffer) - val bytes = buffer.readByteArray() - if (config.maxContentLength != ContentLength.Full) { - bytes.take(config.maxContentLength).toByteArray() - } else bytes - } catch (_: Throwable) { - null - } - - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveRequest( - id = id, - method = method, - url = url, - requestTimestamp = requestTimestamp, - requestHeaders = requestHeaders, - requestContentType = requestContentType, - requestContentLength = requestContentLength, - requestBody = requestBody, - isRequestBodyTruncated = requestContentLength != 0L && requestContentLength > config.maxContentLength, - ) - } catch (_: Throwable) { - } - } - - // Proceed with request. - val response: Response - try { - response = chain.proceed(request) - } catch (cause: Throwable) { - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveRequestError(id = id, error = cause) - } catch (_: Throwable) { - } - } - throw cause - } - - // Log response. - val responseTimestamp = Clock.System.now().toEpochMilliseconds() - val responseCode = response.code - val protocol = response.protocol.toString() - val responseContentType = response.body.contentType()?.toString() - - // Response headers. - val responseHeaders = response.headers.toMultimap() - .mapValues { (key, values) -> - val sanitized = config.sanitizedHeaders.firstOrNull { it.predicate(key) } - if (sanitized != null) listOf(sanitized.placeholder) else values - } - .toSortedMap() - - // Response body. - val responseBody = response.body - val responseContentTypeRaw = responseBody.contentType()?.toString() - val isWebSocketUpgrade = responseCode == WEBSOCKET_UPGRADE_STATUS - val isServerSentEvents = responseContentTypeRaw - ?.substringBefore(';') - ?.trim() - ?.equals("text/event-stream", ignoreCase = true) == true - - // Always persist the response head first. - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveResponse( - id = id, - protocol = protocol, - requestTimestamp = requestTimestamp, - responseCode = responseCode, - responseTimestamp = responseTimestamp, - responseContentType = responseContentType, - responseHeaders = responseHeaders, - ) - } catch (_: Throwable) { - } - } - - // WebSocket upgrade — frames travel through the upgraded socket and are not - // visible from a network interceptor. Don't try to read the body or we'd - // block the upgrade indefinitely. - if (isWebSocketUpgrade) { - return response - } - - // Server-Sent Events — wrap the body so each chunk read by the consumer is - // mirrored into the DB, letting the detail screen update live. - if (isServerSentEvents) { - return wrapForStreaming(response, responseBody, id, config.maxContentLength) - } - - // Default (non-streaming) path: drain the buffered body once. - val responseBodySource = responseBody.source() - responseBodySource.request(Long.MAX_VALUE) - val responseBodyBytes = responseBodySource.buffer.clone().readByteArray() - val responseContentLength = responseBodyBytes.size.toLong() - - val truncatedBody = - if (config.maxContentLength != ContentLength.Full) { - responseBodyBytes.take(config.maxContentLength).toByteArray() - } else { - responseBodyBytes - } - val isResponseBodyTruncated = responseContentLength > config.maxContentLength - - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveResponseBody( - id = id, - responseContentLength = responseContentLength, - responseBody = truncatedBody, - isResponseBodyTruncated = isResponseBodyTruncated, - ) - } catch (_: Throwable) { - } - } - - return response - } -} - -private const val WEBSOCKET_UPGRADE_STATUS = 101 - -@OptIn(InternalKtorMonitorApi::class) -private fun wrapForStreaming( - response: Response, - body: ResponseBody, - id: String, - maxContentLength: Int, -): Response { - // Initialise the body row so the UI shows an empty (streaming) response immediately. - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.saveResponseBody( - id = id, - responseContentLength = 0L, - responseBody = ByteArray(0), - isResponseBodyTruncated = false, - ) - } catch (_: Throwable) { - } - } - - val unbounded = maxContentLength == ContentLength.Full - val contentType: MediaType? = body.contentType() - val originalContentLength = body.contentLength() - - val tee = object : ForwardingSource(body.source()) { - private var stored: Long = 0L - private var truncated: Boolean = false - - override fun read(sink: Buffer, byteCount: Long): Long { - val sizeBefore = sink.size - val read = super.read(sink, byteCount) - if (read <= 0L) return read - - // Snapshot only the newly read bytes from the sink. - val snapshot = Buffer() - sink.copyTo(snapshot, sizeBefore, read) - val newBytes = snapshot.readByteArray() - - val keep: ByteArray = when { - unbounded -> newBytes - stored >= maxContentLength -> { - truncated = true - ByteArray(0) - } - stored + newBytes.size > maxContentLength -> { - truncated = true - val remaining = (maxContentLength - stored).toInt() - newBytes.copyOf(min(remaining, newBytes.size)) - } - else -> newBytes - } - - if (keep.isNotEmpty()) { - stored += keep.size - } - val isTruncated = truncated - - InternalLibraryBridge.coroutineScope().launch { - try { - InternalLibraryBridge.appendResponseBody( - id = id, - chunk = keep, - deltaSize = read, - isResponseBodyTruncated = isTruncated, - ) - } catch (_: Throwable) { - } - } - - return read - } - } - - val wrappedSource: BufferedSource = (tee as Source).buffer() - val wrappedBody: ResponseBody = wrappedSource.asResponseBody(contentType, originalContentLength) - return response.newBuilder().body(wrappedBody).build() -} - -@OptIn(ExperimentalTime::class) -private val callIdentifier: String - get() { - val timestamp = Clock.System.now().toEpochMilliseconds().toString() - val randomLong = Random.nextLong().toString() - val raw = "$timestamp-$randomLong" - val hash = abs(raw.hashCode()).toString(16) - return "$raw-$hash" - } diff --git a/okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt b/okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt deleted file mode 100644 index 276769ad..00000000 --- a/okhttp/library-okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/KtorMonitorInterceptorConfig.kt +++ /dev/null @@ -1,70 +0,0 @@ -package ro.cosminmihu.ktor.monitor - -import okhttp3.Request -import kotlin.time.Duration - -/** - * Configuration for [KtorMonitorInterceptor]. - */ -public class KtorMonitorInterceptorConfig { - - internal val filters = mutableListOf<(Request) -> Boolean>() - internal val sanitizedHeaders = mutableListOf() - - /** - * Allows you to filter logs for calls matching a [predicate]. - */ - public fun filter(predicate: (Request) -> Boolean) { - filters.add(predicate) - } - - /** - * Allows you to sanitize sensitive headers to avoid their values appearing in the logs. - * In the example below, Authorization header value will be replaced with '***' when logging: - * ```kotlin - * sanitizeHeader { header -> header == "Authorization" } - * ``` - */ - public fun sanitizeHeader(placeholder: String = "***", predicate: (String) -> Boolean) { - sanitizedHeaders.add(SanitizedHeader(placeholder, predicate)) - } - - /** - * Enable or disable the logging of requests and responses. - * By default, enabled: - */ - @OptIn(InternalKtorMonitorApi::class) - public var isActive: Boolean = true - - /** - * Keep track of latest requests and responses into notification. - * By default: - * - android - enabled. android.permission.POST_NOTIFICATIONS needs to be granted. - * - ios - enabled. Notifications permission needs to be granted. - * - desktop - not supported - * - web - not supported. - */ - public var showNotification: Boolean = true - - /** - * The retention period for the logs. - * By default, it is 1 hour. - */ - public var retentionPeriod: Duration = RetentionPeriod.OneHour - - /** - * The maximum length of the content that will be logged. - * After this, body will be truncated. - * By default, it is [ContentLength.Default]. - * Use [ContentLength.Full] to log the full content. - */ - public var maxContentLength: Int = ContentLength.Default -} - -/** - * Configuration for a sanitized header. - */ -internal class SanitizedHeader( - val placeholder: String, - val predicate: (String) -> Boolean, -) diff --git a/sample/http4k/build.gradle.kts b/sample/http4k/build.gradle.kts deleted file mode 100644 index bb3d8551..00000000 --- a/sample/http4k/build.gradle.kts +++ /dev/null @@ -1,110 +0,0 @@ -import org.jetbrains.compose.desktop.application.dsl.TargetFormat -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidApplication) - alias(libs.plugins.composeMultiplatform) - alias(libs.plugins.composeCompiler) -} - -compose.resources { - packageOfResClass = "ro.cosminmihu.ktor.monitor.sample.resources" -} - -kotlin { - - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - } - - jvm() - - sourceSets { - androidMain.dependencies { - implementation(libs.androidx.activity.compose) - implementation(libs.http4k.client.okhttp) - } - commonMain.dependencies { - implementation(libs.compose.runtime) - implementation(libs.compose.foundation) - implementation(libs.compose.material3) - implementation(libs.compose.ui) - implementation(libs.compose.components.resources) - implementation(libs.compose.ui.tooling.preview) - implementation(libs.androidx.lifecycle.viewmodel) - implementation(libs.androidx.lifecycle.runtime.compose) - implementation(libs.http4k.core) - implementation(libs.http4k.multipart) - implementation(projects.http4k.libraryHttp4k) - implementation(projects.sample.shared) -// implementation("ro.cosminmihu.ktor:ktor-monitor-http4k-filter:1.13.0") -// implementation(projects.http4k.libraryHttp4kNoOp) -// implementation("ro.cosminmihu.ktor:ktor-monitor-http4k-filter-no-op:1.13.0") - } - jvmMain.dependencies { - implementation(compose.desktop.currentOs) - implementation(libs.kotlinx.coroutines.swing) - } - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.sample" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - applicationId = "ro.cosminmihu.ktor.monitor.sample.http4k" - minSdk = libs.versions.android.minSdk.get().toInt() - targetSdk = libs.versions.android.targetSdk.get().toInt() - versionCode = 1 - versionName = "1.0" - } - packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - } - } - signingConfigs { - create("release") { - storeFile = File(project.rootDir, "extra/sample/sample-ktor-monitor.jks") - storePassword = "ktor-monitor-sample" - keyAlias = "ktor-monitor-sample" - keyPassword = "ktor-monitor-sample" - } - } - buildTypes { - debug { - versionNameSuffix = ".debug" - } - - release { - isMinifyEnabled = true - isShrinkResources = true - signingConfig = signingConfigs.getByName("release") - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - isCoreLibraryDesugaringEnabled = true - } -} - -compose.desktop { - application { - mainClass = "ro.cosminmihu.ktor.monitor.sample.MainKt" - - nativeDistributions { - targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Rpm) - packageName = "ro.cosminmihu.ktor.monitor.sample.http4k" - packageVersion = "1.0.0" - } - } -} - -dependencies { - coreLibraryDesugaring(libs.desugar) -} diff --git a/sample/http4k/src/androidMain/AndroidManifest.xml b/sample/http4k/src/androidMain/AndroidManifest.xml deleted file mode 100644 index 760a97b1..00000000 --- a/sample/http4k/src/androidMain/AndroidManifest.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/sample/http4k/src/androidMain/ic_launcher-playstore.png b/sample/http4k/src/androidMain/ic_launcher-playstore.png deleted file mode 100644 index cb1af58b9abf2f977ea1e9a5e809e1a7ea72c8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23908 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 header == "Authorization" } - filter { request -> !request.uri.host.contains("cosminmihu.ro") } - showNotification = true - retentionPeriod = RetentionPeriod.OneHour - maxContentLength = ContentLength.Default - }.then(OkHttp()) - diff --git a/sample/http4k/src/androidMain/kotlin/ro/cosminmihu/ktor/monitor/sample/SampleActivity.kt b/sample/http4k/src/androidMain/kotlin/ro/cosminmihu/ktor/monitor/sample/SampleActivity.kt deleted file mode 100644 index 6c19f1ad..00000000 --- a/sample/http4k/src/androidMain/kotlin/ro/cosminmihu/ktor/monitor/sample/SampleActivity.kt +++ /dev/null @@ -1,18 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge - -class SampleActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - - setContent { - App() - } - } -} - diff --git a/sample/http4k/src/androidMain/res/drawable/ic_launcher_foreground.xml b/sample/http4k/src/androidMain/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index b8fa95d1..00000000 --- a/sample/http4k/src/androidMain/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/sample/http4k/src/androidMain/res/drawable/ic_launcher_monochrome.xml b/sample/http4k/src/androidMain/res/drawable/ic_launcher_monochrome.xml deleted file mode 100644 index 5b781595..00000000 --- a/sample/http4k/src/androidMain/res/drawable/ic_launcher_monochrome.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - diff --git a/sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 081998b2..00000000 --- a/sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 081998b2..00000000 --- a/sample/http4k/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher.webp b/sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 97c5532a77cfe49410d7ef4b0e9a5810232f053e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1020 zcmV z92$es8E`|R@>ic{@UzwDG48+v*qXTxcwOu zr9x@>*}c6dQYje!mwlp%&(BrqVfWK$|BvNoSMl+&K>LI=CQ3A>uTjMqmBz%FD3wa3 zVcFq?CkcLR0~j_!Wbc#ePKPQV1yllax@Z5{1W| z#DEE;G(jwJ=TZ{oNmKaLbYrSeWUGAc8HS8*H)F_g7sxbXblGCl5afzv88EQQ7+cg_ zm*=v9b++5yB-_v$)1U8|!IffpuoIwFTGcDl>kj3)AQ_bLG!IJXPBkfgf9fJ0obI*(R_> z1?y+K(15n+n(s3$Xh5@zz5Prn{qR|bSsT$n)4a&D3wJ)#*B9@7(qRq_4RlQMJwIP_ z>OH-`|Ipn}I?U042KqKE952q+oOnvlDp-2I}%tZitZchlMHGu20*QcCHkYjykY ze$`=9{b-TvXbxknEuf1D8mvZ4cYp-YHYH^F*$q-a|E7TDS0_jUeH(l~ zJ3$)go8+1928p0!&Y86Xq=F{9p1lPm18s4ay#=HL&BoY5Tcyh~5kTwgWG4ulAXg*{ z0}S+l5qTo1C=4}0mPnjD@$Mcxid#?_n52aA5I2Q~xcNqwgOn9fzV3wIGdN;Azo?)P qbwN@7cto%l5mdYbL&L(+hlK|CC?bS-`1<*y_w)52hAI-0|EU04aPg4< diff --git a/sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp b/sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp deleted file mode 100644 index 134f74d5e9a6cf80ae3edc6920e342ff71cb81c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1084 zcmV-C1jGAMNk&FA1ONb6MM6+kP&iB|1ONapp+G1Q&jTTnB*j*#eD2>f!1QtBCO?>P zBuSFf)OUF_!I2~KUXyMkNm8Wp-?H}trPmmD_j3M^;83Xo0FYvR2QvQ!#^!Op6JPH? z2+GW+AOLVZu8Kq?N|B7s`V2}?V154*1&YJE2O?R&ApsbCfBxR?FY{mE{rLgwGt6w> zA8+vfcq44K|E3_t48;ruDZbu6P(TefD$&0-G8jL`!+|6qVMj&SH<%Ly@KzML3$`Xu#WbQ@z zDMmo*Zj?D1fq2{O@U~9k*nw&tjlfv8F&nl)F1|ABF!x4{U+%q=z=q3cFcbO4(7 zooE#!5Gz-!Zu)?cq@+k6;NLe6n8gT$!j;TsBQO-#_h1juyl3nwAHfKO%2g^`eqcDJ z+JRo6anIOO7BK>$a0Rp31PsPhKhzC0?-+Z^Dn=ldWoEk(=#R^8s2gb9HTINwFapEJ zqN7HjB`o`a7NGIOf$GO#1cuB7=}~}%qOI~Oz+}demS_Z|a-P!T0CPnf#xu(p~2n@Fc%FWV#uJ5Ou*ukXhg%~ z*RN5%k49kpdVSfFo4h|;fuT_MdFfyVLgg+}2SXr*JGdTT3c@FwOJ^7Z$*rXW%t5Se zO+5_4cx&mche;SJn@LYF3X<7KI>Ic-gH2pJ7=}>TKsvxQNabdi6O4o8t)>&q!|<`q z)WZQ73OAT~xB#(mwaW=kK&V_Po!|z9!d0#ZI0B(^h19_nhfsQ?${DGLOCXs)qywA+dGMR-8E!$yRMm8VV-TzArGsk_@9!O)gYg;eY5LcsKZ^r> CL=XD_ diff --git a/sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp b/sample/http4k/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index ec375861a73d5df9ec8f6a703728e591e141a610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2130 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 diff --git a/sample/http4k/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp b/sample/http4k/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp deleted file mode 100644 index 7f67acebb51623ee3fe22286e783c763c40eb034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?`aNk&G{0ssJ4MM6+kP&iD(0ssInYrq;1XTmm;Bqy`4|FKmr#7$mcX-yK2 zBS~_iDzx~)4_B}qqqM#ox3O(2)!w+|M6?1u(0>JlZeQ;FCjfXyxFg&V2;7A8_j5=1 z?*Ie>$R5E|Nl^8FpPN0WG15j6Y%N7Sy1)eMKlk~(mLiNj zVM`Ga#$L#ryvf)D=~#lCtCu;cImwl?BdN`(nk}WFFBD6iG-gyQbrNwpRLVMuTA@m| zl*qnNC>u$1kLsjOTI5`rY%Hx-sET#cGNU54l-50}VN2;CqY{~uPBQ8+;24iD5uZ>6 zK#uTC5nmWp0OW26qY8lB4e_V~Ajdi0eYJfQ5=IpupTxLW+T0`B*;+jbNtLSrIXAml zGPA#ke$JSc(~vN#0O*@sE}PlEL`1iVSvw1fFI0en>s>6H$L3rl(g|9^COD4IcCc?Q2kXIqPN;VFN4%d?#Y9^Ch1wanb z?|mYo!#@;57*zoDp@xlwQ3XKmhA^rC$lVY|6#$=JB0feC9;g7w(n*);0LWb^Ehqu# z+bb=o0myAR3yJ_%?Tj-}1#)h~rJxL;k2lId9VmRP(t<*ORUBtQB^XX)xD=EEozfC$ z>FLH!X_qplq$TZA((?70s9sRg5-7b>T2{x}w8r*F(sI79$e4s_4G}5>(v(nZXj&r@ z4(E;eX-OJ}2oeYdLahP9lmTh}zBiz-ZF}0bp42B>PR7j4%*@QpTXD>rExo10O%F3O zGt+j)9G&zU}jn-`I?r=sEZ9w*}Vpj8a22VWpkq|3{FJj7jHRq z{Pg+rr;i`nvUofZaU*XQQLjb&FGKtC{zW~Bto$&O*s>A;QfNv5CCeCbmIsq)Mgbt~ z@=E9mTL1+!h|EAH(P{_6f%~K`rUSqca8?tU0ZgJzfGtrLZ%x&^dXP4-g~-%0h;~5; zpr)Z+sn%pv4-f*o8JQZ4XfuQWDr#GlQmXS=bpQx~t&Er-r&SOFC`+`doT<1Q07765 zaUYAOI}kukZKv|hBq9MI;LIW`he1>T8z`%7QJU$ekpQq!XpoV`X(@z6MWRz_rxI=e zDX@Y#5gF8@1P*Fy+f=|zJf;T+rG3aC;5)WZ&gFueNauL? z>FZzJ^1Pd0zV_LpCZ$yBX~ggRM51wih&)YY{rKJ+-`@4SyWhX@{!dvdopAl85REwP zhe#r$RMU+gK6v}PyLZ2T=Yt<^O}}0xQ`o~{F|R^v_2`vrJ2MT^*RV!3vRMQ<*_~P z+Bn>o7;(N5QfeVun-12}P$nhTa!zE>@KQK>h{ZEO+G=ay;P^-~h=_Mv2PyU7CQ^Ex zi3&)G_1!oTkwJrtU=|M*KQgRQdjTf^qRCdJ+8b&B z2iP~-GD+7AkJ$~_QV(u@sx@8)X#;!4hB@i;@W>ahK-y9ZvAQR&v?Z>*Ffz<3s1X{n zpa_t*kQ%5ew^rgxDLyYojg$GT2_3#B~UpV~g)Inj3 z^3AO711HRVWlzEJlV{JKJYKNpmAMlKcDD@bLW5g<29BIGZT6fwv!_iOIk1n#4eDaX SLm{hs&)&UzcDF(nXA~IoBaz|& diff --git a/sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp b/sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 768c74481e0a5160bb15b58898b7d29955b433b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1378 zcmV-o1)cg*Nk&Fm1pok7MM6+kP&iCZ1pojqU%(d-cLzC=Bt??6iG36#-8c)%s8Ep+emUGMa?Sz9b2pm`x7s5x^bDosEs5??!KHT+;dSJ-=nFv zZ5syOQh5h}{0mGF2owT^{O%nXut1;?n12ih(E$T5%rKy^!v!a-5ExLHAuvNAP*|Z5 zSfEGjkK<@(SlIvnN;6d|{nZOqrH|jGwEttOum6~-656|FN}9BH%+&M8m%U@A8h!1M z9^O8n_n&2^N=+3|aQF1IcT7T!UcY`!l1fuupYKXj&8|Jss5DchJ<;fEhg8}-X6o(x z51OeG3Z%F1Wu{P}w0Hc?mDpiZL6olUAs`eePKOg~vkVJsZ5Rw|EMPD!FcvT@Fc?+m z;{k(VVbRU)toi;RutUoSX2|8V{$_doyb(~KLV*Bx6Mi`g_)U|nVC$Vyb5ztOt~p@Q)cEiY#yT&E3!BY<-bl2;)Nsn+3r{NfdfcpSN<|+I38?UAJ=H z^qzu9#UzYe1e{znN-$9ngXCw|$}nm@Pc}?6s56e%!ctVIxAl{Z>cp{H*u%kMoo$#b>dH}% z7_o88-H3?TC%fp|0Sw zhovoV5c1oj($-gxDPfzF5%9#+6ny@WwB?1PgpdypNLyYxp@c2vjDYi&iZ2gJn-3o) z?LXQtZF%{m5=M#{f%0HdUmuXHhmVquKi(&8elc4KBc+T$Nhpcj=Ok(GS41)EHA&j` z`CTQfvoivvA*KA^pR!7if7emgJKLolALQIi0$ZGnz?l{$^7GSH>!EMkoqBtxwEO*R zk`zY0j6g-368Y&FtM$;ggk-(7OWN~Z7Eyr-A0yz2E0G_cwQhZrkY65?_8iF~s_>?V z5%9*9$WPC|bes_K$rDFT6ABn}F#_JW68Yl?HpafDJ$0C)kVbyTW-7Jh)eg+h%l z6F36SsH&=f1-Jsud z<{q;kC4&zcDKNW-Sy0z)!ZJunP3K^03M`-8y^}gaw?R{v11DEZ8`RyPPB8Tu_V=8n zYd3D#$n=Jd>z2;_XINj8K+({7;IJ`&{`>!bjQ{`dUt@+1>};SR7`yZvGJM2H=0^-4 k(yxnApldL9?cIOCK*k63@7>jG5U3kOlbLywXb>JO1@mo_YybcN diff --git a/sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp b/sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp deleted file mode 100644 index c3f18412796864d0f236c0b72455de54a18d040b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmV+b2LJg|Nk&Ha1pok7MM6+kP&iEN1pojq*T6LpFXbwdBw5J~4B=l4{|I>RaZYiV zfE-DZq$tV|3;o4F0RA_-T@E>tBuPrto(iERDk1>?8@hb{*FjM=Ojgm*Fk{Z2FuOuX zM3_aq&k~84U8EusL5k${_opIeS0Vzbgsend@9#ngffQkOg+%;gS?GY z^R4neM}P`cV0OL!kJ+OVNI_ob-}d-W5K##vgiw$oklW|m>8GF;Rpnh_7@)^BGS%9$+q^kjZ`0`AM&_5FCve78CAWHJk3FYqGTJS|KBnMkf2u@ zNs#B~tQ^t*34krzw(00~#ZKC`ZQJH;+qQALPVfKTCpY`%3nKbI0dHRY{{jEd>Z^Us z=F-fPWf@OwXUKAwMB)w24k|klk+ZWigAScM+OVA!%k8~9**KaJbV%~dz;-s6BFVEO zFJ^+-C3&I0rg=~_@?u{vW`NlQ>G9-@`lxKB*Sp#(kM>D=j!defqLbc(vx=i*Cj&-a zsf~7>4BA$tG%7n8IMh~Urbse)WKx*fCdtrW8FiU`kStF%Da&kwWa=xUDk_p>>z!2; zl}R#=Y}G`&PO^@Ultjl)G7r2`5fzh0x(%CNT0!9m}$lNo<*vvD|es zk-?EFOqpad&rF)wM43?UG;w*#_`nD*G!27 zUa0|=n<WB7Va*ShYBEVJI+xN(EK4Gx7VZwm^x;0UjYCq8=8ZB0BC%Z5YJW( zupBaYtOobZYi8XHt?v>N9H{~1;$U|b;DI^Ps!<<9!>fb@Ua0|=+kt+p0}o6o9hpNu zhW1AZX_?f3RTT#L>05B$jH3AFh?_auo+KnVs|HXV2l(lm3+|sJ%WB96-t;6Pk*ykF z+4uI#cNY)cQ_32d!!CxFX9gl&HFCMz5DPc9{VyJ(S5MPlRU~1pXzu#Xx z+D(G0OM}io3Gua21E}(Stlz(VB ztlwua6zo|zEeB6uBwM6qs|Kt%^s!!xFy!yYIWGeb8Dx`0M`{4M&#hDl0af@)Bw7^?SnRBfTv$+RF4yg7?c!p=N4)JD&Gff zWqJn`>CIkeia|*tr<(LY?E9dd36tXg^{r9Th`(N_0gJ2Hhn;qbXR8KSZl**clNw;F zI3*ICRRf6IDUpV)8nEIpCDJ%j1IV4HM9w!>4IuVYB9V<6K<VZ|Z0 z?nqD($i=+69YIO39CJz~K~1pE=aUM8qF^eYOV}Ey3RIu+2zvu%!Cd(q($+v-AdbVO z!a!lLbr`BE2`U3s?J(Vrpfs#F4$&P6YJ+v5zpfxC4#csqv?r(zw!Z79EeXnlai>1Q z#z1{o)c$2nfy|Wxy7n(gJ2MZk;P|{$7|aA%4$nyk!fXJ!=BfMb5;Fppo5#8XVOGGp m^MkG=%nZ;?6iK@!W(O>vV!6Z&fw|lm%#ty`0_WBLAHEF;7}dxC diff --git a/sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp b/sample/http4k/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 058948fea55a3f954b26889dd79358a88df5d863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2892 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 diff --git a/sample/http4k/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/sample/http4k/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index 58668e3e7e548aed949ddf18be1027fa155483c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2990 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 diff --git a/sample/http4k/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp b/sample/http4k/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index d7d90ed3140baf224f5d535e46fafbbc614e9e6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4886 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 I^;qYs0F_5XZ~y=R diff --git a/sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp b/sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index 147dc8232c9d275850e9a188b9ddd41bfb13ea42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3244 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 diff --git a/sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index a3a2f5051042daaf32e14e24ced71bcd5e773a2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4006 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 MEB`D1EB`CH0yE>Ai~s-t diff --git a/sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp b/sample/http4k/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 44fbdeecea9babdff9dae18d2c1f0712f1d7d957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6726 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 - - #010101 - \ No newline at end of file diff --git a/sample/http4k/src/androidMain/res/values/strings.xml b/sample/http4k/src/androidMain/res/values/strings.xml deleted file mode 100644 index 57ec8057..00000000 --- a/sample/http4k/src/androidMain/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Ktor Monitor Sample HTTP4K - \ No newline at end of file diff --git a/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt b/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt deleted file mode 100644 index 651b6e99..00000000 --- a/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt +++ /dev/null @@ -1,29 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import ro.cosminmihu.ktor.monitor.KtorMonitor - -/** - * Compose sample how to use [KtorMonitor]. - */ -@Preview -@Composable -fun App() { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - KtorMonitor() - } - - LaunchedEffect(Unit) { - samples() - } -} - diff --git a/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt b/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt deleted file mode 100644 index c46971df..00000000 --- a/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt +++ /dev/null @@ -1,181 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import org.http4k.core.ContentType -import org.http4k.core.Method -import org.http4k.core.MultipartFormBody -import org.http4k.core.Request -import org.http4k.lens.MultipartFormFile -import ro.cosminmihu.ktor.monitor.sample.shared.HTTP_BIN_URL -import ro.cosminmihu.ktor.monitor.sample.shared.MARKDOWN_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.SVG_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.TEXT_FILE_CONTENT_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.TEXT_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.YAML_SAMPLE - - -internal suspend fun samples() = withContext(Dispatchers.IO) { - val client = httpClient() - - // HTTP Methods - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/get")) } - runCatching { client(Request(Method.POST, "$HTTP_BIN_URL/post").body("")) } - runCatching { client(Request(Method.PUT, "$HTTP_BIN_URL/put").body("")) } - runCatching { client(Request(Method.DELETE, "$HTTP_BIN_URL/delete")) } - runCatching { client(Request(Method.PATCH, "$HTTP_BIN_URL/patch").body("")) } - - // Status codes - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/status/200")) } - runCatching { client(Request(Method.POST, "$HTTP_BIN_URL/status/201").body("")) } - runCatching { client(Request(Method.PUT, "$HTTP_BIN_URL/status/204").body("")) } - runCatching { client(Request(Method.PATCH, "$HTTP_BIN_URL/status/206").body("")) } - runCatching { client(Request(Method.TRACE, "$HTTP_BIN_URL/status/302")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/status/404")) } - runCatching { client(Request(Method.DELETE, "$HTTP_BIN_URL/status/418")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/status/500")) } - - // Redirects - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/absolute-redirect/1")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/absolute-redirect/3")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect/1")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect/3")) } - runCatching { client(Request(Method.DELETE, "$HTTP_BIN_URL/redirect-to?url=/get")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect-to?url=/get")) } - runCatching { client(Request(Method.PATCH, "$HTTP_BIN_URL/redirect-to?url=/get").body("")) } - runCatching { client(Request(Method.POST, "$HTTP_BIN_URL/redirect-to?url=/get").body("")) } - runCatching { client(Request(Method.PUT, "$HTTP_BIN_URL/redirect-to?url=/get").body("")) } - runCatching { client(Request(Method.TRACE, "$HTTP_BIN_URL/redirect-to?url=/get")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect-to?url=/get&status_code=301")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect-to?url=/get&status_code=302")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect-to?url=/get&status_code=303")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect-to?url=/get&status_code=307")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/redirect-to?url=/get&status_code=308")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/relative-redirect/1")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/relative-redirect/3")) } - - // Anything - runCatching { client(Request(Method.DELETE, "$HTTP_BIN_URL/anything")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/anything")) } - runCatching { client(Request(Method.PATCH, "$HTTP_BIN_URL/anything").body("")) } - runCatching { client(Request(Method.POST, "$HTTP_BIN_URL/anything").body("")) } - runCatching { client(Request(Method.PUT, "$HTTP_BIN_URL/anything").body("")) } - runCatching { client(Request(Method.TRACE, "$HTTP_BIN_URL/anything")) } - runCatching { client(Request(Method.DELETE, "$HTTP_BIN_URL/anything/nested/path")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/anything/nested/path")) } - runCatching { client(Request(Method.PATCH, "$HTTP_BIN_URL/anything/nested/path").body("")) } - runCatching { client(Request(Method.POST, "$HTTP_BIN_URL/anything/nested/path").body("")) } - runCatching { client(Request(Method.PUT, "$HTTP_BIN_URL/anything/nested/path").body("")) } - runCatching { client(Request(Method.TRACE, "$HTTP_BIN_URL/anything/nested/path")) } - - // Request inspection - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/headers")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/ip")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/user-agent")) } - - // Auth - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/basic-auth/user/passwd")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/bearer")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/digest-auth/auth/user/passwd")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/digest-auth/auth/user/passwd/MD5")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/digest-auth/auth/user/passwd/MD5/never")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/hidden-basic-auth/user/passwd")) } - - // Response formats - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/base64/SGVsbG8sIGh0dHBiaW4h")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/deny")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/encoding/utf8")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/html")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/json")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/robots.txt")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/xml")) } - runCatching { - client( - Request(Method.POST, "$HTTP_BIN_URL/anything/markdown") - .header("Content-Type", "text/markdown") - .body(MARKDOWN_SAMPLE) - ) - } - runCatching { - client( - Request(Method.POST, "$HTTP_BIN_URL/anything/yaml") - .header("Content-Type", "application/yaml") - .body(YAML_SAMPLE) - ) - } - - // Images - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/image")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/image/jpeg")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/image/png")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/image/svg")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/image/webp")) } - - // Compression - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/brotli")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/deflate")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/gzip")) } - - // Cookies and cache - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/cache")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/cache/30")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/cookies")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/cookies/delete?theme")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/cookies/set?theme=dark")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/cookies/set/session/ktor-monitor")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/etag/sample-etag")) } - - // Dynamic data - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/bytes/1024")) } - runCatching { client(Request(Method.DELETE, "$HTTP_BIN_URL/delay/1")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/delay/1")) } - runCatching { client(Request(Method.PATCH, "$HTTP_BIN_URL/delay/1").body("")) } - runCatching { client(Request(Method.POST, "$HTTP_BIN_URL/delay/1").body("")) } - runCatching { client(Request(Method.PUT, "$HTTP_BIN_URL/delay/1").body("")) } - runCatching { client(Request(Method.TRACE, "$HTTP_BIN_URL/delay/1")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/drip?duration=1&numbytes=16&delay=0")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/links/5/0")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/range/256")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/response-headers?X-Debug=http4k-monitor&Server=example")) } - runCatching { client(Request(Method.POST, "$HTTP_BIN_URL/response-headers?X-Debug=http4k-monitor").body("")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/stream/5")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/stream-bytes/256")) } - runCatching { client(Request(Method.GET, "$HTTP_BIN_URL/uuid")) } - - // Form data (url-encoded) - runCatching { - client( - Request(Method.POST, "$HTTP_BIN_URL/post") - .header("Content-Type", "application/x-www-form-urlencoded") - .body("username=ktor-monitor&email=demo%40example.com¬es=Hello+from+Ktor+Monitor+sample") - ) - } - - // Multipart / form-data - runCatching { - val body = MultipartFormBody() - .plus("username" to "ktor-monitor") - .plus("email" to "demo@example.com") - .plus("notes" to TEXT_SAMPLE) - .plus( - "file" to MultipartFormFile( - "sample.txt", - ContentType.TEXT_PLAIN, - TEXT_FILE_CONTENT_SAMPLE.byteInputStream(), - ) - ) - .plus( - "logo" to MultipartFormFile( - "logo.svg", - ContentType("image/svg+xml"), - SVG_SAMPLE.inputStream(), - ) - ) - - client( - Request(Method.POST, "$HTTP_BIN_URL/post") - .header("Content-Type", "multipart/form-data; boundary=${body.boundary}") - .body(body) - ) - } -} diff --git a/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt b/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt deleted file mode 100644 index 9e572458..00000000 --- a/sample/http4k/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt +++ /dev/null @@ -1,6 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import org.http4k.core.HttpHandler - -internal expect fun httpClient(): HttpHandler - diff --git a/sample/http4k/src/jvmMain/composeResources/drawable/ic_launcher.xml b/sample/http4k/src/jvmMain/composeResources/drawable/ic_launcher.xml deleted file mode 100644 index 18295790..00000000 --- a/sample/http4k/src/jvmMain/composeResources/drawable/ic_launcher.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/sample/http4k/src/jvmMain/composeResources/values/strings.xml b/sample/http4k/src/jvmMain/composeResources/values/strings.xml deleted file mode 100644 index ad79c6aa..00000000 --- a/sample/http4k/src/jvmMain/composeResources/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - Ktor Monitor Sample http4k - - diff --git a/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt b/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt deleted file mode 100644 index 9ac1813d..00000000 --- a/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt +++ /dev/null @@ -1,18 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import org.http4k.client.JavaHttpClient -import org.http4k.core.HttpHandler -import org.http4k.core.then -import ro.cosminmihu.ktor.monitor.ContentLength -import ro.cosminmihu.ktor.monitor.KtorMonitorFilter -import ro.cosminmihu.ktor.monitor.RetentionPeriod - -internal actual fun httpClient(): HttpHandler = - KtorMonitorFilter { - sanitizeHeader { header -> header == "Authorization" } - filter { request -> !request.uri.host.contains("cosminmihu.ro") } - showNotification = true - retentionPeriod = RetentionPeriod.OneHour - maxContentLength = ContentLength.Default - }.then(JavaHttpClient()) - diff --git a/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt b/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt deleted file mode 100644 index 9d3e76dd..00000000 --- a/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt +++ /dev/null @@ -1,45 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample.compose - -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.window.Tray -import androidx.compose.ui.window.Window -import androidx.compose.ui.window.application -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource -import ro.cosminmihu.ktor.monitor.KtorMonitorMenuItem -import ro.cosminmihu.ktor.monitor.KtorMonitorWindow -import ro.cosminmihu.ktor.monitor.sample.App -import ro.cosminmihu.ktor.monitor.sample.resources.Res -import ro.cosminmihu.ktor.monitor.sample.resources.app_name -import ro.cosminmihu.ktor.monitor.sample.resources.ic_launcher - -/** - * Compose sample how to use [KtorMonitorWindow] w/o [KtorMonitorMenuItem]. - */ -fun main() = application { - - var showKtorMonitor by rememberSaveable { mutableStateOf(false) } - - Tray( - icon = painterResource(Res.drawable.ic_launcher), - menu = { - KtorMonitorMenuItem { showKtorMonitor = true } - } - ) - - KtorMonitorWindow( - show = showKtorMonitor, - onCloseRequest = { showKtorMonitor = false } - ) - - Window( - onCloseRequest = ::exitApplication, - title = stringResource(Res.string.app_name), - ) { - App() - } -} - diff --git a/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt b/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt deleted file mode 100644 index 7a3accbd..00000000 --- a/sample/http4k/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt +++ /dev/null @@ -1,31 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample.swing - -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import ro.cosminmihu.ktor.monitor.KtorMonitorPanel -import ro.cosminmihu.ktor.monitor.sample.samples -import java.awt.BorderLayout -import java.awt.Dimension -import javax.swing.JFrame -import javax.swing.SwingUtilities - -/** - * Swing Sample how to use [KtorMonitorPanel]. - */ -fun main() { - GlobalScope.launch { - samples() - } - - SwingUtilities.invokeLater { - val frame = JFrame("Ktor Monitor Sample - http4k") - frame.minimumSize = Dimension(800, 600) - frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE - - frame.add(KtorMonitorPanel, BorderLayout.CENTER) - - frame.pack() - frame.isVisible = true - } -} - diff --git a/sample/ktor/build.gradle.kts b/sample/ktor/build.gradle.kts deleted file mode 100644 index 1d2250d7..00000000 --- a/sample/ktor/build.gradle.kts +++ /dev/null @@ -1,156 +0,0 @@ -import org.jetbrains.compose.desktop.application.dsl.TargetFormat -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidApplication) - alias(libs.plugins.composeMultiplatform) - alias(libs.plugins.composeCompiler) -} - -compose.resources { - packageOfResClass = "ro.cosminmihu.ktor.monitor.sample.resources" -} - -kotlin { - - js { - browser { - commonWebpackConfig { - outputFileName = "KtorMonitorSample.js" - } - } - binaries.executable() - } - - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser { - commonWebpackConfig { - outputFileName = "KtorMonitorSample.js" - } - } - binaries.executable() - } - - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - } - - listOf( - iosArm64(), - iosSimulatorArm64(), - ).forEach { iosTarget -> - iosTarget.binaries.framework { - baseName = "KtorMonitorSample" - isStatic = true - } - } - - jvm() - - sourceSets { - androidMain.dependencies { - implementation(libs.androidx.activity.compose) - implementation(libs.ktor.client.okhttp) - } - iosMain.dependencies { - implementation(libs.ktor.client.darwin) - } - commonMain.dependencies { - implementation(libs.compose.runtime) - implementation(libs.compose.foundation) - implementation(libs.compose.material3) - implementation(libs.compose.ui) - implementation(libs.compose.components.resources) - implementation(libs.compose.ui.tooling.preview) - implementation(libs.androidx.lifecycle.viewmodel) - implementation(libs.androidx.lifecycle.runtime.compose) - implementation(libs.ktor.client.core) - implementation(libs.ktor.client.websockets) - implementation(libs.ktor.client.logging) - implementation(libs.ktor.client.content.negotiation) - implementation(libs.ktor.serialization.kotlinx.json) - implementation(projects.ktor.libraryKtor) - implementation(projects.sample.shared) -// implementation("ro.cosminmihu.ktor:ktor-monitor-logging:1.13.0") -// implementation(projects.ktor.libraryKtorNoOp) -// implementation("ro.cosminmihu.ktor:ktor-monitor-logging-no-op:1.13.0") - } - jvmMain.dependencies { - implementation(compose.desktop.currentOs) - implementation(libs.kotlinx.coroutines.swing) - implementation(libs.ktor.client.cio) - } - webMain.dependencies { - implementation(libs.ktor.client.js) - implementation(devNpm("copy-webpack-plugin", libs.versions.webpack.get())) - } - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.sample" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - applicationId = "ro.cosminmihu.ktor.monitor.sample" - minSdk = libs.versions.android.minSdk.get().toInt() - targetSdk = libs.versions.android.targetSdk.get().toInt() - versionCode = 1 - versionName = "1.0" - } - packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - } - } - signingConfigs { - create("release") { - storeFile = File(project.rootDir, "extra/sample/sample-ktor-monitor.jks") - storePassword = "ktor-monitor-sample" - keyAlias = "ktor-monitor-sample" - keyPassword = "ktor-monitor-sample" - } - } - buildTypes { - debug { - versionNameSuffix = ".debug" - } - - release { - isMinifyEnabled = true - isShrinkResources = true - signingConfig = signingConfigs.getByName("release") - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - -compose.desktop { - application { - mainClass = "ro.cosminmihu.ktor.monitor.sample.compose.MainKt" - - nativeDistributions { - targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Rpm) - packageName = "ro.cosminmihu.ktor.monitor.sample" - packageVersion = "1.0.0" - } - } -} - -android { - compileOptions { - isCoreLibraryDesugaringEnabled = true - } -} - -dependencies { - coreLibraryDesugaring(libs.desugar) -} \ No newline at end of file diff --git a/sample/ktor/iosApp/Configuration/Config.xcconfig b/sample/ktor/iosApp/Configuration/Config.xcconfig deleted file mode 100644 index da5ab5d6..00000000 --- a/sample/ktor/iosApp/Configuration/Config.xcconfig +++ /dev/null @@ -1,3 +0,0 @@ -TEAM_ID= -BUNDLE_ID=ro.cosminmihu.ktor.monitor.sampleMonitorSample -APP_NAME=Ktor Monitor Sample \ No newline at end of file diff --git a/sample/ktor/iosApp/iosApp.xcodeproj/project.pbxproj b/sample/ktor/iosApp/iosApp.xcodeproj/project.pbxproj deleted file mode 100644 index db6af67e..00000000 --- a/sample/ktor/iosApp/iosApp.xcodeproj/project.pbxproj +++ /dev/null @@ -1,396 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 56; - objects = { - -/* Begin PBXBuildFile section */ - 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; - 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; - 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; }; - 7555FF83242A565900829871 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* ContentView.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = ""; }; - 7555FF7B242A565900829871 /* Ktor Monitor Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Ktor Monitor Sample.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7555FF82242A565900829871 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AB3632DC29227652001CCB65 /* Config.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - B92378962B6B1156000C7307 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 058557D7273AAEEB004C7B11 /* Preview Content */ = { - isa = PBXGroup; - children = ( - 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */, - ); - path = "Preview Content"; - sourceTree = ""; - }; - 42799AB246E5F90AF97AA0EF /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - 7555FF72242A565900829871 = { - isa = PBXGroup; - children = ( - AB1DB47929225F7C00F7AF9C /* Configuration */, - 7555FF7D242A565900829871 /* iosApp */, - 7555FF7C242A565900829871 /* Products */, - 42799AB246E5F90AF97AA0EF /* Frameworks */, - ); - sourceTree = ""; - }; - 7555FF7C242A565900829871 /* Products */ = { - isa = PBXGroup; - children = ( - 7555FF7B242A565900829871 /* Ktor Monitor Sample.app */, - ); - name = Products; - sourceTree = ""; - }; - 7555FF7D242A565900829871 /* iosApp */ = { - isa = PBXGroup; - children = ( - 058557BA273AAA24004C7B11 /* Assets.xcassets */, - 7555FF82242A565900829871 /* ContentView.swift */, - 7555FF8C242A565B00829871 /* Info.plist */, - 2152FB032600AC8F00CF470E /* iOSApp.swift */, - 058557D7273AAEEB004C7B11 /* Preview Content */, - ); - path = iosApp; - sourceTree = ""; - }; - AB1DB47929225F7C00F7AF9C /* Configuration */ = { - isa = PBXGroup; - children = ( - AB3632DC29227652001CCB65 /* Config.xcconfig */, - ); - path = Configuration; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 7555FF7A242A565900829871 /* iosApp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */; - buildPhases = ( - F36B1CEB2AD83DDC00CB74D5 /* Compile Kotlin Framework */, - 7555FF77242A565900829871 /* Sources */, - B92378962B6B1156000C7307 /* Frameworks */, - 7555FF79242A565900829871 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = iosApp; - packageProductDependencies = ( - ); - productName = iosApp; - productReference = 7555FF7B242A565900829871 /* Ktor Monitor Sample.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 7555FF73242A565900829871 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastSwiftUpdateCheck = 1130; - LastUpgradeCheck = 1540; - ORGANIZATIONNAME = orgName; - TargetAttributes = { - 7555FF7A242A565900829871 = { - CreatedOnToolsVersion = 11.3.1; - }; - }; - }; - buildConfigurationList = 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 7555FF72242A565900829871; - packageReferences = ( - ); - productRefGroup = 7555FF7C242A565900829871 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 7555FF7A242A565900829871 /* iosApp */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 7555FF79242A565900829871 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */, - 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - F36B1CEB2AD83DDC00CB74D5 /* Compile Kotlin Framework */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Compile Kotlin Framework"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \\\"YES\\\"\"\n exit 0\nfi\ncd \"$SRCROOT/../../..\"\n./gradlew :sample:ktor:embedAndSignAppleFrameworkForXcode\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 7555FF77242A565900829871 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */, - 7555FF83242A565900829871 /* ContentView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 7555FFA3242A565B00829871 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AB3632DC29227652001CCB65 /* Config.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 7555FFA4242A565B00829871 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AB3632DC29227652001CCB65 /* Config.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7555FFA6242A565B00829871 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; - DEVELOPMENT_TEAM = "${TEAM_ID}"; - ENABLE_PREVIEWS = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)\n$(SRCROOT)/../build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)", - ); - INFOPLIST_FILE = iosApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - OTHER_LDFLAGS = "-lsqlite3"; - PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_ID}${TEAM_ID}"; - PRODUCT_NAME = "${APP_NAME}"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7555FFA7242A565B00829871 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; - DEVELOPMENT_TEAM = "${TEAM_ID}"; - ENABLE_PREVIEWS = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)\n$(SRCROOT)/../build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)", - ); - INFOPLIST_FILE = iosApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - OTHER_LDFLAGS = "-lsqlite3"; - PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_ID}${TEAM_ID}"; - PRODUCT_NAME = "${APP_NAME}"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7555FFA3242A565B00829871 /* Debug */, - 7555FFA4242A565B00829871 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7555FFA6242A565B00829871 /* Debug */, - 7555FFA7242A565B00829871 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 7555FF73242A565900829871 /* Project object */; -} \ No newline at end of file diff --git a/sample/ktor/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/ios.xcscheme b/sample/ktor/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/ios.xcscheme deleted file mode 100644 index 723277db..00000000 --- a/sample/ktor/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/ios.xcscheme +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/sample/ktor/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json b/sample/ktor/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index ee7e3ca0..00000000 --- a/sample/ktor/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} \ No newline at end of file diff --git a/sample/ktor/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/sample/ktor/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 8edf56e7..00000000 --- a/sample/ktor/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "images" : [ - { - "filename" : "app-icon-1024.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/sample/ktor/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png b/sample/ktor/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png deleted file mode 100644 index 68dd30dd2cbb80a0551880dffcde33af6544318b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90292 zcmeEui9b~B`~R6~Y{?RZvQ32S9!r*#X|*M#B7~`I*|R1wGig_7!9zqL$(l99j8tTo zeTx?RT6V^q-+czvvwS|k?;r4ao>v*u%sKbD?rVKt@9VyG^oTaw`mO6B2x8OKIbZ}q z81NDUF*AZ61VQOQ@B`&xq`ePHuN4>qzg)FBrE6L3tESK1pE)7wn7Z_ z*AS$K;{W;D2(@GNGiV69ah`qy@M*{l{6YTH0e_I+SAMRGL;bp99D4237$|Ptuh+=e zumd-Qzz-HT9a9eoV&z8uprEK|K5#YD^CwPuo-#PBan99Q?u@nTSsS^F&Th!JAkB*! z;H9&T=NarpXD1gAjf=ZQ=%3I4uaURqMX>abcslMDIc0DZyWiE_2D?*EK~6zr&w4Bt ztLbiSt6_BD(CXL0Z@We8Jw4qt~%lvh-g1)q@h@OAM# zb5YjCLv-aLYu7no<8jXYyqo8FR~IaD-7{xhy*zh|h#)um`QOSqJSKWi zlt=zW{tr0?`JdMYU)4n3)i88FZv*a(Tz}6Wn)FZp<-OJWXv!lu|7|fVPfC9mJnEkH zn({xzwrBko%g;;@goAVs>^*T2HQMdyVQ%6*xxmmXaQb3t*i{|fydneLozAARRvp3J zdE7o)LwY_ZsV{ooE+{Ubr?xzMtorywqWH<=D#9B7|nf{`MDzk9B+b zD`#ak6owNA{r*=J8Uv|q{@a_JlQ<$oWQsY=z45P~=EOo2_1~^bzYUQITtjovI_l=% z?h16b_V;_y@1hB=(Ysfo@xb3#!VI~w|GsAAV!b4A4GxV+ago2>6bBJK{_-5iwK*`% z(8c->${YWFQ#2I4?l1BH*S?6wL6pEF&u;zwA2^|2fxkU9j^$+!pSMgF=85F%=(|B3q7CjU>=f7PA;Y4zVM=6??4m$4wP{^vmc8VCO8 zK>p`IK>Yq+2J*Kg=C=%FUMlqB;WFX5{Bq5^TE7y*JE;(gcyCODT>vCY7o&0exVQwC zh=Z;eR4~IAjB&>1&JeH6=Kb?>Nx)4d}Q?=$ukO{HD_m4ZO$#RCO5Z6 z?HMb-wBb7vjrrAK}9?_jWGq^IKg6MHM7%B{OPc2O-iQn=?_bWk=4oUtZSb zUP>G~7%AIxf1zE~#^KA0B7*;vetTz6=tK*T&H1t5ruZA3O4D#5%}|UO_=R;XBq>}6 z?)QD>@$+10=6P{Wy9vj$rf@=VA6W~2%uaKy>Z*3UAA4EPya*E!K3`zhS@dJgYecFIQp>-*YMp2La4yf^E`_iObj!ubhizQ@vy2{PA) z9PjJdB(@0jbk>EvVdWa^fV^XfVRu7vxOzp~L+sE;Srl6ASnuv%%}B{WV)NZ_jt~lS z$daNr>nJzk8VOIB_LHaA6`b%jV1iliSABc5h4%bO@&W9VPZC*Jzg#xi`HZT-M2WZ zeN59#b~EO$DC61Wlj~LArE}p~p>&t720bE2Vu{@d)RtB}Ht19GD~rEV2-NS`#NJ?G z6h@QhxnsZ9lR)_BlI)e(Hc?qWz?+C{5cXZ;_z5#lZ`wD-H2jTS=p24o~9G zAKOEQc{MEXRw;~Ma1>F)ev>uLfk^i@Vg%P zR9LQjNN@R(--df0;uQuJ?j&}%?9{r~*KGCSh=1qu5i#5YlIt)12dO+?;E@CtP>Vdm zS?JHL6CAYbyQM!d+zW@-F2GONXyo_DpW=k3*3D;2VUjcnXE|9^KaUphgpb>+c?5&>4Z;()#A`e#51vt8oCWV}Ah!91` zlbZ=Ky+3jL2bPj7+G)+hbvDmDkH6?M>FU*rNPB#%LXP84$0O^&LUXUg$#HlXR&~45 z4gr(S(ZJ6g?i~2ACIkr0E02SEzbp|&k-DgmN9TsG#TdLrkV?i*DY*_N($e+$jyTrt z(WA|sg6ccS&M7A{^@vAVQCwLsmkW&1mu1XzT_1(qnrphWUhCKM-?<5%f8)>&c5W1g z%EN4=E;wlTp?TP_`>B8Pk1Dw-ttXN2Rg0_)j<4>56C-^nk3u=zp?H=;ah$(4xz$E$ zZg(1Heph>^d80Jr+n{xe-NK0SugHP#AW+=+Hb(&^Q0YnFBjK~O>nCoj+NA#|w54U} zid)=dgkLn&JS9jxdDp44{k}_QBK7HZZZnoRzxKApebT5s+aNbC5rX!bEnGhZgv#l| ze&ae2DkfQ1*U^*~)*d_93;QOAD^Fzv!na1n1f!XZ6MG^`2}zzOSQMTtWip@+4tqU< zdqO{qKKRibNC@pNKFNl0DkOhrSX(I$?+MD*J4dW8Bmf3(x~fEgd?OfhU%gg zID%XzT?H<*l*B53-ziJMFG=;qHsb<|Ew)>G47i+N$vg^Er$4A_;h+>rEr*P8buQbN}QQ}`JCIg=AdaYa>8d7sfATR+UC+X0UBlr)R6 zI{!sx85{P+zil%rtI#zCqa$wQ67i_h>OogY$12MKUIq|P8bubC+e}F@lEZDQ& zJLof^tqk)&F5M#cL}Xb8*D1o@$z!~xO~QmPHjxt458O97fsg`EmhBVqf!C2G<= z3(Q)=8-Gsc)w#;y zmz$^R2Ct#+k1OPPj|Ziii-E6Cjq}dlSj+!BrEyT4xug*C#s(a=scN*Kn($5$4pQvA zx4_{!skI>z)_x?I!4f+79Ftl8P0?d<#wuQqSlp)_`+nj#QYJcoPoCZ5CIqT!ZxqD zfz&jXxYD4QZku*7&U)SVb!%&*TmuUD>S%y>FoZ5yf2yCXP+TvwM9@`&RkuHCs3x=1 zZm3Mb_Ex!4sOdk)+JeSWEOX6LDB~7_KGb_mIpC)$%N+%#%ZEB`DPin0P((^^Xl4bd!as~e!&$bpsk%z1mr7Hy4-#w}M#43PKR?RdHYSCNa+T%T zQV)9!>GQDGGoYOfAT&y}>z#ncs>$AY1$1QN1dbhq*hBlVl~j5Ab}}1nmlCY*Oc~^$ zrSU$6uAfAId#XnqvOTb$2~Ow2If08n@fY5^KU|f%LNJo_yfit_4bW-R^#Y(MgCR+(x6o6((*;p-TLw&r`uJtz82TT+%v5+bQ7R@+l;B z_?`V^Y?ZNCeJT9PnkGE<*;tI2_eaFtR*X*Jjog2TB@QGu8_fP30}2^|zM%vQdeF+1 z!A5Iqhe5t+?l*fJMu#CTpfo-CKH-0I^&XhNvUcm}5F9mm^z!U`OC%~7Vmdr%yk50r zVX(PHv)}ZfboR;TTYgz(;3kkc=vd_4h0vc^fWBHc#(2<{tEgHXLm_FH`aV>iPk{y{ z-uBnCZ9qaT_C&ilh%(anK={pcZhs;zDrGrj0eAzAr9nNYSeeL9>yCmPPoSf%D|&uf zM*zqy25*RTf`v^mm_@>sA)dJe=_QFNcu@DkD=wVyJ)N9ZOk1uBDqPrq>#s#JPwNsP zTr9SI1EOuAy1dF$WKK4keoZyO);rZ?Ny|AzI2H4}u$0UIrEbDI4wNXjq;Y{|p11JT zT-%cRG@u(Ui5CUH8*W!|d_3{$aF}YMQzUGp4J@;9^CUMH+vSjpSxG(z!=T3dhu^#I z)!@Z(-LI)0n!BFPk}2YcL2K^bWxsRviW`iuv}u(J|4e7#H1SRhSy2n}!_lz)WY4{Y z)>1N?!xpOW_#)Wot$jIqB86hz`C~DDS*c;bXRsGt;8e2$7}v&+nT$8 z(A|iH58Wz9GL8^t#9??9M=lUdnc!BhUX8DeFi^fyjsDhGT-Zd^gXj)ZX6&|OV#G8S z>|GE6)ZPad{oE`|5Td7_zV`s3&zz)CF%nIvq1L@l41@KCQ z9@p(GZRd#Aqz>2{5SN=D=hyv)qKkm%iw4Ogks^tC+6>$T9DSlH<3J>=90?!i6uM+z z)&ezkkqu%hhNB=c3$;J)=@gVZ4@E(Da}9HlUEHQNj`&l0mUBcB_??G%O;Ey7H!%mE ze_0Ast2;FY;Dx|Q*!mDtD$6a#tboPo_-0$+VYf$Ssi3A?o;#kxK51On-}kA^siOV`KN2`!bAntPKs-=w(;4V$M_Jtsk7)|#`vH|hw(j@+t`AE^25jMK+8b44OIG?&Qq zQJ)&4+t4Jo_BPtS@RmK}%uvpf3+_gl?N4>Q#|s?Q4-1`joVYjwnoT$HqudlBcky_{ zLPofycOc9XvB2S#OHhQDr^a3M$Mhg`w+8CmjN?9W55r23D|Q{nVb2fu?6Z%8fe9{(z+iORE}s2SSi70jw!(ni9=sfb5xc0*Vngc zrek(&e(Y#`R@vHrM9G4?S8Ep<8Y>aFvVVYcRTUu86E3ja6WyhyV8h-qH+dZ+?Uog zw0-Z7H^Ed4U)s<|ofoLHZDe@?OPBU*csm&ZlPi$#3 ziiAXSMXjZ0n^dNRuQ$5j&dXhBX%Fb%DS*BZdx|K|&C_*>E%_niI?p(A-omZR`HN3j z*B{X4H$ih^_<}!u-LWeBUJ(#HPbchI0%qvJb2GbCrG^?*D`xoNfd?6cU+3bc9*%CL z94tI{wiZ_RG2kc)l0vzgv4winrMCjbVTpYFYFlg%?2$ayn)vBvE9T}>$qm8po7Pfe z{9&Yc(bfLA0mG@Li(nXui3mIZk}3BYXF;m`;0a=K%b_na9wY1ld>SNBB;HuC6~k@X zaH{)Nd>ACG)1A&Y=yC%6mh19bf<{1)jLx|n0aOU)%cyHj%~0!GvZe|wQBw`4fH0S+ zax(ht_XZ7>RG)P*XgsUB83QgYZ>(e>f~POrZ(?L(XIP*fv0?aRFwd%2W88*=@SHE4 zK%seEhjRUf#+Qg4o1GHj3;nR(j9?5*j$2o*+rP+hEF@<3s2PfXxwOUg`6k!%IJ}W+ zV`$h6z+7+{?3^KRcLAQ9^VqAS`}@V860io#z2nq+p%>^$7A|_hm7S)-KDoRwhafov zRB}HfTyXdU8^f-u4~C!QLimhH*s$=UuwliOreSlJKgwN8mT`NU^@xS6=(ir|FCOPk znZLR4(}gSpQ?Dl+&jY>H{o6w8_u}IMmv;Lo=iyJEzjVyDD!t6zFM4tERJ@eSoe{9j;leiQ5wCwL$f1!g=esAJ9NHMe&$FQyGZ?YEbJd}eJ|oVA z>i>452$7P^@O0Egb3Q*w%fD}T%_4cbhY~p{5OxH}QFm`_HJp4w`wNR?@#}MZo2E}? zdK$=~Edu=J{C%in9zg8(29L6Ht%`k71k@z*cbqUl?Aky#dV*6PTDjT4hSkeY zHhJd4C#2$AZ%NGU()4eEMPE{aPx@d=uNtGfTJV&d{zd*mAqx4!$Kj+jK_iy>r@c(8 z5}(9TjNdORadhZ{xJqFqsXa=GU+Q=MJRDm&Cr_51%68RB&U_w8Fc*;1{p_=C-h*FE=^)UQTZ-DErwH=W|6#LGOzQ=LOM1ENxJFaR*tY zOA+=kn}xqoh0piH=XJ#!3l*YmX_2#IHNI#3o&ANjdnlS;KK9YYj41E|bF)@3oxQi_ z*53Uqo_g{GaXn#?n7dDA@iExC#?stET{J?__7tBl0rC$%gEd%PU) zf4FK(TbG9ZGu&D#^zh<+>o=yRmhoJ1jt7L+8tbC+I0j0E&o(w3#RtVtm6(AC_f6=s zId(XJYsWsC%1Bu@?baJl-vSszvSMmAd3b1j>s~IVdyIj0$fVSC-#szsFmy zJqM~ha5!+ym)?nhHbY;VV{;f$b(k;J>p>PASnle|%0s7FI60_eU0)E4gpTw4cGVCJyDg}!tfET# zjF-q}%P)(XV$){pq6r~KZplS$1$Fblp~T56=KK^Xlnj)a(1@Cy`+D~%3#b01;Ho~o z*9I|qep*a+FGUGe)zqRK113SC#U0mqsI7gaA8-6 zzErJy9|n~>-&*<^up2f48`JQAcTa?f(~nCxg|D*H_WL@F^CB+I1yn;1pO$LH!{Izy z0>w8tI`|Xg+)peuemih(4=)9s zJ4o>(dGFl0Axoo|oE!*ux)&_wZAwblHwUGLe@&y*;i}bXUaak9)do%xzK7hiR+BxF=J~jp>J%9A*X-j~7Zd|Byz+Y+TgM9J0Un0O{co zRE0_ss>z|#?4(h|je?}UaaDq--x9x>V5Z-fofp>>7^{#9RN{KBothj7aM)1xslpCe zNn@U{x8Lqlz5cRAs{`?TO~auN1Sy!q?Ylk)I%Xg=#ys)LN%U1S=Frf)V|BS)z319r z_;+@>U+$mD6n*@&I{gg;s*k~iRu16^dLStp<~g4dZsi>bv(!)}M%{^b$_fL&9kXB^ zyl5rQ@n_?VxZ+lek1D9)U5mwX#|tLTi&1($eEJk+`3KfgAakVV2W~Ag^}a!Z|3zLm zh#5Pnh9GuRsz^HP5!R|QMKDkt+NV6qV^L2XOTps;hJxphNcY$%Gyq@BdFz8Z? zvy(sg84HRihVX$^*p_k)q_nRl<$582+3g@ltPJ5M`!;Zuuwh*pm*{0`U0Y8q4lT2$#07yyx5k&)_UFIMo z{C=a|`P~UmJ`8N7izMf4bE_YPd$KYu_rs%JW| zlLVocxj}^#u>ce-xORbHXz5syR`enXL%btpOfoQ zDa###YY`rWS(F2Tcp||GG@34LtT5~E>8CpOlg$F&)xdSns-hM`c<@2lnZ-_z2C(%U zq%#1sLu)rTz% z_gWnHG@gsXt`HH~m;rAEdo9b+{D+6aYLecY4>)M#rPvlxw=@3)M8`BnK-H4!*mfZT zeL;*Elifaj*wFy;Tg)>?%XBsajL$RqL)lt7t_iZ`=o^Yl07nkTX~+yYz#0SOAJ0IL z@wBBKH?5&6&AXoYUZ%s`rv3TW3xqrKU0 ze9i#{YBOrf{50liHGCy}xwDrHu+_%*3iHCnLVY(4xo)D(fR%zW z=-H!fxKhItER)@ByXx0mGoKI=UmJM^SkULh-0-!8Kekc_vQDyiA{&-k z81-I2wEhLA-eb=SD5{;0fT99r<=tyife@+SY#uPr%ebjc_53jqTTQM@x}NV0AekR# zGhF1pj%L($Gj1H&bwcJ3G0LsUwSE($EGJ>>mg#`DJpi&4see30e(pj0K=u1Lrabir zTEYbF=0z-@{4TK?LP#wEe_BJli#Zq<{;Tdr`L<{CrJXh~A zr8Q`tL<0!_V1|VGe#$PAaX`=*wcz?{!GQrQM?s&ME>gdJZ>(C)Wlf_L6LGfCLa z?;}#rWq%SqNREs)t~rpOu#{KqVHlnZus&Q+knpPG_|<`$)WvRCAN540;&h*EvVA|{ znRUcs(Y6N#zAQ$jitwJ84LP~;=rPcJ&F3{>$YjfxLV4$K;R%WIOJ_y@>ChbLeY|v4 zC0HH=uR`_{wq5ixPu&-du5pOGnxIS!ZzSmRpmlUku;3lhI$v7>1Y0Ff_~Wd(neSxd_znlL(FW{3wWz~&!qrp>B@LXej^q^(c{uWFHXiu=kY|1QH4wC^s1Puj_u0uKt;A)gt zK+pMFA17KcM<2uL7&!E6$w%11phXiAufNh*}$ z9n0M<81T!j(aj6pfdo+8Z*I?U7Fswx{*#y-48S(GhwJCI5sBeg!=kDs({?zqGQ}vf znbv3{NL6JL-9S^<=j3~iJI#WJ`$zTo6Au{4XKyKXc6I3qOKgUR0p2JttX3a*7C2pc z!&2cRQWh01sa?b@%5x^TYs}YGf!?=H;>F{(U#kh;wKgIulDhq5c+_bl=^O)S4YFd| z6v&^R51FK4Do%%G2vLhi$4$j3voGrgIM&3816?z0c<(N>C2LOhjVE$@jH`R|=)qhp#WXzWi5s6qb#J?`3JP`Yb+g#JhglFCdH_ z5UCG6AvLB5o1|!YMZyk4HmdWnZjta&6VPZO$XS#g;Z!>mXTgGJb?YFP`!7d@e&~AO zKKFzax#(yEYINrp^Xf8;4sl^K}UP+%p@h5?Ho|!LS0K=|-9# z-AW4LeLnIufOPe9!s#^HXHNEa}&62l;Zte@YAQA(!L_xx)N#PiYH?xVnGvM z!Hd8A3S}eOn1wSze0x}p0|Rc~@XYQxS0AaloXftjyiG=4{M^Cgmz~lebLG%AWMWs6*QA{L~(5eir0^GH}B+It=Ixm($HW|dSioP2vo^F7ZQ zMitMLruE#@JFkFaT6BCATj7%;To{M*{B}VM+DrUAq8rRi_dcX4ZXo@DmQfZG>!zF8 z1Ug14c;ufL>DP0$FoQRD(II*Oz$P_A>T{!)y3;YCp+mR$e=IC(MRWvM4Bx$IK%CEw z`wb@L^933y+H*}AB0WH0kmF{H2o3_87A8F{rSO#_41YQ}Z?Bcg8%IzsJ_k}QA$v%n zClzz^3Mz%)2Y}z}k~=rA>%OZ;JauJa#en8_0I`%?Ce;YBylpRudeoS4i{R@(GmHXK ze-sJpIXWo3D;0{_s_Zq28MX3@I}SOWF{Bsg-E-8BPcM5<_%C-qn*}T~Z$ZPr6?IX& z2BQ6O{P&}nL;95K>kyc9#_lgL=`{e8h8QQg=P(OM*RSs#;>dffop@1y9s0rI{PomS zLITKkyoeX66PEm=5iQxl-ExH077OV+f`RPu*VX477uY*yynM4$%&@9XK!h^j5 zb%L3)oW@a>58Hn@7XZM?a@bG_zBH7naf^Ix=x8uE={V~td>!pp=c16384IU_7;gW> zX)_pCVqVbrf_lqRT859p`X>1vh=p{Kivo$`F}v>WKh%4XwBr#k2W{+vp_Q*;HckFR zSM|hDFC6tv(N`5IEMAKc_To=tj4l<_DeSQKNdF5`+WL0Zks%EF`f(s zG&^BGJ^@jWv3mUl29sI%ZI`g#UXvxmM8!)MZtnh~&1nKMXgkhKTpsebU`E&Z`Q;KEU)j(Gaz^0~3tAtmVbCvr=Cw@$ zR5LZL@l#ixiPZCC5|(DSa{d)9wbXy5fin+|UC}*0c?5k;(K>(E=f7d46Ws-S12?M4 zgdP?LFp>RcO3wD z)-)gM;h}nX&_I8ziaIe83$jZOqxz#5A!&RD!)z2jgKcxM1}@HoDYJQh_{=b*@8}a1 z!JK2z<``ta8s}7@{A#6QRggo3pl|q*{TE(J(+{{r+wJQq}7BW-9H473`6YaP5 zdTbojqnt!z0C&wnFAxQ2W+N!;E2gIHH>FWuNaW%cw^bS^>B2^^>eH9*dtcn{rZD9i z2!EWG&F_GlheNs(X->I>eyX3RUi}Ho5lMtFNyj@D%{oteIRN)b z;P(&UHE_ZlTKYO*t5Icket7rD)x^WX{{+~h9oxFh7Ot}TZO6cM1X1h;(Tu)@M z*zUGJwh?4Z2N$R`E1k5wjFSg1V0+)ze23POgtNdU@9$C<*ot;0dC$uJ8)|Co!yg2+ zGmZ%rBzS$%>6CC0$6%kf&nB0a}X+c3*;<$_wO^y|fJ_FD! zg$>1&Kd^48xXT4vHPzQ1L@ii(+Q1QZJrA#d^aFpp%2U{}9Fz@l5-2wD4#yyiBg)Ar zlsPxvf8@BSWszuZOjy5oXNJMH_{mJMRHw@m@amm(rR8YG8X zT?m9v=XH!7TH%UF{f?a4ocKF(`eN)meoer?FywN;W_q1I3*TX$&n!6Qm z=HY(qM{Fg0ZfG7rG}GAng{ZR`D*q0hQuUh3f`7_6x(LYGL&EL`P*)@$t&hE*(i~fO zu;4{sghfALpAyW{aP8H6SGVBykbMy8F~;+CMg&v!(4y#;yE_4~Vn%S;G9tNa4g}T- zYgbo;3_ebI_O?d3i-6iqPkE!WksC1D`7nD*|2uiKa3jz1i1Gb$fYbr#)bX&$JkTtlKt_ zlFD6;i4pmC5-P& z-KM5XDuC%4pS^qKnv0-g6K5Fe#7JsH$fR1Dyw)!LX*;H@E`gnraG#RPejg1t-u?l4 z%xZ?Diw4jmE`0u>_}ou=dxaUtCK=#pI#_%Ov3^R)H(Rll0bVMmic;5(Ll*rA;TxgJ*5bTlOT z-Jb(1V067JaFEM9Hh#>}SOA{p`~y5iV+nv&@PrGH0(3l2pxaRWzc{5&G;G-!S4w*; zfCSEWOyw-S!DJ0REqZPBj*VvJQo9hlk)PV>mHUBeb*eS<93a5&#inC2TQgTVr4Bzi zrI$kcBv+nt+6sUoutB>BS{rzjf6_^{0%6h5uRxRk&_0S~*~iZh0cL(yR+e9p4utSV*}(Fk(R^ z4V-V$4kx6~x&{I^&W(y!AmKZ7ielOL#?4F`1$c{W%RPWZRilFPG$VqGZvD*TKDhF* zchbR*HjM2GzI*`lr5T_`2+wSU=`%oiL_ZP)0OK(F2xygZEygmajpfP}nu_7}<$05N zOqcE&qXCgLMk?eGy)zc4g`hNFD~vhSwj&rSW6Iw#RIwCu_d7_r1x8$Ew?+UiS53&) ze{f6BwaqBAAbX0x3AS{@g#kDFcv(&x8gI^M4e6M0dT$KpQ2_5@GkU&;2zh%!w}9qMbnenW%;F|;d8J;*yP>}q zP4>=G!Z!le(e44@ZV^y4q4PZ06;DYwcQMF>Y4EyzQxLRz7Qp@cH&%jeJrYN z-vju+?#^y?0NrX0An>$XH07K$%F~xPW|7YB7A-ip0%rZBM1Epz>m@7rr}-w6`yJrw zg*n=52*DM3)C#$9@@#Q|gnV%d$bhx0F37KVL_5IjaP!`u*PD!!p0ZlF2h`98kREsM z-i+`zr?GB;W~zGsC(YEaP0?@-koXFqE&++MWnlb&rI>~{(+u6d)&U(QvIzVe&lIv- zZKto{zAI)>>DCn1$%^O@=Q%o%22= zqC^S{8gxnkkr#9o05x%>w`Wg|;=C3rR11-qAcDa8v(=p6e9}|D(6w{doV6(epL-I& zi>`_Vq)~2+nvaJg5QeGf$$w{D2mzG=J!8ZRD3vScnBTB9|M>2~dVz?v~9 zT~9+jFCaWJ3u{(E>0PoR{zo)58qkd?k@FXSsIh`!lD1w#K)-X$6ih9xCMd=W>u_`V z9~DHfRDf)rzC$d2|Ex?>_Zi@k7pn|!<6Pa6`D zu-ShTvk}OL>#F+NwQd4}&7cus=KxZUMBQ{3d*R^9@cKb^rXFk2yE^ zMLf&o8|d;LlLiPrInVc-M*)Z-bg#}1fLgV|QdegC4?{UcuVcfOtzNvAVlW@mvS=wK zOqEFl5^A}?M|-<40QK}^%ahJ{$fa96>M;G?#$zd6CXHsI4aNB{P&{_wysxf+zs#W6 z=X+B7FQT?JJR(8 zBcy?Dwwzo=HPM$ZDuu6BQEwD>0Eg=_zR4SzJOQ8(2;vN;V>7;1WN~Z7xrDCee%D+s zyn#cm#c$c_UXWWb?Vhjs{~@V{?@T4=NGga;Z$TpHewyW|lxAyclS9Q~i(R2Oh2V{W zIx=SVcWq~1;c<~XxPf)MG>zK7!VDKax5A!LlUylgSb-6Yg5Gqyz6(iG5iV;!C%^_C zvR)FO(ZEA7NCZyk(m6v`)P0a->q(<%X0x*`iN^U}=+%OsxC&SoNdPMEQBLdJCIT3K zRJ94{XOlb(K>K};UPEeC-&i)(AXxk%J#4_;JZZGGS8=#I&DST{*gVY()L>v_O~;{# zzh-By)sps$djQa(hkJjJZP(i!-Km-in5IX)WH;wJ>is9CDTgDk`)R~+{u4?y+Y{zz zR`ME-$TI0{Sb8dHm1j(p-CD6qaa&ErEOR^eOq$M0NHMVe3)ggfUHr?preaHxbo>?6 z6>l@zc_=kk8S)?NOC^>P`xM}T^z>o<#{ARmaNlsJ#=KR1GITuc?pxD@7D4Jt=Ry%3lkxfg1EmH4 zgPcqu?{;vG?oKXHUyhoONa}|Zz^FiOQhca zfIKwr7XW5ai{?sbF2{?XWB5iM5Z}`Sy#PoDdrxhpDHNh-zZ+^(xe_m>PHWXtt&&UP zr(oXcz|Y$~mbLQ()!h;Aaf)P&Ga+QoSV+Ay-^%%CQ@N_O&9W#MIZ0Xf_A6n|@(e;c z9ra#Vt#rPEqigU2m+tNKWPTe7_xDU({-01PCg{^H z0HyN3U4v37I*1EQ9{++5;k}uq`n|VDXl^=ePI&~rUtL25!_*nNau0lvjJaI;2Y`)m zcmW2ZOAD<4N^Sfbl-f1x#{{6%HaLf#n#O@%L7a1`p{O(hp4IH=;|03G?LpYVU@@i@ zRypVu_hIag6R!v0>JlkiFfx;l%~pFA0Lv*~g-;=^fOb8dY0@<-XYssa)d_UYj(HS4 z-#yIWl$fK%-aNgnqFO3vMuoqX!|&SPuhMh<_}K#gpVP^ z{X!|HHO?tt?N83>rdvJwqs7-&dmCRRa150BnPhF*EDrmzW?I_k@P*jMELdUy)=`2D z^%WyquEi=()#V%ssb!72jW}3Y`~<`7CCW<`y!55zgwesXj&gKVsy zmD2qZewyJq#J9X>I+fu<*;yJy#-lTz^2NDAT&%mGr7-DRQ2D({5AppJ0NDauB*UgXJu_PLBCx`@SFI&LO!JovK~b#Ecy=~WBrf3Qx>{NqxWJh zxhbCjB+1*=0VYfFD56*ldnQ@fHTqY(B_1diK4+;eJ3jyLVS{XC<2=b9yTJ?)=yD~( z8AH7UKsZ z77)cx2m%J`gjm=c1KpvM=mQ{oQ5^@M(+#7ZAbF0q0C^4D<6Wx_=c5QZG(7&fw*&1} zvnb&?DO`EngKQ6SRWAVVJ=?@a+p?TrFi*Fk-V>`(s)6xOD7EJ=P^v9}QcpbUFQrE= zFct_(nkPf+*}vI?>_hC|fYhB+4Q?ySSszGzcYnXX>xD2VIkodmN54eY>qY7IWLMSv zwgA`RGrX(h2@)$3#?MTTzS>193_m-Z8|5_#zfJV?~}PaYRp-MLDnFdt|WYDOI}= z3zoMLOO1yQt0e4xlX^k7M45z1xlSb`3p*Q zs|6)#?Uv|nFX{UF1=@L&>%O^*9+8sW4;>aZtIpTiq;$Jn1&|?PruEr4y(H*cR3qe& z>zt;MQdQQ~h;*Ls6)&@;vA2!+c51GiV@3)>>XnVdquJ769ILgN7TZt?vnpy$UAG*b zC^TMo*pXdak9K^aXS3)En`>}y+|=&(pZxR~fSu%WVz=>k#yW~o%Ck-` zr?tmGI8{HJoidIABTr0=$KAmcQ9ko=&~vV$8UjIVE1cwt%|-~Q^v$;8ssCPLDWs4z z(qOH;nCggb@|pItc;?>Is7E9}C@xkhK8t&;)*ICjH3zZi$hZva0S0 z)%*Ue`lMxRHLUU>0Wfr|R4bkmil6@wK=zPiiTN@YeL!UBQ;^=mL0xfR+&y7C^Gbm7 z83JA;y2^uoQMm(P(bqDw8{?6|vV`2~A7D<)a}s`i0x;iN0jYELen8v$)ZzQ3@G-Y8 zBrU}%xFL+4eLWAH_Tuhc>h6bCtreFNF3!zrLj$7C-ELLGy-UR1bj<|) zmkHf73dxS>1Qj?V47$5}xud?4nDV2D3H~O9nw@Pe>f{5UHWHY6qrqCEmDGxM$pDc0 z%|nFo2iUSNKzZ^&?qG`SNZHras?T=rtK*de(wt<8cF^5lw6p;n^8=NFZ~JFWva)FW z#Rss!9L6@!(tYRJaOmkCq!MM7>YL#rkmYTPU*ET(jTsRh$W6uC))IQ&wPO(};K)e% zE@{Go?*wNE&2Oj? z1WNhoGNZlywx4b*!il`y;G6^12}Q~31+5^tI(p6de}qzhW^Ox3PR{^cE2E&4AUzeE zJlL!C)q9KGNyc149^JpwpB&IB{Wz+I{Y=-ORPs+Kb-L=&*ow0;0Q%Zay*Mk0*;njz z9~4hAQ{)}lf{`$e3BWOiqz^0eBG>gmAi_2rW5F~1SyesMN&uQP8-8Q>Pjx=Jhl7D4 z&9@HlwtR6a9F&_d0iBtMM;hRTXNCYT0pAYI{K;I zBHRKDoHs-WY)1@ibx!<7ssRFn$SYUTtUxE2?Sn0HNCb%9`&&!}*y$IH#F&Lai$Zo2 zUI+7Yf00q$#LqmwgWS@M2NZ{P4POgFHfL6Yf%O3?t^4=EWWZP@O#(D+`2o~MkP#-( z2~T`yP<|n-W#`i{nJMd(r@{E0y>ct2{ydmO$DhAyUhxFUO_}dJ1y1PLXzoV!{)@R_ zCK-%hjx3hig;&Ejr-g4Ir=(!(i-;%D+o!cyFLwG_d1mVouR4td$Y#y*r(uAG6)Duw zZ#Q@lK!)-TngcJcIA7(|d(t``7xz{pi`pD_H93e`2Wt zTkAE!PT}p5g2}+-P8|u%05ixg<(Cq`(FjR*ttYki>^9J+`@186lKSZ`OM;(g5#T3M{`k!N^D=mevM~$ zUPbwR);Ov0k+lq=SFM#i7K@)aqEjn`NW@PhUw}*l$d>zNk4-PG_W&u?mKFpusI3Tv z(QDFG*ocoBt5X5yiIKpfW`xkiCz93EUIe-5&N=%HJeF}312!Z&gmhPcgV_Y~oFk;Z zk^NDogO%{1@tH%MPS3krY1&i?OmCmUz7u=5VKcj!wINUH-!tY zEsdHrSuC;INyjUDZ$KzWYjNRlT23|L%w>rk!1BpRQZ;<*Gpq(I6dm8lBtt-Qu zIZbM5P33_h6dD+pjcnk+-s)%KCLFexM79VVwzLgDQ847DcV7~a{$1}DUT5Ia*p0Vb zIqpWz5sTlw$Zth|22QoTzzSJ#duZx{{U8$TLi&9e0Q@-}co;T$>^gu@=?=Ao4vBMk zJEFhEgK^L!>)X0$df^txj;;m$)oxQ!iLh^IR8uviF>{TQy1VjUD5-mFS*i4D0zz#BCmt}!l04PMHrM9CL&&CQPyWcIr71RNR#0O=_>${2OJF&Rqqj@%Xrhi_dy!^-U*`n!fE znAMwTwvim*1qa3OFgsPepXJTUnY{pD-(^d}z4Gc3`c_>>Mi(ci->D1h?l($C&SXlX zHQCTo5+gvS^2Ua?-(n1m*Q)!hFIpi2#YvOA#fY-?juWj*izFs}~ZkxKdjV$)YnR3XSO$g$0j-mHcvXN9y^3T|8yvDnTW zrxkWv3N?Ipw=71d(t1`Bz@3iZgsup)?iQBbl@CHDsL4SAdu=!no015;&^%cZoFb-k zrm~;PYnH-NZpskiW-qm33!;*oWV=p;kQ!i!5K=ue(moaaMo8`Kh-EmG^-@3?`8XvK z010YJpEF&tmeBL`M3Oh#=TyxLLl%*;%Qz)CQVE0;?<@Rzwu)KzYap(lk8fS_o|6P~`I))>^fGe%RpgY`)$a0btF>exAc}-GIuN7%yo+5- z&^i^SwEeuu*BpSSZQJd?aFs_|!{Xj4;AM&2jymgDQ*>j~vl5_CIoNHCoBkub&*@$opgn zh^R>nhlkhkgPP`^F&cnRU%r!^64rYiW@Pi{Csca^u(5zH+RcFaqK^7* zcS}^YEQapF&LPO`28{+rn1#jDjXYp>jui@f#%q&z*&IxErba9_R+BBaK0ksd$Xt4K zh+Z9F-L|4wsbKEP9JT{zLhVb#*bm0&j|f-zNc)(Dks9n+SQ#ftpOs7KI%T@J@)3&@n1V4WI!P>Ai-I0)mQ)iWE`l(xgcXAcE4>BOQW( zG-=X%P$`OZqzXZ)(xvy@6+P#D@BPO3elkYbd#<(Sn(cY!+z9MZ8PFPXqwwgf*EA$R z@HVC*dp%Yl4iyHm&%LQ)l z9O(t4BcxZ0$)|_D@80T{ zS*~WL22Q@L0KDweQB|e0Kh!n1Acuq@wvF)v)t>*_QwLa zAV4=G;E!)D4>ZJJTH7?HUr?j6zzoI&VeZb^Q74Y}ccQ!7vBxi89sD%@ zhllb4TvDy~Biu^XVG}L)AMf_RTW&v5RUzYed*80GoEMZl>p0Cn*EzV#5w#Dt|D6v& zMhN*5c+l&vAM3Hq?x*r%k?)Q<&cOq0DvW2pG;8mA{p7!M4pR=M(NMZhK+c*=c}v+0 zBUgpyk3+?wWk_I_;AB??2AhDwyduds&G=EJOa{CM+75&auG-qND zG-t5)(g}NYb-gFk=<5{fNZu7eeYD#9%;RO&(gOZ7`|(;1#dRJ`Oe1-=KpcF z@wlr*WzE3^)$Y>9BgK;ez7IW%N(I4W7cjlI^h?(p#9wEn1@bGRj{C?38V5(xqRh;# zy6$%f&+E$uvx!@;U#)ds5WeQd@qC(`T&jQgAN9T-IVkYVFpHu3A{490d~;-9y z(+ZDocF$^^#*55QEowmjvHy2;bcg?e+>$GA6fU>1Zjn8F*AB~+3&w8IV8E!ozRrG{ z|Dpsq;JdWY)C~nTma`EOrL&JiuN6Tr<^N7p?GL6J>17;!`L{zybR8V#)B3Ou7yPF1 zSOH?NaPjl%Fj;^pwqX7Mb$)*2^_3rTGRHA#YdhHp*)XZUH6ffiJ%YQgC)Mv2GU&_= zxwt+&-q+6<3|Cb#_#QLdaj~Q^O4){<)0)x&Ao`Z#IZ7=@+HIe%y5SvNH{IQ3rosxz zOk2|qd3)6|t_*8dJx3~L4feeD|6={Xx>=vb|2t|x(yPn5Z^~lHrfRR9)H-(f^g7ML zhd;j)<)bKKMtX-|Tr!|x0$966ysDIt2&ftB!ws3Bz7V6YE6!qwa&osX{}a;ViN?rJ zHVC_LeU8#Es<%&dDGS-#`xk(DI&Ie%M;_eHL9m5g%3=XR_fv$f_KvbO>B%3zop-*b z^fxJIhW*9YsIZ6KJX>^Te;p}>rBY-QSpLB9Y|ahlo-eAp+<>30H&vgNDsXrS zpyA*9)WGmhU>crMhGjWzbwZH^pm*xNx2_%e^vm7p{9s64(|iDMTi&Rg7`4*J!&XWz zP|_b@Obm%9j+EX8EZJUa-5t$*_CC-i2Nf4@1cTlpHIT&o8HmdE5ZsuLqbgL2@->{} zk*^mQttSu3J>vBuCK@UL;K=}}9KB(xJ}|uG&ap(57PrhBfjrUP@Mm17R0GddE+5s* zG0J^mbl<~U{(EHHuef-g>huE|y{|mo{!Mz}BM-f?Z}JotifR;Diq48{w z`sk_9h*LU&gR$SEyE`8wIbmxSoC&)^2=KdX6k-y}erDs>kKwt$5mPQB=R10* z_Sa{Tf9MSNMwt@KzCJ@dN396$ug8IBs^O5xfMIo_6$J?3EP)CH_&J4;#_$e?}N+`7E03Jm1T_xk?sQXM~RwT+$u!HvO-yb5`z(W!CYG;R%72_cZ-=&}J zey_f0+O;pZK8B7Ru%HPqO442FVE_J_5#FW;6&-o``+5t)d^<`Kfg?eKzzH?R zi*0BikuctIUJMQX`Ui1%Q?MVgnh?g+dJW*` zf8@<}Mkr!&>6UP2T56^*k*K1krAXfgRr_F5d!-^@JQblV3du;3)k+xN`;rsk^Y+1K z#9+Acx3uBTH)WEGCGws->5(X63%vJ^+aEdpKA0JP=ttnrf%G^|xkfhz$?xB89W6T} zN;d^%cTLWg{@Hpf42Fg%fy>zlp=~;8^3H0!iu|2&S|JSS6TT>1>);riA_V1M`e|WND8mpV{1Y*U=&!0Oo<-3d zQdA{|jQBD&vzFtO-_^>4J*btxF12;>$|k1+lOA5k+9w5z&w@qkMWdn{Eqf5zRl#Yn z|4z)45nhjldZ~w65$3w5rGL!Ca-#{Nzqosu!27_S8v6r9HTM6i?xEGQiA|eML_|bQ z`wd;}5A^QY|Aat}KFa<0KjP8DQc<{e%v*-t1W3{1gdVgcKohBYsGBW_IOFt^`J%roUy%fRt{4$|=ywKg>V{8zy&4bQH~D&# ziy(Zr+xnIsK9(<=^?x*(0nv)c{-|P0oq04_H|Xsf!{qam%kcp><3w6vh8%gS>EOIE zNU%cYCpVEdc|6nHS?x?3Mw>={@7LNwIg`|4Fg5Aaxq|=fLYWpmGw7yL>i`1h1-(Y% zL@mM0Tr)p~kwz&u68VAtt$#sn$H4Ax3G z%OWUu#6lc)g&PfhRUOzjhi{@?Afu^1J43Ke1U*a+f=lyS%w4J%jSSnUoL^NtJiIc{ zgh2Lk<`({s4xj_>W1$}Ex@kGMi71T8Qx9@N@-UTJW_ zZDDmYJO0xn8-#z455{ZAk5o)VL8=z^TuE4BI1uXnF-bijR6h#rct2|PmV7%u7B^Jm zS)yT{EU@zO;-hMLV!^EA`G7aYw6OoA@6;UM(}QY{?S)LuL0-0SL+};1zZ*J+0M8ji zDAjER|51PxJ$!_2VLFj19ugCUy{If0@InNza%&p=@58=D5?|^;qR2Zd_{?Ayz1E0Z zUa$2aIVjhc%i0HQ%{wKa@$ZzHrM#cs$Kum}M+pB|kwp_&qJIA@`0qF%KKy@1|-bbpAL+a^iEAXe#rju3r&_&!HneUs`|YHhcYka899w z)Qez76F+LG{C5+P6vdJZij$s|67h^~A1%8e3Y&zw4>On_$zibaY=WN(TO2X#QJqSPx}VbwXc*y!32U8BxTTy0WBC720a)QA4>xWN-CD$5)tRb8sOg$$zE zj#U%=u{3D)T0OxcP4-;n-@7(`nqupZ;@8)QdB?BO%(}8Vio=d4GkiWc!$lJ}xxVlaM#ZS#3P&4jE233-2YYb( z@7ZH%@F!HwnK5X5%HE^*9KLGT&8n>P+iA`pz2KPx>p>vDn&j~R_r$Z$@P#Z!W<2V{ z=82Y!{R3j2hUHZY(fVK4m8T(Q5VW~wQi3*SA+T~}zfa#I$LC?LmByVzi+c^utd1_^ z1I~t1aZtBT_1oXwXQ$l9fiW~OajJ;fBj0na^z8i^MOa{3Mi)N_ z)4cNG!oQkCac6Bv^RRJ>wP?M5mbJ(+TU*pZAr2y&2Y+~X{&hB*@W)DJJ5WSj++kXu zy)eR&T2HHw=b9CuJ$SX+Kjy=h1Eo;mPWlFu}F=2_Cx4(9tue+&-w@S~}1{;`tgz~Q7n~YOz z^SGh5Dh{Qs5;_^K0~PiQ)!m;O5uw6fJL+j#+Fmy{C8iNHQ&G%E+LycA`pXsMtN(belgO@Fk$=9tZl7Lg z+%Da_IA`B(EdFfn^hUOUsR))RVeXw7!dXuAD4y*u=V$qOfs4&z_af9k8wPGegdZis zVsmZ`df)!ljHYCz)|J+CWm^w&z}h~lvK~|;U?~?Do28@|R6s*V2ptJ$7~QMV@7zjT z+o+6_U?6ndEv8pIa5i-OD2d&;2DYGxA2;!cT8#AvXGiMyW3SD+#C*n>}OS#S0^m`(ojdT!a`Rg)l$vu>QtVzl#-R} z8lAL^f+ItO4I6LF9NRW~)CaliCs>o64X9L5>>jSJ67|chTqz~4bfI%vNkRBKF=+D$ zfm5GCLZYmznk@Bo^&kUv>&HuH;~=a2PtOAio}tG1)4YL=%;f=Rn(H5#ckjuDu$73} zmqu6efV9#;nDe(PMU@h6L9%q=QE=Ha0E?Q;9_yc^z&3paZrbPX{g#**wYjk|%*PM7bS3b=W%O$(b>9*J8j zbr>m^4uOIQ&nZ?`zO{paHYkh3jn`yKzhk_F{YgvU=#Q+D#9Vq%)Cv z>5$%^KLdlszkUwXOX>+QhfM-x&P-a(Qs9&N~KP)Od17(o{h~f$Lfw>(jZf z3#AbTdN;i}zQi@pX8Q<9p8Wo!z^*g&Lb36qX0ng;^2$h!M^v)x?{Y5XN3B1kB_;2% z3Y(S=#oydpuV|2-AGXksFP+bdgXZP$q{$DhW-&B~IuzAS339?2*wlyKJ`f2+;pZSf zEIuaZqsnX2@!aCv5{j7(xIqaMZm3=;L?Pkp6E9Ikp|^*;ma-m*RLvTEz4O(>a*bh% zw3{6V!Q#c-)R9JX@RWe+S^DnCNNEN4^`gb4w1C~$iz5}J@`s~$f0bH=KM+63TKrZN z(;jL!P%z?=)hYhf+RGZQk$zb-pXWB)r`NLow7K<<)(uHJ3|lYPy22NptGlldVJ*;j z+nIMd>Z!k=4Q2!Vh%qe|%@S6$~YBMlGRYDaRq%PmNX7u;E{`25+K zqi(B9+QGg;_7l}k-L?64*LTObyzN}%?F5K#WFO5ExB`CrBV)(~1^R8wm+8y}uE6

oal7ame-nConH@Q_T+}|xBkA`QrgHU3S(0oXHSY#vYWViBX)~H zNA%PDEPa>Nx|i{sGq^Ax!hqiWNUmXDloM&@M&sqYGZwpDJHupThKjAJ4YrI+m8bZe zhRp_M#k-4wiD!AoIkFWwul-`;9Uw!W4#(u2;W1?2^80HKbl=9^-oMAsfr(k+?o_Qx zd8*;)SeU%KNnhV+D9s!t#zjc+IwCc=t-qAB!$198WOZ?*eCV@&;=<@l(@B5wp>M~w z!0iu?;j0xDW#=UXXJ7r;IwTSa$u&;jq}|J_kI`pRZHN9k^g_+*T$|&MOiKz-ry-VdV{vh zJsyeoO1xe9?BLUAQ5or_HUc2ZircJ#;u9Zza!^;-RQy znuv5_RsCC>sPy_xwZJpC2%s?#8cx6H$_@r~6bv=4UC*tIas5K4qSDrHwm2x%x=;Jf zYdy?>^mCIDTdw-%(+JZ*h`~S%GKKeCHRzSiEcTljV|(+Jp<{4=JZNh%Jxck}heuy` zvMk8r6C@QOhU-^`ZX3!Ga;iSlhWe0d$i%lqfNT&ol{mcO`9eL21*^J`^o?WR>%&rQRKh{~Srtd~J- z3*W0gmb-h@i2DQUR6JVaZKze;`{OWoLg0G7!}-_7xs1_A5(5|e^I;0UOYa@#5W1MB zlJLhIeNTw4%;O1@x1P7mN)F$@le}DW5R}L0v}dJzh6U6MIJeg+^(|fv96g@-QbP5< z5F$l#Q3;F7I=6O}>A9Ks*wZlYpEn)*EY%3PEarXJ=bvJwQ~M3{R_t4sW$gsBThGGu^+W%j32+YR<&YDxn>{(%=SXmCXwGr zEJ;Mzc<<#~hVCzW#E|Q}w`4URv&TE$-A7Lzdqj2gS>?yX9BBQtNtMfS#xIq+3UP_4 z9(*3(J|Hj!VO{bdpUqHR&^p<0e)P7X<_`yf&4J#MHhFn@b7G;7g4#Rl{k@KtfZP)z zl1G)K?A=r?{azlo9x>CwWu%gO0u&>opQ~Yxe{EE22_I2WWK*%KFmyoHpWBbn7&DsbP|k zUBqKl<4vyG6R+gR9?Mbc$LOm`%&~jh0zAV}{`;25Uaq3e&GP%Zhhb6ct5#mZR`lw= ziZ4G`&Ou>6WKz@STUp8IqLKFTV8G`paZ?$Zs8J(j84CMq(bF#<%x+uP3V@hND&FD z#Tw|RbXZ6uIOoi|`OjL0XcRum&L$pZNEd1y4)oKA1AZ4W8VR>m)I}Uj4&HmEa&l|3R@ty_y_$I+(4Slc_~U?oHaH%5*! znM{=<=e)Wx=P1Pm70Ad|Se1fFZe6pvv_gTFiZU`Yaggso;gi=WqH|R%c^_^~PPsz< zJ)wPPl8pRvW@)haWBP%5lYg1>)bDH*b5rphH^>Od#=%ii7@JF#(bMHLu2Op`;?$;B z+ef0qzs}CilDY%UJE2rPr~yGZ=z@l-5kK+$he$c#{adG-g>IZe6KS5kNj_XYta+cMBW$Etbb6(Ar^tx?1p0@ z=ZR|=I&B2c@^Zs{QgXd@qVyYiyd>;8$8N3yHy3Xo{l(L_if_-VdJ*Nqi|MgM7zgJ8 zhiny5JVO+pKuJR}_mH75=J%+p9whnzlOHhYOs-1nneV|$+;$&G%=@Yz4-NH^MqF@{ zfxD2RT)reVovtl8MyF1~Nab+5C3N50mYgq2e91gNG4FZ1Z8|lbI{{+&RcguEl^vIO zyC`I0!aaTYxfFpN)_cU-gr>?_D15(@&o|)C`Pg~pjgVn-v8DTV7w<^DFUR_^;XBn$ zw-h7?S+5@_q>*}h!uud2no56Cy}BFT9`+9#d)ARVAA7weU9{f1G;|# zNALagXxx*bef6S{=Ek$@ZBziuqt%%^4fGX(fQdnHahAE}Tf8fwC_}ZMrYP3=wC)Db zOsbqzRQisJnQBptJx%$~hI|W$BCNsL$=Yi(c;y}}2Ydl@a<>+SEazEv{MpUe(|$er zV#7e>3u0-{zMEWD_Hi61>CKy1Hgr=IX1MH^&oGmFe zcRYqXA)Fj21hJDJy?dv<#s&2u2y0Iq7}yTUTjSwfS@3-Nf%IOm-u(S_i26Izq`3#$n)EXug8D|`4 zT~w6rGm6Bb@d;4)cK*-Lj|6!QEfAF{P0$K9;AzU$y#^WT$DT(okJG<8^sjsezWG4j zc)qVgckk=UNXp&v?uvsJWFpAFew~c%=o%cfZiy6| zA#b}(re+=*zjdtRVp~Y;L|ALNLGNMB+>s*#4P<%}Sxoos-EE&fg<_&r`-L(UEHyE& zQ&c6&&G=lTTqr>mwHIRV$GP{+<{kNaPe5sar<=ycMc^CG1_R&lkDBSs9V<`{HqUF( zthraUUkfT2%hI6Kx?KR>uh#}$rJWc|0^G4JRC|r%#)Tz zDh4j4__U0AxVbg5u-);X`bHD?^sFN{8nfiLMSmb~7l^Y^x^nzIU85zuC@SNiH}qlP zj|P9T=}47pR@;tBk$*$_!QPqUhsFbIV;&Hwt{m1uoL(xTqUIo>b%RHzB`|xk z!26gk$}#YYyS*Qjeq}FI)&{C{{G2dXPa*P~ig`J(q$fBGGcy&2xtDP19Swk0=yMisU^xeV&+kaoN_nQjNZt70+mSR~CBCn^aGJr_ZakG~mP-xd8( zGWUQ-`&LsU70tVv8je8!{NvB|RSp8~nteuuHr*{SGIzcD^5a@+!+zhJY$Q5lEu`>A z{_6xb=v<=15{u%rIn^eUSKD#yI26~oMc+#`XluviW!Y~4mh~YJoRmfUnGM%}Sh8E1 z%R)yo*1mUI(Qr}`xXb*9k_J0p$P&D96gUWZ8t(TbA-Pan`5=a$Cc>5+zQ3%wL_`o#57^cZf8W8}bmh75tv-%}4q6GLD-gG9=TYf{6TFM&>7P>120iINB`Br!!G6Bl@?*O_SS~f zwT7{^)w46{-3IApX=$(>GDF9<6{GJ7M*LcAfx5lOqQ;i#lyTkxyU0Ih9m6vmXBSG- zwIeahB#FbC8X0vk^zf(meCitc?8H6x&`w0_J@(67;{m=NbGmIJTKUBmzPT#37gYu( zr0zoRIPd#4MCYhaW47q~5UmPWVv;V6@lMRfC5qk=hxstn#NnTL=``H1E5@$n_>tBF zvk?>bRoJ6(fz>NgvLXtp^1nKejJ{MC0Dzs7Tf zAD_65k=_iGkr&KXyVR(5$o&kT%P4?jIRjgIM(dtJ58cp;DSaF|AERIF+^f}fIFj^Q z^+?U;_p5uA(rNNIpPbU4^q=VB?>g^waLv~^xAo+lqF11;KjP}3=;8GE?j4r#Rl);9 zc@zV$q&&2eR{C^Oy5?XUElVZHD7&2U7aqq&1Go>PQ<7G11UgytAb^l(71o5wtZiMK z3M`Xa)PBNnwwoC>*_6WJOaV{=qwsC|smYqBs*ih-^|e&1x5m6#*VlaowP{+oUFtvf zyceXB6%%{-k)PkaY%90z4(a>1AA_)eIH`t^O+VkXx3^E!6x$bj_7xvvyTkN2uZ8t7 z`!7_Yv>NkjvPTj3&&^-U$|aqCThH7ahMvtFWi*q61uDP%XFj!o$9xXcOMSc8Y~?R= zr1*3E{B;vh@^q2NkN`lyiX!4e3Dx5<^h@924Qhk`)TIBB{)F($TNxonnn573mc zSgifM$?~?V%gf6ZVX@x%u!Afu-06s`DGJZm5pRvZwzm)U^}SNk@Tz6F?rNSS(BEHbUuJR5s%@K@FU+vL_LWI>hePl9^5{2 zaZvD2d(GXqFaLm;DZ!xb)2XHz^-U7)B@TPA`@Ja<_m{RpMTeQz@c)F!{xy}>NW%$Z zC%dlQWFwyxz*TsAL>-LNET<`sD#zwsnoyyq<~m7_M!z)8sitFH?5iMs5aj|BBs0AQ zX^nT@yGbV5NR|{*RZu5!t5!{RXJp^$3Vn}PZAp;5LPMzW4zm=~Xr$laii1-3r&I0Q z`nh$nD|J!D2wzSZ+4#EK*6Vm^kpI*~J|Lxx!$y2I%k|sG@Dxz)S{+hSmX}$ag3Sy) z$*Hl6!Z|xLme$GD?2UU=dXgGZZ8}Jtn&2(*?j?l3(a)B~G#)jKC~}*{wR1&pB<&-O zy@$b{k|(Gx4wTyug?BoxMEFMrQEvHHJ;G5BB+1aKb9V;;MR4VLA-_jbM5tZD;(g;sDTP4M?xgR47=%|`Ek{9vgW z^Z0n>LLvE|X2n*vT*tm}fD3ht!9r<*XzsTl2Jd>bD3_S{u}9)81y04)$Iggr$Gt+n{^VMNJsz>t$CaFQ9cZ z6Te%97NT}#Q)Fa1y-lt`DIs6K@K|kN#G$*)$Z##epEpZ=oM}^k$i*@it@6(&|H+cS zse4!5W&LRxkZ(TZ3`DCv!Sn1`eXe@? zh`swzsoY^tnsrA7|9CyaJ?pouUIi}d3r~wW8#$v_VwJoxkhLH}UUhWXi)6IgUXxM{ zf7>hA@xV3Isblb4-oSVf#q60U=$+4HD0zjK8AAA^%O$p_`+28JNlDcl z^=~1q&UHIJ`A{QqSjEre$^VZZXP|#jkh=S?)%yy*)8XfIE8K1;hV6fx(=ZZ?n;@v_ zz4nLG2dfpEOStxm#?hGTOzgc#f%db0e>K@7D8L3AUW4(Z}++aU(vi)euc)2^JLSyGx^C&X0-MRm<*fi_A2lHI>L0qCH+B(FJQAc`8~1)me}xv z5e5LYD|ZobB{Qp=L_}*KYTO3y$?^MMpdOx{n{K*!zlp!ML=97m+-_DmGa_bKv9(OH ztMOPauQ1PDO80}O zszwyXpn=8t%-z`qXcS-=Y*H8on{4y+ z*8(9M@0W&a`hm?Y`aI7gZqhAXShGw?jf1XOus(=5}AIMP6lh+DMH14dd%^Vz=;As1r z397>D>#tf6L{@D2o6}u0^SqpcPgcWKQ#qbr5a+_%wL9Lk@!4&%8L168&DiFI=u(}~ zbUzrFHAQYCxApLX@sJM3JtOHYeii^j^t0F}pZ$&$wd(8~ zX`9ymY^%8@JbgwC_Ccv?&exh5m@<_a|7BAV5b=v?9BzS<#M7tabcZ`J{_Ny~g9CT& zKz}RqeTh|`C~eLI#iuVGsmi=cHI=PLW9WE^zfNO`f^iV1Nb+0z+tQBixqGTS9Ldn) z;=5YI|b&e#!Na=EEQrbRYfQVN4=f&ipSU?dVVZUAU|h zg_0KFMuCFd0&WWAU=f^XC;|E`YvW@dR=McPx@G<3I2^Fj%mFK{=nF-eY^E6)Y$jjH z3>Dl_SY!+LXWb!HqM~R>+X6z8oEP>$oviJ~!orX%b7##WADM+MX@ght@Zi^GGW4#M z_~P-)t1lx_u$YU{To#HhXsoL4_n^~Cp2=3tVVj{R zh-G0BDOwaN+*=R?eCAvqppA#FmdH#&p6rqb=Rs7KK)K}!AM%23@WcOKGMr(=%L1`$ zoG@0^=1U1vL*n`;M?zZ3k&7dX+s>Waq;iLI^cSy`1UWp}xkTT&%>yE~j05uS%g*!g zTXH#TlJaLHS*NEJV4P@k_5=u^TC;U~4|P&hpXkiKb`pij^4x>J>T)h95d3tq^6S!f zEZUqo>Q%C(`Go@Buf1>U3wh!DdjG?|3y)iUfyJv*s5{T376KT7(sUqJo z!wThz`no%M&}0RB9u?uxQ8M8K+B~>&&OvS52H`W2+U$&e)2uIeroweb7$9(=#eJmL z=WnZBeh@ja$`3TBbw_)WyuU*yEiN9o9QIy9DDQ&Bmq<@aZb}}N~n|YTEm(!sRGi{&&3b7YU9+WWU5s4 z@X_sA)f{?={ZP54L!CWRjfYG)IeB_&f4MAQaG*c@y@RR@MvgJ}Kw`!pI=w1vT5CPi zkzCQ)u&wmw(Cdb)^7Cx}u9n}`d7nJs_e$gv;b_8A!cg5FQ&QT33(N^8?{w?dEx3|< zWKaUc$`sA`USpkV7G!SY&&X3OMw(v5i^ z7kk@t+Jwn+3OC`7lwBc^N0G{SLs8bvI=qGEe2apMn5bDV*~Fk~S1 z-VP>CAXn}#iov9XlosxM%|xxpUIg6YS`gAckxU8;)@0j3#gYt;Z+;A6aj zc~Nse$>om()OaRUX^q=O2U>BC?ZMW?%SCY7a%4MIC_?rGJ`O4@SGHZe2FP^Q)R`~p z0pmFMcPI*IcYZ!y#0}&-8VX~O=8L?xJ_duu>FbqHS2ZKMR%o(@ujFK$1}=59V#Io% zN6zKb=F*U*(cac-Q;@^{UW|Y4!4^ragPhqGN%`^Q zELVA~+u`e^Z!jX}-Ywo+(iIsplZQP_K$V{m6ZyyeM{0Ls9wES=oPZb>h9Wd!5T-mZ zc6{ye%Z^GcX3zH>Nw8tEMc1KH8Mz-H*0huUpo6@iS5<;D3p!$L>)aet?Vy@HR3CLq}G)0Y3&y>jewN8+rT`iF)HT5g~QWrR}^6k)(;d|gP`7|4uHEGzN#g=?ifS=lTwrc$A+ck(K%xoGV4y$Vphz_VTjT zB>8=^oNNEpy^!CX(=La{QSQdum++p70IKQ7Hecpr2}k*vU11_BFV+KmxQs%)&jO|B zbCgX!4$rDU1;qX-)PlC5@9P6zaFra5tURi48dG;RB@sj}J50;_7o?MUMRawdoFj(p zV7Q$%OonA2c*~LV(?a+6KsaUo$+Xg`durc*wWhN;AVd|J>m4XZmg3vq$_?xHfCG;7 zYoqfcN=7uE-*vEPLRHlfJIo*{7Et49IH97!u2%Z-1amihKqIeE5GXTj!4H_>owz@I zU*ulMeSN&56iiV5-5)&M_$1|`(aY57B5TFrL!2^Y_u!s^%7(HZNr1>sMCepU2=i;& zsuB8`2|qeH(x;yxTn<%#lOkKmyx9lK>XWI>{&sdC#_Hf;Q0lMXVdtiVg2VA8;rmSd z7!#KcI@&{}hkgCSCJolLAf)1s0;ImJQuMB4RhcRlV&G#Rh=_;?@IVx&0;Uk54t(lL zigC8GQsFU)c84<#wm))i@9oCQn`@VAI+Z>nprEcJOtbrHqP#M;Q#Zu{qc?l>_?sBI z02ytHlD8OYQw%eRUB<0_(g7nk3Dp(a638|5_y@F+!E6kJOYYl9N~{{(+8EJ@yfmc%sl|6(~?rkwj$ zkb}YiFQcIXNXebsB9?2_p$W^*lb-ym4Zb7qhy6XaUK;}a7s{=bSXDtj-#YzjSHX8T z{OVqmR_m$-*LG!i?G2M};2dIbZqQ^G`o{Iko=KP~F&I01+0a=Jug`J*XoOG}ocZaG z5s!RC9hD8d_UD`IAF<~pV1$#ON>vNJ8iVYY3iJahwwghNnE|*E7*L^FnCIg>W=}4} zYOr>hPsz?@tNo7}P9Zw-6w;h2jX|9>z(TiYA}%{$sRj}Alr?aNC4D^nt}h3YytCERIV3bcD3OjIp1Hmhvxaa5ZPO+Pl`nV&-+>k zULqm6y97DGV@q~|>_>(dT>!2E!VW$%&>T52J+ru^B(+liR$)RPNrsg4J|>36zEfBD zr@@5E?4@vmuqbeop)DpI`;({Qpo4=B^9No^%AHrd85sHy$nswcnN$RzQ!_RT5>090 zT}!PiTxqSp-Aa#oea z#8CIQRIT)2X;ODxf>Re{4O2WD~v9r z<=LTgsSt@M;$aV}tGgRUL*yer3XI)|d0eB81(YRM>~TZ*)y;+=ZIzTDN}E9SD?vf} z2$U^6+;_>cqwsC*}J-=(fc>oO~ zZCfE;HTz$6eJQaW#i?vh!{}K`E-#PHKH$Hrpd>-XzU9z$C^9@?=1(<6wy?9i6tv3Y ze2G!h<%X5p&LyZIUaj7|_bNb(a5VJkv-gZY-4)Z#>J5lW=|vR*S6ev~p@u(o7==UQ zfANK7ayAp@pu7^7+%>^5Km0=MsZECDNV(a<_#+7P7m0yJ1SpNlTbZRFh38QyWO-p( zkywQ3N!av4Rjrce603{H_Xk}KaRRDqVVXH8z$X3>flogO5>C~aY{)r773^=YNS^KH z7u;Y?X>Cx6eD?W*;eq4G>8`^DrH$l+g+g+TgSFkG7_v*1X({=dX+b?2D1%A8&+)He zBL$M?$Kc-K369?@S?u!8bX|fd(K&~-;n()I-*-3Y)=GQhd73n!!-rJPtd|WY()x*gT1lY!nyjP@YJBtV1ajjQ{Dp3uMj~rSvH&d;Fem zjxMdgo`Hxyf|G`1D(}LLJYPK8Jq~Da?OuKEj$iI24gbmYT4VU#p+Nu9(b3i&M^te4 z*CYy>0~AZegFA+NRd7$nnq!0`*+P4+!R7Eqsh;UBmW0A#p_`{%OC;P&Qh^D*5gc&F zsMwfuYO~h%tca5N5i_Dx&rlVNG@nuudhL{XO@OA0x7>03E{nYj+{oz-+-L4jzef@! zZl~vV+7eBzV~F6TcnIXmv0OVf!cTBR{!|iexnNf|J=16Wl-oFOWWf3~s{~3lYPt0A zPj7|jOfd1nl^0cFbY!2qGr1hbMvzYr`wt?>PkC1Xm{o||BZraqX3ERL9&`0cNB?f< z*X{FwPrArun15xDhbkU2$g2;_#K}DTJ{||zjmFBzDYvLjt62$r`o4WSN-GPHS)Ybz zFHE=J?pQGs64M0K2}K@Q!D;a$Ck4$x`=1{EkxSU9*UD{C*jtRa9C@E=_9TcXZBKw) z$<}>NYK6c{4BI%SxbL(r{JD%tDw5c_`3Xld0Qm}S^I=Rp*#Dw-D{cF`yTg`@kRP{^X=^|_52z1%ezSTK1cIf1v@YpE?>JK4{^8ALXR)5X zepU5itni)k!us9jL*Po|0epdCDTw1E7Z!0}-#cB8##6g0r&j3378sKlG}`AGyt3rZSE&sT)LwuFoq%wl}a_Htb5^?1z_f)y?xYVqf)zXLcTi}ue#mB5Jdh z*?aXeS+JkuCgeN|M~u3>MdLr0(*oCrf_0lJja&ebQeboIKHD4ct2E`lOYN!UUGy z(qeI^yZbV$#o@tn!+Vvz67t7#2hs!|SrX@UHIEYxj!FnG#Cd5(#H9S(jRH&4XliI8 zHNtB%BBHV2?FZ)~d7QRY)_l!gVxPb0Nn_LZ%UUX0SKK2Rm0J=4bbSJD!oiIu-X_y? zcTx364?p1F@<)NJr2q2aO~-GRK;!x-{m6ZTPwXmxsAA0GsL_N0_7@|SWUBl^WT$c* zWK>=L*d76z5jmq&_u1`%gK2c)_CKo=Wo-|GnB)m9|o`_b1nzi;E_|14i27 zh@-)XRjR**y1IHf;6-Hc?8LI12(`&*REO1_`ts`s$I(YSaQbQGbUZf~RZA3)YmT5~ zQP3D4o3^(%NA*qjj3eS47nx&g{kRw*AA4GzBcT?YpjpKidv2g1D;~PX_?XfcAxv+s z;yfir1Gzj{iN6d~jv&o~JiJycJ)@a^0&Wfyssu==|9d%;TASb6hMOT<&x}i&_|BxA zLY$4n8|*~|)N_UjU{)(e+!r+_d71|TsAx-@C{2$5&k&NdYAFT`Xky#hlM3gHU zw%1fjHW_Z`XMWCW=A{xccAZs#=^S)U(Yi0~pH}eQd~@5eKnU~BioKtKp|SAohe!C$ zO?PNP?#p(3+GQCeO`lta?26-@-IJ-3WAFaCqEMIS|Ki(!%`_QvEP8{CSfUC>|3Sap zXImPU2qTb{W`PchaT^WL2nl+|GZrHZ%!08*#`SQxotK@Xa<~!H2_xq7ZH9u>gAe)Y zqG^Z9d{N891-AVW^L?J+-wmYdnhN8%a5CR&K990bXe-%cGm+%;Q*e-@raY)S+FdI) zocvsTOGN(vdv$(*Cd+o=V+^%#DXk!Hv&@2+l;LiKgEw= zv)|4Ce%||iKD^)j;Nc_!PT_I|b7L`Rf< zXWgfL)~%7Aa|M9e76{KrriD0j(lME(1uJFD#%I3TotiXGl~pcPeM#3D3ysaOue-ai zCAa+=E}((AfSlrJqUbr;g@ANw1dUM_6JI=0O<{G%umB^=)dOC0GX<58V>i_Er#09A zD4JhEKb85F@ECnivpw4$Pn8)@U#kmp;$DrX$O?K*1eTR?F5^96&txJ<1LsvmF?I$8 z73El5TF1I^^&kigabm<8|QyOnqJ6%f7nDyFt#{tK7^4Z zy&~|U3FRr3u#s7%LgT;PiOC8y5`FlCcl~VP2(Oy~f5rWRgsld&8DBB5pOSt(GKGwA zB~^xeEsv^dhK+<_AB62Uf+!44u4gDF@7-M4OVtU^L}dyTtp5*~N5KG9U=?m z3=|DcxYAu~_|KPEy+&*wKIQzBPkrw46U^yCeu+Rvy?yzz)o^7u-S5~QQh&?c>A+%s z({%}Yu-^o?1(|Y=)zr2)s;IB{>+Mq_$-OZ>-H^sbJPV(j9NkW~7-qlCr@j)vq$m5j4oL->ZJSjW%W@%Mt26LxT0Ie0vk`CE%MAOM z@G~_?_|X-C>bCCTmYsuMC@K%0D!2@VDA*^bZMM@rQDyM*do5#1ITGoJgIVJ-Uj zl@XwNNsagexz%X#d$60d#3#MqhfX|@n6W6rf#JB8md)o$>e78wA6gt;A#=VkGtfa_ zB5ckFJaF4yZw;r!FHQm_r!*m;W+3T<2&VJ+RY=8yxdwf86NrI=K*0+<4 z4t(++&+=qB(e0$i>}s~kt-8LSCzT%3o{z$acg_>(Kb!^G25j@IE>M^oYyL0c)O6*f zGc1ZNyZkXvrYZAZPjp?;E7^w_uff|4)^tsjaw55U|JCr;ZR?s})9vrYr7v}`#nEAe zI_uvHJ{*cnsx79gFY)*CLq>E3I#A{WvV?5083HqZ&O<1!PnH+YFYW$6!K!#fMdz*z1MF)>>PGrZPWPcR!$h!n;!M&nmOF92y+@y5s z=BwZo2*(vZhPX%pcnkVp@s6jPD7y|WG(o?Vpl+V8Mb8V&_8Gcpq84vwdRS2-#m8Ww^S}X8GfyYTHKLYtrLR{S1%x^#Es!b64_reh+ z`^I*vw$LO!R-M1xO{%0H;T#9n6}!`rv8@b&M|rH4GU#27tj*zgaVaes**MM03CN7u zA@>z97jO2&bZS4IsuHj>h&Y{P?UqUxmq}(vJzS^PeRv=JI)HXmA^r82|2@;|y zFw25qH}+BvYqsXj1OZWw5f*d-7d7v$NodlgVBJ>Pt1Vs(1`R$SFe;xmeZXYw^WvlY z-5vbKzh5C%j2J@KX;Qf3=N zthZLW`lqLU>l=F4e*pwrpY#*@m$Fk_^1c|S&_f0_*RjhNVkxOnKV`gky!Laen`+Md z-KrXbY;>s5;e@4*Lr-zJ588)bQ=XeW=bH+^a8~(Fp%wa$9zB3CGssad_f<2v<7_qV z59$P*uuh*6^xM~Z~_aC{-9G(Y*;4Hb35^BW-mv5p4CJF9LdvC(oJ z7k*>PV`i(K@!tHM3c`K8$>MDjCito$=!3YDZBS4v4!S{draz@`TOh zf9NF}ge`EiwX1lGM}P~6(eaUlLo6BPUuC*S%#R*kolZnCKiHaqEHRRx3B|d#@Bw)? zCkcOI&xABd_Ux>w^(A358Ec>UpTG$!$hT{wr^^R0m|O!2m5?I?)6&j z&dNCY*6aG~$)4J=Mp6dxlX2Yvp{-ClhjjRJGc-z;((wYUwb;N3Y|Rw#ur27 znc4pGFFoy7&Fp9D9zVfVIx0a4M z={iJ2T-=eaT`Ie7M%+x#i>MY#67TQ+x|@o!T(FM41B;~Ci12S*>`-v5hOSe}h_y3z zlR(>mS7h#PP0@{t-Ty-^MX~GQdn!vD-(#n+LHq&;j*jwO6zAP2J>Rvh3d5vcd`or9(;{mGlkt*i$H?}T%6{ecpD(+h)K`&k{4`<|>(EX>i zU%6*SMy$v?SjHj4^>BGms1-w_D4ry&RW!M9%%JbV*m-1A;Z6pt|MEc|h@G40_Ru!A z*9docUpzZ8dZOlP2+aZ}_V$Dx3ixaf=4hPs%)S43Kh4z&ZWaf>wvF~_(M9hF%Wp6f zqkQlZ2vhpW0+hv0=pF>F1YFYt7RrzXtF$lWf*+Cg5nu+~qB>R!Pfz}TNu?X#(!J

OT`q@RMB+w<2UO8VWeMF^xiFeMIN5&S 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 diff --git a/sample/ktor/iosApp/iosApp/Assets.xcassets/Contents.json b/sample/ktor/iosApp/iosApp/Assets.xcassets/Contents.json deleted file mode 100644 index 4aa7c535..00000000 --- a/sample/ktor/iosApp/iosApp/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} \ No newline at end of file diff --git a/sample/ktor/iosApp/iosApp/ContentView.swift b/sample/ktor/iosApp/iosApp/ContentView.swift deleted file mode 100644 index bf607ded..00000000 --- a/sample/ktor/iosApp/iosApp/ContentView.swift +++ /dev/null @@ -1,20 +0,0 @@ -import UIKit -import SwiftUI -import KtorMonitorSample - -struct ComposeView: UIViewControllerRepresentable { - func makeUIViewController(context: Context) -> UIViewController { - MainViewControllerKt.MainViewController() - } - - func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} -} - -struct ContentView: View { - var body: some View { - ComposeView().ignoresSafeArea() - } -} - - - diff --git a/sample/ktor/iosApp/iosApp/Info.plist b/sample/ktor/iosApp/iosApp/Info.plist deleted file mode 100644 index 412e3781..00000000 --- a/sample/ktor/iosApp/iosApp/Info.plist +++ /dev/null @@ -1,50 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - - UILaunchScreen - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/sample/ktor/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json b/sample/ktor/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 4aa7c535..00000000 --- a/sample/ktor/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} \ No newline at end of file diff --git a/sample/ktor/iosApp/iosApp/iOSApp.swift b/sample/ktor/iosApp/iosApp/iOSApp.swift deleted file mode 100644 index d83dca61..00000000 --- a/sample/ktor/iosApp/iosApp/iOSApp.swift +++ /dev/null @@ -1,10 +0,0 @@ -import SwiftUI - -@main -struct iOSApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} \ No newline at end of file diff --git a/sample/ktor/src/androidMain/AndroidManifest.xml b/sample/ktor/src/androidMain/AndroidManifest.xml deleted file mode 100644 index f8c92352..00000000 --- a/sample/ktor/src/androidMain/AndroidManifest.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sample/ktor/src/androidMain/ic_launcher-playstore.png b/sample/ktor/src/androidMain/ic_launcher-playstore.png deleted file mode 100644 index cb1af58b9abf2f977ea1e9a5e809e1a7ea72c8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23908 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 - - - - - - diff --git a/sample/ktor/src/androidMain/res/drawable/ic_launcher_monochrome.xml b/sample/ktor/src/androidMain/res/drawable/ic_launcher_monochrome.xml deleted file mode 100644 index 5b781595..00000000 --- a/sample/ktor/src/androidMain/res/drawable/ic_launcher_monochrome.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - diff --git a/sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 081998b2..00000000 --- a/sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 081998b2..00000000 --- a/sample/ktor/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher.webp b/sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 97c5532a77cfe49410d7ef4b0e9a5810232f053e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1020 zcmV z92$es8E`|R@>ic{@UzwDG48+v*qXTxcwOu zr9x@>*}c6dQYje!mwlp%&(BrqVfWK$|BvNoSMl+&K>LI=CQ3A>uTjMqmBz%FD3wa3 zVcFq?CkcLR0~j_!Wbc#ePKPQV1yllax@Z5{1W| z#DEE;G(jwJ=TZ{oNmKaLbYrSeWUGAc8HS8*H)F_g7sxbXblGCl5afzv88EQQ7+cg_ zm*=v9b++5yB-_v$)1U8|!IffpuoIwFTGcDl>kj3)AQ_bLG!IJXPBkfgf9fJ0obI*(R_> z1?y+K(15n+n(s3$Xh5@zz5Prn{qR|bSsT$n)4a&D3wJ)#*B9@7(qRq_4RlQMJwIP_ z>OH-`|Ipn}I?U042KqKE952q+oOnvlDp-2I}%tZitZchlMHGu20*QcCHkYjykY ze$`=9{b-TvXbxknEuf1D8mvZ4cYp-YHYH^F*$q-a|E7TDS0_jUeH(l~ zJ3$)go8+1928p0!&Y86Xq=F{9p1lPm18s4ay#=HL&BoY5Tcyh~5kTwgWG4ulAXg*{ z0}S+l5qTo1C=4}0mPnjD@$Mcxid#?_n52aA5I2Q~xcNqwgOn9fzV3wIGdN;Azo?)P qbwN@7cto%l5mdYbL&L(+hlK|CC?bS-`1<*y_w)52hAI-0|EU04aPg4< diff --git a/sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp b/sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp deleted file mode 100644 index 134f74d5e9a6cf80ae3edc6920e342ff71cb81c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1084 zcmV-C1jGAMNk&FA1ONb6MM6+kP&iB|1ONapp+G1Q&jTTnB*j*#eD2>f!1QtBCO?>P zBuSFf)OUF_!I2~KUXyMkNm8Wp-?H}trPmmD_j3M^;83Xo0FYvR2QvQ!#^!Op6JPH? z2+GW+AOLVZu8Kq?N|B7s`V2}?V154*1&YJE2O?R&ApsbCfBxR?FY{mE{rLgwGt6w> zA8+vfcq44K|E3_t48;ruDZbu6P(TefD$&0-G8jL`!+|6qVMj&SH<%Ly@KzML3$`Xu#WbQ@z zDMmo*Zj?D1fq2{O@U~9k*nw&tjlfv8F&nl)F1|ABF!x4{U+%q=z=q3cFcbO4(7 zooE#!5Gz-!Zu)?cq@+k6;NLe6n8gT$!j;TsBQO-#_h1juyl3nwAHfKO%2g^`eqcDJ z+JRo6anIOO7BK>$a0Rp31PsPhKhzC0?-+Z^Dn=ldWoEk(=#R^8s2gb9HTINwFapEJ zqN7HjB`o`a7NGIOf$GO#1cuB7=}~}%qOI~Oz+}demS_Z|a-P!T0CPnf#xu(p~2n@Fc%FWV#uJ5Ou*ukXhg%~ z*RN5%k49kpdVSfFo4h|;fuT_MdFfyVLgg+}2SXr*JGdTT3c@FwOJ^7Z$*rXW%t5Se zO+5_4cx&mche;SJn@LYF3X<7KI>Ic-gH2pJ7=}>TKsvxQNabdi6O4o8t)>&q!|<`q z)WZQ73OAT~xB#(mwaW=kK&V_Po!|z9!d0#ZI0B(^h19_nhfsQ?${DGLOCXs)qywA+dGMR-8E!$yRMm8VV-TzArGsk_@9!O)gYg;eY5LcsKZ^r> CL=XD_ diff --git a/sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp b/sample/ktor/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index ec375861a73d5df9ec8f6a703728e591e141a610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2130 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 diff --git a/sample/ktor/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp b/sample/ktor/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp deleted file mode 100644 index 7f67acebb51623ee3fe22286e783c763c40eb034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?`aNk&G{0ssJ4MM6+kP&iD(0ssInYrq;1XTmm;Bqy`4|FKmr#7$mcX-yK2 zBS~_iDzx~)4_B}qqqM#ox3O(2)!w+|M6?1u(0>JlZeQ;FCjfXyxFg&V2;7A8_j5=1 z?*Ie>$R5E|Nl^8FpPN0WG15j6Y%N7Sy1)eMKlk~(mLiNj zVM`Ga#$L#ryvf)D=~#lCtCu;cImwl?BdN`(nk}WFFBD6iG-gyQbrNwpRLVMuTA@m| zl*qnNC>u$1kLsjOTI5`rY%Hx-sET#cGNU54l-50}VN2;CqY{~uPBQ8+;24iD5uZ>6 zK#uTC5nmWp0OW26qY8lB4e_V~Ajdi0eYJfQ5=IpupTxLW+T0`B*;+jbNtLSrIXAml zGPA#ke$JSc(~vN#0O*@sE}PlEL`1iVSvw1fFI0en>s>6H$L3rl(g|9^COD4IcCc?Q2kXIqPN;VFN4%d?#Y9^Ch1wanb z?|mYo!#@;57*zoDp@xlwQ3XKmhA^rC$lVY|6#$=JB0feC9;g7w(n*);0LWb^Ehqu# z+bb=o0myAR3yJ_%?Tj-}1#)h~rJxL;k2lId9VmRP(t<*ORUBtQB^XX)xD=EEozfC$ z>FLH!X_qplq$TZA((?70s9sRg5-7b>T2{x}w8r*F(sI79$e4s_4G}5>(v(nZXj&r@ z4(E;eX-OJ}2oeYdLahP9lmTh}zBiz-ZF}0bp42B>PR7j4%*@QpTXD>rExo10O%F3O zGt+j)9G&zU}jn-`I?r=sEZ9w*}Vpj8a22VWpkq|3{FJj7jHRq z{Pg+rr;i`nvUofZaU*XQQLjb&FGKtC{zW~Bto$&O*s>A;QfNv5CCeCbmIsq)Mgbt~ z@=E9mTL1+!h|EAH(P{_6f%~K`rUSqca8?tU0ZgJzfGtrLZ%x&^dXP4-g~-%0h;~5; zpr)Z+sn%pv4-f*o8JQZ4XfuQWDr#GlQmXS=bpQx~t&Er-r&SOFC`+`doT<1Q07765 zaUYAOI}kukZKv|hBq9MI;LIW`he1>T8z`%7QJU$ekpQq!XpoV`X(@z6MWRz_rxI=e zDX@Y#5gF8@1P*Fy+f=|zJf;T+rG3aC;5)WZ&gFueNauL? z>FZzJ^1Pd0zV_LpCZ$yBX~ggRM51wih&)YY{rKJ+-`@4SyWhX@{!dvdopAl85REwP zhe#r$RMU+gK6v}PyLZ2T=Yt<^O}}0xQ`o~{F|R^v_2`vrJ2MT^*RV!3vRMQ<*_~P z+Bn>o7;(N5QfeVun-12}P$nhTa!zE>@KQK>h{ZEO+G=ay;P^-~h=_Mv2PyU7CQ^Ex zi3&)G_1!oTkwJrtU=|M*KQgRQdjTf^qRCdJ+8b&B z2iP~-GD+7AkJ$~_QV(u@sx@8)X#;!4hB@i;@W>ahK-y9ZvAQR&v?Z>*Ffz<3s1X{n zpa_t*kQ%5ew^rgxDLyYojg$GT2_3#B~UpV~g)Inj3 z^3AO711HRVWlzEJlV{JKJYKNpmAMlKcDD@bLW5g<29BIGZT6fwv!_iOIk1n#4eDaX SLm{hs&)&UzcDF(nXA~IoBaz|& diff --git a/sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp b/sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 768c74481e0a5160bb15b58898b7d29955b433b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1378 zcmV-o1)cg*Nk&Fm1pok7MM6+kP&iCZ1pojqU%(d-cLzC=Bt??6iG36#-8c)%s8Ep+emUGMa?Sz9b2pm`x7s5x^bDosEs5??!KHT+;dSJ-=nFv zZ5syOQh5h}{0mGF2owT^{O%nXut1;?n12ih(E$T5%rKy^!v!a-5ExLHAuvNAP*|Z5 zSfEGjkK<@(SlIvnN;6d|{nZOqrH|jGwEttOum6~-656|FN}9BH%+&M8m%U@A8h!1M z9^O8n_n&2^N=+3|aQF1IcT7T!UcY`!l1fuupYKXj&8|Jss5DchJ<;fEhg8}-X6o(x z51OeG3Z%F1Wu{P}w0Hc?mDpiZL6olUAs`eePKOg~vkVJsZ5Rw|EMPD!FcvT@Fc?+m z;{k(VVbRU)toi;RutUoSX2|8V{$_doyb(~KLV*Bx6Mi`g_)U|nVC$Vyb5ztOt~p@Q)cEiY#yT&E3!BY<-bl2;)Nsn+3r{NfdfcpSN<|+I38?UAJ=H z^qzu9#UzYe1e{znN-$9ngXCw|$}nm@Pc}?6s56e%!ctVIxAl{Z>cp{H*u%kMoo$#b>dH}% z7_o88-H3?TC%fp|0Sw zhovoV5c1oj($-gxDPfzF5%9#+6ny@WwB?1PgpdypNLyYxp@c2vjDYi&iZ2gJn-3o) z?LXQtZF%{m5=M#{f%0HdUmuXHhmVquKi(&8elc4KBc+T$Nhpcj=Ok(GS41)EHA&j` z`CTQfvoivvA*KA^pR!7if7emgJKLolALQIi0$ZGnz?l{$^7GSH>!EMkoqBtxwEO*R zk`zY0j6g-368Y&FtM$;ggk-(7OWN~Z7Eyr-A0yz2E0G_cwQhZrkY65?_8iF~s_>?V z5%9*9$WPC|bes_K$rDFT6ABn}F#_JW68Yl?HpafDJ$0C)kVbyTW-7Jh)eg+h%l z6F36SsH&=f1-Jsud z<{q;kC4&zcDKNW-Sy0z)!ZJunP3K^03M`-8y^}gaw?R{v11DEZ8`RyPPB8Tu_V=8n zYd3D#$n=Jd>z2;_XINj8K+({7;IJ`&{`>!bjQ{`dUt@+1>};SR7`yZvGJM2H=0^-4 k(yxnApldL9?cIOCK*k63@7>jG5U3kOlbLywXb>JO1@mo_YybcN diff --git a/sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp b/sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp deleted file mode 100644 index c3f18412796864d0f236c0b72455de54a18d040b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmV+b2LJg|Nk&Ha1pok7MM6+kP&iEN1pojq*T6LpFXbwdBw5J~4B=l4{|I>RaZYiV zfE-DZq$tV|3;o4F0RA_-T@E>tBuPrto(iERDk1>?8@hb{*FjM=Ojgm*Fk{Z2FuOuX zM3_aq&k~84U8EusL5k${_opIeS0Vzbgsend@9#ngffQkOg+%;gS?GY z^R4neM}P`cV0OL!kJ+OVNI_ob-}d-W5K##vgiw$oklW|m>8GF;Rpnh_7@)^BGS%9$+q^kjZ`0`AM&_5FCve78CAWHJk3FYqGTJS|KBnMkf2u@ zNs#B~tQ^t*34krzw(00~#ZKC`ZQJH;+qQALPVfKTCpY`%3nKbI0dHRY{{jEd>Z^Us z=F-fPWf@OwXUKAwMB)w24k|klk+ZWigAScM+OVA!%k8~9**KaJbV%~dz;-s6BFVEO zFJ^+-C3&I0rg=~_@?u{vW`NlQ>G9-@`lxKB*Sp#(kM>D=j!defqLbc(vx=i*Cj&-a zsf~7>4BA$tG%7n8IMh~Urbse)WKx*fCdtrW8FiU`kStF%Da&kwWa=xUDk_p>>z!2; zl}R#=Y}G`&PO^@Ultjl)G7r2`5fzh0x(%CNT0!9m}$lNo<*vvD|es zk-?EFOqpad&rF)wM43?UG;w*#_`nD*G!27 zUa0|=n<WB7Va*ShYBEVJI+xN(EK4Gx7VZwm^x;0UjYCq8=8ZB0BC%Z5YJW( zupBaYtOobZYi8XHt?v>N9H{~1;$U|b;DI^Ps!<<9!>fb@Ua0|=+kt+p0}o6o9hpNu zhW1AZX_?f3RTT#L>05B$jH3AFh?_auo+KnVs|HXV2l(lm3+|sJ%WB96-t;6Pk*ykF z+4uI#cNY)cQ_32d!!CxFX9gl&HFCMz5DPc9{VyJ(S5MPlRU~1pXzu#Xx z+D(G0OM}io3Gua21E}(Stlz(VB ztlwua6zo|zEeB6uBwM6qs|Kt%^s!!xFy!yYIWGeb8Dx`0M`{4M&#hDl0af@)Bw7^?SnRBfTv$+RF4yg7?c!p=N4)JD&Gff zWqJn`>CIkeia|*tr<(LY?E9dd36tXg^{r9Th`(N_0gJ2Hhn;qbXR8KSZl**clNw;F zI3*ICRRf6IDUpV)8nEIpCDJ%j1IV4HM9w!>4IuVYB9V<6K<VZ|Z0 z?nqD($i=+69YIO39CJz~K~1pE=aUM8qF^eYOV}Ey3RIu+2zvu%!Cd(q($+v-AdbVO z!a!lLbr`BE2`U3s?J(Vrpfs#F4$&P6YJ+v5zpfxC4#csqv?r(zw!Z79EeXnlai>1Q z#z1{o)c$2nfy|Wxy7n(gJ2MZk;P|{$7|aA%4$nyk!fXJ!=BfMb5;Fppo5#8XVOGGp m^MkG=%nZ;?6iK@!W(O>vV!6Z&fw|lm%#ty`0_WBLAHEF;7}dxC diff --git a/sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp b/sample/ktor/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 058948fea55a3f954b26889dd79358a88df5d863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2892 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 diff --git a/sample/ktor/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/sample/ktor/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index 58668e3e7e548aed949ddf18be1027fa155483c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2990 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 diff --git a/sample/ktor/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp b/sample/ktor/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index d7d90ed3140baf224f5d535e46fafbbc614e9e6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4886 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 I^;qYs0F_5XZ~y=R diff --git a/sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp b/sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index 147dc8232c9d275850e9a188b9ddd41bfb13ea42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3244 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 diff --git a/sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index a3a2f5051042daaf32e14e24ced71bcd5e773a2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4006 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 MEB`D1EB`CH0yE>Ai~s-t diff --git a/sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp b/sample/ktor/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 44fbdeecea9babdff9dae18d2c1f0712f1d7d957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6726 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 - - #010101 - \ No newline at end of file diff --git a/sample/ktor/src/androidMain/res/values/strings.xml b/sample/ktor/src/androidMain/res/values/strings.xml deleted file mode 100644 index a9c1068c..00000000 --- a/sample/ktor/src/androidMain/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Ktor Monitor Sample KTOR - \ No newline at end of file diff --git a/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt b/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt deleted file mode 100644 index 651b6e99..00000000 --- a/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt +++ /dev/null @@ -1,29 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import ro.cosminmihu.ktor.monitor.KtorMonitor - -/** - * Compose sample how to use [KtorMonitor]. - */ -@Preview -@Composable -fun App() { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - KtorMonitor() - } - - LaunchedEffect(Unit) { - samples() - } -} - diff --git a/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt b/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt deleted file mode 100644 index 4675de9e..00000000 --- a/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt +++ /dev/null @@ -1,224 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import io.ktor.client.request.delete -import io.ktor.client.request.forms.FormDataContent -import io.ktor.client.request.forms.MultiPartFormDataContent -import io.ktor.client.request.forms.formData -import io.ktor.client.request.get -import io.ktor.client.request.patch -import io.ktor.client.request.post -import io.ktor.client.request.put -import io.ktor.client.request.request -import io.ktor.client.request.setBody -import io.ktor.http.ContentType -import io.ktor.http.Headers -import io.ktor.http.HttpHeaders -import io.ktor.http.HttpMethod -import io.ktor.http.Parameters -import io.ktor.http.contentType -import ro.cosminmihu.ktor.monitor.sample.shared.HTTP_BIN_URL -import ro.cosminmihu.ktor.monitor.sample.shared.MARKDOWN_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.SVG_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.TEXT_FILE_CONTENT_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.TEXT_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.YAML_SAMPLE - - -internal suspend fun samples() { - val client = httpClient() - - // HTTP Methods - runCatching { client.get("$HTTP_BIN_URL/get") } - runCatching { client.post("$HTTP_BIN_URL/post") { setBody("") } } - runCatching { client.put("$HTTP_BIN_URL/put") { setBody("") } } - runCatching { client.delete("$HTTP_BIN_URL/delete") } - runCatching { client.patch("$HTTP_BIN_URL/patch") { setBody("") } } - - // Status codes - runCatching { client.get("$HTTP_BIN_URL/status/200") } - runCatching { client.post("$HTTP_BIN_URL/status/201") { setBody("") } } - runCatching { client.put("$HTTP_BIN_URL/status/204") { setBody("") } } - runCatching { client.patch("$HTTP_BIN_URL/status/206") { setBody("") } } - runCatching { - client.request("$HTTP_BIN_URL/status/302") { - method = HttpMethod.Trace - } - } - runCatching { client.get("$HTTP_BIN_URL/status/404") } - runCatching { client.delete("$HTTP_BIN_URL/status/418") } - runCatching { client.get("$HTTP_BIN_URL/status/500") } - - // Redirects - runCatching { client.get("$HTTP_BIN_URL/absolute-redirect/1") } - runCatching { client.get("$HTTP_BIN_URL/absolute-redirect/3") } - runCatching { client.get("$HTTP_BIN_URL/redirect/1") } - runCatching { client.get("$HTTP_BIN_URL/redirect/3") } - runCatching { client.delete("$HTTP_BIN_URL/redirect-to?url=/get") } - runCatching { client.get("$HTTP_BIN_URL/redirect-to?url=/get") } - runCatching { client.patch("$HTTP_BIN_URL/redirect-to?url=/get") { setBody("") } } - runCatching { client.post("$HTTP_BIN_URL/redirect-to?url=/get") { setBody("") } } - runCatching { client.put("$HTTP_BIN_URL/redirect-to?url=/get") { setBody("") } } - runCatching { - client.request("$HTTP_BIN_URL/redirect-to?url=/get") { - method = HttpMethod.Trace - } - } - runCatching { client.get("$HTTP_BIN_URL/redirect-to?url=/get&status_code=301") } - runCatching { client.get("$HTTP_BIN_URL/redirect-to?url=/get&status_code=302") } - runCatching { client.get("$HTTP_BIN_URL/redirect-to?url=/get&status_code=303") } - runCatching { client.get("$HTTP_BIN_URL/redirect-to?url=/get&status_code=307") } - runCatching { client.get("$HTTP_BIN_URL/redirect-to?url=/get&status_code=308") } - runCatching { client.get("$HTTP_BIN_URL/relative-redirect/1") } - runCatching { client.get("$HTTP_BIN_URL/relative-redirect/3") } - - // Anything - runCatching { client.delete("$HTTP_BIN_URL/anything") } - runCatching { client.get("$HTTP_BIN_URL/anything") } - runCatching { client.patch("$HTTP_BIN_URL/anything") { setBody("") } } - runCatching { client.post("$HTTP_BIN_URL/anything") { setBody("") } } - runCatching { client.put("$HTTP_BIN_URL/anything") { setBody("") } } - runCatching { - client.request("$HTTP_BIN_URL/anything") { - method = HttpMethod.Trace - } - } - runCatching { client.delete("$HTTP_BIN_URL/anything/nested/path") } - runCatching { client.get("$HTTP_BIN_URL/anything/nested/path") } - runCatching { client.patch("$HTTP_BIN_URL/anything/nested/path") { setBody("") } } - runCatching { client.post("$HTTP_BIN_URL/anything/nested/path") { setBody("") } } - runCatching { client.put("$HTTP_BIN_URL/anything/nested/path") { setBody("") } } - runCatching { - client.request("$HTTP_BIN_URL/anything/nested/path") { - method = HttpMethod.Trace - } - } - - // Request inspection - runCatching { client.get("$HTTP_BIN_URL/headers") } - runCatching { client.get("$HTTP_BIN_URL/ip") } - runCatching { client.get("$HTTP_BIN_URL/user-agent") } - - // Auth - runCatching { client.get("$HTTP_BIN_URL/basic-auth/user/passwd") } - runCatching { client.get("$HTTP_BIN_URL/bearer") } - runCatching { client.get("$HTTP_BIN_URL/digest-auth/auth/user/passwd") } - runCatching { client.get("$HTTP_BIN_URL/digest-auth/auth/user/passwd/MD5") } - runCatching { client.get("$HTTP_BIN_URL/digest-auth/auth/user/passwd/MD5/never") } - runCatching { client.get("$HTTP_BIN_URL/hidden-basic-auth/user/passwd") } - - // Response formats - runCatching { client.get("$HTTP_BIN_URL/base64/SGVsbG8sIGh0dHBiaW4h") } - runCatching { client.get("$HTTP_BIN_URL/deny") } - runCatching { client.get("$HTTP_BIN_URL/encoding/utf8") } - runCatching { client.get("$HTTP_BIN_URL/html") } - runCatching { client.get("$HTTP_BIN_URL/json") } - runCatching { client.get("$HTTP_BIN_URL/robots.txt") } - runCatching { client.get("$HTTP_BIN_URL/xml") } - runCatching { - client.post("$HTTP_BIN_URL/anything/markdown") { - contentType(ContentType.parse("text/markdown")) - setBody(MARKDOWN_SAMPLE) - } - } - runCatching { - client.post("$HTTP_BIN_URL/anything/yaml") { - contentType(ContentType.parse("application/yaml")) - setBody(YAML_SAMPLE) - } - } - - // Images - runCatching { client.get("$HTTP_BIN_URL/image") } - runCatching { client.get("$HTTP_BIN_URL/image/jpeg") } - runCatching { client.get("$HTTP_BIN_URL/image/png") } - runCatching { client.get("$HTTP_BIN_URL/image/svg") } - runCatching { client.get("$HTTP_BIN_URL/image/webp") } - - // Compression - runCatching { client.get("$HTTP_BIN_URL/brotli") } - runCatching { client.get("$HTTP_BIN_URL/deflate") } - runCatching { client.get("$HTTP_BIN_URL/gzip") } - - // Cookies and cache - runCatching { client.get("$HTTP_BIN_URL/cache") } - runCatching { client.get("$HTTP_BIN_URL/cache/30") } - runCatching { client.get("$HTTP_BIN_URL/cookies") } - runCatching { client.get("$HTTP_BIN_URL/cookies/delete?theme") } - runCatching { client.get("$HTTP_BIN_URL/cookies/set?theme=dark") } - runCatching { client.get("$HTTP_BIN_URL/cookies/set/session/ktor-monitor") } - runCatching { client.get("$HTTP_BIN_URL/etag/sample-etag") } - - // Dynamic data - runCatching { client.get("$HTTP_BIN_URL/bytes/1024") } - runCatching { client.delete("$HTTP_BIN_URL/delay/1") } - runCatching { client.get("$HTTP_BIN_URL/delay/1") } - runCatching { client.patch("$HTTP_BIN_URL/delay/1") { setBody("") } } - runCatching { client.post("$HTTP_BIN_URL/delay/1") { setBody("") } } - runCatching { client.put("$HTTP_BIN_URL/delay/1") { setBody("") } } - runCatching { - client.request("$HTTP_BIN_URL/delay/1") { - method = HttpMethod.Trace - } - } - runCatching { client.get("$HTTP_BIN_URL/drip?duration=1&numbytes=16&delay=0") } - runCatching { client.get("$HTTP_BIN_URL/links/5/0") } - runCatching { client.get("$HTTP_BIN_URL/range/256") } - runCatching { client.get("$HTTP_BIN_URL/response-headers?X-Debug=ktor-monitor&Server=example") } - runCatching { client.post("$HTTP_BIN_URL/response-headers?X-Debug=ktor-monitor") { setBody("") } } - runCatching { client.get("$HTTP_BIN_URL/stream/5") } - runCatching { client.get("$HTTP_BIN_URL/stream-bytes/256") } - runCatching { client.get("$HTTP_BIN_URL/uuid") } - - // Form data (url-encoded) - runCatching { - client.post("$HTTP_BIN_URL/post") { - contentType(ContentType.Application.FormUrlEncoded) - setBody( - FormDataContent( - Parameters.build { - append("username", "ktor-monitor") - append("email", "demo@example.com") - append("notes", TEXT_SAMPLE) - } - ) - ) - } - } - - // Multipart / form-data - runCatching { - client.post("$HTTP_BIN_URL/post") { - setBody( - MultiPartFormDataContent( - formData { - append("username", "ktor-monitor") - append("email", "demo@example.com") - append( - key = "notes", - value = TEXT_SAMPLE, - headers = Headers.build { - append(HttpHeaders.ContentType, "text/plain; charset=utf-8") - }, - ) - append( - key = "file", - value = TEXT_FILE_CONTENT_SAMPLE.encodeToByteArray(), - headers = Headers.build { - append(HttpHeaders.ContentType, "text/plain") - append(HttpHeaders.ContentDisposition, "filename=\"sample.txt\"") - }, - ) - append( - key = "logo", - value = SVG_SAMPLE, - headers = Headers.build { - append(HttpHeaders.ContentType, "image/svg+xml") - append(HttpHeaders.ContentDisposition, "filename=\"logo.svg\"") - }, - ) - } - ) - ) - } - } -} \ No newline at end of file diff --git a/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt b/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt deleted file mode 100644 index 5bc12226..00000000 --- a/sample/ktor/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt +++ /dev/null @@ -1,20 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import io.ktor.client.HttpClient -import io.ktor.client.plugins.sse.SSE -import io.ktor.client.plugins.websocket.WebSockets -import ro.cosminmihu.ktor.monitor.ContentLength -import ro.cosminmihu.ktor.monitor.KtorMonitorLogging -import ro.cosminmihu.ktor.monitor.RetentionPeriod - -internal fun httpClient() = HttpClient { - install(KtorMonitorLogging) { - sanitizeHeader { header -> header == "Authorization" } - filter { request -> !request.url.host.contains("cosminmihu.ro") } - showNotification = true - retentionPeriod = RetentionPeriod.OneHour - maxContentLength = ContentLength.Default - } - install(WebSockets) - install(SSE) -} \ No newline at end of file diff --git a/sample/ktor/src/iosMain/kotlin/ro/cosminmihu/ktor/monitor/sample/MainViewController.kt b/sample/ktor/src/iosMain/kotlin/ro/cosminmihu/ktor/monitor/sample/MainViewController.kt deleted file mode 100644 index 45253014..00000000 --- a/sample/ktor/src/iosMain/kotlin/ro/cosminmihu/ktor/monitor/sample/MainViewController.kt +++ /dev/null @@ -1,9 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import androidx.compose.ui.window.ComposeUIViewController -import ro.cosminmihu.ktor.monitor.KtorMonitor - -/** - * Compose sample how to use [KtorMonitor]. - */ -fun MainViewController() = ComposeUIViewController { App() } \ No newline at end of file diff --git a/sample/ktor/src/jvmMain/composeResources/drawable/ic_launcher.xml b/sample/ktor/src/jvmMain/composeResources/drawable/ic_launcher.xml deleted file mode 100644 index 18295790..00000000 --- a/sample/ktor/src/jvmMain/composeResources/drawable/ic_launcher.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/sample/ktor/src/jvmMain/composeResources/values/strings.xml b/sample/ktor/src/jvmMain/composeResources/values/strings.xml deleted file mode 100644 index 4c23d95f..00000000 --- a/sample/ktor/src/jvmMain/composeResources/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Ktor Monitor Sample Ktor - \ No newline at end of file diff --git a/sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt b/sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt deleted file mode 100644 index 029aa6ce..00000000 --- a/sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt +++ /dev/null @@ -1,44 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample.compose - -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.window.Tray -import androidx.compose.ui.window.Window -import androidx.compose.ui.window.application -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource -import ro.cosminmihu.ktor.monitor.KtorMonitorMenuItem -import ro.cosminmihu.ktor.monitor.KtorMonitorWindow -import ro.cosminmihu.ktor.monitor.sample.App -import ro.cosminmihu.ktor.monitor.sample.resources.Res -import ro.cosminmihu.ktor.monitor.sample.resources.app_name -import ro.cosminmihu.ktor.monitor.sample.resources.ic_launcher - -/** - * Compose sample how to use [KtorMonitorWindow] w/o [KtorMonitorMenuItem]. - */ -fun main() = application { - - var showKtorMonitor by rememberSaveable { mutableStateOf(false) } - - Tray( - icon = painterResource(Res.drawable.ic_launcher), - menu = { - KtorMonitorMenuItem { showKtorMonitor = true } - } - ) - - KtorMonitorWindow( - show = showKtorMonitor, - onCloseRequest = { showKtorMonitor = false } - ) - - Window( - onCloseRequest = ::exitApplication, - title = stringResource(Res.string.app_name), - ) { - App() - } -} \ No newline at end of file diff --git a/sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt b/sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt deleted file mode 100644 index a72e9af5..00000000 --- a/sample/ktor/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt +++ /dev/null @@ -1,30 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample.swing - -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import ro.cosminmihu.ktor.monitor.KtorMonitorPanel -import ro.cosminmihu.ktor.monitor.sample.samples -import java.awt.BorderLayout -import java.awt.Dimension -import javax.swing.JFrame -import javax.swing.SwingUtilities - -/** - * Swing Sample how to use [KtorMonitorPanel]. - */ -fun main() { - GlobalScope.launch { - samples() - } - - SwingUtilities.invokeLater { - val frame = JFrame("Ktor Monitor Sample") - frame.minimumSize = Dimension(800, 600) - frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE - - frame.add(KtorMonitorPanel, BorderLayout.CENTER) - - frame.pack() - frame.isVisible = true - } -} \ No newline at end of file diff --git a/sample/ktor/src/webMain/kotlin/ro/cosminmihu/ktor/monitor/sample/main.kt b/sample/ktor/src/webMain/kotlin/ro/cosminmihu/ktor/monitor/sample/main.kt deleted file mode 100644 index 3973bd26..00000000 --- a/sample/ktor/src/webMain/kotlin/ro/cosminmihu/ktor/monitor/sample/main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.window.ComposeViewport - -@OptIn(ExperimentalComposeUiApi::class) -fun main() { - ComposeViewport { - App() - } -} \ No newline at end of file diff --git a/sample/ktor/src/webMain/resources/index.html b/sample/ktor/src/webMain/resources/index.html deleted file mode 100644 index 946c6c51..00000000 --- a/sample/ktor/src/webMain/resources/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Ktor Monitor Sample - - - - - - \ No newline at end of file diff --git a/sample/ktor/src/webMain/resources/styles.css b/sample/ktor/src/webMain/resources/styles.css deleted file mode 100644 index 0549b10f..00000000 --- a/sample/ktor/src/webMain/resources/styles.css +++ /dev/null @@ -1,7 +0,0 @@ -html, body { - width: 100%; - height: 100%; - margin: 0; - padding: 0; - overflow: hidden; -} \ No newline at end of file diff --git a/sample/ktor/webpack.config.d/sqljs-config.js b/sample/ktor/webpack.config.d/sqljs-config.js deleted file mode 100644 index 8612d471..00000000 --- a/sample/ktor/webpack.config.d/sqljs-config.js +++ /dev/null @@ -1,17 +0,0 @@ -// {project}/webpack.config.d/sqljs.js -config.resolve = { - fallback: { - fs: false, - path: false, - crypto: false, - } -}; - -const CopyWebpackPlugin = require('copy-webpack-plugin'); -config.plugins.push( - new CopyWebpackPlugin({ - patterns: [ - '../../node_modules/sql.js/dist/sql-wasm.wasm' - ] - }) -); \ No newline at end of file diff --git a/sample/okhttp/build.gradle.kts b/sample/okhttp/build.gradle.kts deleted file mode 100644 index 6f92c900..00000000 --- a/sample/okhttp/build.gradle.kts +++ /dev/null @@ -1,108 +0,0 @@ -import org.jetbrains.compose.desktop.application.dsl.TargetFormat -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidApplication) - alias(libs.plugins.composeMultiplatform) - alias(libs.plugins.composeCompiler) -} - -compose.resources { - packageOfResClass = "ro.cosminmihu.ktor.monitor.sample.resources" -} - -kotlin { - - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - } - - jvm() - - sourceSets { - androidMain.dependencies { - implementation(libs.androidx.activity.compose) - } - commonMain.dependencies { - implementation(libs.compose.runtime) - implementation(libs.compose.foundation) - implementation(libs.compose.material3) - implementation(libs.compose.ui) - implementation(libs.compose.components.resources) - implementation(libs.compose.ui.tooling.preview) - implementation(libs.androidx.lifecycle.viewmodel) - implementation(libs.androidx.lifecycle.runtime.compose) - implementation(libs.okhttp) - implementation(projects.okhttp.libraryOkhttp) - implementation(projects.sample.shared) -// implementation("ro.cosminmihu.ktor:ktor-monitor-okhttp-interceptor:1.13.0") -// implementation(projects.okhttp.libraryOkhttpNoOp) -// implementation("ro.cosminmihu.ktor:ktor-monitor-okhttp-interceptor-no-op:1.13.0") - } - jvmMain.dependencies { - implementation(compose.desktop.currentOs) - implementation(libs.kotlinx.coroutines.swing) - } - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.sample" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - applicationId = "ro.cosminmihu.ktor.monitor.sample" - minSdk = libs.versions.android.minSdk.get().toInt() - targetSdk = libs.versions.android.targetSdk.get().toInt() - versionCode = 1 - versionName = "1.0" - } - packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - } - } - signingConfigs { - create("release") { - storeFile = File(project.rootDir, "extra/sample/sample-ktor-monitor.jks") - storePassword = "ktor-monitor-sample" - keyAlias = "ktor-monitor-sample" - keyPassword = "ktor-monitor-sample" - } - } - buildTypes { - debug { - versionNameSuffix = ".debug" - } - - release { - isMinifyEnabled = true - isShrinkResources = true - signingConfig = signingConfigs.getByName("release") - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - isCoreLibraryDesugaringEnabled = true - } -} - -compose.desktop { - application { - mainClass = "ro.cosminmihu.ktor.monitor.sample.MainKt" - - nativeDistributions { - targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Rpm) - packageName = "ro.cosminmihu.ktor.monitor.sample" - packageVersion = "1.0.0" - } - } -} - -dependencies { - coreLibraryDesugaring(libs.desugar) -} diff --git a/sample/okhttp/src/androidMain/AndroidManifest.xml b/sample/okhttp/src/androidMain/AndroidManifest.xml deleted file mode 100644 index 760a97b1..00000000 --- a/sample/okhttp/src/androidMain/AndroidManifest.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/sample/okhttp/src/androidMain/ic_launcher-playstore.png b/sample/okhttp/src/androidMain/ic_launcher-playstore.png deleted file mode 100644 index cb1af58b9abf2f977ea1e9a5e809e1a7ea72c8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23908 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 - - - - - - diff --git a/sample/okhttp/src/androidMain/res/drawable/ic_launcher_monochrome.xml b/sample/okhttp/src/androidMain/res/drawable/ic_launcher_monochrome.xml deleted file mode 100644 index 5b781595..00000000 --- a/sample/okhttp/src/androidMain/res/drawable/ic_launcher_monochrome.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - diff --git a/sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 081998b2..00000000 --- a/sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 081998b2..00000000 --- a/sample/okhttp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher.webp b/sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 97c5532a77cfe49410d7ef4b0e9a5810232f053e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1020 zcmV z92$es8E`|R@>ic{@UzwDG48+v*qXTxcwOu zr9x@>*}c6dQYje!mwlp%&(BrqVfWK$|BvNoSMl+&K>LI=CQ3A>uTjMqmBz%FD3wa3 zVcFq?CkcLR0~j_!Wbc#ePKPQV1yllax@Z5{1W| z#DEE;G(jwJ=TZ{oNmKaLbYrSeWUGAc8HS8*H)F_g7sxbXblGCl5afzv88EQQ7+cg_ zm*=v9b++5yB-_v$)1U8|!IffpuoIwFTGcDl>kj3)AQ_bLG!IJXPBkfgf9fJ0obI*(R_> z1?y+K(15n+n(s3$Xh5@zz5Prn{qR|bSsT$n)4a&D3wJ)#*B9@7(qRq_4RlQMJwIP_ z>OH-`|Ipn}I?U042KqKE952q+oOnvlDp-2I}%tZitZchlMHGu20*QcCHkYjykY ze$`=9{b-TvXbxknEuf1D8mvZ4cYp-YHYH^F*$q-a|E7TDS0_jUeH(l~ zJ3$)go8+1928p0!&Y86Xq=F{9p1lPm18s4ay#=HL&BoY5Tcyh~5kTwgWG4ulAXg*{ z0}S+l5qTo1C=4}0mPnjD@$Mcxid#?_n52aA5I2Q~xcNqwgOn9fzV3wIGdN;Azo?)P qbwN@7cto%l5mdYbL&L(+hlK|CC?bS-`1<*y_w)52hAI-0|EU04aPg4< diff --git a/sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp b/sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.webp deleted file mode 100644 index 134f74d5e9a6cf80ae3edc6920e342ff71cb81c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1084 zcmV-C1jGAMNk&FA1ONb6MM6+kP&iB|1ONapp+G1Q&jTTnB*j*#eD2>f!1QtBCO?>P zBuSFf)OUF_!I2~KUXyMkNm8Wp-?H}trPmmD_j3M^;83Xo0FYvR2QvQ!#^!Op6JPH? z2+GW+AOLVZu8Kq?N|B7s`V2}?V154*1&YJE2O?R&ApsbCfBxR?FY{mE{rLgwGt6w> zA8+vfcq44K|E3_t48;ruDZbu6P(TefD$&0-G8jL`!+|6qVMj&SH<%Ly@KzML3$`Xu#WbQ@z zDMmo*Zj?D1fq2{O@U~9k*nw&tjlfv8F&nl)F1|ABF!x4{U+%q=z=q3cFcbO4(7 zooE#!5Gz-!Zu)?cq@+k6;NLe6n8gT$!j;TsBQO-#_h1juyl3nwAHfKO%2g^`eqcDJ z+JRo6anIOO7BK>$a0Rp31PsPhKhzC0?-+Z^Dn=ldWoEk(=#R^8s2gb9HTINwFapEJ zqN7HjB`o`a7NGIOf$GO#1cuB7=}~}%qOI~Oz+}demS_Z|a-P!T0CPnf#xu(p~2n@Fc%FWV#uJ5Ou*ukXhg%~ z*RN5%k49kpdVSfFo4h|;fuT_MdFfyVLgg+}2SXr*JGdTT3c@FwOJ^7Z$*rXW%t5Se zO+5_4cx&mche;SJn@LYF3X<7KI>Ic-gH2pJ7=}>TKsvxQNabdi6O4o8t)>&q!|<`q z)WZQ73OAT~xB#(mwaW=kK&V_Po!|z9!d0#ZI0B(^h19_nhfsQ?${DGLOCXs)qywA+dGMR-8E!$yRMm8VV-TzArGsk_@9!O)gYg;eY5LcsKZ^r> CL=XD_ diff --git a/sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp b/sample/okhttp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index ec375861a73d5df9ec8f6a703728e591e141a610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2130 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 diff --git a/sample/okhttp/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp b/sample/okhttp/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.webp deleted file mode 100644 index 7f67acebb51623ee3fe22286e783c763c40eb034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?`aNk&G{0ssJ4MM6+kP&iD(0ssInYrq;1XTmm;Bqy`4|FKmr#7$mcX-yK2 zBS~_iDzx~)4_B}qqqM#ox3O(2)!w+|M6?1u(0>JlZeQ;FCjfXyxFg&V2;7A8_j5=1 z?*Ie>$R5E|Nl^8FpPN0WG15j6Y%N7Sy1)eMKlk~(mLiNj zVM`Ga#$L#ryvf)D=~#lCtCu;cImwl?BdN`(nk}WFFBD6iG-gyQbrNwpRLVMuTA@m| zl*qnNC>u$1kLsjOTI5`rY%Hx-sET#cGNU54l-50}VN2;CqY{~uPBQ8+;24iD5uZ>6 zK#uTC5nmWp0OW26qY8lB4e_V~Ajdi0eYJfQ5=IpupTxLW+T0`B*;+jbNtLSrIXAml zGPA#ke$JSc(~vN#0O*@sE}PlEL`1iVSvw1fFI0en>s>6H$L3rl(g|9^COD4IcCc?Q2kXIqPN;VFN4%d?#Y9^Ch1wanb z?|mYo!#@;57*zoDp@xlwQ3XKmhA^rC$lVY|6#$=JB0feC9;g7w(n*);0LWb^Ehqu# z+bb=o0myAR3yJ_%?Tj-}1#)h~rJxL;k2lId9VmRP(t<*ORUBtQB^XX)xD=EEozfC$ z>FLH!X_qplq$TZA((?70s9sRg5-7b>T2{x}w8r*F(sI79$e4s_4G}5>(v(nZXj&r@ z4(E;eX-OJ}2oeYdLahP9lmTh}zBiz-ZF}0bp42B>PR7j4%*@QpTXD>rExo10O%F3O zGt+j)9G&zU}jn-`I?r=sEZ9w*}Vpj8a22VWpkq|3{FJj7jHRq z{Pg+rr;i`nvUofZaU*XQQLjb&FGKtC{zW~Bto$&O*s>A;QfNv5CCeCbmIsq)Mgbt~ z@=E9mTL1+!h|EAH(P{_6f%~K`rUSqca8?tU0ZgJzfGtrLZ%x&^dXP4-g~-%0h;~5; zpr)Z+sn%pv4-f*o8JQZ4XfuQWDr#GlQmXS=bpQx~t&Er-r&SOFC`+`doT<1Q07765 zaUYAOI}kukZKv|hBq9MI;LIW`he1>T8z`%7QJU$ekpQq!XpoV`X(@z6MWRz_rxI=e zDX@Y#5gF8@1P*Fy+f=|zJf;T+rG3aC;5)WZ&gFueNauL? z>FZzJ^1Pd0zV_LpCZ$yBX~ggRM51wih&)YY{rKJ+-`@4SyWhX@{!dvdopAl85REwP zhe#r$RMU+gK6v}PyLZ2T=Yt<^O}}0xQ`o~{F|R^v_2`vrJ2MT^*RV!3vRMQ<*_~P z+Bn>o7;(N5QfeVun-12}P$nhTa!zE>@KQK>h{ZEO+G=ay;P^-~h=_Mv2PyU7CQ^Ex zi3&)G_1!oTkwJrtU=|M*KQgRQdjTf^qRCdJ+8b&B z2iP~-GD+7AkJ$~_QV(u@sx@8)X#;!4hB@i;@W>ahK-y9ZvAQR&v?Z>*Ffz<3s1X{n zpa_t*kQ%5ew^rgxDLyYojg$GT2_3#B~UpV~g)Inj3 z^3AO711HRVWlzEJlV{JKJYKNpmAMlKcDD@bLW5g<29BIGZT6fwv!_iOIk1n#4eDaX SLm{hs&)&UzcDF(nXA~IoBaz|& diff --git a/sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp b/sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 768c74481e0a5160bb15b58898b7d29955b433b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1378 zcmV-o1)cg*Nk&Fm1pok7MM6+kP&iCZ1pojqU%(d-cLzC=Bt??6iG36#-8c)%s8Ep+emUGMa?Sz9b2pm`x7s5x^bDosEs5??!KHT+;dSJ-=nFv zZ5syOQh5h}{0mGF2owT^{O%nXut1;?n12ih(E$T5%rKy^!v!a-5ExLHAuvNAP*|Z5 zSfEGjkK<@(SlIvnN;6d|{nZOqrH|jGwEttOum6~-656|FN}9BH%+&M8m%U@A8h!1M z9^O8n_n&2^N=+3|aQF1IcT7T!UcY`!l1fuupYKXj&8|Jss5DchJ<;fEhg8}-X6o(x z51OeG3Z%F1Wu{P}w0Hc?mDpiZL6olUAs`eePKOg~vkVJsZ5Rw|EMPD!FcvT@Fc?+m z;{k(VVbRU)toi;RutUoSX2|8V{$_doyb(~KLV*Bx6Mi`g_)U|nVC$Vyb5ztOt~p@Q)cEiY#yT&E3!BY<-bl2;)Nsn+3r{NfdfcpSN<|+I38?UAJ=H z^qzu9#UzYe1e{znN-$9ngXCw|$}nm@Pc}?6s56e%!ctVIxAl{Z>cp{H*u%kMoo$#b>dH}% z7_o88-H3?TC%fp|0Sw zhovoV5c1oj($-gxDPfzF5%9#+6ny@WwB?1PgpdypNLyYxp@c2vjDYi&iZ2gJn-3o) z?LXQtZF%{m5=M#{f%0HdUmuXHhmVquKi(&8elc4KBc+T$Nhpcj=Ok(GS41)EHA&j` z`CTQfvoivvA*KA^pR!7if7emgJKLolALQIi0$ZGnz?l{$^7GSH>!EMkoqBtxwEO*R zk`zY0j6g-368Y&FtM$;ggk-(7OWN~Z7Eyr-A0yz2E0G_cwQhZrkY65?_8iF~s_>?V z5%9*9$WPC|bes_K$rDFT6ABn}F#_JW68Yl?HpafDJ$0C)kVbyTW-7Jh)eg+h%l z6F36SsH&=f1-Jsud z<{q;kC4&zcDKNW-Sy0z)!ZJunP3K^03M`-8y^}gaw?R{v11DEZ8`RyPPB8Tu_V=8n zYd3D#$n=Jd>z2;_XINj8K+({7;IJ`&{`>!bjQ{`dUt@+1>};SR7`yZvGJM2H=0^-4 k(yxnApldL9?cIOCK*k63@7>jG5U3kOlbLywXb>JO1@mo_YybcN diff --git a/sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp b/sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.webp deleted file mode 100644 index c3f18412796864d0f236c0b72455de54a18d040b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmV+b2LJg|Nk&Ha1pok7MM6+kP&iEN1pojq*T6LpFXbwdBw5J~4B=l4{|I>RaZYiV zfE-DZq$tV|3;o4F0RA_-T@E>tBuPrto(iERDk1>?8@hb{*FjM=Ojgm*Fk{Z2FuOuX zM3_aq&k~84U8EusL5k${_opIeS0Vzbgsend@9#ngffQkOg+%;gS?GY z^R4neM}P`cV0OL!kJ+OVNI_ob-}d-W5K##vgiw$oklW|m>8GF;Rpnh_7@)^BGS%9$+q^kjZ`0`AM&_5FCve78CAWHJk3FYqGTJS|KBnMkf2u@ zNs#B~tQ^t*34krzw(00~#ZKC`ZQJH;+qQALPVfKTCpY`%3nKbI0dHRY{{jEd>Z^Us z=F-fPWf@OwXUKAwMB)w24k|klk+ZWigAScM+OVA!%k8~9**KaJbV%~dz;-s6BFVEO zFJ^+-C3&I0rg=~_@?u{vW`NlQ>G9-@`lxKB*Sp#(kM>D=j!defqLbc(vx=i*Cj&-a zsf~7>4BA$tG%7n8IMh~Urbse)WKx*fCdtrW8FiU`kStF%Da&kwWa=xUDk_p>>z!2; zl}R#=Y}G`&PO^@Ultjl)G7r2`5fzh0x(%CNT0!9m}$lNo<*vvD|es zk-?EFOqpad&rF)wM43?UG;w*#_`nD*G!27 zUa0|=n<WB7Va*ShYBEVJI+xN(EK4Gx7VZwm^x;0UjYCq8=8ZB0BC%Z5YJW( zupBaYtOobZYi8XHt?v>N9H{~1;$U|b;DI^Ps!<<9!>fb@Ua0|=+kt+p0}o6o9hpNu zhW1AZX_?f3RTT#L>05B$jH3AFh?_auo+KnVs|HXV2l(lm3+|sJ%WB96-t;6Pk*ykF z+4uI#cNY)cQ_32d!!CxFX9gl&HFCMz5DPc9{VyJ(S5MPlRU~1pXzu#Xx z+D(G0OM}io3Gua21E}(Stlz(VB ztlwua6zo|zEeB6uBwM6qs|Kt%^s!!xFy!yYIWGeb8Dx`0M`{4M&#hDl0af@)Bw7^?SnRBfTv$+RF4yg7?c!p=N4)JD&Gff zWqJn`>CIkeia|*tr<(LY?E9dd36tXg^{r9Th`(N_0gJ2Hhn;qbXR8KSZl**clNw;F zI3*ICRRf6IDUpV)8nEIpCDJ%j1IV4HM9w!>4IuVYB9V<6K<VZ|Z0 z?nqD($i=+69YIO39CJz~K~1pE=aUM8qF^eYOV}Ey3RIu+2zvu%!Cd(q($+v-AdbVO z!a!lLbr`BE2`U3s?J(Vrpfs#F4$&P6YJ+v5zpfxC4#csqv?r(zw!Z79EeXnlai>1Q z#z1{o)c$2nfy|Wxy7n(gJ2MZk;P|{$7|aA%4$nyk!fXJ!=BfMb5;Fppo5#8XVOGGp m^MkG=%nZ;?6iK@!W(O>vV!6Z&fw|lm%#ty`0_WBLAHEF;7}dxC diff --git a/sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp b/sample/okhttp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 058948fea55a3f954b26889dd79358a88df5d863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2892 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 diff --git a/sample/okhttp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/sample/okhttp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index 58668e3e7e548aed949ddf18be1027fa155483c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2990 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 diff --git a/sample/okhttp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp b/sample/okhttp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index d7d90ed3140baf224f5d535e46fafbbc614e9e6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4886 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 I^;qYs0F_5XZ~y=R diff --git a/sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp b/sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index 147dc8232c9d275850e9a188b9ddd41bfb13ea42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3244 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 diff --git a/sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index a3a2f5051042daaf32e14e24ced71bcd5e773a2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4006 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 MEB`D1EB`CH0yE>Ai~s-t diff --git a/sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp b/sample/okhttp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 44fbdeecea9babdff9dae18d2c1f0712f1d7d957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6726 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 - - #010101 - \ No newline at end of file diff --git a/sample/okhttp/src/androidMain/res/values/strings.xml b/sample/okhttp/src/androidMain/res/values/strings.xml deleted file mode 100644 index 7da4ec0a..00000000 --- a/sample/okhttp/src/androidMain/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Ktor Monitor Sample OKHTTP - \ No newline at end of file diff --git a/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt b/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt deleted file mode 100644 index 651b6e99..00000000 --- a/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/App.kt +++ /dev/null @@ -1,29 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import ro.cosminmihu.ktor.monitor.KtorMonitor - -/** - * Compose sample how to use [KtorMonitor]. - */ -@Preview -@Composable -fun App() { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - KtorMonitor() - } - - LaunchedEffect(Unit) { - samples() - } -} - diff --git a/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt b/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt deleted file mode 100644 index 95d0ce82..00000000 --- a/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/Calls.kt +++ /dev/null @@ -1,188 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.MultipartBody -import okhttp3.Request -import okhttp3.RequestBody.Companion.toRequestBody -import ro.cosminmihu.ktor.monitor.sample.shared.HTTP_BIN_URL -import ro.cosminmihu.ktor.monitor.sample.shared.MARKDOWN_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.SVG_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.TEXT_FILE_CONTENT_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.TEXT_SAMPLE -import ro.cosminmihu.ktor.monitor.sample.shared.YAML_SAMPLE - - -internal suspend fun samples() = withContext(Dispatchers.IO) { - val client = httpClient() - - // HTTP Methods - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/get").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/post").post("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/put").put("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/delete").delete().build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/patch").patch("".toRequestBody(null)).build()).execute() } - - // Status codes - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/200").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/201").post("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/204").put("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/206").patch("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/302").method("TRACE", null).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/404").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/418").delete().build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/status/500").build()).execute() } - - // Redirects - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/absolute-redirect/1").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/absolute-redirect/3").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect/1").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect/3").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get").delete().build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get").patch("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get").post("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get").put("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get").method("TRACE", null).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get&status_code=301").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get&status_code=302").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get&status_code=303").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get&status_code=307").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/redirect-to?url=/get&status_code=308").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/relative-redirect/1").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/relative-redirect/3").build()).execute() } - - // Anything - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything").delete().build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything").patch("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything").post("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything").put("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything").method("TRACE", null).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything/nested/path").delete().build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything/nested/path").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything/nested/path").patch("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything/nested/path").post("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything/nested/path").put("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/anything/nested/path").method("TRACE", null).build()).execute() } - - // Request inspection - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/headers").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/ip").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/user-agent").build()).execute() } - - // Auth - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/basic-auth/user/passwd").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/bearer").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/digest-auth/auth/user/passwd").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/digest-auth/auth/user/passwd/MD5").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/digest-auth/auth/user/passwd/MD5/never").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/hidden-basic-auth/user/passwd").build()).execute() } - - // Response formats - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/base64/SGVsbG8sIGh0dHBiaW4h").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/deny").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/encoding/utf8").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/html").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/json").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/robots.txt").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/xml").build()).execute() } - runCatching { - client.newCall( - Request.Builder() - .url("$HTTP_BIN_URL/anything/markdown") - .post(MARKDOWN_SAMPLE.toRequestBody("text/markdown".toMediaType())) - .build() - ).execute() - } - runCatching { - client.newCall( - Request.Builder() - .url("$HTTP_BIN_URL/anything/yaml") - .post(YAML_SAMPLE.toRequestBody("application/yaml".toMediaType())) - .build() - ).execute() - } - - // Images - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/image").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/image/jpeg").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/image/png").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/image/svg").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/image/webp").build()).execute() } - - // Compression - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/brotli").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/deflate").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/gzip").build()).execute() } - - // Cookies and cache - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/cache").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/cache/30").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/cookies").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/cookies/delete?theme").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/cookies/set?theme=dark").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/cookies/set/session/ktor-monitor").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/etag/sample-etag").build()).execute() } - - // Dynamic data - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/bytes/1024").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/delay/1").delete().build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/delay/1").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/delay/1").patch("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/delay/1").post("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/delay/1").put("".toRequestBody(null)).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/delay/1").method("TRACE", null).build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/drip?duration=1&numbytes=16&delay=0").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/links/5/0").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/range/256").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/response-headers?X-Debug=okhttp-monitor&Server=example").build()).execute() } - runCatching { - client.newCall( - Request.Builder() - .url("$HTTP_BIN_URL/response-headers?X-Debug=okhttp-monitor") - .post("".toRequestBody(null)) - .build() - ).execute() - } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/stream/5").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/stream-bytes/256").build()).execute() } - runCatching { client.newCall(Request.Builder().url("$HTTP_BIN_URL/uuid").build()).execute() } - - // Form data (url-encoded) - runCatching { - client.newCall( - Request.Builder() - .url("$HTTP_BIN_URL/post") - .post( - "username=ktor-monitor&email=demo%40example.com¬es=Hello+from+Ktor+Monitor+sample" - .toRequestBody("application/x-www-form-urlencoded".toMediaType()) - ) - .build() - ).execute() - } - - // Multipart / form-data - runCatching { - val multipart = MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("username", "ktor-monitor") - .addFormDataPart("email", "demo@example.com") - .addFormDataPart("notes", TEXT_SAMPLE) - .addFormDataPart( - "file", - "sample.txt", - TEXT_FILE_CONTENT_SAMPLE.toRequestBody("text/plain".toMediaType()), - ) - .addFormDataPart( - "logo", - "logo.svg", - SVG_SAMPLE.toRequestBody("image/svg+xml".toMediaType()), - ) - .build() - client.newCall( - Request.Builder().url("$HTTP_BIN_URL/post").post(multipart).build() - ).execute() - } -} diff --git a/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt b/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt deleted file mode 100644 index 397880b0..00000000 --- a/sample/okhttp/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/HttpClient.kt +++ /dev/null @@ -1,20 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample - -import okhttp3.OkHttpClient -import ro.cosminmihu.ktor.monitor.ContentLength -import ro.cosminmihu.ktor.monitor.KtorMonitorInterceptor -import ro.cosminmihu.ktor.monitor.RetentionPeriod - -internal fun httpClient(): OkHttpClient = - OkHttpClient.Builder() - .addNetworkInterceptor( - KtorMonitorInterceptor { - sanitizeHeader { header -> header == "Authorization" } - filter { request -> !request.url.host.contains("cosminmihu.ro") } - showNotification = true - retentionPeriod = RetentionPeriod.OneHour - maxContentLength = ContentLength.Default - } - ) - .build() - diff --git a/sample/okhttp/src/jvmMain/composeResources/drawable/ic_launcher.xml b/sample/okhttp/src/jvmMain/composeResources/drawable/ic_launcher.xml deleted file mode 100644 index 18295790..00000000 --- a/sample/okhttp/src/jvmMain/composeResources/drawable/ic_launcher.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/sample/okhttp/src/jvmMain/composeResources/values/strings.xml b/sample/okhttp/src/jvmMain/composeResources/values/strings.xml deleted file mode 100644 index 4c23d95f..00000000 --- a/sample/okhttp/src/jvmMain/composeResources/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Ktor Monitor Sample Ktor - \ No newline at end of file diff --git a/sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt b/sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt deleted file mode 100644 index 029aa6ce..00000000 --- a/sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/compose/main.kt +++ /dev/null @@ -1,44 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample.compose - -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.window.Tray -import androidx.compose.ui.window.Window -import androidx.compose.ui.window.application -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource -import ro.cosminmihu.ktor.monitor.KtorMonitorMenuItem -import ro.cosminmihu.ktor.monitor.KtorMonitorWindow -import ro.cosminmihu.ktor.monitor.sample.App -import ro.cosminmihu.ktor.monitor.sample.resources.Res -import ro.cosminmihu.ktor.monitor.sample.resources.app_name -import ro.cosminmihu.ktor.monitor.sample.resources.ic_launcher - -/** - * Compose sample how to use [KtorMonitorWindow] w/o [KtorMonitorMenuItem]. - */ -fun main() = application { - - var showKtorMonitor by rememberSaveable { mutableStateOf(false) } - - Tray( - icon = painterResource(Res.drawable.ic_launcher), - menu = { - KtorMonitorMenuItem { showKtorMonitor = true } - } - ) - - KtorMonitorWindow( - show = showKtorMonitor, - onCloseRequest = { showKtorMonitor = false } - ) - - Window( - onCloseRequest = ::exitApplication, - title = stringResource(Res.string.app_name), - ) { - App() - } -} \ No newline at end of file diff --git a/sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt b/sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt deleted file mode 100644 index a72e9af5..00000000 --- a/sample/okhttp/src/jvmMain/kotlin/ro/cosminmihu/ktor/monitor/sample/swing/main.kt +++ /dev/null @@ -1,30 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample.swing - -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import ro.cosminmihu.ktor.monitor.KtorMonitorPanel -import ro.cosminmihu.ktor.monitor.sample.samples -import java.awt.BorderLayout -import java.awt.Dimension -import javax.swing.JFrame -import javax.swing.SwingUtilities - -/** - * Swing Sample how to use [KtorMonitorPanel]. - */ -fun main() { - GlobalScope.launch { - samples() - } - - SwingUtilities.invokeLater { - val frame = JFrame("Ktor Monitor Sample") - frame.minimumSize = Dimension(800, 600) - frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE - - frame.add(KtorMonitorPanel, BorderLayout.CENTER) - - frame.pack() - frame.isVisible = true - } -} \ No newline at end of file diff --git a/sample/shared/build.gradle.kts b/sample/shared/build.gradle.kts deleted file mode 100644 index 7aa6f149..00000000 --- a/sample/shared/build.gradle.kts +++ /dev/null @@ -1,45 +0,0 @@ -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - alias(libs.plugins.kotlinMultiplatform) - alias(libs.plugins.androidLibrary) -} - -kotlin { - androidTarget { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - } - - jvm() - - listOf( - iosArm64(), - iosSimulatorArm64(), - ) - - js { - browser() - } - - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser() - } -} - -android { - namespace = "ro.cosminmihu.ktor.monitor.sample.shared" - compileSdk = libs.versions.android.compileSdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.android.minSdk.get().toInt() - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} \ No newline at end of file diff --git a/sample/shared/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/shared/SamplePayloads.kt b/sample/shared/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/shared/SamplePayloads.kt deleted file mode 100644 index 9db9d2c2..00000000 --- a/sample/shared/src/commonMain/kotlin/ro/cosminmihu/ktor/monitor/sample/shared/SamplePayloads.kt +++ /dev/null @@ -1,66 +0,0 @@ -package ro.cosminmihu.ktor.monitor.sample.shared - -const val HTTP_BIN_URL: String = "https://httpbin.org" - -const val TEXT_SAMPLE: String = "Hello from Ktor Monitor sample" - -val TEXT_FILE_CONTENT_SAMPLE: String = """ -Sample file content -Line 2 -Line 3 -""".trimIndent() - -val MARKDOWN_SAMPLE: String = """ -# Ktor Monitor Markdown sample - -This request body helps test Markdown rendering. - -- preview mode for markdown -- code mode with line numbers - -```kotlin -fun greeting() = "Hello from Markdown" -``` -""".trimIndent() - -val YAML_SAMPLE: String = """ -sample: - name: ktor-monitor - features: - - markdown-preview - - yaml-code-view - enabled: true -""".trimIndent() - -/** W3C SVG logo used as a multipart SVG image attachment. */ -val SVG_SAMPLE: ByteArray = """ - SVG Logo - - - - - - - - - - - - - - - - - - - - - - - - - - - -""".trimIndent().encodeToByteArray() \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 54869af8..cdcf0351 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -35,11 +35,3 @@ include(":core:library") include(":core:library-no-op") include(":ktor:library-ktor") include(":ktor:library-ktor-no-op") -include(":okhttp:library-okhttp") -include(":okhttp:library-okhttp-no-op") -include(":http4k:library-http4k") -include(":http4k:library-http4k-no-op") -include(":sample:shared") -include(":sample:ktor") -include(":sample:okhttp") -include(":sample:http4k") From e8c6f040b3a48b56141c71cac96149e430b183f7 Mon Sep 17 00:00:00 2001 From: Ishaan Jain Date: Thu, 4 Jun 2026 15:40:10 +0530 Subject: [PATCH 2/2] Use org GitHub Packages credentials pattern (USERNAME / USER_TOKEN) Align the publishing repository block with the organization's standard pattern used in kulu-kmp: hardcoded GitHub Packages URL and credentials from System.getenv("USERNAME") / System.getenv("USER_TOKEN"). Update publish.yml env vars and the README repo snippet to match. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/publish.yml | 4 ++-- README.md | 4 ++-- build.gradle.kts | 14 +++----------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d3f303ed..3e711810 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -43,5 +43,5 @@ jobs: - name: Publish to GitHub Packages run: ./gradlew publishAllPublicationsToGitHubPackagesRepository --no-configuration-cache env: - GITHUB_ACTOR: ${{ github.actor }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + USERNAME: ${{ github.actor }} + USER_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 4a4a5a68..59968add 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ dependencyResolutionManagement { maven { url = uri("https://maven.pkg.github.com/Robustrade/KtorMonitor") credentials { - username = providers.gradleProperty("gpr.user").orElse(providers.environmentVariable("GITHUB_ACTOR")).orNull - password = providers.gradleProperty("gpr.key").orElse(providers.environmentVariable("GITHUB_TOKEN")).orNull + username = System.getenv("USERNAME") + password = System.getenv("USER_TOKEN") } } } diff --git a/build.gradle.kts b/build.gradle.kts index dab1222d..7dd6a7d2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,18 +24,10 @@ subprojects { repositories { maven { name = "GitHubPackages" - url = uri( - providers.gradleProperty("gpr.url") - .orElse(providers.environmentVariable("GITHUB_PACKAGES_URL")) - .getOrElse("https://maven.pkg.github.com/Robustrade/KtorMonitor") - ) + url = uri("https://maven.pkg.github.com/Robustrade/KtorMonitor") credentials { - username = providers.gradleProperty("gpr.user") - .orElse(providers.environmentVariable("GITHUB_ACTOR")) - .orNull - password = providers.gradleProperty("gpr.key") - .orElse(providers.environmentVariable("GITHUB_TOKEN")) - .orNull + username = System.getenv("USERNAME") + password = System.getenv("USER_TOKEN") } } }