diff --git a/compose/base64 b/compose/base64 new file mode 100644 index 0000000000..1fcfedc433 --- /dev/null +++ b/compose/base64 @@ -0,0 +1,2 @@ +AGFzbQEAAAABBQFgAAF/AhIBA2VudgZtZW1vcnkCAYACgAIDAgEABwsBB19yZW5kZXIAAApJAUcBA38DQCAAQaAGbCECQQAhAQNAIAEgAmpBAnRBgAhqQf+BgHg2AgAgAUEBaiIBQaAGRw0ACyAAQQFqIgBBkANHDQALQYAICw== +AGFzbQEAAAABBQFgAAF/AhIBA2VudgZtZW1vcnkCAYACgAIDAgEABwsBB19yZW5kZXIAAApJAUcBA38DQCAAQaAGbCECQQAhAQNAIAEgAmpBAnRBgAhqQf+BgHg2AgAgAUEBaiIBQaAGRw0ACyAAQQFqIgBBkANHDQALQYAICw== -d diff --git a/compose/frameworks/support b/compose/frameworks/support index adf295be1d..0f2218ce9c 160000 --- a/compose/frameworks/support +++ b/compose/frameworks/support @@ -1 +1 @@ -Subproject commit adf295be1d7ab30f6ab1d291c7f05475b6c50937 +Subproject commit 0f2218ce9c773f0bf5c7e70dcf692dc93b373977 diff --git a/compose/gradle/wrapper/gradle-wrapper.jar b/compose/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000..249e5832f0 Binary files /dev/null and b/compose/gradle/wrapper/gradle-wrapper.jar differ diff --git a/compose/gradle/wrapper/gradle-wrapper.properties b/compose/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..ae04661ee7 --- /dev/null +++ b/compose/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/compose/scripts/runGradle b/compose/scripts/runGradle index f8af8648c6..d5b32008e1 100755 --- a/compose/scripts/runGradle +++ b/compose/scripts/runGradle @@ -1,7 +1,6 @@ #!/bin/bash cd "$(dirname "$0")" - pushd .. ./gradlew $COMPOSE_DEFAULT_GRADLE_ARGS "$@" || exit 1 popd \ No newline at end of file diff --git a/examples/web-compose-bird/build.gradle.kts b/examples/web-compose-bird/build.gradle.kts index 8632c4639d..4e754554ce 100644 --- a/examples/web-compose-bird/build.gradle.kts +++ b/examples/web-compose-bird/build.gradle.kts @@ -2,15 +2,17 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } group = "com.theapache64.composebird" version = "1.0.0-alpha01" // Add maven repositories repositories { + mavenLocal() mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + maven("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental") google() } @@ -19,13 +21,30 @@ kotlin { browser() binaries.executable() } + wasm { + browser() + binaries.executable() + } sourceSets { - val jsMain by getting { + + val jsWasmMain by creating { dependencies { - implementation(compose.web.core) - implementation(compose.runtime) +// implementation(compose.web.core) +// implementation(compose.runtime) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4-wasm0") + implementation("org.jetbrains.compose.web:web-core:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.web:internal-web-core-runtime:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.runtime:runtime:1.3.0-rc01-SNAPSHOT") } } + + val jsMain by getting { + dependsOn(jsWasmMain) + } + + val wasmMain by getting { + dependsOn(jsWasmMain) + } } } @@ -36,3 +55,11 @@ afterEvaluate { versions.webpackCli.version = "4.10.0" } } + +project.tasks.withType().configureEach { + kotlinOptions.freeCompilerArgs += listOf( + "-Xklib-enable-signature-clash-checks=false", + "-Xplugin=${project.properties["compose.plugin.path"]}", + "-Xir-dce" + ) +} \ No newline at end of file diff --git a/examples/web-compose-bird/gradle.properties b/examples/web-compose-bird/gradle.properties index ba79da52a7..13e5bd4dcd 100644 --- a/examples/web-compose-bird/gradle.properties +++ b/examples/web-compose-bird/gradle.properties @@ -1,3 +1,4 @@ kotlin.code.style=official -kotlin.version=1.7.10 +kotlin.version=1.8.255-SNAPSHOT compose.version=1.2.0 +compose.plugin.path=/Users/Igor.Yakovlev/.m2/repository/org/jetbrains/compose/compiler/compiler/0.0.0-SNAPSHOT/compiler-0.0.0-SNAPSHOT.jar \ No newline at end of file diff --git a/examples/web-compose-bird/kotlin-js-store/yarn.lock b/examples/web-compose-bird/kotlin-js-store/yarn.lock new file mode 100644 index 0000000000..8fa666f8e4 --- /dev/null +++ b/examples/web-compose-bird/kotlin-js-store/yarn.lock @@ -0,0 +1,2981 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@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== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@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.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" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@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" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/cors@^2.8.12": + version "2.8.12" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" + integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/node@*", "@types/node@>=10.0.0": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn@^8.5.0, acorn@^8.7.1: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.8.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" + integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +async@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.1, body-parser@^1.19.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg== + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserslist@^4.14.5: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + +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== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001400: + version "1.0.30001431" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795" + integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@3.5.3, chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + 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== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== + +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.4, debug@^4.1.0, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +default-gateway@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ== + dependencies: + buffer-indexof "^1.0.0" + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +engine.io-parser@~5.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== + +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== + dependencies: + "@types/cookie" "^0.4.1" + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~5.0.3" + ws "~8.2.3" + +enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.1: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.7: + version "3.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.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: + version "1.0.5" + resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" + integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.1.7: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globby@^11.0.1: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +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== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +internal-ip@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-6.2.0.tgz#d5541e79716e406b74ac6b07b856ef18dc1621c1" + integrity sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg== + dependencies: + default-gateway "^6.0.0" + ipaddr.js "^1.9.1" + is-ip "^3.1.0" + p-event "^4.2.0" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +ip-regex@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + +ip@^1.1.0: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + +ipaddr.js@1.9.1, ipaddr.js@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.9.0: + 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-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + 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" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +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" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +karma-chrome-launcher@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz#baca9cc071b1562a1db241827257bfe5cab597ea" + integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== + dependencies: + which "^1.2.1" + +karma-mocha@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" + integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== + dependencies: + minimist "^1.2.3" + +karma-sourcemap-loader@0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz#d4bae72fb7a8397328a62b75013d2df937bdcf9c" + integrity sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g== + dependencies: + graceful-fs "^4.1.2" + +karma-webpack@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" + integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + webpack-merge "^4.1.5" + +karma@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.0.tgz#82652dfecdd853ec227b74ed718a997028a99508" + integrity sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w== + dependencies: + "@colors/colors" "1.5.0" + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.5.1" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + glob "^7.1.7" + graceful-fs "^4.2.6" + http-proxy "^1.18.1" + isbinaryfile "^4.0.8" + lodash "^4.17.21" + log4js "^6.4.1" + mime "^2.5.2" + minimatch "^3.0.4" + mkdirp "^0.5.5" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^4.4.1" + source-map "^0.6.1" + tmp "^0.2.1" + ua-parser-js "^0.7.30" + yargs "^16.1.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log4js@^6.4.1: + version "6.7.0" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.7.0.tgz#fff671a74b2f6e956d135c3c756c79072809a23b" + integrity sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + flatted "^3.2.7" + rfdc "^1.3.0" + streamroller "^3.1.3" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.4.3: + version "3.4.11" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.11.tgz#3a34837ade675825d805a2c135e88cefe5e53aaf" + integrity sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.3, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +mkdirp@^0.5.5, mkdirp@^0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mocha@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" + integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ== + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +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== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +p-event@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== + dependencies: + p-timeout "^3.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +portfinder@^1.0.28: + version "1.0.32" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" + integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== + dependencies: + async "^2.6.4" + debug "^3.2.7" + mkdirp "^0.5.6" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + +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== + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.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== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.0.1: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +regexp.prototype.flags@^1.2.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.9.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^1.10.11: + version "1.10.14" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574" + integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA== + dependencies: + node-forge "^0.10.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +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" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +socket.io-adapter@~2.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-parser@~4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.1.tgz#01c96efa11ded938dcb21cbe590c26af5eff65e5" + integrity sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + +socket.io@^4.4.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.3.tgz#44dffea48d7f5aa41df4a66377c386b953bc521c" + integrity sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg== + 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.2.0" + +sockjs@^0.3.21: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-loader@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.0.tgz#bdc6b118bc6c87ee4d8d851f2d4efcc5abdb2ef5" + integrity sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw== + dependencies: + abab "^2.0.6" + iconv-lite "^0.6.3" + source-map-js "^1.0.2" + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +streamroller@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.3.tgz#d95689a8c29b30d093525d0baffe6616fd62ca7e" + integrity sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + fs-extra "^8.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.1.3: + version "5.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" + integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + +terser@^5.14.1: + version "5.15.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.1.tgz#8561af6e0fd6d839669c73b92bdd5777d870ed6c" + integrity sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +ua-parser-js@^0.7.30: + version "0.7.32" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz#cd8c639cdca949e30fa68c44b7813ef13e36d211" + integrity sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.9: + 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" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-cli@4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^5.0.0: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.0.0.tgz#fb4906e91182154bba54a66e6e06f84c1e3c0a80" + integrity sha512-ya5cjoBSf3LqrshZn2HMaRZQx8YRNBE+tx+CQNFGaLLHrvs4Y1aik0sl5SFhLz2cW1O9/NtyaZhthc+8UiuvkQ== + dependencies: + ansi-html "^0.0.7" + bonjour "^3.5.0" + chokidar "^3.5.1" + colorette "^1.2.2" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + del "^6.0.0" + express "^4.17.1" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.0" + internal-ip "^6.2.0" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + portfinder "^1.0.28" + schema-utils "^3.1.0" + selfsigned "^1.10.11" + serve-index "^1.9.1" + sockjs "^0.3.21" + spdy "^4.0.2" + strip-ansi "^7.0.0" + url "^0.11.0" + webpack-dev-middleware "^5.0.0" + ws "^8.1.0" + +webpack-merge@^4.1.5: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@5.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.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.1.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== + +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== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/examples/web-compose-bird/settings.gradle.kts b/examples/web-compose-bird/settings.gradle.kts index d6270ff710..5fc9897ba0 100644 --- a/examples/web-compose-bird/settings.gradle.kts +++ b/examples/web-compose-bird/settings.gradle.kts @@ -1,5 +1,6 @@ pluginManagement { repositories { + mavenLocal() gradlePluginPortal() mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") @@ -7,7 +8,7 @@ pluginManagement { plugins { kotlin("multiplatform").version(extra["kotlin.version"] as String) - id("org.jetbrains.compose").version(extra["compose.version"] as String) + //id("org.jetbrains.compose").version(extra["compose.version"] as String) } } diff --git a/examples/web-compose-bird/src/jsMain/kotlin/core/ComposeBirdGame.kt b/examples/web-compose-bird/src/jsMain/kotlin/core/ComposeBirdGame.kt index e445cb3909..9acd36e81f 100644 --- a/examples/web-compose-bird/src/jsMain/kotlin/core/ComposeBirdGame.kt +++ b/examples/web-compose-bird/src/jsMain/kotlin/core/ComposeBirdGame.kt @@ -1,157 +1,5 @@ package core -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.State -import androidx.compose.runtime.mutableStateOf -import data.GameFrame -import data.Tube import kotlin.js.Date -/** - * Game logic - */ -class ComposeBirdGame : Game { - - companion object { - const val COLUMNS = 15 - const val ROWS = 9 - const val BIRD_COLUMN = 1 - private const val TUBES_START_FROM = (COLUMNS * 0.75).toInt() - const val TOTAL_TUBES = 10 - private const val TUBE_HORIZONTAL_DISTANCE = 3 - private const val TUBE_VERTICAL_DISTANCE = 3 - private const val TUBE_WEIGHT = 500 - private const val BIRD_WEIGHT = 300 - } - - private val tubeGapRange = TUBE_VERTICAL_DISTANCE until ROWS - private var tubeLastSteppedAt = 0.0 - private var birdLastSteppedAt = 0.0 - private var shouldMoveBirdUp = false - - private val _gameFrame: MutableState by lazy { - mutableStateOf( - // First frame - GameFrame( - birdPos = ROWS / 2, - tubes = buildLevel(), - isGameOver = false, - isGameWon = false, - score = 0 - ) - ) - } - - /** - * To build a random level - */ - private fun buildLevel(): List { - return mutableListOf().apply { - var tubesAdded = 0 - var tubePosition = 0 - while (tubesAdded < TOTAL_TUBES) { - if (tubePosition > TUBES_START_FROM && tubePosition % TUBE_HORIZONTAL_DISTANCE == 0) { // To give space to each tube - add( - Tube( - tubePosition, - buildRandomTube() - ) - ) - tubesAdded++ - } - tubePosition++ - } - } - } - - - /** - * To build a random vertical tube/pipe - */ - private fun buildRandomTube(): List { - // creating a full tube - val tube = mutableListOf().apply { - repeat(ROWS) { - add(true) - } - } - - // Adding gaps in random middle positions to make it two tubes. - val gap1 = tubeGapRange.random() - repeat(TUBE_VERTICAL_DISTANCE) { index -> - tube[gap1 - index] = false - } - - return tube - } - - override val gameFrame: State = _gameFrame - - override fun step() { - update { - val now = Date().getTime() - - // Stepping tube - val tubeDiff = now - tubeLastSteppedAt - val newTubes = if (tubeDiff > TUBE_WEIGHT) { - tubeLastSteppedAt = now - tubes.map { - it.copy(position = it.position - 1) - } - } else { - tubes - } - - // Stepping bird position - val birdDiff = now - birdLastSteppedAt - val newBirdPos = when { - shouldMoveBirdUp -> { - birdLastSteppedAt = now - shouldMoveBirdUp = false - birdPos - 1 // move up - } - birdDiff > BIRD_WEIGHT -> { - birdLastSteppedAt = now - birdPos + 1 // move down - } - else -> { - birdPos - } - } - - val newScore = newTubes.filter { it.position < BIRD_COLUMN }.size // All passed tube - val newIsGameWon = newScore >= TOTAL_TUBES // If all tubes passed - - // Checking if bird gone out - val newIsGameOver = if (newBirdPos < 0 || newBirdPos >= ROWS || isCollidedWithTube(newBirdPos, tubes)) { - true - } else { - isGameOver - } - - copy( - isGameOver = newIsGameOver, - tubes = newTubes, - birdPos = newBirdPos, - score = newScore, - isGameWon = newIsGameWon - ) - } - } - - /** - * To check if the bird collided with the tube (collision-detection) - */ - private fun isCollidedWithTube(newBirdPos: Int, tubes: List): Boolean { - val birdTube = tubes.find { it.position == BIRD_COLUMN } - return birdTube?.coordinates?.get(newBirdPos) ?: false - } - - override fun moveBirdUp() { - shouldMoveBirdUp = true - } - - private inline fun update(func: GameFrame.() -> GameFrame) { - _gameFrame.value = _gameFrame.value.func() - } -} \ No newline at end of file +actual fun getTime(): Double = Date().getTime() diff --git a/examples/web-compose-bird/src/jsWasmMain/kotlin/core/ComposeBirdGame.kt b/examples/web-compose-bird/src/jsWasmMain/kotlin/core/ComposeBirdGame.kt new file mode 100644 index 0000000000..6591ddc3dd --- /dev/null +++ b/examples/web-compose-bird/src/jsWasmMain/kotlin/core/ComposeBirdGame.kt @@ -0,0 +1,158 @@ +package core + +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import data.GameFrame +import data.Tube + +expect fun getTime(): Double + +/** + * Game logic + */ +class ComposeBirdGame : Game { + + companion object { + const val COLUMNS = 15 + const val ROWS = 9 + const val BIRD_COLUMN = 1 + private const val TUBES_START_FROM = (COLUMNS * 0.75).toInt() + const val TOTAL_TUBES = 10 + private const val TUBE_HORIZONTAL_DISTANCE = 3 + private const val TUBE_VERTICAL_DISTANCE = 3 + private const val TUBE_WEIGHT = 500 + private const val BIRD_WEIGHT = 300 + } + + private val tubeGapRange = TUBE_VERTICAL_DISTANCE until ROWS + private var tubeLastSteppedAt = 0.0 + private var birdLastSteppedAt = 0.0 + private var shouldMoveBirdUp = false + + private val _gameFrame: MutableState by lazy { + mutableStateOf( + // First frame + GameFrame( + birdPos = ROWS / 2, + tubes = buildLevel(), + isGameOver = false, + isGameWon = false, + score = 0 + ) + ) + } + + /** + * To build a random level + */ + private fun buildLevel(): List { + return mutableListOf().apply { + var tubesAdded = 0 + var tubePosition = 0 + while (tubesAdded < TOTAL_TUBES) { + if (tubePosition > TUBES_START_FROM && tubePosition % TUBE_HORIZONTAL_DISTANCE == 0) { // To give space to each tube + add( + Tube( + tubePosition, + buildRandomTube() + ) + ) + tubesAdded++ + } + tubePosition++ + } + } + } + + + /** + * To build a random vertical tube/pipe + */ + private fun buildRandomTube(): List { + // creating a full tube + val tube = mutableListOf().apply { + repeat(ROWS) { + add(true) + } + } + + // Adding gaps in random middle positions to make it two tubes. + val gap1 = tubeGapRange.random() + repeat(TUBE_VERTICAL_DISTANCE) { index -> + tube[gap1 - index] = false + } + + return tube + } + + override val gameFrame: State = _gameFrame + + override fun step() { + update { + val now = getTime() + + // Stepping tube + val tubeDiff = now - tubeLastSteppedAt + val newTubes = if (tubeDiff > TUBE_WEIGHT) { + tubeLastSteppedAt = now + tubes.map { + it.copy(position = it.position - 1) + } + } else { + tubes + } + + // Stepping bird position + val birdDiff = now - birdLastSteppedAt + val newBirdPos = when { + shouldMoveBirdUp -> { + birdLastSteppedAt = now + shouldMoveBirdUp = false + birdPos - 1 // move up + } + birdDiff > BIRD_WEIGHT -> { + birdLastSteppedAt = now + birdPos + 1 // move down + } + else -> { + birdPos + } + } + + val newScore = newTubes.filter { it.position < BIRD_COLUMN }.size // All passed tube + val newIsGameWon = newScore >= TOTAL_TUBES // If all tubes passed + + // Checking if bird gone out + val newIsGameOver = if (newBirdPos < 0 || newBirdPos >= ROWS || isCollidedWithTube(newBirdPos, tubes)) { + true + } else { + isGameOver + } + + copy( + isGameOver = newIsGameOver, + tubes = newTubes, + birdPos = newBirdPos, + score = newScore, + isGameWon = newIsGameWon + ) + } + } + + /** + * To check if the bird collided with the tube (collision-detection) + */ + private fun isCollidedWithTube(newBirdPos: Int, tubes: List): Boolean { + val birdTube = tubes.find { it.position == BIRD_COLUMN } + return birdTube?.coordinates?.get(newBirdPos) ?: false + } + + override fun moveBirdUp() { + shouldMoveBirdUp = true + } + + private inline fun update(func: GameFrame.() -> GameFrame) { + _gameFrame.value = _gameFrame.value.func() + } +} \ No newline at end of file diff --git a/examples/web-compose-bird/src/jsMain/kotlin/core/Game.kt b/examples/web-compose-bird/src/jsWasmMain/kotlin/core/Game.kt similarity index 100% rename from examples/web-compose-bird/src/jsMain/kotlin/core/Game.kt rename to examples/web-compose-bird/src/jsWasmMain/kotlin/core/Game.kt diff --git a/examples/web-compose-bird/src/jsMain/kotlin/data/GameFrame.kt b/examples/web-compose-bird/src/jsWasmMain/kotlin/data/GameFrame.kt similarity index 100% rename from examples/web-compose-bird/src/jsMain/kotlin/data/GameFrame.kt rename to examples/web-compose-bird/src/jsWasmMain/kotlin/data/GameFrame.kt diff --git a/examples/web-compose-bird/src/jsMain/kotlin/data/Tube.kt b/examples/web-compose-bird/src/jsWasmMain/kotlin/data/Tube.kt similarity index 100% rename from examples/web-compose-bird/src/jsMain/kotlin/data/Tube.kt rename to examples/web-compose-bird/src/jsWasmMain/kotlin/data/Tube.kt diff --git a/examples/web-compose-bird/src/jsMain/kotlin/main.kt b/examples/web-compose-bird/src/jsWasmMain/kotlin/main.kt similarity index 100% rename from examples/web-compose-bird/src/jsMain/kotlin/main.kt rename to examples/web-compose-bird/src/jsWasmMain/kotlin/main.kt diff --git a/examples/web-compose-bird/src/wasmMain/kotlin/core/ComposeBirdGame.kt b/examples/web-compose-bird/src/wasmMain/kotlin/core/ComposeBirdGame.kt new file mode 100644 index 0000000000..76954b046d --- /dev/null +++ b/examples/web-compose-bird/src/wasmMain/kotlin/core/ComposeBirdGame.kt @@ -0,0 +1,4 @@ +package core + +@JsFun("() => new Date().getTime()") +actual external fun getTime(): Double \ No newline at end of file diff --git a/examples/web-compose-bird/src/wasmMain/resources/index.html b/examples/web-compose-bird/src/wasmMain/resources/index.html new file mode 100644 index 0000000000..eca522aec7 --- /dev/null +++ b/examples/web-compose-bird/src/wasmMain/resources/index.html @@ -0,0 +1,17 @@ + + + + + compose-bird + + + +
+ + + diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposeCompilerCompatability.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposeCompilerCompatability.kt index cbf3d8bbe6..e982370fe8 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposeCompilerCompatability.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposeCompilerCompatability.kt @@ -9,6 +9,10 @@ internal object ComposeCompilerCompatability { "1.3.2", unsupportedPlatforms = setOf(KotlinPlatformType.js) ) + "1.8.255-SNAPSHOT" -> ComposeCompilerVersion( + "1.3.2", + //unsupportedPlatforms = setOf(KotlinPlatformType.js) + ) else -> null } } diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/ComposeCompilerArtifactProvider.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/ComposeCompilerArtifactProvider.kt index 8f741311f1..73f505d237 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/ComposeCompilerArtifactProvider.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/internal/ComposeCompilerArtifactProvider.kt @@ -19,12 +19,12 @@ internal class ComposeCompilerArtifactProvider( private val customPluginString: () -> String? ) { fun checkTargetSupported(target: KotlinTarget) { - require(!unsupportedPlatforms.contains(target.platformType)) { - "This version of Compose Multiplatform doesn't support Kotlin " + - "$kotlinVersion for ${target.platformType} target. " + - "Please see $KOTLIN_COMPATABILITY_LINK " + - "to know the latest supported version of Kotlin." - } +// require(!unsupportedPlatforms.contains(target.platformType)) { +// "This version of Compose Multiplatform doesn't support Kotlin " + +// "$kotlinVersion for ${target.platformType} target. " + +// "Please see $KOTLIN_COMPATABILITY_LINK " + +// "to know the latest supported version of Kotlin." +// } } private val autoCompilerVersion by lazy { diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties index ddff72818c..d19b730b06 100644 --- a/gradle-plugins/gradle.properties +++ b/gradle-plugins/gradle.properties @@ -6,15 +6,15 @@ compose.version=1.2.0 # The latest version of Compose Compiler used by Gradle plugin. Used only in tests. compose.tests.compiler.version=1.3.2 # The latest version of Kotlin compatible with compose.tests.compiler.version. Used only in tests. -compose.tests.compiler.compatible.kotlin.version=1.7.20 +compose.tests.compiler.compatible.kotlin.version=1.8.255-SNAPSHOT # The latest version of Kotlin compatible with compose.tests.compiler.version for JS target. Used only on CI. -compose.tests.js.compiler.compatible.kotlin.version=1.7.10 +compose.tests.js.compiler.compatible.kotlin.version=1.8.255-SNAPSHOT # Version of Compose Compiler published by Google. # Used to check if our plugin is compatible with it. # https://developer.android.com/jetpack/androidx/releases/compose-kotlin compose.tests.androidx.compiler.version=1.1.1 -compose.tests.androidx.compiler.compatible.kotlin.version=1.6.10 +compose.tests.androidx.compiler.compatible.kotlin.version=1.8.255-SNAPSHOT # A version of Gradle plugin, that will be published, # unless overridden by COMPOSE_GRADLE_PLUGIN_VERSION env var. -deploy.version=0.1.0-SNAPSHOT +deploy.version=1.3.2 diff --git a/templates/web-template/build.gradle.kts b/templates/web-template/build.gradle.kts index 2414d946d4..378e2c5c85 100644 --- a/templates/web-template/build.gradle.kts +++ b/templates/web-template/build.gradle.kts @@ -1,24 +1,36 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension +buildscript { + repositories { + mavenLocal() + gradlePluginPortal() + } +} + plugins { kotlin("multiplatform") id("org.jetbrains.compose") } repositories { + mavenLocal() mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") google() } kotlin { - js(IR) { +// js(IR) { +// browser() +// binaries.executable() +// } + wasm { browser() binaries.executable() } sourceSets { - val jsMain by getting { + val wasmMain by getting { kotlin.srcDir("src/main/kotlin") resources.srcDir("src/main/resources") diff --git a/web/benchmark-core/build.gradle.kts b/web/benchmark-core/build.gradle.kts index 60d5e761cb..24cbd0b957 100644 --- a/web/benchmark-core/build.gradle.kts +++ b/web/benchmark-core/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("org.jetbrains.kotlin.multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } @@ -20,7 +20,8 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - implementation(compose.runtime) + //implementation(compose.runtime) + implementation("org.jetbrains.compose.runtime:runtime-js:1.3.0-rc01-SNAPSHOT") implementation(project(":web-core")) implementation(kotlin("stdlib-common")) } @@ -28,6 +29,9 @@ kotlin { val jsMain by getting { dependencies { + implementation("org.jetbrains.compose.web:web-core-js:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.web:internal-web-core-runtime-js:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.runtime:runtime-js:1.3.0-rc01-SNAPSHOT") implementation(kotlin("stdlib-js")) } } @@ -71,3 +75,11 @@ val printBenchmarkResults by tasks.registering { } tasks.named("jsTest") { finalizedBy(printBenchmarkResults) } + +project.tasks.withType().configureEach { + kotlinOptions.freeCompilerArgs += listOf( + "-Xklib-enable-signature-clash-checks=false", + "-Xplugin=${project.properties["compose.plugin.path"]}" + ) +} + diff --git a/web/build.gradle.kts b/web/build.gradle.kts index 4c325bf9d2..7e16451bdd 100644 --- a/web/build.gradle.kts +++ b/web/build.gradle.kts @@ -2,13 +2,13 @@ import org.gradle.api.tasks.testing.AbstractTestTask import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.jetbrains.compose.gradle.kotlinKarmaConfig import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.targets +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.targets plugins { kotlin("multiplatform") apply false } -val COMPOSE_WEB_VERSION: String = extra["compose.version"] as String +val COMPOSE_WEB_VERSION: String = (extra["compose.version"] as String) + "-SNAPSHOT" val COMPOSE_REPO_USERNAME: String? by project val COMPOSE_REPO_KEY: String? by project val COMPOSE_WEB_BUILD_WITH_SAMPLES = project.property("compose.web.buildSamples")!!.toString().toBoolean() @@ -147,19 +147,22 @@ subprojects { } repositories { - gradlePluginPortal() mavenLocal() - mavenCentral() - maven { - url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") - } maven { - url = uri("https://maven.pkg.jetbrains.space/public/p/kotlinx-coroutines/maven") + url = uri("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental") } - maven { - url = uri("https://packages.jetbrains.team/maven/p/ui/dev") - } - google() + gradlePluginPortal() + mavenCentral() +// maven { +// url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") +// } +// maven { +// url = uri("https://maven.pkg.jetbrains.space/public/p/kotlinx-coroutines/maven") +// } +// maven { +// url = uri("https://packages.jetbrains.team/maven/p/ui/dev") +// } +// google() } tasks.withType { diff --git a/web/buildSrc/build.gradle.kts b/web/buildSrc/build.gradle.kts index 29db9d041c..84c698a9ef 100644 --- a/web/buildSrc/build.gradle.kts +++ b/web/buildSrc/build.gradle.kts @@ -1,6 +1,7 @@ repositories { gradlePluginPortal() mavenCentral() + mavenLocal() maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") } diff --git a/web/buildSrc/gradle.properties b/web/buildSrc/gradle.properties index aa2eefb519..b7ca2cc973 100644 --- a/web/buildSrc/gradle.properties +++ b/web/buildSrc/gradle.properties @@ -1 +1 @@ -kotlin.version=1.7.10 +kotlin.version=1.8.255-SNAPSHOT diff --git a/web/buildSrc/settings.gradle.kts b/web/buildSrc/settings.gradle.kts index f89aae9646..4842453003 100644 --- a/web/buildSrc/settings.gradle.kts +++ b/web/buildSrc/settings.gradle.kts @@ -2,6 +2,7 @@ pluginManagement { val kotlinVersion: String = settings.extra["kotlin.version"] as String repositories { + mavenLocal() gradlePluginPortal() mavenCentral() maven { diff --git a/web/compose-compiler-integration/build.gradle.kts b/web/compose-compiler-integration/build.gradle.kts index 8f4c88fabc..b30984fe27 100644 --- a/web/compose-compiler-integration/build.gradle.kts +++ b/web/compose-compiler-integration/build.gradle.kts @@ -2,7 +2,7 @@ import org.jetbrains.compose.gradle.standardConf plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } @@ -22,7 +22,8 @@ kotlin { val jsMain by getting { dependencies { implementation(kotlin("stdlib-js")) - implementation(compose.runtime) + //implementation(compose.runtime) + implementation("org.jetbrains.compose.runtime:runtime-js:1.3.0-rc01-SNAPSHOT") implementation(project(":web-core")) } } diff --git a/web/compose-compiler-integration/main-template/build.gradle.kts b/web/compose-compiler-integration/main-template/build.gradle.kts index 5c471e46f8..5bf09b05e0 100644 --- a/web/compose-compiler-integration/main-template/build.gradle.kts +++ b/web/compose-compiler-integration/main-template/build.gradle.kts @@ -1,6 +1,6 @@ plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } repositories { diff --git a/web/compose-compiler-integration/main-template/lib/build.gradle.kts b/web/compose-compiler-integration/main-template/lib/build.gradle.kts index af3f7664a2..dc0658e7a4 100644 --- a/web/compose-compiler-integration/main-template/lib/build.gradle.kts +++ b/web/compose-compiler-integration/main-template/lib/build.gradle.kts @@ -1,6 +1,6 @@ plugins { kotlin("multiplatform")// version "1.5.10" - id("org.jetbrains.compose")// version (System.getenv("COMPOSE_INTEGRATION_VERSION") ?: "0.0.0-SNASPHOT") + //id("org.jetbrains.compose")// version (System.getenv("COMPOSE_INTEGRATION_VERSION") ?: "0.0.0-SNASPHOT") } repositories { diff --git a/web/core/build.gradle.kts b/web/core/build.gradle.kts index 65375aea41..9e3f705e9f 100644 --- a/web/core/build.gradle.kts +++ b/web/core/build.gradle.kts @@ -2,12 +2,14 @@ import org.jetbrains.compose.gradle.standardConf plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + ////id("org.jetbrains.compose") } kotlin { - jvm() +// jvm { +// +// } js(IR) { browser() { testTask { @@ -18,38 +20,81 @@ kotlin { } binaries.executable() } + wasm { + browser() { + testTask { + useKarma { + standardConf() + } + } + } + } sourceSets { val commonMain by getting { dependencies { - implementation(compose.runtime) + implementation("org.jetbrains.compose.runtime:runtime:1.3.0-rc01-SNAPSHOT") + //implementation(compose.runtime) } } - val jsMain by getting { + val commonTest by getting { + dependencies { + implementation(project(":test-utils")) + implementation(kotlin("test")) + } + } + + val jsWasmMain by creating { + dependsOn(commonMain) languageSettings { optIn("org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi") } dependencies { implementation(project(":internal-web-core-runtime")) + // https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect } } - val jsTest by getting { + val jsMain by getting { languageSettings { optIn("org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi") - optIn("org.jetbrains.compose.web.testutils.ComposeWebExperimentalTestsApi") } - dependencies { - implementation(project(":test-utils")) - implementation(kotlin("test-js")) + dependsOn(jsWasmMain) + } + + val wasmMain by getting { + languageSettings { + optIn("org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi") } + dependsOn(jsWasmMain) } - val jvmMain by getting { - dependencies { - implementation(compose.desktop.currentOs) + val jsTest by getting { + languageSettings { + optIn("org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi") + optIn("org.jetbrains.compose.web.testutils.ComposeWebExperimentalTestsApi") } } + +// val jvmMain by getting { +// dependencies { +// implementation("org.jetbrains.compose.desktop:desktop-jvm-macos-arm64") +// } +// } + } +} + +project.tasks.withType().configureEach { + kotlinOptions.freeCompilerArgs += listOf( + "-Xklib-enable-signature-clash-checks=false", + "-Xplugin=${project.properties["compose.plugin.path"]}" + ) +} + +project.afterEvaluate { + //Disable jsWasmMain intermediate sourceset publication + tasks.named("compileJsWasmMainKotlinMetadata") { + enabled = false } } diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt index eb8cef1b02..49f342db86 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt @@ -3,10 +3,6 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -@file:Suppress("NOTHING_TO_INLINE") - package org.jetbrains.compose.web.css -external interface CSSKeywordValue : CSSStyleValue - -inline fun CSSKeywordValue(value: String): CSSKeywordValue = CSSStyleValue(value).unsafeCast() +actual external interface CSSKeywordValue : CSSStyleValue \ No newline at end of file diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt index 2001b9a863..57afb9a41b 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt @@ -1,71 +1,3 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - package org.jetbrains.compose.web.css -operator fun CSSSizeValue.times(num: Number): CSSSizeValue = CSSUnitValueTyped(value * num.toFloat(), unit) -operator fun Number.times(unit: CSSSizeValue): CSSSizeValue = CSSUnitValueTyped(unit.value * toFloat(), unit.unit) - -operator fun CSSSizeValue.div(num: Number): CSSSizeValue = CSSUnitValueTyped(value / num.toFloat(), unit) - -operator fun CSSSizeValue.plus(b: CSSSizeValue): CSSSizeValue = CSSUnitValueTyped(value + b.value, unit) -operator fun CSSSizeValue.minus(b: CSSSizeValue): CSSSizeValue = CSSUnitValueTyped(value - b.value, unit) -operator fun CSSSizeValue.unaryMinus(): CSSSizeValue = CSSUnitValueTyped(-value, unit) -operator fun CSSSizeValue.unaryPlus(): CSSSizeValue = CSSUnitValueTyped(value, unit) - -external interface CSSCalcOperation: CSSNumericValue - -data class CSSCalcValue( - var op: CSSCalcOperation -) : CSSCalcOperation { - override fun toString(): String = "calc$op" -} - -private data class CSSPlus( - var l: CSSNumericValue, - var r: CSSNumericValue -) : CSSCalcOperation { - override fun toString(): String = "($l + $r)" -} - -private data class CSSMinus( - var l: CSSNumericValue, - var r: CSSNumericValue -) : CSSCalcOperation { - override fun toString(): String = "($l - $r)" -} - -private data class CSSTimes( - var l: CSSNumericValue, - var r: Number, - val left: Boolean = true -) : CSSCalcOperation { - override fun toString(): String = if (left) "($l * $r)" else "($r * $l)" -} - -private data class CSSDiv( - var l: CSSNumericValue, - var r: Number -) : CSSCalcOperation { - override fun toString(): String = "($l / $r)" -} - -operator fun CSSNumericValue.plus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSPlus(this, b)) -operator fun CSSCalcValue.plus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSPlus(this.op, b)) -operator fun CSSNumericValue.plus(b: CSSCalcValue): CSSCalcValue = CSSCalcValue(CSSPlus(this, b.op)) - -operator fun CSSNumericValue.minus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSMinus(this, b)) -operator fun CSSCalcValue.minus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSMinus(this.op, b)) -operator fun CSSNumericValue.minus(b: CSSCalcValue): CSSCalcValue = CSSCalcValue(CSSMinus(this, b.op)) - -operator fun CSSCalcValue.times(b: Number): CSSCalcValue = CSSCalcValue(CSSTimes(this.op, b)) -operator fun Number.times(b: CSSCalcValue): CSSCalcValue = CSSCalcValue(CSSTimes(b.op, this, false)) - -operator fun CSSNumericValue.div(b: Number): CSSCalcValue = CSSCalcValue(CSSDiv(this, b)) -operator fun CSSCalcValue.div(b: Number): CSSCalcValue = CSSCalcValue(CSSDiv(this.op, b)) - -operator fun CSSNumericValue.times(b: Number): CSSCalcValue = CSSCalcValue(CSSTimes(this, b)) -operator fun Number.times(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSTimes(b, this, false)) - +actual external interface CSSCalcOperation: CSSNumericValue \ No newline at end of file diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt index b2ec469c50..44e0163f7e 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt @@ -1,249 +1,8 @@ -@file:Suppress("Unused", "NOTHING_TO_INLINE", "NESTED_CLASS_IN_EXTERNAL_INTERFACE", "INLINE_EXTERNAL_DECLARATION", "WRONG_BODY_OF_EXTERNAL_DECLARATION", "NESTED_EXTERNAL_DECLARATION", "ClassName") - package org.jetbrains.compose.web.css -external interface CSSNumericValue : StylePropertyValue, CSSVariableValueAs> - -external interface CSSSizeValue : CSSNumericValue { - val value: Float - val unit: T -} - -data class CSSUnitValueTyped( - override val value: Float, - override val unit: T -) : CSSSizeValue { - override fun toString(): String = "$value$unit" -} - -interface CSSUnitLengthOrPercentage: CSSUnit -interface CSSUnitPercentage: CSSUnitLengthOrPercentage -interface CSSUnitLength: CSSUnitLengthOrPercentage -interface CSSUnitRel : CSSUnitLength -interface CSSUnitAbs: CSSUnitLength -interface CSSUnitAngle: CSSUnit -interface CSSUnitTime: CSSUnit -interface CSSUnitFrequency: CSSUnit -interface CSSUnitResolution: CSSUnit -interface CSSUnitFlex: CSSUnit - -typealias CSSAngleValue = CSSSizeValue -typealias CSSLengthOrPercentageValue = CSSSizeValue -typealias CSSLengthValue = CSSSizeValue -typealias CSSPercentageValue = CSSSizeValue -typealias CSSUnitValue = CSSSizeValue -typealias CSSNumeric = CSSNumericValue -typealias CSSpxValue = CSSSizeValue - -// fake interfaces to distinguish units -interface CSSUnit { - interface percent: CSSUnitPercentage - - interface em: CSSUnitRel - - interface ex: CSSUnitRel - - interface ch: CSSUnitRel - - interface ic: CSSUnitRel - - interface rem: CSSUnitRel - - interface lh: CSSUnitRel - - interface rlh: CSSUnitRel - - interface vw: CSSUnitRel - - interface vh: CSSUnitRel - - interface vi: CSSUnitRel - - interface vb: CSSUnitRel - - interface vmin: CSSUnitRel - - interface vmax: CSSUnitRel - - interface cm: CSSUnitRel - - interface mm: CSSUnitRel - - interface Q: CSSUnitRel - - interface pt: CSSUnitAbs - - interface pc: CSSUnitAbs - - interface px: CSSUnitAbs - - interface deg: CSSUnitAngle - - interface grad: CSSUnitAngle - - interface rad: CSSUnitAngle - - interface turn: CSSUnitAngle - - interface s: CSSUnitTime - - interface ms: CSSUnitTime - - interface Hz: CSSUnitFrequency - - interface kHz: CSSUnitFrequency - - interface dpi: CSSUnitResolution - - interface dpcm: CSSUnitResolution - - interface dppx: CSSUnitResolution - - interface fr: CSSUnitFlex - - interface number: CSSUnit - - companion object { - inline val percent get() = "%".unsafeCast() - - inline val em get() = "em".unsafeCast() - - inline val ex get() = "ex".unsafeCast() - - inline val ch get() = "ch".unsafeCast() - - inline val ic get() = "ic".unsafeCast() - - inline val rem get() = "rem".unsafeCast() +actual external interface CSSNumericValue : StylePropertyValue, CSSVariableValueAs> - inline val lh get() = "lh".unsafeCast() - - inline val rlh get() = "rlh".unsafeCast() - - inline val vw get() = "vw".unsafeCast() - - inline val vh get() = "vh".unsafeCast() - - inline val vi get() = "vi".unsafeCast() - - inline val vb get() = "vb".unsafeCast() - - inline val vmin get() = "vmin".unsafeCast() - - inline val vmax get() = "vmax".unsafeCast() - - inline val cm get() = "cm".unsafeCast() - - inline val mm get() = "mm".unsafeCast() - - inline val Q get() = "Q".unsafeCast() - - inline val pt get() = "pt".unsafeCast() - - inline val pc get() = "pc".unsafeCast() - - inline val px get() = "px".unsafeCast() - - inline val deg get() = "deg".unsafeCast() - - inline val grad get() = "grad".unsafeCast() - - inline val rad get() = "rad".unsafeCast() - - inline val turn get() = "turn".unsafeCast() - - inline val s get() = "s".unsafeCast() - - inline val ms get() = "ms".unsafeCast() - - inline val Hz get() = "Hz".unsafeCast() - - inline val kHz get() = "kHz".unsafeCast() - - inline val dpi get() = "dpi".unsafeCast() - - inline val dpcm get() = "dpcm".unsafeCast() - - inline val dppx get() = "dppx".unsafeCast() - - inline val fr get() = "fr".unsafeCast() - - inline val number get() = "number".unsafeCast() - } +actual external interface CSSSizeValue : CSSNumericValue { + actual val value: Float + actual val unit: T } - - -val Number.number - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.number) - -val Number.percent - get() : CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.percent) - -val Number.em - get() : CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.em) - -val Number.ex - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.ex) - -val Number.ch - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.ch) - -val Number.cssRem - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.rem) - -val Number.vw - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vw) - -val Number.vh - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vh) - -val Number.vmin - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vmin) - -val Number.vmax - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vmax) - -val Number.cm - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.cm) - -val Number.mm - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.mm) - -val Number.Q - get() : CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.Q) - -val Number.pt - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.pt) -val Number.pc - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.pc) -val Number.px - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.px) - -val Number.deg - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.deg) -val Number.grad - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.grad) -val Number.rad - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.rad) -val Number.turn - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.turn) - -val Number.s - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.s) -val Number.ms - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.ms) - -val Number.Hz - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.Hz) -val Number.kHz - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.kHz) - -val Number.dpi - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.dpi) -val Number.dpcm - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.dpcm) -val Number.dppx - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.dppx) - -val Number.fr - get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.fr) diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/Color.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/Color.kt index d033b31f01..da09fa8bf0 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/Color.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/Color.kt @@ -1,198 +1,3 @@ -@file:Suppress("unused", "MemberVisibilityCanBePrivate") - package org.jetbrains.compose.web.css -external interface CSSColorValue : StylePropertyValue, CSSVariableValueAs - -object Color { - - @Deprecated("use org.jetbrains.compose.web.css.rgb", ReplaceWith("rgb(r, g, b)")) - data class RGB(val r: Number, val g: Number, val b: Number) : CSSColorValue { - override fun toString(): String = "rgb($r, $g, $b)" - } - - @Deprecated("use org.jetbrains.compose.web.css.rgba", ReplaceWith("rgba(r, g, b, a)")) - data class RGBA(val r: Number, val g: Number, val b: Number, val a: Number) : CSSColorValue { - override fun toString(): String = "rgba($r, $g, $b, $a)" - } - - @Deprecated("use org.jetbrains.compose.web.css.hsl", ReplaceWith("hsl(h, s, l)")) - data class HSL(val h: CSSAngleValue, val s: Number, val l: Number) : CSSColorValue { - constructor(h: Number, s: Number, l: Number) : this(h.deg, s, l) - - override fun toString(): String = "hsl($h, $s%, $l%)" - } - - @Deprecated("use org.jetbrains.compose.web.css.hsla", ReplaceWith("hsla(h, s, l, a)")) - data class HSLA(val h: CSSAngleValue, val s: Number, val l: Number, val a: Number) : CSSColorValue { - constructor(h: Number, s: Number, l: Number, a: Number) : this(h.deg, s, l, a) - - override fun toString(): String = "hsla($h, $s%, $l%, $a)" - } - - inline val aliceblue get() = Color("aliceblue") - inline val antiquewhite get() = Color("antiquewhite") - inline val aquamarine get() = Color("aquamarine") - inline val azure get() = Color("azure") - inline val beige get() = Color("beige") - inline val bisque get() = Color("bisque") - inline val black get() = Color("black") - inline val blanchedalmond get() = Color("blanchedalmond") - inline val blue get() = Color("blue") - inline val blueviolet get() = Color("blueviolet") - inline val brown get() = Color("brown") - inline val burlywood get() = Color("burlywood") - inline val cadetblue get() = Color("cadetblue") - inline val chartreuse get() = Color("chartreuse") - inline val chocolate get() = Color("chocolate") - inline val cornflowerblue get() = Color("cornflowerblue") - inline val cornsilk get() = Color("cornsilk") - inline val crimson get() = Color("crimson") - inline val cyan get() = Color("cyan") - inline val darkblue get() = Color("darkblue") - inline val darkcyan get() = Color("darkcyan") - inline val darkgoldenrod get() = Color("darkgoldenrod") - inline val darkgray get() = Color("darkgray") - inline val darkgreen get() = Color("darkgreen") - inline val darkkhaki get() = Color("darkkhaki") - inline val darkmagenta get() = Color("darkmagenta") - inline val darkolivegreen get() = Color("darkolivegreen") - inline val darkorange get() = Color("darkorange") - inline val darkorchid get() = Color("darkorchid") - inline val darkred get() = Color("darkred") - inline val darksalmon get() = Color("darksalmon") - inline val darkslateblue get() = Color("darkslateblue") - inline val darkslategray get() = Color("darkslategray") - inline val darkturquoise get() = Color("darkturquoise") - inline val darkviolet get() = Color("darkviolet") - inline val deeppink get() = Color("deeppink") - inline val deepskyblue get() = Color("deepskyblue") - inline val dimgray get() = Color("dimgray") - inline val dodgerblue get() = Color("dodgerblue") - inline val firebrick get() = Color("firebrick") - inline val floralwhite get() = Color("floralwhite") - inline val forestgreen get() = Color("forestgreen") - inline val fuchsia get() = Color("fuchsia") - inline val gainsboro get() = Color("gainsboro") - inline val ghostwhite get() = Color("ghostwhite") - inline val goldenrod get() = Color("goldenrod") - inline val gold get() = Color("gold") - inline val gray get() = Color("gray") - inline val green get() = Color("green") - inline val greenyellow get() = Color("greenyellow") - inline val honeydew get() = Color("honeydew") - inline val hotpink get() = Color("hotpink") - inline val indianred get() = Color("indianred") - inline val indigo get() = Color("indigo") - inline val ivory get() = Color("ivory") - inline val khaki get() = Color("khaki") - inline val lavenderblush get() = Color("lavenderblush") - inline val lavender get() = Color("lavender") - inline val lawngreen get() = Color("lawngreen") - inline val lemonchiffon get() = Color("lemonchiffon") - inline val lightblue get() = Color("lightblue") - inline val lightcoral get() = Color("lightcoral") - inline val lightcyan get() = Color("lightcyan") - inline val lightgoldenrodyellow get() = Color("lightgoldenrodyellow") - inline val lightgray get() = Color("lightgray") - inline val lightgreen get() = Color("lightgreen") - inline val lightpink get() = Color("lightpink") - inline val lightsalmon get() = Color("lightsalmon") - inline val lightseagreen get() = Color("lightseagreen") - inline val lightskyblue get() = Color("lightskyblue") - inline val lightslategray get() = Color("lightslategray") - inline val lightsteelblue get() = Color("lightsteelblue") - inline val lightyellow get() = Color("lightyellow") - inline val limegreen get() = Color("limegreen") - inline val lime get() = Color("lime") - inline val linen get() = Color("linen") - inline val magenta get() = Color("magenta") - inline val maroon get() = Color("maroon") - inline val mediumaquamarine get() = Color("mediumaquamarine") - inline val mediumblue get() = Color("mediumblue") - inline val mediumorchid get() = Color("mediumorchid") - inline val mediumpurple get() = Color("mediumpurple") - inline val mediumseagreen get() = Color("mediumseagreen") - inline val mediumslateblue get() = Color("mediumslateblue") - inline val mediumspringgreen get() = Color("mediumspringgreen") - inline val mediumturquoise get() = Color("mediumturquoise") - inline val mediumvioletred get() = Color("mediumvioletred") - inline val midnightblue get() = Color("midnightblue") - inline val mintcream get() = Color("mintcream") - inline val mistyrose get() = Color("mistyrose") - inline val moccasin get() = Color("moccasin") - inline val navajowhite get() = Color("navajowhite") - inline val navi get() = Color("navi") - inline val oldlace get() = Color("oldlace") - inline val olivedrab get() = Color("olivedrab") - inline val olive get() = Color("olive") - inline val orange get() = Color("orange") - inline val orangered get() = Color("orangered") - inline val orchid get() = Color("orchid") - inline val palegoldenrod get() = Color("palegoldenrod") - inline val palegreen get() = Color("palegreen") - inline val paleturquoise get() = Color("paleturquoise") - inline val palevioletred get() = Color("palevioletred") - inline val papayawhip get() = Color("papayawhip") - inline val peachpuff get() = Color("peachpuff") - inline val peru get() = Color("peru") - inline val pink get() = Color("pink") - inline val plum get() = Color("plum") - inline val powderblue get() = Color("powderblue") - inline val purple get() = Color("purple") - inline val rebeccapurple get() = Color("rebeccapurple") - inline val red get() = Color("red") - inline val rosybrown get() = Color("rosybrown") - inline val royalblue get() = Color("royalblue") - inline val saddlebrown get() = Color("saddlebrown") - inline val salmon get() = Color("salmon") - inline val sandybrown get() = Color("sandybrown") - inline val seagreen get() = Color("seagreen") - inline val seashell get() = Color("seashell") - inline val sienna get() = Color("sienna") - inline val silver get() = Color("silver") - inline val skyblue get() = Color("skyblue") - inline val slateblue get() = Color("slateblue") - inline val slategray get() = Color("slategray") - inline val snow get() = Color("snow") - inline val springgreen get() = Color("springgreen") - inline val steelblue get() = Color("steelblue") - inline val teal get() = Color("teal") - inline val thistle get() = Color("thistle") - inline val tomato get() = Color("tomato") - inline val turquoise get() = Color("turquoise") - inline val violet get() = Color("violet") - inline val wheat get() = Color("wheat") - inline val white get() = Color("white") - inline val whitesmoke get() = Color("whitesmoke") - inline val yellowgreen get() = Color("yellowgreen") - inline val yellow get() = Color("yellow") - - inline val transparent get() = Color("transparent") - inline val currentColor get() = Color("currentColor") -} - -fun Color(name: String): CSSColorValue = name.unsafeCast() - -private class RGB(val r: Number, val g: Number, val b: Number): CSSColorValue { - override fun toString(): String = "rgb($r, $g, $b)" -} - -private class RGBA(val r: Number, val g: Number, val b: Number, val a: Number) : CSSColorValue { - override fun toString(): String = "rgba($r, $g, $b, $a)" -} - -private class HSL(val h: CSSAngleValue, val s: Number, val l: Number) : CSSColorValue { - override fun toString(): String = "hsl($h, $s%, $l%)" -} - -private class HSLA(val h: CSSAngleValue, val s: Number, val l: Number, val a: Number) : CSSColorValue { - override fun toString(): String = "hsla($h, $s%, $l%, $a)" -} - -fun rgb(r: Number, g: Number, b: Number): CSSColorValue = RGB(r, g, b) -fun rgba(r: Number, g: Number, b: Number, a: Number): CSSColorValue = RGBA(r, g, b, a) -fun hsl(h: CSSAngleValue, s: Number, l: Number): CSSColorValue = HSL(h, s, l) -fun hsl(h: Number, s: Number, l: Number): CSSColorValue = HSL(h.deg, s, l) -fun hsla(h: CSSAngleValue, s: Number, l: Number, a: Number): CSSColorValue = HSLA(h, s, l, a) -fun hsla(h: Number, s: Number, l: Number, a: Number): CSSColorValue = HSLA(h.deg, s, l, a) +actual external interface CSSColorValue : StylePropertyValue, CSSVariableValueAs \ No newline at end of file diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt index 0e508d8877..5a02b95152 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt @@ -6,16 +6,11 @@ @file:Suppress("UNUSED", "NOTHING_TO_INLINE", "FunctionName") package org.jetbrains.compose.web.css -external interface StylePropertyValue +actual external interface StylePropertyValue -external interface StylePropertyNumber: StylePropertyValue -external interface StylePropertyString: StylePropertyValue +actual external interface StylePropertyNumber: StylePropertyValue +actual external interface StylePropertyString: StylePropertyValue -inline fun StylePropertyValue(value: String): StylePropertyString = value.unsafeCast() -inline fun StylePropertyValue(value: Number): StylePropertyNumber = value.unsafeCast() - -external interface CSSStyleValue: StylePropertyValue { - override fun toString(): String -} - -inline fun CSSStyleValue(value: String): CSSStyleValue = StylePropertyValue(value).unsafeCast() +actual external interface CSSStyleValue: StylePropertyValue { + actual override fun toString(): String +} \ No newline at end of file diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt index 387605d29a..216f324aa7 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt @@ -1,195 +1,3 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -@file:Suppress("NOTHING_TO_INLINE", "unused") - package org.jetbrains.compose.web.css -import org.jetbrains.compose.web.attributes.HtmlAttrMarker -import org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi -import kotlin.properties.ReadOnlyProperty - -@Deprecated( - message = "Renamed to StyleScope", - replaceWith = ReplaceWith("StyleScope", "org.jetbrains.compose.web.css.StyleScope") -) -typealias StyleBuilder = StyleScope - -/** - * StyleScope serves for two main purposes. Passed as a builder context (in [AttrsScope]), it - * makes it possible to: - * 1. Add inlined css properties to the element (@see [property]) - * 2. Set values to CSS variables (@see [variable]) - */ -@HtmlAttrMarker -interface StyleScope { - /** - * Adds arbitrary CSS property to the inline style of the element - * @param propertyName - the name of css property as [per spec](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference) - * @param value - the value, it can be either String or specialized type like [CSSNumeric] or [CSSColorValue] - * - * Most frequent CSS property values can be set via specialized methods, like [width], [display] etc. - * - * Example: - * ``` - * Div({ - * style { - * property("some-exotic-css-property", "I am a string value") - * property("some-exotic-css-property-width", 5.px) - * } - * }) - * ``` - */ - fun property(propertyName: String, value: StylePropertyValue) - fun variable(variableName: String, value: StylePropertyValue) - - fun property(propertyName: String, value: String) = property(propertyName, StylePropertyValue(value)) - fun property(propertyName: String, value: Number) = property(propertyName, StylePropertyValue(value)) - fun variable(variableName: String, value: String) = variable(variableName, StylePropertyValue(value)) - fun variable(variableName: String, value: Number) = variable(variableName, StylePropertyValue(value)) - - operator fun CSSStyleVariable.invoke(value: TValue) { - variable(name, value.toString()) - } - - operator fun CSSStyleVariable.invoke(value: String) { - variable(name, value) - } - - operator fun CSSStyleVariable.invoke(value: Number) { - variable(name, value) - } -} - -internal inline fun variableValue(variableName: String, fallback: StylePropertyValue? = null) = - "var(--$variableName${fallback?.let { ", $it" } ?: ""})" - -external interface CSSVariableValueAs - -inline fun CSSVariableValue(value: StylePropertyValue) = - value.unsafeCast() - -inline fun CSSVariableValue(value: String) = - CSSVariableValue(StylePropertyValue(value)) - -// after adding `variable` word `add` became ambiguous -@Deprecated( - "use property instead, will remove it soon", - ReplaceWith("property(propertyName, value)") -) -fun StyleScope.add( - propertyName: String, - value: StylePropertyValue -) = property(propertyName, value) - -interface CSSVariable { - val name: String -} - -class CSSStyleVariable(override val name: String) : CSSVariable - -fun CSSStyleVariable.value(fallback: TValue? = null) = - CSSVariableValue( - variableValue( - name, - fallback - ) - ) - -fun CSSStyleVariable.value(fallback: TValue? = null) - where TValue : CSSVariableValueAs, - TValue : StylePropertyValue = - CSSVariableValue( - variableValue( - name, - fallback - ) - ) - -/** - * Introduces CSS variable that can be later referred anywhere in [StyleSheet] - * - * Example: - * ``` - * object AppCSSVariables { - * val width by variable() - * val stringHeight by variable() - * val order by variable() - * } - * - * object AppStylesheet : StyleSheet() { - * val classWithProperties by style { - * AppCSSVariables.width(100.px) - * property("width", AppCSSVariables.width.value()) - * } - *``` - * - */ -fun variable() = - ReadOnlyProperty> { _, property -> - CSSStyleVariable(property.name) - } - -interface StyleHolder { - @ComposeWebInternalApi - val properties: StylePropertyList - @ComposeWebInternalApi - val variables: StylePropertyList -} - -@Deprecated( - message = "Renamed to StyleScopeBuilder", - replaceWith = ReplaceWith("StyleScopeBuilder", "org.jetbrains.compose.web.css.StyleScopeBuilder") -) -typealias StyleBuilderImpl = StyleScopeBuilder - -@Suppress("EqualsOrHashCode") -open class StyleScopeBuilder : StyleScope, StyleHolder { - override val properties: MutableStylePropertyList = mutableListOf() - override val variables: MutableStylePropertyList = mutableListOf() - - override fun property(propertyName: String, value: StylePropertyValue) { - properties.add(StylePropertyDeclaration(propertyName, value)) - } - - override fun variable(variableName: String, value: StylePropertyValue) { - variables.add(StylePropertyDeclaration(variableName, value)) - } - - // StylePropertyValue is js native object without equals - override fun equals(other: Any?): Boolean { - return if (other is StyleHolder) { - properties.nativeEquals(other.properties) && - variables.nativeEquals(other.variables) - } else false - } - - @ComposeWebInternalApi - internal fun copyFrom(sb: StyleHolder) { - properties.addAll(sb.properties) - variables.addAll(sb.variables) - } -} - -data class StylePropertyDeclaration( - val name: String, - val value: StylePropertyValue -) { - constructor(name: String, value: String) : this(name, value.unsafeCast()) - constructor(name: String, value: Number) : this(name, value.unsafeCast()) -} -typealias StylePropertyList = List -typealias MutableStylePropertyList = MutableList - -internal fun StylePropertyList.nativeEquals(properties: StylePropertyList): Boolean { - if (this.size != properties.size) return false - - var index = 0 - return all { prop -> - val otherProp = properties[index++] - prop.name == otherProp.name && - prop.value.toString() == otherProp.value.toString() - } -} +actual external interface CSSVariableValueAs \ No newline at end of file diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt index 93835c9daa..e642ee3cfb 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt @@ -7,8 +7,4 @@ package org.jetbrains.compose.web.css.keywords import org.jetbrains.compose.web.css.CSSKeywordValue -external interface CSSAutoKeyword : CSSKeywordValue - -inline val auto: CSSAutoKeyword - get() = CSSKeywordValue("auto").unsafeCast() - +actual external interface CSSAutoKeyword : CSSKeywordValue \ No newline at end of file diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt new file mode 100644 index 0000000000..6563408610 --- /dev/null +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt @@ -0,0 +1,54 @@ +package org.jetbrains.compose.web + +import org.w3c.dom.events.* +import org.w3c.dom.css.CSSRule +import androidx.compose.web.events.* +import org.jetbrains.compose.web.css.CSSStyleValue +import org.w3c.dom.HTMLElement +import org.w3c.dom.svg.SVGElement +import org.jetbrains.compose.web.css.StylePropertyValue +import org.jetbrains.compose.web.dom.RadioGroupScope +import org.jetbrains.compose.web.dom.ElementBuilder +import org.w3c.dom.Element + +@PublishedApi +internal actual fun SyntheticEvent<*>.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun CSSRule.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun CSSStyleValue.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun Event.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun EventTarget.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun String.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun Number.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun HTMLElement.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun SVGElement.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun StylePropertyValue.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +@ExperimentalComposeWebApi +internal actual fun RadioGroupScope<*>.unsafeCast(): T = asDynamic().unsafeCast() +@PublishedApi +internal actual fun ElementBuilder<*>.unsafeCast(): T = asDynamic().unsafeCast() + +@PublishedApi +internal actual fun Any.unsafeCastBoolean(): Boolean = asDynamic().unsafeCast() +@PublishedApi +internal actual fun Any.unsafeCastString(): String = asDynamic().unsafeCast() + +@PublishedApi +internal actual fun Any.getStringProperty(name: String): String? = asDynamic()[name] as String? +@PublishedApi +internal actual fun Any.getBooleanProperty(name: String): Boolean? = asDynamic()[name] as Boolean? +@PublishedApi +internal actual fun Any.getIntProperty(name: String): Int? = asDynamic()[name] as Int? +@PublishedApi +internal actual fun Any.getAnyProperty(name: String): T = asDynamic()[name].unsafeCast() + +internal actual fun Element.getAttributeNamesWorkaround(): Array = getAttributeNames() \ No newline at end of file diff --git a/web/core/src/jsTest/kotlin/css/GridTests.kt b/web/core/src/jsTest/kotlin/css/GridTests.kt index 4b90ff85cc..36463c30ec 100644 --- a/web/core/src/jsTest/kotlin/css/GridTests.kt +++ b/web/core/src/jsTest/kotlin/css/GridTests.kt @@ -8,6 +8,7 @@ package org.jetbrains.compose.web.core.tests.css import org.jetbrains.compose.web.testutils.* import org.jetbrains.compose.web.css.* import org.jetbrains.compose.web.dom.Div +import org.w3c.dom.css.* import kotlin.test.Test import kotlin.test.assertEquals diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebApi.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebApi.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebApi.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebApi.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebStyleApi.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebStyleApi.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebStyleApi.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/ExperimentalComposeWebStyleApi.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/Attrs.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/Attrs.kt similarity index 98% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/Attrs.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/Attrs.kt index 472b3e1373..666bf95a55 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/Attrs.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/Attrs.kt @@ -16,6 +16,7 @@ import org.w3c.dom.HTMLSelectElement import org.w3c.dom.HTMLTableCellElement import org.w3c.dom.HTMLTableColElement import org.w3c.dom.HTMLTextAreaElement +import org.jetbrains.compose.web.* fun AttrsScope.href(value: String) = attr("href", value) @@ -120,7 +121,7 @@ fun AttrsScope.alt(value: String) = attr("alt", value) // type: image only fun AttrsScope.autoComplete(value: AutoComplete) = - attr("autocomplete", value.unsafeCast()) + attr("autocomplete", value.unsafeCastString()) fun AttrsScope.autoFocus() = attr("autofocus", "") @@ -231,7 +232,7 @@ fun AttrsScope.label(value: String) = /* Select attributes */ fun AttrsScope.autoComplete(value: AutoComplete) = - attr("autocomplete", value.unsafeCast()) + attr("autocomplete", value.unsafeCastString()) fun AttrsScope.autofocus() = attr("autofocus", "") @@ -265,7 +266,7 @@ fun AttrsScope.disabled() = /* TextArea attributes */ fun AttrsScope.autoComplete(value: AutoComplete) = - attr("autocomplete", value.unsafeCast()) + attr("autocomplete", value.unsafeCastString()) fun AttrsScope.autoFocus() = attr("autofocus", "") diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/AttrsScope.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/AttrsScope.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/AttrsScope.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/AttrsScope.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/EventsListenerScope.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/EventsListenerScope.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/EventsListenerScope.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/EventsListenerScope.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/HtmlAttrMarker.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/HtmlAttrMarker.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/HtmlAttrMarker.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/HtmlAttrMarker.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/PredefinedAttrValues.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/PredefinedAttrValues.kt similarity index 98% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/PredefinedAttrValues.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/PredefinedAttrValues.kt index 00f03352ba..91f60c6ed2 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/PredefinedAttrValues.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/PredefinedAttrValues.kt @@ -1,6 +1,7 @@ package org.jetbrains.compose.web.attributes import org.w3c.dom.events.Event +import org.jetbrains.compose.web.* sealed class InputType(val typeStr: String) { @@ -35,20 +36,20 @@ sealed class InputType(val typeStr: String) { open class InputTypeCheckedValue(name: String) : InputType(name) { override fun inputValue(event: Event): Boolean { - return event.target?.asDynamic()?.checked?.unsafeCast() ?: false + return event.target?.getBooleanProperty("checked") ?: false } } open class InputTypeNumberValue(name: String) : InputType(name) { override fun inputValue(event: Event): kotlin.Number? { - return event.target?.asDynamic()?.valueAsNumber ?: null + return event.target?.getAnyProperty("valueAsNumber") } } abstract fun inputValue(event: Event): T protected fun valueAsString(event: Event): String { - return event.target?.asDynamic()?.value?.unsafeCast() ?: "" + return event.target?.getStringProperty("value") ?: "" } companion object { diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/SyntheticEventListener.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/SyntheticEventListener.kt similarity index 96% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/SyntheticEventListener.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/SyntheticEventListener.kt index bb7d38e6a0..2ab7cb8785 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/SyntheticEventListener.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/SyntheticEventListener.kt @@ -15,6 +15,8 @@ import org.w3c.dom.DragEvent import org.w3c.dom.TouchEvent import org.w3c.dom.clipboard.ClipboardEvent import org.w3c.dom.events.* +import org.jetbrains.compose.web.* +import org.jetbrains.compose.web.internal.runtime.EventListener @OptIn(ComposeWebInternalApi::class) open class SyntheticEventListener> internal constructor( @@ -135,7 +137,7 @@ internal class SelectEventListener( SELECT, listener ) { override fun handleEvent(event: Event) { - listener(SyntheticSelectEvent(event, event.target.unsafeCast())) + listener(SyntheticSelectEvent(event, event.target!!.unsafeCast())) } } diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/InputAttrsScope.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/InputAttrsScope.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/InputAttrsScope.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/InputAttrsScope.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/InternalControlledInputUtils.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/InternalControlledInputUtils.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/InternalControlledInputUtils.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/InternalControlledInputUtils.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/SelectAttrsScope.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/SelectAttrsScope.kt similarity index 91% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/SelectAttrsScope.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/SelectAttrsScope.kt index 6e51dccfbd..7ce366ee40 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/SelectAttrsScope.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/SelectAttrsScope.kt @@ -13,6 +13,7 @@ import org.jetbrains.compose.web.events.SyntheticChangeEvent import org.jetbrains.compose.web.events.SyntheticInputEvent import org.w3c.dom.HTMLSelectElement import org.w3c.dom.events.Event +import org.jetbrains.compose.web.* @Deprecated( message = "Renamed to SelectAttrsScope", @@ -42,7 +43,7 @@ private class SelectInputEventListener( eventName, listener ) { override fun handleEvent(event: Event) { - val value = event.target?.asDynamic().value?.toString() + val value = event.target?.getAnyProperty("value").toString() listener(SyntheticInputEvent(value, event)) } } @@ -53,7 +54,7 @@ private class SelectChangeEventListener( CHANGE, listener ) { override fun handleEvent(event: Event) { - val value = event.target?.asDynamic().value?.toString() + val value = event.target?.getAnyProperty("value").toString() listener(SyntheticChangeEvent(value, event)) } } diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/TextAreaAttrsScope.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/TextAreaAttrsScope.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/attributes/builders/TextAreaAttrsScope.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/attributes/builders/TextAreaAttrsScope.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/BrowserAPI.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/BrowserAPI.kt similarity index 83% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/BrowserAPI.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/BrowserAPI.kt index 3c55709bf3..de6aa1b58f 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/BrowserAPI.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/BrowserAPI.kt @@ -13,15 +13,12 @@ import org.w3c.dom.css.CSSRuleList internal external class CSSKeyframesRule: CSSRule { val name: String val cssRules: CSSRuleList -} - -internal inline fun CSSKeyframesRule.appendRule(cssRule: String) { - this.asDynamic().appendRule(cssRule) + internal fun appendRule(cssRule: String) } @Suppress("NOTHING_TO_INLINE") internal inline fun jsObject(): T = - js("({})") + js("({})") as T internal inline fun jsObject(builder: T.() -> Unit): T = jsObject().apply(builder) diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSBuilder.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSBuilder.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSBuilder.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSBuilder.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSEnums.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSEnums.kt similarity index 98% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSEnums.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSEnums.kt index 4cbdd24652..c63a2efe6c 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSEnums.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSEnums.kt @@ -2,9 +2,11 @@ package org.jetbrains.compose.web.css +import org.jetbrains.compose.web.* + interface StylePropertyEnum: StylePropertyString -inline val StylePropertyEnum.name get() = this.unsafeCast() -inline val StylePropertyEnum.value get() = this.unsafeCast() +inline val StylePropertyEnum.name get() = this.unsafeCastString() +inline val StylePropertyEnum.value get() = this.unsafeCastString() interface LineStyle: StylePropertyEnum { companion object { diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSKeyframeRule.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeyframeRule.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSKeyframeRule.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeyframeRule.kt diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt new file mode 100644 index 0000000000..0f5169fede --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +@file:Suppress("NOTHING_TO_INLINE") + +package org.jetbrains.compose.web.css + +import org.jetbrains.compose.web.* + +expect interface CSSKeywordValue : CSSStyleValue + +inline fun CSSKeywordValue(value: String): CSSKeywordValue = CSSStyleValue(value).unsafeCast() diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSMediaRule.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSMediaRule.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSMediaRule.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSMediaRule.kt diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt new file mode 100644 index 0000000000..1ed7717e6e --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt @@ -0,0 +1,71 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +package org.jetbrains.compose.web.css + +operator fun CSSSizeValue.times(num: Number): CSSSizeValue = CSSUnitValueTyped(value * num.toFloat(), unit) +operator fun Number.times(unit: CSSSizeValue): CSSSizeValue = CSSUnitValueTyped(unit.value * toFloat(), unit.unit) + +operator fun CSSSizeValue.div(num: Number): CSSSizeValue = CSSUnitValueTyped(value / num.toFloat(), unit) + +operator fun CSSSizeValue.plus(b: CSSSizeValue): CSSSizeValue = CSSUnitValueTyped(value + b.value, unit) +operator fun CSSSizeValue.minus(b: CSSSizeValue): CSSSizeValue = CSSUnitValueTyped(value - b.value, unit) +operator fun CSSSizeValue.unaryMinus(): CSSSizeValue = CSSUnitValueTyped(-value, unit) +operator fun CSSSizeValue.unaryPlus(): CSSSizeValue = CSSUnitValueTyped(value, unit) + +expect interface CSSCalcOperation: CSSNumericValue + +data class CSSCalcValue( + var op: CSSCalcOperation +) : CSSCalcOperation { + override fun toString(): String = "calc$op" +} + +private data class CSSPlus( + var l: CSSNumericValue, + var r: CSSNumericValue +) : CSSCalcOperation { + override fun toString(): String = "($l + $r)" +} + +private data class CSSMinus( + var l: CSSNumericValue, + var r: CSSNumericValue +) : CSSCalcOperation { + override fun toString(): String = "($l - $r)" +} + +private data class CSSTimes( + var l: CSSNumericValue, + var r: Number, + val left: Boolean = true +) : CSSCalcOperation { + override fun toString(): String = if (left) "($l * $r)" else "($r * $l)" +} + +private data class CSSDiv( + var l: CSSNumericValue, + var r: Number +) : CSSCalcOperation { + override fun toString(): String = "($l / $r)" +} + +operator fun CSSNumericValue.plus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSPlus(this, b)) +operator fun CSSCalcValue.plus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSPlus(this.op, b)) +operator fun CSSNumericValue.plus(b: CSSCalcValue): CSSCalcValue = CSSCalcValue(CSSPlus(this, b.op)) + +operator fun CSSNumericValue.minus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSMinus(this, b)) +operator fun CSSCalcValue.minus(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSMinus(this.op, b)) +operator fun CSSNumericValue.minus(b: CSSCalcValue): CSSCalcValue = CSSCalcValue(CSSMinus(this, b.op)) + +operator fun CSSCalcValue.times(b: Number): CSSCalcValue = CSSCalcValue(CSSTimes(this.op, b)) +operator fun Number.times(b: CSSCalcValue): CSSCalcValue = CSSCalcValue(CSSTimes(b.op, this, false)) + +operator fun CSSNumericValue.div(b: Number): CSSCalcValue = CSSCalcValue(CSSDiv(this, b)) +operator fun CSSCalcValue.div(b: Number): CSSCalcValue = CSSCalcValue(CSSDiv(this.op, b)) + +operator fun CSSNumericValue.times(b: Number): CSSCalcValue = CSSCalcValue(CSSTimes(this, b)) +operator fun Number.times(b: CSSNumericValue): CSSCalcValue = CSSCalcValue(CSSTimes(b, this, false)) + diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSRules.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSRules.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/CSSRules.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSRules.kt diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt new file mode 100644 index 0000000000..4795ef8bb0 --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt @@ -0,0 +1,249 @@ +@file:Suppress("Unused", "NOTHING_TO_INLINE", "NESTED_CLASS_IN_EXTERNAL_INTERFACE", "INLINE_EXTERNAL_DECLARATION", "WRONG_BODY_OF_EXTERNAL_DECLARATION", "NESTED_EXTERNAL_DECLARATION", "ClassName") + +package org.jetbrains.compose.web.css + +expect interface CSSNumericValue : StylePropertyValue, CSSVariableValueAs> + +expect interface CSSSizeValue : CSSNumericValue { + val value: Float + val unit: T +} + +data class CSSUnitValueTyped( + override val value: Float, + override val unit: T +) : CSSSizeValue { + override fun toString(): String = "$value$unit" +} + +interface CSSUnitLengthOrPercentage: CSSUnit +interface CSSUnitPercentage: CSSUnitLengthOrPercentage +interface CSSUnitLength: CSSUnitLengthOrPercentage +interface CSSUnitRel : CSSUnitLength +interface CSSUnitAbs: CSSUnitLength +interface CSSUnitAngle: CSSUnit +interface CSSUnitTime: CSSUnit +interface CSSUnitFrequency: CSSUnit +interface CSSUnitResolution: CSSUnit +interface CSSUnitFlex: CSSUnit + +typealias CSSAngleValue = CSSSizeValue +typealias CSSLengthOrPercentageValue = CSSSizeValue +typealias CSSLengthValue = CSSSizeValue +typealias CSSPercentageValue = CSSSizeValue +typealias CSSUnitValue = CSSSizeValue +typealias CSSNumeric = CSSNumericValue +typealias CSSpxValue = CSSSizeValue + +// fake interfaces to distinguish units +interface CSSUnit { + interface percent: CSSUnitPercentage + + interface em: CSSUnitRel + + interface ex: CSSUnitRel + + interface ch: CSSUnitRel + + interface ic: CSSUnitRel + + interface rem: CSSUnitRel + + interface lh: CSSUnitRel + + interface rlh: CSSUnitRel + + interface vw: CSSUnitRel + + interface vh: CSSUnitRel + + interface vi: CSSUnitRel + + interface vb: CSSUnitRel + + interface vmin: CSSUnitRel + + interface vmax: CSSUnitRel + + interface cm: CSSUnitRel + + interface mm: CSSUnitRel + + interface Q: CSSUnitRel + + interface pt: CSSUnitAbs + + interface pc: CSSUnitAbs + + interface px: CSSUnitAbs + + interface deg: CSSUnitAngle + + interface grad: CSSUnitAngle + + interface rad: CSSUnitAngle + + interface turn: CSSUnitAngle + + interface s: CSSUnitTime + + interface ms: CSSUnitTime + + interface Hz: CSSUnitFrequency + + interface kHz: CSSUnitFrequency + + interface dpi: CSSUnitResolution + + interface dpcm: CSSUnitResolution + + interface dppx: CSSUnitResolution + + interface fr: CSSUnitFlex + + interface number: CSSUnit + + companion object { + inline val percent get() = "%".unsafeCast() + + inline val em get() = "em".unsafeCast() + + inline val ex get() = "ex".unsafeCast() + + inline val ch get() = "ch".unsafeCast() + + inline val ic get() = "ic".unsafeCast() + + inline val rem get() = "rem".unsafeCast() + + inline val lh get() = "lh".unsafeCast() + + inline val rlh get() = "rlh".unsafeCast() + + inline val vw get() = "vw".unsafeCast() + + inline val vh get() = "vh".unsafeCast() + + inline val vi get() = "vi".unsafeCast() + + inline val vb get() = "vb".unsafeCast() + + inline val vmin get() = "vmin".unsafeCast() + + inline val vmax get() = "vmax".unsafeCast() + + inline val cm get() = "cm".unsafeCast() + + inline val mm get() = "mm".unsafeCast() + + inline val Q get() = "Q".unsafeCast() + + inline val pt get() = "pt".unsafeCast() + + inline val pc get() = "pc".unsafeCast() + + inline val px get() = "px".unsafeCast() + + inline val deg get() = "deg".unsafeCast() + + inline val grad get() = "grad".unsafeCast() + + inline val rad get() = "rad".unsafeCast() + + inline val turn get() = "turn".unsafeCast() + + inline val s get() = "s".unsafeCast() + + inline val ms get() = "ms".unsafeCast() + + inline val Hz get() = "Hz".unsafeCast() + + inline val kHz get() = "kHz".unsafeCast() + + inline val dpi get() = "dpi".unsafeCast() + + inline val dpcm get() = "dpcm".unsafeCast() + + inline val dppx get() = "dppx".unsafeCast() + + inline val fr get() = "fr".unsafeCast() + + inline val number get() = "number".unsafeCast() + } +} + + +val Number.number + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.number) + +val Number.percent + get() : CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.percent) + +val Number.em + get() : CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.em) + +val Number.ex + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.ex) + +val Number.ch + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.ch) + +val Number.cssRem + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.rem) + +val Number.vw + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vw) + +val Number.vh + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vh) + +val Number.vmin + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vmin) + +val Number.vmax + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.vmax) + +val Number.cm + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.cm) + +val Number.mm + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.mm) + +val Number.Q + get() : CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.Q) + +val Number.pt + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.pt) +val Number.pc + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.pc) +val Number.px + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.px) + +val Number.deg + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.deg) +val Number.grad + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.grad) +val Number.rad + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.rad) +val Number.turn + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.turn) + +val Number.s + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.s) +val Number.ms + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.ms) + +val Number.Hz + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.Hz) +val Number.kHz + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.kHz) + +val Number.dpi + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.dpi) +val Number.dpcm + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.dpcm) +val Number.dppx + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.dppx) + +val Number.fr + get(): CSSSizeValue = CSSUnitValueTyped(this.toFloat(), CSSUnit.fr) diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/Color.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/Color.kt new file mode 100644 index 0000000000..faaba82790 --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/Color.kt @@ -0,0 +1,198 @@ +@file:Suppress("unused", "MemberVisibilityCanBePrivate") + +package org.jetbrains.compose.web.css + +expect interface CSSColorValue : StylePropertyValue, CSSVariableValueAs + +object Color { + + @Deprecated("use org.jetbrains.compose.web.css.rgb", ReplaceWith("rgb(r, g, b)")) + data class RGB(val r: Number, val g: Number, val b: Number) : CSSColorValue { + override fun toString(): String = "rgb($r, $g, $b)" + } + + @Deprecated("use org.jetbrains.compose.web.css.rgba", ReplaceWith("rgba(r, g, b, a)")) + data class RGBA(val r: Number, val g: Number, val b: Number, val a: Number) : CSSColorValue { + override fun toString(): String = "rgba($r, $g, $b, $a)" + } + + @Deprecated("use org.jetbrains.compose.web.css.hsl", ReplaceWith("hsl(h, s, l)")) + data class HSL(val h: CSSAngleValue, val s: Number, val l: Number) : CSSColorValue { + constructor(h: Number, s: Number, l: Number) : this(h.deg, s, l) + + override fun toString(): String = "hsl($h, $s%, $l%)" + } + + @Deprecated("use org.jetbrains.compose.web.css.hsla", ReplaceWith("hsla(h, s, l, a)")) + data class HSLA(val h: CSSAngleValue, val s: Number, val l: Number, val a: Number) : CSSColorValue { + constructor(h: Number, s: Number, l: Number, a: Number) : this(h.deg, s, l, a) + + override fun toString(): String = "hsla($h, $s%, $l%, $a)" + } + + inline val aliceblue get() = Color("aliceblue") + inline val antiquewhite get() = Color("antiquewhite") + inline val aquamarine get() = Color("aquamarine") + inline val azure get() = Color("azure") + inline val beige get() = Color("beige") + inline val bisque get() = Color("bisque") + inline val black get() = Color("black") + inline val blanchedalmond get() = Color("blanchedalmond") + inline val blue get() = Color("blue") + inline val blueviolet get() = Color("blueviolet") + inline val brown get() = Color("brown") + inline val burlywood get() = Color("burlywood") + inline val cadetblue get() = Color("cadetblue") + inline val chartreuse get() = Color("chartreuse") + inline val chocolate get() = Color("chocolate") + inline val cornflowerblue get() = Color("cornflowerblue") + inline val cornsilk get() = Color("cornsilk") + inline val crimson get() = Color("crimson") + inline val cyan get() = Color("cyan") + inline val darkblue get() = Color("darkblue") + inline val darkcyan get() = Color("darkcyan") + inline val darkgoldenrod get() = Color("darkgoldenrod") + inline val darkgray get() = Color("darkgray") + inline val darkgreen get() = Color("darkgreen") + inline val darkkhaki get() = Color("darkkhaki") + inline val darkmagenta get() = Color("darkmagenta") + inline val darkolivegreen get() = Color("darkolivegreen") + inline val darkorange get() = Color("darkorange") + inline val darkorchid get() = Color("darkorchid") + inline val darkred get() = Color("darkred") + inline val darksalmon get() = Color("darksalmon") + inline val darkslateblue get() = Color("darkslateblue") + inline val darkslategray get() = Color("darkslategray") + inline val darkturquoise get() = Color("darkturquoise") + inline val darkviolet get() = Color("darkviolet") + inline val deeppink get() = Color("deeppink") + inline val deepskyblue get() = Color("deepskyblue") + inline val dimgray get() = Color("dimgray") + inline val dodgerblue get() = Color("dodgerblue") + inline val firebrick get() = Color("firebrick") + inline val floralwhite get() = Color("floralwhite") + inline val forestgreen get() = Color("forestgreen") + inline val fuchsia get() = Color("fuchsia") + inline val gainsboro get() = Color("gainsboro") + inline val ghostwhite get() = Color("ghostwhite") + inline val goldenrod get() = Color("goldenrod") + inline val gold get() = Color("gold") + inline val gray get() = Color("gray") + inline val green get() = Color("green") + inline val greenyellow get() = Color("greenyellow") + inline val honeydew get() = Color("honeydew") + inline val hotpink get() = Color("hotpink") + inline val indianred get() = Color("indianred") + inline val indigo get() = Color("indigo") + inline val ivory get() = Color("ivory") + inline val khaki get() = Color("khaki") + inline val lavenderblush get() = Color("lavenderblush") + inline val lavender get() = Color("lavender") + inline val lawngreen get() = Color("lawngreen") + inline val lemonchiffon get() = Color("lemonchiffon") + inline val lightblue get() = Color("lightblue") + inline val lightcoral get() = Color("lightcoral") + inline val lightcyan get() = Color("lightcyan") + inline val lightgoldenrodyellow get() = Color("lightgoldenrodyellow") + inline val lightgray get() = Color("lightgray") + inline val lightgreen get() = Color("lightgreen") + inline val lightpink get() = Color("lightpink") + inline val lightsalmon get() = Color("lightsalmon") + inline val lightseagreen get() = Color("lightseagreen") + inline val lightskyblue get() = Color("lightskyblue") + inline val lightslategray get() = Color("lightslategray") + inline val lightsteelblue get() = Color("lightsteelblue") + inline val lightyellow get() = Color("lightyellow") + inline val limegreen get() = Color("limegreen") + inline val lime get() = Color("lime") + inline val linen get() = Color("linen") + inline val magenta get() = Color("magenta") + inline val maroon get() = Color("maroon") + inline val mediumaquamarine get() = Color("mediumaquamarine") + inline val mediumblue get() = Color("mediumblue") + inline val mediumorchid get() = Color("mediumorchid") + inline val mediumpurple get() = Color("mediumpurple") + inline val mediumseagreen get() = Color("mediumseagreen") + inline val mediumslateblue get() = Color("mediumslateblue") + inline val mediumspringgreen get() = Color("mediumspringgreen") + inline val mediumturquoise get() = Color("mediumturquoise") + inline val mediumvioletred get() = Color("mediumvioletred") + inline val midnightblue get() = Color("midnightblue") + inline val mintcream get() = Color("mintcream") + inline val mistyrose get() = Color("mistyrose") + inline val moccasin get() = Color("moccasin") + inline val navajowhite get() = Color("navajowhite") + inline val navi get() = Color("navi") + inline val oldlace get() = Color("oldlace") + inline val olivedrab get() = Color("olivedrab") + inline val olive get() = Color("olive") + inline val orange get() = Color("orange") + inline val orangered get() = Color("orangered") + inline val orchid get() = Color("orchid") + inline val palegoldenrod get() = Color("palegoldenrod") + inline val palegreen get() = Color("palegreen") + inline val paleturquoise get() = Color("paleturquoise") + inline val palevioletred get() = Color("palevioletred") + inline val papayawhip get() = Color("papayawhip") + inline val peachpuff get() = Color("peachpuff") + inline val peru get() = Color("peru") + inline val pink get() = Color("pink") + inline val plum get() = Color("plum") + inline val powderblue get() = Color("powderblue") + inline val purple get() = Color("purple") + inline val rebeccapurple get() = Color("rebeccapurple") + inline val red get() = Color("red") + inline val rosybrown get() = Color("rosybrown") + inline val royalblue get() = Color("royalblue") + inline val saddlebrown get() = Color("saddlebrown") + inline val salmon get() = Color("salmon") + inline val sandybrown get() = Color("sandybrown") + inline val seagreen get() = Color("seagreen") + inline val seashell get() = Color("seashell") + inline val sienna get() = Color("sienna") + inline val silver get() = Color("silver") + inline val skyblue get() = Color("skyblue") + inline val slateblue get() = Color("slateblue") + inline val slategray get() = Color("slategray") + inline val snow get() = Color("snow") + inline val springgreen get() = Color("springgreen") + inline val steelblue get() = Color("steelblue") + inline val teal get() = Color("teal") + inline val thistle get() = Color("thistle") + inline val tomato get() = Color("tomato") + inline val turquoise get() = Color("turquoise") + inline val violet get() = Color("violet") + inline val wheat get() = Color("wheat") + inline val white get() = Color("white") + inline val whitesmoke get() = Color("whitesmoke") + inline val yellowgreen get() = Color("yellowgreen") + inline val yellow get() = Color("yellow") + + inline val transparent get() = Color("transparent") + inline val currentColor get() = Color("currentColor") +} + +fun Color(name: String): CSSColorValue = name.unsafeCast() + +private class RGB(val r: Number, val g: Number, val b: Number): CSSColorValue { + override fun toString(): String = "rgb($r, $g, $b)" +} + +private class RGBA(val r: Number, val g: Number, val b: Number, val a: Number) : CSSColorValue { + override fun toString(): String = "rgba($r, $g, $b, $a)" +} + +private class HSL(val h: CSSAngleValue, val s: Number, val l: Number) : CSSColorValue { + override fun toString(): String = "hsl($h, $s%, $l%)" +} + +private class HSLA(val h: CSSAngleValue, val s: Number, val l: Number, val a: Number) : CSSColorValue { + override fun toString(): String = "hsla($h, $s%, $l%, $a)" +} + +fun rgb(r: Number, g: Number, b: Number): CSSColorValue = RGB(r, g, b) +fun rgba(r: Number, g: Number, b: Number, a: Number): CSSColorValue = RGBA(r, g, b, a) +fun hsl(h: CSSAngleValue, s: Number, l: Number): CSSColorValue = HSL(h, s, l) +fun hsl(h: Number, s: Number, l: Number): CSSColorValue = HSL(h.deg, s, l) +fun hsla(h: CSSAngleValue, s: Number, l: Number, a: Number): CSSColorValue = HSLA(h, s, l, a) +fun hsla(h: Number, s: Number, l: Number, a: Number): CSSColorValue = HSLA(h.deg, s, l, a) diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt new file mode 100644 index 0000000000..33db201736 --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +@file:Suppress("UNUSED", "NOTHING_TO_INLINE", "FunctionName") +package org.jetbrains.compose.web.css + +import org.jetbrains.compose.web.* + +expect interface StylePropertyValue + +expect interface StylePropertyNumber: StylePropertyValue +expect interface StylePropertyString: StylePropertyValue + +inline fun StylePropertyValue(value: String): StylePropertyString = value.unsafeCast() +inline fun StylePropertyValue(value: Number): StylePropertyNumber = value.unsafeCast() + +expect interface CSSStyleValue: StylePropertyValue { + actual override fun toString(): String +} + +inline fun CSSStyleValue(value: String): CSSStyleValue = StylePropertyValue(value).unsafeCast() diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt new file mode 100644 index 0000000000..b0f63cd92e --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt @@ -0,0 +1,196 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +@file:Suppress("NOTHING_TO_INLINE", "unused") + +package org.jetbrains.compose.web.css + +import org.jetbrains.compose.web.attributes.HtmlAttrMarker +import org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi +import kotlin.properties.ReadOnlyProperty +import org.jetbrains.compose.web.* + +@Deprecated( + message = "Renamed to StyleScope", + replaceWith = ReplaceWith("StyleScope", "org.jetbrains.compose.web.css.StyleScope") +) +typealias StyleBuilder = StyleScope + +/** + * StyleScope serves for two main purposes. Passed as a builder context (in [AttrsScope]), it + * makes it possible to: + * 1. Add inlined css properties to the element (@see [property]) + * 2. Set values to CSS variables (@see [variable]) + */ +@HtmlAttrMarker +interface StyleScope { + /** + * Adds arbitrary CSS property to the inline style of the element + * @param propertyName - the name of css property as [per spec](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference) + * @param value - the value, it can be either String or specialized type like [CSSNumeric] or [CSSColorValue] + * + * Most frequent CSS property values can be set via specialized methods, like [width], [display] etc. + * + * Example: + * ``` + * Div({ + * style { + * property("some-exotic-css-property", "I am a string value") + * property("some-exotic-css-property-width", 5.px) + * } + * }) + * ``` + */ + fun property(propertyName: String, value: StylePropertyValue) + fun variable(variableName: String, value: StylePropertyValue) + + fun property(propertyName: String, value: String) = property(propertyName, StylePropertyValue(value)) + fun property(propertyName: String, value: Number) = property(propertyName, StylePropertyValue(value)) + fun variable(variableName: String, value: String) = variable(variableName, StylePropertyValue(value)) + fun variable(variableName: String, value: Number) = variable(variableName, StylePropertyValue(value)) + + operator fun CSSStyleVariable.invoke(value: TValue) { + variable(name, value.toString()) + } + + operator fun CSSStyleVariable.invoke(value: String) { + variable(name, value) + } + + operator fun CSSStyleVariable.invoke(value: Number) { + variable(name, value) + } +} + +internal inline fun variableValue(variableName: String, fallback: StylePropertyValue? = null) = + "var(--$variableName${fallback?.let { ", $it" } ?: ""})" + +expect interface CSSVariableValueAs + +inline fun CSSVariableValue(value: StylePropertyValue) = + value.unsafeCast() + +inline fun CSSVariableValue(value: String) = + CSSVariableValue(StylePropertyValue(value)) + +// after adding `variable` word `add` became ambiguous +@Deprecated( + "use property instead, will remove it soon", + ReplaceWith("property(propertyName, value)") +) +fun StyleScope.add( + propertyName: String, + value: StylePropertyValue +) = property(propertyName, value) + +interface CSSVariable { + val name: String +} + +class CSSStyleVariable(override val name: String) : CSSVariable + +fun CSSStyleVariable.value(fallback: TValue? = null) = + CSSVariableValue( + variableValue( + name, + fallback + ) + ) + +fun CSSStyleVariable.value(fallback: TValue? = null) + where TValue : CSSVariableValueAs, + TValue : StylePropertyValue = + CSSVariableValue( + variableValue( + name, + fallback + ) + ) + +/** + * Introduces CSS variable that can be later referred anywhere in [StyleSheet] + * + * Example: + * ``` + * object AppCSSVariables { + * val width by variable() + * val stringHeight by variable() + * val order by variable() + * } + * + * object AppStylesheet : StyleSheet() { + * val classWithProperties by style { + * AppCSSVariables.width(100.px) + * property("width", AppCSSVariables.width.value()) + * } + *``` + * + */ +fun variable() = + ReadOnlyProperty> { _, property -> + CSSStyleVariable(property.name) + } + +interface StyleHolder { + @ComposeWebInternalApi + val properties: StylePropertyList + @ComposeWebInternalApi + val variables: StylePropertyList +} + +@Deprecated( + message = "Renamed to StyleScopeBuilder", + replaceWith = ReplaceWith("StyleScopeBuilder", "org.jetbrains.compose.web.css.StyleScopeBuilder") +) +typealias StyleBuilderImpl = StyleScopeBuilder + +@Suppress("EqualsOrHashCode") +open class StyleScopeBuilder : StyleScope, StyleHolder { + override val properties: MutableStylePropertyList = mutableListOf() + override val variables: MutableStylePropertyList = mutableListOf() + + override fun property(propertyName: String, value: StylePropertyValue) { + properties.add(StylePropertyDeclaration(propertyName, value)) + } + + override fun variable(variableName: String, value: StylePropertyValue) { + variables.add(StylePropertyDeclaration(variableName, value)) + } + + // StylePropertyValue is js native object without equals + override fun equals(other: Any?): Boolean { + return if (other is StyleHolder) { + properties.nativeEquals(other.properties) && + variables.nativeEquals(other.variables) + } else false + } + + @ComposeWebInternalApi + internal fun copyFrom(sb: StyleHolder) { + properties.addAll(sb.properties) + variables.addAll(sb.variables) + } +} + +data class StylePropertyDeclaration( + val name: String, + val value: StylePropertyValue +) { + constructor(name: String, value: String) : this(name, value.unsafeCast()) + constructor(name: String, value: Number) : this(name, value.unsafeCast()) +} +typealias StylePropertyList = List +typealias MutableStylePropertyList = MutableList + +internal fun StylePropertyList.nativeEquals(properties: StylePropertyList): Boolean { + if (this.size != properties.size) return false + + var index = 0 + return all { prop -> + val otherProp = properties[index++] + prop.name == otherProp.name && + prop.value.toString() == otherProp.value.toString() + } +} diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleSheet.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StyleSheet.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleSheet.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StyleSheet.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleSheetBuilder.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StyleSheetBuilder.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleSheetBuilder.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/StyleSheetBuilder.kt diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt new file mode 100644 index 0000000000..fa9bcf4dba --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +package org.jetbrains.compose.web.css.keywords + +import org.jetbrains.compose.web.css.CSSKeywordValue +import org.jetbrains.compose.web.* + +expect interface CSSAutoKeyword : CSSKeywordValue + +inline val auto: CSSAutoKeyword + get() = CSSKeywordValue("auto").unsafeCast() + diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/animation.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/animation.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/animation.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/animation.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/background.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/background.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/background.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/background.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/border.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/border.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/border.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/border.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/box.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/box.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/box.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/box.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/color.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/color.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/color.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/color.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/filter.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/filter.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/filter.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/filter.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/flex.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/flex.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/flex.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/flex.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/grid.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/grid.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/grid.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/grid.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/listStyle.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/listStyle.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/listStyle.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/listStyle.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/margin.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/margin.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/margin.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/margin.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/overflow.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/overflow.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/overflow.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/overflow.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/padding.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/padding.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/padding.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/padding.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/position.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/position.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/position.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/position.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/properties.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/properties.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/properties.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/properties.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/text.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/text.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/text.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/text.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/transform.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/transform.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/transform.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/transform.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/transitions.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/transitions.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/transitions.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/transitions.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/ui.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/ui.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/properties/ui.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/properties/ui.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/selectors/CSSSelectors.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/selectors/CSSSelectors.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/selectors/CSSSelectors.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/selectors/CSSSelectors.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/utils/stylsheet.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/utils/stylsheet.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/utils/stylsheet.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/css/utils/stylsheet.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Base.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Base.kt similarity index 94% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Base.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Base.kt index 78862f84df..738cbb0cd4 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Base.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Base.kt @@ -2,7 +2,6 @@ package org.jetbrains.compose.web.dom import androidx.compose.runtime.* import org.jetbrains.compose.web.attributes.AttrsScope -import org.jetbrains.compose.web.ExperimentalComposeWebApi import org.jetbrains.compose.web.attributes.AttrsScopeBuilder import org.jetbrains.compose.web.css.StyleHolder import org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi @@ -12,6 +11,8 @@ import org.w3c.dom.Element import org.w3c.dom.HTMLElement import org.w3c.dom.css.ElementCSSInlineStyle import org.w3c.dom.svg.SVGElement +import org.jetbrains.compose.web.* +import org.jetbrains.compose.web.internal.runtime.getW3cListener @Composable @ExplicitGroupsComposable @@ -44,13 +45,13 @@ private class DomElementWrapper(override val node: Element): DomNodeWrapper(node fun updateEventListeners(list: List) { currentListeners.forEach { - node.removeEventListener(it.name, it) + node.removeEventListener(it.name, it.getW3cListener()) } currentListeners = list currentListeners.forEach { - node.addEventListener(it.name, it) + node.addEventListener(it.name, it.getW3cListener()) } } @@ -79,7 +80,7 @@ private class DomElementWrapper(override val node: Element): DomNodeWrapper(node } fun updateAttrs(attrs: Map) { - node.getAttributeNames().forEach { name -> + node.getAttributeNamesWorkaround().forEach { name -> when (name) { "style", "class" -> { // skip style and class here, they're managed in corresponding methods @@ -101,7 +102,6 @@ private class DomElementWrapper(override val node: Element): DomNodeWrapper(node } } - @OptIn(ComposeWebInternalApi::class) @Composable fun TagElement( diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/ElementScope.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/ElementScope.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/ElementScope.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/ElementScope.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Elements.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Elements.kt similarity index 99% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Elements.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Elements.kt index 9140534a13..cbbec68d56 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Elements.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Elements.kt @@ -61,6 +61,7 @@ import org.w3c.dom.HTMLUListElement import org.w3c.dom.HTMLVideoElement import org.w3c.dom.Text import org.w3c.dom.css.CSSStyleSheet +import org.jetbrains.compose.web.* typealias AttrBuilderContext = AttrsScope.() -> Unit typealias ContentBuilder = @Composable ElementScope.() -> Unit diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/InputElements.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/InputElements.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/InputElements.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/InputElements.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/RadioGroup.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/RadioGroup.kt similarity index 99% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/RadioGroup.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/RadioGroup.kt index c7c8cd4541..e511ad5fd9 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/RadioGroup.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/RadioGroup.kt @@ -5,6 +5,7 @@ import org.jetbrains.compose.web.ExperimentalComposeWebApi import org.jetbrains.compose.web.attributes.InputType import org.jetbrains.compose.web.attributes.builders.InputAttrsScope import org.jetbrains.compose.web.attributes.name +import org.jetbrains.compose.web.* typealias RadioInputAttrsBuilder = (InputAttrsScope.() -> Unit) diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Style.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Style.kt similarity index 99% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Style.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Style.kt index 272e88ffe0..129b6a08e4 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Style.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/elements/Style.kt @@ -6,7 +6,7 @@ import org.w3c.dom.css.CSSStyleDeclaration import org.w3c.dom.css.CSSStyleRule import org.jetbrains.compose.web.css.* import org.w3c.dom.css.CSSStyleSheet - +import org.jetbrains.compose.web.* internal fun CSSStyleSheet.setCSSRules(cssRules: CSSRuleDeclarationList) { cssRules.forEach { cssRule -> diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticAnimationEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticAnimationEvent.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticAnimationEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticAnimationEvent.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticChangeEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticChangeEvent.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticChangeEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticChangeEvent.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticClipboardEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticClipboardEvent.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticClipboardEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticClipboardEvent.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticEvent.kt similarity index 90% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticEvent.kt index 4142bdf418..89935fc031 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticEvent.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticEvent.kt @@ -2,11 +2,12 @@ package androidx.compose.web.events import org.w3c.dom.events.Event import org.w3c.dom.events.EventTarget +import org.jetbrains.compose.web.* open class SyntheticEvent internal constructor( val nativeEvent: Event ) { - val target: Element = nativeEvent.target.unsafeCast() + val target: Element = nativeEvent.target!!.unsafeCast() val bubbles: Boolean = nativeEvent.bubbles val cancelable: Boolean = nativeEvent.cancelable val composed: Boolean = nativeEvent.composed diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticFocusEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticFocusEvent.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticFocusEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticFocusEvent.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticInputEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticInputEvent.kt similarity index 59% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticInputEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticInputEvent.kt index 4c1e90ccb9..3228481dd3 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticInputEvent.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticInputEvent.kt @@ -4,6 +4,7 @@ import androidx.compose.web.events.SyntheticEvent import org.w3c.dom.DataTransfer import org.w3c.dom.events.Event import org.w3c.dom.events.EventTarget +import org.jetbrains.compose.web.* // @param nativeEvent: Event - we don't use [org.w3c.dom.events.InputEvent] here, // since for cases it can be just [org.w3c.dom.events.Event] @@ -13,8 +14,8 @@ class SyntheticInputEvent internal constructor ) : SyntheticEvent( nativeEvent = nativeEvent ) { - val data: String? = nativeEvent.asDynamic().data?.unsafeCast() - val dataTransfer: DataTransfer? = nativeEvent.asDynamic().dataTransfer?.unsafeCast() - val inputType: String? = nativeEvent.asDynamic().inputType?.unsafeCast() - val isComposing: Boolean = nativeEvent.asDynamic().isComposing?.unsafeCast() ?: false + val data: String? = nativeEvent.getStringProperty("data") + val dataTransfer: DataTransfer? = nativeEvent.getAnyProperty("dataTransfer") + val inputType: String? = nativeEvent.getStringProperty("inputType") + val isComposing: Boolean = nativeEvent.getBooleanProperty("isComposing")!! } diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticKeyboardEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticKeyboardEvent.kt similarity index 92% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticKeyboardEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticKeyboardEvent.kt index ab3e43885b..a3ddafda34 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticKeyboardEvent.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticKeyboardEvent.kt @@ -3,6 +3,7 @@ package org.jetbrains.compose.web.events import androidx.compose.web.events.SyntheticEvent import org.w3c.dom.events.EventTarget import org.w3c.dom.events.KeyboardEvent +import org.jetbrains.compose.web.* class SyntheticKeyboardEvent internal constructor( nativeEvent: KeyboardEvent @@ -15,7 +16,7 @@ class SyntheticKeyboardEvent internal constructor( val ctrlKey: Boolean = nativeEvent.ctrlKey val isComposing: Boolean = nativeEvent.isComposing val key: String = nativeEvent.key - val locale: String = nativeEvent.asDynamic().locale.toString() + val locale: String = nativeEvent.getStringProperty("locale").toString() val location: Int = nativeEvent.location val metaKey: Boolean = nativeEvent.metaKey val repeat: Boolean = nativeEvent.repeat diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticMouseEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticMouseEvent.kt similarity index 89% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticMouseEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticMouseEvent.kt index 872921283e..1578c69a97 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticMouseEvent.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticMouseEvent.kt @@ -6,6 +6,7 @@ import org.w3c.dom.HTMLElement import org.w3c.dom.events.EventTarget import org.w3c.dom.events.MouseEvent import org.w3c.dom.events.WheelEvent +import org.jetbrains.compose.web.* /** * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent @@ -26,14 +27,14 @@ open class SyntheticMouseEvent internal constructor( // https://github.com/JetBrains/compose-jb/issues/1053 // movementX and movementY are undefined in SafariMobile MouseEvent - val movementX: Int = (nativeEvent.asDynamic().movementX as? Int) ?: 0 - val movementY: Int = (nativeEvent.asDynamic().movementY as? Int) ?: 0 + val movementX: Int = nativeEvent.getIntProperty("movementX") ?: 0 + val movementY: Int = nativeEvent.getIntProperty("movementY") ?: 0 val offsetX: Double = nativeEvent.offsetX val offsetY: Double = nativeEvent.offsetY val pageX: Double = nativeEvent.pageX val pageY: Double = nativeEvent.pageY - val region: String? = nativeEvent.region + val region: String? = nativeEvent.getStringProperty("region") val relatedTarget: EventTarget? = nativeEvent.relatedTarget val screenX: Int = nativeEvent.screenX val screenY: Int = nativeEvent.screenY diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticSelectEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticSelectEvent.kt similarity index 86% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticSelectEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticSelectEvent.kt index 773c8bee9a..e2169b9f5b 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticSelectEvent.kt +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticSelectEvent.kt @@ -3,6 +3,7 @@ package org.jetbrains.compose.web.events import androidx.compose.web.events.SyntheticEvent import org.w3c.dom.events.Event import org.w3c.dom.events.EventTarget +import org.jetbrains.compose.web.* class SyntheticSelectEvent internal constructor( nativeEvent: Event, @@ -14,7 +15,7 @@ class SyntheticSelectEvent internal constructor( fun selection(): String { - return nativeEvent.target.asDynamic().value.unsafeCast()?.substring( + return nativeEvent.target?.getStringProperty("value")?.substring( selectionStart, selectionEnd ) ?: "" } diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticSubmitEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticSubmitEvent.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticSubmitEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticSubmitEvent.kt diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticTouchEvent.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticTouchEvent.kt similarity index 100% rename from web/core/src/jsMain/kotlin/org/jetbrains/compose/web/events/SyntheticTouchEvent.kt rename to web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/events/SyntheticTouchEvent.kt diff --git a/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt new file mode 100644 index 0000000000..d79d60d7c3 --- /dev/null +++ b/web/core/src/jsWasmMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt @@ -0,0 +1,54 @@ +package org.jetbrains.compose.web + +import org.w3c.dom.events.* +import org.w3c.dom.css.CSSRule +import androidx.compose.web.events.* +import org.jetbrains.compose.web.css.CSSStyleValue +import org.w3c.dom.HTMLElement +import org.w3c.dom.svg.SVGElement +import org.jetbrains.compose.web.css.StylePropertyValue +import org.jetbrains.compose.web.dom.RadioGroupScope +import org.jetbrains.compose.web.dom.ElementBuilder +import org.w3c.dom.Element + +@PublishedApi +internal expect fun SyntheticEvent<*>.unsafeCast(): T +@PublishedApi +internal expect fun CSSRule.unsafeCast(): T +@PublishedApi +internal expect fun CSSStyleValue.unsafeCast(): T +@PublishedApi +internal expect fun Event.unsafeCast(): T +@PublishedApi +internal expect fun EventTarget.unsafeCast(): T +@PublishedApi +internal expect fun String.unsafeCast(): T +@PublishedApi +internal expect fun Number.unsafeCast(): T +@PublishedApi +internal expect fun SVGElement.unsafeCast(): T +@PublishedApi +internal expect fun HTMLElement.unsafeCast(): T +@PublishedApi +internal expect fun StylePropertyValue.unsafeCast(): T +@PublishedApi +@ExperimentalComposeWebApi +internal expect fun RadioGroupScope<*>.unsafeCast(): T +@PublishedApi +internal expect fun ElementBuilder<*>.unsafeCast(): T + +@PublishedApi +internal expect fun Any.unsafeCastBoolean(): Boolean +@PublishedApi +internal expect fun Any.unsafeCastString(): String + +@PublishedApi +internal expect fun Any.getStringProperty(name: String): String? +@PublishedApi +internal expect fun Any.getBooleanProperty(name: String): Boolean? +@PublishedApi +internal expect fun Any.getIntProperty(name: String): Int? +@PublishedApi +internal expect fun Any.getAnyProperty(name: String): T + +internal expect fun Element.getAttributeNamesWorkaround(): Array \ No newline at end of file diff --git a/web/core/src/jsMain/resources/index.html b/web/core/src/jsWasmMain/resources/index.html similarity index 100% rename from web/core/src/jsMain/resources/index.html rename to web/core/src/jsWasmMain/resources/index.html diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt new file mode 100644 index 0000000000..bc520ecb3e --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSKeywords.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +package org.jetbrains.compose.web.css + +actual interface CSSKeywordValue : CSSStyleValue \ No newline at end of file diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt new file mode 100644 index 0000000000..e994a53a21 --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSOperations.kt @@ -0,0 +1,3 @@ +package org.jetbrains.compose.web.css + +actual interface CSSCalcOperation: CSSNumericValue \ No newline at end of file diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt new file mode 100644 index 0000000000..1a77346e23 --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/CSSUnits.kt @@ -0,0 +1,8 @@ +package org.jetbrains.compose.web.css + +actual interface CSSNumericValue : StylePropertyValue, CSSVariableValueAs> + +actual interface CSSSizeValue : CSSNumericValue { + actual val value: Float + actual val unit: T +} diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/Color.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/Color.kt new file mode 100644 index 0000000000..0f3f6960a5 --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/Color.kt @@ -0,0 +1,3 @@ +package org.jetbrains.compose.web.css + +actual interface CSSColorValue : StylePropertyValue, CSSVariableValueAs \ No newline at end of file diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt new file mode 100644 index 0000000000..1c34b1188d --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/StylePropertyValue.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +@file:Suppress("UNUSED", "NOTHING_TO_INLINE", "FunctionName") +package org.jetbrains.compose.web.css + +actual interface StylePropertyValue + +actual interface StylePropertyNumber: StylePropertyValue +actual interface StylePropertyString: StylePropertyValue + +actual interface CSSStyleValue: StylePropertyValue { + actual override fun toString(): String +} \ No newline at end of file diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt new file mode 100644 index 0000000000..074329a6a8 --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/StyleScope.kt @@ -0,0 +1,3 @@ +package org.jetbrains.compose.web.css + +actual interface CSSVariableValueAs \ No newline at end of file diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt new file mode 100644 index 0000000000..88c8c8194a --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/css/keywords/Keywords.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +package org.jetbrains.compose.web.css.keywords + +import org.jetbrains.compose.web.css.CSSKeywordValue + +actual interface CSSAutoKeyword : CSSKeywordValue \ No newline at end of file diff --git a/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt new file mode 100644 index 0000000000..315575de6d --- /dev/null +++ b/web/core/src/wasmMain/kotlin/org/jetbrains/compose/web/w3cExtensions.kt @@ -0,0 +1,89 @@ +package org.jetbrains.compose.web + +import org.w3c.dom.events.* +import org.w3c.dom.css.CSSRule +import androidx.compose.web.events.* +import org.jetbrains.compose.web.css.CSSStyleValue +import org.w3c.dom.HTMLElement +import org.w3c.dom.svg.SVGElement +import org.jetbrains.compose.web.css.StylePropertyValue +import org.jetbrains.compose.web.dom.RadioGroupScope +import org.jetbrains.compose.web.dom.ElementBuilder +import org.w3c.dom.Element + +@Suppress("UNCHECKED_CAST") +private fun jsUnsafeCast(obj: Any): T = obj as T + +@JsFun("x => x") +private external fun jsUnsafeCastBoolean(obj: Any): Boolean + +@JsFun("x => x") +private external fun jsUnsafeCastString(obj: Any): String + +@JsFun("(obj, name) => obj['name'] ?? null") +private external fun jsGetStringProperty(obj: Any, name: String): String? + +@JsFun("(obj, name) => obj['name'] ?? null") +private external fun jsGetBooleanProperty(obj: Any, name: String): Boolean? + +@JsFun("(obj, name) => obj['name'] ?? null") +private external fun jsGetIntProperty(obj: Any, name: String): Int? + +@JsFun("(obj, name) => obj['name'] ?? null") +private external fun jsGetAnyProperty(obj: Any, name: String): T + +@PublishedApi +internal actual fun SyntheticEvent<*>.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun CSSRule.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun CSSStyleValue.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun Event.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun EventTarget.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun String.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun Number.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun HTMLElement.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun SVGElement.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun StylePropertyValue.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +@ExperimentalComposeWebApi +internal actual fun RadioGroupScope<*>.unsafeCast(): T = jsUnsafeCast(this) +@PublishedApi +internal actual fun ElementBuilder<*>.unsafeCast(): T = jsUnsafeCast(this) + +@PublishedApi +internal actual fun Any.unsafeCastBoolean(): Boolean = jsUnsafeCastBoolean(this) +@PublishedApi +internal actual fun Any.unsafeCastString(): String = jsUnsafeCastString(this) + +@PublishedApi +internal actual fun Any.getStringProperty(name: String): String? = jsGetStringProperty(this, name) +@PublishedApi +internal actual fun Any.getBooleanProperty(name: String): Boolean? = jsGetBooleanProperty(this, name) +@PublishedApi +internal actual fun Any.getIntProperty(name: String): Int? = jsGetIntProperty(this, name) +@PublishedApi +internal actual fun Any.getAnyProperty(name: String): T = jsGetAnyProperty(this, name) + +@JsFun("(node) => node.getAttributeNames()") +private external fun jsGetAttributeNamesArray(node: Element): Dynamic + +@JsFun("(array) => array.length") +private external fun jsGetArrayLength(array: Dynamic): Int + +@JsFun("(array, index) => array[index]") +private external fun jsGetArrayElementAsString(array: Dynamic, index: Int): String + +internal actual fun Element.getAttributeNamesWorkaround(): Array { + val attributesArray = jsGetAttributeNamesArray(this) + return Array(jsGetArrayLength(attributesArray)) { + jsGetArrayElementAsString(attributesArray, it) + } +} \ No newline at end of file diff --git a/web/gradle.properties b/web/gradle.properties index 42de5f34c3..c74650005c 100644 --- a/web/gradle.properties +++ b/web/gradle.properties @@ -2,3 +2,4 @@ compose.version=1.2.0 compose.web.buildSamples=false compose.web.tests.integration.withFirefox compose.web.tests.skip.benchmarks=false +compose.plugin.path=/Users/Igor.Yakovlev/.m2/repository/org/jetbrains/compose/compiler/compiler/0.0.0-SNAPSHOT/compiler-0.0.0-SNAPSHOT.jar diff --git a/web/integration-core/build.gradle.kts b/web/integration-core/build.gradle.kts index b8d6c4f18e..05317a1184 100644 --- a/web/integration-core/build.gradle.kts +++ b/web/integration-core/build.gradle.kts @@ -2,20 +2,20 @@ import org.jetbrains.compose.gradle.standardConf plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } kotlin { - jvm { - tasks.named("jvmTest") { - useJUnitPlatform() - - systemProperty( - "COMPOSE_WEB_INTEGRATION_TESTS_DISTRIBUTION", - File(buildDir, "developmentExecutable") - ) - } - } +// jvm { +// tasks.named("jvmTest") { +// useJUnitPlatform() +// +// systemProperty( +// "COMPOSE_WEB_INTEGRATION_TESTS_DISTRIBUTION", +// File(buildDir, "developmentExecutable") +// ) +// } +// } js(IR) { browser() { @@ -32,7 +32,8 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - implementation(compose.runtime) +// implementation(compose.runtime) + implementation("org.jetbrains.compose.runtime:runtime-js:1.3.0-rc01-SNAPSHOT") implementation(project(":web-core")) implementation(kotlin("stdlib-common")) } @@ -51,51 +52,58 @@ kotlin { } } - val jvmTest by getting { - dependencies { - implementation("org.slf4j:slf4j-api:1.7.30") - implementation("org.slf4j:slf4j-simple:1.7.30") - - implementation("org.seleniumhq.selenium:selenium-java:3.141.59") - - implementation("io.ktor:ktor-server-netty:1.5.4") - implementation("io.ktor:ktor-server-core:1.5.4") - implementation("io.ktor:ktor-server-host-common:1.5.4") - - implementation("org.junit.jupiter:junit-jupiter-engine:5.7.1") - implementation("org.junit.jupiter:junit-jupiter-api:5.7.1") - implementation("org.junit.jupiter:junit-jupiter-params:5.7.1") - } - } +// val jvmTest by getting { +// dependencies { +// implementation("org.slf4j:slf4j-api:1.7.30") +// implementation("org.slf4j:slf4j-simple:1.7.30") +// +// implementation("org.seleniumhq.selenium:selenium-java:3.141.59") +// +// implementation("io.ktor:ktor-server-netty:1.5.4") +// implementation("io.ktor:ktor-server-core:1.5.4") +// implementation("io.ktor:ktor-server-host-common:1.5.4") +// +// implementation("org.junit.jupiter:junit-jupiter-engine:5.7.1") +// implementation("org.junit.jupiter:junit-jupiter-api:5.7.1") +// implementation("org.junit.jupiter:junit-jupiter-params:5.7.1") +// } +// } } } -tasks.named("jvmTest") { - dependsOn(tasks.named("jsBrowserDevelopmentWebpack")) - - listOf( - "webdriver.chrome.driver", - "webdriver.gecko.driver", - ).forEach { - if (rootProject.hasProperty(it)) { - println("${it} => ${rootProject.extensions.getByName(it)}") - systemProperty(it, rootProject.extensions.getByName(it)) - } - } - - listOf( - "compose.web.tests.integration.withFirefox" - ).forEach { propName -> - if (project.hasProperty(propName)) { - systemProperty(propName, "true") - } - } -} +//tasks.named("jvmTest") { +// dependsOn(tasks.named("jsBrowserDevelopmentWebpack")) +// +// listOf( +// "webdriver.chrome.driver", +// "webdriver.gecko.driver", +// ).forEach { +// if (rootProject.hasProperty(it)) { +// println("${it} => ${rootProject.extensions.getByName(it)}") +// systemProperty(it, rootProject.extensions.getByName(it)) +// } +// } +// +// listOf( +// "compose.web.tests.integration.withFirefox" +// ).forEach { propName -> +// if (project.hasProperty(propName)) { +// systemProperty(propName, "true") +// } +// } +//} // a temporary workaround for a bug in jsRun invocation - see https://youtrack.jetbrains.com/issue/KT-48273 afterEvaluate { rootProject.extensions.configure { versions.webpackDevServer.version = "4.0.0" - versions.webpackCli.version = "4.9.0" + versions.webpackCli.version = "4.10.0" } } + +project.tasks.withType().configureEach { + kotlinOptions.freeCompilerArgs += listOf( + "-Xklib-enable-signature-clash-checks=false", + "-Xplugin=${project.properties["compose.plugin.path"]}" + ) +} \ No newline at end of file diff --git a/web/internal-web-core-runtime/build.gradle.kts b/web/internal-web-core-runtime/build.gradle.kts index 038a29600d..18ece82e8e 100644 --- a/web/internal-web-core-runtime/build.gradle.kts +++ b/web/internal-web-core-runtime/build.gradle.kts @@ -2,32 +2,67 @@ import org.jetbrains.compose.gradle.standardConf plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } - kotlin { js(IR) { browser() { - testTask { - useKarma { - standardConf() - } - } +// testTask { +// useKarma { +// standardConf() +// } +// } + } + } + wasm { + browser() { + } } sourceSets { val commonMain by getting { dependencies { - implementation(compose.runtime) + //implementation(comp core.runtime) + implementation("org.jetbrains.compose.runtime:runtime:1.3.0-rc01-SNAPSHOT") + //implementation("org.jetbrains.compose.web:web-core:1.2.0-SNAPSHOT") } } + val jsWasmMain by creating { } + + val jsMain by getting { + dependsOn(jsWasmMain) + } + + val wasmMain by getting { + dependsOn(jsWasmMain) + } + val jsTest by getting { dependencies { implementation(kotlin("test-js")) } } + val wasmTest by getting { + dependencies { + implementation(kotlin("test-wasm")) + } + } + } +} + +project.tasks.withType().configureEach { + kotlinOptions.freeCompilerArgs += listOf( + "-Xklib-enable-signature-clash-checks=false", + "-Xplugin=${project.properties["compose.plugin.path"]}" + ) +} + +project.afterEvaluate { + //Disable jsWasmMain intermediate sourceset publication + tasks.named("compileJsWasmMainKotlinMetadata") { + enabled = false } } diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt b/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt index dd64b039a5..5ca026fffa 100644 --- a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt +++ b/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt @@ -6,7 +6,7 @@ import kotlin.coroutines.CoroutineContext import kotlin.js.Promise @ComposeWebInternalApi -class JsMicrotasksDispatcher : CoroutineDispatcher() { +actual class JsMicrotasksDispatcher : CoroutineDispatcher() { override fun dispatch(context: CoroutineContext, block: Runnable) { Promise.resolve(Unit).then { block.run() } } diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt b/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt new file mode 100644 index 0000000000..f4808335b0 --- /dev/null +++ b/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt @@ -0,0 +1,5 @@ +package org.jetbrains.compose.web.internal.runtime + +actual typealias EventListener = org.w3c.dom.events.EventListener + +actual fun EventListener.getW3cListener(): org.w3c.dom.events.EventListener = this \ No newline at end of file diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/dom/DOMSCope.kt b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/dom/DOMSCope.kt similarity index 100% rename from web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/dom/DOMSCope.kt rename to web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/dom/DOMSCope.kt diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/ComposeWebInternalApi.kt b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/ComposeWebInternalApi.kt similarity index 100% rename from web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/ComposeWebInternalApi.kt rename to web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/ComposeWebInternalApi.kt diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt similarity index 95% rename from web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt rename to web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt index 16a3ce7be4..7c279fb543 100644 --- a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt +++ b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt @@ -3,8 +3,6 @@ package org.jetbrains.compose.web.internal.runtime import androidx.compose.runtime.AbstractApplier import kotlinx.dom.clear import org.w3c.dom.* -import org.w3c.dom.css.CSSStyleDeclaration -import org.w3c.dom.events.EventListener @ComposeWebInternalApi class DomApplier( diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/GlobalSnapshotManager.kt b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/GlobalSnapshotManager.kt similarity index 100% rename from web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/GlobalSnapshotManager.kt rename to web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/GlobalSnapshotManager.kt diff --git a/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt new file mode 100644 index 0000000000..52c8db1d47 --- /dev/null +++ b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt @@ -0,0 +1,9 @@ +package org.jetbrains.compose.web.internal.runtime + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Runnable +import kotlin.coroutines.CoroutineContext +import kotlin.js.Promise + +@ComposeWebInternalApi +expect class JsMicrotasksDispatcher : CoroutineDispatcher diff --git a/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt new file mode 100644 index 0000000000..011aed09ef --- /dev/null +++ b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt @@ -0,0 +1,9 @@ +package org.jetbrains.compose.web.internal.runtime + +import org.w3c.dom.events.Event + +expect interface EventListener { + fun handleEvent(event: Event) +} + +expect fun EventListener.getW3cListener(): org.w3c.dom.events.EventListener \ No newline at end of file diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/renderComposable.kt b/web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/renderComposable.kt similarity index 100% rename from web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/renderComposable.kt rename to web/internal-web-core-runtime/src/jsWasmMain/kotlin/org/jetbrains/compose/web/renderComposable.kt diff --git a/web/internal-web-core-runtime/src/wasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt b/web/internal-web-core-runtime/src/wasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt new file mode 100644 index 0000000000..0312049c3e --- /dev/null +++ b/web/internal-web-core-runtime/src/wasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/JsMicrotasksDispatcher.kt @@ -0,0 +1,17 @@ +package org.jetbrains.compose.web.internal.runtime + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Runnable +import kotlin.coroutines.CoroutineContext +import kotlin.js.Promise + +@JsFun("() => 'value'") +private external fun someValue(): Dynamic + +@ComposeWebInternalApi +actual class JsMicrotasksDispatcher : CoroutineDispatcher() { + private val value = someValue() + override fun dispatch(context: CoroutineContext, block: Runnable) { + Promise.resolve(value).then { block.run(); null } + } +} diff --git a/web/internal-web-core-runtime/src/wasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt b/web/internal-web-core-runtime/src/wasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt new file mode 100644 index 0000000000..fd44b30bbf --- /dev/null +++ b/web/internal-web-core-runtime/src/wasmMain/kotlin/org/jetbrains/compose/web/internal/runtime/events.kt @@ -0,0 +1,15 @@ +package org.jetbrains.compose.web.internal.runtime + +import org.w3c.dom.events.Event + +actual interface EventListener { + actual fun handleEvent(event: Event) +} + +@JsFun("(listener, handler) => ({ handleEvent: (event) => handler(listener, event) })") +private external fun wrapListenerEvent(eventListener: EventListener, wasmHandler: (EventListener, Event) -> Unit): org.w3c.dom.events.EventListener + +actual fun EventListener.getW3cListener(): org.w3c.dom.events.EventListener = + wrapListenerEvent(this) { listener, event -> + listener.handleEvent(event) + } \ No newline at end of file diff --git a/web/internal-web-core-runtime/src/wasmTest/kotlin/RenderComposableTests.kt b/web/internal-web-core-runtime/src/wasmTest/kotlin/RenderComposableTests.kt new file mode 100644 index 0000000000..0a05a04b5d --- /dev/null +++ b/web/internal-web-core-runtime/src/wasmTest/kotlin/RenderComposableTests.kt @@ -0,0 +1,24 @@ +import kotlinx.browser.document +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.promise +import org.jetbrains.compose.web.renderComposable +import kotlin.test.Test +import kotlin.test.assertEquals + +/* + * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +class RenderComposableTests { + @Test + fun compCount() = MainScope().promise { + var count = 0 + renderComposable(document.createElement("div")) { + count++ + } + delay(1000) + assertEquals(1, count) + } +} \ No newline at end of file diff --git a/web/settings.gradle.kts b/web/settings.gradle.kts index ad4c210e79..2eab4ad7e1 100644 --- a/web/settings.gradle.kts +++ b/web/settings.gradle.kts @@ -21,6 +21,7 @@ pluginManagement { val repos = (localProperties?.getProperty("compose.web.repos"))?.split(File.pathSeparator) repositories { + mavenLocal() gradlePluginPortal() mavenCentral() repos?.forEach { urlPath -> @@ -42,7 +43,8 @@ pluginManagement { resolutionStrategy { eachPlugin { if (requested.id.id == "org.jetbrains.compose") { - useModule("org.jetbrains.compose:org.jetbrains.compose.gradle.plugin:$COMPOSE_CORE_VERSION") + //useModule("org.jetbrains.compose:org.jetbrains.compose.gradle.plugin:$COMPOSE_CORE_VERSION") + useModule("org.jetbrains.compose:compose-gradle-plugin:0.1.0-SNAPSHOT") } } } @@ -59,7 +61,7 @@ fun module(name: String, path: String) { module(":web-core", "core") -module(":web-svg", "svg") +//module(":web-svg", "svg") module(":web-integration-core", "integration-core") module(":compose-compiler-integration", "compose-compiler-integration") module(":internal-web-core-runtime", "internal-web-core-runtime") @@ -76,4 +78,4 @@ if (extra["compose.web.buildSamples"]!!.toString().toBoolean() == true) { module(":examples:compose-web-lp", "../examples/web-landing") module(":examples:web-compose-bird", "../examples/web-compose-bird") module(":examples:web-with-react", "../examples/web-with-react") -} +} \ No newline at end of file diff --git a/web/svg/build.gradle.kts b/web/svg/build.gradle.kts index 9e420ce566..09d442a2b8 100644 --- a/web/svg/build.gradle.kts +++ b/web/svg/build.gradle.kts @@ -2,7 +2,7 @@ import org.jetbrains.compose.gradle.standardConf plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } @@ -21,7 +21,7 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - implementation(compose.runtime) + implementation("org.jetbrains.compose.runtime:runtime-js:1.3.0-rc01-SNAPSHOT") implementation(kotlin("stdlib-common")) } } diff --git a/web/test-utils/build.gradle.kts b/web/test-utils/build.gradle.kts index 6dcb5f0613..a03fb32d47 100644 --- a/web/test-utils/build.gradle.kts +++ b/web/test-utils/build.gradle.kts @@ -2,7 +2,7 @@ import org.jetbrains.compose.gradle.standardConf plugins { kotlin("multiplatform") - id("org.jetbrains.compose") + //id("org.jetbrains.compose") } @@ -20,18 +20,76 @@ kotlin { } } } + wasm { + browser() { + testTask { + useKarma { + standardConf() + } + } + } + } sourceSets { val commonMain by getting { dependencies { implementation(kotlin("stdlib-common")) + implementation(kotlin("test")) + implementation("org.jetbrains.compose.runtime:runtime:1.3.0-rc01-SNAPSHOT") implementation(project(":internal-web-core-runtime")) } } + + val wasmJsMain by creating { + dependsOn(commonMain) + } + + val wasmJsTest by creating { + dependsOn(wasmJsMain) + } + + val jsMain by getting { + dependsOn(wasmJsMain) + dependencies { + implementation("org.jetbrains.compose.web:web-core-js:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.web:internal-web-core-runtime-js:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.runtime:runtime-js:1.3.0-rc01-SNAPSHOT") + } + } + + val wasmMain by getting { + dependsOn(wasmJsMain) + dependencies { + implementation("org.jetbrains.compose.web:web-core-wasm:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.web:internal-web-core-runtime-wasm:1.2.0-SNAPSHOT") + implementation("org.jetbrains.compose.runtime:runtime-wasm:1.3.0-rc01-SNAPSHOT") + } + } val jsTest by getting { + dependsOn(wasmJsTest) dependencies { implementation(kotlin("test-js")) } } + val wasmTest by getting { + dependsOn(wasmJsTest) + dependencies { + implementation(kotlin("test-wasm")) + } + } + } +} + +project.tasks.withType().configureEach { + kotlinOptions.freeCompilerArgs += listOf( + "-Xklib-enable-signature-clash-checks=false", + "-Xplugin=${project.properties["compose.plugin.path"]}" + ) +} + +project.afterEvaluate { + //Disable jsWasmMain intermediate sourceset publication + tasks.named("compileWasmJsMainKotlinMetadata") { + enabled = false } } diff --git a/web/test-utils/src/jsMain/kotlin/org/jetbrains/compose/web/testutils/ComposeWebExperimentalTestsApi.kt b/web/test-utils/src/wasmJsMain/kotlin/org/jetbrains/compose/web/testutils/ComposeWebExperimentalTestsApi.kt similarity index 100% rename from web/test-utils/src/jsMain/kotlin/org/jetbrains/compose/web/testutils/ComposeWebExperimentalTestsApi.kt rename to web/test-utils/src/wasmJsMain/kotlin/org/jetbrains/compose/web/testutils/ComposeWebExperimentalTestsApi.kt diff --git a/web/test-utils/src/jsMain/kotlin/org/jetbrains/compose/web/testutils/TestUtils.kt b/web/test-utils/src/wasmJsMain/kotlin/org/jetbrains/compose/web/testutils/TestUtils.kt similarity index 100% rename from web/test-utils/src/jsMain/kotlin/org/jetbrains/compose/web/testutils/TestUtils.kt rename to web/test-utils/src/wasmJsMain/kotlin/org/jetbrains/compose/web/testutils/TestUtils.kt diff --git a/web/test-utils/src/jsTest/kotlin/TestsForTestUtils.kt b/web/test-utils/src/wasmJsTest/kotlin/TestsForTestUtils.kt similarity index 100% rename from web/test-utils/src/jsTest/kotlin/TestsForTestUtils.kt rename to web/test-utils/src/wasmJsTest/kotlin/TestsForTestUtils.kt