├── .editorconfig ├── .gitignore ├── .idea ├── $CACHE_FILE$ ├── .gitignore ├── .name ├── dictionaries │ └── oliver.xml ├── encodings.xml ├── inspectionProfiles │ └── Project_Default.xml ├── jsLibraryMappings.xml ├── kotlinc.xml ├── ktlint-plugin.xml ├── markdown.xml ├── misc.xml └── vcs.xml ├── README.md ├── build.gradle.kts ├── docs ├── desktop-highlighting.png ├── initial-scene.png └── top-row-only-updates-resizing.gif ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── kotlin-js-store ├── yarn.lock └── yarn.lock.primary ├── settings.gradle.kts ├── src ├── commonMain │ └── kotlin │ │ ├── Configuration.kt │ │ ├── DrawSeries.kt │ │ ├── FPSCount.kt │ │ ├── Log.kt │ │ ├── Models.kt │ │ ├── RecomposeHighlighter.kt │ │ ├── ScrollView.kt │ │ └── Views.kt ├── jsMain │ ├── kotlin │ │ └── Main.kt │ └── resources │ │ └── index.html ├── jvmMain │ └── kotlin │ │ └── Main.kt └── wasmJsMain │ ├── kotlin │ └── Main.kt │ └── resources │ ├── index.html │ └── load.mjs ├── versions.properties └── webpack.config.d └── wasmBoilerplate.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.{kt,kts}] 4 | 5 | # Comma-separated list of allowed wildcard imports that will override the no-wildcard-imports rule. 6 | # "**" applies to package and all subpackages 7 | ij_kotlin_packages_to_use_import_on_demand = io.ktor.** 8 | 9 | max_line_length = 120 10 | 11 | ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL 12 | 13 | ij_kotlin_line_comment_at_first_column = false 14 | ij_kotlin_line_comment_add_space = true 15 | 16 | ij_kotlin_name_count_to_use_star_import = 2147483647 17 | ij_kotlin_name_count_to_use_star_import_for_members = 2147483647 18 | 19 | ij_kotlin_keep_blank_lines_in_declarations = 1 20 | ij_kotlin_keep_blank_lines_in_code = 1 21 | ij_kotlin_keep_blank_lines_before_right_brace = 0 22 | 23 | # optional but recommended 24 | ij_kotlin_align_multiline_parameters = false 25 | 26 | # optional but recommended 27 | ij_continuation_indent_size = 4 28 | 29 | # noinspection EditorConfigKeyCorrectness 30 | ktlint_disabled_rules = filename 31 | 32 | ij_kotlin_allow_trailing_comma = false 33 | ij_kotlin_allow_trailing_comma_on_call_site = false 34 | 35 | [*.md] 36 | 37 | max_line_length = off 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /build -------------------------------------------------------------------------------- /.idea/$CACHE_FILE$: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | compose-counting-grid -------------------------------------------------------------------------------- /.idea/dictionaries/oliver.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | composables 5 | distrib 6 | gufa 7 | kotlinx 8 | lerp 9 | nontrapping 10 | pacman 11 | skiko 12 | websockets 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 43 | -------------------------------------------------------------------------------- /.idea/jsLibraryMappings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/ktlint-plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DISTRACT_FREE 5 | 6 | -------------------------------------------------------------------------------- /.idea/markdown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 37 | 38 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### Compose Counting Grid 2 | 3 | A simple application to check **Compose for Desktop** and **Compose for Web (Canvas)** drawing speeds when drawing grids (or tables) with larger numbers of cells. 4 | 5 | #### Initial Scene 6 | 7 |

8 | Initial Scene 9 |

10 | 11 | #### Desktop with Recomposition Highlighting 12 | 13 |

14 | Desktop with Highlighting 15 |

