From ef670f841826e9b7cefe712766c7c63c80365a21 Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Tue, 7 Jun 2022 12:44:30 +0300 Subject: [PATCH] Refactor visualization Replace usage of Stream:toList because of glitches in scripting --- .gitignore | 1 + build.gradle.kts | 13 +- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- kotlin-js-store/yarn.lock | 2022 ----------------- notebooks/jupyter-demo.ipynb | 2 +- numass-analysis/build.gradle.kts | 9 +- .../inr/mass/data/analysis/NumassAnalyzer.kt | 4 - .../ru/inr/mass/data/analysis/TimeAnalyzer.kt | 8 +- numass-data-model/build.gradle.kts | 5 +- numass-data-proto/build.gradle.kts | 16 +- .../kotlin/ru/inr/mass/data/proto/Point.kt | 659 ++++++ .../inr/mass/data/proto/NumassDirectorySet.kt | 36 +- .../inr/mass/data/proto/NumassProtoPlugin.kt | 55 +- .../inr/mass/data/proto/ProtoNumassPoint.kt | 17 +- .../data/proto/TaggedNumassEnvelopeFormat.kt | 21 +- .../mass/data/proto => }/numass-proto.proto | 0 .../mass/data/proto/TestNumassDirectory.kt | 12 +- numass-data-server/build.gradle.kts | 40 +- .../mass/data/server/NumassCommonPlugin.kt | 14 +- .../mass/data/server/VisionOfNumassPoint.kt | 21 +- .../ru/inr/mass/data/server/NumassJsPlugin.kt | 29 +- .../kotlin/ru/inr/mass/data/server/demo.kt | 53 - .../ru/inr/mass/data/server/serverDemo.kt | 50 + .../inr/mass/data/server/serverExtensions.kt | 19 +- .../ru/inr/mass/data/server/staticDemo.kt | 28 + numass-detector-client/build.gradle.kts | 2 +- numass-model/build.gradle.kts | 2 +- numass-workspace/build.gradle.kts | 9 +- .../ru/inr/mass/notebook/NumassJupyter.kt | 11 +- .../main/kotlin/ru/inr/mass/scripts/demo.kt | 4 +- .../kotlin/ru/inr/mass/scripts/gun_2021_11.kt | 2 +- .../kotlin/ru/inr/mass/scripts/run_2020_12.kt | 10 +- .../kotlin/ru/inr/mass/workspace/Numass.kt | 63 +- .../ru/inr/mass/workspace/NumassPlugin.kt | 118 - .../mass/workspace/NumassWorkspacePlugin.kt | 134 ++ .../kotlin/ru/inr/mass/workspace/plots.kt | 4 +- .../kotlin/ru/inr/mass/workspace/workspace.kt | 10 - settings.gradle.kts | 12 +- 39 files changed, 1118 insertions(+), 2401 deletions(-) delete mode 100644 kotlin-js-store/yarn.lock create mode 100644 numass-data-proto/src/gen/kotlin/ru/inr/mass/data/proto/Point.kt rename numass-data-proto/src/main/proto/{ru/inr/mass/data/proto => }/numass-proto.proto (100%) delete mode 100644 numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/demo.kt create mode 100644 numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverDemo.kt create mode 100644 numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/staticDemo.kt delete mode 100644 numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassPlugin.kt create mode 100644 numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassWorkspacePlugin.kt delete mode 100644 numass-workspace/src/main/kotlin/ru/inr/mass/workspace/workspace.kt diff --git a/.gitignore b/.gitignore index 9120eeb..eccc91d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,6 @@ out/ .gradle build/ /notebooks/.ipynb_checkpoints +/kotlin-js-store/ !gradle-wrapper.jar \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 95827ee..567d7d0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,24 +1,25 @@ plugins { - id("ru.mipt.npm.gradle.project") + id("space.kscience.gradle.project") } allprojects { repositories { mavenLocal() maven("https://repo.kotlin.link") + maven("https://maven.pkg.jetbrains.space/spc/p/sci/dev") } group = "ru.inr.mass" version = "0.1.3" } -val dataforgeVersion by extra("0.5.2") -val tablesVersion: String by extra("0.1.5") -val kmathVersion by extra("0.3.0") -val plotlyVersion: String by extra("0.5.0") +val dataforgeVersion by extra("0.6.0-dev-15") +val tablesVersion: String by extra("0.2.0-dev-3") +val kmathVersion by extra("0.3.1-dev-6") +val visionForgeVersion: String by rootProject.extra("0.3.0-dev-4") + ksciencePublish{ - github("numass") space("https://maven.pkg.jetbrains.space/mipt-npm/p/numass/maven") } diff --git a/gradle.properties b/gradle.properties index cb5ea17..a514121 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,4 +12,4 @@ org.gradle.configureondemand=true org.gradle.parallel=true org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G -toolsVersion=0.11.2-kotlin-1.6.10 +toolsVersion=0.13.3-kotlin-1.7.20 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 00e33ed..ae04661 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock deleted file mode 100644 index ca1d698..0000000 --- a/kotlin-js-store/yarn.lock +++ /dev/null @@ -1,2022 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" - integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== - -"@js-joda/core@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273" - integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg== - -"@types/component-emitter@^1.2.10": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.11.tgz#50d47d42b347253817a39709fef03ce66a108506" - integrity sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ== - -"@types/cookie@^0.4.0": - 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.8": - 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.0": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" - integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/estree@^0.0.50": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== - -"@types/json-schema@*", "@types/json-schema@^7.0.8": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== - -"@types/node@*", "@types/node@>=10.0.0": - version "17.0.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.18.tgz#3b4fed5cfb58010e3a2be4b6e74615e4847f1074" - integrity sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA== - -"@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.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" - integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== - -"@webpack-cli/info@^1.4.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" - integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" - integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== - -"@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.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -accepts@~1.3.4: - 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.4.1: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.5: - version "6.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" - -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-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-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== - -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== - -base64-arraybuffer@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" - integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= - -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== - -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.19.0: - version "1.19.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" - type-is "~1.6.18" - -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" - -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.19.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" - integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== - dependencies: - caniuse-lite "^1.0.30001312" - electron-to-chromium "^1.4.71" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -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== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -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.30001312: - version "1.0.30001312" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" - integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== - -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.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^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== - -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@^2.0.14: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -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== - -component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -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-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@~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== - -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" - -css-loader@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.3.0.tgz#334d3500ff0a0c14cfbd4b0670088dbb5b5c1530" - integrity sha512-9NGvHOR+L6ps13Ilw/b216++Q8q+5RpJcVufCdW9S/9iCzs4KBDNa8qnA/n3FK/sSfWmH35PAIK/cfPi7LOSUg== - dependencies: - icss-utils "^5.1.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - semver "^7.3.5" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -date-format@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.3.tgz#f63de5dc08dc02efd8ef32bf2a6918e486f35873" - integrity sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ== - -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.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -debug@^4.1.1, debug@^4.3.3, debug@~4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -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== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= - -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== - -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= - 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 sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.4.71: - version "1.4.71" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6" - integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw== - -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 sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -engine.io-parser@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.3.tgz#83d3a17acfd4226f19e721bb22a1ee8f7662d2f6" - integrity sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA== - dependencies: - base64-arraybuffer "0.1.4" - -engine.io@~4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-4.1.2.tgz#f96ceb56d4b39cc7ca5bd29a20e9c99c1ad1a765" - integrity sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ== - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~4.0.0" - ws "~7.4.2" - -enhanced-resolve@^5.8.3: - version "5.9.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz#49ac24953ac8452ed8fed2ef1340fc8e043667ee" - integrity sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA== - 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 sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -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 sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -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== - -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" - -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: - 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-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.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== - -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" - -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.4: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -follow-redirects@^1.0.0: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== - -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== - -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -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== - -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-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: - 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.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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.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" - -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: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -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@^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== - -http-errors@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-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.2: - 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" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -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" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -interpret@^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== - -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.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -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-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-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-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-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== - -isbinaryfile@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" - integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -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-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -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== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -karma-chrome-launcher@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" - integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== - 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.3.4: - version "6.3.4" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.3.4.tgz#359899d3aab3d6b918ea0f57046fd2a6b68565e6" - integrity sha512-hbhRogUYIulfkBTZT7xoPrCYhRBnBoqbbL4fszWD0ReFGUxU+LYBr3dwKdAluaDQ/ynT9/7C+Lf7pPNW4gSx4Q== - dependencies: - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.5.1" - colors "^1.4.0" - 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.3.0" - mime "^2.5.2" - minimatch "^3.0.4" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^3.1.0" - source-map "^0.6.1" - tmp "^0.2.1" - ua-parser-js "^0.7.28" - 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.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.15, lodash@^4.17.21: - version "4.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.3.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.4.1.tgz#9d3a8bf2c31c1e213fe3fc398a6053f7a2bc53e8" - integrity sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg== - dependencies: - date-format "^4.0.3" - debug "^4.3.3" - flatted "^3.2.4" - rfdc "^1.3.0" - streamroller "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -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== - -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== - -mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== - dependencies: - mime-db "1.51.0" - -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== - -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4: - 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: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mocha@9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.2.tgz#93f53175b0f0dc4014bd2d612218fccfcf3534d3" - integrity sha512-ta3LtJ+63RIBP03VBjMGtSqbe6cWXRejF9SyM9Zyli1CKZJZ+vfCTj3oW24V7wAphMJdpOFLoMI3hjJ1LWbs0w== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.2" - debug "4.3.2" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.1.7" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "3.0.4" - ms "2.1.3" - nanoid "3.1.25" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.1.5" - 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 sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -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: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@3.1.25: - version "3.1.25" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" - integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== - -nanoid@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - -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-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== - -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 sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - 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" - -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-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.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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -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== - -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: - 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" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.9" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" - integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.2.15: - version "8.4.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1" - integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA== - dependencies: - nanoid "^3.2.0" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -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.9.7: - version "6.9.7" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -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: - 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.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== - dependencies: - bytes "3.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - unpipe "1.0.0" - -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" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -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.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -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" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"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" - -semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@6.0.0, serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -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== - -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== - -socket.io-adapter@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz#edc5dc36602f2985918d631c1399215e97a1b527" - integrity sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg== - -socket.io-parser@~4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" - integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== - dependencies: - "@types/component-emitter" "^1.2.10" - component-emitter "~1.3.0" - debug "~4.3.1" - -socket.io@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-3.1.2.tgz#06e27caa1c4fc9617547acfbb5da9bc1747da39a" - integrity sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw== - dependencies: - "@types/cookie" "^0.4.0" - "@types/cors" "^2.8.8" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "~2.0.0" - debug "~4.3.1" - engine.io "~4.1.0" - socket.io-adapter "~2.1.0" - socket.io-parser "~4.0.3" - -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== - -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@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.0.tgz#f2a04ee2808ad01c774dea6b7d2639839f3b3049" - integrity sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.2" - source-map-js "^0.6.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== - -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -streamroller@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.0.2.tgz#30418d0eee3d6c93ec897f892ed098e3a81e68b7" - integrity sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA== - dependencies: - date-format "^4.0.3" - debug "^4.1.1" - fs-extra "^10.0.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" - -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-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== - -style-loader@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.0.tgz#d66ea95fc50b22f8b79b69a9e414760fcf58d8d8" - integrity sha512-szANub7ksJtQioJYtpbWwh1hUl99uK15n5HDlikeCRil/zYMZgSxucHddyF/4A3qJMUiAjPhFowrrQuNMA7jwQ== - -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.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" - integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== - dependencies: - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - terser "^5.7.2" - -terser@^5.7.2: - version "5.10.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" - integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.20" - -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" - -ua-parser-js@^0.7.28: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -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 sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -v8-compile-cache@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vary@^1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -watchpack@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" - integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webpack-cli@4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.0.tgz#dc43e6e0f80dd52e89cbf73d5294bcd7ad6eb343" - integrity sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.1.0" - "@webpack-cli/info" "^1.4.0" - "@webpack-cli/serve" "^1.6.0" - colorette "^2.0.14" - commander "^7.0.0" - execa "^5.0.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - v8-compile-cache "^2.2.0" - webpack-merge "^5.7.3" - -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.0: - 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.57.1: - version "5.57.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.57.1.tgz#ead5ace2c17ecef2ae8126f143bfeaa7f55eab44" - integrity sha512-kHszukYjTPVfCOEyrUthA3jqJwduY/P3eO8I0gMNOZGIQWKAwZftxmp5hq6paophvwo9NoUrcZOecs9ulOyyTg== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.50" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.3" - 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.4" - json-parse-better-errors "^1.0.2" - 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.2.0" - webpack-sources "^3.2.0" - -which@2.0.2, 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" - -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" - -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.1.5: - version "6.1.5" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" - integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== - -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 sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@~7.4.2: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -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== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -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/notebooks/jupyter-demo.ipynb b/notebooks/jupyter-demo.ipynb index c4bb193..bd57568 100644 --- a/notebooks/jupyter-demo.ipynb +++ b/notebooks/jupyter-demo.ipynb @@ -9,7 +9,7 @@ "source": [ "@file:Repository(\"https://repo.kotlin.link\")\n", "@file:Repository(\"*mavenLocal\")\n", - "@file:DependsOn(\"ru.inr.mass:numass-workspace:0.1.1\")" + "@file:DependsOn(\"ru.inr.mass:numass-workspace:0.1.3\")" ] }, { diff --git a/numass-analysis/build.gradle.kts b/numass-analysis/build.gradle.kts index 14516f4..6df6e24 100644 --- a/numass-analysis/build.gradle.kts +++ b/numass-analysis/build.gradle.kts @@ -1,6 +1,5 @@ plugins { - kotlin("multiplatform") - id("ru.mipt.npm.gradle.common") + id("space.kscience.gradle.mpp") `maven-publish` } @@ -22,8 +21,8 @@ kotlin.sourceSets { } } -kscience{ - useAtomic() -} +//kscience{ +// useAtomic() +//} diff --git a/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/NumassAnalyzer.kt b/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/NumassAnalyzer.kt index cd62169..009315a 100644 --- a/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/NumassAnalyzer.kt +++ b/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/NumassAnalyzer.kt @@ -23,10 +23,6 @@ import ru.inr.mass.data.api.NumassPoint.Companion.HV_KEY import space.kscience.dataforge.meta.* import space.kscience.dataforge.names.Name import space.kscience.dataforge.names.asName -import space.kscience.dataforge.values.ListValue -import space.kscience.dataforge.values.Value -import space.kscience.dataforge.values.ValueType -import space.kscience.dataforge.values.int import space.kscience.tables.ColumnHeader import space.kscience.tables.MetaRow import space.kscience.tables.RowTable diff --git a/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/TimeAnalyzer.kt b/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/TimeAnalyzer.kt index 2f09607..06b427a 100644 --- a/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/TimeAnalyzer.kt +++ b/numass-analysis/src/commonMain/kotlin/ru/inr/mass/data/analysis/TimeAnalyzer.kt @@ -31,7 +31,9 @@ import kotlin.math.* * An analyzer which uses time information from events * Created by darksnake on 11.07.2017. */ -public open class TimeAnalyzer(override val extractor: NumassEventExtractor) : NumassAnalyzer() { +public open class TimeAnalyzer( + override val extractor: NumassEventExtractor = NumassEventExtractor.EVENTS_ONLY, +) : NumassAnalyzer() { override suspend fun analyzeInternal( block: NumassBlock, @@ -76,7 +78,7 @@ public open class TimeAnalyzer(override val extractor: NumassEventExtractor) : N filter { pair -> pair.second >= t0 }.collect { pair -> totalN++ //TODO add progress listener here - totalT+= pair.second + totalT += pair.second } if (totalN == 0L) { @@ -114,10 +116,12 @@ public open class TimeAnalyzer(override val extractor: NumassEventExtractor) : N sumOf { it.countRate } / size, sumOf { it.countRateError.pow(2.0) } / size / size ) + AveragingMethod.WEIGHTED -> Pair( sumOf { it.countRate * it.length } / totalTime, sumOf { (it.countRateError * it.length / totalTime).pow(2.0) } ) + AveragingMethod.GEOMETRIC -> { val mean = exp(sumOf { ln(it.countRate) } / size) val variance = (mean / size).pow(2.0) * sumOf { diff --git a/numass-data-model/build.gradle.kts b/numass-data-model/build.gradle.kts index 985402b..a670f18 100644 --- a/numass-data-model/build.gradle.kts +++ b/numass-data-model/build.gradle.kts @@ -1,6 +1,5 @@ plugins { - kotlin("multiplatform") - id("ru.mipt.npm.gradle.common") + id("space.kscience.gradle.mpp") `maven-publish` } @@ -12,7 +11,7 @@ kotlin.sourceSets { dependencies { api("space.kscience:dataforge-context:$dataforgeVersion") api("space.kscience:dataforge-data:$dataforgeVersion") - api("org.jetbrains.kotlinx:kotlinx-datetime:${ru.mipt.npm.gradle.KScienceVersions.dateTimeVersion}") + api("org.jetbrains.kotlinx:kotlinx-datetime:${space.kscience.gradle.KScienceVersions.dateTimeVersion}") } } jvmMain{ diff --git a/numass-data-proto/build.gradle.kts b/numass-data-proto/build.gradle.kts index db50773..c47065c 100644 --- a/numass-data-proto/build.gradle.kts +++ b/numass-data-proto/build.gradle.kts @@ -1,7 +1,6 @@ plugins { - kotlin("jvm") - id("ru.mipt.npm.gradle.common") - id("com.squareup.wire") version "4.2.0" + id("space.kscience.gradle.jvm") + id("com.squareup.wire") version "4.4.1" `maven-publish` } @@ -12,6 +11,13 @@ dependencies { api("space.kscience:dataforge-io:$dataforgeVersion") } -wire{ - kotlin{} +wire { + kotlin { + out = "src/gen/kotlin" + } +} + + +sourceSets.main { + kotlin.srcDir("src/gen/kotlin") } diff --git a/numass-data-proto/src/gen/kotlin/ru/inr/mass/data/proto/Point.kt b/numass-data-proto/src/gen/kotlin/ru/inr/mass/data/proto/Point.kt new file mode 100644 index 0000000..1ccfaa2 --- /dev/null +++ b/numass-data-proto/src/gen/kotlin/ru/inr/mass/data/proto/Point.kt @@ -0,0 +1,659 @@ +// Code generated by Wire protocol buffer compiler, do not edit. +// Source: ru.inr.mass.data.proto.Point in numass-proto.proto +package ru.inr.mass.`data`.proto + +import com.squareup.wire.* +import com.squareup.wire.Syntax.PROTO_3 +import com.squareup.wire.internal.immutableCopyOf +import com.squareup.wire.internal.redactElements +import okio.ByteString + +public class Point( + channels: List = emptyList(), + unknownFields: ByteString = ByteString.EMPTY, +) : Message(ADAPTER, unknownFields) { + /** + * Array of measuring channels + */ + @field:WireField( + tag = 1, + adapter = "ru.inr.mass.data.proto.Point${'$'}Channel#ADAPTER", + label = WireField.Label.REPEATED, + ) + public val channels: List = immutableCopyOf("channels", channels) + + @Deprecated( + message = "Shouldn't be used in Kotlin", + level = DeprecationLevel.HIDDEN, + ) + public override fun newBuilder(): Nothing = throw + AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") + + public override fun equals(other: Any?): Boolean { + if (other === this) return true + if (other !is Point) return false + if (unknownFields != other.unknownFields) return false + if (channels != other.channels) return false + return true + } + + public override fun hashCode(): Int { + var result = super.hashCode + if (result == 0) { + result = unknownFields.hashCode() + result = result * 37 + channels.hashCode() + super.hashCode = result + } + return result + } + + public override fun toString(): String { + val result = mutableListOf() + if (channels.isNotEmpty()) result += """channels=$channels""" + return result.joinToString(prefix = "Point{", separator = ", ", postfix = "}") + } + + public fun copy(channels: List = this.channels, unknownFields: ByteString = + this.unknownFields): Point = Point(channels, unknownFields) + + public companion object { + @JvmField + public val ADAPTER: ProtoAdapter = object : ProtoAdapter( + FieldEncoding.LENGTH_DELIMITED, + Point::class, + "type.googleapis.com/ru.inr.mass.data.proto.Point", + PROTO_3, + null, + "numass-proto.proto" + ) { + public override fun encodedSize(`value`: Point): Int { + var size = value.unknownFields.size + size += Channel.ADAPTER.asRepeated().encodedSizeWithTag(1, value.channels) + return size + } + + public override fun encode(writer: ProtoWriter, `value`: Point): Unit { + Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels) + writer.writeBytes(value.unknownFields) + } + + public override fun encode(writer: ReverseProtoWriter, `value`: Point): Unit { + writer.writeBytes(value.unknownFields) + Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels) + } + + public override fun decode(reader: ProtoReader): Point { + val channels = mutableListOf() + val unknownFields = reader.forEachTag { tag -> + when (tag) { + 1 -> channels.add(Channel.ADAPTER.decode(reader)) + else -> reader.readUnknownField(tag) + } + } + return Point( + channels = channels, + unknownFields = unknownFields + ) + } + + public override fun redact(`value`: Point): Point = value.copy( + channels = value.channels.redactElements(Channel.ADAPTER), + unknownFields = ByteString.EMPTY + ) + } + + private const val serialVersionUID: Long = 0L + } + + /** + * A single channel for multichannel detector readout + */ + public class Channel( + /** + * The number of measuring channel + */ + @field:WireField( + tag = 1, + adapter = "com.squareup.wire.ProtoAdapter#UINT64", + label = WireField.Label.OMIT_IDENTITY, + ) + public val id: Long = 0L, + blocks: List = emptyList(), + unknownFields: ByteString = ByteString.EMPTY, + ) : Message(ADAPTER, unknownFields) { + /** + * Blocks + */ + @field:WireField( + tag = 2, + adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block#ADAPTER", + label = WireField.Label.REPEATED, + ) + public val blocks: List = immutableCopyOf("blocks", blocks) + + @Deprecated( + message = "Shouldn't be used in Kotlin", + level = DeprecationLevel.HIDDEN, + ) + public override fun newBuilder(): Nothing = throw + AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") + + public override fun equals(other: Any?): Boolean { + if (other === this) return true + if (other !is Channel) return false + if (unknownFields != other.unknownFields) return false + if (id != other.id) return false + if (blocks != other.blocks) return false + return true + } + + public override fun hashCode(): Int { + var result = super.hashCode + if (result == 0) { + result = unknownFields.hashCode() + result = result * 37 + id.hashCode() + result = result * 37 + blocks.hashCode() + super.hashCode = result + } + return result + } + + public override fun toString(): String { + val result = mutableListOf() + result += """id=$id""" + if (blocks.isNotEmpty()) result += """blocks=$blocks""" + return result.joinToString(prefix = "Channel{", separator = ", ", postfix = "}") + } + + public fun copy( + id: Long = this.id, + blocks: List = this.blocks, + unknownFields: ByteString = this.unknownFields, + ): Channel = Channel(id, blocks, unknownFields) + + public companion object { + @JvmField + public val ADAPTER: ProtoAdapter = object : ProtoAdapter( + FieldEncoding.LENGTH_DELIMITED, + Channel::class, + "type.googleapis.com/ru.inr.mass.data.proto.Point.Channel", + PROTO_3, + null, + "numass-proto.proto" + ) { + public override fun encodedSize(`value`: Channel): Int { + var size = value.unknownFields.size + if (value.id != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.id) + size += Block.ADAPTER.asRepeated().encodedSizeWithTag(2, value.blocks) + return size + } + + public override fun encode(writer: ProtoWriter, `value`: Channel): Unit { + if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id) + Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks) + writer.writeBytes(value.unknownFields) + } + + public override fun encode(writer: ReverseProtoWriter, `value`: Channel): Unit { + writer.writeBytes(value.unknownFields) + Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks) + if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id) + } + + public override fun decode(reader: ProtoReader): Channel { + var id: Long = 0L + val blocks = mutableListOf() + val unknownFields = reader.forEachTag { tag -> + when (tag) { + 1 -> id = ProtoAdapter.UINT64.decode(reader) + 2 -> blocks.add(Block.ADAPTER.decode(reader)) + else -> reader.readUnknownField(tag) + } + } + return Channel( + id = id, + blocks = blocks, + unknownFields = unknownFields + ) + } + + public override fun redact(`value`: Channel): Channel = value.copy( + blocks = value.blocks.redactElements(Block.ADAPTER), + unknownFields = ByteString.EMPTY + ) + } + + private const val serialVersionUID: Long = 0L + } + + /** + * A continuous measurement block + */ + public class Block( + /** + * Block start in epoch nanos + */ + @field:WireField( + tag = 1, + adapter = "com.squareup.wire.ProtoAdapter#UINT64", + label = WireField.Label.OMIT_IDENTITY, + ) + public val time: Long = 0L, + frames: List = emptyList(), + /** + * Events array + */ + @field:WireField( + tag = 3, + adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Events#ADAPTER", + label = WireField.Label.OMIT_IDENTITY, + ) + public val events: Events? = null, + /** + * block size in nanos. If missing, take from meta. + */ + @field:WireField( + tag = 4, + adapter = "com.squareup.wire.ProtoAdapter#UINT64", + label = WireField.Label.OMIT_IDENTITY, + ) + public val length: Long = 0L, + /** + * tick size in nanos. Obsolete, to be removed + */ + @field:WireField( + tag = 5, + adapter = "com.squareup.wire.ProtoAdapter#UINT64", + label = WireField.Label.OMIT_IDENTITY, + jsonName = "binSize", + ) + public val bin_size: Long = 0L, + unknownFields: ByteString = ByteString.EMPTY, + ) : Message(ADAPTER, unknownFields) { + /** + * Frames array + */ + @field:WireField( + tag = 2, + adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Frame#ADAPTER", + label = WireField.Label.REPEATED, + ) + public val frames: List = immutableCopyOf("frames", frames) + + @Deprecated( + message = "Shouldn't be used in Kotlin", + level = DeprecationLevel.HIDDEN, + ) + public override fun newBuilder(): Nothing = throw + AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") + + public override fun equals(other: Any?): Boolean { + if (other === this) return true + if (other !is Block) return false + if (unknownFields != other.unknownFields) return false + if (time != other.time) return false + if (frames != other.frames) return false + if (events != other.events) return false + if (length != other.length) return false + if (bin_size != other.bin_size) return false + return true + } + + public override fun hashCode(): Int { + var result = super.hashCode + if (result == 0) { + result = unknownFields.hashCode() + result = result * 37 + time.hashCode() + result = result * 37 + frames.hashCode() + result = result * 37 + (events?.hashCode() ?: 0) + result = result * 37 + length.hashCode() + result = result * 37 + bin_size.hashCode() + super.hashCode = result + } + return result + } + + public override fun toString(): String { + val result = mutableListOf() + result += """time=$time""" + if (frames.isNotEmpty()) result += """frames=$frames""" + if (events != null) result += """events=$events""" + result += """length=$length""" + result += """bin_size=$bin_size""" + return result.joinToString(prefix = "Block{", separator = ", ", postfix = "}") + } + + public fun copy( + time: Long = this.time, + frames: List = this.frames, + events: Events? = this.events, + length: Long = this.length, + bin_size: Long = this.bin_size, + unknownFields: ByteString = this.unknownFields, + ): Block = Block(time, frames, events, length, bin_size, unknownFields) + + public companion object { + @JvmField + public val ADAPTER: ProtoAdapter = object : ProtoAdapter( + FieldEncoding.LENGTH_DELIMITED, + Block::class, + "type.googleapis.com/ru.inr.mass.data.proto.Point.Channel.Block", + PROTO_3, + null, + "numass-proto.proto" + ) { + public override fun encodedSize(`value`: Block): Int { + var size = value.unknownFields.size + if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time) + size += Frame.ADAPTER.asRepeated().encodedSizeWithTag(2, value.frames) + if (value.events != null) size += Events.ADAPTER.encodedSizeWithTag(3, value.events) + if (value.length != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(4, value.length) + if (value.bin_size != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(5, + value.bin_size) + return size + } + + public override fun encode(writer: ProtoWriter, `value`: Block): Unit { + if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) + Frame.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.frames) + if (value.events != null) Events.ADAPTER.encodeWithTag(writer, 3, value.events) + if (value.length != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 4, value.length) + if (value.bin_size != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 5, value.bin_size) + writer.writeBytes(value.unknownFields) + } + + public override fun encode(writer: ReverseProtoWriter, `value`: Block): Unit { + writer.writeBytes(value.unknownFields) + if (value.bin_size != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 5, value.bin_size) + if (value.length != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 4, value.length) + if (value.events != null) Events.ADAPTER.encodeWithTag(writer, 3, value.events) + Frame.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.frames) + if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) + } + + public override fun decode(reader: ProtoReader): Block { + var time: Long = 0L + val frames = mutableListOf() + var events: Events? = null + var length: Long = 0L + var bin_size: Long = 0L + val unknownFields = reader.forEachTag { tag -> + when (tag) { + 1 -> time = ProtoAdapter.UINT64.decode(reader) + 2 -> frames.add(Frame.ADAPTER.decode(reader)) + 3 -> events = Events.ADAPTER.decode(reader) + 4 -> length = ProtoAdapter.UINT64.decode(reader) + 5 -> bin_size = ProtoAdapter.UINT64.decode(reader) + else -> reader.readUnknownField(tag) + } + } + return Block( + time = time, + frames = frames, + events = events, + length = length, + bin_size = bin_size, + unknownFields = unknownFields + ) + } + + public override fun redact(`value`: Block): Block = value.copy( + frames = value.frames.redactElements(Frame.ADAPTER), + events = value.events?.let(Events.ADAPTER::redact), + unknownFields = ByteString.EMPTY + ) + } + + private const val serialVersionUID: Long = 0L + } + + /** + * Raw data frame + */ + public class Frame( + /** + * Time in nanos from the beginning of the block + */ + @field:WireField( + tag = 1, + adapter = "com.squareup.wire.ProtoAdapter#UINT64", + label = WireField.Label.OMIT_IDENTITY, + ) + public val time: Long = 0L, + /** + * Frame data as an array of int16 measured in arbitrary channels + */ + @field:WireField( + tag = 2, + adapter = "com.squareup.wire.ProtoAdapter#BYTES", + label = WireField.Label.OMIT_IDENTITY, + declaredName = "data", + ) + public val data_: ByteString = ByteString.EMPTY, + unknownFields: ByteString = ByteString.EMPTY, + ) : Message(ADAPTER, unknownFields) { + @Deprecated( + message = "Shouldn't be used in Kotlin", + level = DeprecationLevel.HIDDEN, + ) + public override fun newBuilder(): Nothing = throw + AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") + + public override fun equals(other: Any?): Boolean { + if (other === this) return true + if (other !is Frame) return false + if (unknownFields != other.unknownFields) return false + if (time != other.time) return false + if (data_ != other.data_) return false + return true + } + + public override fun hashCode(): Int { + var result = super.hashCode + if (result == 0) { + result = unknownFields.hashCode() + result = result * 37 + time.hashCode() + result = result * 37 + data_.hashCode() + super.hashCode = result + } + return result + } + + public override fun toString(): String { + val result = mutableListOf() + result += """time=$time""" + result += """data_=$data_""" + return result.joinToString(prefix = "Frame{", separator = ", ", postfix = "}") + } + + public fun copy( + time: Long = this.time, + data_: ByteString = this.data_, + unknownFields: ByteString = this.unknownFields, + ): Frame = Frame(time, data_, unknownFields) + + public companion object { + @JvmField + public val ADAPTER: ProtoAdapter = object : ProtoAdapter( + FieldEncoding.LENGTH_DELIMITED, + Frame::class, + "type.googleapis.com/ru.inr.mass.data.proto.Point.Channel.Block.Frame", + PROTO_3, + null, + "numass-proto.proto" + ) { + public override fun encodedSize(`value`: Frame): Int { + var size = value.unknownFields.size + if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time) + if (value.data_ != ByteString.EMPTY) size += ProtoAdapter.BYTES.encodedSizeWithTag(2, + value.data_) + return size + } + + public override fun encode(writer: ProtoWriter, `value`: Frame): Unit { + if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) + if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2, + value.data_) + writer.writeBytes(value.unknownFields) + } + + public override fun encode(writer: ReverseProtoWriter, `value`: Frame): Unit { + writer.writeBytes(value.unknownFields) + if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2, + value.data_) + if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) + } + + public override fun decode(reader: ProtoReader): Frame { + var time: Long = 0L + var data_: ByteString = ByteString.EMPTY + val unknownFields = reader.forEachTag { tag -> + when (tag) { + 1 -> time = ProtoAdapter.UINT64.decode(reader) + 2 -> data_ = ProtoAdapter.BYTES.decode(reader) + else -> reader.readUnknownField(tag) + } + } + return Frame( + time = time, + data_ = data_, + unknownFields = unknownFields + ) + } + + public override fun redact(`value`: Frame): Frame = value.copy( + unknownFields = ByteString.EMPTY + ) + } + + private const val serialVersionUID: Long = 0L + } + } + + /** + * Event block obtained directly from device of from frame analysis + * In order to save space, times and amplitudes are in separate arrays. + * Amplitude and time with the same index correspond to the same event + */ + public class Events( + times: List = emptyList(), + amplitudes: List = emptyList(), + unknownFields: ByteString = ByteString.EMPTY, + ) : Message(ADAPTER, unknownFields) { + /** + * Array of time in nanos from the beginning of the block + */ + @field:WireField( + tag = 1, + adapter = "com.squareup.wire.ProtoAdapter#UINT64", + label = WireField.Label.PACKED, + ) + public val times: List = immutableCopyOf("times", times) + + /** + * Array of amplitudes of events in channels + */ + @field:WireField( + tag = 2, + adapter = "com.squareup.wire.ProtoAdapter#UINT64", + label = WireField.Label.PACKED, + ) + public val amplitudes: List = immutableCopyOf("amplitudes", amplitudes) + + @Deprecated( + message = "Shouldn't be used in Kotlin", + level = DeprecationLevel.HIDDEN, + ) + public override fun newBuilder(): Nothing = throw + AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") + + public override fun equals(other: Any?): Boolean { + if (other === this) return true + if (other !is Events) return false + if (unknownFields != other.unknownFields) return false + if (times != other.times) return false + if (amplitudes != other.amplitudes) return false + return true + } + + public override fun hashCode(): Int { + var result = super.hashCode + if (result == 0) { + result = unknownFields.hashCode() + result = result * 37 + times.hashCode() + result = result * 37 + amplitudes.hashCode() + super.hashCode = result + } + return result + } + + public override fun toString(): String { + val result = mutableListOf() + if (times.isNotEmpty()) result += """times=$times""" + if (amplitudes.isNotEmpty()) result += """amplitudes=$amplitudes""" + return result.joinToString(prefix = "Events{", separator = ", ", postfix = "}") + } + + public fun copy( + times: List = this.times, + amplitudes: List = this.amplitudes, + unknownFields: ByteString = this.unknownFields, + ): Events = Events(times, amplitudes, unknownFields) + + public companion object { + @JvmField + public val ADAPTER: ProtoAdapter = object : ProtoAdapter( + FieldEncoding.LENGTH_DELIMITED, + Events::class, + "type.googleapis.com/ru.inr.mass.data.proto.Point.Channel.Block.Events", + PROTO_3, + null, + "numass-proto.proto" + ) { + public override fun encodedSize(`value`: Events): Int { + var size = value.unknownFields.size + size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(1, value.times) + size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(2, value.amplitudes) + return size + } + + public override fun encode(writer: ProtoWriter, `value`: Events): Unit { + ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times) + ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes) + writer.writeBytes(value.unknownFields) + } + + public override fun encode(writer: ReverseProtoWriter, `value`: Events): Unit { + writer.writeBytes(value.unknownFields) + ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes) + ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times) + } + + public override fun decode(reader: ProtoReader): Events { + val times = mutableListOf() + val amplitudes = mutableListOf() + val unknownFields = reader.forEachTag { tag -> + when (tag) { + 1 -> times.add(ProtoAdapter.UINT64.decode(reader)) + 2 -> amplitudes.add(ProtoAdapter.UINT64.decode(reader)) + else -> reader.readUnknownField(tag) + } + } + return Events( + times = times, + amplitudes = amplitudes, + unknownFields = unknownFields + ) + } + + public override fun redact(`value`: Events): Events = value.copy( + unknownFields = ByteString.EMPTY + ) + } + + private const val serialVersionUID: Long = 0L + } + } + } + } +} diff --git a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassDirectorySet.kt b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassDirectorySet.kt index 50b616f..2799443 100644 --- a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassDirectorySet.kt +++ b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassDirectorySet.kt @@ -4,10 +4,7 @@ import ru.inr.mass.data.api.NumassPoint import ru.inr.mass.data.api.NumassSet import ru.inr.mass.data.api.NumassSet.Companion.NUMASS_HV_TARGET import ru.inr.mass.data.api.readEnvelope -import space.kscience.dataforge.context.Context -import space.kscience.dataforge.context.error -import space.kscience.dataforge.context.logger -import space.kscience.dataforge.context.warn +import space.kscience.dataforge.context.* import space.kscience.dataforge.io.io import space.kscience.dataforge.io.readEnvelopeFile import space.kscience.dataforge.meta.Meta @@ -16,14 +13,16 @@ import space.kscience.dataforge.names.Name import space.kscience.dataforge.names.asName import java.nio.file.Files import java.nio.file.Path +import java.util.stream.Collectors import kotlin.io.path.* -import kotlin.streams.toList -@OptIn(ExperimentalPathApi::class) public class NumassDirectorySet internal constructor( - public val context: Context, + public val numassProto: NumassProtoPlugin, public val path: Path, -) : NumassSet { +) : NumassSet, ContextAware { + + override val context: Context + get() = numassProto.context @OptIn(DFExperimental::class) override val meta: Meta @@ -43,12 +42,12 @@ public class NumassDirectorySet internal constructor( it.fileName.name.startsWith("p") }.map { pointPath -> try { - context.readNumassPointFile(pointPath) + numassProto.readNumassPointFile(pointPath) } catch (e: Exception) { context.logger.error(e) { "Error reading Numass point file $pointPath" } null } - }.toList().filterNotNull() + }.collect(Collectors.toList()).filterNotNull() @OptIn(DFExperimental::class) @@ -73,20 +72,3 @@ public class NumassDirectorySet internal constructor( public companion object } - -@OptIn(DFExperimental::class) -public fun Context.readNumassPointFile(path: Path): NumassPoint? { - val envelope = io.readEnvelopeFile(path) - return ProtoNumassPoint.fromEnvelope(envelope) -} - -public fun Context.readNumassPointFile(path: String): NumassPoint? = readNumassPointFile(Path.of(path)) - -@OptIn(ExperimentalPathApi::class) -public fun Context.readNumassDirectory(path: Path): NumassDirectorySet { - if (!path.exists()) error("Path $path does not exist") - if (!path.isDirectory()) error("The path $path is not a directory") - return NumassDirectorySet(this, path) -} - -public fun Context.readNumassDirectory(path: String): NumassDirectorySet = readNumassDirectory(Path.of(path)) \ No newline at end of file diff --git a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassProtoPlugin.kt b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassProtoPlugin.kt index f9a626b..cd87b51 100644 --- a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassProtoPlugin.kt +++ b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/NumassProtoPlugin.kt @@ -1,28 +1,77 @@ package ru.inr.mass.data.proto +import kotlinx.coroutines.launch +import ru.inr.mass.data.api.NumassPoint import space.kscience.dataforge.context.AbstractPlugin import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.PluginFactory import space.kscience.dataforge.context.PluginTag +import space.kscience.dataforge.data.DataSource +import space.kscience.dataforge.data.DataTree +import space.kscience.dataforge.data.static import space.kscience.dataforge.io.EnvelopeFormatFactory import space.kscience.dataforge.io.IOPlugin +import space.kscience.dataforge.io.readEnvelopeFile import space.kscience.dataforge.meta.Meta +import space.kscience.dataforge.misc.DFExperimental import space.kscience.dataforge.names.Name +import space.kscience.dataforge.names.NameToken +import java.nio.file.Files +import java.nio.file.Path +import kotlin.io.path.exists +import kotlin.io.path.isDirectory +import kotlin.io.path.relativeTo import kotlin.reflect.KClass public class NumassProtoPlugin : AbstractPlugin() { public val io: IOPlugin by require(IOPlugin) override val tag: PluginTag get() = Companion.tag - override fun content(target: String): Map = if(target == EnvelopeFormatFactory.ENVELOPE_FORMAT_TYPE){ + override fun content(target: String): Map = if (target == EnvelopeFormatFactory.ENVELOPE_FORMAT_TYPE) { mapOf(TaggedNumassEnvelopeFormat.name to TaggedNumassEnvelopeFormat) - } else{ + } else { super.content(target) } public companion object : PluginFactory { - override fun invoke(meta: Meta, context: Context): NumassProtoPlugin = NumassProtoPlugin() + override fun build(context: Context, meta: Meta): NumassProtoPlugin = NumassProtoPlugin() override val tag: PluginTag = PluginTag("numass-proto", group = "ru.inr.mass") override val type: KClass = NumassProtoPlugin::class } } + + +@OptIn(DFExperimental::class) +public fun NumassProtoPlugin.readNumassPointFile(path: Path): NumassPoint? { + val envelope = io.readEnvelopeFile(path) + return ProtoNumassPoint.fromEnvelope(envelope) +} + +public fun NumassProtoPlugin.readNumassPointFile(path: String): NumassPoint? = readNumassPointFile(Path.of(path)) + +public fun NumassProtoPlugin.readNumassDirectory(path: Path): NumassDirectorySet { + if (!path.exists()) error("Path $path does not exist") + if (!path.isDirectory()) error("The path $path is not a directory") + return NumassDirectorySet(this, path) +} + +public fun NumassProtoPlugin.readNumassDirectory(path: String): NumassDirectorySet = readNumassDirectory(Path.of(path)) +public suspend fun NumassProtoPlugin.readRepository(path: Path): DataTree = DataSource { + Files.walk(path).filter { + it.isDirectory() && it.resolve("meta").exists() + }.forEach { childPath -> + val name = Name(childPath.relativeTo(path).map { segment -> + NameToken(segment.fileName.toString()) + }) + val value = readNumassDirectory(childPath) + launch { + static(name, value, value.meta) + } + } + //TODO add file watcher +} + +public suspend fun NumassProtoPlugin.readRepository(path: String): DataTree = readRepository(Path.of(path)) + +public fun NumassProtoPlugin.readPoint(path: String): NumassPoint = readNumassPointFile(path) + ?: error("Can't read numass point at $path") diff --git a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/ProtoNumassPoint.kt b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/ProtoNumassPoint.kt index f621bf5..ac28838 100644 --- a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/ProtoNumassPoint.kt +++ b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/ProtoNumassPoint.kt @@ -31,9 +31,6 @@ import ru.inr.mass.data.api.NumassFrame import ru.inr.mass.data.api.NumassPoint import space.kscience.dataforge.io.Envelope import space.kscience.dataforge.meta.* -import space.kscience.dataforge.values.ValueType -import space.kscience.dataforge.values.long -import space.kscience.dataforge.values.string import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.InputStream @@ -87,9 +84,10 @@ internal class ProtoNumassPoint( override val startTime: Instant get() { val startTimeValue = meta["start_time"]?.value - return when{ + return when { startTimeValue == null -> Instant.DISTANT_PAST - startTimeValue.type == ValueType.STRING -> LocalDateTime.parse(startTimeValue.string).toInstant(TimeZone.UTC) + startTimeValue.type == ValueType.STRING -> LocalDateTime.parse(startTimeValue.string) + .toInstant(TimeZone.UTC) //TODO fix time zones!!! startTimeValue.type == ValueType.NUMBER -> Instant.fromEpochMilliseconds(startTimeValue.long) else -> error("Can't decode start time") @@ -116,7 +114,7 @@ internal class ProtoNumassPoint( override fun toString(): String = "ProtoNumassPoint(index = ${index}, hv = $voltage)" - public companion object { + companion object { /** * Get valid data stream utilizing compression if it is present @@ -142,6 +140,7 @@ internal class ProtoNumassPoint( inflater.end() ByteArrayInputStream(unzippeddata).use(block) } + else -> { data?.read { block(asInputStream()) @@ -149,7 +148,7 @@ internal class ProtoNumassPoint( } } - public fun fromEnvelope(envelope: Envelope): ProtoNumassPoint? { + fun fromEnvelope(envelope: Envelope): ProtoNumassPoint? { if (envelope.data == null) return null return ProtoNumassPoint(envelope.meta) { envelope.useData { @@ -180,6 +179,7 @@ public class ProtoNumassBlock( block.length > 0 -> block.length.nanoseconds parent?.meta?.get("acquisition_time") != null -> (parent.meta["acquisition_time"].double ?: (0.0 * 1000)).milliseconds + else -> { LoggerFactory.getLogger(javaClass) .error("No length information on block. Trying to infer from first and last events") @@ -221,7 +221,8 @@ public class ProtoNumassBlock( } else { ShortArray(shortBuffer.limit()) { shortBuffer.get(it) } } - FrameType.TQDC2021 -> ShortArray(shortBuffer.limit()){ + + FrameType.TQDC2021 -> ShortArray(shortBuffer.limit()) { (shortBuffer.get(it).toUShort().toInt() - Short.MAX_VALUE).toShort() } } diff --git a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/TaggedNumassEnvelopeFormat.kt b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/TaggedNumassEnvelopeFormat.kt index 5266e8d..ef9b310 100644 --- a/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/TaggedNumassEnvelopeFormat.kt +++ b/numass-data-proto/src/main/kotlin/ru/inr/mass/data/proto/TaggedNumassEnvelopeFormat.kt @@ -18,18 +18,19 @@ package ru.inr.mass.data.proto import io.ktor.utils.io.core.* import space.kscience.dataforge.context.Context +import space.kscience.dataforge.context.invoke import space.kscience.dataforge.io.* import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.get import space.kscience.dataforge.meta.string import space.kscience.dataforge.names.Name -import space.kscience.dataforge.names.plus +import space.kscience.dataforge.names.parseAsName import java.util.* public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeFormat { - private fun Tag.toBinary() = Binary(24) { + private fun Tag.toBinary() = Binary { writeRawString(START_SEQUENCE) writeRawString("DFNU") writeShort(metaFormatKey) @@ -70,7 +71,7 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm val metaFormat = io.resolveMetaFormat(tag.metaFormatKey) ?: error("Meta format with key ${tag.metaFormatKey} not found") - val meta: Meta = metaFormat.readObject(input.readBinary(tag.metaSize.toInt())) + val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt())) val data = input.readBinary(tag.dataSize.toInt()) @@ -87,10 +88,10 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm ?: error("Meta format with key ${tag.metaFormatKey} not found") } - val meta: Meta = metaFormat.readObject(input.readBinary(tag.metaSize.toInt())) + val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt())) - return PartialEnvelope(meta, 30u + tag.metaSize, tag.dataSize) + return PartialEnvelope(meta, 30 + tag.metaSize.toInt(), tag.dataSize) } private data class Tag( @@ -99,17 +100,17 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm val dataSize: ULong, ) - override fun toMeta(): Meta = Meta { - IOFormat.NAME_KEY put name.toString() - } +// override fun toMeta(): Meta = Meta { +// NAME_KEY put name.toString() +// } public companion object : EnvelopeFormatFactory { private const val START_SEQUENCE = "#!" private const val END_SEQUENCE = "!#\r\n" - override val name: Name = super.name + "numass" + override val name: Name = "envelope.numass".parseAsName() - override fun invoke(meta: Meta, context: Context): EnvelopeFormat { + override fun build(context: Context, meta: Meta): EnvelopeFormat { val io = context.io val metaFormatName = meta["name"].string?.let { Name.parse(it) } ?: JsonMetaFormat.name diff --git a/numass-data-proto/src/main/proto/ru/inr/mass/data/proto/numass-proto.proto b/numass-data-proto/src/main/proto/numass-proto.proto similarity index 100% rename from numass-data-proto/src/main/proto/ru/inr/mass/data/proto/numass-proto.proto rename to numass-data-proto/src/main/proto/numass-proto.proto diff --git a/numass-data-proto/src/test/kotlin/ru/inr/mass/data/proto/TestNumassDirectory.kt b/numass-data-proto/src/test/kotlin/ru/inr/mass/data/proto/TestNumassDirectory.kt index 0dcc5f9..ac6ea64 100644 --- a/numass-data-proto/src/test/kotlin/ru/inr/mass/data/proto/TestNumassDirectory.kt +++ b/numass-data-proto/src/test/kotlin/ru/inr/mass/data/proto/TestNumassDirectory.kt @@ -6,9 +6,10 @@ import ru.inr.mass.data.api.NumassSet import ru.inr.mass.data.api.ParentBlock import ru.inr.mass.data.api.channels import space.kscience.dataforge.context.Context +import space.kscience.dataforge.context.fetch +import space.kscience.dataforge.meta.ListValue import space.kscience.dataforge.meta.get import space.kscience.dataforge.meta.string -import space.kscience.dataforge.values.ListValue import java.nio.file.Path import kotlin.test.assertEquals @@ -16,11 +17,12 @@ class TestNumassDirectory { val context = Context("numass-test") { plugin(NumassProtoPlugin) } + val numassProto = context.fetch(NumassProtoPlugin) @Test fun testDanteRead() { val dataPath = Path.of("src/test/resources", "testData/dante") - val testSet = context.readNumassDirectory(dataPath) + val testSet = numassProto.readNumassDirectory(dataPath) assertEquals("2018-04-13T22:01:46", testSet.meta["end_time"].string) assertEquals(ListValue.EMPTY, testSet.meta["comments"]?.value) assertEquals(31, testSet.points.size) @@ -32,12 +34,12 @@ class TestNumassDirectory { @Test fun testTQDCRead() = runBlocking { val pointPath = Path.of("src/test/resources", "testData/tqdc") - val set: NumassSet = context.readNumassDirectory(pointPath) + val set: NumassSet = numassProto.readNumassDirectory(pointPath) val point = set.first { it.voltage == 18200.0 } point.channels.forEach { (channel, block) -> println("$channel: $block") - if(block is ParentBlock){ - block.blocks.toList().forEach{ + if (block is ParentBlock) { + block.blocks.toList().forEach { println("\t${it.channel}:${it.eventsCount}") } } diff --git a/numass-data-server/build.gradle.kts b/numass-data-server/build.gradle.kts index 66db8e0..50d2eae 100644 --- a/numass-data-server/build.gradle.kts +++ b/numass-data-server/build.gradle.kts @@ -1,13 +1,14 @@ plugins { - kotlin("multiplatform") - id("ru.mipt.npm.gradle.common") + id("space.kscience.gradle.mpp") `maven-publish` } -val visionForgeVersion = "0.2.0-dev-24" +val visionForgeVersion: String by rootProject.extra + +val production: Boolean by rootProject.extra(false) kotlin { - js{ + js(IR) { browser { webpackTask { this.outputFileName = "js/numass-web.js" @@ -16,17 +17,6 @@ kotlin { binaries.executable() } - afterEvaluate { - val jsBrowserDistribution by tasks.getting - - tasks.getByName("jvmProcessResources") { - dependsOn(jsBrowserDistribution) - afterEvaluate { - from(jsBrowserDistribution) - } - } - } - sourceSets { commonMain { dependencies { @@ -44,8 +34,26 @@ kotlin { } } -kscience{ +afterEvaluate { + val distributionTask = if (production) { + tasks.getByName("jsBrowserDistribution") + } else { + tasks.getByName("jsBrowserDevelopmentExecutableDistribution") + } + + tasks.getByName("jvmProcessResources") { + dependsOn(distributionTask) + from(distributionTask) + include("**/*.js") + if (production) { + include("**/*.map") + } + } +} + +kscience { useSerialization { json() } + withContextReceivers() } diff --git a/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/NumassCommonPlugin.kt b/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/NumassCommonPlugin.kt index 8f0556b..40ad87b 100644 --- a/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/NumassCommonPlugin.kt +++ b/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/NumassCommonPlugin.kt @@ -8,28 +8,22 @@ import space.kscience.dataforge.context.PluginFactory import space.kscience.dataforge.context.PluginTag import space.kscience.dataforge.meta.Meta import space.kscience.visionforge.Vision -import space.kscience.visionforge.VisionBase -import space.kscience.visionforge.VisionGroupBase import space.kscience.visionforge.VisionPlugin -import space.kscience.visionforge.plotly.PlotlyPlugin import kotlin.reflect.KClass -public class NumassCommonPlugin(meta: Meta) : VisionPlugin(meta) { +public class NumassCommonPlugin(meta: Meta = Meta.EMPTY) : VisionPlugin(meta) { override val tag: PluginTag get() = Companion.tag - public val plotlyPlugin: PlotlyPlugin by require(PlotlyPlugin) - override val visionSerializersModule: SerializersModule get() = numassSerializersModule public companion object : PluginFactory { override val tag: PluginTag = PluginTag("numass.common", "ru.inr.mass") override val type: KClass = NumassCommonPlugin::class - override fun invoke(meta: Meta, context: Context): NumassCommonPlugin = NumassCommonPlugin() - private val numassSerializersModule = SerializersModule { + override fun build(context: Context, meta: Meta): NumassCommonPlugin = NumassCommonPlugin() + + internal val numassSerializersModule = SerializersModule { polymorphic(Vision::class) { - subclass(VisionBase.serializer()) - subclass(VisionGroupBase.serializer()) subclass(VisionOfNumassHv.serializer()) subclass(VisionOfNumassPoint.serializer()) subclass(VisionOfNumassHv.serializer()) diff --git a/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/VisionOfNumassPoint.kt b/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/VisionOfNumassPoint.kt index 0739976..3703159 100644 --- a/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/VisionOfNumassPoint.kt +++ b/numass-data-server/src/commonMain/kotlin/ru/inr/mass/data/server/VisionOfNumassPoint.kt @@ -1,24 +1,23 @@ package ru.inr.mass.data.server -import kotlinx.coroutines.flow.collect import kotlinx.serialization.Serializable import ru.inr.mass.data.api.NumassBlock import ru.inr.mass.data.api.NumassPoint import ru.inr.mass.data.api.NumassSet import ru.inr.mass.data.api.NumassSet.Companion.NUMASS_HV_TARGET +import ru.inr.mass.data.api.channels import ru.inr.mass.data.proto.HVData import ru.inr.mass.data.proto.HVEntry import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.names.NameToken import space.kscience.dataforge.provider.top -import space.kscience.visionforge.VisionBase -import space.kscience.visionforge.VisionGroupBase +import space.kscience.visionforge.AbstractVision -public typealias SimpleAmplitudeSpectrum = Map +public typealias SimpleAmplitudeSpectrum = Map -private suspend fun NumassBlock.simpleAmplitudeSpectrum(): SimpleAmplitudeSpectrum { - val res = mutableMapOf() +internal suspend fun NumassBlock.simpleAmplitudeSpectrum(): SimpleAmplitudeSpectrum { + val res = mutableMapOf() events.collect { res[it.amplitude] = (res[it.amplitude] ?: 0U) + 1U } @@ -31,26 +30,26 @@ public class VisionOfNumassPoint( public val index: Int, public val voltage: Double, public val spectra: Map, -) : VisionBase() +) : AbstractVision() public suspend fun NumassPoint.toVision(): VisionOfNumassPoint = VisionOfNumassPoint( meta, index, voltage, - getChannels().entries.associate { (k, v) -> + channels.entries.associate { (k, v) -> k.toString() to v.simpleAmplitudeSpectrum() } ) @Serializable -public class VisionOfNumassHv(public val hv: HVData) : VisionBase(), Iterable { +public class VisionOfNumassHv(public val hv: HVData) : AbstractVision(), Iterable { override fun iterator(): Iterator = hv.iterator() } private val VisionOfNumassPoint.token: NameToken get() = NameToken("point", index.toString()) @Serializable -public class VisionOfNumassSet(public val points: List) : VisionBase() { +public class VisionOfNumassSet(public val points: List) : AbstractVision() { // init { // points.forEach { // //childrenInternal[it.token] = it @@ -61,6 +60,6 @@ public class VisionOfNumassSet(public val points: List) : V public suspend fun NumassSet.toVision(): VisionOfNumassSet = VisionOfNumassSet(points.map { it.toVision() }).apply { this@toVision.top(NUMASS_HV_TARGET).forEach { (key, hv) -> - // set(key, VisionOfNumassHv(hv)) + // set(key, VisionOfNumassHv(hv)) } } diff --git a/numass-data-server/src/jsMain/kotlin/ru/inr/mass/data/server/NumassJsPlugin.kt b/numass-data-server/src/jsMain/kotlin/ru/inr/mass/data/server/NumassJsPlugin.kt index dd85906..3536c61 100644 --- a/numass-data-server/src/jsMain/kotlin/ru/inr/mass/data/server/NumassJsPlugin.kt +++ b/numass-data-server/src/jsMain/kotlin/ru/inr/mass/data/server/NumassJsPlugin.kt @@ -8,17 +8,22 @@ import space.kscience.dataforge.context.Context import space.kscience.dataforge.context.PluginFactory import space.kscience.dataforge.context.PluginTag import space.kscience.dataforge.meta.Meta +import space.kscience.dataforge.names.Name +import space.kscience.dataforge.names.asName import space.kscience.plotly.models.LineShape import space.kscience.plotly.models.ScatterMode -import space.kscience.plotly.plot +import space.kscience.plotly.plotElement import space.kscience.plotly.scatter import space.kscience.visionforge.ElementVisionRenderer import space.kscience.visionforge.Vision +import space.kscience.visionforge.VisionClient +import space.kscience.visionforge.plotly.PlotlyPlugin import kotlin.reflect.KClass public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer { + public val client: VisionClient by require(VisionClient) public val numassCommon: NumassCommonPlugin by require(NumassCommonPlugin) - private val plotly = numassCommon.plotlyPlugin + public val plotly: PlotlyPlugin by require(PlotlyPlugin) override val tag: PluginTag get() = Companion.tag @@ -27,6 +32,11 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer { else -> ElementVisionRenderer.ZERO_RATING } + override fun content(target: String): Map = when (target) { + ElementVisionRenderer.TYPE -> mapOf("numass".asName() to this) + else -> super.content(target) + } + override fun render(element: Element, vision: Vision, meta: Meta) { when (vision) { is VisionOfNumassHv -> element.append { @@ -47,22 +57,25 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer { } } } + is VisionOfNumassPoint -> element.append { - h1{ +"Point"} - plot { + h1 { +"Point" } + plotElement { vision.spectra.forEach { (channel, spectrum) -> + val pairs = spectrum.entries.sortedBy { it.key } scatter { name = channel mode = ScatterMode.lines line { shape = LineShape.hv } - x.numbers = spectrum.keys.map { it.toInt() } - y.numbers = spectrum.values.map { it.toInt() } + x.numbers = pairs.map { it.key.toInt() } + y.numbers = pairs.map { it.value.toInt() } } } } } + is VisionOfNumassSet -> {} } } @@ -71,6 +84,8 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer { public companion object : PluginFactory { override val tag: PluginTag = PluginTag("numass.js", "ru.inr.mass") override val type: KClass = NumassJsPlugin::class - override fun invoke(meta: Meta, context: Context): NumassJsPlugin = NumassJsPlugin() + + override fun build(context: Context, meta: Meta): NumassJsPlugin = NumassJsPlugin() + } } \ No newline at end of file diff --git a/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/demo.kt b/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/demo.kt deleted file mode 100644 index 4365abf..0000000 --- a/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/demo.kt +++ /dev/null @@ -1,53 +0,0 @@ -package ru.inr.mass.data.server - -import kotlinx.coroutines.runBlocking -import kotlinx.html.div -import kotlinx.html.h1 -import ru.inr.mass.data.api.NumassPoint -import ru.inr.mass.data.proto.NumassProtoPlugin -import ru.inr.mass.data.proto.readNumassPointFile -import space.kscience.dataforge.context.Context -import space.kscience.visionforge.three.server.close -import space.kscience.visionforge.three.server.serve -import space.kscience.visionforge.three.server.show -import space.kscience.visionforge.visionManager -import java.nio.file.Path - - -public fun main() { - val context = Context("Numass") { - plugin(NumassProtoPlugin) - plugin(NumassCommonPlugin) - } - - val pointPath = Path.of("C:\\Users\\altavir\\Desktop\\p20211122173034(20s).dat") - val point: NumassPoint = context.readNumassPointFile(pointPath)!! - - val visionOfNumass = runBlocking { - point.toVision() - } - - val server = context.visionManager.serve { - //use client library - useNumassWeb() - //use css - //useCss("css/styles.css") - page { - div("flex-column") { - h1 { +"Satellite detector demo" } - //vision(visionOfNumass) - } - } - } - - server.show() - - - println("Enter 'exit' to close server") - while (readLine() != "exit") { - // - } - - server.close() - -} \ No newline at end of file diff --git a/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverDemo.kt b/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverDemo.kt new file mode 100644 index 0000000..8392cc2 --- /dev/null +++ b/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverDemo.kt @@ -0,0 +1,50 @@ +package ru.inr.mass.data.server + +import kotlinx.html.div +import kotlinx.html.h1 +import ru.inr.mass.data.api.NumassPoint +import ru.inr.mass.data.proto.NumassProtoPlugin +import ru.inr.mass.data.proto.readNumassPointFile +import space.kscience.dataforge.context.Context +import space.kscience.dataforge.context.fetch +import space.kscience.visionforge.html.VisionPage +import space.kscience.visionforge.server.close +import space.kscience.visionforge.server.openInBrowser +import space.kscience.visionforge.server.serve +import space.kscience.visionforge.visionManager +import java.nio.file.Path + + +public suspend fun main() { + val context = Context("Numass") { + plugin(NumassProtoPlugin) + plugin(NumassCommonPlugin) + } + val numassProto = context.fetch(NumassProtoPlugin) + + val pointPath = Path.of("D:\\Work\\Numass\\data\\test\\set_7\\p120(30s)(HV1=13300)") + val point: NumassPoint = numassProto.readNumassPointFile(pointPath)!! + + val visionOfNumass = point.toVision() + + val server = context.visionManager.serve { + header("numass", VisionPage.scriptHeader("js/numass-web.js")) + page { + div("flex-column") { + h1 { +"Visionforge file demo" } + vision { visionOfNumass } + } + } + } + + server.openInBrowser() + + + println("Enter 'exit' to close server") + while (readLine() != "exit") { + // + } + + server.close() + +} \ No newline at end of file diff --git a/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverExtensions.kt b/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverExtensions.kt index 97706e2..7ca1ebd 100644 --- a/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverExtensions.kt +++ b/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/serverExtensions.kt @@ -4,29 +4,26 @@ import space.kscience.dataforge.context.Context import space.kscience.dataforge.misc.DFExperimental import space.kscience.visionforge.html.HtmlVisionFragment import space.kscience.visionforge.html.ResourceLocation -import space.kscience.visionforge.html.page -import space.kscience.visionforge.html.scriptHeader +import space.kscience.visionforge.html.VisionPage +import space.kscience.visionforge.html.importScriptHeader import space.kscience.visionforge.makeFile -import space.kscience.visionforge.three.server.VisionServer -import space.kscience.visionforge.three.server.useScript import java.awt.Desktop import java.nio.file.Path -public fun VisionServer.useNumassWeb(): Unit { - useScript("js/numass-web.js") -} - @DFExperimental public fun Context.makeNumassWebFile( - content: HtmlVisionFragment, path: Path? = null, title: String = "VisionForge Numass page", resourceLocation: ResourceLocation = ResourceLocation.SYSTEM, show: Boolean = true, + content: HtmlVisionFragment, ): Unit { - val actualPath = page(title, content = content).makeFile(path) { actualPath -> - mapOf("numassWeb" to scriptHeader("js/numass-web.js", resourceLocation, actualPath)) + val actualPath = VisionPage(this, content = content).makeFile(path) { actualPath: Path -> + mapOf( + "title" to VisionPage.title(title), + "numassWeb" to VisionPage.importScriptHeader("js/numass-web.js", resourceLocation, actualPath) + ) } if (show) Desktop.getDesktop().browse(actualPath.toFile().toURI()) } diff --git a/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/staticDemo.kt b/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/staticDemo.kt new file mode 100644 index 0000000..1456d49 --- /dev/null +++ b/numass-data-server/src/jvmMain/kotlin/ru/inr/mass/data/server/staticDemo.kt @@ -0,0 +1,28 @@ +package ru.inr.mass.data.server + +import ru.inr.mass.data.api.NumassPoint +import ru.inr.mass.data.proto.NumassProtoPlugin +import ru.inr.mass.data.proto.readNumassPointFile +import space.kscience.dataforge.context.Context +import space.kscience.dataforge.context.fetch +import java.nio.file.Path + + +@Suppress("OPT_IN_USAGE") +public suspend fun main() { + val context = Context("Numass") { + plugin(NumassProtoPlugin) + plugin(NumassCommonPlugin) + } + + val numassProto = context.fetch(NumassProtoPlugin) + + val pointPath = Path.of("D:\\Work\\Numass\\data\\test\\set_7\\p120(30s)(HV1=13300)") + val point: NumassPoint = numassProto.readNumassPointFile(pointPath)!! + + val visionOfNumass: VisionOfNumassPoint = point.toVision() + + context.makeNumassWebFile { + vision { visionOfNumass } + } +} \ No newline at end of file diff --git a/numass-detector-client/build.gradle.kts b/numass-detector-client/build.gradle.kts index de6b6bb..9016c65 100644 --- a/numass-detector-client/build.gradle.kts +++ b/numass-detector-client/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("ru.mipt.npm.gradle.jvm") + id("space.kscience.gradle.jvm") } val dataforgeVersion: String by rootProject.extra diff --git a/numass-model/build.gradle.kts b/numass-model/build.gradle.kts index 3df8a43..721289d 100644 --- a/numass-model/build.gradle.kts +++ b/numass-model/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("ru.mipt.npm.gradle.mpp") + id("space.kscience.gradle.mpp") `maven-publish` } diff --git a/numass-workspace/build.gradle.kts b/numass-workspace/build.gradle.kts index f867802..18e9212 100644 --- a/numass-workspace/build.gradle.kts +++ b/numass-workspace/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("ru.mipt.npm.gradle.jvm") - id("com.github.johnrengelman.shadow") version "7.1.1" + id("space.kscience.gradle.jvm") + id("com.github.johnrengelman.shadow") version "7.1.2" `maven-publish` } @@ -9,7 +9,7 @@ kotlin { } val dataforgeVersion: String by rootProject.extra -val plotlyVersion: String by rootProject.extra("0.5.0") +val visionForgeVersion: String by rootProject.extra val kmathVersion: String by rootProject.extra val tablesVersion: String by rootProject.extra @@ -18,9 +18,10 @@ dependencies { implementation(projects.numassModel) implementation(projects.numassAnalysis) implementation("space.kscience:dataforge-workspace:$dataforgeVersion") - implementation("space.kscience:plotlykt-jupyter:$plotlyVersion") + implementation("space.kscience:kmath-jupyter:$kmathVersion") implementation("space.kscience:tables-kt:$tablesVersion") + implementation("space.kscience:visionforge-plotly:$visionForgeVersion") } kscience{ diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/notebook/NumassJupyter.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/notebook/NumassJupyter.kt index c660607..003f3a7 100644 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/notebook/NumassJupyter.kt +++ b/numass-workspace/src/main/kotlin/ru/inr/mass/notebook/NumassJupyter.kt @@ -5,6 +5,7 @@ import kotlinx.coroutines.runBlocking import kotlinx.html.* import kotlinx.html.stream.createHTML import org.jetbrains.kotlinx.jupyter.api.HTML +import org.jetbrains.kotlinx.jupyter.api.declare import org.jetbrains.kotlinx.jupyter.api.libraries.JupyterIntegration import ru.inr.mass.data.api.NumassBlock import ru.inr.mass.data.api.NumassFrame @@ -23,7 +24,8 @@ import space.kscience.plotly.toPage internal class NumassJupyter : JupyterIntegration() { override fun Builder.onLoaded() { repositories( - "https://repo.kotlin.link" + "https://repo.kotlin.link", + "https://maven.pkg.jetbrains.space/spc/p/sci/dev" ) import( @@ -39,6 +41,9 @@ internal class NumassJupyter : JupyterIntegration() { import() + onLoaded { + declare("Numass" to Numass, "workspace" to Numass.workspace) + } render { HTML(Plotly.plotNumassBlock(it).toPage().render()) @@ -60,7 +65,7 @@ internal class NumassJupyter : JupyterIntegration() { } render> { tree -> - HTML(createHTML().div { numassTree(tree)}) + HTML(createHTML().div { numassTree(tree) }) } } } @@ -68,7 +73,7 @@ internal class NumassJupyter : JupyterIntegration() { private fun FlowContent.numassTree(tree: DataTree) { ul { runBlocking { - tree.items().forEach { (token, treeItem) -> + tree.items.forEach { (token, treeItem) -> li { p { +token.toString() } when (treeItem) { diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/demo.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/demo.kt index b2b2d6a..9427e1c 100644 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/demo.kt +++ b/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/demo.kt @@ -5,13 +5,13 @@ import ru.inr.mass.workspace.Numass.readRepository import ru.inr.mass.workspace.plotNumassSet import space.kscience.dataforge.data.DataTree import space.kscience.dataforge.data.await -import space.kscience.dataforge.data.getData +import space.kscience.dataforge.data.get import space.kscience.plotly.Plotly import space.kscience.plotly.makeFile suspend fun main() { val repo: DataTree = readRepository("D:\\Work\\Numass\\data\\2018_04") - val testSet = repo.getData("Adiabacity_19.set_3")?.await() ?: error("Not found") + val testSet = repo["Adiabacity_19.set_3"]?.await() ?: error("Not found") Plotly.plotNumassSet(testSet).makeFile() } \ No newline at end of file diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/gun_2021_11.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/gun_2021_11.kt index 88f2fe5..6e9283f 100644 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/gun_2021_11.kt +++ b/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/gun_2021_11.kt @@ -85,7 +85,7 @@ suspend fun main() { val hv = 16900.0 //select point number 2 (U = 16900 V) from each directory - val points: Map = repo.items().mapValues { + val points: Map = repo.items.mapValues { val directory = it.value.data?.await() val point = directory?.points?.find { point -> point.voltage == hv } point diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/run_2020_12.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/run_2020_12.kt index 11a126b..7f93713 100644 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/run_2020_12.kt +++ b/numass-workspace/src/main/kotlin/ru/inr/mass/scripts/run_2020_12.kt @@ -1,20 +1,22 @@ package ru.inr.mass.scripts -import kotlinx.coroutines.flow.collect import ru.inr.mass.data.proto.NumassDirectorySet import ru.inr.mass.workspace.Numass.readRepository +import space.kscience.dataforge.data.DataSource import space.kscience.dataforge.data.DataTree import space.kscience.dataforge.data.filter +import space.kscience.dataforge.data.forEach +import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.string suspend fun main() { val repo: DataTree = readRepository("D:\\Work\\Numass\\data\\2018_04") - val filtered = repo.filter { _, data -> - val operator by data.meta.string() + val filtered: DataSource = repo.filter { _, meta: Meta -> + val operator by meta.string() operator?.startsWith("Vas") ?: false } - filtered.flowData().collect { + filtered.forEach{ println(it) } } \ No newline at end of file diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/Numass.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/Numass.kt index 5ebaee4..76f7816 100644 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/Numass.kt +++ b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/Numass.kt @@ -3,54 +3,41 @@ package ru.inr.mass.workspace import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.toList import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withContext import ru.inr.mass.data.api.NumassBlock import ru.inr.mass.data.api.NumassPoint -import ru.inr.mass.data.api.NumassSet -import ru.inr.mass.data.proto.NumassDirectorySet -import ru.inr.mass.data.proto.readNumassDirectory -import ru.inr.mass.data.proto.readNumassPointFile -import space.kscience.dataforge.data.* -import space.kscience.dataforge.names.Name -import space.kscience.dataforge.names.NameToken -import java.nio.file.Files +import ru.inr.mass.data.proto.* +import space.kscience.dataforge.context.fetch +import space.kscience.dataforge.data.DataTree +import space.kscience.dataforge.workspace.Workspace import java.nio.file.Path -import kotlin.io.path.ExperimentalPathApi -import kotlin.io.path.exists -import kotlin.io.path.isDirectory -import kotlin.io.path.relativeTo -import kotlin.streams.toList object Numass { - fun readDirectory(path: String): NumassDirectorySet = NUMASS.context.readNumassDirectory(path) - - @OptIn(ExperimentalPathApi::class) - fun readRepository(path: Path): DataTree = runBlocking { - ActiveDataTree { - @Suppress("BlockingMethodInNonBlockingContext") - withContext(Dispatchers.IO) { - Files.walk(path).filter { - it.isDirectory() && it.resolve("meta").exists() - }.toList().forEach { childPath -> - val name = Name(childPath.relativeTo(path).map { segment -> - NameToken(segment.fileName.toString()) - }) - val value = NUMASS.context.readNumassDirectory(childPath) - static(name, value, value.meta) - } - } - //TODO add file watcher + val workspace = Workspace { + context { + plugin(NumassWorkspacePlugin) } } - fun readRepository(path: String): DataTree = readRepository(Path.of(path)) + val context get() = workspace.context - fun readPoint(path: String): NumassPoint = NUMASS.context.readNumassPointFile(path) - ?: error("Can't read numass point at $path") -} + val numassProto by lazy { context.fetch(NumassProtoPlugin) } + + fun readPoint(path: Path): NumassPoint = + numassProto.readNumassPointFile(path) ?: error("Can't read numass point at $path") + + fun readPoint(path: String): NumassPoint = + numassProto.readNumassPointFile(path) ?: error("Can't read numass point at $path") + + fun readDirectory(path: Path): NumassDirectorySet = numassProto.readNumassDirectory(path) + + fun readDirectory(path: String): NumassDirectorySet = numassProto.readNumassDirectory(path) + + fun readRepository(path: Path): DataTree = + runBlocking(Dispatchers.IO) { numassProto.readRepository(path) } + + fun readRepository(path: String): DataTree = + runBlocking(Dispatchers.IO) { numassProto.readRepository(path) } -operator fun DataSet.get(name: String): NumassSet? = runBlocking { - getData(Name.parse(name))?.await() } fun NumassBlock.listFrames() = runBlocking { frames.toList() } diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassPlugin.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassPlugin.kt deleted file mode 100644 index 63fdded..0000000 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassPlugin.kt +++ /dev/null @@ -1,118 +0,0 @@ -package ru.inr.mass.workspace - -import ru.inr.mass.data.proto.NumassProtoPlugin -import space.kscience.dataforge.context.Context -import space.kscience.dataforge.context.PluginFactory -import space.kscience.dataforge.context.PluginTag -import space.kscience.dataforge.meta.Meta -import space.kscience.dataforge.values.Value -import space.kscience.dataforge.workspace.TaskReference -import space.kscience.dataforge.workspace.WorkspacePlugin -import space.kscience.dataforge.workspace.task -import space.kscience.tables.Table -import kotlin.reflect.KClass - -class NumassPlugin : WorkspacePlugin() { - override val tag: PluginTag get() = Companion.tag - - val numassProtoPlugin by require(NumassProtoPlugin) - -// val select by task( -// descriptor = MetaDescriptor { -// info = "Select data from workspace data pool" -// value("forward", ValueType.BOOLEAN) { -// info = "Select only forward or only backward sets" -// } -// } -// ) { -// val forward = meta["forward"]?.boolean -// val filtered = workspace.data.select { _, meta -> -// when (forward) { -// true -> meta["iteration_info.reverse"]?.boolean?.not() ?: false -// false -> meta["iteration_info.reverse"]?.boolean ?: false -// else -> true -// } -// } -// -// emit(Name.EMPTY, filtered) -// } -// -// val analyze by task>( -// MetaDescriptor { -// info = "Count the number of events for each voltage and produce a table with the results" -// } -// ) { -// pipeFrom(select) { set, name, meta -> -// val res = SmartAnalyzer.analyzeSet(set, meta["analyzer"] ?: Meta.EMPTY) -// val outputMeta = meta.toMutableMeta().apply { -// "data" put set.meta -// } -// // context.output.render(res, stage = "numass.analyze", name = name, meta = outputMeta) -// res -// } -// } - - val monitorTableTask: TaskReference> by task { - -// descriptor { -// value("showPlot", types = listOf(ValueType.BOOLEAN), info = "Show plot after complete") -// value("monitorPoint", types = listOf(ValueType.NUMBER), info = "The voltage for monitor point") -// } -// model { meta -> -// dependsOn(selectTask, meta) -//// if (meta.getBoolean("monitor.correctForThreshold", false)) { -//// dependsOn(subThresholdTask, meta, "threshold") -//// } -// configure(meta.getMetaOrEmpty("monitor")) -// configure { -// meta.useMeta("analyzer") { putNode(it) } -// setValue("@target", meta.getString("@target", meta.name)) -// } -// } -// join { data -> -// val monitorVoltage = meta.getDouble("monitorPoint", 16000.0); -// val analyzer = SmartAnalyzer() -// val analyzerMeta = meta.getMetaOrEmpty("analyzer") -// -// //val thresholdCorrection = da -// //TODO add separator labels -// val res = ListTable.Builder("timestamp", "count", "cr", "crErr", "index", "set") -// .rows( -// data.values.stream().flatMap { set -> -// set.points.stream() -// .filter { it.voltage == monitorVoltage } -// .parallel() -// .map { point -> -// analyzer.analyzeParent(point, analyzerMeta).edit { -// "index" to point.index -// "set" to set.name -// } -// } -// } -// -// ).build() -// -// if (meta.getBoolean("showPlot", true)) { -// val plot = DataPlot.plot(name, res, Adapters.buildXYAdapter("timestamp", "cr", "crErr")) -// context.plot(plot, name, "numass.monitor") { -// "xAxis.title" to "time" -// "xAxis.type" to "time" -// "yAxis.title" to "Count rate" -// "yAxis.units" to "Hz" -// } -// -// ((context.output["numass.monitor", name] as? PlotOutput)?.frame as? JFreeChartFrame)?.addSetMarkers(data.values) -// } -// -// context.output.render(res, stage = "numass.monitor", name = name, meta = meta) -// -// return@join res; -// } - } - - companion object : PluginFactory { - override val tag: PluginTag = PluginTag("numass", "ru.mipt.npm") - override val type: KClass = NumassPlugin::class - override fun invoke(meta: Meta, context: Context): NumassPlugin = NumassPlugin() - } -} \ No newline at end of file diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassWorkspacePlugin.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassWorkspacePlugin.kt new file mode 100644 index 0000000..f7bc2b5 --- /dev/null +++ b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/NumassWorkspacePlugin.kt @@ -0,0 +1,134 @@ +package ru.inr.mass.workspace + +import ru.inr.mass.data.analysis.NumassAnalyzerParameters +import ru.inr.mass.data.analysis.NumassEventExtractor +import ru.inr.mass.data.analysis.TimeAnalyzer +import ru.inr.mass.data.analysis.analyzeSet +import ru.inr.mass.data.api.NumassSet +import ru.inr.mass.data.proto.NumassProtoPlugin +import space.kscience.dataforge.context.Context +import space.kscience.dataforge.context.PluginFactory +import space.kscience.dataforge.context.PluginTag +import space.kscience.dataforge.data.filterByType +import space.kscience.dataforge.meta.* +import space.kscience.dataforge.meta.descriptors.MetaDescriptor +import space.kscience.dataforge.meta.descriptors.value +import space.kscience.dataforge.names.Name +import space.kscience.dataforge.workspace.WorkspacePlugin +import space.kscience.dataforge.workspace.pipeFrom +import space.kscience.dataforge.workspace.task +import space.kscience.tables.Table +import kotlin.reflect.KClass + +class NumassWorkspacePlugin : WorkspacePlugin() { + override val tag: PluginTag get() = Companion.tag + + val numassProtoPlugin by require(NumassProtoPlugin) + + val selectSets by task( + descriptor = MetaDescriptor { + info = "Select data from workspace data pool" + value("forward", ValueType.BOOLEAN) { + info = "Select only forward or only backward sets" + } + } + ) { + val forward = meta["forward"]?.boolean + val filtered = workspace.data.filterByType { _, meta -> + when (forward) { + true -> meta["iteration_info.reverse"]?.boolean?.not() ?: false + false -> meta["iteration_info.reverse"]?.boolean ?: false + else -> true + } + } + + node(Name.EMPTY, filtered) + } + + + val analyzeSets by task>( + MetaDescriptor { + info = "Count the number of events for each voltage and produce a table with the results" + } + ) { + pipeFrom(selectSets) { set, name, meta -> + val res = TimeAnalyzer(NumassEventExtractor.EVENTS_ONLY).analyzeSet( + set, + NumassAnalyzerParameters.read(meta["analyzer"] ?: Meta.EMPTY) + ) + val outputMeta = meta.toMutableMeta().apply { + "data" put set.meta + } + // context.output.render(res, stage = "numass.analyze", name = name, meta = outputMeta) + res + } + } +// +// val monitorTableTask: TaskReference> by task( +// MetaDescriptor { +// value("showPlot", type = ValueType.BOOLEAN) { +// info = "Show plot after complete" +// } +// value("monitorPoint", type = ValueType.NUMBER) { +// info = "The voltage for monitor point" +// } +// } +// ) { +// val data = from(selectSets) +//// model { meta -> +//// dependsOn(selectTask, meta) +////// if (meta.getBoolean("monitor.correctForThreshold", false)) { +////// dependsOn(subThresholdTask, meta, "threshold") +////// } +//// configure(meta.getMetaOrEmpty("monitor")) +//// configure { +//// meta.useMeta("analyzer") { putNode(it) } +//// setValue("@target", meta.getString("@target", meta.name)) +//// } +//// } +// +// val monitorVoltage = meta["monitorPoint"].double ?: 16000.0 +// val analyzer = TimeAnalyzer() +// val analyzerMeta = meta["analyzer"] +// +// //val thresholdCorrection = da +// //TODO add separator labels +// val res = ListTable.Builder("timestamp", "count", "cr", "crErr", "index", "set") +// .rows( +// data.values.stream().flatMap { set -> +// set.points.stream() +// .filter { it.voltage == monitorVoltage } +// .parallel() +// .map { point -> +// analyzer.analyzeParent(point, analyzerMeta).edit { +// "index" to point.index +// "set" to set.name +// } +// } +// } +// +// ).build() +// +// if (meta["showPlot"].boolean ?: true) { +// val plot = DataPlot.plot(name, res, Adapters.buildXYAdapter("timestamp", "cr", "crErr")) +// context.plot(plot, name, "numass.monitor") { +// "xAxis.title" to "time" +// "xAxis.type" to "time" +// "yAxis.title" to "Count rate" +// "yAxis.units" to "Hz" +// } +// +// ((context.output["numass.monitor", name] as? PlotOutput)?.frame as? JFreeChartFrame)?.addSetMarkers(data.values) +// } +// +// context.output.render(res, stage = "numass.monitor", name = name, meta = meta) +// +// data(Name.EMPTY, res) +// } + + companion object : PluginFactory { + override val tag: PluginTag = PluginTag("numass", "ru.mipt.npm") + override val type: KClass = NumassWorkspacePlugin::class + override fun build(context: Context, meta: Meta): NumassWorkspacePlugin = NumassWorkspacePlugin() + } +} \ No newline at end of file diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/plots.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/plots.kt index 8372ffb..f39d4d5 100644 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/plots.kt +++ b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/plots.kt @@ -10,8 +10,8 @@ import ru.inr.mass.data.analysis.timeHistogram import ru.inr.mass.data.api.* import ru.inr.mass.data.proto.HVData import ru.inr.mass.data.proto.NumassDirectorySet -import space.kscience.dataforge.values.asValue -import space.kscience.dataforge.values.double +import space.kscience.dataforge.meta.asValue +import space.kscience.dataforge.meta.double import space.kscience.kmath.domains.center import space.kscience.kmath.histogram.Histogram1D import space.kscience.kmath.misc.UnstableKMathAPI diff --git a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/workspace.kt b/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/workspace.kt deleted file mode 100644 index 7d1785f..0000000 --- a/numass-workspace/src/main/kotlin/ru/inr/mass/workspace/workspace.kt +++ /dev/null @@ -1,10 +0,0 @@ -package ru.inr.mass.workspace - -import ru.inr.mass.data.proto.NumassProtoPlugin -import space.kscience.dataforge.workspace.Workspace - -val NUMASS = Workspace { - context{ - plugin(NumassProtoPlugin) - } -} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index b3ec7c0..67bdd00 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,10 +15,10 @@ pluginManagement { } plugins { - id("ru.mipt.npm.gradle.project") version toolsVersion - id("ru.mipt.npm.gradle.mpp") version toolsVersion - id("ru.mipt.npm.gradle.jvm") version toolsVersion - id("ru.mipt.npm.gradle.js") version toolsVersion + id("space.kscience.gradle.project") version toolsVersion + id("space.kscience.gradle.mpp") version toolsVersion + id("space.kscience.gradle.jvm") version toolsVersion + id("space.kscience.gradle.js") version toolsVersion } } @@ -34,7 +34,7 @@ dependencyResolutionManagement { versionCatalogs { create("npmlibs") { - from("ru.mipt.npm:version-catalog:$toolsVersion") + from("space.kscience:version-catalog:$toolsVersion") } } } @@ -43,7 +43,7 @@ include( ":numass-data-model", ":numass-analysis", ":numass-data-proto", - //":numass-data-server", + ":numass-data-server", ":numass-workspace", ":numass-model", //":numass-detector-client"