├── .editorconfig ├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ ├── check.yml │ ├── deploy.yml │ └── setup-gradle │ └── action.yml ├── .gitignore ├── LICENSE ├── README.md ├── api └── semver.api ├── build.gradle.kts ├── config └── detekt │ └── detekt.yml ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── kotlin-js-store └── yarn.lock ├── renovate.json ├── settings.gradle.kts └── src ├── commonMain └── kotlin │ └── net │ └── swiftzer │ └── semver │ ├── SemVer.kt │ └── SemVerSerializer.kt └── commonTest └── kotlin └── net └── swiftzer └── semver ├── SemVerSerializerTest.kt └── SemVerTest.kt /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*.{java,kt,kts,md,xml,aidl,gradle,properties,html,json,yml,yaml,toml}] 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | indent_style = space 9 | indent_size = 4 10 | charset = utf-8 11 | 12 | [*.{kt,kts}] 13 | max_line_length = 120 14 | ij_kotlin_allow_trailing_comma_on_call_site = true 15 | ij_kotlin_allow_trailing_comma = true 16 | ij_kotlin_packages_to_use_import_on_demand = nothing 17 | 18 | [*.{html,json,yml,yaml}] 19 | indent_size = 2 20 | max_line_length = 120 21 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | gradlew eol=lf 2 | *.bat eol=crlf 3 | *.kt eol=lf 4 | *.kts eol=lf 5 | *.yml eol=lf 6 | *.yaml eol=lf 7 | *.toml eol=lf 8 | *.md eol=lf 9 | *.api eol=lf -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: / 5 | schedule: 6 | interval: weekly 7 | commit-message: 8 | prefix: build 9 | - package-ecosystem: gradle 10 | directory: / 11 | schedule: 12 | interval: weekly 13 | commit-message: 14 | prefix: build 15 | -------------------------------------------------------------------------------- /.github/workflows/check.yml: -------------------------------------------------------------------------------- 1 | name: Check 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | merge_group: 9 | workflow_dispatch: 10 | 11 | concurrency: 12 | group: ${{ github.workflow }}-${{ github.ref }} 13 | cancel-in-progress: true 14 | 15 | jobs: 16 | check: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | 22 | - uses: ./.github/workflows/setup-gradle 23 | 24 | - name: Kotlin binary compatibility validator 25 | run: ./gradlew apiCheck 26 | 27 | - name: Detekt 28 | run: ./gradlew detektAll 29 | 30 | test: 31 | strategy: 32 | matrix: 33 | config: [ 34 | { os: ubuntu-latest, tasks: jvmTest jsTest linuxX64Test wasmJsNodeTest }, 35 | { os: windows-latest, tasks: mingwX64Test }, 36 | { os: macos-latest, tasks: iosSimulatorArm64Test iosX64Test macosArm64Test macosX64Test tvosSimulatorArm64Test tvosX64Test watchosSimulatorArm64Test watchosX64Test }, 37 | ] 38 | name: test (${{ matrix.config.os }}) 39 | runs-on: ${{ matrix.config.os }} 40 | steps: 41 | - name: Checkout 42 | uses: actions/checkout@v4 43 | 44 | - uses: ./.github/workflows/setup-gradle 45 | 46 | - name: Unit test on ${{ matrix.config.os }} 47 | run: ./gradlew ${{ matrix.config.tasks }} 48 | 49 | - name: Upload test reports 50 | if: failure() 51 | uses: actions/upload-artifact@v4 52 | with: 53 | name: test-reports 54 | path: '**/build/reports/tests' 55 | retention-days: 7 56 | 57 | coverage: 58 | runs-on: ubuntu-latest 59 | needs: [ test ] 60 | steps: 61 | - name: Checkout 62 | uses: actions/checkout@v4 63 | 64 | - uses: ./.github/workflows/setup-gradle 65 | 66 | - name: Kover 67 | run: ./gradlew koverXmlReport 68 | 69 | - name: Upload coverage reports to Codecov 70 | uses: codecov/codecov-action@v5 71 | with: 72 | directory: ./build/reports/kover 73 | files: ./report.xml 74 | env: 75 | CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} 76 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | repo: 7 | type: choice 8 | description: Publish to which repository 9 | default: snapshot 10 | required: true 11 | options: 12 | - snapshot 13 | - staging 14 | 15 | concurrency: 16 | group: ${{ github.workflow }}-${{ github.ref }} 17 | cancel-in-progress: true 18 | 19 | permissions: 20 | contents: read 21 | pages: write 22 | id-token: write 23 | 24 | jobs: 25 | snapshot: 26 | if: ${{ github.event.inputs.repo == 'snapshot' }} 27 | runs-on: macos-latest 28 | env: 29 | ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }} 30 | ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} 31 | ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_KEY }} 32 | ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }} 33 | versionSuffix: SNAPSHOT 34 | steps: 35 | - name: Checkout 36 | uses: actions/checkout@v4 37 | 38 | - uses: ./.github/workflows/setup-gradle 39 | 40 | - name: Publish to Central Portal Snapshots 41 | run: ./gradlew publishAllPublicationsToMavenCentralRepository 42 | 43 | staging: 44 | if: ${{ github.event.inputs.repo == 'staging' }} 45 | runs-on: macos-latest 46 | env: 47 | ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }} 48 | ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} 49 | ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_KEY }} 50 | ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }} 51 | steps: 52 | - name: Checkout 53 | uses: actions/checkout@v4 54 | 55 | - uses: ./.github/workflows/setup-gradle 56 | 57 | - name: Publish to Central Portal 58 | run: ./gradlew publishToMavenCentral 59 | 60 | docs: 61 | runs-on: ubuntu-latest 62 | needs: staging 63 | steps: 64 | - name: Checkout 65 | uses: actions/checkout@v4 66 | 67 | - uses: ./.github/workflows/setup-gradle 68 | 69 | - name: Dokka 70 | run: ./gradlew :dokkaGenerate 71 | 72 | - name: Upload Dokka docs to GitHub Pages 73 | uses: actions/upload-pages-artifact@v3 74 | with: 75 | path: ${{ github.workspace }}/build/dokka/html 76 | 77 | - name: Deploy to GitHub Pages 78 | uses: actions/deploy-pages@v4 79 | -------------------------------------------------------------------------------- /.github/workflows/setup-gradle/action.yml: -------------------------------------------------------------------------------- 1 | name: Setup Gradle 2 | description: Setup Gradle and JDK 3 | runs: 4 | using: composite 5 | steps: 6 | - name: Check Gradle wrapper 7 | uses: gradle/wrapper-validation-action@v2 8 | 9 | - name: Setup JDK 10 | uses: actions/setup-java@v4 11 | with: 12 | distribution: microsoft 13 | java-version: '17' 14 | 15 | - name: Setup Gradle 16 | uses: gradle/actions/setup-gradle@v3 17 | with: 18 | dependency-graph: generate-and-submit 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### Intellij ### 2 | .idea/ 3 | *.iml 4 | *.ipr 5 | 6 | ### Gradle ### 7 | .gradle 8 | **/build/ 9 | publishing.properties 10 | 11 | # Ignore Gradle GUI config 12 | gradle-app.setting 13 | 14 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) 15 | !gradle-wrapper.jar 16 | 17 | # Cache of project 18 | .gradletasknamecache 19 | 20 | ### Kotlin ### 21 | .kotlin 22 | 23 | ### OSX ### 24 | *.DS_Store 25 | .AppleDouble 26 | .LSOverride 27 | 28 | # Icon must end with two \r 29 | Icon 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | .com.apple.timemachine.donotpresent 42 | 43 | # Directories potentially created on remote AFP share 44 | .AppleDB 45 | .AppleDesktop 46 | Network Trash Folder 47 | Temporary Items 48 | .apdisk 49 | 50 | ### Windows ### 51 | # Windows thumbnail cache files 52 | Thumbs.db 53 | ehthumbs.db 54 | ehthumbs_vista.db 55 | 56 | # Folder config file 57 | Desktop.ini 58 | 59 | # Recycle Bin used on file shares 60 | $RECYCLE.BIN/ 61 | 62 | # Windows Installer files 63 | *.cab 64 | *.msi 65 | *.msm 66 | *.msp 67 | 68 | # Windows shortcuts 69 | *.lnk 70 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Eric Li 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SemVer 2 | 3 | [![codecov](https://codecov.io/gh/swiftzer/semver/graph/badge.svg?token=iJ3CY95nl6)](https://codecov.io/gh/swiftzer/semver) 4 | 5 | Kotlin data class for [Semantic Versioning 2.0.0](http://semver.org/spec/v2.0.0.html) specification with 6 | [Kotlin Multiplatform](https://kotlinlang.org/docs/multiplatform-get-started.html) 7 | and [Kotlin Serialization](https://kotlinlang.org/docs/serialization.html) support. 8 | 9 | Support parsing version number string and comparing version numbers using `Comparable` interface. 10 | 11 | ## Installation 12 | 13 | Gradle 14 | 15 | ```kotlin 16 | repositories { 17 | mavenCentral() 18 | } 19 | 20 | dependencies { 21 | implementation("net.swiftzer.semver:semver:2.1.0") 22 | } 23 | ``` 24 | 25 | ## Usage 26 | 27 | Parsing version number 28 | 29 | ```kotlin 30 | val version: SemVer = SemVer.parse("1.0.0-beta+exp.sha.5114f85") 31 | 32 | version.major // 1 33 | version.minor // 0 34 | version.patch // 0 35 | version.preRelease // "beta" 36 | version.buildMetadata // "exp.sha.5114f85" 37 | ``` 38 | 39 | Comparing version numbers 40 | 41 | ```kotlin 42 | val semVer1 = SemVer(1, 0, 0) 43 | val semVer2 = SemVer(1, 0, 2) 44 | assertTrue(semVer1 < semVer2) 45 | ``` 46 | 47 | Creating next version numbers 48 | 49 | ```kotlin 50 | val semVer = SemVer(1, 3, 5) 51 | assertEquals(SemVer(1, 3, 6), semVer.nextPatch()) 52 | assertEquals(SemVer(1, 4, 0), semVer.nextMinor()) 53 | assertEquals(SemVer(2, 0, 0), semVer.nextMajor()) 54 | ``` 55 | -------------------------------------------------------------------------------- /api/semver.api: -------------------------------------------------------------------------------- 1 | public final class net/swiftzer/semver/SemVer : java/lang/Comparable { 2 | public static final field Companion Lnet/swiftzer/semver/SemVer$Companion; 3 | public fun (IIILjava/lang/String;Ljava/lang/String;)V 4 | public synthetic fun (IIILjava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V 5 | public synthetic fun compareTo (Ljava/lang/Object;)I 6 | public fun compareTo (Lnet/swiftzer/semver/SemVer;)I 7 | public final fun component1 ()I 8 | public final fun component2 ()I 9 | public final fun component3 ()I 10 | public final fun component4 ()Ljava/lang/String; 11 | public final fun component5 ()Ljava/lang/String; 12 | public final fun copy (IIILjava/lang/String;Ljava/lang/String;)Lnet/swiftzer/semver/SemVer; 13 | public static synthetic fun copy$default (Lnet/swiftzer/semver/SemVer;IIILjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lnet/swiftzer/semver/SemVer; 14 | public fun equals (Ljava/lang/Object;)Z 15 | public final fun getBuildMetadata ()Ljava/lang/String; 16 | public final fun getMajor ()I 17 | public final fun getMinor ()I 18 | public final fun getPatch ()I 19 | public final fun getPreRelease ()Ljava/lang/String; 20 | public fun hashCode ()I 21 | public final fun isInitialDevelopmentPhase ()Z 22 | public final fun nextMajor ()Lnet/swiftzer/semver/SemVer; 23 | public final fun nextMinor ()Lnet/swiftzer/semver/SemVer; 24 | public final fun nextPatch ()Lnet/swiftzer/semver/SemVer; 25 | public static final fun parse (Ljava/lang/String;)Lnet/swiftzer/semver/SemVer; 26 | public static final fun parseOrNull (Ljava/lang/String;)Lnet/swiftzer/semver/SemVer; 27 | public fun toString ()Ljava/lang/String; 28 | } 29 | 30 | public final class net/swiftzer/semver/SemVer$Companion { 31 | public final fun parse (Ljava/lang/String;)Lnet/swiftzer/semver/SemVer; 32 | public final fun parseOrNull (Ljava/lang/String;)Lnet/swiftzer/semver/SemVer; 33 | public final fun serializer ()Lkotlinx/serialization/KSerializer; 34 | } 35 | 36 | public final class net/swiftzer/semver/SemVerSerializer : kotlinx/serialization/KSerializer { 37 | public static final field INSTANCE Lnet/swiftzer/semver/SemVerSerializer; 38 | public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; 39 | public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lnet/swiftzer/semver/SemVer; 40 | public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; 41 | public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V 42 | public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lnet/swiftzer/semver/SemVer;)V 43 | } 44 | 45 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | @file:OptIn(ExperimentalWasmDsl::class) 2 | 3 | import com.vanniktech.maven.publish.SonatypeHost 4 | import io.gitlab.arturbosch.detekt.Detekt 5 | import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl 6 | import org.jetbrains.kotlin.gradle.dsl.JvmTarget 7 | import java.io.FileInputStream 8 | import java.util.Properties 9 | 10 | plugins { 11 | alias(libs.plugins.kotlin.multiplatform) 12 | alias(libs.plugins.kotlinx.binaryCompatibilityValidator) 13 | alias(libs.plugins.kotlinx.serialization) 14 | alias(libs.plugins.dokka) 15 | alias(libs.plugins.kover) 16 | alias(libs.plugins.detekt) 17 | alias(libs.plugins.burst) 18 | alias(libs.plugins.gradleMavenPublish) 19 | } 20 | 21 | val publishingPropertiesFile: File = rootProject.file("publishing.properties") 22 | val publishingProperties = Properties() 23 | if (publishingPropertiesFile.exists()) { 24 | publishingProperties.load(FileInputStream(publishingPropertiesFile)) 25 | } 26 | 27 | kotlin { 28 | explicitApi() 29 | 30 | jvm { 31 | compilerOptions.jvmTarget = JvmTarget.JVM_1_8 32 | testRuns["test"].executionTask.configure { 33 | useJUnitPlatform() 34 | } 35 | } 36 | 37 | js(IR) { 38 | browser() 39 | nodejs() 40 | } 41 | 42 | wasmJs { 43 | nodejs() 44 | binaries.executable() 45 | } 46 | 47 | mingwX64() 48 | 49 | linuxX64() 50 | linuxArm64() 51 | 52 | macosX64() 53 | macosArm64() 54 | 55 | iosArm64() 56 | iosX64() 57 | iosSimulatorArm64() 58 | 59 | watchosX64() 60 | watchosArm32() 61 | watchosArm64() 62 | watchosSimulatorArm64() 63 | 64 | tvosX64() 65 | tvosArm64() 66 | tvosSimulatorArm64() 67 | 68 | watchosX64() 69 | watchosArm32() 70 | watchosArm64() 71 | watchosSimulatorArm64() 72 | watchosDeviceArm64() 73 | 74 | applyDefaultHierarchyTemplate() 75 | 76 | sourceSets { 77 | commonMain.dependencies { 78 | implementation(libs.kotlinx.serialization.core) 79 | } 80 | commonTest.dependencies { 81 | implementation(libs.kotlin.test) 82 | implementation(libs.kotest.assertionsCore) 83 | implementation(libs.kotlinx.serialization.json) 84 | } 85 | jvmTest.dependencies { 86 | implementation(libs.kotlin.test.junit5) 87 | } 88 | } 89 | } 90 | 91 | dokka { 92 | dokkaSourceSets.configureEach { 93 | sourceLink { 94 | val relPath = rootProject.projectDir.toPath().relativize(projectDir.toPath()) 95 | localDirectory.set(project.file("src")) 96 | remoteUrl("https://github.com/swiftzer/semver/tree/main/$relPath/src") 97 | remoteLineSuffix.set("#L") 98 | } 99 | } 100 | } 101 | 102 | mavenPublishing { 103 | publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL) 104 | signAllPublications() 105 | coordinates( 106 | groupId = "net.swiftzer.semver", 107 | artifactId = "semver", 108 | version = buildString { 109 | append("2.1.0") 110 | val suffix = getProperty("versionSuffix") 111 | if (suffix != null) { 112 | append("-") 113 | append(suffix) 114 | } 115 | }, 116 | ) 117 | pom { 118 | name.set("SemVer") 119 | description.set("Kotlin data class for Semantic Versioning 2.0.0") 120 | inceptionYear.set("2017") 121 | url.set("https://github.com/swiftzer/semver") 122 | licenses { 123 | license { 124 | name.set("MIT License") 125 | url.set("https://opensource.org/licenses/MIT") 126 | distribution.set("https://opensource.org/licenses/MIT") 127 | } 128 | } 129 | developers { 130 | developer { 131 | id.set("ericksli") 132 | name.set("Eric Li") 133 | email.set("eric@swiftzer.net") 134 | } 135 | } 136 | scm { 137 | url.set("https://github.com/swiftzer/semver/tree/main") 138 | connection.set("scm:git:ssh://github.com/swiftzer/semver.git") 139 | developerConnection.set("scm:git:ssh://github.com/swiftzer/semver.git") 140 | } 141 | } 142 | } 143 | 144 | tasks.register("detektAll") { 145 | group = "verification" 146 | dependsOn(tasks.withType()) 147 | } 148 | 149 | fun getProperty(propertyName: String): String? = 150 | providers.environmentVariable(propertyName).orNull ?: publishingProperties.getProperty(propertyName) 151 | -------------------------------------------------------------------------------- /config/detekt/detekt.yml: -------------------------------------------------------------------------------- 1 | build: 2 | maxIssues: 0 3 | excludeCorrectable: false 4 | weights: 5 | # complexity: 2 6 | # LongParameterList: 1 7 | # style: 1 8 | # comments: 1 9 | 10 | config: 11 | validation: true 12 | warningsAsErrors: false 13 | checkExhaustiveness: false 14 | # when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]' 15 | excludes: '' 16 | 17 | processors: 18 | active: true 19 | exclude: 20 | - 'DetektProgressListener' 21 | # - 'KtFileCountProcessor' 22 | # - 'PackageCountProcessor' 23 | # - 'ClassCountProcessor' 24 | # - 'FunctionCountProcessor' 25 | # - 'PropertyCountProcessor' 26 | # - 'ProjectComplexityProcessor' 27 | # - 'ProjectCognitiveComplexityProcessor' 28 | # - 'ProjectLLOCProcessor' 29 | # - 'ProjectCLOCProcessor' 30 | # - 'ProjectLOCProcessor' 31 | # - 'ProjectSLOCProcessor' 32 | # - 'LicenseHeaderLoaderExtension' 33 | 34 | console-reports: 35 | active: true 36 | exclude: 37 | - 'ProjectStatisticsReport' 38 | - 'ComplexityReport' 39 | - 'NotificationReport' 40 | - 'FindingsReport' 41 | - 'FileBasedFindingsReport' 42 | # - 'LiteFindingsReport' 43 | 44 | output-reports: 45 | active: true 46 | exclude: 47 | # - 'TxtOutputReport' 48 | # - 'XmlOutputReport' 49 | # - 'HtmlOutputReport' 50 | # - 'MdOutputReport' 51 | # - 'SarifOutputReport' 52 | 53 | comments: 54 | active: true 55 | AbsentOrWrongFileLicense: 56 | active: false 57 | licenseTemplateFile: 'license.template' 58 | licenseTemplateIsRegex: false 59 | CommentOverPrivateFunction: 60 | active: false 61 | CommentOverPrivateProperty: 62 | active: false 63 | DeprecatedBlockTag: 64 | active: false 65 | EndOfSentenceFormat: 66 | active: false 67 | endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' 68 | KDocReferencesNonPublicProperty: 69 | active: false 70 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 71 | OutdatedDocumentation: 72 | active: false 73 | matchTypeParameters: true 74 | matchDeclarationsOrder: true 75 | allowParamOnConstructorProperties: false 76 | UndocumentedPublicClass: 77 | active: false 78 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 79 | searchInNestedClass: true 80 | searchInInnerClass: true 81 | searchInInnerObject: true 82 | searchInInnerInterface: true 83 | searchInProtectedClass: false 84 | UndocumentedPublicFunction: 85 | active: false 86 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 87 | searchProtectedFunction: false 88 | UndocumentedPublicProperty: 89 | active: false 90 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 91 | searchProtectedProperty: false 92 | 93 | complexity: 94 | active: true 95 | CognitiveComplexMethod: 96 | active: false 97 | threshold: 15 98 | ComplexCondition: 99 | active: true 100 | threshold: 4 101 | ComplexInterface: 102 | active: false 103 | threshold: 10 104 | includeStaticDeclarations: false 105 | includePrivateDeclarations: false 106 | ignoreOverloaded: false 107 | CyclomaticComplexMethod: 108 | active: true 109 | threshold: 15 110 | ignoreSingleWhenExpression: false 111 | ignoreSimpleWhenEntries: false 112 | ignoreNestingFunctions: false 113 | nestingFunctions: 114 | - 'also' 115 | - 'apply' 116 | - 'forEach' 117 | - 'isNotNull' 118 | - 'ifNull' 119 | - 'let' 120 | - 'run' 121 | - 'use' 122 | - 'with' 123 | LabeledExpression: 124 | active: false 125 | ignoredLabels: [] 126 | LargeClass: 127 | active: true 128 | threshold: 600 129 | LongMethod: 130 | active: true 131 | threshold: 60 132 | LongParameterList: 133 | active: true 134 | functionThreshold: 6 135 | constructorThreshold: 7 136 | ignoreDefaultParameters: false 137 | ignoreDataClasses: true 138 | ignoreAnnotatedParameter: [] 139 | MethodOverloading: 140 | active: false 141 | threshold: 6 142 | NamedArguments: 143 | active: false 144 | threshold: 3 145 | ignoreArgumentsMatchingNames: false 146 | NestedBlockDepth: 147 | active: true 148 | threshold: 4 149 | NestedScopeFunctions: 150 | active: false 151 | threshold: 1 152 | functions: 153 | - 'kotlin.apply' 154 | - 'kotlin.run' 155 | - 'kotlin.with' 156 | - 'kotlin.let' 157 | - 'kotlin.also' 158 | ReplaceSafeCallChainWithRun: 159 | active: false 160 | StringLiteralDuplication: 161 | active: false 162 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 163 | threshold: 3 164 | ignoreAnnotation: true 165 | excludeStringsWithLessThan5Characters: true 166 | ignoreStringsRegex: '$^' 167 | TooManyFunctions: 168 | active: true 169 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 170 | thresholdInFiles: 11 171 | thresholdInClasses: 11 172 | thresholdInInterfaces: 11 173 | thresholdInObjects: 11 174 | thresholdInEnums: 11 175 | ignoreDeprecated: false 176 | ignorePrivate: false 177 | ignoreOverridden: false 178 | 179 | coroutines: 180 | active: true 181 | GlobalCoroutineUsage: 182 | active: false 183 | InjectDispatcher: 184 | active: true 185 | dispatcherNames: 186 | - 'IO' 187 | - 'Default' 188 | - 'Unconfined' 189 | RedundantSuspendModifier: 190 | active: true 191 | SleepInsteadOfDelay: 192 | active: true 193 | SuspendFunSwallowedCancellation: 194 | active: false 195 | SuspendFunWithCoroutineScopeReceiver: 196 | active: false 197 | SuspendFunWithFlowReturnType: 198 | active: true 199 | 200 | empty-blocks: 201 | active: true 202 | EmptyCatchBlock: 203 | active: true 204 | allowedExceptionNameRegex: '_|(ignore|expected).*' 205 | EmptyClassBlock: 206 | active: true 207 | EmptyDefaultConstructor: 208 | active: true 209 | EmptyDoWhileBlock: 210 | active: true 211 | EmptyElseBlock: 212 | active: true 213 | EmptyFinallyBlock: 214 | active: true 215 | EmptyForBlock: 216 | active: true 217 | EmptyFunctionBlock: 218 | active: true 219 | ignoreOverridden: false 220 | EmptyIfBlock: 221 | active: true 222 | EmptyInitBlock: 223 | active: true 224 | EmptyKtFile: 225 | active: true 226 | EmptySecondaryConstructor: 227 | active: true 228 | EmptyTryBlock: 229 | active: true 230 | EmptyWhenBlock: 231 | active: true 232 | EmptyWhileBlock: 233 | active: true 234 | 235 | exceptions: 236 | active: true 237 | ExceptionRaisedInUnexpectedLocation: 238 | active: true 239 | methodNames: 240 | - 'equals' 241 | - 'finalize' 242 | - 'hashCode' 243 | - 'toString' 244 | InstanceOfCheckForException: 245 | active: true 246 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 247 | NotImplementedDeclaration: 248 | active: false 249 | ObjectExtendsThrowable: 250 | active: false 251 | PrintStackTrace: 252 | active: true 253 | RethrowCaughtException: 254 | active: true 255 | ReturnFromFinally: 256 | active: true 257 | ignoreLabeled: false 258 | SwallowedException: 259 | active: true 260 | ignoredExceptionTypes: 261 | - 'InterruptedException' 262 | - 'MalformedURLException' 263 | - 'NumberFormatException' 264 | - 'ParseException' 265 | allowedExceptionNameRegex: '_|(ignore|expected).*' 266 | ThrowingExceptionFromFinally: 267 | active: true 268 | ThrowingExceptionInMain: 269 | active: false 270 | ThrowingExceptionsWithoutMessageOrCause: 271 | active: true 272 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 273 | exceptions: 274 | - 'ArrayIndexOutOfBoundsException' 275 | - 'Exception' 276 | - 'IllegalArgumentException' 277 | - 'IllegalMonitorStateException' 278 | - 'IllegalStateException' 279 | - 'IndexOutOfBoundsException' 280 | - 'NullPointerException' 281 | - 'RuntimeException' 282 | - 'Throwable' 283 | ThrowingNewInstanceOfSameException: 284 | active: true 285 | TooGenericExceptionCaught: 286 | active: true 287 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 288 | exceptionNames: 289 | - 'ArrayIndexOutOfBoundsException' 290 | - 'Error' 291 | - 'Exception' 292 | - 'IllegalMonitorStateException' 293 | - 'IndexOutOfBoundsException' 294 | - 'NullPointerException' 295 | - 'RuntimeException' 296 | - 'Throwable' 297 | allowedExceptionNameRegex: '_|(ignore|expected).*' 298 | TooGenericExceptionThrown: 299 | active: true 300 | exceptionNames: 301 | - 'Error' 302 | - 'Exception' 303 | - 'RuntimeException' 304 | - 'Throwable' 305 | 306 | naming: 307 | active: true 308 | BooleanPropertyNaming: 309 | active: false 310 | allowedPattern: '^(is|has|are)' 311 | ClassNaming: 312 | active: true 313 | classPattern: '[A-Z][a-zA-Z0-9]*' 314 | ConstructorParameterNaming: 315 | active: true 316 | parameterPattern: '[a-z][A-Za-z0-9]*' 317 | privateParameterPattern: '[a-z][A-Za-z0-9]*' 318 | excludeClassPattern: '$^' 319 | EnumNaming: 320 | active: true 321 | enumEntryPattern: '[A-Z][_a-zA-Z0-9]*' 322 | ForbiddenClassName: 323 | active: false 324 | forbiddenName: [] 325 | FunctionMaxLength: 326 | active: false 327 | maximumFunctionNameLength: 30 328 | FunctionMinLength: 329 | active: false 330 | minimumFunctionNameLength: 3 331 | FunctionNaming: 332 | active: true 333 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 334 | functionPattern: '[a-z][a-zA-Z0-9]*' 335 | excludeClassPattern: '$^' 336 | FunctionParameterNaming: 337 | active: true 338 | parameterPattern: '[a-z][A-Za-z0-9]*' 339 | excludeClassPattern: '$^' 340 | InvalidPackageDeclaration: 341 | active: true 342 | rootPackage: '' 343 | requireRootInDeclaration: false 344 | LambdaParameterNaming: 345 | active: false 346 | parameterPattern: '[a-z][A-Za-z0-9]*|_' 347 | MatchingDeclarationName: 348 | active: true 349 | mustBeFirst: true 350 | MemberNameEqualsClassName: 351 | active: true 352 | ignoreOverridden: true 353 | NoNameShadowing: 354 | active: true 355 | NonBooleanPropertyPrefixedWithIs: 356 | active: false 357 | ObjectPropertyNaming: 358 | active: true 359 | constantPattern: '[A-Za-z][_A-Za-z0-9]*' 360 | propertyPattern: '[A-Za-z][_A-Za-z0-9]*' 361 | privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*' 362 | PackageNaming: 363 | active: true 364 | packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*' 365 | TopLevelPropertyNaming: 366 | active: true 367 | constantPattern: '[A-Z][_A-Z0-9]*' 368 | propertyPattern: '[A-Za-z][_A-Za-z0-9]*' 369 | privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*' 370 | VariableMaxLength: 371 | active: false 372 | maximumVariableNameLength: 64 373 | VariableMinLength: 374 | active: false 375 | minimumVariableNameLength: 1 376 | VariableNaming: 377 | active: true 378 | variablePattern: '[a-z][A-Za-z0-9]*' 379 | privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*' 380 | excludeClassPattern: '$^' 381 | 382 | performance: 383 | active: true 384 | ArrayPrimitive: 385 | active: true 386 | CouldBeSequence: 387 | active: false 388 | threshold: 3 389 | ForEachOnRange: 390 | active: true 391 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 392 | SpreadOperator: 393 | active: true 394 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 395 | UnnecessaryPartOfBinaryExpression: 396 | active: false 397 | UnnecessaryTemporaryInstantiation: 398 | active: true 399 | 400 | potential-bugs: 401 | active: true 402 | AvoidReferentialEquality: 403 | active: true 404 | forbiddenTypePatterns: 405 | - 'kotlin.String' 406 | CastNullableToNonNullableType: 407 | active: false 408 | CastToNullableType: 409 | active: false 410 | Deprecation: 411 | active: false 412 | DontDowncastCollectionTypes: 413 | active: false 414 | DoubleMutabilityForCollection: 415 | active: true 416 | mutableTypes: 417 | - 'kotlin.collections.MutableList' 418 | - 'kotlin.collections.MutableMap' 419 | - 'kotlin.collections.MutableSet' 420 | - 'java.util.ArrayList' 421 | - 'java.util.LinkedHashSet' 422 | - 'java.util.HashSet' 423 | - 'java.util.LinkedHashMap' 424 | - 'java.util.HashMap' 425 | ElseCaseInsteadOfExhaustiveWhen: 426 | active: false 427 | ignoredSubjectTypes: [] 428 | EqualsAlwaysReturnsTrueOrFalse: 429 | active: true 430 | EqualsWithHashCodeExist: 431 | active: true 432 | ExitOutsideMain: 433 | active: false 434 | ExplicitGarbageCollectionCall: 435 | active: true 436 | HasPlatformType: 437 | active: true 438 | IgnoredReturnValue: 439 | active: true 440 | restrictToConfig: true 441 | returnValueAnnotations: 442 | - 'CheckResult' 443 | - '*.CheckResult' 444 | - 'CheckReturnValue' 445 | - '*.CheckReturnValue' 446 | ignoreReturnValueAnnotations: 447 | - 'CanIgnoreReturnValue' 448 | - '*.CanIgnoreReturnValue' 449 | returnValueTypes: 450 | - 'kotlin.sequences.Sequence' 451 | - 'kotlinx.coroutines.flow.*Flow' 452 | - 'java.util.stream.*Stream' 453 | ignoreFunctionCall: [] 454 | ImplicitDefaultLocale: 455 | active: true 456 | ImplicitUnitReturnType: 457 | active: false 458 | allowExplicitReturnType: true 459 | InvalidRange: 460 | active: true 461 | IteratorHasNextCallsNextMethod: 462 | active: true 463 | IteratorNotThrowingNoSuchElementException: 464 | active: true 465 | LateinitUsage: 466 | active: false 467 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 468 | ignoreOnClassesPattern: '' 469 | MapGetWithNotNullAssertionOperator: 470 | active: true 471 | MissingPackageDeclaration: 472 | active: false 473 | excludes: ['**/*.kts'] 474 | NullCheckOnMutableProperty: 475 | active: false 476 | NullableToStringCall: 477 | active: false 478 | PropertyUsedBeforeDeclaration: 479 | active: false 480 | UnconditionalJumpStatementInLoop: 481 | active: false 482 | UnnecessaryNotNullCheck: 483 | active: false 484 | UnnecessaryNotNullOperator: 485 | active: true 486 | UnnecessarySafeCall: 487 | active: true 488 | UnreachableCatchBlock: 489 | active: true 490 | UnreachableCode: 491 | active: true 492 | UnsafeCallOnNullableType: 493 | active: true 494 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] 495 | UnsafeCast: 496 | active: true 497 | UnusedUnaryOperator: 498 | active: true 499 | UselessPostfixExpression: 500 | active: true 501 | WrongEqualsTypeParameter: 502 | active: true 503 | 504 | style: 505 | active: true 506 | AlsoCouldBeApply: 507 | active: false 508 | BracesOnIfStatements: 509 | active: false 510 | singleLine: 'never' 511 | multiLine: 'always' 512 | BracesOnWhenStatements: 513 | active: false 514 | singleLine: 'necessary' 515 | multiLine: 'consistent' 516 | CanBeNonNullable: 517 | active: false 518 | CascadingCallWrapping: 519 | active: false 520 | includeElvis: true 521 | ClassOrdering: 522 | active: false 523 | CollapsibleIfStatements: 524 | active: false 525 | DataClassContainsFunctions: 526 | active: false 527 | conversionFunctionPrefix: 528 | - 'to' 529 | allowOperators: false 530 | DataClassShouldBeImmutable: 531 | active: false 532 | DestructuringDeclarationWithTooManyEntries: 533 | active: true 534 | maxDestructuringEntries: 3 535 | DoubleNegativeLambda: 536 | active: false 537 | negativeFunctions: 538 | - reason: 'Use `takeIf` instead.' 539 | value: 'takeUnless' 540 | - reason: 'Use `all` instead.' 541 | value: 'none' 542 | negativeFunctionNameParts: 543 | - 'not' 544 | - 'non' 545 | EqualsNullCall: 546 | active: true 547 | EqualsOnSignatureLine: 548 | active: false 549 | ExplicitCollectionElementAccessMethod: 550 | active: false 551 | ExplicitItLambdaParameter: 552 | active: true 553 | ExpressionBodySyntax: 554 | active: false 555 | includeLineWrapping: false 556 | ForbiddenAnnotation: 557 | active: false 558 | annotations: 559 | - reason: 'it is a java annotation. Use `Suppress` instead.' 560 | value: 'java.lang.SuppressWarnings' 561 | - reason: 'it is a java annotation. Use `kotlin.Deprecated` instead.' 562 | value: 'java.lang.Deprecated' 563 | - reason: 'it is a java annotation. Use `kotlin.annotation.MustBeDocumented` instead.' 564 | value: 'java.lang.annotation.Documented' 565 | - reason: 'it is a java annotation. Use `kotlin.annotation.Target` instead.' 566 | value: 'java.lang.annotation.Target' 567 | - reason: 'it is a java annotation. Use `kotlin.annotation.Retention` instead.' 568 | value: 'java.lang.annotation.Retention' 569 | - reason: 'it is a java annotation. Use `kotlin.annotation.Repeatable` instead.' 570 | value: 'java.lang.annotation.Repeatable' 571 | - reason: 'Kotlin does not support @Inherited annotation, see https://youtrack.jetbrains.com/issue/KT-22265' 572 | value: 'java.lang.annotation.Inherited' 573 | ForbiddenComment: 574 | active: true 575 | comments: 576 | - reason: 'Forbidden FIXME todo marker in comment, please fix the problem.' 577 | value: 'FIXME:' 578 | - reason: 'Forbidden STOPSHIP todo marker in comment, please address the problem before shipping the code.' 579 | value: 'STOPSHIP:' 580 | - reason: 'Forbidden TODO todo marker in comment, please do the changes.' 581 | value: 'TODO:' 582 | allowedPatterns: '' 583 | ForbiddenImport: 584 | active: false 585 | imports: [] 586 | forbiddenPatterns: '' 587 | ForbiddenMethodCall: 588 | active: false 589 | methods: 590 | - reason: 'print does not allow you to configure the output stream. Use a logger instead.' 591 | value: 'kotlin.io.print' 592 | - reason: 'println does not allow you to configure the output stream. Use a logger instead.' 593 | value: 'kotlin.io.println' 594 | ForbiddenSuppress: 595 | active: false 596 | rules: [] 597 | ForbiddenVoid: 598 | active: true 599 | ignoreOverridden: false 600 | ignoreUsageInGenerics: false 601 | FunctionOnlyReturningConstant: 602 | active: true 603 | ignoreOverridableFunction: true 604 | ignoreActualFunction: true 605 | excludedFunctions: [] 606 | LoopWithTooManyJumpStatements: 607 | active: true 608 | maxJumpCount: 1 609 | MagicNumber: 610 | active: true 611 | excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts'] 612 | ignoreNumbers: 613 | - '-1' 614 | - '0' 615 | - '1' 616 | - '2' 617 | ignoreHashCodeFunction: true 618 | ignorePropertyDeclaration: false 619 | ignoreLocalVariableDeclaration: false 620 | ignoreConstantDeclaration: true 621 | ignoreCompanionObjectPropertyDeclaration: true 622 | ignoreAnnotation: false 623 | ignoreNamedArgument: true 624 | ignoreEnums: false 625 | ignoreRanges: false 626 | ignoreExtensionFunctions: true 627 | MandatoryBracesLoops: 628 | active: false 629 | MaxChainedCallsOnSameLine: 630 | active: false 631 | maxChainedCalls: 5 632 | MaxLineLength: 633 | active: true 634 | maxLineLength: 120 635 | excludePackageStatements: true 636 | excludeImportStatements: true 637 | excludeCommentStatements: false 638 | excludeRawStrings: true 639 | MayBeConst: 640 | active: true 641 | ModifierOrder: 642 | active: true 643 | MultilineLambdaItParameter: 644 | active: false 645 | MultilineRawStringIndentation: 646 | active: false 647 | indentSize: 4 648 | trimmingMethods: 649 | - 'trimIndent' 650 | - 'trimMargin' 651 | NestedClassesVisibility: 652 | active: true 653 | NewLineAtEndOfFile: 654 | active: true 655 | NoTabs: 656 | active: false 657 | NullableBooleanCheck: 658 | active: false 659 | ObjectLiteralToLambda: 660 | active: true 661 | OptionalAbstractKeyword: 662 | active: true 663 | OptionalUnit: 664 | active: false 665 | PreferToOverPairSyntax: 666 | active: false 667 | ProtectedMemberInFinalClass: 668 | active: true 669 | RedundantExplicitType: 670 | active: false 671 | RedundantHigherOrderMapUsage: 672 | active: true 673 | RedundantVisibilityModifierRule: 674 | active: false 675 | ReturnCount: 676 | active: true 677 | max: 2 678 | excludedFunctions: 679 | - 'equals' 680 | excludeLabeled: false 681 | excludeReturnFromLambda: true 682 | excludeGuardClauses: false 683 | SafeCast: 684 | active: true 685 | SerialVersionUIDInSerializableClass: 686 | active: true 687 | SpacingBetweenPackageAndImports: 688 | active: false 689 | StringShouldBeRawString: 690 | active: false 691 | maxEscapedCharacterCount: 2 692 | ignoredCharacters: [] 693 | ThrowsCount: 694 | active: true 695 | max: 2 696 | excludeGuardClauses: false 697 | TrailingWhitespace: 698 | active: false 699 | TrimMultilineRawString: 700 | active: false 701 | trimmingMethods: 702 | - 'trimIndent' 703 | - 'trimMargin' 704 | UnderscoresInNumericLiterals: 705 | active: false 706 | acceptableLength: 4 707 | allowNonStandardGrouping: false 708 | UnnecessaryAbstractClass: 709 | active: true 710 | UnnecessaryAnnotationUseSiteTarget: 711 | active: false 712 | UnnecessaryApply: 713 | active: true 714 | UnnecessaryBackticks: 715 | active: false 716 | UnnecessaryBracesAroundTrailingLambda: 717 | active: false 718 | UnnecessaryFilter: 719 | active: true 720 | UnnecessaryInheritance: 721 | active: true 722 | UnnecessaryInnerClass: 723 | active: false 724 | UnnecessaryLet: 725 | active: false 726 | UnnecessaryParentheses: 727 | active: false 728 | allowForUnclearPrecedence: false 729 | UntilInsteadOfRangeTo: 730 | active: false 731 | UnusedImports: 732 | active: false 733 | UnusedParameter: 734 | active: true 735 | allowedNames: 'ignored|expected' 736 | UnusedPrivateClass: 737 | active: true 738 | UnusedPrivateMember: 739 | active: true 740 | allowedNames: '' 741 | UnusedPrivateProperty: 742 | active: true 743 | allowedNames: '_|ignored|expected|serialVersionUID' 744 | UseAnyOrNoneInsteadOfFind: 745 | active: true 746 | UseArrayLiteralsInAnnotations: 747 | active: true 748 | UseCheckNotNull: 749 | active: true 750 | UseCheckOrError: 751 | active: true 752 | UseDataClass: 753 | active: false 754 | allowVars: false 755 | UseEmptyCounterpart: 756 | active: false 757 | UseIfEmptyOrIfBlank: 758 | active: false 759 | UseIfInsteadOfWhen: 760 | active: false 761 | ignoreWhenContainingVariableDeclaration: false 762 | UseIsNullOrEmpty: 763 | active: true 764 | UseLet: 765 | active: false 766 | UseOrEmpty: 767 | active: true 768 | UseRequire: 769 | active: true 770 | UseRequireNotNull: 771 | active: true 772 | UseSumOfInsteadOfFlatMapSize: 773 | active: false 774 | UselessCallOnNotNull: 775 | active: true 776 | UtilityClassWithPublicConstructor: 777 | active: true 778 | VarCouldBeVal: 779 | active: true 780 | ignoreLateinitVar: false 781 | WildcardImport: 782 | active: true 783 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.native.cacheKind.linuxX64=none 2 | 3 | org.gradle.caching=true 4 | org.gradle.jvmargs=-Dfile.encoding=UTF-8 5 | org.gradle.parallel=true 6 | org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled 7 | org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true 8 | -------------------------------------------------------------------------------- /gradle/libs.versions.toml: -------------------------------------------------------------------------------- 1 | [versions] 2 | burst = "2.5.0" 3 | detekt = "1.23.8" 4 | dokka = "2.0.0" 5 | gradleMavenPublish = "0.31.0" 6 | kotest = "5.9.1" 7 | kotlin = "2.1.20" 8 | kotlinxBinaryCompatibilityValidator = "0.17.0" 9 | kotlinxSerialization = "1.8.1" 10 | kover = "0.9.1" 11 | 12 | [libraries] 13 | kotest-assertionsCore = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" } 14 | kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } 15 | kotlin-test-junit5 = { module = "org.jetbrains.kotlin:kotlin-test-junit5", version.ref = "kotlin" } 16 | kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinxSerialization" } 17 | kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" } 18 | 19 | [plugins] 20 | burst = { id = "app.cash.burst", version.ref = "burst" } 21 | detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } 22 | dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } 23 | gradleMavenPublish = { id = "com.vanniktech.maven.publish", version.ref = "gradleMavenPublish" } 24 | kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } 25 | kotlinx-binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinxBinaryCompatibilityValidator" } 26 | kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } 27 | kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" } 28 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/swiftzer/semver/12cb2123378ef68b58b997ac8fa5f5e8643cbd91/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.13-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or 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 UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MSYS* | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /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 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /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": 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/resolve-uri@^3.1.0": 30 | version "3.1.2" 31 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 32 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 33 | 34 | "@jridgewell/set-array@^1.0.1": 35 | version "1.1.2" 36 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 37 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 38 | 39 | "@jridgewell/source-map@^0.3.3": 40 | version "0.3.5" 41 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" 42 | integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== 43 | dependencies: 44 | "@jridgewell/gen-mapping" "^0.3.0" 45 | "@jridgewell/trace-mapping" "^0.3.9" 46 | 47 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 48 | version "1.4.14" 49 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 50 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 51 | 52 | "@jridgewell/sourcemap-codec@^1.4.14": 53 | version "1.5.0" 54 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 55 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 56 | 57 | "@jridgewell/trace-mapping@^0.3.25": 58 | version "0.3.25" 59 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 60 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 61 | dependencies: 62 | "@jridgewell/resolve-uri" "^3.1.0" 63 | "@jridgewell/sourcemap-codec" "^1.4.14" 64 | 65 | "@jridgewell/trace-mapping@^0.3.9": 66 | version "0.3.17" 67 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 68 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 69 | dependencies: 70 | "@jridgewell/resolve-uri" "3.1.0" 71 | "@jridgewell/sourcemap-codec" "1.4.14" 72 | 73 | "@socket.io/component-emitter@~3.1.0": 74 | version "3.1.0" 75 | resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" 76 | integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== 77 | 78 | "@types/cors@^2.8.12": 79 | version "2.8.12" 80 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" 81 | integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== 82 | 83 | "@types/estree@^1.0.5": 84 | version "1.0.6" 85 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" 86 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== 87 | 88 | "@types/json-schema@^7.0.8": 89 | version "7.0.11" 90 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 91 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 92 | 93 | "@types/json-schema@^7.0.9": 94 | version "7.0.15" 95 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" 96 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 97 | 98 | "@types/node@*", "@types/node@>=10.0.0": 99 | version "18.11.9" 100 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" 101 | integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== 102 | 103 | "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.12.1": 104 | version "1.14.1" 105 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" 106 | integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== 107 | dependencies: 108 | "@webassemblyjs/helper-numbers" "1.13.2" 109 | "@webassemblyjs/helper-wasm-bytecode" "1.13.2" 110 | 111 | "@webassemblyjs/floating-point-hex-parser@1.13.2": 112 | version "1.13.2" 113 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" 114 | integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== 115 | 116 | "@webassemblyjs/helper-api-error@1.13.2": 117 | version "1.13.2" 118 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" 119 | integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== 120 | 121 | "@webassemblyjs/helper-buffer@1.14.1": 122 | version "1.14.1" 123 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" 124 | integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== 125 | 126 | "@webassemblyjs/helper-numbers@1.13.2": 127 | version "1.13.2" 128 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" 129 | integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== 130 | dependencies: 131 | "@webassemblyjs/floating-point-hex-parser" "1.13.2" 132 | "@webassemblyjs/helper-api-error" "1.13.2" 133 | "@xtuc/long" "4.2.2" 134 | 135 | "@webassemblyjs/helper-wasm-bytecode@1.13.2": 136 | version "1.13.2" 137 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" 138 | integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== 139 | 140 | "@webassemblyjs/helper-wasm-section@1.14.1": 141 | version "1.14.1" 142 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" 143 | integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== 144 | dependencies: 145 | "@webassemblyjs/ast" "1.14.1" 146 | "@webassemblyjs/helper-buffer" "1.14.1" 147 | "@webassemblyjs/helper-wasm-bytecode" "1.13.2" 148 | "@webassemblyjs/wasm-gen" "1.14.1" 149 | 150 | "@webassemblyjs/ieee754@1.13.2": 151 | version "1.13.2" 152 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" 153 | integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== 154 | dependencies: 155 | "@xtuc/ieee754" "^1.2.0" 156 | 157 | "@webassemblyjs/leb128@1.13.2": 158 | version "1.13.2" 159 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" 160 | integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== 161 | dependencies: 162 | "@xtuc/long" "4.2.2" 163 | 164 | "@webassemblyjs/utf8@1.13.2": 165 | version "1.13.2" 166 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" 167 | integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== 168 | 169 | "@webassemblyjs/wasm-edit@^1.12.1": 170 | version "1.14.1" 171 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" 172 | integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== 173 | dependencies: 174 | "@webassemblyjs/ast" "1.14.1" 175 | "@webassemblyjs/helper-buffer" "1.14.1" 176 | "@webassemblyjs/helper-wasm-bytecode" "1.13.2" 177 | "@webassemblyjs/helper-wasm-section" "1.14.1" 178 | "@webassemblyjs/wasm-gen" "1.14.1" 179 | "@webassemblyjs/wasm-opt" "1.14.1" 180 | "@webassemblyjs/wasm-parser" "1.14.1" 181 | "@webassemblyjs/wast-printer" "1.14.1" 182 | 183 | "@webassemblyjs/wasm-gen@1.14.1": 184 | version "1.14.1" 185 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" 186 | integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== 187 | dependencies: 188 | "@webassemblyjs/ast" "1.14.1" 189 | "@webassemblyjs/helper-wasm-bytecode" "1.13.2" 190 | "@webassemblyjs/ieee754" "1.13.2" 191 | "@webassemblyjs/leb128" "1.13.2" 192 | "@webassemblyjs/utf8" "1.13.2" 193 | 194 | "@webassemblyjs/wasm-opt@1.14.1": 195 | version "1.14.1" 196 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" 197 | integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== 198 | dependencies: 199 | "@webassemblyjs/ast" "1.14.1" 200 | "@webassemblyjs/helper-buffer" "1.14.1" 201 | "@webassemblyjs/wasm-gen" "1.14.1" 202 | "@webassemblyjs/wasm-parser" "1.14.1" 203 | 204 | "@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.12.1": 205 | version "1.14.1" 206 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" 207 | integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== 208 | dependencies: 209 | "@webassemblyjs/ast" "1.14.1" 210 | "@webassemblyjs/helper-api-error" "1.13.2" 211 | "@webassemblyjs/helper-wasm-bytecode" "1.13.2" 212 | "@webassemblyjs/ieee754" "1.13.2" 213 | "@webassemblyjs/leb128" "1.13.2" 214 | "@webassemblyjs/utf8" "1.13.2" 215 | 216 | "@webassemblyjs/wast-printer@1.14.1": 217 | version "1.14.1" 218 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" 219 | integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== 220 | dependencies: 221 | "@webassemblyjs/ast" "1.14.1" 222 | "@xtuc/long" "4.2.2" 223 | 224 | "@webpack-cli/configtest@^2.1.1": 225 | version "2.1.1" 226 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" 227 | integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== 228 | 229 | "@webpack-cli/info@^2.0.2": 230 | version "2.0.2" 231 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" 232 | integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== 233 | 234 | "@webpack-cli/serve@^2.0.5": 235 | version "2.0.5" 236 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" 237 | integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== 238 | 239 | "@xtuc/ieee754@^1.2.0": 240 | version "1.2.0" 241 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" 242 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 243 | 244 | "@xtuc/long@4.2.2": 245 | version "4.2.2" 246 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" 247 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 248 | 249 | accepts@~1.3.4: 250 | version "1.3.8" 251 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 252 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 253 | dependencies: 254 | mime-types "~2.1.34" 255 | negotiator "0.6.3" 256 | 257 | acorn-import-attributes@^1.9.5: 258 | version "1.9.5" 259 | resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" 260 | integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== 261 | 262 | acorn@^8.7.1, acorn@^8.8.2: 263 | version "8.10.0" 264 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" 265 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 266 | 267 | ajv-formats@^2.1.1: 268 | version "2.1.1" 269 | resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" 270 | integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== 271 | dependencies: 272 | ajv "^8.0.0" 273 | 274 | ajv-keywords@^3.5.2: 275 | version "3.5.2" 276 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" 277 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 278 | 279 | ajv-keywords@^5.1.0: 280 | version "5.1.0" 281 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" 282 | integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== 283 | dependencies: 284 | fast-deep-equal "^3.1.3" 285 | 286 | ajv@^6.12.5: 287 | version "6.12.6" 288 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 289 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 290 | dependencies: 291 | fast-deep-equal "^3.1.1" 292 | fast-json-stable-stringify "^2.0.0" 293 | json-schema-traverse "^0.4.1" 294 | uri-js "^4.2.2" 295 | 296 | ajv@^8.0.0, ajv@^8.9.0: 297 | version "8.17.1" 298 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" 299 | integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== 300 | dependencies: 301 | fast-deep-equal "^3.1.3" 302 | fast-uri "^3.0.1" 303 | json-schema-traverse "^1.0.0" 304 | require-from-string "^2.0.2" 305 | 306 | ansi-colors@^4.1.3: 307 | version "4.1.3" 308 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" 309 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== 310 | 311 | ansi-regex@^5.0.1: 312 | version "5.0.1" 313 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 314 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 315 | 316 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 317 | version "4.3.0" 318 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 319 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 320 | dependencies: 321 | color-convert "^2.0.1" 322 | 323 | anymatch@~3.1.2: 324 | version "3.1.2" 325 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 326 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 327 | dependencies: 328 | normalize-path "^3.0.0" 329 | picomatch "^2.0.4" 330 | 331 | argparse@^2.0.1: 332 | version "2.0.1" 333 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 334 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 335 | 336 | balanced-match@^1.0.0: 337 | version "1.0.2" 338 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 339 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 340 | 341 | base64id@2.0.0, base64id@~2.0.0: 342 | version "2.0.0" 343 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" 344 | integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== 345 | 346 | binary-extensions@^2.0.0: 347 | version "2.2.0" 348 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 349 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 350 | 351 | body-parser@^1.19.0: 352 | version "1.20.1" 353 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" 354 | integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== 355 | dependencies: 356 | bytes "3.1.2" 357 | content-type "~1.0.4" 358 | debug "2.6.9" 359 | depd "2.0.0" 360 | destroy "1.2.0" 361 | http-errors "2.0.0" 362 | iconv-lite "0.4.24" 363 | on-finished "2.4.1" 364 | qs "6.11.0" 365 | raw-body "2.5.1" 366 | type-is "~1.6.18" 367 | unpipe "1.0.0" 368 | 369 | brace-expansion@^1.1.7: 370 | version "1.1.11" 371 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 372 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 373 | dependencies: 374 | balanced-match "^1.0.0" 375 | concat-map "0.0.1" 376 | 377 | brace-expansion@^2.0.1: 378 | version "2.0.1" 379 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 380 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 381 | dependencies: 382 | balanced-match "^1.0.0" 383 | 384 | braces@^3.0.2, braces@~3.0.2: 385 | version "3.0.2" 386 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 387 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 388 | dependencies: 389 | fill-range "^7.0.1" 390 | 391 | browser-stdout@^1.3.1: 392 | version "1.3.1" 393 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 394 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 395 | 396 | browserslist@^4.21.10: 397 | version "4.24.4" 398 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" 399 | integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== 400 | dependencies: 401 | caniuse-lite "^1.0.30001688" 402 | electron-to-chromium "^1.5.73" 403 | node-releases "^2.0.19" 404 | update-browserslist-db "^1.1.1" 405 | 406 | buffer-from@^1.0.0: 407 | version "1.1.2" 408 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 409 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 410 | 411 | bytes@3.1.2: 412 | version "3.1.2" 413 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 414 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 415 | 416 | call-bind@^1.0.0: 417 | version "1.0.2" 418 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 419 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 420 | dependencies: 421 | function-bind "^1.1.1" 422 | get-intrinsic "^1.0.2" 423 | 424 | camelcase@^6.0.0: 425 | version "6.3.0" 426 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 427 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 428 | 429 | caniuse-lite@^1.0.30001688: 430 | version "1.0.30001704" 431 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001704.tgz#6644fe909d924ac3a7125e8a0ab6af95b1f32990" 432 | integrity sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew== 433 | 434 | chalk@^4.1.0: 435 | version "4.1.2" 436 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 437 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 438 | dependencies: 439 | ansi-styles "^4.1.0" 440 | supports-color "^7.1.0" 441 | 442 | chokidar@^3.5.1: 443 | version "3.5.3" 444 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 445 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 446 | dependencies: 447 | anymatch "~3.1.2" 448 | braces "~3.0.2" 449 | glob-parent "~5.1.2" 450 | is-binary-path "~2.1.0" 451 | is-glob "~4.0.1" 452 | normalize-path "~3.0.0" 453 | readdirp "~3.6.0" 454 | optionalDependencies: 455 | fsevents "~2.3.2" 456 | 457 | chokidar@^3.5.3: 458 | version "3.6.0" 459 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" 460 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== 461 | dependencies: 462 | anymatch "~3.1.2" 463 | braces "~3.0.2" 464 | glob-parent "~5.1.2" 465 | is-binary-path "~2.1.0" 466 | is-glob "~4.0.1" 467 | normalize-path "~3.0.0" 468 | readdirp "~3.6.0" 469 | optionalDependencies: 470 | fsevents "~2.3.2" 471 | 472 | chrome-trace-event@^1.0.2: 473 | version "1.0.3" 474 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 475 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 476 | 477 | cliui@^7.0.2: 478 | version "7.0.4" 479 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 480 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 481 | dependencies: 482 | string-width "^4.2.0" 483 | strip-ansi "^6.0.0" 484 | wrap-ansi "^7.0.0" 485 | 486 | clone-deep@^4.0.1: 487 | version "4.0.1" 488 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" 489 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== 490 | dependencies: 491 | is-plain-object "^2.0.4" 492 | kind-of "^6.0.2" 493 | shallow-clone "^3.0.0" 494 | 495 | color-convert@^2.0.1: 496 | version "2.0.1" 497 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 498 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 499 | dependencies: 500 | color-name "~1.1.4" 501 | 502 | color-name@~1.1.4: 503 | version "1.1.4" 504 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 505 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 506 | 507 | colorette@^2.0.14: 508 | version "2.0.19" 509 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 510 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 511 | 512 | commander@^10.0.1: 513 | version "10.0.1" 514 | resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" 515 | integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== 516 | 517 | commander@^2.20.0: 518 | version "2.20.3" 519 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 520 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 521 | 522 | concat-map@0.0.1: 523 | version "0.0.1" 524 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 525 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 526 | 527 | connect@^3.7.0: 528 | version "3.7.0" 529 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" 530 | integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== 531 | dependencies: 532 | debug "2.6.9" 533 | finalhandler "1.1.2" 534 | parseurl "~1.3.3" 535 | utils-merge "1.0.1" 536 | 537 | content-type@~1.0.4: 538 | version "1.0.4" 539 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 540 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 541 | 542 | cookie@~0.7.2: 543 | version "0.7.2" 544 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" 545 | integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== 546 | 547 | cors@~2.8.5: 548 | version "2.8.5" 549 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 550 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 551 | dependencies: 552 | object-assign "^4" 553 | vary "^1" 554 | 555 | cross-spawn@^7.0.3: 556 | version "7.0.3" 557 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 558 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 559 | dependencies: 560 | path-key "^3.1.0" 561 | shebang-command "^2.0.0" 562 | which "^2.0.1" 563 | 564 | custom-event@~1.0.0: 565 | version "1.0.1" 566 | resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" 567 | integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== 568 | 569 | date-format@^4.0.14: 570 | version "4.0.14" 571 | resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" 572 | integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== 573 | 574 | debug@2.6.9: 575 | version "2.6.9" 576 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 577 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 578 | dependencies: 579 | ms "2.0.0" 580 | 581 | debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: 582 | version "4.3.4" 583 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 584 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 585 | dependencies: 586 | ms "2.1.2" 587 | 588 | debug@^4.3.5: 589 | version "4.4.0" 590 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" 591 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 592 | dependencies: 593 | ms "^2.1.3" 594 | 595 | debug@~4.3.4: 596 | version "4.3.7" 597 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" 598 | integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== 599 | dependencies: 600 | ms "^2.1.3" 601 | 602 | decamelize@^4.0.0: 603 | version "4.0.0" 604 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 605 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 606 | 607 | depd@2.0.0: 608 | version "2.0.0" 609 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 610 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 611 | 612 | destroy@1.2.0: 613 | version "1.2.0" 614 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 615 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 616 | 617 | di@^0.0.1: 618 | version "0.0.1" 619 | resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" 620 | integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== 621 | 622 | diff@^5.2.0: 623 | version "5.2.0" 624 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" 625 | integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== 626 | 627 | dom-serialize@^2.2.1: 628 | version "2.2.1" 629 | resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" 630 | integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== 631 | dependencies: 632 | custom-event "~1.0.0" 633 | ent "~2.2.0" 634 | extend "^3.0.0" 635 | void-elements "^2.0.0" 636 | 637 | ee-first@1.1.1: 638 | version "1.1.1" 639 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 640 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 641 | 642 | electron-to-chromium@^1.5.73: 643 | version "1.5.118" 644 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.118.tgz#064bda9bfea1611074288adb1fdd1f787a131e21" 645 | integrity sha512-yNDUus0iultYyVoEFLnQeei7LOQkL8wg8GQpkPCRrOlJXlcCwa6eGKZkxQ9ciHsqZyYbj8Jd94X1CTPzGm+uIA== 646 | 647 | emoji-regex@^8.0.0: 648 | version "8.0.0" 649 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 650 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 651 | 652 | encodeurl@~1.0.2: 653 | version "1.0.2" 654 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 655 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 656 | 657 | engine.io-parser@~5.2.1: 658 | version "5.2.3" 659 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" 660 | integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== 661 | 662 | engine.io@~6.6.0: 663 | version "6.6.4" 664 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.4.tgz#0a89a3e6b6c1d4b0c2a2a637495e7c149ec8d8ee" 665 | integrity sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g== 666 | dependencies: 667 | "@types/cors" "^2.8.12" 668 | "@types/node" ">=10.0.0" 669 | accepts "~1.3.4" 670 | base64id "2.0.0" 671 | cookie "~0.7.2" 672 | cors "~2.8.5" 673 | debug "~4.3.1" 674 | engine.io-parser "~5.2.1" 675 | ws "~8.17.1" 676 | 677 | enhanced-resolve@^5.17.1: 678 | version "5.18.1" 679 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" 680 | integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== 681 | dependencies: 682 | graceful-fs "^4.2.4" 683 | tapable "^2.2.0" 684 | 685 | ent@~2.2.0: 686 | version "2.2.0" 687 | resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" 688 | integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== 689 | 690 | envinfo@^7.7.3: 691 | version "7.8.1" 692 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" 693 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== 694 | 695 | es-module-lexer@^1.2.1: 696 | version "1.3.0" 697 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" 698 | integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== 699 | 700 | escalade@^3.1.1: 701 | version "3.1.1" 702 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 703 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 704 | 705 | escalade@^3.2.0: 706 | version "3.2.0" 707 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" 708 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== 709 | 710 | escape-html@~1.0.3: 711 | version "1.0.3" 712 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 713 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 714 | 715 | escape-string-regexp@^4.0.0: 716 | version "4.0.0" 717 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 718 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 719 | 720 | eslint-scope@5.1.1: 721 | version "5.1.1" 722 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 723 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 724 | dependencies: 725 | esrecurse "^4.3.0" 726 | estraverse "^4.1.1" 727 | 728 | esrecurse@^4.3.0: 729 | version "4.3.0" 730 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 731 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 732 | dependencies: 733 | estraverse "^5.2.0" 734 | 735 | estraverse@^4.1.1: 736 | version "4.3.0" 737 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 738 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 739 | 740 | estraverse@^5.2.0: 741 | version "5.3.0" 742 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 743 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 744 | 745 | eventemitter3@^4.0.0: 746 | version "4.0.7" 747 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 748 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 749 | 750 | events@^3.2.0: 751 | version "3.3.0" 752 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 753 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 754 | 755 | extend@^3.0.0: 756 | version "3.0.2" 757 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 758 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 759 | 760 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 761 | version "3.1.3" 762 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 763 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 764 | 765 | fast-json-stable-stringify@^2.0.0: 766 | version "2.1.0" 767 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 768 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 769 | 770 | fast-uri@^3.0.1: 771 | version "3.0.6" 772 | resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" 773 | integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== 774 | 775 | fastest-levenshtein@^1.0.12: 776 | version "1.0.16" 777 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" 778 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== 779 | 780 | fill-range@^7.0.1: 781 | version "7.0.1" 782 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 783 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 784 | dependencies: 785 | to-regex-range "^5.0.1" 786 | 787 | finalhandler@1.1.2: 788 | version "1.1.2" 789 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 790 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 791 | dependencies: 792 | debug "2.6.9" 793 | encodeurl "~1.0.2" 794 | escape-html "~1.0.3" 795 | on-finished "~2.3.0" 796 | parseurl "~1.3.3" 797 | statuses "~1.5.0" 798 | unpipe "~1.0.0" 799 | 800 | find-up@^4.0.0: 801 | version "4.1.0" 802 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 803 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 804 | dependencies: 805 | locate-path "^5.0.0" 806 | path-exists "^4.0.0" 807 | 808 | find-up@^5.0.0: 809 | version "5.0.0" 810 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 811 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 812 | dependencies: 813 | locate-path "^6.0.0" 814 | path-exists "^4.0.0" 815 | 816 | flat@^5.0.2: 817 | version "5.0.2" 818 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 819 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 820 | 821 | flatted@^3.2.7: 822 | version "3.2.7" 823 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 824 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 825 | 826 | follow-redirects@^1.0.0: 827 | version "1.15.2" 828 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 829 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 830 | 831 | format-util@^1.0.5: 832 | version "1.0.5" 833 | resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" 834 | integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== 835 | 836 | fs-extra@^8.1.0: 837 | version "8.1.0" 838 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" 839 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 840 | dependencies: 841 | graceful-fs "^4.2.0" 842 | jsonfile "^4.0.0" 843 | universalify "^0.1.0" 844 | 845 | fs.realpath@^1.0.0: 846 | version "1.0.0" 847 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 848 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 849 | 850 | fsevents@~2.3.2: 851 | version "2.3.2" 852 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 853 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 854 | 855 | function-bind@^1.1.1: 856 | version "1.1.1" 857 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 858 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 859 | 860 | get-caller-file@^2.0.5: 861 | version "2.0.5" 862 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 863 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 864 | 865 | get-intrinsic@^1.0.2: 866 | version "1.1.3" 867 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" 868 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 869 | dependencies: 870 | function-bind "^1.1.1" 871 | has "^1.0.3" 872 | has-symbols "^1.0.3" 873 | 874 | glob-parent@~5.1.2: 875 | version "5.1.2" 876 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 877 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 878 | dependencies: 879 | is-glob "^4.0.1" 880 | 881 | glob-to-regexp@^0.4.1: 882 | version "0.4.1" 883 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 884 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 885 | 886 | glob@^7.1.3, glob@^7.1.7: 887 | version "7.2.3" 888 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 889 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 890 | dependencies: 891 | fs.realpath "^1.0.0" 892 | inflight "^1.0.4" 893 | inherits "2" 894 | minimatch "^3.1.1" 895 | once "^1.3.0" 896 | path-is-absolute "^1.0.0" 897 | 898 | glob@^8.1.0: 899 | version "8.1.0" 900 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" 901 | integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== 902 | dependencies: 903 | fs.realpath "^1.0.0" 904 | inflight "^1.0.4" 905 | inherits "2" 906 | minimatch "^5.0.1" 907 | once "^1.3.0" 908 | 909 | 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: 910 | version "4.2.10" 911 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 912 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 913 | 914 | graceful-fs@^4.2.10, graceful-fs@^4.2.11: 915 | version "4.2.11" 916 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 917 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 918 | 919 | has-flag@^4.0.0: 920 | version "4.0.0" 921 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 922 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 923 | 924 | has-symbols@^1.0.3: 925 | version "1.0.3" 926 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 927 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 928 | 929 | has@^1.0.3: 930 | version "1.0.3" 931 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 932 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 933 | dependencies: 934 | function-bind "^1.1.1" 935 | 936 | he@^1.2.0: 937 | version "1.2.0" 938 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 939 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 940 | 941 | http-errors@2.0.0: 942 | version "2.0.0" 943 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 944 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 945 | dependencies: 946 | depd "2.0.0" 947 | inherits "2.0.4" 948 | setprototypeof "1.2.0" 949 | statuses "2.0.1" 950 | toidentifier "1.0.1" 951 | 952 | http-proxy@^1.18.1: 953 | version "1.18.1" 954 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" 955 | integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== 956 | dependencies: 957 | eventemitter3 "^4.0.0" 958 | follow-redirects "^1.0.0" 959 | requires-port "^1.0.0" 960 | 961 | iconv-lite@0.4.24: 962 | version "0.4.24" 963 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 964 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 965 | dependencies: 966 | safer-buffer ">= 2.1.2 < 3" 967 | 968 | iconv-lite@^0.6.3: 969 | version "0.6.3" 970 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 971 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 972 | dependencies: 973 | safer-buffer ">= 2.1.2 < 3.0.0" 974 | 975 | import-local@^3.0.2: 976 | version "3.1.0" 977 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 978 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 979 | dependencies: 980 | pkg-dir "^4.2.0" 981 | resolve-cwd "^3.0.0" 982 | 983 | inflight@^1.0.4: 984 | version "1.0.6" 985 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 986 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 987 | dependencies: 988 | once "^1.3.0" 989 | wrappy "1" 990 | 991 | inherits@2, inherits@2.0.4: 992 | version "2.0.4" 993 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 994 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 995 | 996 | interpret@^3.1.1: 997 | version "3.1.1" 998 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" 999 | integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== 1000 | 1001 | is-binary-path@~2.1.0: 1002 | version "2.1.0" 1003 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1004 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1005 | dependencies: 1006 | binary-extensions "^2.0.0" 1007 | 1008 | is-core-module@^2.11.0: 1009 | version "2.12.1" 1010 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" 1011 | integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== 1012 | dependencies: 1013 | has "^1.0.3" 1014 | 1015 | is-extglob@^2.1.1: 1016 | version "2.1.1" 1017 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1018 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1019 | 1020 | is-fullwidth-code-point@^3.0.0: 1021 | version "3.0.0" 1022 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1023 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1024 | 1025 | is-glob@^4.0.1, is-glob@~4.0.1: 1026 | version "4.0.3" 1027 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1028 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1029 | dependencies: 1030 | is-extglob "^2.1.1" 1031 | 1032 | is-number@^7.0.0: 1033 | version "7.0.0" 1034 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1035 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1036 | 1037 | is-plain-obj@^2.1.0: 1038 | version "2.1.0" 1039 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1040 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1041 | 1042 | is-plain-object@^2.0.4: 1043 | version "2.0.4" 1044 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1045 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1046 | dependencies: 1047 | isobject "^3.0.1" 1048 | 1049 | is-unicode-supported@^0.1.0: 1050 | version "0.1.0" 1051 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 1052 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1053 | 1054 | isbinaryfile@^4.0.8: 1055 | version "4.0.10" 1056 | resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" 1057 | integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== 1058 | 1059 | isexe@^2.0.0: 1060 | version "2.0.0" 1061 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1062 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1063 | 1064 | isobject@^3.0.1: 1065 | version "3.0.1" 1066 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1067 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 1068 | 1069 | jest-worker@^27.4.5: 1070 | version "27.5.1" 1071 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" 1072 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 1073 | dependencies: 1074 | "@types/node" "*" 1075 | merge-stream "^2.0.0" 1076 | supports-color "^8.0.0" 1077 | 1078 | js-yaml@^4.1.0: 1079 | version "4.1.0" 1080 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1081 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1082 | dependencies: 1083 | argparse "^2.0.1" 1084 | 1085 | json-parse-even-better-errors@^2.3.1: 1086 | version "2.3.1" 1087 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1088 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1089 | 1090 | json-schema-traverse@^0.4.1: 1091 | version "0.4.1" 1092 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1093 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1094 | 1095 | json-schema-traverse@^1.0.0: 1096 | version "1.0.0" 1097 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1098 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1099 | 1100 | jsonfile@^4.0.0: 1101 | version "4.0.0" 1102 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1103 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== 1104 | optionalDependencies: 1105 | graceful-fs "^4.1.6" 1106 | 1107 | karma-chrome-launcher@3.2.0: 1108 | version "3.2.0" 1109 | resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9" 1110 | integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== 1111 | dependencies: 1112 | which "^1.2.1" 1113 | 1114 | karma-mocha@2.0.1: 1115 | version "2.0.1" 1116 | resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" 1117 | integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== 1118 | dependencies: 1119 | minimist "^1.2.3" 1120 | 1121 | karma-sourcemap-loader@0.4.0: 1122 | version "0.4.0" 1123 | resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz#b01d73f8f688f533bcc8f5d273d43458e13b5488" 1124 | integrity sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA== 1125 | dependencies: 1126 | graceful-fs "^4.2.10" 1127 | 1128 | karma-webpack@5.0.1: 1129 | version "5.0.1" 1130 | resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.1.tgz#4eafd31bbe684a747a6e8f3e4ad373e53979ced4" 1131 | integrity sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ== 1132 | dependencies: 1133 | glob "^7.1.3" 1134 | minimatch "^9.0.3" 1135 | webpack-merge "^4.1.5" 1136 | 1137 | karma@6.4.4: 1138 | version "6.4.4" 1139 | resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.4.tgz#dfa5a426cf5a8b53b43cd54ef0d0d09742351492" 1140 | integrity sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w== 1141 | dependencies: 1142 | "@colors/colors" "1.5.0" 1143 | body-parser "^1.19.0" 1144 | braces "^3.0.2" 1145 | chokidar "^3.5.1" 1146 | connect "^3.7.0" 1147 | di "^0.0.1" 1148 | dom-serialize "^2.2.1" 1149 | glob "^7.1.7" 1150 | graceful-fs "^4.2.6" 1151 | http-proxy "^1.18.1" 1152 | isbinaryfile "^4.0.8" 1153 | lodash "^4.17.21" 1154 | log4js "^6.4.1" 1155 | mime "^2.5.2" 1156 | minimatch "^3.0.4" 1157 | mkdirp "^0.5.5" 1158 | qjobs "^1.2.0" 1159 | range-parser "^1.2.1" 1160 | rimraf "^3.0.2" 1161 | socket.io "^4.7.2" 1162 | source-map "^0.6.1" 1163 | tmp "^0.2.1" 1164 | ua-parser-js "^0.7.30" 1165 | yargs "^16.1.1" 1166 | 1167 | kind-of@^6.0.2: 1168 | version "6.0.3" 1169 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1170 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1171 | 1172 | kotlin-web-helpers@2.0.0: 1173 | version "2.0.0" 1174 | resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-2.0.0.tgz#b112096b273c1e733e0b86560998235c09a19286" 1175 | integrity sha512-xkVGl60Ygn/zuLkDPx+oHj7jeLR7hCvoNF99nhwXMn8a3ApB4lLiC9pk4ol4NHPjyoCbvQctBqvzUcp8pkqyWw== 1176 | dependencies: 1177 | format-util "^1.0.5" 1178 | 1179 | loader-runner@^4.2.0: 1180 | version "4.3.0" 1181 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" 1182 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== 1183 | 1184 | locate-path@^5.0.0: 1185 | version "5.0.0" 1186 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1187 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1188 | dependencies: 1189 | p-locate "^4.1.0" 1190 | 1191 | locate-path@^6.0.0: 1192 | version "6.0.0" 1193 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1194 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1195 | dependencies: 1196 | p-locate "^5.0.0" 1197 | 1198 | lodash@^4.17.15, lodash@^4.17.21: 1199 | version "4.17.21" 1200 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1201 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1202 | 1203 | log-symbols@^4.1.0: 1204 | version "4.1.0" 1205 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1206 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1207 | dependencies: 1208 | chalk "^4.1.0" 1209 | is-unicode-supported "^0.1.0" 1210 | 1211 | log4js@^6.4.1: 1212 | version "6.7.0" 1213 | resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.7.0.tgz#fff671a74b2f6e956d135c3c756c79072809a23b" 1214 | integrity sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q== 1215 | dependencies: 1216 | date-format "^4.0.14" 1217 | debug "^4.3.4" 1218 | flatted "^3.2.7" 1219 | rfdc "^1.3.0" 1220 | streamroller "^3.1.3" 1221 | 1222 | media-typer@0.3.0: 1223 | version "0.3.0" 1224 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1225 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 1226 | 1227 | merge-stream@^2.0.0: 1228 | version "2.0.0" 1229 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1230 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1231 | 1232 | mime-db@1.52.0: 1233 | version "1.52.0" 1234 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1235 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1236 | 1237 | mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: 1238 | version "2.1.35" 1239 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1240 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1241 | dependencies: 1242 | mime-db "1.52.0" 1243 | 1244 | mime@^2.5.2: 1245 | version "2.6.0" 1246 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" 1247 | integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== 1248 | 1249 | minimatch@^3.0.4, minimatch@^3.1.1: 1250 | version "3.1.2" 1251 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1252 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1253 | dependencies: 1254 | brace-expansion "^1.1.7" 1255 | 1256 | minimatch@^5.0.1, minimatch@^5.1.6: 1257 | version "5.1.6" 1258 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" 1259 | integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== 1260 | dependencies: 1261 | brace-expansion "^2.0.1" 1262 | 1263 | minimatch@^9.0.3: 1264 | version "9.0.5" 1265 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 1266 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 1267 | dependencies: 1268 | brace-expansion "^2.0.1" 1269 | 1270 | minimist@^1.2.3, minimist@^1.2.6: 1271 | version "1.2.7" 1272 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" 1273 | integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== 1274 | 1275 | mkdirp@^0.5.5: 1276 | version "0.5.6" 1277 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 1278 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 1279 | dependencies: 1280 | minimist "^1.2.6" 1281 | 1282 | mocha@10.7.3: 1283 | version "10.7.3" 1284 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752" 1285 | integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== 1286 | dependencies: 1287 | ansi-colors "^4.1.3" 1288 | browser-stdout "^1.3.1" 1289 | chokidar "^3.5.3" 1290 | debug "^4.3.5" 1291 | diff "^5.2.0" 1292 | escape-string-regexp "^4.0.0" 1293 | find-up "^5.0.0" 1294 | glob "^8.1.0" 1295 | he "^1.2.0" 1296 | js-yaml "^4.1.0" 1297 | log-symbols "^4.1.0" 1298 | minimatch "^5.1.6" 1299 | ms "^2.1.3" 1300 | serialize-javascript "^6.0.2" 1301 | strip-json-comments "^3.1.1" 1302 | supports-color "^8.1.1" 1303 | workerpool "^6.5.1" 1304 | yargs "^16.2.0" 1305 | yargs-parser "^20.2.9" 1306 | yargs-unparser "^2.0.0" 1307 | 1308 | ms@2.0.0: 1309 | version "2.0.0" 1310 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1311 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 1312 | 1313 | ms@2.1.2: 1314 | version "2.1.2" 1315 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1316 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1317 | 1318 | ms@^2.1.3: 1319 | version "2.1.3" 1320 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1321 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1322 | 1323 | negotiator@0.6.3: 1324 | version "0.6.3" 1325 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 1326 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 1327 | 1328 | neo-async@^2.6.2: 1329 | version "2.6.2" 1330 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 1331 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 1332 | 1333 | node-releases@^2.0.19: 1334 | version "2.0.19" 1335 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" 1336 | integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== 1337 | 1338 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1339 | version "3.0.0" 1340 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1341 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1342 | 1343 | object-assign@^4: 1344 | version "4.1.1" 1345 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1346 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1347 | 1348 | object-inspect@^1.9.0: 1349 | version "1.12.2" 1350 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 1351 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 1352 | 1353 | on-finished@2.4.1: 1354 | version "2.4.1" 1355 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 1356 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 1357 | dependencies: 1358 | ee-first "1.1.1" 1359 | 1360 | on-finished@~2.3.0: 1361 | version "2.3.0" 1362 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1363 | integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== 1364 | dependencies: 1365 | ee-first "1.1.1" 1366 | 1367 | once@^1.3.0: 1368 | version "1.4.0" 1369 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1370 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1371 | dependencies: 1372 | wrappy "1" 1373 | 1374 | p-limit@^2.2.0: 1375 | version "2.3.0" 1376 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1377 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1378 | dependencies: 1379 | p-try "^2.0.0" 1380 | 1381 | p-limit@^3.0.2: 1382 | version "3.1.0" 1383 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1384 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1385 | dependencies: 1386 | yocto-queue "^0.1.0" 1387 | 1388 | p-locate@^4.1.0: 1389 | version "4.1.0" 1390 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1391 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1392 | dependencies: 1393 | p-limit "^2.2.0" 1394 | 1395 | p-locate@^5.0.0: 1396 | version "5.0.0" 1397 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1398 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1399 | dependencies: 1400 | p-limit "^3.0.2" 1401 | 1402 | p-try@^2.0.0: 1403 | version "2.2.0" 1404 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1405 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1406 | 1407 | parseurl@~1.3.3: 1408 | version "1.3.3" 1409 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1410 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1411 | 1412 | path-exists@^4.0.0: 1413 | version "4.0.0" 1414 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1415 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1416 | 1417 | path-is-absolute@^1.0.0: 1418 | version "1.0.1" 1419 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1420 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1421 | 1422 | path-key@^3.1.0: 1423 | version "3.1.1" 1424 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1425 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1426 | 1427 | path-parse@^1.0.7: 1428 | version "1.0.7" 1429 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1430 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1431 | 1432 | picocolors@^1.1.1: 1433 | version "1.1.1" 1434 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" 1435 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== 1436 | 1437 | picomatch@^2.0.4, picomatch@^2.2.1: 1438 | version "2.3.1" 1439 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1440 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1441 | 1442 | pkg-dir@^4.2.0: 1443 | version "4.2.0" 1444 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1445 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1446 | dependencies: 1447 | find-up "^4.0.0" 1448 | 1449 | punycode@^2.1.0: 1450 | version "2.1.1" 1451 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1452 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1453 | 1454 | qjobs@^1.2.0: 1455 | version "1.2.0" 1456 | resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" 1457 | integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== 1458 | 1459 | qs@6.11.0: 1460 | version "6.11.0" 1461 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" 1462 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 1463 | dependencies: 1464 | side-channel "^1.0.4" 1465 | 1466 | randombytes@^2.1.0: 1467 | version "2.1.0" 1468 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1469 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1470 | dependencies: 1471 | safe-buffer "^5.1.0" 1472 | 1473 | range-parser@^1.2.1: 1474 | version "1.2.1" 1475 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1476 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1477 | 1478 | raw-body@2.5.1: 1479 | version "2.5.1" 1480 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 1481 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 1482 | dependencies: 1483 | bytes "3.1.2" 1484 | http-errors "2.0.0" 1485 | iconv-lite "0.4.24" 1486 | unpipe "1.0.0" 1487 | 1488 | readdirp@~3.6.0: 1489 | version "3.6.0" 1490 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1491 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1492 | dependencies: 1493 | picomatch "^2.2.1" 1494 | 1495 | rechoir@^0.8.0: 1496 | version "0.8.0" 1497 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" 1498 | integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== 1499 | dependencies: 1500 | resolve "^1.20.0" 1501 | 1502 | require-directory@^2.1.1: 1503 | version "2.1.1" 1504 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1505 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1506 | 1507 | require-from-string@^2.0.2: 1508 | version "2.0.2" 1509 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 1510 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 1511 | 1512 | requires-port@^1.0.0: 1513 | version "1.0.0" 1514 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 1515 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 1516 | 1517 | resolve-cwd@^3.0.0: 1518 | version "3.0.0" 1519 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 1520 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 1521 | dependencies: 1522 | resolve-from "^5.0.0" 1523 | 1524 | resolve-from@^5.0.0: 1525 | version "5.0.0" 1526 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 1527 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1528 | 1529 | resolve@^1.20.0: 1530 | version "1.22.2" 1531 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 1532 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 1533 | dependencies: 1534 | is-core-module "^2.11.0" 1535 | path-parse "^1.0.7" 1536 | supports-preserve-symlinks-flag "^1.0.0" 1537 | 1538 | rfdc@^1.3.0: 1539 | version "1.3.0" 1540 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" 1541 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 1542 | 1543 | rimraf@^3.0.0, rimraf@^3.0.2: 1544 | version "3.0.2" 1545 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1546 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1547 | dependencies: 1548 | glob "^7.1.3" 1549 | 1550 | safe-buffer@^5.1.0: 1551 | version "5.2.1" 1552 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1553 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1554 | 1555 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": 1556 | version "2.1.2" 1557 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1558 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1559 | 1560 | schema-utils@^3.2.0: 1561 | version "3.3.0" 1562 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" 1563 | integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== 1564 | dependencies: 1565 | "@types/json-schema" "^7.0.8" 1566 | ajv "^6.12.5" 1567 | ajv-keywords "^3.5.2" 1568 | 1569 | schema-utils@^4.3.0: 1570 | version "4.3.0" 1571 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.0.tgz#3b669f04f71ff2dfb5aba7ce2d5a9d79b35622c0" 1572 | integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g== 1573 | dependencies: 1574 | "@types/json-schema" "^7.0.9" 1575 | ajv "^8.9.0" 1576 | ajv-formats "^2.1.1" 1577 | ajv-keywords "^5.1.0" 1578 | 1579 | serialize-javascript@^6.0.2: 1580 | version "6.0.2" 1581 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" 1582 | integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== 1583 | dependencies: 1584 | randombytes "^2.1.0" 1585 | 1586 | setprototypeof@1.2.0: 1587 | version "1.2.0" 1588 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1589 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1590 | 1591 | shallow-clone@^3.0.0: 1592 | version "3.0.1" 1593 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" 1594 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== 1595 | dependencies: 1596 | kind-of "^6.0.2" 1597 | 1598 | shebang-command@^2.0.0: 1599 | version "2.0.0" 1600 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1601 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1602 | dependencies: 1603 | shebang-regex "^3.0.0" 1604 | 1605 | shebang-regex@^3.0.0: 1606 | version "3.0.0" 1607 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1608 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1609 | 1610 | side-channel@^1.0.4: 1611 | version "1.0.4" 1612 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1613 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1614 | dependencies: 1615 | call-bind "^1.0.0" 1616 | get-intrinsic "^1.0.2" 1617 | object-inspect "^1.9.0" 1618 | 1619 | socket.io-adapter@~2.5.2: 1620 | version "2.5.5" 1621 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082" 1622 | integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg== 1623 | dependencies: 1624 | debug "~4.3.4" 1625 | ws "~8.17.1" 1626 | 1627 | socket.io-parser@~4.2.4: 1628 | version "4.2.4" 1629 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" 1630 | integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== 1631 | dependencies: 1632 | "@socket.io/component-emitter" "~3.1.0" 1633 | debug "~4.3.1" 1634 | 1635 | socket.io@^4.7.2: 1636 | version "4.8.1" 1637 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.1.tgz#fa0eaff965cc97fdf4245e8d4794618459f7558a" 1638 | integrity sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg== 1639 | dependencies: 1640 | accepts "~1.3.4" 1641 | base64id "~2.0.0" 1642 | cors "~2.8.5" 1643 | debug "~4.3.2" 1644 | engine.io "~6.6.0" 1645 | socket.io-adapter "~2.5.2" 1646 | socket.io-parser "~4.2.4" 1647 | 1648 | source-map-js@^1.0.2: 1649 | version "1.0.2" 1650 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1651 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1652 | 1653 | source-map-loader@5.0.0: 1654 | version "5.0.0" 1655 | resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" 1656 | integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== 1657 | dependencies: 1658 | iconv-lite "^0.6.3" 1659 | source-map-js "^1.0.2" 1660 | 1661 | source-map-support@0.5.21, source-map-support@~0.5.20: 1662 | version "0.5.21" 1663 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1664 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1665 | dependencies: 1666 | buffer-from "^1.0.0" 1667 | source-map "^0.6.0" 1668 | 1669 | source-map@^0.6.0, source-map@^0.6.1: 1670 | version "0.6.1" 1671 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1672 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1673 | 1674 | statuses@2.0.1: 1675 | version "2.0.1" 1676 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 1677 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1678 | 1679 | statuses@~1.5.0: 1680 | version "1.5.0" 1681 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1682 | integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== 1683 | 1684 | streamroller@^3.1.3: 1685 | version "3.1.3" 1686 | resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.3.tgz#d95689a8c29b30d093525d0baffe6616fd62ca7e" 1687 | integrity sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w== 1688 | dependencies: 1689 | date-format "^4.0.14" 1690 | debug "^4.3.4" 1691 | fs-extra "^8.1.0" 1692 | 1693 | string-width@^4.1.0, string-width@^4.2.0: 1694 | version "4.2.3" 1695 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1696 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1697 | dependencies: 1698 | emoji-regex "^8.0.0" 1699 | is-fullwidth-code-point "^3.0.0" 1700 | strip-ansi "^6.0.1" 1701 | 1702 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1703 | version "6.0.1" 1704 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1705 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1706 | dependencies: 1707 | ansi-regex "^5.0.1" 1708 | 1709 | strip-json-comments@^3.1.1: 1710 | version "3.1.1" 1711 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1712 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1713 | 1714 | supports-color@^7.1.0: 1715 | version "7.2.0" 1716 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1717 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1718 | dependencies: 1719 | has-flag "^4.0.0" 1720 | 1721 | supports-color@^8.0.0, supports-color@^8.1.1: 1722 | version "8.1.1" 1723 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1724 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1725 | dependencies: 1726 | has-flag "^4.0.0" 1727 | 1728 | supports-preserve-symlinks-flag@^1.0.0: 1729 | version "1.0.0" 1730 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1731 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1732 | 1733 | tapable@^2.1.1, tapable@^2.2.0: 1734 | version "2.2.1" 1735 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 1736 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 1737 | 1738 | terser-webpack-plugin@^5.3.10: 1739 | version "5.3.14" 1740 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" 1741 | integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== 1742 | dependencies: 1743 | "@jridgewell/trace-mapping" "^0.3.25" 1744 | jest-worker "^27.4.5" 1745 | schema-utils "^4.3.0" 1746 | serialize-javascript "^6.0.2" 1747 | terser "^5.31.1" 1748 | 1749 | terser@^5.31.1: 1750 | version "5.39.0" 1751 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a" 1752 | integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw== 1753 | dependencies: 1754 | "@jridgewell/source-map" "^0.3.3" 1755 | acorn "^8.8.2" 1756 | commander "^2.20.0" 1757 | source-map-support "~0.5.20" 1758 | 1759 | tmp@^0.2.1: 1760 | version "0.2.1" 1761 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" 1762 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 1763 | dependencies: 1764 | rimraf "^3.0.0" 1765 | 1766 | to-regex-range@^5.0.1: 1767 | version "5.0.1" 1768 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1769 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1770 | dependencies: 1771 | is-number "^7.0.0" 1772 | 1773 | toidentifier@1.0.1: 1774 | version "1.0.1" 1775 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1776 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1777 | 1778 | type-is@~1.6.18: 1779 | version "1.6.18" 1780 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1781 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1782 | dependencies: 1783 | media-typer "0.3.0" 1784 | mime-types "~2.1.24" 1785 | 1786 | typescript@5.5.4: 1787 | version "5.5.4" 1788 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" 1789 | integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== 1790 | 1791 | ua-parser-js@^0.7.30: 1792 | version "0.7.32" 1793 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz#cd8c639cdca949e30fa68c44b7813ef13e36d211" 1794 | integrity sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw== 1795 | 1796 | universalify@^0.1.0: 1797 | version "0.1.2" 1798 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 1799 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 1800 | 1801 | unpipe@1.0.0, unpipe@~1.0.0: 1802 | version "1.0.0" 1803 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1804 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 1805 | 1806 | update-browserslist-db@^1.1.1: 1807 | version "1.1.3" 1808 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" 1809 | integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== 1810 | dependencies: 1811 | escalade "^3.2.0" 1812 | picocolors "^1.1.1" 1813 | 1814 | uri-js@^4.2.2: 1815 | version "4.4.1" 1816 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1817 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1818 | dependencies: 1819 | punycode "^2.1.0" 1820 | 1821 | utils-merge@1.0.1: 1822 | version "1.0.1" 1823 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1824 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 1825 | 1826 | vary@^1: 1827 | version "1.1.2" 1828 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1829 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 1830 | 1831 | void-elements@^2.0.0: 1832 | version "2.0.1" 1833 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" 1834 | integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== 1835 | 1836 | watchpack@^2.4.1: 1837 | version "2.4.2" 1838 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" 1839 | integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== 1840 | dependencies: 1841 | glob-to-regexp "^0.4.1" 1842 | graceful-fs "^4.1.2" 1843 | 1844 | webpack-cli@5.1.4: 1845 | version "5.1.4" 1846 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" 1847 | integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== 1848 | dependencies: 1849 | "@discoveryjs/json-ext" "^0.5.0" 1850 | "@webpack-cli/configtest" "^2.1.1" 1851 | "@webpack-cli/info" "^2.0.2" 1852 | "@webpack-cli/serve" "^2.0.5" 1853 | colorette "^2.0.14" 1854 | commander "^10.0.1" 1855 | cross-spawn "^7.0.3" 1856 | envinfo "^7.7.3" 1857 | fastest-levenshtein "^1.0.12" 1858 | import-local "^3.0.2" 1859 | interpret "^3.1.1" 1860 | rechoir "^0.8.0" 1861 | webpack-merge "^5.7.3" 1862 | 1863 | webpack-merge@^4.1.5: 1864 | version "4.2.2" 1865 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" 1866 | integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== 1867 | dependencies: 1868 | lodash "^4.17.15" 1869 | 1870 | webpack-merge@^5.7.3: 1871 | version "5.8.0" 1872 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" 1873 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== 1874 | dependencies: 1875 | clone-deep "^4.0.1" 1876 | wildcard "^2.0.0" 1877 | 1878 | webpack-sources@^3.2.3: 1879 | version "3.2.3" 1880 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" 1881 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== 1882 | 1883 | webpack@5.94.0: 1884 | version "5.94.0" 1885 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" 1886 | integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== 1887 | dependencies: 1888 | "@types/estree" "^1.0.5" 1889 | "@webassemblyjs/ast" "^1.12.1" 1890 | "@webassemblyjs/wasm-edit" "^1.12.1" 1891 | "@webassemblyjs/wasm-parser" "^1.12.1" 1892 | acorn "^8.7.1" 1893 | acorn-import-attributes "^1.9.5" 1894 | browserslist "^4.21.10" 1895 | chrome-trace-event "^1.0.2" 1896 | enhanced-resolve "^5.17.1" 1897 | es-module-lexer "^1.2.1" 1898 | eslint-scope "5.1.1" 1899 | events "^3.2.0" 1900 | glob-to-regexp "^0.4.1" 1901 | graceful-fs "^4.2.11" 1902 | json-parse-even-better-errors "^2.3.1" 1903 | loader-runner "^4.2.0" 1904 | mime-types "^2.1.27" 1905 | neo-async "^2.6.2" 1906 | schema-utils "^3.2.0" 1907 | tapable "^2.1.1" 1908 | terser-webpack-plugin "^5.3.10" 1909 | watchpack "^2.4.1" 1910 | webpack-sources "^3.2.3" 1911 | 1912 | which@^1.2.1: 1913 | version "1.3.1" 1914 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1915 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1916 | dependencies: 1917 | isexe "^2.0.0" 1918 | 1919 | which@^2.0.1: 1920 | version "2.0.2" 1921 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1922 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1923 | dependencies: 1924 | isexe "^2.0.0" 1925 | 1926 | wildcard@^2.0.0: 1927 | version "2.0.0" 1928 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" 1929 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== 1930 | 1931 | workerpool@^6.5.1: 1932 | version "6.5.1" 1933 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" 1934 | integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== 1935 | 1936 | wrap-ansi@^7.0.0: 1937 | version "7.0.0" 1938 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1939 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1940 | dependencies: 1941 | ansi-styles "^4.0.0" 1942 | string-width "^4.1.0" 1943 | strip-ansi "^6.0.0" 1944 | 1945 | wrappy@1: 1946 | version "1.0.2" 1947 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1948 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1949 | 1950 | ws@~8.17.1: 1951 | version "8.17.1" 1952 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" 1953 | integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== 1954 | 1955 | y18n@^5.0.5: 1956 | version "5.0.8" 1957 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1958 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1959 | 1960 | yargs-parser@^20.2.2, yargs-parser@^20.2.9: 1961 | version "20.2.9" 1962 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1963 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1964 | 1965 | yargs-unparser@^2.0.0: 1966 | version "2.0.0" 1967 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1968 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1969 | dependencies: 1970 | camelcase "^6.0.0" 1971 | decamelize "^4.0.0" 1972 | flat "^5.0.2" 1973 | is-plain-obj "^2.1.0" 1974 | 1975 | yargs@^16.1.1, yargs@^16.2.0: 1976 | version "16.2.0" 1977 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1978 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1979 | dependencies: 1980 | cliui "^7.0.2" 1981 | escalade "^3.1.1" 1982 | get-caller-file "^2.0.5" 1983 | require-directory "^2.1.1" 1984 | string-width "^4.2.0" 1985 | y18n "^5.0.5" 1986 | yargs-parser "^20.2.2" 1987 | 1988 | yocto-queue@^0.1.0: 1989 | version "0.1.0" 1990 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1991 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1992 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | @file:Suppress("UnstableApiUsage") 2 | 3 | pluginManagement { 4 | repositories { 5 | mavenCentral() 6 | gradlePluginPortal() 7 | } 8 | } 9 | 10 | dependencyResolutionManagement { 11 | repositories { 12 | mavenCentral() 13 | } 14 | } 15 | 16 | plugins { 17 | id("com.gradle.develocity") version "4.0" 18 | } 19 | 20 | val isCiBuild = providers.environmentVariable("CI").isPresent 21 | 22 | develocity { 23 | buildScan { 24 | termsOfUseUrl.set("https://gradle.com/help/legal-terms-of-use") 25 | termsOfUseAgree.set("yes") 26 | publishing.onlyIf { isCiBuild } 27 | } 28 | } 29 | 30 | rootProject.name = "semver" 31 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/net/swiftzer/semver/SemVer.kt: -------------------------------------------------------------------------------- 1 | package net.swiftzer.semver 2 | 3 | import kotlinx.serialization.Serializable 4 | import kotlin.jvm.JvmStatic 5 | import kotlin.math.min 6 | 7 | /** 8 | * Version number in [Semantic Versioning 2.0.0](http://semver.org/spec/v2.0.0.html) specification (SemVer). 9 | * 10 | * @property major major version, increment it when you make incompatible API changes. 11 | * @property minor minor version, increment it when you add functionality in a backwards-compatible manner. 12 | * @property patch patch version, increment it when you make backwards-compatible bug fixes. 13 | * @property preRelease pre-release version. 14 | * @property buildMetadata build metadata. 15 | */ 16 | @Serializable(with = SemVerSerializer::class) 17 | public data class SemVer( 18 | val major: Int, 19 | val minor: Int = 0, 20 | val patch: Int = 0, 21 | val preRelease: String? = null, 22 | val buildMetadata: String? = null, 23 | ) : Comparable { 24 | 25 | init { 26 | require(major >= 0) { "Major version must be a positive number" } 27 | require(minor >= 0) { "Minor version must be a positive number" } 28 | require(patch >= 0) { "Patch version must be a positive number" } 29 | if (preRelease != null) require(PreReleasePattern matches preRelease) { "Pre-release version is not valid" } 30 | if (buildMetadata != null) require(BuildMetadataPattern matches buildMetadata) { "Build metadata is not valid" } 31 | } 32 | 33 | /** 34 | * Create a new [SemVer] with the next major number. Minor and patch number becomes 0. 35 | * Pre-release and build metadata information is not applied to the new version. 36 | * 37 | * @return next major version 38 | * @throws NumberFormatException if the next major number exceed [Int] range. 39 | */ 40 | public fun nextMajor(): SemVer { 41 | return SemVer(major = major + 1) 42 | } 43 | 44 | /** 45 | * Create a new [SemVer] with the same major number and the next minor number. Patch number becomes 0. 46 | * Pre-release and build metadata information is not applied to the new version. 47 | * 48 | * @return next minor version 49 | * @throws NumberFormatException if the next minor number exceed [Int] range. 50 | */ 51 | public fun nextMinor(): SemVer { 52 | return SemVer(major = major, minor = minor + 1) 53 | } 54 | 55 | /** 56 | * Create a new [SemVer] with the same major and minor number and the next patch number. 57 | * Pre-release and build metadata information is not applied to the new version. 58 | * 59 | * @return next patch version 60 | * @throws NumberFormatException if the next patch number exceed [Int] range. 61 | */ 62 | public fun nextPatch(): SemVer { 63 | return SemVer(major = major, minor = minor, patch = patch + 1) 64 | } 65 | 66 | @Suppress("CyclomaticComplexMethod", "ReturnCount") 67 | override fun compareTo(other: SemVer): Int { 68 | if (major > other.major) return 1 69 | if (major < other.major) return -1 70 | if (minor > other.minor) return 1 71 | if (minor < other.minor) return -1 72 | if (patch > other.patch) return 1 73 | if (patch < other.patch) return -1 74 | 75 | // When major, minor, and patch are equal, a pre-release version has lower precedence than a normal version 76 | if (preRelease != null && other.preRelease == null) return -1 77 | if (preRelease == null && other.preRelease != null) return 1 78 | if (preRelease == null && other.preRelease == null) return 0 79 | 80 | // Precedence for two pre-release versions with the same major, minor, and patch version MUST be determined by 81 | // comparing each dot separated identifier from left to right until a difference is found 82 | val parts = preRelease!!.split(".") 83 | val otherParts = other.preRelease!!.split(".") 84 | 85 | val smallerSize = min(parts.size, otherParts.size) 86 | for (i in 0 until smallerSize) { 87 | val part = parts[i] 88 | val otherPart = otherParts[i] 89 | if (part == otherPart) continue 90 | val partIsNumeric = part.isNumeric() 91 | val otherPartIsNumeric = otherPart.isNumeric() 92 | 93 | return when { 94 | partIsNumeric && !otherPartIsNumeric -> -1 95 | !partIsNumeric && otherPartIsNumeric -> 1 96 | !partIsNumeric && !otherPartIsNumeric -> part.compareTo(otherPart) 97 | else -> try { 98 | val partLong = part.toLong() 99 | val otherPartLong = otherPart.toLong() 100 | partLong.compareTo(otherPartLong) 101 | } catch (_: NumberFormatException) { 102 | // When part or otherPart doesn't fit in Long type, compare as String 103 | // It is not the standard way, 104 | // but because there is no proper BigDecimal class for Kotlin Multiplatform, 105 | // we have to use this way 106 | part.compareTo(otherPart) 107 | } 108 | } 109 | } 110 | return when { 111 | parts.size == smallerSize && otherParts.size > smallerSize -> { 112 | // parts is ended and otherParts is not ended 113 | -1 114 | } 115 | 116 | parts.size > smallerSize && otherParts.size == smallerSize -> { 117 | // parts is not ended and otherParts is ended 118 | 1 119 | } 120 | 121 | else -> 0 122 | } 123 | } 124 | 125 | /** 126 | * Check the version number is in initial development. 127 | * 128 | * @return true if it is in initial development. 129 | */ 130 | public fun isInitialDevelopmentPhase(): Boolean = major == 0 131 | 132 | /** 133 | * Build the version name string. 134 | * 135 | * @return version name string in Semantic Versioning 2.0.0 specification. 136 | */ 137 | override fun toString(): String = buildString { 138 | append(major) 139 | append('.') 140 | append(minor) 141 | append('.') 142 | append(patch) 143 | if (preRelease != null) { 144 | append('-') 145 | append(preRelease) 146 | } 147 | if (buildMetadata != null) { 148 | append('+') 149 | append(buildMetadata) 150 | } 151 | } 152 | 153 | private fun String.isNumeric(): Boolean = NumericPattern.matches(this) 154 | 155 | public companion object { 156 | private val NumericPattern = Regex("""^\d+$""") 157 | private val PreReleasePattern = 158 | Regex("""^(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*$""") 159 | private val BuildMetadataPattern: Regex = Regex("""^[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*$""") 160 | 161 | @Suppress("MaxLineLength") 162 | private val FullPattern = Regex( 163 | """^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$""", 164 | ) 165 | 166 | /** 167 | * Parse the version string to [SemVer]. 168 | * 169 | * @param version version string to be parsed. 170 | * @return parsed [SemVer]. 171 | * @throws IllegalArgumentException if the given string is not a valid version. 172 | * @throws NumberFormatException if [major], [minor], [patch] values exceed [Int] range. 173 | */ 174 | @JvmStatic 175 | @Suppress("DestructuringDeclarationWithTooManyEntries") 176 | public fun parse(version: String): SemVer { 177 | val (major, minor, patch, preRelease, buildMetadata) = ( 178 | FullPattern.matchEntire(version) 179 | ?: throw IllegalArgumentException("Invalid version string [$version]") 180 | ).destructured 181 | return SemVer( 182 | major = major.toInt(), 183 | minor = minor.toInt(), 184 | patch = patch.toInt(), 185 | preRelease = preRelease.ifEmpty { null }, 186 | buildMetadata = buildMetadata.ifEmpty { null }, 187 | ) 188 | } 189 | 190 | /** 191 | * Parse the version string to [SemVer]. 192 | * 193 | * @param version version string to be parsed. 194 | * @return parsed [SemVer] or null if it cannot be parsed. 195 | */ 196 | @JvmStatic 197 | public fun parseOrNull(version: String): SemVer? = try { 198 | parse(version = version) 199 | } catch (_: IllegalArgumentException) { 200 | null 201 | } 202 | } 203 | } 204 | -------------------------------------------------------------------------------- /src/commonMain/kotlin/net/swiftzer/semver/SemVerSerializer.kt: -------------------------------------------------------------------------------- 1 | package net.swiftzer.semver 2 | 3 | import kotlinx.serialization.KSerializer 4 | import kotlinx.serialization.SerializationException 5 | import kotlinx.serialization.descriptors.PrimitiveKind 6 | import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor 7 | import kotlinx.serialization.descriptors.SerialDescriptor 8 | import kotlinx.serialization.encoding.Decoder 9 | import kotlinx.serialization.encoding.Encoder 10 | 11 | public object SemVerSerializer : KSerializer { 12 | override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( 13 | serialName = "SemVer", 14 | kind = PrimitiveKind.STRING 15 | ) 16 | 17 | override fun serialize(encoder: Encoder, value: SemVer) { 18 | encoder.encodeString(value.toString()) 19 | } 20 | 21 | override fun deserialize(decoder: Decoder): SemVer = try { 22 | SemVer.parse(decoder.decodeString()) 23 | } catch (e: IllegalArgumentException) { 24 | throw SerializationException(e) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/commonTest/kotlin/net/swiftzer/semver/SemVerSerializerTest.kt: -------------------------------------------------------------------------------- 1 | package net.swiftzer.semver 2 | 3 | import io.kotest.assertions.throwables.shouldThrow 4 | import io.kotest.matchers.shouldBe 5 | import io.kotest.matchers.types.shouldBeInstanceOf 6 | import kotlinx.serialization.Serializable 7 | import kotlinx.serialization.SerializationException 8 | import kotlinx.serialization.descriptors.PrimitiveKind 9 | import kotlinx.serialization.json.Json 10 | import kotlin.test.Test 11 | 12 | class SemVerSerializerTest { 13 | private val json = Json 14 | 15 | @Test 16 | fun descriptor() { 17 | SemVerSerializer.descriptor.apply { 18 | serialName shouldBe "SemVer" 19 | kind shouldBe PrimitiveKind.STRING 20 | } 21 | } 22 | 23 | @Test 24 | fun serialize() { 25 | json.encodeToString( 26 | DummyData( 27 | semVer = SemVer( 28 | major = 2, 29 | minor = 0, 30 | patch = 0, 31 | preRelease = "rc.1", 32 | buildMetadata = "build.123", 33 | ), 34 | number = 12345, 35 | ), 36 | ) shouldBe """{"semVer":"2.0.0-rc.1+build.123","number":12345}""" 37 | } 38 | 39 | @Test 40 | fun deserializeSuccess() { 41 | json.decodeFromString( 42 | """{"semVer":"2.0.0-rc.1+build.123","number":12345}""", 43 | ) shouldBe DummyData( 44 | semVer = SemVer( 45 | major = 2, 46 | minor = 0, 47 | patch = 0, 48 | preRelease = "rc.1", 49 | buildMetadata = "build.123", 50 | ), 51 | number = 12345, 52 | ) 53 | } 54 | 55 | @Test 56 | fun deserializeIllegalArgumentException() { 57 | shouldThrow { 58 | json.decodeFromString( 59 | """{"semVer":"1.1.2+.123","number":12345}""", 60 | ) 61 | }.cause.shouldBeInstanceOf() 62 | } 63 | 64 | @Test 65 | fun deserializeNumberFormatException() { 66 | shouldThrow { 67 | json.decodeFromString( 68 | """{"semVer":"99999999999999999999999.999999999999999999.99999999999999999","number":12345}""", 69 | ) 70 | }.cause.shouldBeInstanceOf() 71 | } 72 | } 73 | 74 | @Serializable 75 | private data class DummyData( 76 | val semVer: SemVer, 77 | val number: Int, 78 | ) 79 | -------------------------------------------------------------------------------- /src/commonTest/kotlin/net/swiftzer/semver/SemVerTest.kt: -------------------------------------------------------------------------------- 1 | package net.swiftzer.semver 2 | 3 | import app.cash.burst.Burst 4 | import app.cash.burst.burstValues 5 | import io.kotest.assertions.throwables.shouldThrow 6 | import io.kotest.matchers.booleans.shouldBeFalse 7 | import io.kotest.matchers.booleans.shouldBeTrue 8 | import io.kotest.matchers.ints.shouldBeNegative 9 | import io.kotest.matchers.ints.shouldBePositive 10 | import io.kotest.matchers.nulls.shouldBeNull 11 | import io.kotest.matchers.shouldBe 12 | import kotlin.test.Test 13 | 14 | @Burst 15 | class SemVerTest { 16 | @Test 17 | fun initMajorValidation() { 18 | SemVer(major = 0).major shouldBe 0 19 | SemVer(major = 1).major shouldBe 1 20 | shouldThrow { SemVer(major = -1) } 21 | } 22 | 23 | @Test 24 | fun initMinorValidation() { 25 | SemVer(major = 0, minor = 0).minor shouldBe 0 26 | SemVer(major = 0, minor = 1).minor shouldBe 1 27 | shouldThrow { SemVer(major = 0, minor = -1) } 28 | } 29 | 30 | @Test 31 | fun initPatchValidation() { 32 | SemVer(major = 0, patch = 0).patch shouldBe 0 33 | SemVer(major = 0, patch = 1).patch shouldBe 1 34 | shouldThrow { SemVer(major = 0, patch = -1) } 35 | } 36 | 37 | @Test 38 | fun initPreReleaseValidation() { 39 | SemVer(major = 0, preRelease = "a1B2c3").preRelease shouldBe "a1B2c3" 40 | SemVer(major = 0, preRelease = "0").preRelease shouldBe "0" 41 | SemVer(major = 0, preRelease = "01s").preRelease shouldBe "01s" 42 | SemVer(major = 0, preRelease = "1").preRelease shouldBe "1" 43 | SemVer(major = 0, preRelease = "1024").preRelease shouldBe "1024" 44 | SemVer(major = 0, preRelease = "--a1b2C3").preRelease shouldBe "--a1b2C3" 45 | 46 | shouldThrow { SemVer(major = 0, preRelease = " ") } 47 | shouldThrow { SemVer(major = 0, preRelease = "a!bc") } 48 | shouldThrow { SemVer(major = 0, preRelease = "007") } 49 | shouldThrow { SemVer(major = 0, preRelease = " --a1b2C3") } 50 | shouldThrow { SemVer(major = 0, preRelease = "--a1b2C3 ") } 51 | } 52 | 53 | @Test 54 | fun initBuildMetadataValidation() { 55 | SemVer(major = 0, buildMetadata = "meta-valid").buildMetadata shouldBe "meta-valid" 56 | SemVer(major = 0, buildMetadata = "0").buildMetadata shouldBe "0" 57 | SemVer(major = 0, buildMetadata = "1").buildMetadata shouldBe "1" 58 | SemVer( 59 | major = 0, buildMetadata = "0.build.1-rc.10000aaa-kk-0.1", 60 | ).buildMetadata shouldBe "0.build.1-rc.10000aaa-kk-0.1" 61 | SemVer(major = 0, buildMetadata = "--a1b2C3").buildMetadata shouldBe "--a1b2C3" 62 | shouldThrow { SemVer(major = 0, buildMetadata = " ") } 63 | shouldThrow { SemVer(major = 0, buildMetadata = "a!bc") } 64 | shouldThrow { SemVer(major = 0, buildMetadata = "meta+meta") } 65 | shouldThrow { SemVer(major = 0, buildMetadata = "+meta") } 66 | shouldThrow { SemVer(major = 0, buildMetadata = " a1b2C3") } 67 | shouldThrow { SemVer(major = 0, buildMetadata = "a1b2C3 ") } 68 | } 69 | 70 | @Test 71 | fun isInitialDevelopmentPhase() { 72 | SemVer(0, 1, 2).isInitialDevelopmentPhase().shouldBeTrue() 73 | SemVer(1, 2, 3).isInitialDevelopmentPhase().shouldBeFalse() 74 | } 75 | 76 | @Test 77 | fun nextMajor() { 78 | SemVer(major = 1, minor = 3, patch = 5, preRelease = "prerelease", buildMetadata = "meta") 79 | .nextMajor() shouldBe SemVer(major = 2, minor = 0, patch = 0) 80 | } 81 | 82 | @Test 83 | fun nextMinor() { 84 | SemVer(major = 1, minor = 3, patch = 5, preRelease = "prerelease", buildMetadata = "meta") 85 | .nextMinor() shouldBe SemVer(major = 1, minor = 4, patch = 0) 86 | } 87 | 88 | @Test 89 | fun nextPatch() { 90 | SemVer(major = 1, minor = 3, patch = 5, preRelease = "prerelease", buildMetadata = "meta") 91 | .nextPatch() shouldBe SemVer(major = 1, minor = 3, patch = 6) 92 | } 93 | 94 | @Test 95 | fun testToString() { 96 | SemVer(major = 0, minor = 11, patch = 222).toString() shouldBe "0.11.222" 97 | SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha.1").toString() shouldBe "1.0.0-alpha.1" 98 | SemVer( 99 | major = 1, minor = 1, patch = 2, preRelease = null, buildMetadata = "meta-valid", 100 | ).toString() shouldBe "1.1.2+meta-valid" 101 | SemVer( 102 | major = 2, minor = 0, patch = 0, preRelease = "rc.1", buildMetadata = "build.123", 103 | ).toString() shouldBe "2.0.0-rc.1+build.123" 104 | } 105 | 106 | @Test 107 | fun compareToMajor() { 108 | val smaller = SemVer(major = 1) 109 | val larger = SemVer(major = 2) 110 | smaller.compareTo(larger).shouldBeNegative() 111 | larger.compareTo(smaller).shouldBePositive() 112 | smaller.compareTo(smaller) shouldBe 0 113 | } 114 | 115 | @Test 116 | fun compareToMinor() { 117 | val smaller = SemVer(major = 1, minor = 1) 118 | val larger = SemVer(major = 1, minor = 2) 119 | smaller.compareTo(larger).shouldBeNegative() 120 | larger.compareTo(smaller).shouldBePositive() 121 | smaller.compareTo(smaller) shouldBe 0 122 | } 123 | 124 | @Test 125 | fun compareToPatch() { 126 | val smaller = SemVer(major = 1, minor = 1, patch = 1) 127 | val larger = SemVer(major = 1, minor = 1, patch = 2) 128 | smaller.compareTo(larger).shouldBeNegative() 129 | larger.compareTo(smaller).shouldBePositive() 130 | smaller.compareTo(smaller) shouldBe 0 131 | } 132 | 133 | @Test 134 | fun compareToRelease() { 135 | val version1 = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha") 136 | val version2 = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha.1") 137 | val version3 = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha.beta") 138 | val version4 = SemVer(major = 1, minor = 0, patch = 0, preRelease = "beta") 139 | val version5 = SemVer(major = 1, minor = 0, patch = 0, preRelease = "beta.2") 140 | val version6 = SemVer(major = 1, minor = 0, patch = 0, preRelease = "beta.11") 141 | val version7 = SemVer(major = 1, minor = 0, patch = 0, preRelease = "rc.1") 142 | val version8 = SemVer(major = 1, minor = 0, patch = 0) 143 | 144 | version1.compareTo(version2).shouldBeNegative() 145 | version2.compareTo(version3).shouldBeNegative() 146 | version3.compareTo(version4).shouldBeNegative() 147 | version4.compareTo(version5).shouldBeNegative() 148 | version5.compareTo(version6).shouldBeNegative() 149 | version6.compareTo(version7).shouldBeNegative() 150 | version7.compareTo(version8).shouldBeNegative() 151 | version1.compareTo(version8).shouldBeNegative() 152 | 153 | version2.compareTo(version1).shouldBePositive() 154 | version3.compareTo(version2).shouldBePositive() 155 | version4.compareTo(version3).shouldBePositive() 156 | version5.compareTo(version4).shouldBePositive() 157 | version6.compareTo(version5).shouldBePositive() 158 | version7.compareTo(version6).shouldBePositive() 159 | version8.compareTo(version7).shouldBePositive() 160 | version8.compareTo(version1).shouldBePositive() 161 | 162 | version6.compareTo(version6) shouldBe 0 163 | } 164 | 165 | @Test 166 | fun comparePreReleaseExceedLongRange() { 167 | val smaller = SemVer(1, 0, 0, "111.99999999999999999999998") 168 | val larger = SemVer(1, 0, 0, "111.99999999999999999999999") 169 | smaller.compareTo(larger).shouldBeNegative() 170 | larger.compareTo(smaller).shouldBePositive() 171 | } 172 | 173 | @Test 174 | fun parseSuccess( 175 | param: Param = burstValues( 176 | Param( 177 | version = "0.0.4", 178 | expected = SemVer(major = 0, minor = 0, patch = 4), 179 | ), 180 | Param( 181 | version = "1.2.3", 182 | expected = SemVer(major = 1, minor = 2, patch = 3), 183 | ), 184 | Param( 185 | version = "10.20.30", 186 | expected = SemVer(major = 10, minor = 20, patch = 30), 187 | ), 188 | Param( 189 | version = "1.1.2-prerelease+meta", 190 | expected = SemVer( 191 | major = 1, 192 | minor = 1, 193 | patch = 2, 194 | preRelease = "prerelease", 195 | buildMetadata = "meta", 196 | ), 197 | ), 198 | Param( 199 | version = "1.1.2+meta", 200 | expected = SemVer(major = 1, minor = 1, patch = 2, preRelease = null, buildMetadata = "meta"), 201 | ), 202 | Param( 203 | version = "1.1.2+meta-valid", 204 | expected = SemVer(major = 1, minor = 1, patch = 2, preRelease = null, buildMetadata = "meta-valid"), 205 | ), 206 | Param( 207 | version = "1.0.0-alpha", 208 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha"), 209 | ), 210 | Param( 211 | version = "1.0.0-beta", 212 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "beta"), 213 | ), 214 | Param( 215 | version = "1.0.0-alpha.beta", 216 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha.beta"), 217 | ), 218 | Param( 219 | version = "1.0.0-alpha.beta.1", 220 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha.beta.1"), 221 | ), 222 | Param( 223 | version = "1.0.0-alpha.1", 224 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha.1"), 225 | ), 226 | Param( 227 | version = "1.0.0-alpha0.valid", 228 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha0.valid"), 229 | ), 230 | Param( 231 | version = "1.0.0-alpha.0valid", 232 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha.0valid"), 233 | ), 234 | Param( 235 | version = "1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay", 236 | expected = SemVer( 237 | major = 1, 238 | minor = 0, 239 | patch = 0, 240 | preRelease = "alpha-a.b-c-somethinglong", 241 | buildMetadata = "build.1-aef.1-its-okay", 242 | ), 243 | ), 244 | Param( 245 | version = "1.0.0-rc.1+build.1", 246 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "rc.1", buildMetadata = "build.1"), 247 | ), 248 | Param( 249 | version = "2.0.0-rc.1+build.123", 250 | expected = SemVer( 251 | major = 2, 252 | minor = 0, 253 | patch = 0, 254 | preRelease = "rc.1", 255 | buildMetadata = "build.123", 256 | ), 257 | ), 258 | Param( 259 | version = "1.2.3-beta", 260 | expected = SemVer(major = 1, minor = 2, patch = 3, preRelease = "beta"), 261 | ), 262 | Param( 263 | version = "10.2.3-DEV-SNAPSHOT", 264 | expected = SemVer(major = 10, minor = 2, patch = 3, preRelease = "DEV-SNAPSHOT"), 265 | ), 266 | Param( 267 | version = "1.2.3-SNAPSHOT-123", 268 | expected = SemVer(major = 1, minor = 2, patch = 3, preRelease = "SNAPSHOT-123"), 269 | ), 270 | Param( 271 | version = "1.0.0", 272 | expected = SemVer(major = 1, minor = 0, patch = 0), 273 | ), 274 | Param( 275 | version = "2.0.0", 276 | expected = SemVer(major = 2, minor = 0, patch = 0), 277 | ), 278 | Param( 279 | version = "1.1.7", 280 | expected = SemVer(major = 1, minor = 1, patch = 7), 281 | ), 282 | Param( 283 | version = "2.0.0+build.1848", 284 | expected = SemVer(major = 2, minor = 0, patch = 0, preRelease = null, buildMetadata = "build.1848"), 285 | ), 286 | Param( 287 | version = "2.0.1-alpha.1227", 288 | expected = SemVer(major = 2, minor = 0, patch = 1, preRelease = "alpha.1227"), 289 | ), 290 | Param( 291 | version = "1.0.0-alpha+beta", 292 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "alpha", buildMetadata = "beta"), 293 | ), 294 | Param( 295 | version = "1.2.3----RC-SNAPSHOT.12.9.1--.12+788", 296 | expected = SemVer( 297 | major = 1, 298 | minor = 2, 299 | patch = 3, 300 | preRelease = "---RC-SNAPSHOT.12.9.1--.12", 301 | buildMetadata = "788", 302 | ), 303 | ), 304 | Param( 305 | version = "1.2.3----R-S.12.9.1--.12+meta", 306 | expected = SemVer( 307 | major = 1, 308 | minor = 2, 309 | patch = 3, 310 | preRelease = "---R-S.12.9.1--.12", 311 | buildMetadata = "meta", 312 | ), 313 | ), 314 | Param( 315 | version = "1.2.3----RC-SNAPSHOT.12.9.1--.12", 316 | expected = SemVer(major = 1, minor = 2, patch = 3, preRelease = "---RC-SNAPSHOT.12.9.1--.12"), 317 | ), 318 | Param( 319 | version = "1.0.0+0.build.1-rc.10000aaa-kk-0.1", 320 | expected = SemVer( 321 | major = 1, 322 | minor = 0, 323 | patch = 0, 324 | preRelease = null, 325 | buildMetadata = "0.build.1-rc.10000aaa-kk-0.1", 326 | ), 327 | ), 328 | Param( 329 | version = "1.0.0-0A.is.legal", 330 | expected = SemVer(major = 1, minor = 0, patch = 0, preRelease = "0A.is.legal"), 331 | ), 332 | ) 333 | ) { 334 | SemVer.parse(param.version) shouldBe param.expected 335 | SemVer.parseOrNull(param.version) shouldBe param.expected 336 | } 337 | 338 | @Suppress("MaxLineLength") 339 | @Test 340 | fun parseFail( 341 | version: String = burstValues( 342 | "v1.2.3", 343 | " 1.2.3", 344 | "1.2.3 ", 345 | "1", 346 | "a", 347 | "1.2", 348 | "1.2.3-0123", 349 | "1.2.3-0123.0123", 350 | "1.1.2+.123", 351 | "+invalid", 352 | "-invalid", 353 | "-invalid+invalid", 354 | "-invalid.01", 355 | "alpha", 356 | "alpha.beta", 357 | "alpha.beta.1", 358 | "alpha.1", 359 | "alpha+beta", 360 | "alpha_beta", 361 | "alpha.", 362 | "alpha..", 363 | "beta", 364 | "1.0.0-alpha_beta", 365 | "-alpha.", 366 | "1.0.0-alpha..", 367 | "1.0.0-alpha..1", 368 | "1.0.0-alpha...1", 369 | "1.0.0-alpha....1", 370 | "1.0.0-alpha.....1", 371 | "1.0.0-alpha......1", 372 | "1.0.0-alpha.......1", 373 | "01.1.1", 374 | "1.01.1", 375 | "1.1.01", 376 | "1.2.3.DEV", 377 | "1.2-SNAPSHOT", 378 | "1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788", 379 | "1.2-RC-SNAPSHOT", 380 | "-1.0.3-gamma+b7718", 381 | "+justmeta", 382 | "9.8.7+meta+meta", 383 | "9.8.7-whatever+meta+meta", 384 | "99999999999999999999999.999999999999999999.99999999999999999----RC-SNAPSHOT.12.09.1--------------------------------..12", 385 | ) 386 | ) { 387 | shouldThrow { SemVer.parse(version) } 388 | SemVer.parseOrNull(version).shouldBeNull() 389 | } 390 | 391 | @Test 392 | fun parseExceedIntRange() { 393 | // The type for major/minor/patch are Long, thus throw exception 394 | shouldThrow { 395 | SemVer.parse("99999999999999999999999.999999999999999999.99999999999999999") 396 | } 397 | } 398 | 399 | @Test 400 | fun parseOrNullExceedIntRange() { 401 | // The type for major/minor/patch are Long, thus throw exception 402 | SemVer.parseOrNull("99999999999999999999999.999999999999999999.99999999999999999").shouldBeNull() 403 | } 404 | 405 | data class Param( 406 | val version: String, 407 | val expected: SemVer, 408 | ) 409 | } 410 | --------------------------------------------------------------------------------