diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index 572ca42..ffc5df7 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -24,6 +24,7 @@ jobs: with: distribution: 'adopt' java-version: 11 + - uses: gradle/gradle-build-action@v2 - name: Build with Gradle run: ./gradlew build - name: Publish diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 84d52e0..7e7e81c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -19,6 +19,7 @@ jobs: with: distribution: 'adopt' java-version: 11 + - uses: gradle/gradle-build-action@v2 - name: Build with Gradle run: ./gradlew build - name: Upload SARIF to Github using the upload-sarif action diff --git a/.github/workflows/Docs.yml b/.github/workflows/Docs.yml index 79a68fb..2994d01 100644 --- a/.github/workflows/Docs.yml +++ b/.github/workflows/Docs.yml @@ -18,13 +18,14 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - - uses: actions/configure-pages@v2 + - uses: actions/configure-pages@v3 - uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1 - uses: actions/setup-java@v3 with: distribution: 'adopt' java-version: 11 + - uses: gradle/gradle-build-action@v2 - name: Generate Docs run: ./gradlew dokkaHtmlMultimodule - name: Upload Docs diff --git a/README.md b/README.md index ebadd96..88d1cc9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# Kotlinx-UUID +# kotlinx-uuid > #### This is a fork from https://github.com/cy6erGn0m/kotlinx-uuid, released under Apache 2. -> #### The main implementation was thankfully provided by [cy6erGn0m](https://github.com/cy6erGn0m)! +> #### The main implementation was thankfully provided by [Sergey Mashkov (cy6erGn0m)](https://github.com/cy6erGn0m)! `kotlinx-uuid` is a multiplatform (MPP) [Kotlin](https://kotlinlang.org) library introducing support for [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier). @@ -13,15 +13,19 @@ The main class `UUID` is serializable out of the box, so the library depends on [kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization). If you don't need serialization, you don't need to apply the plugin. -Supported platforms are: +Supported platforms are `jvm`, `js(IR)` and all tier 1, 2 and 3 native targets except the following: -- JVM (Java 8+, IR only) -- JavaScript (IR backend only) -- Native: - - iOS - - macOS - - linuxX64 - - mingwX64 +``` +js(LEGACY) + +// tier 3 +androidNativeArm32() +androidNativeArm64() +androidNativeX86() +androidNativeX64() + +watchosDeviceArm64() +``` ## Install @@ -36,102 +40,3 @@ dependencies { implementation("app.softwork:kotlinx-uuid-core:LATEST") } ```` - -## Usage - -#### Creating from a UUID string - -```kotlin -val uuid = UUID("1b3e4567-e99b-13d3-a476-446657420000") -val guid = UUID("{1b3e4567-e99b-13d3-a476-446657420000}") -``` - -#### Generating UUID4 using random - -```kotlin -// using a default SecureRandom implementation -val uuid = UUID() - -// use custom Kotlin Random instance -val uuid = UUID.generateUUID(yourRandom) -``` - -#### Generating UUID5 using hash - -kotlin-uud provides the ability to generate uuids by hashing names (Only SHA-1 is supported at the moment). - -```kotlin -val appNamespace = UUID("my-app-uuid") -val agentId = UUID.generateUUID(appNamespace, "agentId") -``` - -The other alternative is to generate UUID by hashing bytes (similar to `java.util.UUID.nameUUIDFromBytes`). - -```kotlin -val uuid = UUID.generateUUID(bytes) -``` - -> Note that unlike `java.util.UUID`, kotlinx's generateUUID -> doesn't support MD5, so the blind migration -> from Java to kotlin-uud may lead to changing UUIDs. - -#### Serializing (kotlinx.serialization) - -There are two serializers for `UUID`: the default one and the binary. - -The default serializer does always serialize UUIDs as string primitives. - -```kotlin -Json.encodeToString(uuid) == "\"1b3e4567-e99b-13d3-a476-446657420000\"" -``` - -The additional serializer is useful for binary formats. Because they are not human-readable, and it's possible to reduce -size. - -```kotlin -val bytes = Protobuf.encodeToByteArray(BinarySerializer, uuid) -``` - -## Using with Exposed - -[Exposed](https://github.com/JetBrains/Exposed) is an ORM framework for Kotlin. It has support for `java.util.UUID`, but -to get kotlin-uuid supported you need to include the corresponding dependency and use DSL functions: - -```kotlin -dependencies { - implementation("app.softwork:kotlinx-uuid-exposed:0.0.1") -} -``` - -When declaring a table having UUID as Primary Key: - -```kotlin -// SQL DSL -object MyTable : KotlinxUUIDTable() { - // there is "id" property with the kotlin-uud type -} - -// DAO API -class MyTableEntity(id: EntityID) : KotlinxUUIDEntity(id) { - companion object : KotlinxUUIDEntityClass(MyTable) - -} -``` - -To declare a regular column, use `kotlinxUUID` function: - -```kotlin -object MyTable : Table() { - val something = kotlinxUUID("SOME_COLUMN") -} -``` - -Unfortunately, there is a function called `uuid` in the base class, inside Exposed, this is why we can't -overwrite/override it, so it may lead to confusion. The function `uuid` only works with `java.util.UUID`: - -```kotlin -object MyTable : Table() { - val column1 = kotlinxUUID("C1") // kotlinx.uuid.UUID - val column2 = uuid("C2") // java.util.UUID -} -``` diff --git a/build.gradle.kts b/build.gradle.kts index 68dfd4c..2d9f65f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,4 @@ -import app.cash.licensee.* import io.gitlab.arturbosch.detekt.* -import org.jetbrains.dokka.gradle.* -import org.jetbrains.kotlin.gradle.dsl.* /* * Copyright 2020-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. @@ -9,121 +6,18 @@ import org.jetbrains.kotlin.gradle.dsl.* */ plugins { - kotlin("multiplatform") version "1.7.10" apply false - kotlin("plugin.serialization") version "1.7.10" apply false - id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.11.0" - `maven-publish` - signing - id("io.github.gradle-nexus.publish-plugin") version "1.1.0" - id("org.jetbrains.dokka") version "1.7.10" - id("app.cash.licensee") version "1.5.0" apply false - id("org.jetbrains.kotlinx.kover") version "0.6.0" - id("io.gitlab.arturbosch.detekt") version "1.21.0" + kotlin("multiplatform") apply false + id("org.jetbrains.kotlinx.binary-compatibility-validator") + io.github.`gradle-nexus`.`publish-plugin` + org.jetbrains.dokka + org.jetbrains.kotlinx.kover + io.gitlab.arturbosch.detekt } -repositories { - mavenCentral() -} - -subprojects { - plugins.apply("org.jetbrains.kotlin.multiplatform") - plugins.apply("org.jetbrains.dokka") - plugins.apply("app.cash.licensee") - - repositories { - mavenCentral() - } - - the().apply { - explicitApi() - - sourceSets { - all { - languageSettings.progressiveMode = true - languageSettings.optIn("kotlinx.uuid.InternalAPI") - } - } - } - - tasks.getByName("dokkaHtmlPartial") { - val module = project.name - dokkaSourceSets.configureEach { - reportUndocumented.set(true) - val sourceSetName = name - File("$module/src/$sourceSetName").takeIf { it.exists() }?.let { - sourceLink { - localDirectory.set(file("src/$sourceSetName/kotlin")) - remoteUrl.set(uri("https://github.com/hfhbd/kotlinx-uuid/tree/main/$module/src/$sourceSetName/kotlin").toURL()) - remoteLineSuffix.set("#L") - } - } - externalDocumentationLink("https://kotlinlang.org/api/kotlinx.serialization/") - } - } - - the().apply { - allow(spdxId = "Apache-2.0") - } -} - -tasks.dokkaHtmlMultiModule.configure { +tasks.dokkaHtmlMultiModule { includes.from("README.md") } -allprojects { - plugins.apply("org.gradle.maven-publish") - plugins.apply("org.gradle.signing") - - plugins.apply("org.jetbrains.kotlinx.kover") - - val emptyJar by tasks.creating(Jar::class) { } - - group = "app.softwork" - - publishing { - publications.all { - this as MavenPublication - artifact(emptyJar) { - classifier = "javadoc" - } - pom { - name.set("app.softwork UUID Library") - description.set("A multiplatform Kotlin UUID library, forked from https://github.com/cy6erGn0m/kotlinx-uuid") - url.set("https://github.com/hfhbd/kotlinx-uuid") - licenses { - license { - name.set("The Apache License, Version 2.0") - url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") - } - } - developers { - developer { - id.set("hfhbd") - name.set("Philip Wedemann") - email.set("mybztg+mavencentral@icloud.com") - } - } - scm { - connection.set("scm:git://github.com/hfhbd/kotlinx-uuid.git") - developerConnection.set("scm:git://github.com/hfhbd/kotlinx-uuid.git") - url.set("https://github.com/hfhbd/kotlinx-uuid") - } - } - } - } - - (System.getProperty("signing.privateKey") ?: System.getenv("SIGNING_PRIVATE_KEY"))?.let { - String(java.util.Base64.getDecoder().decode(it)).trim() - }?.let { key -> - println("found key, config signing") - signing { - val signingPassword = System.getProperty("signing.password") ?: System.getenv("SIGNING_PASSWORD") - useInMemoryPgpKeys(key, signingPassword) - sign(publishing.publications) - } - } -} - nexusPublishing { repositories { sonatype { @@ -143,7 +37,7 @@ detekt { } dependencies { - detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.21.0") + detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.22.0") } tasks { diff --git a/detekt-baseline.xml b/detekt-baseline.xml index 40b0bd9..824050f 100644 --- a/detekt-baseline.xml +++ b/detekt-baseline.xml @@ -2,6 +2,7 @@ + FunctionNaming:UUID7.kt$@UUIDExperimentalAPI public fun UUIDv7(timeStamp: Long, random: Random = SecureRandom): UUID MagicNumber:Encoding.kt$0xff MagicNumber:Encoding.kt$56 MagicNumber:Encoding.kt$7 @@ -17,6 +18,7 @@ MagicNumber:Formatter.kt$6 MagicNumber:Formatter.kt$8 MagicNumber:Formatter.kt$9 + MagicNumber:KotlinConfig.kt$8 MagicNumber:NameBasedGenerator.kt$0x3f MagicNumber:NameBasedGenerator.kt$4 MagicNumber:NameBasedGenerator.kt$6 @@ -62,8 +64,8 @@ MagicNumber:SHA1.kt$SHA1.IntArrayView$3 MagicNumber:SHA1.kt$SHA1.IntArrayView$4 MagicNumber:SHA1.kt$SHA1.IntArrayView$8 - MagicNumber:SecureRandom.kt$SecureRandomJs$31 - MagicNumber:SecureRandom.kt$SecureRandomJs$32 + MagicNumber:SecureRandom.kt$SecureRandomBrowser$31 + MagicNumber:SecureRandom.kt$SecureRandomBrowser$32 MagicNumber:UUID.kt$UUID$0x0fffL MagicNumber:UUID.kt$UUID$0x1fff MagicNumber:UUID.kt$UUID$0xf000L @@ -84,8 +86,13 @@ MagicNumber:UUID.kt$UUID.Version.NAME_BASED_MD5$3 MagicNumber:UUID.kt$UUID.Version.NAME_BASED_SHA1$5 MagicNumber:UUID.kt$UUID.Version.RANDOM_BASED$4 + MagicNumber:UUID7.kt$0x38 + MagicNumber:UUID7.kt$0x3fffffffffffffffL + MagicNumber:UUID7.kt$0x7000L + MagicNumber:UUID7.kt$0x80L + MagicNumber:UUID7.kt$16 + MagicNumber:UUID7.kt$20 TooManyFunctions:SHA1.kt$SHA1 - UnnecessaryAbstractClass:KotlinxUUIDEntity.kt$KotlinxUUIDEntity$KotlinxUUIDEntity - UnnecessaryAbstractClass:KotlinxUUIDEntityClass.kt$KotlinxUUIDEntityClass$KotlinxUUIDEntityClass + VariableNaming:UUID7.kt$val rand_a = (random.nextInt() shr 20).toLong() diff --git a/gradle.properties b/gradle.properties index ae9f227..d2c1954 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,3 +6,4 @@ kotlin.code.style=official org.gradle.parallel=true kotlin.native.ignoreDisabledTargets=true org.gradle.jvmargs=-XX:MaxMetaspaceSize=1g +group=app.softwork diff --git a/gradle/build-logic/build.gradle.kts b/gradle/build-logic/build.gradle.kts new file mode 100644 index 0000000..bac7c36 --- /dev/null +++ b/gradle/build-logic/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + `kotlin-dsl` +} + +dependencies { + val kotlin = "1.8.20" + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin") + implementation("org.jetbrains.kotlin:kotlin-serialization:$kotlin") + implementation("org.jetbrains.kotlinx:binary-compatibility-validator:0.13.0") + + implementation("io.github.gradle-nexus:publish-plugin:1.3.0") + implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.8.10") + implementation("app.cash.licensee:licensee-gradle-plugin:1.6.0") + implementation("org.jetbrains.kotlinx:kover:0.6.1") + implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.22.0") +} diff --git a/gradle/build-logic/settings.gradle.kts b/gradle/build-logic/settings.gradle.kts new file mode 100644 index 0000000..76a0431 --- /dev/null +++ b/gradle/build-logic/settings.gradle.kts @@ -0,0 +1,9 @@ +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +rootProject.name = "build-logic" diff --git a/gradle/build-logic/src/main/kotlin/KotlinConfig.kt b/gradle/build-logic/src/main/kotlin/KotlinConfig.kt new file mode 100644 index 0000000..1578b43 --- /dev/null +++ b/gradle/build-logic/src/main/kotlin/KotlinConfig.kt @@ -0,0 +1,14 @@ +import org.jetbrains.kotlin.gradle.dsl.* + +fun KotlinProjectExtension.kotlinConfig() { + explicitApi() + + jvmToolchain(8) + + sourceSets.configureEach { + languageSettings { + progressiveMode = true + optIn("kotlinx.uuid.InternalAPI") + } + } +} diff --git a/gradle/build-logic/src/main/kotlin/dokkaKover.gradle.kts b/gradle/build-logic/src/main/kotlin/dokkaKover.gradle.kts new file mode 100644 index 0000000..5621e4c --- /dev/null +++ b/gradle/build-logic/src/main/kotlin/dokkaKover.gradle.kts @@ -0,0 +1,28 @@ +import org.jetbrains.dokka.gradle.* + +plugins { + id("org.jetbrains.dokka") + id("app.cash.licensee") + id("org.jetbrains.kotlinx.kover") +} + +tasks.named("dokkaHtmlPartial") { + val module = project.name + dokkaSourceSets.configureEach { + reportUndocumented.set(true) + includes.from("README.md") + val sourceSetName = name + File("$module/src/$sourceSetName").takeIf { it.exists() }?.let { + sourceLink { + localDirectory.set(file("src/$sourceSetName/kotlin")) + remoteUrl.set(uri("https://github.com/hfhbd/kotlinx-uuid/tree/main/$module/src/$sourceSetName/kotlin").toURL()) + remoteLineSuffix.set("#L") + } + } + externalDocumentationLink("https://kotlinlang.org/api/kotlinx.serialization/") + } +} + +licensee { + allow(spdxId = "Apache-2.0") +} diff --git a/gradle/build-logic/src/main/kotlin/kotlinJvm.gradle.kts b/gradle/build-logic/src/main/kotlin/kotlinJvm.gradle.kts new file mode 100644 index 0000000..d87aca3 --- /dev/null +++ b/gradle/build-logic/src/main/kotlin/kotlinJvm.gradle.kts @@ -0,0 +1,8 @@ +plugins { + kotlin("jvm") + kotlin("plugin.serialization") +} + +kotlin { + kotlinConfig() +} diff --git a/gradle/build-logic/src/main/kotlin/kotlinMPP.gradle.kts b/gradle/build-logic/src/main/kotlin/kotlinMPP.gradle.kts new file mode 100644 index 0000000..2488f5c --- /dev/null +++ b/gradle/build-logic/src/main/kotlin/kotlinMPP.gradle.kts @@ -0,0 +1,11 @@ +import org.jetbrains.kotlin.gradle.dsl.* + +plugins { + kotlin("plugin.serialization") +} + +plugins.apply("org.jetbrains.kotlin.multiplatform") + +the().apply { + kotlinConfig() +} diff --git a/gradle/build-logic/src/main/kotlin/mySettings.settings.gradle.kts b/gradle/build-logic/src/main/kotlin/mySettings.settings.gradle.kts new file mode 100644 index 0000000..07d9dbd --- /dev/null +++ b/gradle/build-logic/src/main/kotlin/mySettings.settings.gradle.kts @@ -0,0 +1,5 @@ +dependencyResolutionManagement { + repositories { + mavenCentral() + } +} diff --git a/gradle/build-logic/src/main/kotlin/publish.gradle.kts b/gradle/build-logic/src/main/kotlin/publish.gradle.kts new file mode 100644 index 0000000..8cbf15f --- /dev/null +++ b/gradle/build-logic/src/main/kotlin/publish.gradle.kts @@ -0,0 +1,55 @@ +plugins { + id("org.gradle.maven-publish") + id("org.gradle.signing") +} + +val emptyJar by tasks.registering(Jar::class) + +publishing { + publications.configureEach { + this as MavenPublication + artifact(emptyJar) { + classifier = "javadoc" + } + pom { + name.set("app.softwork UUID Library") + description.set("A multiplatform Kotlin UUID library, forked from https://github.com/cy6erGn0m/kotlinx-uuid") + url.set("https://github.com/hfhbd/kotlinx-uuid") + licenses { + license { + name.set("The Apache License, Version 2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") + } + } + developers { + developer { + id.set("hfhbd") + name.set("Philip Wedemann") + email.set("mybztg+mavencentral@icloud.com") + } + } + scm { + connection.set("scm:git://github.com/hfhbd/kotlinx-uuid.git") + developerConnection.set("scm:git://github.com/hfhbd/kotlinx-uuid.git") + url.set("https://github.com/hfhbd/kotlinx-uuid") + } + } + } +} + +(System.getProperty("signing.privateKey") ?: System.getenv("SIGNING_PRIVATE_KEY"))?.let { + String(java.util.Base64.getDecoder().decode(it)).trim() +}?.let { key -> + println("found key, config signing") + signing { + val signingPassword = System.getProperty("signing.password") ?: System.getenv("SIGNING_PASSWORD") + useInMemoryPgpKeys(key, signingPassword) + sign(publishing.publications) + } +} + +// https://youtrack.jetbrains.com/issue/KT-46466 +val signingTasks = tasks.withType() +tasks.withType().configureEach { + dependsOn(signingTasks) +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e583..ccebba7 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661..bdc9a83 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index a69d9cb..79a61d4 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac diff --git a/gradlew.bat b/gradlew.bat index 53a6b23..6689b85 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index f9e8e3e..5f1ef39 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -2,6 +2,27 @@ # yarn lockfile v1 +"@babel/code-frame@^7.10.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -21,7 +42,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -39,23 +60,65 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.15" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@rollup/plugin-commonjs@^21.0.1": + version "21.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz#45576d7b47609af2db87f55a6d4b46e44fc3a553" + integrity sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-node-resolve@^13.1.3": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" + integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + deepmerge "^4.2.2" + is-builtin-module "^3.1.0" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-typescript@^8.3.0": + version "8.5.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.5.0.tgz#7ea11599a15b0a30fa7ea69ce3b791d41b862515" + integrity sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + resolve "^1.17.0" + +"@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" -"@types/component-emitter@^1.2.10": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.11.tgz#50d47d42b347253817a39709fef03ce66a108506" - integrity sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ== +"@socket.io/component-emitter@~3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" + integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== "@types/cookie@^0.4.1": version "0.4.1" @@ -63,9 +126,11 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + version "2.8.13" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" + integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== + dependencies: + "@types/node" "*" "@types/eslint-scope@^3.7.3": version "3.7.4" @@ -76,9 +141,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.4.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.6.tgz#7976f054c1bccfcf514bff0564c0c41df5c08207" - integrity sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g== + version "8.37.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" + integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -88,6 +153,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" @@ -99,9 +169,21 @@ integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/node@*", "@types/node@>=10.0.0": - version "18.7.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.13.tgz#23e6c5168333480d454243378b69e861ab5c011a" - integrity sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw== + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + +"@types/node@^12.12.14": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" "@ungap/promise-all-settled@1.1.2": version "1.1.2" @@ -274,10 +356,10 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn@^8.4.1, acorn@^8.5.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.5.0, acorn@^8.7.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== ajv-keywords@^3.5.2: version "3.5.2" @@ -304,6 +386,13 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -312,9 +401,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: color-convert "^2.0.1" anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -324,6 +413,11 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -340,20 +434,20 @@ binary-extensions@^2.0.0: integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== body-parser@^1.19.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" + qs "6.11.0" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -385,20 +479,25 @@ browser-stdout@1.3.1: integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.14.5: - version "4.21.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" - integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001370" - electron-to-chromium "^1.4.202" - node-releases "^2.0.6" - update-browserslist-db "^1.0.5" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -417,10 +516,19 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001370: - version "1.0.30001383" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz#aecf317ccd940690725ae3ae4f28293c5fb8050e" - integrity sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg== +caniuse-lite@^1.0.30001449: + version "1.0.30001474" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz#13b6fe301a831fe666cce8ca4ef89352334133d5" + integrity sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" chalk@^4.1.0: version "4.1.2" @@ -468,6 +576,13 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -475,6 +590,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -495,10 +615,10 @@ commander@^7.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== concat-map@0.0.1: version "0.0.1" @@ -515,10 +635,10 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie@~0.4.1: version "0.4.2" @@ -547,10 +667,10 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== -date-format@^4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.13.tgz#87c3aab3a4f6f37582c5f5f63692d2956fa67890" - integrity sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ== +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== debug@2.6.9: version "2.6.9" @@ -571,6 +691,16 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -606,10 +736,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.202: - version "1.4.230" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.230.tgz#666909fdf5765acb1348b69752ee9955dc1664b7" - integrity sha512-3pwjAK0qHSDN9+YAF4fJknsSruP7mpjdWzUSruIJD/JCH77pEh0SorEyb3xVaKkfwk2tzjOt2D8scJ0KAdfXLA== +electron-to-chromium@^1.4.284: + version "1.4.352" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.352.tgz#be96bd7c2f4b980deebc9338a49a67430a33ed73" + integrity sha512-ikFUEyu5/q+wJpMOxWxTaEVk2M1qKqTGKKyfJmod1CPZxKfYnxVS41/GCBQg21ItBpZybyN8sNpRqCUGm+Zc4Q== emoji-regex@^8.0.0: version "8.0.0" @@ -622,14 +752,14 @@ encodeurl@~1.0.2: integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== engine.io-parser@~5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" - integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== + version "5.0.6" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.6.tgz#7811244af173e157295dec9b2718dfe42a64ef45" + integrity sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw== -engine.io@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.0.tgz#003bec48f6815926f2b1b17873e576acd54f41d0" - integrity sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg== +engine.io@~6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.4.1.tgz#8056b4526a88e779f9c280d820422d4e3eeaaae5" + integrity sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -640,12 +770,12 @@ engine.io@~6.2.0: cors "~2.8.5" debug "~4.3.1" engine.io-parser "~5.0.3" - ws "~8.2.3" + ws "~8.11.0" -enhanced-resolve@^5.9.3: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -680,6 +810,11 @@ escape-string-regexp@4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -705,6 +840,16 @@ estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -776,17 +921,17 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.2.6: +flatted@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.0.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -format-util@1.0.5: +format-util@1.0.5, format-util@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== @@ -821,9 +966,9 @@ get-caller-file@^2.0.5: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -853,7 +998,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3, glob@^7.1.7: +glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -866,9 +1011,14 @@ glob@^7.1.3, glob@^7.1.7: path-is-absolute "^1.0.0" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -959,13 +1109,25 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-builtin-module@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -983,6 +1145,11 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1000,11 +1167,25 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isbinaryfile@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" @@ -1020,6 +1201,15 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -1029,6 +1219,11 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1151,15 +1346,22 @@ log-symbols@4.1.0: is-unicode-supported "^0.1.0" log4js@^6.4.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.6.1.tgz#48f23de8a87d2f5ffd3d913f24ca9ce77895272f" - integrity sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A== + version "6.9.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== dependencies: - date-format "^4.0.13" + date-format "^4.0.14" debug "^4.3.4" - flatted "^3.2.6" + flatted "^3.2.7" rfdc "^1.3.0" - streamroller "^3.1.2" + streamroller "^3.1.5" + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" media-typer@0.3.0: version "0.3.0" @@ -1203,9 +1405,9 @@ minimatch@^3.0.4, minimatch@^3.1.1: brace-expansion "^1.1.7" minimist@^1.2.3, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp@^0.5.5: version "0.5.6" @@ -1272,10 +1474,10 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -1288,9 +1490,9 @@ object-assign@^4: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== on-finished@2.4.1: version "2.4.1" @@ -1376,7 +1578,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -1389,19 +1591,19 @@ pkg-dir@^4.2.0: find-up "^4.0.0" punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== qjobs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" @@ -1417,10 +1619,10 @@ range-parser@^1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -1463,7 +1665,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.9.0: +resolve@^1.17.0, resolve@^1.19.0, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -1484,6 +1686,31 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rollup-plugin-sourcemaps@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" + integrity sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw== + dependencies: + "@rollup/pluginutils" "^3.0.9" + source-map-resolve "^0.6.0" + +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup@^2.68.0: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -1503,13 +1730,27 @@ schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -serialize-javascript@6.0.0, serialize-javascript@^6.0.0: +serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -1543,31 +1784,32 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== +socket.io-adapter@~2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz#5de9477c9182fdc171cd8c8364b9a8894ec75d12" + integrity sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA== + dependencies: + ws "~8.11.0" -socket.io-parser@~4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.5.tgz#cb404382c32324cc962f27f3a44058cf6e0552df" - integrity sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig== +socket.io-parser@~4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.2.tgz#1dd384019e25b7a3d374877f492ab34f2ad0d206" + integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw== dependencies: - "@types/component-emitter" "^1.2.10" - component-emitter "~1.3.0" + "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" socket.io@^4.4.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.1.tgz#aa7e73f8a6ce20ee3c54b2446d321bbb6b1a9029" - integrity sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ== + version "4.6.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.6.1.tgz#62ec117e5fce0692fa50498da9347cfb52c3bc70" + integrity sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA== dependencies: accepts "~1.3.4" base64id "~2.0.0" debug "~4.3.2" - engine.io "~6.2.0" - socket.io-adapter "~2.4.0" - socket.io-parser "~4.0.4" + engine.io "~6.4.1" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.1" source-map-js@^1.0.2: version "1.0.2" @@ -1583,7 +1825,15 @@ source-map-loader@4.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-support@~0.5.20: +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + +source-map-support@0.5.21, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -1596,6 +1846,11 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -1606,12 +1861,12 @@ statuses@~1.5.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -streamroller@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.2.tgz#abd444560768b340f696307cf84d3f46e86c0e63" - integrity sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A== +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== dependencies: - date-format "^4.0.13" + date-format "^4.0.14" debug "^4.3.4" fs-extra "^8.1.0" @@ -1643,7 +1898,14 @@ supports-color@8.1.1, supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-color@^7.1.0: +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -1661,20 +1923,20 @@ tapable@^2.1.1, tapable@^2.2.0: integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== terser-webpack-plugin@^5.1.3: - version "5.3.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz#f7d82286031f915a4f8fb81af4bd35d2e3c011bc" - integrity sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA== + version "5.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" + integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.17" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" + serialize-javascript "^6.0.1" + terser "^5.16.5" -terser@^5.14.1: - version "5.15.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" - integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== +terser@^5.0.0, terser@^5.16.5: + version "5.16.8" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.8.tgz#ccde583dabe71df3f4ed02b65eb6532e0fae15d5" + integrity sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -1700,6 +1962,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tslib@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -1708,10 +1975,20 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typescript@4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +typescript@^3.7.2: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + ua-parser-js@^0.7.30: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== + version "0.7.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" + integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== universalify@^0.1.0: version "0.1.2" @@ -1723,10 +2000,10 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" - integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -1753,7 +2030,7 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== -watchpack@^2.3.1: +watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== @@ -1799,21 +2076,21 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.73.0: - version "5.73.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" - integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== +webpack@5.74.0: + version "5.74.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" + acorn "^8.7.1" acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.9.3" + enhanced-resolve "^5.10.0" es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" @@ -1826,7 +2103,7 @@ webpack@5.73.0: schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" - watchpack "^2.3.1" + watchpack "^2.4.0" webpack-sources "^3.2.3" which@^1.2.1: @@ -1867,10 +2144,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== y18n@^5.0.5: version "5.0.8" diff --git a/kotlinx-uuid-core/README.md b/kotlinx-uuid-core/README.md new file mode 100644 index 0000000..a04bcbb --- /dev/null +++ b/kotlinx-uuid-core/README.md @@ -0,0 +1,67 @@ +# Module kotlinx-uuid-core + +This core module contains the serializable UUID class. + +## Creating from a UUID string + +```kotlin +val uuid = UUID("1b3e4567-e99b-13d3-a476-446657420000") +val guid = UUID("{1b3e4567-e99b-13d3-a476-446657420000}") +``` + +## Generating UUID4 using random + +```kotlin +// using a default SecureRandom implementation +val uuid = UUID() + +// use custom Kotlin Random instance +val uuid = UUID.generateUUID(yourRandom) +``` + +## Generating UUID5 using hash + +`kotlinx-uuid` provides the ability to generate uuids by hashing names (Only SHA-1 is supported at the moment). + +```kotlin +val appNamespace = UUID("my-app-uuid") +val agentId = UUID.generateUUID(appNamespace, "agentId") +``` + +The other alternative is to generate UUID by hashing bytes (similar to `java.util.UUID.nameUUIDFromBytes`). + +```kotlin +val uuid = UUID.generateUUID(bytes) +``` + +> Note that unlike `java.util.UUID`, kotlinx's generateUUID +> doesn't support MD5, so the blind migration +> from Java to kotlin-uud may lead to changing UUIDs. + +## UUID7 Draft + +This library contains experimental support for UUIDv7 according to +this [draft IETF](https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis). + +```kotlin +val unixTimestamp = 42 // 48 bit +val uuid = UUIDv7(unixTimestamp) +uuid.unixTimeStamp // 42 +``` + +## Serializing (kotlinx.serialization) + +There are two serializers for `UUID`: the default one and the binary. + +The default serializer does always serialize UUIDs as string primitives. + +```kotlin +Json.encodeToString(uuid) == "\"1b3e4567-e99b-13d3-a476-446657420000\"" +``` + +The additional serializer is useful for binary formats. Because they are not human-readable, and it's possible to reduce +size. + +```kotlin +val bytes = Protobuf.encodeToByteArray(BinarySerializer, uuid) +``` diff --git a/kotlinx-uuid-core/api/kotlinx-uuid-core.api b/kotlinx-uuid-core/api/kotlinx-uuid-core.api index 6cdab87..1873070 100644 --- a/kotlinx-uuid-core/api/kotlinx-uuid-core.api +++ b/kotlinx-uuid-core/api/kotlinx-uuid-core.api @@ -107,6 +107,12 @@ public final class kotlinx/uuid/UUID$Version : java/lang/Enum { public static fun values ()[Lkotlinx/uuid/UUID$Version; } +public final class kotlinx/uuid/UUID7Kt { + public static final fun UUIDv7 (JLkotlin/random/Random;)Lkotlinx/uuid/UUID; + public static synthetic fun UUIDv7$default (JLkotlin/random/Random;ILjava/lang/Object;)Lkotlinx/uuid/UUID; + public static final fun getUnixTimeStamp (Lkotlinx/uuid/UUID;)J +} + public abstract interface annotation class kotlinx/uuid/UUIDExperimentalAPI : java/lang/annotation/Annotation { public abstract fun plannedVersion ()Ljava/lang/String; } diff --git a/kotlinx-uuid-core/build.gradle.kts b/kotlinx-uuid-core/build.gradle.kts index a1b6d30..5193a88 100644 --- a/kotlinx-uuid-core/build.gradle.kts +++ b/kotlinx-uuid-core/build.gradle.kts @@ -4,42 +4,48 @@ */ plugins { - kotlin("plugin.serialization") + kotlinMPP + publish + dokkaKover } kotlin { + targetHierarchy.default() jvm() + js(IR) { + browser() + nodejs() + } - ios() + // tier 1 + linuxX64() + macosX64() + macosArm64() iosSimulatorArm64() + iosX64() - watchos() + // tier 2 + linuxArm64() watchosSimulatorArm64() - - tvos() + watchosX64() + watchosArm32() + watchosArm64() tvosSimulatorArm64() + tvosX64() + tvosArm64() + iosArm64() - macosArm64() - macosX64() - - linuxX64() - + // tier 3 + // no kotlinx.serialization support androidNativeArm32() + // no kotlinx.serialization support androidNativeArm64() + // no kotlinx.serialization support androidNativeX86() + // no kotlinx.serialization support androidNativeX64() mingwX64() - - js(IR) { - browser { - binaries.library() - testTask { - useKarma { - useChromeHeadless() - } - } - } - } + // no kotlinx.serialization support watchosDeviceArm64() sourceSets { // Apache 2, https://github.com/Kotlin/kotlinx.serialization/releases/latest - val serializationVersion = "1.4.0" + val serializationVersion = "1.5.0" commonMain { dependencies { @@ -48,66 +54,11 @@ kotlin { } commonTest { dependencies { - api(kotlin("test")) + implementation(kotlin("test")) implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion") implementation("org.jetbrains.kotlinx:kotlinx-serialization-cbor:$serializationVersion") implementation("org.jetbrains.kotlinx:kotlinx-serialization-protobuf:$serializationVersion") } } - - val darwinMain by creating { - dependsOn(commonMain.get()) - } - val darwinTest by creating { - dependsOn(commonTest.get()) - } - val iosMain by getting { - dependsOn(darwinMain) - } - val iosTest by getting { - dependsOn(darwinTest) - } - val macosArm64Main by getting { - dependsOn(darwinMain) - } - val macosArm64Test by getting { - dependsOn(darwinTest) - } - val macosX64Main by getting { - dependsOn(darwinMain) - } - val macosX64Test by getting { - dependsOn(darwinTest) - } - val iosSimulatorArm64Main by getting { - dependsOn(iosMain) - } - val iosSimulatorArm64Test by getting { - dependsOn(iosTest) - } - val watchosMain by getting { - dependsOn(darwinMain) - } - val watchosTest by getting { - dependsOn(darwinTest) - } - val watchosSimulatorArm64Main by getting { - dependsOn(watchosMain) - } - val watchosSimulatorArm64Test by getting { - dependsOn(watchosTest) - } - val tvosMain by getting { - dependsOn(darwinMain) - } - val tvosTest by getting { - dependsOn(darwinTest) - } - val tvosSimulatorArm64Main by getting { - dependsOn(tvosMain) - } - val tvosSimulatorArm64Test by getting { - dependsOn(tvosTest) - } } } diff --git a/kotlinx-uuid-core/src/darwinMain/kotlin/kotlinx/uuid/Converter.kt b/kotlinx-uuid-core/src/appleMain/kotlin/kotlinx/uuid/Converter.kt similarity index 100% rename from kotlinx-uuid-core/src/darwinMain/kotlin/kotlinx/uuid/Converter.kt rename to kotlinx-uuid-core/src/appleMain/kotlin/kotlinx/uuid/Converter.kt diff --git a/kotlinx-uuid-core/src/darwinMain/kotlin/kotlinx/uuid/SecureRandom.kt b/kotlinx-uuid-core/src/appleMain/kotlin/kotlinx/uuid/SecureRandom.kt similarity index 81% rename from kotlinx-uuid-core/src/darwinMain/kotlin/kotlinx/uuid/SecureRandom.kt rename to kotlinx-uuid-core/src/appleMain/kotlin/kotlinx/uuid/SecureRandom.kt index d447e27..c30bc8e 100644 --- a/kotlinx-uuid-core/src/darwinMain/kotlin/kotlinx/uuid/SecureRandom.kt +++ b/kotlinx-uuid-core/src/appleMain/kotlin/kotlinx/uuid/SecureRandom.kt @@ -1,6 +1,7 @@ package kotlinx.uuid import kotlinx.cinterop.* +import kotlinx.uuid.internal.* import platform.Security.* import platform.darwin.* import kotlin.random.* @@ -18,10 +19,6 @@ private object SecureRandomIos : Random() { val status = SecRandomCopyBytes(kSecRandomDefault, numberOfBytes.convert(), bytes.refTo(0)) require(status == errSecSuccess) - var result = 0 - for (byte in bytes) { - result = (result or byte.toInt()) shl Byte.SIZE_BITS - } - return result + return bytes.toInt() } } diff --git a/kotlinx-uuid-core/src/darwinTest/kotlin/kotlinx/uuid/NsUUIDConvertingTest.kt b/kotlinx-uuid-core/src/appleTest/kotlin/kotlinx/uuid/NsUUIDConvertingTest.kt similarity index 100% rename from kotlinx-uuid-core/src/darwinTest/kotlin/kotlinx/uuid/NsUUIDConvertingTest.kt rename to kotlinx-uuid-core/src/appleTest/kotlin/kotlinx/uuid/NsUUIDConvertingTest.kt diff --git a/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/SecureRandom.kt b/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/SecureRandom.kt index f60b8df..b709080 100644 --- a/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/SecureRandom.kt +++ b/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/SecureRandom.kt @@ -5,9 +5,9 @@ import kotlin.random.* /** * Returns a platform dependent SecureRandom instance. * - On JVM, it uses `java.util.SecureRandom` - * - On JS, it uses `window.crypto` - * - On darwin, it uses `SecRandomCopyBytes` - * - On Windows, it uses - * - On Linux, it uses + * - On JS, it uses `window.crypto` or `nodejs.crypto`. + * - On darwin, it uses `SecRandomCopyBytes`. + * - On mingw, it uses `BCryptRandom`. + * - On Linux, it uses `DevUrandom`. */ public expect val SecureRandom: Random diff --git a/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/UUID7.kt b/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/UUID7.kt new file mode 100644 index 0000000..eecde96 --- /dev/null +++ b/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/UUID7.kt @@ -0,0 +1,35 @@ +package kotlinx.uuid + +import kotlinx.uuid.UUID.Companion.create +import kotlin.random.Random + +private const val UNIX_48_TIMESTAMP = 0x1FFF_FFFF_FFFF_FL + +/** + * An UUIDv7 implementation according to the + * [draft](https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis#section-5.7). + * + * [timeStamp] must be an 48 bit unix timestamp. + */ +@UUIDExperimentalAPI +public fun UUIDv7(timeStamp: Long, random: Random = SecureRandom): UUID { + require(timeStamp <= UNIX_48_TIMESTAMP) { + "timeStamp $timeStamp must be 48 bits, was $timeStamp." + } + val leftTimeStamp = timeStamp shl 16 + val rand_a = (random.nextInt() shr 20).toLong() + val timeStampAndVersionRaw = (leftTimeStamp or rand_a) and -0xf001L or 0x7000L + + // set variant to 4 or 5 + // we keep the lower variant bit random as it is defined as "don't care" + val clockSequenceVariantAndNodeRaw: Long = random.nextLong() and + 0x3fffffffffffffffL or (0x80L shl 0x38) + + return create(timeStampAndVersionRaw, clockSequenceVariantAndNodeRaw) +} + +/** + * The UUIDv7 48 bit big-endian unsigned number of Unix epoch timestamp in milliseconds + */ +@UUIDExperimentalAPI +public val UUID.unixTimeStamp: Long get() = timeStampAndVersionRaw ushr 16 diff --git a/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/internal/ToInt.kt b/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/internal/ToInt.kt new file mode 100644 index 0000000..64ee375 --- /dev/null +++ b/kotlinx-uuid-core/src/commonMain/kotlin/kotlinx/uuid/internal/ToInt.kt @@ -0,0 +1,9 @@ +package kotlinx.uuid.internal + +internal fun ByteArray.toInt(): Int { + var result = 0 + for (byte in this) { + result = (result or byte.toInt()) shl Byte.SIZE_BITS + } + return result +} diff --git a/kotlinx-uuid-core/src/commonTest/kotlin/kotlinx/uuid/UUIDv7Test.kt b/kotlinx-uuid-core/src/commonTest/kotlin/kotlinx/uuid/UUIDv7Test.kt new file mode 100644 index 0000000..c6fb52b --- /dev/null +++ b/kotlinx-uuid-core/src/commonTest/kotlin/kotlinx/uuid/UUIDv7Test.kt @@ -0,0 +1,20 @@ +package kotlinx.uuid + +import kotlin.random.Random +import kotlin.test.* + +@UUIDExperimentalAPI +class UUIDv7Test { + @Test + fun test() { + val one = UUIDv7(0x17F22E279B0, random = Random(4242)) + val two = UUIDv7(1645557742000, random = Random(4242)) + assertEquals(one, two) + + assertEquals(1645557742000, one.unixTimeStamp) + assertEquals(1645557742000, two.unixTimeStamp) + assertEquals("017f22e2-79b0-735c-9e4a-5c16cd08736d", one.toString()) + assertEquals(7, one.versionNumber) + assertEquals(4, one.variant) + } +} diff --git a/kotlinx-uuid-core/src/jsMain/kotlin/kotlinx/uuid/SecureRandom.kt b/kotlinx-uuid-core/src/jsMain/kotlin/kotlinx/uuid/SecureRandom.kt index 3749031..bfdb48d 100644 --- a/kotlinx-uuid-core/src/jsMain/kotlin/kotlinx/uuid/SecureRandom.kt +++ b/kotlinx-uuid-core/src/jsMain/kotlin/kotlinx/uuid/SecureRandom.kt @@ -1,23 +1,32 @@ package kotlinx.uuid import kotlinx.browser.* +import kotlinx.uuid.internal.* import org.khronos.webgl.* import org.w3c.dom.* import kotlin.random.* -public actual val SecureRandom: Random = SecureRandomJs +private val isNode = + js("typeof process !== 'undefined' && process.versions != null && process.versions.node != null") as Boolean + +public actual val SecureRandom: Random = if (isNode) SecureRandomNode else SecureRandomBrowser private external interface Crypto { fun getRandomValues(array: Uint32Array): Uint32Array } -private object SecureRandomJs : Random() { +private object SecureRandomBrowser : Random() { private inline val Window.crypto: Crypto get() = asDynamic().crypto.unsafeCast() override fun nextBits(bitCount: Int): Int = nextInt().takeUpperBits(bitCount) + override fun nextLong(): Long { + val randomInts = window.crypto.getRandomValues(Uint32Array(2)) + return ((randomInts[0].toULong() shl Int.SIZE_BITS) + randomInts[1].toULong()).toLong() + } + override fun nextInt(): Int = window.crypto.getRandomValues(Uint32Array(1))[0] /** @@ -26,3 +35,23 @@ private object SecureRandomJs : Random() { private fun Int.takeUpperBits(bitCount: Int): Int = this.ushr(32 - bitCount) and (-bitCount).shr(31) } + +private external interface CryptoNode { + fun randomInt(max: Int): Int + fun randomBytes(bytes: Int): ArrayBuffer +} + +private object SecureRandomNode : Random() { + @Suppress("UNCHECKED_CAST_TO_EXTERNAL_INTERFACE") + val crypto: CryptoNode = js("eval('require')('crypto')") as CryptoNode + + override fun nextBits(bitCount: Int): Int { + val numberOfBytes = (bitCount + Byte.SIZE_BITS) / Byte.SIZE_BITS + val random = crypto.randomBytes(numberOfBytes) + return Int8Array(random).unsafeCast().toInt() + } + + override fun nextInt(): Int { + return crypto.randomInt(max = Int.MAX_VALUE) + } +} diff --git a/kotlinx-uuid-core/src/linuxX64Main/kotlin/kotlinx/uuid/SecureRandom.kt b/kotlinx-uuid-core/src/linuxMain/kotlin/kotlinx/uuid/SecureRandom.kt similarity index 81% rename from kotlinx-uuid-core/src/linuxX64Main/kotlin/kotlinx/uuid/SecureRandom.kt rename to kotlinx-uuid-core/src/linuxMain/kotlin/kotlinx/uuid/SecureRandom.kt index 8dff014..1e2282a 100644 --- a/kotlinx-uuid-core/src/linuxX64Main/kotlin/kotlinx/uuid/SecureRandom.kt +++ b/kotlinx-uuid-core/src/linuxMain/kotlin/kotlinx/uuid/SecureRandom.kt @@ -1,6 +1,7 @@ package kotlinx.uuid import kotlinx.cinterop.* +import kotlinx.uuid.internal.* import platform.posix.* import kotlin.random.* @@ -18,11 +19,6 @@ private class DevUrandom : Random() { } close(urandom) require(status >= 0) - var result = 0 - for (byte in bytes) { - result = (result or byte.toInt()) shl Byte.SIZE_BITS - } - - return result + return bytes.toInt() } } diff --git a/kotlinx-uuid-core/src/mingwX64Main/kotlin/kotlinx/uuid/SecureRandom.kt b/kotlinx-uuid-core/src/mingwX64Main/kotlin/kotlinx/uuid/SecureRandom.kt index bbeaee4..6cda48e 100644 --- a/kotlinx-uuid-core/src/mingwX64Main/kotlin/kotlinx/uuid/SecureRandom.kt +++ b/kotlinx-uuid-core/src/mingwX64Main/kotlin/kotlinx/uuid/SecureRandom.kt @@ -1,6 +1,7 @@ package kotlinx.uuid import kotlinx.cinterop.* +import kotlinx.uuid.internal.* import platform.windows.* import kotlin.random.* @@ -21,11 +22,7 @@ private class BCryptRandom : Random() { } require(status == NTSTATUS_SUCCESS) - var result = 0 - for (byte in bytes) { - result = (result or byte.toInt()) shl Byte.SIZE_BITS - } - return result + return bytes.toInt() } } diff --git a/kotlinx-uuid-exposed/README.md b/kotlinx-uuid-exposed/README.md new file mode 100644 index 0000000..c914793 --- /dev/null +++ b/kotlinx-uuid-exposed/README.md @@ -0,0 +1,43 @@ +# Module kotlinx-uuid-exposed + +[Exposed](https://github.com/JetBrains/Exposed) is an ORM framework for Kotlin. It has support for `java.util.UUID`, but +to get kotlin-uuid supported you need to include the corresponding dependency and use DSL functions: + +```kotlin +dependencies { + implementation("app.softwork:kotlinx-uuid-exposed:LATEST") +} +``` + +When declaring a table having UUID as Primary Key: + +```kotlin +// SQL DSL +object MyTable : KotlinxUUIDTable() { + // there is "id" property with the kotlin-uud type +} + +// DAO API +class MyTableEntity(id: EntityID) : KotlinxUUIDEntity(id) { + companion object : KotlinxUUIDEntityClass(MyTable) + +} +``` + +To declare a regular column, use `kotlinxUUID` function: + +```kotlin +object MyTable : Table() { + val something = kotlinxUUID("SOME_COLUMN") +} +``` + +Unfortunately, there is a function called `uuid` in the base class, inside Exposed, this is why we can't +overwrite/override it, so it may lead to confusion. The function `uuid` only works with `java.util.UUID`: + +```kotlin +object MyTable : Table() { + val column1 = kotlinxUUID("C1") // kotlinx.uuid.UUID + val column2 = uuid("C2") // java.util.UUID +} +``` diff --git a/kotlinx-uuid-exposed/api/kotlinx-uuid-exposed.api b/kotlinx-uuid-exposed/api/kotlinx-uuid-exposed.api index cc8be4f..7e7514c 100644 --- a/kotlinx-uuid-exposed/api/kotlinx-uuid-exposed.api +++ b/kotlinx-uuid-exposed/api/kotlinx-uuid-exposed.api @@ -4,11 +4,11 @@ public final class kotlinx/uuid/exposed/DslKt { public static final fun kotlinxUUID (Lorg/jetbrains/exposed/sql/Table;Ljava/lang/String;)Lorg/jetbrains/exposed/sql/Column; } -public abstract class kotlinx/uuid/exposed/KotlinxUUIDEntity : org/jetbrains/exposed/dao/Entity { +public class kotlinx/uuid/exposed/KotlinxUUIDEntity : org/jetbrains/exposed/dao/Entity { public fun (Lorg/jetbrains/exposed/dao/id/EntityID;)V } -public abstract class kotlinx/uuid/exposed/KotlinxUUIDEntityClass : org/jetbrains/exposed/dao/EntityClass { +public class kotlinx/uuid/exposed/KotlinxUUIDEntityClass : org/jetbrains/exposed/dao/EntityClass { public fun (Lorg/jetbrains/exposed/dao/id/IdTable;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)V public synthetic fun (Lorg/jetbrains/exposed/dao/id/IdTable;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } diff --git a/kotlinx-uuid-exposed/build.gradle.kts b/kotlinx-uuid-exposed/build.gradle.kts index 4548dc6..4bad2bb 100644 --- a/kotlinx-uuid-exposed/build.gradle.kts +++ b/kotlinx-uuid-exposed/build.gradle.kts @@ -3,29 +3,24 @@ * Copyright 2021 hfhbd and contributors. Use of this source code is governed by the Apache 2.0 license. */ -kotlin { - jvm() +plugins { + kotlinJvm + dokkaKover + publish +} + + +dependencies { + api(projects.kotlinxUuidCore) - sourceSets { - // Apache 2, https://github.com/JetBrains/Exposed/releases/latest - val exposedVersion = "0.39.2" + val exposedVersion = "0.41.1" + api("org.jetbrains.exposed:exposed-dao:$exposedVersion") - getByName("jvmMain") { - dependencies { - api(projects.kotlinxUuidCore) - api("org.jetbrains.exposed:exposed-dao:$exposedVersion") - } - } - getByName("jvmTest") { - dependencies { - implementation(kotlin("test-junit")) + testImplementation(kotlin("test-junit")) - runtimeOnly("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") - runtimeOnly("com.h2database:h2:2.1.214") - runtimeOnly("org.slf4j:slf4j-simple:2.0.0") - } - } - } + testRuntimeOnly("org.jetbrains.exposed:exposed-jdbc:$exposedVersion") + testRuntimeOnly("com.h2database:h2:2.1.214") + testRuntimeOnly("org.slf4j:slf4j-simple:2.0.7") } licensee { diff --git a/kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/dsl.kt b/kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/Dsl.kt similarity index 100% rename from kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/dsl.kt rename to kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/Dsl.kt diff --git a/kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntity.kt b/kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntity.kt similarity index 81% rename from kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntity.kt rename to kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntity.kt index 1474f4e..e6d0c49 100644 --- a/kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntity.kt +++ b/kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntity.kt @@ -11,4 +11,4 @@ import org.jetbrains.exposed.dao.id.EntityID /** * A [UUID](Kotlinx.uuid.UUID) DAO Entity for using the Exposed DAO API. */ -public abstract class KotlinxUUIDEntity(id: EntityID) : Entity(id) +public open class KotlinxUUIDEntity(id: EntityID) : Entity(id) diff --git a/kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntityClass.kt b/kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntityClass.kt similarity index 87% rename from kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntityClass.kt rename to kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntityClass.kt index 377b5aa..0707329 100644 --- a/kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntityClass.kt +++ b/kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDEntityClass.kt @@ -11,7 +11,7 @@ import org.jetbrains.exposed.dao.id.* /** * A [UUID](Kotlinx.uuid.UUID) DAO EntityClass for using the Exposed DAO API. */ -public abstract class KotlinxUUIDEntityClass( +public open class KotlinxUUIDEntityClass( table: IdTable, entityType: Class? = null, entityCtor: ((EntityID) -> E)? = null diff --git a/kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDTable.kt b/kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDTable.kt similarity index 100% rename from kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/KotlinxUUIDTable.kt rename to kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/KotlinxUUIDTable.kt diff --git a/kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/UUIDColumnType.kt b/kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/UUIDColumnType.kt similarity index 100% rename from kotlinx-uuid-exposed/src/jvmMain/kotlin/kotlinx/uuid/exposed/UUIDColumnType.kt rename to kotlinx-uuid-exposed/src/main/kotlin/kotlinx/uuid/exposed/UUIDColumnType.kt diff --git a/kotlinx-uuid-exposed/src/jvmTest/kotlin/kotlinx/uuid/exposed/UUIDColumnTypeTest.kt b/kotlinx-uuid-exposed/src/test/kotlin/kotlinx/uuid/exposed/UUIDColumnTypeTest.kt similarity index 100% rename from kotlinx-uuid-exposed/src/jvmTest/kotlin/kotlinx/uuid/exposed/UUIDColumnTypeTest.kt rename to kotlinx-uuid-exposed/src/test/kotlin/kotlinx/uuid/exposed/UUIDColumnTypeTest.kt diff --git a/kotlinx-uuid-exposed/src/jvmTest/kotlin/kotlinx/uuid/exposed/UUIDDaoTests.kt b/kotlinx-uuid-exposed/src/test/kotlin/kotlinx/uuid/exposed/UUIDDaoTests.kt similarity index 100% rename from kotlinx-uuid-exposed/src/jvmTest/kotlin/kotlinx/uuid/exposed/UUIDDaoTests.kt rename to kotlinx-uuid-exposed/src/test/kotlin/kotlinx/uuid/exposed/UUIDDaoTests.kt diff --git a/kotlinx-uuid-exposed/src/jvmTest/kotlin/kotlinx/uuid/exposed/UUIDTableTest.kt b/kotlinx-uuid-exposed/src/test/kotlin/kotlinx/uuid/exposed/UUIDTableTest.kt similarity index 100% rename from kotlinx-uuid-exposed/src/jvmTest/kotlin/kotlinx/uuid/exposed/UUIDTableTest.kt rename to kotlinx-uuid-exposed/src/test/kotlin/kotlinx/uuid/exposed/UUIDTableTest.kt diff --git a/kotlinx-uuid-sqldelight/README.md b/kotlinx-uuid-sqldelight/README.md new file mode 100644 index 0000000..96d3556 --- /dev/null +++ b/kotlinx-uuid-sqldelight/README.md @@ -0,0 +1,11 @@ +# Module kotlinx-uuid-sqldelight + +SQLDelight uses column adapters for custom types, like this UUID. +`kotlinx-uuid-sqldelight` provides two adapters, a `UUIDStringAdapter` for a `String` and a `ByteArrayAdapter` for +a `ByteArray` representation respectively. + +```kotlin +dependencies { + implementation("app.softwork:kotlinx-uuid-sqldelight:LATEST") +} +``` diff --git a/kotlinx-uuid-sqldelight/build.gradle.kts b/kotlinx-uuid-sqldelight/build.gradle.kts index 090270e..5f26782 100644 --- a/kotlinx-uuid-sqldelight/build.gradle.kts +++ b/kotlinx-uuid-sqldelight/build.gradle.kts @@ -1,47 +1,55 @@ /* * Copyright 2021 hfhbd and contributors. Use of this source code is governed by the Apache 2.0 license. */ +plugins { + kotlinMPP + publish + dokkaKover +} kotlin { jvm() + js(IR) { + browser() + nodejs() + } - ios() + // tier 1 + linuxX64() + macosX64() + macosArm64() iosSimulatorArm64() + iosX64() - watchos() + // tier 2 + // no sqldelight support linuxArm64() watchosSimulatorArm64() - - tvos() + watchosX64() + watchosArm32() + watchosArm64() tvosSimulatorArm64() - - macosArm64() - macosX64() - - linuxX64() - + tvosX64() + tvosArm64() + iosArm64() + + // tier 3 + // androidNativeArm32() + // androidNativeArm64() + // androidNativeX86() + // androidNativeX64() mingwX64() - - js(IR) { - browser { - binaries.library() - testTask { - useKarma { - useChromeHeadless() - } - } - } - } + // watchosDeviceArm64() sourceSets { commonMain { dependencies { api(projects.kotlinxUuidCore) - api("com.squareup.sqldelight:runtime:1.5.3") + api("com.squareup.sqldelight:runtime:1.5.5") } } commonTest { dependencies { - api(kotlin("test")) + implementation(kotlin("test")) } } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 3ffb281..a6352ae 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,6 +2,30 @@ * Copyright 2020-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. * Copyright 2021 hfhbd and contributors. Use of this source code is governed by the Apache 2.0 license. */ +pluginManagement { + includeBuild("gradle/build-logic") + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("mySettings") + id("com.gradle.enterprise") version "3.12.6" +} + +gradleEnterprise { + buildScan { + termsOfServiceUrl = "https://gradle.com/terms-of-service" + termsOfServiceAgree = "yes" + if (System.getenv("CI") != null) { + publishAlways() + tag("CI") + } + } +} + rootProject.name = "kotlinx-uuid" enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")