16 | 17 | #### Desktop High-Frequency Update (Top Row Only) 18 | 19 | * This animated GIF ⚠️ **not suitable for persons with photosensitive epilepsy** ⚠️ demonstrates increasing FPS as the window shrinks: [Animation with high-frequency updates](docs/top-row-only-updates-resizing.gif). 20 | 21 | > This effect appears with the desktop application, not the web application. 22 | 23 | #### How It Operates 24 | 25 | Given a grid of cells: Choose a random cell. Increase its single-digit count. Repeat. 26 | 27 | Unless pausing is enabled, updates will be drawn as fast as possible. The desktop application will even go beyond your display's vsync frequency (which Compose/Skia normally would not do, as it makes no sense other than to check the speed). 28 | 29 | #### How To Build And Run 30 | 31 | JVM desktop application: `./gradlew runRelease` 32 | 33 | Js browser application: `./gradlew -Dapplication.useJs=true jsBrowserProductionRun` (requires some patience for bundles to load) 34 | 35 | Wasm browser application: `./gradlew wasmJsBrowserProductionRun` (requires some patience for bundles to load) 36 | 37 | * If you'd like Wasm even faster, try aggressive optimization: `./gradlew -Dapplication.optimize=true wasmJsBrowserProductionRun` 38 | 39 | #### What To Try 40 | 41 | * Try everything without animations first. 42 | * Resize the window so that only the top row of counters is visible. 43 | * Highlight re-compositions. 44 | * Toggle "Force top-level recomposition". 45 | * Browser: Compare Js and Wasm speed and download file size differences (Skiko size will not change). 46 | 47 | #### Remarks 48 | 49 | * This application does not simulate any real-world scenario as it uses a very simple layout with fixed-size cells. 50 | * Compose for Web on Js/Canvas is experimental and might be deprecated at some point, favoring the upcoming WebAssembly target. However, it is useful in the transition period until full library support is available for the WebAssembly target. 51 | * Compose for Web on WebAssembly is experimental, but most probably the future. It currently requires carefully selected libraries, a specific Compose plugin and some hack to bridge an implementation gap regarding Node module imports. 52 | 53 | #### Changes 54 | 55 | ##### 2024-03-30 56 | 57 | * Migrated to 1.9.23, Compose 1.6.1 58 | 59 | ##### 2023-11-07 60 | 61 | * Unified UI across platforms, using Compose scrollbars and `MaterialTheme` everywhere. 62 | * Added aggressive Wasm optimization via `-Dapplication.optimize=true`, increasing speed by another 20%, reducing `app.wasm` size by 24% (to 473 KB). In certain scenarios (50x50 grid, default configuration), K/Wasm on Chrome now seems to be at 84% of desktop/JVM performance (even if the optimization is applied to app+Compose only, not to Skiko). 63 | 64 | ##### 2023-11-06 65 | 66 | * Added Wasm support via Compose 1.5.10-dev-wasm02. 67 | * Web/Wasm FPS now at about 200% of Web/Js FPS (use larger grids and/or animations to check, otherwise you'll hit the display frame rate ceiling). 68 | * Web/Wasm compressed transfer size for `app.wasm` (formerly `frontendWasm.wasm`) now at 623 kB. Total transfer size still at 4.0 MB (Web/Wasm) vs. 3.8 MB (Web/Js) with `skiko.wasm` being the largest contributor as before (3.2 MB). 69 | 70 | ##### 2023-11-01 71 | 72 | * Migrated to Kotlin 1.9.20, Compose 1.5.10 73 | * Wasm not ready yet, waiting for [KT-62872 – K/Wasm: (re)publish compose-mp for wasm-js with 1.9.20-RC2 (or newer if available)](https://youtrack.jetbrains.com/issue/KT-62872) 74 | * Replaced `BrowserViewportWindow` with `CanvasBasedWindow` (now a fully featured replacement for Js and Wasm-Js, part of Compose Multiplatform since 1.5.0-beta02) 75 | 76 | ##### 2023-07-30 77 | 78 | * Web/Js: `BrowserViewportWindow` avoids adding multiple event listeners whenever the window is resized. 79 | * Web/Js: Use Compose Multiplatform 1.5.0-beta01. 80 | 81 | ##### 2023-07-12 82 | 83 | * Web/Js: `BrowserViewportWindow` no longer crashes when resizing the window on Kotlin 1.9.0. 84 | * Web/Wasm: Enabled optimization with binaryen, shrinking the (compressed) transfer size of `frontendWasm.wasm` from 1.2 MB to 612 kB, both in addition to Skiko's transfer size of 3.2 MB. Total transfer size with optimized Wasm is now 4.0 MB (with Web/Js at 3.8 MB). 85 | * Web/Wasm: Fixed node module import hack. 86 | 87 | ##### 2023-07-11 88 | 89 | * Migrated to Kotlin 1.9.0 90 | * Web/Wasm: Added a full WebAssembly target with Wasm-compiled frontend code (in addition to Skiko/Skia, which were always Wasm-compilations). 91 | * Web/Js: With Kotlin 1.9.0, BrowserViewportWindow no longer reacts to resizing as the Kotlin/Js target now refuses access to non-public symbols. 92 | * Removed non-current documentation. 93 | 94 | ##### 2022-09-16 95 | 96 | * Added options to speed up animation switching: 97 | * Enable grid generations 98 | * Enable BoxWithConstraints per row 99 | * Updated timing results 100 | 101 | ##### 2022-09-12 102 | 103 | * Added instrumentation to analyze UI responsiveness when switching animations: 104 | * Added console logging with timestamps. 105 | * Added configuration settings: 106 | * Draw cell text 107 | * Track drawing 108 | * Hide grid temporarily when switching animations 109 | * Updated observations in README. 110 | * Added animation switching analysis in `docs/SwitchingAnimationVariants.md`. 111 | * Refactored GridScene to avoid unnecessary grid recompositions when controls update. 112 | 113 | ##### 2022-09-02 114 | 115 | * Redesigned Web/Canvas integration thanks to @langara 116 | 117 | ##### 2022-08-23 118 | 119 | * Added options to force row-level and cell-level recompositions. Revised conclusions regarding recomposition and layout impact. 120 | * Improved UI responsiveness when toggling options for recomposition highlighting and animations. 121 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl 2 | import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig 3 | 4 | plugins { 5 | alias(libs.plugins.org.jetbrains.kotlin.multiplatform) 6 | alias(libs.plugins.org.jetbrains.compose) 7 | } 8 | 9 | buildscript { 10 | dependencies { 11 | classpath(libs.org.jetbrains.kotlinx.atomicfu.gradle.plugin) 12 | } 13 | } 14 | 15 | apply(plugin = "kotlinx-atomicfu") 16 | 17 | group = "com.example" 18 | version = "0.0-SNAPSHOT" 19 | 20 | val useJs = System.getProperty("application.useJs") == "true" 21 | val optimizeAggressively = System.getProperty("application.optimize") == "true" 22 | 23 | kotlin { 24 | val jdkVersion = project.property("local.jdk.version").toString().toInt() 25 | 26 | jvmToolchain(jdkVersion) 27 | 28 | jvm { 29 | compilations.configureEach { 30 | kotlinOptions.freeCompilerArgs += listOf("-Xjdk-release=$jdkVersion") 31 | } 32 | } 33 | 34 | jvm { 35 | withJava() 36 | } 37 | 38 | js { 39 | moduleName = "app" 40 | binaries.executable() 41 | browser { 42 | useCommonJs() 43 | commonWebpackConfig { 44 | outputFileName = "$moduleName.js" 45 | } 46 | } 47 | } 48 | 49 | @OptIn(ExperimentalWasmDsl::class) 50 | wasmJs { 51 | moduleName = "app" 52 | binaries.executable() 53 | browser { 54 | commonWebpackConfig { 55 | outputFileName = "$moduleName.js" 56 | devServer = 57 | (devServer ?: KotlinWebpackConfig.DevServer()).copy( 58 | port = 8081, 59 | static = 60 | (devServer?.static ?: mutableListOf()).apply { 61 | // Serve sources to debug inside browser 62 | add(project.rootDir.path) 63 | } 64 | ) 65 | } 66 | } 67 | 68 | applyBinaryen { 69 | binaryenArgs = 70 | mutableListOf( 71 | "--enable-nontrapping-float-to-int", 72 | "--enable-gc", 73 | "--enable-reference-types", 74 | "--enable-exception-handling", 75 | "--enable-bulk-memory", 76 | "--inline-functions-with-loops", 77 | "--traps-never-happen", 78 | "--fast-math" 79 | ) 80 | 81 | binaryenArgs += 82 | if (optimizeAggressively) { 83 | listOf( 84 | "--closed-world", 85 | // "--metrics", 86 | "-O3", 87 | "--gufa", // "--metrics", 88 | "-O3", 89 | "--gufa", // "--metrics", 90 | "-O3", 91 | "--gufa" // "--metrics" 92 | ) 93 | } else { 94 | listOf( 95 | "-O1", 96 | "-c" // Run passes while binary size decreases 97 | ) 98 | } 99 | } 100 | } 101 | 102 | sourceSets { 103 | all { 104 | languageSettings { 105 | progressiveMode = true 106 | optIn("kotlin.RequiresOptIn") 107 | } 108 | } 109 | 110 | val commonMain by getting { 111 | dependencies { 112 | implementation(compose.ui) 113 | implementation(compose.foundation) 114 | implementation(compose.material) 115 | implementation(libs.org.jetbrains.kotlinx.atomicfu) 116 | implementation(libs.org.jetbrains.kotlinx.kotlinx.datetime) 117 | } 118 | } 119 | 120 | val jvmMain by getting { 121 | dependencies { 122 | implementation(compose.desktop.currentOs) 123 | } 124 | } 125 | 126 | val jsMain by getting { 127 | dependencies { 128 | @Suppress("DEPRECATION") 129 | implementation(compose.web.core) // Required for Compose Web/Canvas on JS 130 | } 131 | } 132 | } 133 | } 134 | 135 | compose { 136 | providers.gradleProperty("local.compose.kotlinCompilerPlugin").orNull?.let { composeKotlinCompilerPlugin -> 137 | kotlinCompilerPlugin.set(composeKotlinCompilerPlugin) 138 | val kotlinVersion = "${libs.plugins.org.jetbrains.kotlin.multiplatform.get().version}" 139 | kotlinCompilerPluginArgs.add("suppressKotlinVersionCompatibilityCheck=$kotlinVersion") 140 | } 141 | // kotlinCompilerPluginArgs.add("reportsDestination=${layout.buildDirectory.file("reports")}") 142 | 143 | desktop.application.mainClass = "MainKt" 144 | 145 | experimental { 146 | web.application {} 147 | } 148 | } 149 | 150 | // Hack to use kotlinx-datetime with Wasm 151 | rootProject.tasks { 152 | val hackNodeModuleImports by registering(Copy::class) { 153 | group = "kotlin browser" 154 | mustRunAfter("kotlinNpmInstall") 155 | from(layout.buildDirectory.file("js/node_modules/@js-joda")) 156 | into(layout.buildDirectory.file("js/packages/app/kotlin/@js-joda")) 157 | } 158 | for (dependent in listOf("wasmJsBrowserProductionRun", "wasmJsBrowserDevelopmentRun")) { 159 | named(dependent) { 160 | dependsOn(hackNodeModuleImports) 161 | } 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /docs/desktop-highlighting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OliverO2/compose-counting-grid/ce62388d9c7b7795e8d862baadfd5d50d14a4a49/docs/desktop-highlighting.png -------------------------------------------------------------------------------- /docs/initial-scene.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OliverO2/compose-counting-grid/ce62388d9c7b7795e8d862baadfd5d50d14a4a49/docs/initial-scene.png -------------------------------------------------------------------------------- /docs/top-row-only-updates-resizing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OliverO2/compose-counting-grid/ce62388d9c7b7795e8d862baadfd5d50d14a4a49/docs/top-row-only-updates-resizing.gif -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # suppress inspection "UnusedProperty" for whole file 2 | # 3 | # https://docs.gradle.org/current/userguide/build_cache.html 4 | org.gradle.caching=true 5 | # https://docs.gradle.org/current/userguide/configuration_cache.html 6 | # org.gradle.unsafe.configuration-cache=true 7 | # https://docs.gradle.org/current/userguide/performance.html#parallel_execution 8 | org.gradle.parallel=true 9 | # WORKAROUND java.lang.OutOfMemoryError: Metaspace (similar: https://github.com/Kotlin/dokka/issues/1405) 10 | org.gradle.jvmargs=-XX:MaxMetaspaceSize=512m 11 | # org.gradle.jvmargs=-XX:+UseParallelGC # tune as needed; https://developer.android.com/studio/build/optimize-your-build#configure-the-jvm-garbage-collector 12 | # 13 | # JDK for Kotlin and Java Toolchain - WORKAROUND: atomicfu fails with JDK > 11 14 | local.jdk.version=11 15 | # 16 | kotlin.code.style=official 17 | kotlin.jvm.target.validation.mode=error 18 | # kotlin.daemon.jvmargs= # tune as needed 19 | local.kotlin.optIn=kotlin.RequiresOptIn,kotlin.contracts.ExperimentalContracts,kotlin.ExperimentalUnsignedTypes,kotlin.time.ExperimentalTime,kotlinx.serialization.ExperimentalSerializationApi,kotlinx.coroutines.ExperimentalCoroutinesApi 20 | # 21 | # Override "ERROR: Compose targets '[jscanvas]' are experimental and may have bugs!" 22 | org.jetbrains.compose.experimental.jscanvas.enabled=true 23 | # Override "ERROR: Compose targets '[wasm]' are experimental and may have bugs!" 24 | org.jetbrains.compose.experimental.wasm.enabled=true 25 | # 26 | # Recommended for Kotlin >= 1.7.20 27 | kotlinx.atomicfu.enableJvmIrTransformation=true 28 | kotlinx.atomicfu.enableNativeIrTransformation=true 29 | kotlinx.atomicfu.enableJsIrTransformation=true 30 | # 31 | # If a Compose Multiplatform release compatible with the intended Kotlin compiler version is missing, see 32 | # - experimental compiler releases: 33 | # https://maven.pkg.jetbrains.space/public/p/compose/dev/org/jetbrains/compose/compiler/compiler/ 34 | # - or instructions on how to use a Jetpack Compose compiler (may not support K/JS properly): 35 | # https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compatibility-and-versioning.html 36 | # 37 | # Compose multiplatform example: 38 | # local.compose.kotlinCompilerPlugin=org.jetbrains.compose.compiler:compiler:1.4.7.1-beta 39 | # local.compose.kotlinCompilerPlugin=org.jetbrains.compose.compiler:compiler:1.5.11-kt-2.0.0-Beta5 40 | # Jetpack Compose example: 41 | # local.compose.kotlinCompilerPlugin=androidx.compose.compiler:compiler:1.4.7-dev-k1.9.0-Beta-bb7dc8b44eb 42 | -------------------------------------------------------------------------------- /gradle/libs.versions.toml: -------------------------------------------------------------------------------- 1 | ## Generated by $ ./gradlew refreshVersionsCatalog 2 | 3 | [versions] 4 | 5 | org-jetbrains-compose = "1.6.1" 6 | 7 | org-jetbrains-kotlin = "1.9.23" 8 | 9 | org-jetbrains-kotlinx-atomicfu = "0.23.2" 10 | 11 | org-jetbrains-kotlinx-kotlinx-coroutines = "1.8.0" 12 | 13 | [libraries] 14 | 15 | org-jetbrains-kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "org-jetbrains-kotlinx-atomicfu" } 16 | org-jetbrains-kotlinx-atomicfu-gradle-plugin = { module = "org.jetbrains.kotlinx:atomicfu-gradle-plugin", version.ref = "org-jetbrains-kotlinx-atomicfu" } 17 | 18 | org-jetbrains-kotlinx-kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "org-jetbrains-kotlinx-kotlinx-coroutines" } 19 | 20 | org-jetbrains-kotlinx-kotlinx-datetime = "org.jetbrains.kotlinx:kotlinx-datetime:0.5.0" 21 | 22 | [plugins] 23 | 24 | org-jetbrains-compose = { id = "org.jetbrains.compose", version.ref = "org-jetbrains-compose" } 25 | 26 | org-jetbrains-kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "org-jetbrains-kotlin" } 27 | 28 | org-jetbrains-kotlinx-atomicfu = { id = "kotlinx-atomicfu", version.ref = "org-jetbrains-kotlinx-atomicfu" } 29 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OliverO2/compose-counting-grid/ce62388d9c7b7795e8d862baadfd5d50d14a4a49/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Copyright © 2015-2021 the original authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | # 21 | # Gradle start up script for POSIX generated by Gradle. 22 | # 23 | # Important for running: 24 | # 25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is 26 | # noncompliant, but you have some other compliant shell such as ksh or 27 | # bash, then to run this script, type that shell name before the whole 28 | # command line, like: 29 | # 30 | # ksh Gradle 31 | # 32 | # Busybox and similar reduced shells will NOT work, because this script 33 | # requires all of these POSIX shell features: 34 | # * functions; 35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», 36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; 37 | # * compound commands having a testable exit status, especially «case»; 38 | # * various built-in commands including «command», «set», and «ulimit». 39 | # 40 | # Important for patching: 41 | # 42 | # (2) This script targets any POSIX shell, so it avoids extensions provided 43 | # by Bash, Ksh, etc; in particular arrays are avoided. 44 | # 45 | # The "traditional" practice of packing multiple parameters into a 46 | # space-separated string is a well documented source of bugs and security 47 | # problems, so this is (mostly) avoided, by progressively accumulating 48 | # options in "$@", and eventually passing that to Java. 49 | # 50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, 51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; 52 | # see the in-line comments for details. 53 | # 54 | # There are tweaks for specific operating systems such as AIX, CygWin, 55 | # Darwin, MinGW, and NonStop. 56 | # 57 | # (3) This script is generated from the Groovy template 58 | # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt 59 | # within the Gradle project. 60 | # 61 | # You can find Gradle at https://github.com/gradle/gradle/. 62 | # 63 | ############################################################################## 64 | 65 | # Attempt to set APP_HOME 66 | 67 | # Resolve links: $0 may be a link 68 | app_path=$0 69 | 70 | # Need this for daisy-chained symlinks. 71 | while 72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path 73 | [ -h "$app_path" ] 74 | do 75 | ls=$( ls -ld "$app_path" ) 76 | link=${ls#*' -> '} 77 | case $link in #( 78 | /*) app_path=$link ;; #( 79 | *) app_path=$APP_HOME$link ;; 80 | esac 81 | done 82 | 83 | # This is normally unused 84 | # shellcheck disable=SC2034 85 | APP_BASE_NAME=${0##*/} 86 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) 87 | APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit 88 | 89 | # Use the maximum available, or set MAX_FD != -1 to use that value. 90 | MAX_FD=maximum 91 | 92 | warn () { 93 | echo "$*" 94 | } >&2 95 | 96 | die () { 97 | echo 98 | echo "$*" 99 | echo 100 | exit 1 101 | } >&2 102 | 103 | # OS specific support (must be 'true' or 'false'). 104 | cygwin=false 105 | msys=false 106 | darwin=false 107 | nonstop=false 108 | case "$( uname )" in #( 109 | CYGWIN* ) cygwin=true ;; #( 110 | Darwin* ) darwin=true ;; #( 111 | MSYS* | MINGW* ) msys=true ;; #( 112 | NONSTOP* ) nonstop=true ;; 113 | esac 114 | 115 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 116 | 117 | 118 | # Determine the Java command to use to start the JVM. 119 | if [ -n "$JAVA_HOME" ] ; then 120 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 121 | # IBM's JDK on AIX uses strange locations for the executables 122 | JAVACMD=$JAVA_HOME/jre/sh/java 123 | else 124 | JAVACMD=$JAVA_HOME/bin/java 125 | fi 126 | if [ ! -x "$JAVACMD" ] ; then 127 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 128 | 129 | Please set the JAVA_HOME variable in your environment to match the 130 | location of your Java installation." 131 | fi 132 | else 133 | JAVACMD=java 134 | if ! command -v java >/dev/null 2>&1 135 | then 136 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 137 | 138 | Please set the JAVA_HOME variable in your environment to match the 139 | location of your Java installation." 140 | fi 141 | fi 142 | 143 | # Increase the maximum file descriptors if we can. 144 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then 145 | case $MAX_FD in #( 146 | max*) 147 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. 148 | # shellcheck disable=SC2039,SC3045 149 | MAX_FD=$( ulimit -H -n ) || 150 | warn "Could not query maximum file descriptor limit" 151 | esac 152 | case $MAX_FD in #( 153 | '' | soft) :;; #( 154 | *) 155 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. 156 | # shellcheck disable=SC2039,SC3045 157 | ulimit -n "$MAX_FD" || 158 | warn "Could not set maximum file descriptor limit to $MAX_FD" 159 | esac 160 | fi 161 | 162 | # Collect all arguments for the java command, stacking in reverse order: 163 | # * args from the command line 164 | # * the main class name 165 | # * -classpath 166 | # * -D...appname settings 167 | # * --module-path (only if needed) 168 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. 169 | 170 | # For Cygwin or MSYS, switch paths to Windows format before running java 171 | if "$cygwin" || "$msys" ; then 172 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) 173 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) 174 | 175 | JAVACMD=$( cygpath --unix "$JAVACMD" ) 176 | 177 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 178 | for arg do 179 | if 180 | case $arg in #( 181 | -*) false ;; # don't mess with options #( 182 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath 183 | [ -e "$t" ] ;; #( 184 | *) false ;; 185 | esac 186 | then 187 | arg=$( cygpath --path --ignore --mixed "$arg" ) 188 | fi 189 | # Roll the args list around exactly as many times as the number of 190 | # args, so each arg winds up back in the position where it started, but 191 | # possibly modified. 192 | # 193 | # NB: a `for` loop captures its iteration list before it begins, so 194 | # changing the positional parameters here affects neither the number of 195 | # iterations, nor the values presented in `arg`. 196 | shift # remove old arg 197 | set -- "$@" "$arg" # push replacement arg 198 | done 199 | fi 200 | 201 | 202 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 203 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 204 | 205 | # Collect all arguments for the java command: 206 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, 207 | # and any embedded shellness will be escaped. 208 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be 209 | # treated as '${Hostname}' itself on the command line. 210 | 211 | set -- \ 212 | "-Dorg.gradle.appname=$APP_BASE_NAME" \ 213 | -classpath "$CLASSPATH" \ 214 | org.gradle.wrapper.GradleWrapperMain \ 215 | "$@" 216 | 217 | # Stop when "xargs" is not available. 218 | if ! command -v xargs >/dev/null 2>&1 219 | then 220 | die "xargs is not available" 221 | fi 222 | 223 | # Use "xargs" to parse quoted args. 224 | # 225 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. 226 | # 227 | # In Bash we could simply go: 228 | # 229 | # readarray ARGS < <( xargs -n1 <<<"$var" ) && 230 | # set -- "${ARGS[@]}" "$@" 231 | # 232 | # but POSIX shell has neither arrays nor command substitution, so instead we 233 | # post-process each arg (as a line of input to sed) to backslash-escape any 234 | # character that might be a shell metacharacter, then use eval to reverse 235 | # that process (while maintaining the separation between arguments), and wrap 236 | # the whole thing up as a single "set" statement. 237 | # 238 | # This will of course break if any of these variables contains a newline or 239 | # an unmatched quote. 240 | # 241 | 242 | eval "set -- $( 243 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | 244 | xargs -n1 | 245 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | 246 | tr '\n' ' ' 247 | )" '"$@"' 248 | 249 | exec "$JAVACMD" "$@" 250 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%"=="" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%"=="" set DIRNAME=. 29 | @rem This is normally unused 30 | set APP_BASE_NAME=%~n0 31 | set APP_HOME=%DIRNAME% 32 | 33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 35 | 36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 38 | 39 | @rem Find java.exe 40 | if defined JAVA_HOME goto findJavaFromJavaHome 41 | 42 | set JAVA_EXE=java.exe 43 | %JAVA_EXE% -version >NUL 2>&1 44 | if %ERRORLEVEL% equ 0 goto execute 45 | 46 | echo. 47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 48 | echo. 49 | echo Please set the JAVA_HOME variable in your environment to match the 50 | echo location of your Java installation. 51 | 52 | goto fail 53 | 54 | :findJavaFromJavaHome 55 | set JAVA_HOME=%JAVA_HOME:"=% 56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 57 | 58 | if exist "%JAVA_EXE%" goto execute 59 | 60 | echo. 61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 62 | echo. 63 | echo Please set the JAVA_HOME variable in your environment to match the 64 | echo location of your Java installation. 65 | 66 | goto fail 67 | 68 | :execute 69 | @rem Setup the command line 70 | 71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 72 | 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if %ERRORLEVEL% equ 0 goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | set EXIT_CODE=%ERRORLEVEL% 85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 87 | exit /b %EXIT_CODE% 88 | 89 | :mainEnd 90 | if "%OS%"=="Windows_NT" endlocal 91 | 92 | :omega 93 | -------------------------------------------------------------------------------- /kotlin-js-store/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@colors/colors@1.5.0": 6 | version "1.5.0" 7 | resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" 8 | integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== 9 | 10 | "@discoveryjs/json-ext@^0.5.0": 11 | version "0.5.7" 12 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" 13 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== 14 | 15 | "@jridgewell/gen-mapping@^0.3.0": 16 | version "0.3.2" 17 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 18 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 19 | dependencies: 20 | "@jridgewell/set-array" "^1.0.1" 21 | "@jridgewell/sourcemap-codec" "^1.4.10" 22 | "@jridgewell/trace-mapping" "^0.3.9" 23 | 24 | "@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": 25 | version "3.1.0" 26 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 27 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 28 | 29 | "@jridgewell/set-array@^1.0.1": 30 | version "1.1.2" 31 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 32 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 33 | 34 | "@jridgewell/source-map@^0.3.3": 35 | version "0.3.5" 36 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" 37 | integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== 38 | dependencies: 39 | "@jridgewell/gen-mapping" "^0.3.0" 40 | "@jridgewell/trace-mapping" "^0.3.9" 41 | 42 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 43 | version "1.4.14" 44 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 45 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 46 | 47 | "@jridgewell/trace-mapping@^0.3.17": 48 | version "0.3.18" 49 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" 50 | integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== 51 | dependencies: 52 | "@jridgewell/resolve-uri" "3.1.0" 53 | "@jridgewell/sourcemap-codec" "1.4.14" 54 | 55 | "@jridgewell/trace-mapping@^0.3.9": 56 | version "0.3.15" 57 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" 58 | integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== 59 | dependencies: 60 | "@jridgewell/resolve-uri" "^3.0.3" 61 | "@jridgewell/sourcemap-codec" "^1.4.10" 62 | 63 | "@js-joda/core@3.2.0": 64 | version "3.2.0" 65 | resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273" 66 | integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg== 67 | 68 | "@leichtgewicht/ip-codec@^2.0.1": 69 | version "2.0.4" 70 | resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" 71 | integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== 72 | 73 | "@types/body-parser@*": 74 | version "1.19.2" 75 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" 76 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== 77 | dependencies: 78 | "@types/connect" "*" 79 | "@types/node" "*" 80 | 81 | "@types/bonjour@^3.5.9": 82 | version "3.5.10" 83 | resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" 84 | integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== 85 | dependencies: 86 | "@types/node" "*" 87 | 88 | "@types/component-emitter@^1.2.10": 89 | version "1.2.11" 90 | resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.11.tgz#50d47d42b347253817a39709fef03ce66a108506" 91 | integrity sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ== 92 | 93 | "@types/connect-history-api-fallback@^1.3.5": 94 | version "1.3.5" 95 | resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" 96 | integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== 97 | dependencies: 98 | "@types/express-serve-static-core" "*" 99 | "@types/node" "*" 100 | 101 | "@types/connect@*": 102 | version "3.4.35" 103 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 104 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 105 | dependencies: 106 | "@types/node" "*" 107 | 108 | "@types/cookie@^0.4.1": 109 | version "0.4.1" 110 | resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" 111 | integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== 112 | 113 | "@types/cors@^2.8.12": 114 | version "2.8.12" 115 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" 116 | integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== 117 | 118 | "@types/eslint-scope@^3.7.3": 119 | version "3.7.4" 120 | resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" 121 | integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== 122 | dependencies: 123 | "@types/eslint" "*" 124 | "@types/estree" "*" 125 | 126 | "@types/eslint@*": 127 | version "8.4.5" 128 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4" 129 | integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== 130 | dependencies: 131 | "@types/estree" "*" 132 | "@types/json-schema" "*" 133 | 134 | "@types/estree@*": 135 | version "1.0.0" 136 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" 137 | integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== 138 | 139 | "@types/estree@^1.0.0": 140 | version "1.0.1" 141 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" 142 | integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== 143 | 144 | "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": 145 | version "4.17.30" 146 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" 147 | integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== 148 | dependencies: 149 | "@types/node" "*" 150 | "@types/qs" "*" 151 | "@types/range-parser" "*" 152 | 153 | "@types/express@*", "@types/express@^4.17.13": 154 | version "4.17.13" 155 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" 156 | integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== 157 | dependencies: 158 | "@types/body-parser" "*" 159 | "@types/express-serve-static-core" "^4.17.18" 160 | "@types/qs" "*" 161 | "@types/serve-static" "*" 162 | 163 | "@types/http-proxy@^1.17.8": 164 | version "1.17.9" 165 | resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" 166 | integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== 167 | dependencies: 168 | "@types/node" "*" 169 | 170 | "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": 171 | version "7.0.11" 172 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 173 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 174 | 175 | "@types/mime@*": 176 | version "3.0.1" 177 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" 178 | integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== 179 | 180 | "@types/node@*", "@types/node@>=10.0.0": 181 | version "18.7.6" 182 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83" 183 | integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A== 184 | 185 | "@types/qs@*": 186 | version "6.9.7" 187 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 188 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 189 | 190 | "@types/range-parser@*": 191 | version "1.2.4" 192 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 193 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 194 | 195 | "@types/retry@0.12.0": 196 | version "0.12.0" 197 | resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" 198 | integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== 199 | 200 | "@types/serve-index@^1.9.1": 201 | version "1.9.1" 202 | resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" 203 | integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== 204 | dependencies: 205 | "@types/express" "*" 206 | 207 | "@types/serve-static@*", "@types/serve-static@^1.13.10": 208 | version "1.15.0" 209 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" 210 | integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== 211 | dependencies: 212 | "@types/mime" "*" 213 | "@types/node" "*" 214 | 215 | "@types/sockjs@^0.3.33": 216 | version "0.3.33" 217 | resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" 218 | integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== 219 | dependencies: 220 | "@types/node" "*" 221 | 222 | "@types/ws@^8.5.1": 223 | version "8.5.3" 224 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" 225 | integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== 226 | dependencies: 227 | "@types/node" "*" 228 | 229 | "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": 230 | version "1.11.6" 231 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" 232 | integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== 233 | dependencies: 234 | "@webassemblyjs/helper-numbers" "1.11.6" 235 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 236 | 237 | "@webassemblyjs/floating-point-hex-parser@1.11.6": 238 | version "1.11.6" 239 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" 240 | integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== 241 | 242 | "@webassemblyjs/helper-api-error@1.11.6": 243 | version "1.11.6" 244 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" 245 | integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== 246 | 247 | "@webassemblyjs/helper-buffer@1.11.6": 248 | version "1.11.6" 249 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" 250 | integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== 251 | 252 | "@webassemblyjs/helper-numbers@1.11.6": 253 | version "1.11.6" 254 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" 255 | integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== 256 | dependencies: 257 | "@webassemblyjs/floating-point-hex-parser" "1.11.6" 258 | "@webassemblyjs/helper-api-error" "1.11.6" 259 | "@xtuc/long" "4.2.2" 260 | 261 | "@webassemblyjs/helper-wasm-bytecode@1.11.6": 262 | version "1.11.6" 263 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" 264 | integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== 265 | 266 | "@webassemblyjs/helper-wasm-section@1.11.6": 267 | version "1.11.6" 268 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" 269 | integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== 270 | dependencies: 271 | "@webassemblyjs/ast" "1.11.6" 272 | "@webassemblyjs/helper-buffer" "1.11.6" 273 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 274 | "@webassemblyjs/wasm-gen" "1.11.6" 275 | 276 | "@webassemblyjs/ieee754@1.11.6": 277 | version "1.11.6" 278 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" 279 | integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== 280 | dependencies: 281 | "@xtuc/ieee754" "^1.2.0" 282 | 283 | "@webassemblyjs/leb128@1.11.6": 284 | version "1.11.6" 285 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" 286 | integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== 287 | dependencies: 288 | "@xtuc/long" "4.2.2" 289 | 290 | "@webassemblyjs/utf8@1.11.6": 291 | version "1.11.6" 292 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" 293 | integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== 294 | 295 | "@webassemblyjs/wasm-edit@^1.11.5": 296 | version "1.11.6" 297 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" 298 | integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== 299 | dependencies: 300 | "@webassemblyjs/ast" "1.11.6" 301 | "@webassemblyjs/helper-buffer" "1.11.6" 302 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 303 | "@webassemblyjs/helper-wasm-section" "1.11.6" 304 | "@webassemblyjs/wasm-gen" "1.11.6" 305 | "@webassemblyjs/wasm-opt" "1.11.6" 306 | "@webassemblyjs/wasm-parser" "1.11.6" 307 | "@webassemblyjs/wast-printer" "1.11.6" 308 | 309 | "@webassemblyjs/wasm-gen@1.11.6": 310 | version "1.11.6" 311 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" 312 | integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== 313 | dependencies: 314 | "@webassemblyjs/ast" "1.11.6" 315 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 316 | "@webassemblyjs/ieee754" "1.11.6" 317 | "@webassemblyjs/leb128" "1.11.6" 318 | "@webassemblyjs/utf8" "1.11.6" 319 | 320 | "@webassemblyjs/wasm-opt@1.11.6": 321 | version "1.11.6" 322 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" 323 | integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== 324 | dependencies: 325 | "@webassemblyjs/ast" "1.11.6" 326 | "@webassemblyjs/helper-buffer" "1.11.6" 327 | "@webassemblyjs/wasm-gen" "1.11.6" 328 | "@webassemblyjs/wasm-parser" "1.11.6" 329 | 330 | "@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": 331 | version "1.11.6" 332 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" 333 | integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== 334 | dependencies: 335 | "@webassemblyjs/ast" "1.11.6" 336 | "@webassemblyjs/helper-api-error" "1.11.6" 337 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6" 338 | "@webassemblyjs/ieee754" "1.11.6" 339 | "@webassemblyjs/leb128" "1.11.6" 340 | "@webassemblyjs/utf8" "1.11.6" 341 | 342 | "@webassemblyjs/wast-printer@1.11.6": 343 | version "1.11.6" 344 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" 345 | integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== 346 | dependencies: 347 | "@webassemblyjs/ast" "1.11.6" 348 | "@xtuc/long" "4.2.2" 349 | 350 | "@webpack-cli/configtest@^2.1.0": 351 | version "2.1.1" 352 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" 353 | integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== 354 | 355 | "@webpack-cli/info@^2.0.1": 356 | version "2.0.2" 357 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" 358 | integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== 359 | 360 | "@webpack-cli/serve@^2.0.3": 361 | version "2.0.5" 362 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" 363 | integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== 364 | 365 | "@xtuc/ieee754@^1.2.0": 366 | version "1.2.0" 367 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" 368 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 369 | 370 | "@xtuc/long@4.2.2": 371 | version "4.2.2" 372 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" 373 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 374 | 375 | abab@^2.0.6: 376 | version "2.0.6" 377 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" 378 | integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== 379 | 380 | accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: 381 | version "1.3.8" 382 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 383 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 384 | dependencies: 385 | mime-types "~2.1.34" 386 | negotiator "0.6.3" 387 | 388 | acorn-import-assertions@^1.7.6: 389 | version "1.8.0" 390 | resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" 391 | integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== 392 | 393 | acorn@^8.7.1: 394 | version "8.8.2" 395 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 396 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 397 | 398 | acorn@^8.8.2: 399 | version "8.10.0" 400 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" 401 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 402 | 403 | ajv-formats@^2.1.1: 404 | version "2.1.1" 405 | resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" 406 | integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== 407 | dependencies: 408 | ajv "^8.0.0" 409 | 410 | ajv-keywords@^3.5.2: 411 | version "3.5.2" 412 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" 413 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 414 | 415 | ajv-keywords@^5.0.0: 416 | version "5.1.0" 417 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" 418 | integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== 419 | dependencies: 420 | fast-deep-equal "^3.1.3" 421 | 422 | ajv@^6.12.5: 423 | version "6.12.6" 424 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 425 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 426 | dependencies: 427 | fast-deep-equal "^3.1.1" 428 | fast-json-stable-stringify "^2.0.0" 429 | json-schema-traverse "^0.4.1" 430 | uri-js "^4.2.2" 431 | 432 | ajv@^8.0.0, ajv@^8.8.0: 433 | version "8.11.0" 434 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" 435 | integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== 436 | dependencies: 437 | fast-deep-equal "^3.1.1" 438 | json-schema-traverse "^1.0.0" 439 | require-from-string "^2.0.2" 440 | uri-js "^4.2.2" 441 | 442 | ansi-colors@4.1.1: 443 | version "4.1.1" 444 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 445 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 446 | 447 | ansi-html-community@^0.0.8: 448 | version "0.0.8" 449 | resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" 450 | integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== 451 | 452 | ansi-regex@^5.0.1: 453 | version "5.0.1" 454 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 455 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 456 | 457 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 458 | version "4.3.0" 459 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 460 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 461 | dependencies: 462 | color-convert "^2.0.1" 463 | 464 | anymatch@~3.1.2: 465 | version "3.1.2" 466 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 467 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 468 | dependencies: 469 | normalize-path "^3.0.0" 470 | picomatch "^2.0.4" 471 | 472 | argparse@^2.0.1: 473 | version "2.0.1" 474 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 475 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 476 | 477 | array-flatten@1.1.1: 478 | version "1.1.1" 479 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 480 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 481 | 482 | array-flatten@^2.1.2: 483 | version "2.1.2" 484 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" 485 | integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== 486 | 487 | balanced-match@^1.0.0: 488 | version "1.0.2" 489 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 490 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 491 | 492 | base64id@2.0.0, base64id@~2.0.0: 493 | version "2.0.0" 494 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" 495 | integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== 496 | 497 | batch@0.6.1: 498 | version "0.6.1" 499 | resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" 500 | integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== 501 | 502 | binary-extensions@^2.0.0: 503 | version "2.2.0" 504 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 505 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 506 | 507 | body-parser@1.20.0, body-parser@^1.19.0: 508 | version "1.20.0" 509 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" 510 | integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== 511 | dependencies: 512 | bytes "3.1.2" 513 | content-type "~1.0.4" 514 | debug "2.6.9" 515 | depd "2.0.0" 516 | destroy "1.2.0" 517 | http-errors "2.0.0" 518 | iconv-lite "0.4.24" 519 | on-finished "2.4.1" 520 | qs "6.10.3" 521 | raw-body "2.5.1" 522 | type-is "~1.6.18" 523 | unpipe "1.0.0" 524 | 525 | bonjour-service@^1.0.11: 526 | version "1.0.13" 527 | resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1" 528 | integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== 529 | dependencies: 530 | array-flatten "^2.1.2" 531 | dns-equal "^1.0.0" 532 | fast-deep-equal "^3.1.3" 533 | multicast-dns "^7.2.5" 534 | 535 | brace-expansion@^1.1.7: 536 | version "1.1.11" 537 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 538 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 539 | dependencies: 540 | balanced-match "^1.0.0" 541 | concat-map "0.0.1" 542 | 543 | brace-expansion@^2.0.1: 544 | version "2.0.1" 545 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 546 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 547 | dependencies: 548 | balanced-match "^1.0.0" 549 | 550 | braces@^3.0.2, braces@~3.0.2: 551 | version "3.0.2" 552 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 553 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 554 | dependencies: 555 | fill-range "^7.0.1" 556 | 557 | browser-stdout@1.3.1: 558 | version "1.3.1" 559 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 560 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 561 | 562 | browserslist@^4.14.5: 563 | version "4.21.3" 564 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" 565 | integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== 566 | dependencies: 567 | caniuse-lite "^1.0.30001370" 568 | electron-to-chromium "^1.4.202" 569 | node-releases "^2.0.6" 570 | update-browserslist-db "^1.0.5" 571 | 572 | buffer-from@^1.0.0: 573 | version "1.1.2" 574 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 575 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 576 | 577 | bytes@3.0.0: 578 | version "3.0.0" 579 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 580 | integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== 581 | 582 | bytes@3.1.2: 583 | version "3.1.2" 584 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 585 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 586 | 587 | call-bind@^1.0.0: 588 | version "1.0.2" 589 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 590 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 591 | dependencies: 592 | function-bind "^1.1.1" 593 | get-intrinsic "^1.0.2" 594 | 595 | camelcase@^6.0.0: 596 | version "6.3.0" 597 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 598 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 599 | 600 | caniuse-lite@^1.0.30001370: 601 | version "1.0.30001378" 602 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz#3d2159bf5a8f9ca093275b0d3ecc717b00f27b67" 603 | integrity sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA== 604 | 605 | chalk@^4.1.0: 606 | version "4.1.2" 607 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 608 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 609 | dependencies: 610 | ansi-styles "^4.1.0" 611 | supports-color "^7.1.0" 612 | 613 | chokidar@3.5.3, chokidar@^3.5.1, chokidar@^3.5.3: 614 | version "3.5.3" 615 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 616 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 617 | dependencies: 618 | anymatch "~3.1.2" 619 | braces "~3.0.2" 620 | glob-parent "~5.1.2" 621 | is-binary-path "~2.1.0" 622 | is-glob "~4.0.1" 623 | normalize-path "~3.0.0" 624 | readdirp "~3.6.0" 625 | optionalDependencies: 626 | fsevents "~2.3.2" 627 | 628 | chrome-trace-event@^1.0.2: 629 | version "1.0.3" 630 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 631 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 632 | 633 | cliui@^7.0.2: 634 | version "7.0.4" 635 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 636 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 637 | dependencies: 638 | string-width "^4.2.0" 639 | strip-ansi "^6.0.0" 640 | wrap-ansi "^7.0.0" 641 | 642 | clone-deep@^4.0.1: 643 | version "4.0.1" 644 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" 645 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== 646 | dependencies: 647 | is-plain-object "^2.0.4" 648 | kind-of "^6.0.2" 649 | shallow-clone "^3.0.0" 650 | 651 | color-convert@^2.0.1: 652 | version "2.0.1" 653 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 654 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 655 | dependencies: 656 | color-name "~1.1.4" 657 | 658 | color-name@~1.1.4: 659 | version "1.1.4" 660 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 661 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 662 | 663 | colorette@^2.0.10, colorette@^2.0.14: 664 | version "2.0.19" 665 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 666 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 667 | 668 | commander@^10.0.1: 669 | version "10.0.1" 670 | resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" 671 | integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== 672 | 673 | commander@^2.20.0: 674 | version "2.20.3" 675 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 676 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 677 | 678 | component-emitter@~1.3.0: 679 | version "1.3.0" 680 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 681 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 682 | 683 | compressible@~2.0.16: 684 | version "2.0.18" 685 | resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" 686 | integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== 687 | dependencies: 688 | mime-db ">= 1.43.0 < 2" 689 | 690 | compression@^1.7.4: 691 | version "1.7.4" 692 | resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" 693 | integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== 694 | dependencies: 695 | accepts "~1.3.5" 696 | bytes "3.0.0" 697 | compressible "~2.0.16" 698 | debug "2.6.9" 699 | on-headers "~1.0.2" 700 | safe-buffer "5.1.2" 701 | vary "~1.1.2" 702 | 703 | concat-map@0.0.1: 704 | version "0.0.1" 705 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 706 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 707 | 708 | connect-history-api-fallback@^2.0.0: 709 | version "2.0.0" 710 | resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" 711 | integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== 712 | 713 | connect@^3.7.0: 714 | version "3.7.0" 715 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" 716 | integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== 717 | dependencies: 718 | debug "2.6.9" 719 | finalhandler "1.1.2" 720 | parseurl "~1.3.3" 721 | utils-merge "1.0.1" 722 | 723 | content-disposition@0.5.4: 724 | version "0.5.4" 725 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 726 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 727 | dependencies: 728 | safe-buffer "5.2.1" 729 | 730 | content-type@~1.0.4: 731 | version "1.0.4" 732 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 733 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 734 | 735 | cookie-signature@1.0.6: 736 | version "1.0.6" 737 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 738 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 739 | 740 | cookie@0.5.0: 741 | version "0.5.0" 742 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" 743 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 744 | 745 | cookie@~0.4.1: 746 | version "0.4.2" 747 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" 748 | integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== 749 | 750 | core-util-is@~1.0.0: 751 | version "1.0.3" 752 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" 753 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 754 | 755 | cors@~2.8.5: 756 | version "2.8.5" 757 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 758 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 759 | dependencies: 760 | object-assign "^4" 761 | vary "^1" 762 | 763 | cross-spawn@^7.0.3: 764 | version "7.0.3" 765 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 766 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 767 | dependencies: 768 | path-key "^3.1.0" 769 | shebang-command "^2.0.0" 770 | which "^2.0.1" 771 | 772 | custom-event@~1.0.0: 773 | version "1.0.1" 774 | resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" 775 | integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== 776 | 777 | date-format@^4.0.13: 778 | version "4.0.13" 779 | resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.13.tgz#87c3aab3a4f6f37582c5f5f63692d2956fa67890" 780 | integrity sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ== 781 | 782 | debug@2.6.9: 783 | version "2.6.9" 784 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 785 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 786 | dependencies: 787 | ms "2.0.0" 788 | 789 | debug@4.3.4, debug@^4.1.0, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: 790 | version "4.3.4" 791 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 792 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 793 | dependencies: 794 | ms "2.1.2" 795 | 796 | decamelize@^4.0.0: 797 | version "4.0.0" 798 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 799 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 800 | 801 | default-gateway@^6.0.3: 802 | version "6.0.3" 803 | resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" 804 | integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== 805 | dependencies: 806 | execa "^5.0.0" 807 | 808 | define-lazy-prop@^2.0.0: 809 | version "2.0.0" 810 | resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" 811 | integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== 812 | 813 | depd@2.0.0: 814 | version "2.0.0" 815 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 816 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 817 | 818 | depd@~1.1.2: 819 | version "1.1.2" 820 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 821 | integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== 822 | 823 | destroy@1.2.0: 824 | version "1.2.0" 825 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 826 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 827 | 828 | detect-node@^2.0.4: 829 | version "2.1.0" 830 | resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" 831 | integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== 832 | 833 | di@^0.0.1: 834 | version "0.0.1" 835 | resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" 836 | integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== 837 | 838 | diff@5.0.0: 839 | version "5.0.0" 840 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 841 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 842 | 843 | dns-equal@^1.0.0: 844 | version "1.0.0" 845 | resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" 846 | integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== 847 | 848 | dns-packet@^5.2.2: 849 | version "5.4.0" 850 | resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" 851 | integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== 852 | dependencies: 853 | "@leichtgewicht/ip-codec" "^2.0.1" 854 | 855 | dom-serialize@^2.2.1: 856 | version "2.2.1" 857 | resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" 858 | integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== 859 | dependencies: 860 | custom-event "~1.0.0" 861 | ent "~2.2.0" 862 | extend "^3.0.0" 863 | void-elements "^2.0.0" 864 | 865 | ee-first@1.1.1: 866 | version "1.1.1" 867 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 868 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 869 | 870 | electron-to-chromium@^1.4.202: 871 | version "1.4.224" 872 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.224.tgz#ecf2eed395cfedcbbe634658ccc4b457f7b254c3" 873 | integrity sha512-dOujC5Yzj0nOVE23iD5HKqrRSDj2SD7RazpZS/b/WX85MtO6/LzKDF4TlYZTBteB+7fvSg5JpWh0sN7fImNF8w== 874 | 875 | emoji-regex@^8.0.0: 876 | version "8.0.0" 877 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 878 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 879 | 880 | encodeurl@~1.0.2: 881 | version "1.0.2" 882 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 883 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 884 | 885 | engine.io-parser@~5.0.3: 886 | version "5.0.4" 887 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" 888 | integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== 889 | 890 | engine.io@~6.2.0: 891 | version "6.2.0" 892 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.0.tgz#003bec48f6815926f2b1b17873e576acd54f41d0" 893 | integrity sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg== 894 | dependencies: 895 | "@types/cookie" "^0.4.1" 896 | "@types/cors" "^2.8.12" 897 | "@types/node" ">=10.0.0" 898 | accepts "~1.3.4" 899 | base64id "2.0.0" 900 | cookie "~0.4.1" 901 | cors "~2.8.5" 902 | debug "~4.3.1" 903 | engine.io-parser "~5.0.3" 904 | ws "~8.2.3" 905 | 906 | enhanced-resolve@^5.13.0: 907 | version "5.15.0" 908 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" 909 | integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== 910 | dependencies: 911 | graceful-fs "^4.2.4" 912 | tapable "^2.2.0" 913 | 914 | ent@~2.2.0: 915 | version "2.2.0" 916 | resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" 917 | integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== 918 | 919 | envinfo@^7.7.3: 920 | version "7.8.1" 921 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" 922 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== 923 | 924 | es-module-lexer@^1.2.1: 925 | version "1.3.0" 926 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" 927 | integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== 928 | 929 | escalade@^3.1.1: 930 | version "3.1.1" 931 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 932 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 933 | 934 | escape-html@~1.0.3: 935 | version "1.0.3" 936 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 937 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 938 | 939 | escape-string-regexp@4.0.0: 940 | version "4.0.0" 941 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 942 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 943 | 944 | eslint-scope@5.1.1: 945 | version "5.1.1" 946 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 947 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 948 | dependencies: 949 | esrecurse "^4.3.0" 950 | estraverse "^4.1.1" 951 | 952 | esrecurse@^4.3.0: 953 | version "4.3.0" 954 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 955 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 956 | dependencies: 957 | estraverse "^5.2.0" 958 | 959 | estraverse@^4.1.1: 960 | version "4.3.0" 961 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 962 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 963 | 964 | estraverse@^5.2.0: 965 | version "5.3.0" 966 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 967 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 968 | 969 | etag@~1.8.1: 970 | version "1.8.1" 971 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 972 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 973 | 974 | eventemitter3@^4.0.0: 975 | version "4.0.7" 976 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 977 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 978 | 979 | events@^3.2.0: 980 | version "3.3.0" 981 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 982 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 983 | 984 | execa@^5.0.0: 985 | version "5.1.1" 986 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 987 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 988 | dependencies: 989 | cross-spawn "^7.0.3" 990 | get-stream "^6.0.0" 991 | human-signals "^2.1.0" 992 | is-stream "^2.0.0" 993 | merge-stream "^2.0.0" 994 | npm-run-path "^4.0.1" 995 | onetime "^5.1.2" 996 | signal-exit "^3.0.3" 997 | strip-final-newline "^2.0.0" 998 | 999 | express@^4.17.3: 1000 | version "4.18.1" 1001 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" 1002 | integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== 1003 | dependencies: 1004 | accepts "~1.3.8" 1005 | array-flatten "1.1.1" 1006 | body-parser "1.20.0" 1007 | content-disposition "0.5.4" 1008 | content-type "~1.0.4" 1009 | cookie "0.5.0" 1010 | cookie-signature "1.0.6" 1011 | debug "2.6.9" 1012 | depd "2.0.0" 1013 | encodeurl "~1.0.2" 1014 | escape-html "~1.0.3" 1015 | etag "~1.8.1" 1016 | finalhandler "1.2.0" 1017 | fresh "0.5.2" 1018 | http-errors "2.0.0" 1019 | merge-descriptors "1.0.1" 1020 | methods "~1.1.2" 1021 | on-finished "2.4.1" 1022 | parseurl "~1.3.3" 1023 | path-to-regexp "0.1.7" 1024 | proxy-addr "~2.0.7" 1025 | qs "6.10.3" 1026 | range-parser "~1.2.1" 1027 | safe-buffer "5.2.1" 1028 | send "0.18.0" 1029 | serve-static "1.15.0" 1030 | setprototypeof "1.2.0" 1031 | statuses "2.0.1" 1032 | type-is "~1.6.18" 1033 | utils-merge "1.0.1" 1034 | vary "~1.1.2" 1035 | 1036 | extend@^3.0.0: 1037 | version "3.0.2" 1038 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1039 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 1040 | 1041 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1042 | version "3.1.3" 1043 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1044 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1045 | 1046 | fast-json-stable-stringify@^2.0.0: 1047 | version "2.1.0" 1048 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1049 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1050 | 1051 | fastest-levenshtein@^1.0.12: 1052 | version "1.0.16" 1053 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" 1054 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== 1055 | 1056 | faye-websocket@^0.11.3: 1057 | version "0.11.4" 1058 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" 1059 | integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== 1060 | dependencies: 1061 | websocket-driver ">=0.5.1" 1062 | 1063 | fill-range@^7.0.1: 1064 | version "7.0.1" 1065 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1066 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1067 | dependencies: 1068 | to-regex-range "^5.0.1" 1069 | 1070 | finalhandler@1.1.2: 1071 | version "1.1.2" 1072 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 1073 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 1074 | dependencies: 1075 | debug "2.6.9" 1076 | encodeurl "~1.0.2" 1077 | escape-html "~1.0.3" 1078 | on-finished "~2.3.0" 1079 | parseurl "~1.3.3" 1080 | statuses "~1.5.0" 1081 | unpipe "~1.0.0" 1082 | 1083 | finalhandler@1.2.0: 1084 | version "1.2.0" 1085 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 1086 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 1087 | dependencies: 1088 | debug "2.6.9" 1089 | encodeurl "~1.0.2" 1090 | escape-html "~1.0.3" 1091 | on-finished "2.4.1" 1092 | parseurl "~1.3.3" 1093 | statuses "2.0.1" 1094 | unpipe "~1.0.0" 1095 | 1096 | find-up@5.0.0: 1097 | version "5.0.0" 1098 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1099 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1100 | dependencies: 1101 | locate-path "^6.0.0" 1102 | path-exists "^4.0.0" 1103 | 1104 | find-up@^4.0.0: 1105 | version "4.1.0" 1106 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1107 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1108 | dependencies: 1109 | locate-path "^5.0.0" 1110 | path-exists "^4.0.0" 1111 | 1112 | flat@^5.0.2: 1113 | version "5.0.2" 1114 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 1115 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 1116 | 1117 | flatted@^3.2.6: 1118 | version "3.2.6" 1119 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" 1120 | integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== 1121 | 1122 | follow-redirects@^1.0.0: 1123 | version "1.15.1" 1124 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" 1125 | integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== 1126 | 1127 | format-util@^1.0.5: 1128 | version "1.0.5" 1129 | resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" 1130 | integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== 1131 | 1132 | forwarded@0.2.0: 1133 | version "0.2.0" 1134 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 1135 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 1136 | 1137 | fresh@0.5.2: 1138 | version "0.5.2" 1139 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1140 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 1141 | 1142 | fs-extra@^8.1.0: 1143 | version "8.1.0" 1144 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" 1145 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 1146 | dependencies: 1147 | graceful-fs "^4.2.0" 1148 | jsonfile "^4.0.0" 1149 | universalify "^0.1.0" 1150 | 1151 | fs-monkey@^1.0.3: 1152 | version "1.0.3" 1153 | resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" 1154 | integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== 1155 | 1156 | fs.realpath@^1.0.0: 1157 | version "1.0.0" 1158 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1159 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1160 | 1161 | fsevents@~2.3.2: 1162 | version "2.3.2" 1163 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1164 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1165 | 1166 | function-bind@^1.1.1: 1167 | version "1.1.1" 1168 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1169 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1170 | 1171 | get-caller-file@^2.0.5: 1172 | version "2.0.5" 1173 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1174 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1175 | 1176 | get-intrinsic@^1.0.2: 1177 | version "1.1.2" 1178 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" 1179 | integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== 1180 | dependencies: 1181 | function-bind "^1.1.1" 1182 | has "^1.0.3" 1183 | has-symbols "^1.0.3" 1184 | 1185 | get-stream@^6.0.0: 1186 | version "6.0.1" 1187 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1188 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1189 | 1190 | glob-parent@~5.1.2: 1191 | version "5.1.2" 1192 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1193 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1194 | dependencies: 1195 | is-glob "^4.0.1" 1196 | 1197 | glob-to-regexp@^0.4.1: 1198 | version "0.4.1" 1199 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 1200 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 1201 | 1202 | glob@7.2.0: 1203 | version "7.2.0" 1204 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 1205 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 1206 | dependencies: 1207 | fs.realpath "^1.0.0" 1208 | inflight "^1.0.4" 1209 | inherits "2" 1210 | minimatch "^3.0.4" 1211 | once "^1.3.0" 1212 | path-is-absolute "^1.0.0" 1213 | 1214 | glob@^7.1.3, glob@^7.1.7: 1215 | version "7.2.3" 1216 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1217 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1218 | dependencies: 1219 | fs.realpath "^1.0.0" 1220 | inflight "^1.0.4" 1221 | inherits "2" 1222 | minimatch "^3.1.1" 1223 | once "^1.3.0" 1224 | path-is-absolute "^1.0.0" 1225 | 1226 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: 1227 | version "4.2.10" 1228 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1229 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1230 | 1231 | graceful-fs@^4.2.10: 1232 | version "4.2.11" 1233 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1234 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1235 | 1236 | handle-thing@^2.0.0: 1237 | version "2.0.1" 1238 | resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" 1239 | integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== 1240 | 1241 | has-flag@^4.0.0: 1242 | version "4.0.0" 1243 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1244 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1245 | 1246 | has-symbols@^1.0.3: 1247 | version "1.0.3" 1248 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1249 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1250 | 1251 | has@^1.0.3: 1252 | version "1.0.3" 1253 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1254 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1255 | dependencies: 1256 | function-bind "^1.1.1" 1257 | 1258 | he@1.2.0: 1259 | version "1.2.0" 1260 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1261 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1262 | 1263 | hpack.js@^2.1.6: 1264 | version "2.1.6" 1265 | resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" 1266 | integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== 1267 | dependencies: 1268 | inherits "^2.0.1" 1269 | obuf "^1.0.0" 1270 | readable-stream "^2.0.1" 1271 | wbuf "^1.1.0" 1272 | 1273 | html-entities@^2.3.2: 1274 | version "2.3.3" 1275 | resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" 1276 | integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== 1277 | 1278 | http-deceiver@^1.2.7: 1279 | version "1.2.7" 1280 | resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" 1281 | integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== 1282 | 1283 | http-errors@2.0.0: 1284 | version "2.0.0" 1285 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 1286 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 1287 | dependencies: 1288 | depd "2.0.0" 1289 | inherits "2.0.4" 1290 | setprototypeof "1.2.0" 1291 | statuses "2.0.1" 1292 | toidentifier "1.0.1" 1293 | 1294 | http-errors@~1.6.2: 1295 | version "1.6.3" 1296 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 1297 | integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== 1298 | dependencies: 1299 | depd "~1.1.2" 1300 | inherits "2.0.3" 1301 | setprototypeof "1.1.0" 1302 | statuses ">= 1.4.0 < 2" 1303 | 1304 | http-parser-js@>=0.5.1: 1305 | version "0.5.8" 1306 | resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" 1307 | integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== 1308 | 1309 | http-proxy-middleware@^2.0.3: 1310 | version "2.0.6" 1311 | resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" 1312 | integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== 1313 | dependencies: 1314 | "@types/http-proxy" "^1.17.8" 1315 | http-proxy "^1.18.1" 1316 | is-glob "^4.0.1" 1317 | is-plain-obj "^3.0.0" 1318 | micromatch "^4.0.2" 1319 | 1320 | http-proxy@^1.18.1: 1321 | version "1.18.1" 1322 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" 1323 | integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== 1324 | dependencies: 1325 | eventemitter3 "^4.0.0" 1326 | follow-redirects "^1.0.0" 1327 | requires-port "^1.0.0" 1328 | 1329 | human-signals@^2.1.0: 1330 | version "2.1.0" 1331 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1332 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1333 | 1334 | iconv-lite@0.4.24: 1335 | version "0.4.24" 1336 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1337 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1338 | dependencies: 1339 | safer-buffer ">= 2.1.2 < 3" 1340 | 1341 | iconv-lite@^0.6.3: 1342 | version "0.6.3" 1343 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 1344 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 1345 | dependencies: 1346 | safer-buffer ">= 2.1.2 < 3.0.0" 1347 | 1348 | import-local@^3.0.2: 1349 | version "3.1.0" 1350 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1351 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1352 | dependencies: 1353 | pkg-dir "^4.2.0" 1354 | resolve-cwd "^3.0.0" 1355 | 1356 | inflight@^1.0.4: 1357 | version "1.0.6" 1358 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1359 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1360 | dependencies: 1361 | once "^1.3.0" 1362 | wrappy "1" 1363 | 1364 | inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 1365 | version "2.0.4" 1366 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1367 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1368 | 1369 | inherits@2.0.3: 1370 | version "2.0.3" 1371 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1372 | integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== 1373 | 1374 | interpret@^3.1.1: 1375 | version "3.1.1" 1376 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" 1377 | integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== 1378 | 1379 | ipaddr.js@1.9.1: 1380 | version "1.9.1" 1381 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1382 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1383 | 1384 | ipaddr.js@^2.0.1: 1385 | version "2.0.1" 1386 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" 1387 | integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== 1388 | 1389 | is-binary-path@~2.1.0: 1390 | version "2.1.0" 1391 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1392 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1393 | dependencies: 1394 | binary-extensions "^2.0.0" 1395 | 1396 | is-core-module@^2.11.0: 1397 | version "2.12.1" 1398 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" 1399 | integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== 1400 | dependencies: 1401 | has "^1.0.3" 1402 | 1403 | is-docker@^2.0.0, is-docker@^2.1.1: 1404 | version "2.2.1" 1405 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" 1406 | integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== 1407 | 1408 | is-extglob@^2.1.1: 1409 | version "2.1.1" 1410 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1411 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1412 | 1413 | is-fullwidth-code-point@^3.0.0: 1414 | version "3.0.0" 1415 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1416 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1417 | 1418 | is-glob@^4.0.1, is-glob@~4.0.1: 1419 | version "4.0.3" 1420 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1421 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1422 | dependencies: 1423 | is-extglob "^2.1.1" 1424 | 1425 | is-number@^7.0.0: 1426 | version "7.0.0" 1427 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1428 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1429 | 1430 | is-plain-obj@^2.1.0: 1431 | version "2.1.0" 1432 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1433 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1434 | 1435 | is-plain-obj@^3.0.0: 1436 | version "3.0.0" 1437 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" 1438 | integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== 1439 | 1440 | is-plain-object@^2.0.4: 1441 | version "2.0.4" 1442 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1443 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1444 | dependencies: 1445 | isobject "^3.0.1" 1446 | 1447 | is-stream@^2.0.0: 1448 | version "2.0.1" 1449 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1450 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1451 | 1452 | is-unicode-supported@^0.1.0: 1453 | version "0.1.0" 1454 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 1455 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1456 | 1457 | is-wsl@^2.2.0: 1458 | version "2.2.0" 1459 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 1460 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== 1461 | dependencies: 1462 | is-docker "^2.0.0" 1463 | 1464 | isarray@~1.0.0: 1465 | version "1.0.0" 1466 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1467 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== 1468 | 1469 | isbinaryfile@^4.0.8: 1470 | version "4.0.10" 1471 | resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" 1472 | integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== 1473 | 1474 | isexe@^2.0.0: 1475 | version "2.0.0" 1476 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1477 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1478 | 1479 | isobject@^3.0.1: 1480 | version "3.0.1" 1481 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1482 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 1483 | 1484 | jest-worker@^27.4.5: 1485 | version "27.5.1" 1486 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" 1487 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 1488 | dependencies: 1489 | "@types/node" "*" 1490 | merge-stream "^2.0.0" 1491 | supports-color "^8.0.0" 1492 | 1493 | js-yaml@4.1.0: 1494 | version "4.1.0" 1495 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1496 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1497 | dependencies: 1498 | argparse "^2.0.1" 1499 | 1500 | json-parse-even-better-errors@^2.3.1: 1501 | version "2.3.1" 1502 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1503 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1504 | 1505 | json-schema-traverse@^0.4.1: 1506 | version "0.4.1" 1507 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1508 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1509 | 1510 | json-schema-traverse@^1.0.0: 1511 | version "1.0.0" 1512 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1513 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1514 | 1515 | jsonfile@^4.0.0: 1516 | version "4.0.0" 1517 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1518 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== 1519 | optionalDependencies: 1520 | graceful-fs "^4.1.6" 1521 | 1522 | karma-chrome-launcher@3.2.0: 1523 | version "3.2.0" 1524 | resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9" 1525 | integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== 1526 | dependencies: 1527 | which "^1.2.1" 1528 | 1529 | karma-mocha@2.0.1: 1530 | version "2.0.1" 1531 | resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" 1532 | integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== 1533 | dependencies: 1534 | minimist "^1.2.3" 1535 | 1536 | karma-sourcemap-loader@0.4.0: 1537 | version "0.4.0" 1538 | resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz#b01d73f8f688f533bcc8f5d273d43458e13b5488" 1539 | integrity sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA== 1540 | dependencies: 1541 | graceful-fs "^4.2.10" 1542 | 1543 | karma-webpack@5.0.0: 1544 | version "5.0.0" 1545 | resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" 1546 | integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== 1547 | dependencies: 1548 | glob "^7.1.3" 1549 | minimatch "^3.0.4" 1550 | webpack-merge "^4.1.5" 1551 | 1552 | karma@6.4.2: 1553 | version "6.4.2" 1554 | resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.2.tgz#a983f874cee6f35990c4b2dcc3d274653714de8e" 1555 | integrity sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ== 1556 | dependencies: 1557 | "@colors/colors" "1.5.0" 1558 | body-parser "^1.19.0" 1559 | braces "^3.0.2" 1560 | chokidar "^3.5.1" 1561 | connect "^3.7.0" 1562 | di "^0.0.1" 1563 | dom-serialize "^2.2.1" 1564 | glob "^7.1.7" 1565 | graceful-fs "^4.2.6" 1566 | http-proxy "^1.18.1" 1567 | isbinaryfile "^4.0.8" 1568 | lodash "^4.17.21" 1569 | log4js "^6.4.1" 1570 | mime "^2.5.2" 1571 | minimatch "^3.0.4" 1572 | mkdirp "^0.5.5" 1573 | qjobs "^1.2.0" 1574 | range-parser "^1.2.1" 1575 | rimraf "^3.0.2" 1576 | socket.io "^4.4.1" 1577 | source-map "^0.6.1" 1578 | tmp "^0.2.1" 1579 | ua-parser-js "^0.7.30" 1580 | yargs "^16.1.1" 1581 | 1582 | kind-of@^6.0.2: 1583 | version "6.0.3" 1584 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1585 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1586 | 1587 | launch-editor@^2.6.0: 1588 | version "2.6.0" 1589 | resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" 1590 | integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== 1591 | dependencies: 1592 | picocolors "^1.0.0" 1593 | shell-quote "^1.7.3" 1594 | 1595 | loader-runner@^4.2.0: 1596 | version "4.3.0" 1597 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" 1598 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== 1599 | 1600 | locate-path@^5.0.0: 1601 | version "5.0.0" 1602 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1603 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1604 | dependencies: 1605 | p-locate "^4.1.0" 1606 | 1607 | locate-path@^6.0.0: 1608 | version "6.0.0" 1609 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1610 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1611 | dependencies: 1612 | p-locate "^5.0.0" 1613 | 1614 | lodash@^4.17.15, lodash@^4.17.21: 1615 | version "4.17.21" 1616 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1617 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1618 | 1619 | log-symbols@4.1.0: 1620 | version "4.1.0" 1621 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1622 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1623 | dependencies: 1624 | chalk "^4.1.0" 1625 | is-unicode-supported "^0.1.0" 1626 | 1627 | log4js@^6.4.1: 1628 | version "6.6.1" 1629 | resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.6.1.tgz#48f23de8a87d2f5ffd3d913f24ca9ce77895272f" 1630 | integrity sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A== 1631 | dependencies: 1632 | date-format "^4.0.13" 1633 | debug "^4.3.4" 1634 | flatted "^3.2.6" 1635 | rfdc "^1.3.0" 1636 | streamroller "^3.1.2" 1637 | 1638 | media-typer@0.3.0: 1639 | version "0.3.0" 1640 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1641 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 1642 | 1643 | memfs@^3.4.3: 1644 | version "3.4.7" 1645 | resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" 1646 | integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== 1647 | dependencies: 1648 | fs-monkey "^1.0.3" 1649 | 1650 | merge-descriptors@1.0.1: 1651 | version "1.0.1" 1652 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1653 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 1654 | 1655 | merge-stream@^2.0.0: 1656 | version "2.0.0" 1657 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1658 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1659 | 1660 | methods@~1.1.2: 1661 | version "1.1.2" 1662 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1663 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 1664 | 1665 | micromatch@^4.0.2: 1666 | version "4.0.5" 1667 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1668 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1669 | dependencies: 1670 | braces "^3.0.2" 1671 | picomatch "^2.3.1" 1672 | 1673 | mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": 1674 | version "1.52.0" 1675 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1676 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1677 | 1678 | mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: 1679 | version "2.1.35" 1680 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1681 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1682 | dependencies: 1683 | mime-db "1.52.0" 1684 | 1685 | mime@1.6.0: 1686 | version "1.6.0" 1687 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1688 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1689 | 1690 | mime@^2.5.2: 1691 | version "2.6.0" 1692 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" 1693 | integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== 1694 | 1695 | mimic-fn@^2.1.0: 1696 | version "2.1.0" 1697 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1698 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1699 | 1700 | minimalistic-assert@^1.0.0: 1701 | version "1.0.1" 1702 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 1703 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 1704 | 1705 | minimatch@5.0.1: 1706 | version "5.0.1" 1707 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" 1708 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== 1709 | dependencies: 1710 | brace-expansion "^2.0.1" 1711 | 1712 | minimatch@^3.0.4, minimatch@^3.1.1: 1713 | version "3.1.2" 1714 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1715 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1716 | dependencies: 1717 | brace-expansion "^1.1.7" 1718 | 1719 | minimist@^1.2.3, minimist@^1.2.6: 1720 | version "1.2.6" 1721 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1722 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1723 | 1724 | mkdirp@^0.5.5: 1725 | version "0.5.6" 1726 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 1727 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 1728 | dependencies: 1729 | minimist "^1.2.6" 1730 | 1731 | mocha@10.2.0: 1732 | version "10.2.0" 1733 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" 1734 | integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== 1735 | dependencies: 1736 | ansi-colors "4.1.1" 1737 | browser-stdout "1.3.1" 1738 | chokidar "3.5.3" 1739 | debug "4.3.4" 1740 | diff "5.0.0" 1741 | escape-string-regexp "4.0.0" 1742 | find-up "5.0.0" 1743 | glob "7.2.0" 1744 | he "1.2.0" 1745 | js-yaml "4.1.0" 1746 | log-symbols "4.1.0" 1747 | minimatch "5.0.1" 1748 | ms "2.1.3" 1749 | nanoid "3.3.3" 1750 | serialize-javascript "6.0.0" 1751 | strip-json-comments "3.1.1" 1752 | supports-color "8.1.1" 1753 | workerpool "6.2.1" 1754 | yargs "16.2.0" 1755 | yargs-parser "20.2.4" 1756 | yargs-unparser "2.0.0" 1757 | 1758 | ms@2.0.0: 1759 | version "2.0.0" 1760 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1761 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 1762 | 1763 | ms@2.1.2: 1764 | version "2.1.2" 1765 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1766 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1767 | 1768 | ms@2.1.3: 1769 | version "2.1.3" 1770 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1771 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1772 | 1773 | multicast-dns@^7.2.5: 1774 | version "7.2.5" 1775 | resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" 1776 | integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== 1777 | dependencies: 1778 | dns-packet "^5.2.2" 1779 | thunky "^1.0.2" 1780 | 1781 | nanoid@3.3.3: 1782 | version "3.3.3" 1783 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" 1784 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== 1785 | 1786 | negotiator@0.6.3: 1787 | version "0.6.3" 1788 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 1789 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 1790 | 1791 | neo-async@^2.6.2: 1792 | version "2.6.2" 1793 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 1794 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 1795 | 1796 | node-forge@^1: 1797 | version "1.3.1" 1798 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" 1799 | integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== 1800 | 1801 | node-releases@^2.0.6: 1802 | version "2.0.6" 1803 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" 1804 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== 1805 | 1806 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1807 | version "3.0.0" 1808 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1809 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1810 | 1811 | npm-run-path@^4.0.1: 1812 | version "4.0.1" 1813 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1814 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1815 | dependencies: 1816 | path-key "^3.0.0" 1817 | 1818 | object-assign@^4: 1819 | version "4.1.1" 1820 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1821 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1822 | 1823 | object-inspect@^1.9.0: 1824 | version "1.12.2" 1825 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 1826 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 1827 | 1828 | obuf@^1.0.0, obuf@^1.1.2: 1829 | version "1.1.2" 1830 | resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" 1831 | integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== 1832 | 1833 | on-finished@2.4.1: 1834 | version "2.4.1" 1835 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 1836 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 1837 | dependencies: 1838 | ee-first "1.1.1" 1839 | 1840 | on-finished@~2.3.0: 1841 | version "2.3.0" 1842 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1843 | integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== 1844 | dependencies: 1845 | ee-first "1.1.1" 1846 | 1847 | on-headers@~1.0.2: 1848 | version "1.0.2" 1849 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" 1850 | integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== 1851 | 1852 | once@^1.3.0: 1853 | version "1.4.0" 1854 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1855 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1856 | dependencies: 1857 | wrappy "1" 1858 | 1859 | onetime@^5.1.2: 1860 | version "5.1.2" 1861 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1862 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1863 | dependencies: 1864 | mimic-fn "^2.1.0" 1865 | 1866 | open@^8.0.9: 1867 | version "8.4.0" 1868 | resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" 1869 | integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== 1870 | dependencies: 1871 | define-lazy-prop "^2.0.0" 1872 | is-docker "^2.1.1" 1873 | is-wsl "^2.2.0" 1874 | 1875 | p-limit@^2.2.0: 1876 | version "2.3.0" 1877 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1878 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1879 | dependencies: 1880 | p-try "^2.0.0" 1881 | 1882 | p-limit@^3.0.2: 1883 | version "3.1.0" 1884 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1885 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1886 | dependencies: 1887 | yocto-queue "^0.1.0" 1888 | 1889 | p-locate@^4.1.0: 1890 | version "4.1.0" 1891 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1892 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1893 | dependencies: 1894 | p-limit "^2.2.0" 1895 | 1896 | p-locate@^5.0.0: 1897 | version "5.0.0" 1898 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1899 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1900 | dependencies: 1901 | p-limit "^3.0.2" 1902 | 1903 | p-retry@^4.5.0: 1904 | version "4.6.2" 1905 | resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" 1906 | integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== 1907 | dependencies: 1908 | "@types/retry" "0.12.0" 1909 | retry "^0.13.1" 1910 | 1911 | p-try@^2.0.0: 1912 | version "2.2.0" 1913 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1914 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1915 | 1916 | parseurl@~1.3.2, parseurl@~1.3.3: 1917 | version "1.3.3" 1918 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1919 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1920 | 1921 | path-exists@^4.0.0: 1922 | version "4.0.0" 1923 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1924 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1925 | 1926 | path-is-absolute@^1.0.0: 1927 | version "1.0.1" 1928 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1929 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1930 | 1931 | path-key@^3.0.0, path-key@^3.1.0: 1932 | version "3.1.1" 1933 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1934 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1935 | 1936 | path-parse@^1.0.7: 1937 | version "1.0.7" 1938 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1939 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1940 | 1941 | path-to-regexp@0.1.7: 1942 | version "0.1.7" 1943 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1944 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 1945 | 1946 | picocolors@^1.0.0: 1947 | version "1.0.0" 1948 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1949 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1950 | 1951 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1952 | version "2.3.1" 1953 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1954 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1955 | 1956 | pkg-dir@^4.2.0: 1957 | version "4.2.0" 1958 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1959 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1960 | dependencies: 1961 | find-up "^4.0.0" 1962 | 1963 | process-nextick-args@~2.0.0: 1964 | version "2.0.1" 1965 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1966 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1967 | 1968 | proxy-addr@~2.0.7: 1969 | version "2.0.7" 1970 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 1971 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 1972 | dependencies: 1973 | forwarded "0.2.0" 1974 | ipaddr.js "1.9.1" 1975 | 1976 | punycode@^2.1.0: 1977 | version "2.1.1" 1978 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1979 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1980 | 1981 | qjobs@^1.2.0: 1982 | version "1.2.0" 1983 | resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" 1984 | integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== 1985 | 1986 | qs@6.10.3: 1987 | version "6.10.3" 1988 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" 1989 | integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== 1990 | dependencies: 1991 | side-channel "^1.0.4" 1992 | 1993 | randombytes@^2.1.0: 1994 | version "2.1.0" 1995 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1996 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1997 | dependencies: 1998 | safe-buffer "^5.1.0" 1999 | 2000 | range-parser@^1.2.1, range-parser@~1.2.1: 2001 | version "1.2.1" 2002 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 2003 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 2004 | 2005 | raw-body@2.5.1: 2006 | version "2.5.1" 2007 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 2008 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 2009 | dependencies: 2010 | bytes "3.1.2" 2011 | http-errors "2.0.0" 2012 | iconv-lite "0.4.24" 2013 | unpipe "1.0.0" 2014 | 2015 | readable-stream@^2.0.1: 2016 | version "2.3.7" 2017 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 2018 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 2019 | dependencies: 2020 | core-util-is "~1.0.0" 2021 | inherits "~2.0.3" 2022 | isarray "~1.0.0" 2023 | process-nextick-args "~2.0.0" 2024 | safe-buffer "~5.1.1" 2025 | string_decoder "~1.1.1" 2026 | util-deprecate "~1.0.1" 2027 | 2028 | readable-stream@^3.0.6: 2029 | version "3.6.0" 2030 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 2031 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 2032 | dependencies: 2033 | inherits "^2.0.3" 2034 | string_decoder "^1.1.1" 2035 | util-deprecate "^1.0.1" 2036 | 2037 | readdirp@~3.6.0: 2038 | version "3.6.0" 2039 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 2040 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 2041 | dependencies: 2042 | picomatch "^2.2.1" 2043 | 2044 | rechoir@^0.8.0: 2045 | version "0.8.0" 2046 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" 2047 | integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== 2048 | dependencies: 2049 | resolve "^1.20.0" 2050 | 2051 | require-directory@^2.1.1: 2052 | version "2.1.1" 2053 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2054 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2055 | 2056 | require-from-string@^2.0.2: 2057 | version "2.0.2" 2058 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 2059 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 2060 | 2061 | requires-port@^1.0.0: 2062 | version "1.0.0" 2063 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 2064 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 2065 | 2066 | resolve-cwd@^3.0.0: 2067 | version "3.0.0" 2068 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2069 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2070 | dependencies: 2071 | resolve-from "^5.0.0" 2072 | 2073 | resolve-from@^5.0.0: 2074 | version "5.0.0" 2075 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2076 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2077 | 2078 | resolve@^1.20.0: 2079 | version "1.22.2" 2080 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 2081 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 2082 | dependencies: 2083 | is-core-module "^2.11.0" 2084 | path-parse "^1.0.7" 2085 | supports-preserve-symlinks-flag "^1.0.0" 2086 | 2087 | retry@^0.13.1: 2088 | version "0.13.1" 2089 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" 2090 | integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== 2091 | 2092 | rfdc@^1.3.0: 2093 | version "1.3.0" 2094 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" 2095 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 2096 | 2097 | rimraf@^3.0.0, rimraf@^3.0.2: 2098 | version "3.0.2" 2099 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2100 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2101 | dependencies: 2102 | glob "^7.1.3" 2103 | 2104 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2105 | version "5.1.2" 2106 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2107 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2108 | 2109 | safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: 2110 | version "5.2.1" 2111 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2112 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2113 | 2114 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": 2115 | version "2.1.2" 2116 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2117 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2118 | 2119 | schema-utils@^3.1.1: 2120 | version "3.1.1" 2121 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" 2122 | integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== 2123 | dependencies: 2124 | "@types/json-schema" "^7.0.8" 2125 | ajv "^6.12.5" 2126 | ajv-keywords "^3.5.2" 2127 | 2128 | schema-utils@^3.1.2: 2129 | version "3.3.0" 2130 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" 2131 | integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== 2132 | dependencies: 2133 | "@types/json-schema" "^7.0.8" 2134 | ajv "^6.12.5" 2135 | ajv-keywords "^3.5.2" 2136 | 2137 | schema-utils@^4.0.0: 2138 | version "4.0.0" 2139 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" 2140 | integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== 2141 | dependencies: 2142 | "@types/json-schema" "^7.0.9" 2143 | ajv "^8.8.0" 2144 | ajv-formats "^2.1.1" 2145 | ajv-keywords "^5.0.0" 2146 | 2147 | select-hose@^2.0.0: 2148 | version "2.0.0" 2149 | resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" 2150 | integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== 2151 | 2152 | selfsigned@^2.1.1: 2153 | version "2.1.1" 2154 | resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" 2155 | integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== 2156 | dependencies: 2157 | node-forge "^1" 2158 | 2159 | send@0.18.0: 2160 | version "0.18.0" 2161 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 2162 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 2163 | dependencies: 2164 | debug "2.6.9" 2165 | depd "2.0.0" 2166 | destroy "1.2.0" 2167 | encodeurl "~1.0.2" 2168 | escape-html "~1.0.3" 2169 | etag "~1.8.1" 2170 | fresh "0.5.2" 2171 | http-errors "2.0.0" 2172 | mime "1.6.0" 2173 | ms "2.1.3" 2174 | on-finished "2.4.1" 2175 | range-parser "~1.2.1" 2176 | statuses "2.0.1" 2177 | 2178 | serialize-javascript@6.0.0: 2179 | version "6.0.0" 2180 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 2181 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 2182 | dependencies: 2183 | randombytes "^2.1.0" 2184 | 2185 | serialize-javascript@^6.0.1: 2186 | version "6.0.1" 2187 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" 2188 | integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== 2189 | dependencies: 2190 | randombytes "^2.1.0" 2191 | 2192 | serve-index@^1.9.1: 2193 | version "1.9.1" 2194 | resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" 2195 | integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== 2196 | dependencies: 2197 | accepts "~1.3.4" 2198 | batch "0.6.1" 2199 | debug "2.6.9" 2200 | escape-html "~1.0.3" 2201 | http-errors "~1.6.2" 2202 | mime-types "~2.1.17" 2203 | parseurl "~1.3.2" 2204 | 2205 | serve-static@1.15.0: 2206 | version "1.15.0" 2207 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 2208 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 2209 | dependencies: 2210 | encodeurl "~1.0.2" 2211 | escape-html "~1.0.3" 2212 | parseurl "~1.3.3" 2213 | send "0.18.0" 2214 | 2215 | setprototypeof@1.1.0: 2216 | version "1.1.0" 2217 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 2218 | integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== 2219 | 2220 | setprototypeof@1.2.0: 2221 | version "1.2.0" 2222 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 2223 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 2224 | 2225 | shallow-clone@^3.0.0: 2226 | version "3.0.1" 2227 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" 2228 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== 2229 | dependencies: 2230 | kind-of "^6.0.2" 2231 | 2232 | shebang-command@^2.0.0: 2233 | version "2.0.0" 2234 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2235 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2236 | dependencies: 2237 | shebang-regex "^3.0.0" 2238 | 2239 | shebang-regex@^3.0.0: 2240 | version "3.0.0" 2241 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2242 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2243 | 2244 | shell-quote@^1.7.3: 2245 | version "1.8.1" 2246 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" 2247 | integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== 2248 | 2249 | side-channel@^1.0.4: 2250 | version "1.0.4" 2251 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 2252 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2253 | dependencies: 2254 | call-bind "^1.0.0" 2255 | get-intrinsic "^1.0.2" 2256 | object-inspect "^1.9.0" 2257 | 2258 | signal-exit@^3.0.3: 2259 | version "3.0.7" 2260 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2261 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2262 | 2263 | socket.io-adapter@~2.4.0: 2264 | version "2.4.0" 2265 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" 2266 | integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== 2267 | 2268 | socket.io-parser@~4.0.4: 2269 | version "4.0.5" 2270 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.5.tgz#cb404382c32324cc962f27f3a44058cf6e0552df" 2271 | integrity sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig== 2272 | dependencies: 2273 | "@types/component-emitter" "^1.2.10" 2274 | component-emitter "~1.3.0" 2275 | debug "~4.3.1" 2276 | 2277 | socket.io@^4.4.1: 2278 | version "4.5.1" 2279 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.1.tgz#aa7e73f8a6ce20ee3c54b2446d321bbb6b1a9029" 2280 | integrity sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ== 2281 | dependencies: 2282 | accepts "~1.3.4" 2283 | base64id "~2.0.0" 2284 | debug "~4.3.2" 2285 | engine.io "~6.2.0" 2286 | socket.io-adapter "~2.4.0" 2287 | socket.io-parser "~4.0.4" 2288 | 2289 | sockjs@^0.3.24: 2290 | version "0.3.24" 2291 | resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" 2292 | integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== 2293 | dependencies: 2294 | faye-websocket "^0.11.3" 2295 | uuid "^8.3.2" 2296 | websocket-driver "^0.7.4" 2297 | 2298 | source-map-js@^1.0.2: 2299 | version "1.0.2" 2300 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 2301 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 2302 | 2303 | source-map-loader@4.0.1: 2304 | version "4.0.1" 2305 | resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" 2306 | integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== 2307 | dependencies: 2308 | abab "^2.0.6" 2309 | iconv-lite "^0.6.3" 2310 | source-map-js "^1.0.2" 2311 | 2312 | source-map-support@~0.5.20: 2313 | version "0.5.21" 2314 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 2315 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 2316 | dependencies: 2317 | buffer-from "^1.0.0" 2318 | source-map "^0.6.0" 2319 | 2320 | source-map@^0.6.0, source-map@^0.6.1: 2321 | version "0.6.1" 2322 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2323 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2324 | 2325 | spdy-transport@^3.0.0: 2326 | version "3.0.0" 2327 | resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" 2328 | integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== 2329 | dependencies: 2330 | debug "^4.1.0" 2331 | detect-node "^2.0.4" 2332 | hpack.js "^2.1.6" 2333 | obuf "^1.1.2" 2334 | readable-stream "^3.0.6" 2335 | wbuf "^1.7.3" 2336 | 2337 | spdy@^4.0.2: 2338 | version "4.0.2" 2339 | resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" 2340 | integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== 2341 | dependencies: 2342 | debug "^4.1.0" 2343 | handle-thing "^2.0.0" 2344 | http-deceiver "^1.2.7" 2345 | select-hose "^2.0.0" 2346 | spdy-transport "^3.0.0" 2347 | 2348 | statuses@2.0.1: 2349 | version "2.0.1" 2350 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 2351 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 2352 | 2353 | "statuses@>= 1.4.0 < 2", statuses@~1.5.0: 2354 | version "1.5.0" 2355 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2356 | integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== 2357 | 2358 | streamroller@^3.1.2: 2359 | version "3.1.2" 2360 | resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.2.tgz#abd444560768b340f696307cf84d3f46e86c0e63" 2361 | integrity sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A== 2362 | dependencies: 2363 | date-format "^4.0.13" 2364 | debug "^4.3.4" 2365 | fs-extra "^8.1.0" 2366 | 2367 | string-width@^4.1.0, string-width@^4.2.0: 2368 | version "4.2.3" 2369 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2370 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2371 | dependencies: 2372 | emoji-regex "^8.0.0" 2373 | is-fullwidth-code-point "^3.0.0" 2374 | strip-ansi "^6.0.1" 2375 | 2376 | string_decoder@^1.1.1: 2377 | version "1.3.0" 2378 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 2379 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 2380 | dependencies: 2381 | safe-buffer "~5.2.0" 2382 | 2383 | string_decoder@~1.1.1: 2384 | version "1.1.1" 2385 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2386 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2387 | dependencies: 2388 | safe-buffer "~5.1.0" 2389 | 2390 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2391 | version "6.0.1" 2392 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2393 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2394 | dependencies: 2395 | ansi-regex "^5.0.1" 2396 | 2397 | strip-final-newline@^2.0.0: 2398 | version "2.0.0" 2399 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2400 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2401 | 2402 | strip-json-comments@3.1.1: 2403 | version "3.1.1" 2404 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2405 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2406 | 2407 | supports-color@8.1.1, supports-color@^8.0.0: 2408 | version "8.1.1" 2409 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2410 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2411 | dependencies: 2412 | has-flag "^4.0.0" 2413 | 2414 | supports-color@^7.1.0: 2415 | version "7.2.0" 2416 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2417 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2418 | dependencies: 2419 | has-flag "^4.0.0" 2420 | 2421 | supports-preserve-symlinks-flag@^1.0.0: 2422 | version "1.0.0" 2423 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2424 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2425 | 2426 | tapable@^2.1.1, tapable@^2.2.0: 2427 | version "2.2.1" 2428 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 2429 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 2430 | 2431 | terser-webpack-plugin@^5.3.7: 2432 | version "5.3.9" 2433 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" 2434 | integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== 2435 | dependencies: 2436 | "@jridgewell/trace-mapping" "^0.3.17" 2437 | jest-worker "^27.4.5" 2438 | schema-utils "^3.1.1" 2439 | serialize-javascript "^6.0.1" 2440 | terser "^5.16.8" 2441 | 2442 | terser@^5.16.8: 2443 | version "5.18.2" 2444 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" 2445 | integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== 2446 | dependencies: 2447 | "@jridgewell/source-map" "^0.3.3" 2448 | acorn "^8.8.2" 2449 | commander "^2.20.0" 2450 | source-map-support "~0.5.20" 2451 | 2452 | thunky@^1.0.2: 2453 | version "1.1.0" 2454 | resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" 2455 | integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== 2456 | 2457 | tmp@^0.2.1: 2458 | version "0.2.1" 2459 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" 2460 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 2461 | dependencies: 2462 | rimraf "^3.0.0" 2463 | 2464 | to-regex-range@^5.0.1: 2465 | version "5.0.1" 2466 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2467 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2468 | dependencies: 2469 | is-number "^7.0.0" 2470 | 2471 | toidentifier@1.0.1: 2472 | version "1.0.1" 2473 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 2474 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 2475 | 2476 | type-is@~1.6.18: 2477 | version "1.6.18" 2478 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2479 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2480 | dependencies: 2481 | media-typer "0.3.0" 2482 | mime-types "~2.1.24" 2483 | 2484 | typescript@5.0.4: 2485 | version "5.0.4" 2486 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" 2487 | integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== 2488 | 2489 | ua-parser-js@^0.7.30: 2490 | version "0.7.31" 2491 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" 2492 | integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== 2493 | 2494 | universalify@^0.1.0: 2495 | version "0.1.2" 2496 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 2497 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 2498 | 2499 | unpipe@1.0.0, unpipe@~1.0.0: 2500 | version "1.0.0" 2501 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2502 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 2503 | 2504 | update-browserslist-db@^1.0.5: 2505 | version "1.0.5" 2506 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" 2507 | integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== 2508 | dependencies: 2509 | escalade "^3.1.1" 2510 | picocolors "^1.0.0" 2511 | 2512 | uri-js@^4.2.2: 2513 | version "4.4.1" 2514 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2515 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2516 | dependencies: 2517 | punycode "^2.1.0" 2518 | 2519 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 2520 | version "1.0.2" 2521 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2522 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 2523 | 2524 | utils-merge@1.0.1: 2525 | version "1.0.1" 2526 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2527 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 2528 | 2529 | uuid@^8.3.2: 2530 | version "8.3.2" 2531 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2532 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2533 | 2534 | vary@^1, vary@~1.1.2: 2535 | version "1.1.2" 2536 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2537 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 2538 | 2539 | void-elements@^2.0.0: 2540 | version "2.0.1" 2541 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" 2542 | integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== 2543 | 2544 | watchpack@^2.4.0: 2545 | version "2.4.0" 2546 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" 2547 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== 2548 | dependencies: 2549 | glob-to-regexp "^0.4.1" 2550 | graceful-fs "^4.1.2" 2551 | 2552 | wbuf@^1.1.0, wbuf@^1.7.3: 2553 | version "1.7.3" 2554 | resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" 2555 | integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== 2556 | dependencies: 2557 | minimalistic-assert "^1.0.0" 2558 | 2559 | webpack-cli@5.1.0: 2560 | version "5.1.0" 2561 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.0.tgz#abc4b1f44b50250f2632d8b8b536cfe2f6257891" 2562 | integrity sha512-a7KRJnCxejFoDpYTOwzm5o21ZXMaNqtRlvS183XzGDUPRdVEzJNImcQokqYZ8BNTnk9DkKiuWxw75+DCCoZ26w== 2563 | dependencies: 2564 | "@discoveryjs/json-ext" "^0.5.0" 2565 | "@webpack-cli/configtest" "^2.1.0" 2566 | "@webpack-cli/info" "^2.0.1" 2567 | "@webpack-cli/serve" "^2.0.3" 2568 | colorette "^2.0.14" 2569 | commander "^10.0.1" 2570 | cross-spawn "^7.0.3" 2571 | envinfo "^7.7.3" 2572 | fastest-levenshtein "^1.0.12" 2573 | import-local "^3.0.2" 2574 | interpret "^3.1.1" 2575 | rechoir "^0.8.0" 2576 | webpack-merge "^5.7.3" 2577 | 2578 | webpack-dev-middleware@^5.3.1: 2579 | version "5.3.3" 2580 | resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" 2581 | integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== 2582 | dependencies: 2583 | colorette "^2.0.10" 2584 | memfs "^3.4.3" 2585 | mime-types "^2.1.31" 2586 | range-parser "^1.2.1" 2587 | schema-utils "^4.0.0" 2588 | 2589 | webpack-dev-server@4.15.0: 2590 | version "4.15.0" 2591 | resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" 2592 | integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== 2593 | dependencies: 2594 | "@types/bonjour" "^3.5.9" 2595 | "@types/connect-history-api-fallback" "^1.3.5" 2596 | "@types/express" "^4.17.13" 2597 | "@types/serve-index" "^1.9.1" 2598 | "@types/serve-static" "^1.13.10" 2599 | "@types/sockjs" "^0.3.33" 2600 | "@types/ws" "^8.5.1" 2601 | ansi-html-community "^0.0.8" 2602 | bonjour-service "^1.0.11" 2603 | chokidar "^3.5.3" 2604 | colorette "^2.0.10" 2605 | compression "^1.7.4" 2606 | connect-history-api-fallback "^2.0.0" 2607 | default-gateway "^6.0.3" 2608 | express "^4.17.3" 2609 | graceful-fs "^4.2.6" 2610 | html-entities "^2.3.2" 2611 | http-proxy-middleware "^2.0.3" 2612 | ipaddr.js "^2.0.1" 2613 | launch-editor "^2.6.0" 2614 | open "^8.0.9" 2615 | p-retry "^4.5.0" 2616 | rimraf "^3.0.2" 2617 | schema-utils "^4.0.0" 2618 | selfsigned "^2.1.1" 2619 | serve-index "^1.9.1" 2620 | sockjs "^0.3.24" 2621 | spdy "^4.0.2" 2622 | webpack-dev-middleware "^5.3.1" 2623 | ws "^8.13.0" 2624 | 2625 | webpack-merge@^4.1.5: 2626 | version "4.2.2" 2627 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" 2628 | integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== 2629 | dependencies: 2630 | lodash "^4.17.15" 2631 | 2632 | webpack-merge@^5.7.3: 2633 | version "5.8.0" 2634 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" 2635 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== 2636 | dependencies: 2637 | clone-deep "^4.0.1" 2638 | wildcard "^2.0.0" 2639 | 2640 | webpack-sources@^3.2.3: 2641 | version "3.2.3" 2642 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" 2643 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== 2644 | 2645 | webpack@5.82.0: 2646 | version "5.82.0" 2647 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.0.tgz#3c0d074dec79401db026b4ba0fb23d6333f88e7d" 2648 | integrity sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg== 2649 | dependencies: 2650 | "@types/eslint-scope" "^3.7.3" 2651 | "@types/estree" "^1.0.0" 2652 | "@webassemblyjs/ast" "^1.11.5" 2653 | "@webassemblyjs/wasm-edit" "^1.11.5" 2654 | "@webassemblyjs/wasm-parser" "^1.11.5" 2655 | acorn "^8.7.1" 2656 | acorn-import-assertions "^1.7.6" 2657 | browserslist "^4.14.5" 2658 | chrome-trace-event "^1.0.2" 2659 | enhanced-resolve "^5.13.0" 2660 | es-module-lexer "^1.2.1" 2661 | eslint-scope "5.1.1" 2662 | events "^3.2.0" 2663 | glob-to-regexp "^0.4.1" 2664 | graceful-fs "^4.2.9" 2665 | json-parse-even-better-errors "^2.3.1" 2666 | loader-runner "^4.2.0" 2667 | mime-types "^2.1.27" 2668 | neo-async "^2.6.2" 2669 | schema-utils "^3.1.2" 2670 | tapable "^2.1.1" 2671 | terser-webpack-plugin "^5.3.7" 2672 | watchpack "^2.4.0" 2673 | webpack-sources "^3.2.3" 2674 | 2675 | websocket-driver@>=0.5.1, websocket-driver@^0.7.4: 2676 | version "0.7.4" 2677 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" 2678 | integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== 2679 | dependencies: 2680 | http-parser-js ">=0.5.1" 2681 | safe-buffer ">=5.1.0" 2682 | websocket-extensions ">=0.1.1" 2683 | 2684 | websocket-extensions@>=0.1.1: 2685 | version "0.1.4" 2686 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" 2687 | integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== 2688 | 2689 | which@^1.2.1: 2690 | version "1.3.1" 2691 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2692 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2693 | dependencies: 2694 | isexe "^2.0.0" 2695 | 2696 | which@^2.0.1: 2697 | version "2.0.2" 2698 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2699 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2700 | dependencies: 2701 | isexe "^2.0.0" 2702 | 2703 | wildcard@^2.0.0: 2704 | version "2.0.0" 2705 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" 2706 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== 2707 | 2708 | workerpool@6.2.1: 2709 | version "6.2.1" 2710 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" 2711 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== 2712 | 2713 | wrap-ansi@^7.0.0: 2714 | version "7.0.0" 2715 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2716 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2717 | dependencies: 2718 | ansi-styles "^4.0.0" 2719 | string-width "^4.1.0" 2720 | strip-ansi "^6.0.0" 2721 | 2722 | wrappy@1: 2723 | version "1.0.2" 2724 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2725 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2726 | 2727 | ws@^8.13.0: 2728 | version "8.13.0" 2729 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" 2730 | integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== 2731 | 2732 | ws@~8.2.3: 2733 | version "8.2.3" 2734 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" 2735 | integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== 2736 | 2737 | y18n@^5.0.5: 2738 | version "5.0.8" 2739 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2740 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2741 | 2742 | yargs-parser@20.2.4: 2743 | version "20.2.4" 2744 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 2745 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 2746 | 2747 | yargs-parser@^20.2.2: 2748 | version "20.2.9" 2749 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2750 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2751 | 2752 | yargs-unparser@2.0.0: 2753 | version "2.0.0" 2754 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 2755 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2756 | dependencies: 2757 | camelcase "^6.0.0" 2758 | decamelize "^4.0.0" 2759 | flat "^5.0.2" 2760 | is-plain-obj "^2.1.0" 2761 | 2762 | yargs@16.2.0, yargs@^16.1.1: 2763 | version "16.2.0" 2764 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2765 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2766 | dependencies: 2767 | cliui "^7.0.2" 2768 | escalade "^3.1.1" 2769 | get-caller-file "^2.0.5" 2770 | require-directory "^2.1.1" 2771 | string-width "^4.2.0" 2772 | y18n "^5.0.5" 2773 | yargs-parser "^20.2.2" 2774 | 2775 | yocto-queue@^0.1.0: 2776 | version "0.1.0" 2777 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2778 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2779 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("de.fayard.refreshVersions") version "0.60.3" 3 | } 4 | 5 | @Suppress("UnstableApiUsage") 6 | dependencyResolutionManagement { 7 | pluginManagement { 8 | repositories { 9 | gradlePluginPortal() 10 | kotlinDevelopmentRepositories() 11 | composeDevelopmentRepositories() 12 | localDevelopmentRepositories() 13 | } 14 | } 15 | repositories { 16 | google() 17 | mavenCentral() 18 | kotlinDevelopmentRepositories() 19 | composeDevelopmentRepositories() 20 | localDevelopmentRepositories() 21 | } 22 | } 23 | 24 | fun RepositoryHandler.kotlinDevelopmentRepositories() { 25 | // maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap") 26 | // maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") 27 | // maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/temporary") 28 | // maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-coroutines/maven") 29 | // maven("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental") 30 | } 31 | 32 | fun RepositoryHandler.composeDevelopmentRepositories() { 33 | // maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") 34 | // maven("https://androidx.dev/storage/compose-compiler/repository/") 35 | } 36 | 37 | fun RepositoryHandler.localDevelopmentRepositories() { 38 | maven(url = "${System.getenv("HOME")!!}/.m2/local-repository") 39 | mavenLocal() 40 | } 41 | 42 | refreshVersions { 43 | featureFlags { 44 | enable(de.fayard.refreshVersions.core.FeatureFlag.LIBS) 45 | } 46 | } 47 | 48 | rootProject.name = "compose-counting-grid" 49 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/Configuration.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.runtime.getValue 2 | import androidx.compose.runtime.mutableStateOf 3 | import androidx.compose.runtime.setValue 4 | 5 | object Configuration { 6 | class Element( 7 | val label: String, 8 | initialValue: Boolean, 9 | private val onChange: ((element: Element, newState: Boolean) -> Unit)? = Configuration::logAction 10 | ) { 11 | private val _state = mutableStateOf(initialValue) 12 | var value 13 | get() = _state.value 14 | set(value) { 15 | onChange?.invoke(this, value) 16 | _state.value = value 17 | } 18 | 19 | init { 20 | onChange?.invoke(this, _state.value) 21 | } 22 | } 23 | 24 | var gridGenerationId by mutableStateOf(0) 25 | 26 | val pauseOnEachStep = Element("Pause on each step (100ms)", false) 27 | val updateTopRowOnlyEnabled = Element("Update top row only", false) 28 | private val gridGenerationsEnabled = Element("Enable grid generations", true) 29 | val animationsEnabled = Element("Enable animations", false) { element, newState -> 30 | logAction(element, newState) 31 | if (gridGenerationsEnabled.value) { 32 | gridGenerationId++ 33 | } 34 | } 35 | val recomposeHighlightingEnabled = Element("Highlight recompositions", false) 36 | val topLevelRecompositionForced = Element("Force top-level recomposition", false) 37 | val rowLevelRecompositionForced = Element("Force row-level recomposition", false) 38 | val cellLevelRecompositionForced = Element("Force cell-level recomposition", false) 39 | val cellTextDrawingEnabled = Element("Draw cell text", true) 40 | private val trackDrawingEnabled = Element("Track drawing", true) { element, newState -> 41 | logAction(element, newState) 42 | drawSeries = if (newState) DrawSeries() else null 43 | } 44 | val gridHidingEnabled = Element("Hide grid temporarily when switching animations", false) 45 | val boxWithConstraintsPerRowEnabled = Element("Enable BoxWithConstraints per row", true) 46 | 47 | val elements = listOf( 48 | pauseOnEachStep, 49 | updateTopRowOnlyEnabled, 50 | animationsEnabled, 51 | recomposeHighlightingEnabled, 52 | topLevelRecompositionForced, 53 | rowLevelRecompositionForced, 54 | cellLevelRecompositionForced, 55 | cellTextDrawingEnabled, 56 | trackDrawingEnabled, 57 | gridHidingEnabled, 58 | gridGenerationsEnabled, 59 | boxWithConstraintsPerRowEnabled 60 | ) 61 | 62 | private fun logAction(element: Element, newState: Boolean) { 63 | log("${element.label} -> ${if (newState) "ON " else "OFF"}") 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/DrawSeries.kt: -------------------------------------------------------------------------------- 1 | import kotlinx.atomicfu.locks.SynchronizedObject 2 | import kotlinx.atomicfu.locks.synchronized 3 | import kotlinx.datetime.Clock 4 | import kotlinx.datetime.Instant 5 | import kotlin.time.Duration.Companion.seconds 6 | 7 | var drawSeries: DrawSeries? = null 8 | 9 | private val IDLE_DURATION = 1.seconds 10 | 11 | /** 12 | * A series of drawing operations, starting with the first cell drawn and ending when idle for [IDLE_DURATION]. 13 | */ 14 | class DrawSeries : SynchronizedObject() { 15 | private var startMoment: Instant? = null 16 | private var lastOperationMoment = Clock.System.now() 17 | private var cellOperationCount = 0 18 | 19 | fun addCellOperation() = synchronized(this) { 20 | lastOperationMoment = Clock.System.now() 21 | if (startMoment == null) { 22 | startMoment = lastOperationMoment 23 | } 24 | 25 | cellOperationCount++ 26 | } 27 | 28 | fun tryToFinish() = synchronized(this) { 29 | startMoment?.let { firstMoment -> 30 | val pause = Clock.System.now() - lastOperationMoment 31 | 32 | if (pause >= IDLE_DURATION) { 33 | val seriesDuration = lastOperationMoment - firstMoment 34 | val drawnOrNot = if (Configuration.cellTextDrawingEnabled.value) "drawn" else "not drawn" 35 | log( 36 | "$cellOperationCount cells $drawnOrNot in $seriesDuration from $firstMoment to $lastOperationMoment" 37 | ) 38 | this.startMoment = null 39 | cellOperationCount = 0 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/FPSCount.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.runtime.getValue 2 | import androidx.compose.runtime.mutableStateOf 3 | import androidx.compose.runtime.setValue 4 | import androidx.compose.runtime.withFrameNanos 5 | import kotlin.math.roundToInt 6 | 7 | suspend fun withFpsCount(block: () -> Unit) { 8 | withFrameNanos { 9 | block() 10 | FPSCount.recordFrame(it) 11 | } 12 | } 13 | 14 | object FPSCount { 15 | private const val NANOS_PER_SECOND = 1_000_000_000.0 16 | 17 | private const val updateIntervalNanos = (1 * NANOS_PER_SECOND).toLong() 18 | 19 | // Instants are frame clock values. 20 | private var lastUpdateInstantNanos = 0L 21 | private var lastFrameInstantNanos: Long = 0L 22 | 23 | private val collectedFrameNanoDurations = mutableListOf() 24 | 25 | var average by mutableStateOf(0) 26 | 27 | fun recordFrame(frameInstantNanos: Long) { 28 | if (lastFrameInstantNanos != 0L) { 29 | collectedFrameNanoDurations.add(frameInstantNanos - lastFrameInstantNanos) 30 | } 31 | lastFrameInstantNanos = frameInstantNanos 32 | 33 | if ((frameInstantNanos - lastUpdateInstantNanos) 34 | >= updateIntervalNanos && collectedFrameNanoDurations.isNotEmpty() 35 | ) { 36 | average = (NANOS_PER_SECOND / collectedFrameNanoDurations.average()).roundToInt() 37 | collectedFrameNanoDurations.clear() 38 | lastUpdateInstantNanos = frameInstantNanos 39 | } 40 | } 41 | 42 | fun reset() { 43 | average = 0 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/Log.kt: -------------------------------------------------------------------------------- 1 | import kotlinx.datetime.Clock 2 | 3 | fun log(message: String) { 4 | println("${Clock.System.now()} – $message") 5 | } 6 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/Models.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.runtime.getValue 2 | import androidx.compose.runtime.mutableStateOf 3 | import androidx.compose.runtime.setValue 4 | import kotlin.random.Random 5 | 6 | class CellModel { 7 | var content by mutableStateOf(0) 8 | } 9 | 10 | class RowModel(columnCount: Int) { 11 | val cells = Array(columnCount) { CellModel() } 12 | } 13 | 14 | class GridModel(private val rowCount: Int, private val columnCount: Int = rowCount) { 15 | val rows = Array(rowCount) { RowModel(columnCount) } 16 | 17 | private fun cell(rowIndex: Int, columnIndex: Int) = rows[rowIndex].cells[columnIndex] 18 | 19 | fun updateSingleCell(updateTopRowOnly: Boolean) { 20 | val target = cell(if (updateTopRowOnly) 0 else Random.nextInt(rowCount), Random.nextInt(columnCount)) 21 | target.content = (target.content + 1).mod(10) 22 | } 23 | 24 | fun clear() { 25 | for (row in rows) { 26 | for (cell in row.cells) { 27 | cell.content = 0 28 | } 29 | } 30 | } 31 | 32 | override fun toString(): String = "${rowCount}x$columnCount (${rowCount * columnCount} cells)" 33 | } 34 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/RecomposeHighlighter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Google Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 | * except in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the 10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 | * KIND, either express or implied. See the License for the specific language governing 12 | * permissions and limitations under the License. 13 | */ 14 | 15 | import androidx.compose.runtime.LaunchedEffect 16 | import androidx.compose.runtime.Stable 17 | import androidx.compose.runtime.mutableStateOf 18 | import androidx.compose.runtime.remember 19 | import androidx.compose.ui.Modifier 20 | import androidx.compose.ui.composed 21 | import androidx.compose.ui.draw.drawWithCache 22 | import androidx.compose.ui.geometry.Offset 23 | import androidx.compose.ui.geometry.Size 24 | import androidx.compose.ui.graphics.Color 25 | import androidx.compose.ui.graphics.SolidColor 26 | import androidx.compose.ui.graphics.drawscope.Fill 27 | import androidx.compose.ui.graphics.drawscope.Stroke 28 | import androidx.compose.ui.graphics.lerp 29 | import androidx.compose.ui.platform.debugInspectorInfo 30 | import androidx.compose.ui.unit.dp 31 | import kotlinx.coroutines.delay 32 | import kotlin.math.min 33 | 34 | /** 35 | * A [Modifier] that draws a border around elements that are recomposing. The border increases in 36 | * size and interpolates from red to green as more recompositions occur before a timeout. 37 | */ 38 | @Stable 39 | fun Modifier.recomposeHighlighter(): Modifier = this.then(recomposeModifier) 40 | 41 | // Use a single instance + @Stable to ensure that recompositions can enable skipping optimizations 42 | // Modifier.composed will still remember unique data per call site. 43 | private val recomposeModifier = 44 | Modifier.composed(inspectorInfo = debugInspectorInfo { name = "recomposeHighlighter" }) { 45 | // The total number of compositions that have occurred. We're not using a State<> here be 46 | // able to read/write the value without invalidating (which would cause infinite 47 | // recomposition). 48 | val totalCompositions = remember { arrayOf(0L) } 49 | totalCompositions[0]++ 50 | 51 | // The value of totalCompositions at the last timeout. 52 | val totalCompositionsAtLastTimeout = remember { mutableStateOf(0L) } 53 | 54 | // Start the timeout, and reset everytime there's a recomposition. (Using totalCompositions 55 | // as the key is really just to cause the timer to restart every composition). 56 | LaunchedEffect(totalCompositions[0]) { 57 | delay(3000) 58 | totalCompositionsAtLastTimeout.value = totalCompositions[0] 59 | } 60 | 61 | Modifier.drawWithCache { 62 | onDrawWithContent { 63 | // Draw actual content. 64 | drawContent() 65 | 66 | if (!Configuration.recomposeHighlightingEnabled.value) return@onDrawWithContent 67 | 68 | // Below is to draw the highlight, if necessary. A lot of the logic is copied from 69 | // Modifier.border 70 | val numCompositionsSinceTimeout = 71 | totalCompositions[0] - totalCompositionsAtLastTimeout.value 72 | 73 | val hasValidBorderParams = size.minDimension > 0f 74 | if (!hasValidBorderParams || numCompositionsSinceTimeout <= 0) { 75 | return@onDrawWithContent 76 | } 77 | 78 | val (color, strokeWidthPx) = 79 | when (numCompositionsSinceTimeout) { 80 | // We need at least one composition to draw, so draw the smallest border 81 | // color in blue. 82 | 1L -> Color.Blue to 1f 83 | // 2 compositions is _probably_ okay. 84 | 2L -> Color.Green to 2.dp.toPx() 85 | // 3 or more compositions before timeout may indicate an issue. lerp the 86 | // color from yellow to red, and continually increase the border size. 87 | else -> { 88 | lerp( 89 | Color.Yellow.copy(alpha = 0.8f), 90 | Color.Red.copy(alpha = 0.5f), 91 | min(1f, (numCompositionsSinceTimeout - 1).toFloat() / 100f) 92 | ) to numCompositionsSinceTimeout.toInt().dp.toPx() 93 | } 94 | } 95 | 96 | val halfStroke = strokeWidthPx / 2 97 | val topLeft = Offset(halfStroke, halfStroke) 98 | val borderSize = Size(size.width - strokeWidthPx, size.height - strokeWidthPx) 99 | 100 | val fillArea = (strokeWidthPx * 2) > size.minDimension 101 | val rectTopLeft = if (fillArea) Offset.Zero else topLeft 102 | val size = if (fillArea) size else borderSize 103 | val style = if (fillArea) Fill else Stroke(strokeWidthPx) 104 | 105 | drawRect( 106 | brush = SolidColor(color), 107 | topLeft = rectTopLeft, 108 | size = size, 109 | style = style 110 | ) 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/ScrollView.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.foundation.HorizontalScrollbar 2 | import androidx.compose.foundation.VerticalScrollbar 3 | import androidx.compose.foundation.horizontalScroll 4 | import androidx.compose.foundation.layout.Box 5 | import androidx.compose.foundation.layout.fillMaxHeight 6 | import androidx.compose.foundation.layout.fillMaxSize 7 | import androidx.compose.foundation.layout.fillMaxWidth 8 | import androidx.compose.foundation.layout.padding 9 | import androidx.compose.foundation.rememberScrollState 10 | import androidx.compose.foundation.rememberScrollbarAdapter 11 | import androidx.compose.foundation.verticalScroll 12 | import androidx.compose.runtime.Composable 13 | import androidx.compose.ui.Alignment 14 | import androidx.compose.ui.Modifier 15 | import androidx.compose.ui.unit.dp 16 | 17 | @Composable 18 | fun ScrollView(content: @Composable () -> Unit) { 19 | Box(modifier = Modifier.fillMaxSize().padding(10.dp)) { 20 | val stateVertical = rememberScrollState(0) 21 | val stateHorizontal = rememberScrollState(0) 22 | 23 | Box( 24 | modifier = Modifier 25 | .fillMaxSize() 26 | .verticalScroll(stateVertical) 27 | .padding(end = 12.dp, bottom = 12.dp) 28 | .horizontalScroll(stateHorizontal) 29 | ) { 30 | content() 31 | } 32 | 33 | VerticalScrollbar( 34 | modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight(), 35 | adapter = rememberScrollbarAdapter(stateVertical) 36 | ) 37 | 38 | HorizontalScrollbar( 39 | modifier = Modifier.align(Alignment.BottomStart).fillMaxWidth().padding(end = 12.dp), 40 | adapter = rememberScrollbarAdapter(stateHorizontal) 41 | ) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/Views.kt: -------------------------------------------------------------------------------- 1 | @file:Suppress("ktlint:standard:function-naming") 2 | 3 | import androidx.compose.animation.AnimatedContent 4 | import androidx.compose.animation.slideInVertically 5 | import androidx.compose.animation.slideOutVertically 6 | import androidx.compose.animation.togetherWith 7 | import androidx.compose.foundation.border 8 | import androidx.compose.foundation.layout.Arrangement 9 | import androidx.compose.foundation.layout.Box 10 | import androidx.compose.foundation.layout.BoxWithConstraints 11 | import androidx.compose.foundation.layout.Column 12 | import androidx.compose.foundation.layout.Row 13 | import androidx.compose.foundation.layout.Spacer 14 | import androidx.compose.foundation.layout.size 15 | import androidx.compose.foundation.layout.width 16 | import androidx.compose.material.Button 17 | import androidx.compose.material.Checkbox 18 | import androidx.compose.material.MaterialTheme 19 | import androidx.compose.material.Text 20 | import androidx.compose.runtime.Composable 21 | import androidx.compose.runtime.LaunchedEffect 22 | import androidx.compose.runtime.MutableState 23 | import androidx.compose.runtime.State 24 | import androidx.compose.runtime.getValue 25 | import androidx.compose.runtime.key 26 | import androidx.compose.runtime.mutableStateOf 27 | import androidx.compose.runtime.remember 28 | import androidx.compose.runtime.rememberCoroutineScope 29 | import androidx.compose.runtime.setValue 30 | import androidx.compose.runtime.snapshotFlow 31 | import androidx.compose.ui.Alignment 32 | import androidx.compose.ui.Modifier 33 | import androidx.compose.ui.draw.drawWithContent 34 | import androidx.compose.ui.graphics.Color 35 | import androidx.compose.ui.unit.dp 36 | import kotlinx.coroutines.Job 37 | import kotlinx.coroutines.delay 38 | import kotlinx.coroutines.isActive 39 | import kotlinx.coroutines.launch 40 | import kotlinx.datetime.Clock 41 | import kotlinx.datetime.Instant 42 | import kotlin.time.Duration.Companion.milliseconds 43 | 44 | @Composable 45 | fun MainScene(title: String) { 46 | val selectedGrid = remember { mutableStateOf(null) } 47 | 48 | LaunchedEffect(selectedGrid.value) { 49 | log("Grid -> ${selectedGrid.value}") 50 | while (isActive) { 51 | drawSeries?.tryToFinish() 52 | delay(100.milliseconds) 53 | } 54 | } 55 | 56 | MaterialTheme { 57 | Column { 58 | Text(title, style = MaterialTheme.typography.h3) 59 | ScrollView { 60 | if (selectedGrid.value == null) { 61 | GridChoiceScene(selectedGrid) 62 | } else { 63 | GridScene(selectedGrid) 64 | } 65 | } 66 | } 67 | } 68 | } 69 | 70 | private val grids = listOf(25, 50, 75, 100, 200, 400).map { GridModel(it) } 71 | 72 | @Composable 73 | private fun GridChoiceScene(selectedGrid: MutableState) { 74 | Row { 75 | Column { 76 | for (grid in grids) { 77 | Button(onClick = { selectedGrid.value = grid }) { 78 | Text("$grid") 79 | } 80 | } 81 | } 82 | 83 | Spacer(Modifier.width(24.dp)) 84 | 85 | VerticalConfigurationSettings() 86 | } 87 | } 88 | 89 | @Composable 90 | private fun GridScene(selectedGrid: MutableState) { 91 | val topLevelRecompositionTrigger = remember { mutableStateOf(0) } 92 | val rowLevelRecompositionTrigger = remember { mutableStateOf(0) } 93 | val cellLevelRecompositionTrigger = remember { mutableStateOf(0) } 94 | 95 | val grid = selectedGrid.value ?: return 96 | 97 | // Avoiding an unresponsive UI by temporarily hiding the grid when switching the animation setting: 98 | // Provisioning lots of cells with animations stresses the slot table. Direct switching from an unprovisioned 99 | // grid to a provisioned one (and vice versa) is much slower than removing the first grid, wait for a slot 100 | // table update, then adding the second grid. 101 | var animationsEnabledAfterDelay by remember { mutableStateOf(Configuration.animationsEnabled.value) } 102 | val showGrid = ( 103 | !Configuration.gridHidingEnabled.value || 104 | (animationsEnabledAfterDelay == Configuration.animationsEnabled.value) 105 | ) 106 | LaunchedEffect(Unit) { 107 | snapshotFlow { Configuration.animationsEnabled.value }.collect { 108 | delay(200.milliseconds) // Wait for a slot table update 109 | animationsEnabledAfterDelay = it 110 | } 111 | } 112 | 113 | Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { 114 | ControlsAndInfo( 115 | selectedGrid, 116 | topLevelRecompositionTrigger, 117 | rowLevelRecompositionTrigger, 118 | cellLevelRecompositionTrigger 119 | ) 120 | 121 | if (showGrid) { 122 | key(Configuration.gridGenerationId) { 123 | Grid( 124 | grid, 125 | topLevelRecompositionTrigger, 126 | rowLevelRecompositionTrigger, 127 | cellLevelRecompositionTrigger 128 | ) 129 | } 130 | } 131 | } 132 | } 133 | 134 | @Composable 135 | private fun ControlsAndInfo( 136 | selectedGrid: MutableState, 137 | topLevelRecompositionTrigger: MutableState, 138 | rowLevelRecompositionTrigger: MutableState, 139 | cellLevelRecompositionTrigger: MutableState 140 | ) { 141 | val grid = selectedGrid.value!! 142 | 143 | var configurationVisible by remember { mutableStateOf(false) } 144 | val gridUpdateScope = rememberCoroutineScope() 145 | var gridUpdateJob by remember { mutableStateOf(null) } 146 | var startMoment by remember { mutableStateOf(null) } 147 | 148 | fun startOrStop() { 149 | if (gridUpdateJob == null) { 150 | gridUpdateJob = 151 | gridUpdateScope.launch { 152 | log("Starting") 153 | startMoment = Clock.System.now() 154 | try { 155 | while (isActive) { 156 | withFpsCount { 157 | grid.updateSingleCell(Configuration.updateTopRowOnlyEnabled.value) 158 | } 159 | // Force recomposition by changing state on every update. 160 | if (Configuration.topLevelRecompositionForced.value) topLevelRecompositionTrigger.value++ 161 | if (Configuration.rowLevelRecompositionForced.value) rowLevelRecompositionTrigger.value++ 162 | if (Configuration.cellLevelRecompositionForced.value) cellLevelRecompositionTrigger.value++ 163 | if (Configuration.pauseOnEachStep.value) { 164 | delay(100.milliseconds) 165 | } 166 | } 167 | } finally { 168 | log("Stopping") 169 | } 170 | } 171 | } else { 172 | gridUpdateJob?.cancel() 173 | gridUpdateJob = null 174 | startMoment = null 175 | } 176 | } 177 | 178 | Row(horizontalArrangement = Arrangement.spacedBy(12.dp)) { 179 | Button(onClick = { selectedGrid.value = null }) { 180 | Text("Back") 181 | } 182 | Button(onClick = { startOrStop() }) { 183 | Text(if (startMoment == null) "Start" else "Stop") 184 | } 185 | Button(onClick = { grid.clear() }) { 186 | Text("Clear") 187 | } 188 | Button(onClick = { configurationVisible = !configurationVisible }) { 189 | Text(if (configurationVisible) "Hide Configuration" else "Show Configuration") 190 | } 191 | } 192 | 193 | Info(grid, startMoment, configurationVisible) 194 | } 195 | 196 | @Composable 197 | private fun Grid( 198 | grid: GridModel, 199 | topLevelRecompositionTrigger: State, 200 | rowLevelRecompositionTrigger: State, 201 | cellLevelRecompositionTrigger: State 202 | ) { 203 | sinkHole(topLevelRecompositionTrigger.value) 204 | Box(Modifier.recomposeHighlighter().border(1.dp, color = Color.LightGray)) { 205 | Column { 206 | for (row in grid.rows) { 207 | ConditionalBoxWithConstraints { 208 | Row(modifier = Modifier.recomposeHighlighter()) { 209 | sinkHole(rowLevelRecompositionTrigger.value) 210 | for (cell in row.cells) { 211 | Cell(cell, cellLevelRecompositionTrigger) 212 | } 213 | } 214 | } 215 | } 216 | } 217 | } 218 | } 219 | 220 | @Composable 221 | private fun ConditionalBoxWithConstraints(content: @Composable () -> Unit) { 222 | if (Configuration.boxWithConstraintsPerRowEnabled.value) { 223 | BoxWithConstraints { 224 | content() 225 | } 226 | } else { 227 | content() 228 | } 229 | } 230 | 231 | @Composable 232 | private fun Cell( 233 | cell: CellModel, 234 | cellLevelRecompositionTrigger: State 235 | ) { 236 | fun Modifier.drawSupervised() = 237 | drawWithContent { 238 | drawSeries?.addCellOperation() 239 | if (Configuration.cellTextDrawingEnabled.value) { 240 | drawContent() 241 | } 242 | } 243 | 244 | Box( 245 | Modifier.size(22.dp).recomposeHighlighter().border(1.dp, color = Color.LightGray), 246 | contentAlignment = Alignment.Center 247 | ) { 248 | sinkHole(cellLevelRecompositionTrigger.value) 249 | if (Configuration.animationsEnabled.value) { 250 | AnimatedContent( 251 | cell.content, 252 | modifier = Modifier.drawSupervised(), 253 | transitionSpec = { 254 | slideInVertically { height -> height } togetherWith 255 | slideOutVertically { height -> -height } 256 | } 257 | ) { 258 | CellText(it) 259 | } 260 | } else { 261 | CellText(cell.content, modifier = Modifier.drawSupervised()) 262 | } 263 | } 264 | } 265 | 266 | /** Consumes a value in a fashion the compiler (hopefully) would not identify as a no-op (and optimize away). */ 267 | private fun sinkHole(value: T) { 268 | require(value.toString().isNotEmpty()) 269 | } 270 | 271 | @Composable 272 | private fun CellText( 273 | cellContent: Int, 274 | modifier: Modifier = Modifier 275 | ) { 276 | Text(if (cellContent != 0) "$cellContent" else "", modifier = modifier, style = MaterialTheme.typography.h6) 277 | } 278 | 279 | @Composable 280 | private fun Info( 281 | grid: GridModel, 282 | startMoment: Instant?, 283 | showConfiguration: Boolean 284 | ) { 285 | var secondsElapsed by remember { mutableStateOf(0L) } 286 | 287 | if (startMoment != null) { 288 | LaunchedEffect(startMoment) { 289 | FPSCount.reset() 290 | while (isActive) { 291 | delay(100.milliseconds) 292 | secondsElapsed = (Clock.System.now() - startMoment).inWholeSeconds 293 | } 294 | } 295 | } 296 | 297 | if (showConfiguration) { 298 | HorizontalConfigurationSettings() 299 | } 300 | 301 | Text("Grid: $grid, $secondsElapsed s, ${FPSCount.average} FPS") 302 | } 303 | 304 | @Composable 305 | private fun HorizontalConfigurationSettings() { 306 | Column { 307 | Configuration.elements.chunked(4).forEach { elements -> 308 | Row(verticalAlignment = Alignment.CenterVertically) { 309 | elements.forEach { 310 | ConfigurationFlag(it) 311 | } 312 | } 313 | } 314 | } 315 | } 316 | 317 | @Composable 318 | private fun VerticalConfigurationSettings() { 319 | Column { 320 | Configuration.elements.forEach { 321 | ConfigurationFlag(it) 322 | } 323 | } 324 | } 325 | 326 | @Composable 327 | private fun ConfigurationFlag(element: Configuration.Element) { 328 | Row(verticalAlignment = Alignment.CenterVertically) { 329 | Checkbox(element.value, onCheckedChange = { element.value = it }) 330 | Text(element.label) 331 | } 332 | } 333 | -------------------------------------------------------------------------------- /src/jsMain/kotlin/Main.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.ui.ExperimentalComposeUiApi 2 | import androidx.compose.ui.window.CanvasBasedWindow 3 | import org.jetbrains.skiko.wasm.onWasmReady 4 | 5 | fun main() { 6 | onWasmReady { 7 | val title = "Compose Counting Grid on plain JS" 8 | @OptIn(ExperimentalComposeUiApi::class) 9 | CanvasBasedWindow(title, canvasElementId = "ComposeTarget") { 10 | MainScene(title) 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/jsMain/resources/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/jvmMain/kotlin/Main.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.ui.unit.dp 2 | import androidx.compose.ui.window.WindowState 3 | import androidx.compose.ui.window.singleWindowApplication 4 | 5 | fun main() { 6 | System.setProperty("skiko.vsync.enabled", "false") // allow high-speed refresh beyond monitor frame rates 7 | 8 | val title = "Compose Counting Grid" 9 | singleWindowApplication( 10 | title = title, 11 | state = WindowState(width = 800.dp, height = 800.dp) 12 | ) { 13 | MainScene(title) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/wasmJsMain/kotlin/Main.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.ui.ExperimentalComposeUiApi 2 | import androidx.compose.ui.window.CanvasBasedWindow 3 | 4 | fun main() { 5 | val title = "Compose Counting Grid on JS/Wasm" 6 | @OptIn(ExperimentalComposeUiApi::class) 7 | CanvasBasedWindow(title, canvasElementId = "ComposeTarget") { 8 | MainScene(title) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/wasmJsMain/resources/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | ⚠️ This page using experimental Kotlin/Wasm requires. 19 |
    20 |
  • Chrome version >= 119, or
  • 21 |
  • Firefox version >= 120
  • 22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /src/wasmJsMain/resources/load.mjs: -------------------------------------------------------------------------------- 1 | import { instantiate } from './app.uninstantiated.mjs'; 2 | 3 | await wasmSetup; 4 | 5 | instantiate({ skia: Module['asm'] }); 6 | -------------------------------------------------------------------------------- /versions.properties: -------------------------------------------------------------------------------- 1 | # suppress inspection "IncorrectFormatting" for whole file 2 | #### Dependencies and Plugin versions with their available updates. 3 | #### Generated by `./gradlew refreshVersions` version 0.60.3 4 | #### 5 | #### Don't manually edit or split the comments that start with four hashtags (####), 6 | #### they will be overwritten by refreshVersions. 7 | #### 8 | #### suppress inspection "SpellCheckingInspection" for whole file 9 | #### suppress inspection "UnusedProperty" for whole file 10 | -------------------------------------------------------------------------------- /webpack.config.d/wasmBoilerplate.js: -------------------------------------------------------------------------------- 1 | // WORKAROUND js-joda 2 | // https://kotlinlang.slack.com/archives/C01F2HV7868/p1698763134178559?thread_ts=1698759778.446179&cid=C01F2HV7868 3 | config.resolve ?? (config.resolve = {}); 4 | config.resolve.alias ?? (config.resolve.alias = {}); 5 | config.resolve.alias.skia = false; 6 | --------------------------------------------------------------------------------