diff --git a/doc/antora.yml b/doc/antora.yml
index 44a009a71f4..e2a06e35be5 100644
--- a/doc/antora.yml
+++ b/doc/antora.yml
@@ -3,4 +3,4 @@ title: Open Energy Management System
version: latest
start_page: ROOT:introduction.adoc
nav:
-- modules/ROOT/nav.adoc
+ - modules/ROOT/nav.adoc
diff --git a/doc/build.gradle b/doc/build.gradle
index 4aaf5ee6b5a..100f1e0ffd9 100644
--- a/doc/build.gradle
+++ b/doc/build.gradle
@@ -12,11 +12,16 @@ node {
task buildAntoraDocs(type: NodeTask) {
dependsOn npmInstall
script = file("build/node_modules/@antora/cli/bin/antora")
- args = ["site.yml"]
+ args = ["--log-format=pretty", "site.yml"]
+
+ def nojekyll = file("build/.nojekyll")
+ def source = file("build/CNAME")
+ def output = file("build/www")
+
doLast {
copy {
- from "build/.nojekyll", "build/CNAME"
- into "build/www"
+ from nojekyll, source
+ into output
}
}
}
diff --git a/doc/build/site.yml b/doc/build/site.yml
index 876e6391607..79e4816da4f 100644
--- a/doc/build/site.yml
+++ b/doc/build/site.yml
@@ -7,13 +7,13 @@ site:
content:
sources:
- url: ./../../
- edit_url: https://github.com/OpenEMS/openems/tree/{refname}/{path}
+ edit_url: https://github.com/OpenEMS/openems/tree/develop/{path}
branches: HEAD
start_path: doc
ui:
bundle:
- url: uibundle_openems.zip
+ url: https://github.com/OpenEMS/openems.io-theme/releases/latest/download/ui-bundle.zip
output:
dir: www
diff --git a/doc/build/uibundle_openems.zip b/doc/build/uibundle_openems.zip
deleted file mode 100644
index 2ed7adc83ec..00000000000
Binary files a/doc/build/uibundle_openems.zip and /dev/null differ
diff --git a/doc/modules/ROOT/pages/backend/backend-to-backend.adoc b/doc/modules/ROOT/pages/backend/backend-to-backend.adoc
index 16491e358e0..691211b8415 100644
--- a/doc/modules/ROOT/pages/backend/backend-to-backend.adoc
+++ b/doc/modules/ROOT/pages/backend/backend-to-backend.adoc
@@ -2,7 +2,6 @@
:imagesdir: ../assets/images
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/backend/build.adoc b/doc/modules/ROOT/pages/backend/build.adoc
index 7cf4edef961..316eb0d3f3d 100644
--- a/doc/modules/ROOT/pages/backend/build.adoc
+++ b/doc/modules/ROOT/pages/backend/build.adoc
@@ -1,7 +1,6 @@
= Build OpenEMS Backend
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/backend/deploy.adoc b/doc/modules/ROOT/pages/backend/deploy.adoc
index ec58f2f8b8d..b7c19ea5c83 100644
--- a/doc/modules/ROOT/pages/backend/deploy.adoc
+++ b/doc/modules/ROOT/pages/backend/deploy.adoc
@@ -1,7 +1,6 @@
= Deploy OpenEMS Backend
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/backend/metadata.adoc b/doc/modules/ROOT/pages/backend/metadata.adoc
index 56c9ab86be9..87e353aed67 100644
--- a/doc/modules/ROOT/pages/backend/metadata.adoc
+++ b/doc/modules/ROOT/pages/backend/metadata.adoc
@@ -1,7 +1,6 @@
= Metadata
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/backend/service.adoc b/doc/modules/ROOT/pages/backend/service.adoc
index 84649d21803..71d4f4f0548 100644
--- a/doc/modules/ROOT/pages/backend/service.adoc
+++ b/doc/modules/ROOT/pages/backend/service.adoc
@@ -1,7 +1,6 @@
= Backend Services
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/backend/timedata.adoc b/doc/modules/ROOT/pages/backend/timedata.adoc
index a14d93d499c..63e91a38f0d 100644
--- a/doc/modules/ROOT/pages/backend/timedata.adoc
+++ b/doc/modules/ROOT/pages/backend/timedata.adoc
@@ -1,7 +1,6 @@
= Timedata
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/component-communication/index.adoc b/doc/modules/ROOT/pages/component-communication/index.adoc
index dc7f6d96f78..19aeac40642 100644
--- a/doc/modules/ROOT/pages/component-communication/index.adoc
+++ b/doc/modules/ROOT/pages/component-communication/index.adoc
@@ -1,7 +1,6 @@
= Internal Component Communication
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:source-highlighter: highlight.js
diff --git a/doc/modules/ROOT/pages/contribute/coding-guidelines.adoc b/doc/modules/ROOT/pages/contribute/coding-guidelines.adoc
index b48fa6f3b90..065e9838276 100644
--- a/doc/modules/ROOT/pages/contribute/coding-guidelines.adoc
+++ b/doc/modules/ROOT/pages/contribute/coding-guidelines.adoc
@@ -2,7 +2,6 @@
:imagesdir: ../assets/images
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/contribute/documentation.adoc b/doc/modules/ROOT/pages/contribute/documentation.adoc
index 28dd5955d85..6aca0cb0d57 100644
--- a/doc/modules/ROOT/pages/contribute/documentation.adoc
+++ b/doc/modules/ROOT/pages/contribute/documentation.adoc
@@ -2,7 +2,6 @@
:imagesdir: ../assets/images
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/coreconcepts.adoc b/doc/modules/ROOT/pages/coreconcepts.adoc
index 43020e97f0a..bcf93d5031d 100644
--- a/doc/modules/ROOT/pages/coreconcepts.adoc
+++ b/doc/modules/ROOT/pages/coreconcepts.adoc
@@ -2,7 +2,6 @@
:imagesdir: ../assets/images
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/architecture.adoc b/doc/modules/ROOT/pages/edge/architecture.adoc
index eb4296f3177..85c0555caa1 100644
--- a/doc/modules/ROOT/pages/edge/architecture.adoc
+++ b/doc/modules/ROOT/pages/edge/architecture.adoc
@@ -1,7 +1,6 @@
= Edge Architecture
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/bridge.adoc b/doc/modules/ROOT/pages/edge/bridge.adoc
index 2a5834b147e..0189faeedfd 100644
--- a/doc/modules/ROOT/pages/edge/bridge.adoc
+++ b/doc/modules/ROOT/pages/edge/bridge.adoc
@@ -1,7 +1,6 @@
= Bridge
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/build.adoc b/doc/modules/ROOT/pages/edge/build.adoc
index b1ed1ca6d62..134674cf001 100644
--- a/doc/modules/ROOT/pages/edge/build.adoc
+++ b/doc/modules/ROOT/pages/edge/build.adoc
@@ -1,7 +1,6 @@
= Build OpenEMS Edge
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/configuration.adoc b/doc/modules/ROOT/pages/edge/configuration.adoc
index b5c5bd54dca..2a2609a9872 100644
--- a/doc/modules/ROOT/pages/edge/configuration.adoc
+++ b/doc/modules/ROOT/pages/edge/configuration.adoc
@@ -1,7 +1,6 @@
= Configuration
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/controller.adoc b/doc/modules/ROOT/pages/edge/controller.adoc
index 3f6c203742a..f40d81e8436 100644
--- a/doc/modules/ROOT/pages/edge/controller.adoc
+++ b/doc/modules/ROOT/pages/edge/controller.adoc
@@ -1,7 +1,6 @@
= Controller
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/deploy.adoc b/doc/modules/ROOT/pages/edge/deploy.adoc
index 2088195edbd..58059b150a3 100644
--- a/doc/modules/ROOT/pages/edge/deploy.adoc
+++ b/doc/modules/ROOT/pages/edge/deploy.adoc
@@ -1,7 +1,6 @@
= Deploy OpenEMS Edge
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/device_service.adoc b/doc/modules/ROOT/pages/edge/device_service.adoc
index f732e9f1f2b..cb889ba7e38 100644
--- a/doc/modules/ROOT/pages/edge/device_service.adoc
+++ b/doc/modules/ROOT/pages/edge/device_service.adoc
@@ -1,7 +1,6 @@
= Controller
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/implement.adoc b/doc/modules/ROOT/pages/edge/implement.adoc
index 7f899a872e0..79904339734 100644
--- a/doc/modules/ROOT/pages/edge/implement.adoc
+++ b/doc/modules/ROOT/pages/edge/implement.adoc
@@ -1,7 +1,6 @@
= Implementing a device
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
@@ -585,5 +584,5 @@ Same applies to the OpenEMS Backend for dynamically loading devices.
Before continuing with the development and implementation, it's important to ensure that your module's tests are passing. This helps in maintaining the quality and functionality of the module. To check the tests of your module, execute the following Gradle command in the root directory of OpenEMS:
----
-Run ./gradlew :io.openems.edge.io.shelly:clean in the root Directory to check the tests of your module.
+Run ./gradlew :io.openems.edge.io.shelly:test in the root Directory to check the tests of your module.
----
diff --git a/doc/modules/ROOT/pages/edge/nature.adoc b/doc/modules/ROOT/pages/edge/nature.adoc
index eb096721f89..11450097b34 100644
--- a/doc/modules/ROOT/pages/edge/nature.adoc
+++ b/doc/modules/ROOT/pages/edge/nature.adoc
@@ -1,7 +1,6 @@
= Nature
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/scheduler.adoc b/doc/modules/ROOT/pages/edge/scheduler.adoc
index eb5b7455113..dcd2bca0815 100644
--- a/doc/modules/ROOT/pages/edge/scheduler.adoc
+++ b/doc/modules/ROOT/pages/edge/scheduler.adoc
@@ -1,7 +1,6 @@
= Scheduler
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/edge/timedata.adoc b/doc/modules/ROOT/pages/edge/timedata.adoc
index 907ed5a7629..a5296501417 100644
--- a/doc/modules/ROOT/pages/edge/timedata.adoc
+++ b/doc/modules/ROOT/pages/edge/timedata.adoc
@@ -1,7 +1,6 @@
= Timedata
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/gettingstarted.adoc b/doc/modules/ROOT/pages/gettingstarted.adoc
index 266aff42053..345571185fe 100644
--- a/doc/modules/ROOT/pages/gettingstarted.adoc
+++ b/doc/modules/ROOT/pages/gettingstarted.adoc
@@ -2,7 +2,6 @@
:imagesdir: ../assets/images
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/intellij.adoc b/doc/modules/ROOT/pages/intellij.adoc
index 40568594cdc..de14e909977 100644
--- a/doc/modules/ROOT/pages/intellij.adoc
+++ b/doc/modules/ROOT/pages/intellij.adoc
@@ -2,7 +2,6 @@
:imagesdir: ../assets/images
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/simulation/gitpod.adoc b/doc/modules/ROOT/pages/simulation/gitpod.adoc
index d37f061be1f..544c17c9a2a 100644
--- a/doc/modules/ROOT/pages/simulation/gitpod.adoc
+++ b/doc/modules/ROOT/pages/simulation/gitpod.adoc
@@ -1,7 +1,6 @@
= Live-Demo on Gitpod
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/simulation/realtime.adoc b/doc/modules/ROOT/pages/simulation/realtime.adoc
index 671e4c0d906..bd60b45d829 100644
--- a/doc/modules/ROOT/pages/simulation/realtime.adoc
+++ b/doc/modules/ROOT/pages/simulation/realtime.adoc
@@ -1,7 +1,6 @@
= Real-Time Simulation
:imagesdir: ../../assets/images
:sectnumlevels: 0
-:toc:
:toclevels: 0
OpenEMS provides several virtual devices for testing and development. To set up the simulation-environment follow the setup guide in xref:gettingstarted.adoc[Getting Started]. The Apache Felix Web Console Configuration lists all OpenEMS component, but those which rely on external hardware can't be used for simulation. These are replaced by more generic components tagged with the "Simulator" prefix. Still, not all non-simulator devices rely on real hardware. Other components used in production, like Loggers, Controllers and Schedulers can be combined with the virtual devices to build a "living" system.
diff --git a/doc/modules/ROOT/pages/simulation/ui-history.adoc b/doc/modules/ROOT/pages/simulation/ui-history.adoc
index 60104e6ec96..06a7a8ba94f 100644
--- a/doc/modules/ROOT/pages/simulation/ui-history.adoc
+++ b/doc/modules/ROOT/pages/simulation/ui-history.adoc
@@ -1,7 +1,6 @@
= UI History Simulation
:imagesdir: ../../assets/images
:sectnumlevels: 0
-:toc:
:toclevels: 0
Sometimes it can be useful to mock historic data in OpenEMS UI in order to take consistent screenshots or to visualize how a certain Controller would have behaved during a day.
diff --git a/doc/modules/ROOT/pages/ui/architecture.adoc b/doc/modules/ROOT/pages/ui/architecture.adoc
index f95264ac7d0..12fd248810a 100644
--- a/doc/modules/ROOT/pages/ui/architecture.adoc
+++ b/doc/modules/ROOT/pages/ui/architecture.adoc
@@ -1,7 +1,6 @@
= UI Architecture
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/ui/build.adoc b/doc/modules/ROOT/pages/ui/build.adoc
index 4d935529531..77de45f42c2 100644
--- a/doc/modules/ROOT/pages/ui/build.adoc
+++ b/doc/modules/ROOT/pages/ui/build.adoc
@@ -1,7 +1,6 @@
= Build OpenEMS UI
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/ui/implementing-a-widget/introduction.adoc b/doc/modules/ROOT/pages/ui/implementing-a-widget/introduction.adoc
index 443093fc988..951184a778f 100644
--- a/doc/modules/ROOT/pages/ui/implementing-a-widget/introduction.adoc
+++ b/doc/modules/ROOT/pages/ui/implementing-a-widget/introduction.adoc
@@ -1,7 +1,6 @@
= Implementing a UI-Widget
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/doc/modules/ROOT/pages/ui/setup-ide.adoc b/doc/modules/ROOT/pages/ui/setup-ide.adoc
index 644868adcac..0954e583a72 100644
--- a/doc/modules/ROOT/pages/ui/setup-ide.adoc
+++ b/doc/modules/ROOT/pages/ui/setup-ide.adoc
@@ -2,7 +2,6 @@
:imagesdir: ../../assets/images
:sectnums:
:sectnumlevels: 4
-:toc:
:toclevels: 4
:experimental:
:keywords: AsciiDoc
diff --git a/gradlew b/gradlew
index 09d360f6284..951a127823d 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
@@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
diff --git a/gradlew.bat b/gradlew.bat
index 922eb59f04f..237848b5ef1 100755
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
diff --git a/io.openems.backend.application/BackendApp.bndrun b/io.openems.backend.application/BackendApp.bndrun
index 1d0b0dde4e4..923ac4c24c1 100644
--- a/io.openems.backend.application/BackendApp.bndrun
+++ b/io.openems.backend.application/BackendApp.bndrun
@@ -62,7 +62,7 @@
Java-WebSocket;version='[1.5.4,1.5.5)',\
com.fasterxml.aalto-xml;version='[1.3.3,1.3.4)',\
com.google.gson;version='[2.11.0,2.11.1)',\
- com.google.guava;version='[33.2.1,33.2.2)',\
+ com.google.guava;version='[33.3.0,33.3.1)',\
com.google.guava.failureaccess;version='[1.0.2,1.0.3)',\
com.squareup.okio;version='[3.9.0,3.9.1)',\
com.zaxxer.HikariCP;version='[5.1.0,5.1.1)',\
@@ -100,9 +100,11 @@
io.openems.wrapper.retrofit-converter-gson;version=snapshot,\
io.openems.wrapper.retrofit-converter-scalars;version=snapshot,\
io.openems.wrapper.retrofit2;version=snapshot,\
- io.reactivex.rxjava3.rxjava;version='[3.1.8,3.1.9)',\
+ io.reactivex.rxjava3.rxjava;version='[3.1.9,3.1.10)',\
+ org.apache.commons.commons-codec;version='[1.17.0,1.17.1)',\
org.apache.commons.commons-compress;version='[1.26.2,1.26.3)',\
- org.apache.commons.commons-csv;version='[1.10.0,1.10.1)',\
+ org.apache.commons.commons-csv;version='[1.11.0,1.11.1)',\
+ org.apache.commons.commons-io;version='[2.16.1,2.16.2)',\
org.apache.felix.configadmin;version='[1.9.26,1.9.27)',\
org.apache.felix.eventadmin;version='[1.6.4,1.6.5)',\
org.apache.felix.fileinstall;version='[3.7.4,3.7.5)',\
@@ -113,7 +115,7 @@
org.apache.felix.scr;version='[2.2.12,2.2.13)',\
org.apache.felix.webconsole;version='[5.0.6,5.0.7)',\
org.apache.felix.webconsole.plugins.ds;version='[2.3.0,2.3.1)',\
- org.jetbrains.kotlin.osgi-bundle;version='[2.0.0,2.0.1)',\
+ org.jetbrains.kotlin.osgi-bundle;version='[2.0.20,2.0.21)',\
org.jsr-305;version='[3.0.2,3.0.3)',\
org.ops4j.pax.logging.pax-logging-api;version='[2.2.1,2.2.2)',\
org.ops4j.pax.logging.pax-logging-log4j2;version='[2.2.1,2.2.2)',\
@@ -121,7 +123,7 @@
org.osgi.service.jdbc;version='[1.1.0,1.1.1)',\
org.osgi.util.function;version='[1.2.0,1.2.1)',\
org.osgi.util.promise;version='[1.3.0,1.3.1)',\
- org.owasp.encoder;version='[1.2.3,1.2.4)',\
- org.postgresql.jdbc;version='[42.7.3,42.7.4)',\
+ org.owasp.encoder;version='[1.3.1,1.3.2)',\
+ org.postgresql.jdbc;version='[42.7.4,42.7.5)',\
reactive-streams;version='[1.0.4,1.0.5)',\
stax2-api;version='[4.2.2,4.2.3)'
\ No newline at end of file
diff --git a/io.openems.common/src/io/openems/common/OpenemsConstants.java b/io.openems.common/src/io/openems/common/OpenemsConstants.java
index 14f7bd4db52..69b49e779ee 100644
--- a/io.openems.common/src/io/openems/common/OpenemsConstants.java
+++ b/io.openems.common/src/io/openems/common/OpenemsConstants.java
@@ -22,7 +22,7 @@ public class OpenemsConstants {
*
* This is the month of the release.
*/
- public static final short VERSION_MINOR = 8;
+ public static final short VERSION_MINOR = 9;
/**
* The patch version of OpenEMS.
diff --git a/io.openems.edge.application/EdgeApp.bndrun b/io.openems.edge.application/EdgeApp.bndrun
index 46f4680d966..c621ec4d944 100644
--- a/io.openems.edge.application/EdgeApp.bndrun
+++ b/io.openems.edge.application/EdgeApp.bndrun
@@ -200,7 +200,7 @@
com.fazecast.jSerialComm;version='[2.10.4,2.10.5)',\
com.ghgande.j2mod;version='[3.2.1,3.2.2)',\
com.google.gson;version='[2.11.0,2.11.1)',\
- com.google.guava;version='[33.2.1,33.2.2)',\
+ com.google.guava;version='[33.3.0,33.3.1)',\
com.google.guava.failureaccess;version='[1.0.2,1.0.3)',\
com.squareup.okio;version='[3.9.0,3.9.1)',\
com.sun.jna;version='[5.14.0,5.14.1)',\
@@ -393,11 +393,13 @@
io.openems.wrapper.retrofit-converter-scalars;version=snapshot,\
io.openems.wrapper.retrofit2;version=snapshot,\
io.openems.wrapper.sdnotify;version=snapshot,\
- io.reactivex.rxjava3.rxjava;version='[3.1.8,3.1.9)',\
+ io.reactivex.rxjava3.rxjava;version='[3.1.9,3.1.10)',\
javax.jmdns;version='[3.4.1,3.4.2)',\
javax.xml.soap-api;version='[1.4.0,1.4.1)',\
+ org.apache.commons.commons-codec;version='[1.17.0,1.17.1)',\
org.apache.commons.commons-compress;version='[1.26.2,1.26.3)',\
- org.apache.commons.commons-csv;version='[1.10.0,1.10.1)',\
+ org.apache.commons.commons-csv;version='[1.11.0,1.11.1)',\
+ org.apache.commons.commons-io;version='[2.16.1,2.16.2)',\
org.apache.commons.math3;version='[3.6.1,3.6.2)',\
org.apache.felix.configadmin;version='[1.9.26,1.9.27)',\
org.apache.felix.eventadmin;version='[1.6.4,1.6.5)',\
@@ -414,7 +416,7 @@
org.eclipse.jetty.io;version='[9.4.28,9.4.29)',\
org.eclipse.jetty.util;version='[9.4.28,9.4.29)',\
org.eclipse.paho.mqttv5.client;version='[1.2.5,1.2.6)',\
- org.jetbrains.kotlin.osgi-bundle;version='[2.0.0,2.0.1)',\
+ org.jetbrains.kotlin.osgi-bundle;version='[2.0.20,2.0.21)',\
org.jsoup;version='[1.18.1,1.18.2)',\
org.jsr-305;version='[3.0.2,3.0.3)',\
org.openmuc.jmbus;version='[3.3.0,3.3.1)',\
@@ -424,7 +426,7 @@
org.osgi.service.component;version='[1.5.1,1.5.2)',\
org.osgi.util.function;version='[1.2.0,1.2.1)',\
org.osgi.util.promise;version='[1.3.0,1.3.1)',\
- org.owasp.encoder;version='[1.2.3,1.2.4)',\
+ org.owasp.encoder;version='[1.3.1,1.3.2)',\
reactive-streams;version='[1.0.4,1.0.5)',\
rrd4j;version='[3.9.0,3.9.1)',\
stax2-api;version='[4.2.2,4.2.3)'
\ No newline at end of file
diff --git a/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java b/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java
index 98bd99b774d..e5406842d18 100644
--- a/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java
+++ b/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java
@@ -283,7 +283,7 @@ public synchronized int calculateCurrentLimit(Battery battery) {
// Get the minimum limit of all limits in Ampere
var limit = TypeUtils.min(TypeUtils.toDouble(bpBms), minCellVoltageLimit, maxCellVoltageLimit,
- minCellTemperatureLimit, maxCellTemperatureLimit, maxIncreaseAmpereLimit, forceCurrent);
+ minCellTemperatureLimit, maxCellTemperatureLimit, maxSocLimit, maxIncreaseAmpereLimit, forceCurrent);
// Set '0' to block charge/discharge?
if (
diff --git a/io.openems.edge.controller.ess.gridoptimizedcharge/src/io/openems/edge/controller/ess/gridoptimizedcharge/ControllerEssGridOptimizedChargeImpl.java b/io.openems.edge.controller.ess.gridoptimizedcharge/src/io/openems/edge/controller/ess/gridoptimizedcharge/ControllerEssGridOptimizedChargeImpl.java
index 8f323515b5e..aa727e503b4 100644
--- a/io.openems.edge.controller.ess.gridoptimizedcharge/src/io/openems/edge/controller/ess/gridoptimizedcharge/ControllerEssGridOptimizedChargeImpl.java
+++ b/io.openems.edge.controller.ess.gridoptimizedcharge/src/io/openems/edge/controller/ess/gridoptimizedcharge/ControllerEssGridOptimizedChargeImpl.java
@@ -145,8 +145,7 @@ private void updateConfig(Config config) {
@Override
public void run() throws OpenemsNamedException {
-
- if (!this.ess.isManaged()) {
+ if (!this.ess.isManaged() && this.config.mode() != Mode.OFF) {
this._setConfiguredEssIsNotManaged(true);
return;
}
diff --git a/io.openems.edge.evcs.spelsberg/readme.adoc b/io.openems.edge.evcs.spelsberg/readme.adoc
index 00dc5bbffa0..5e972a157f1 100644
--- a/io.openems.edge.evcs.spelsberg/readme.adoc
+++ b/io.openems.edge.evcs.spelsberg/readme.adoc
@@ -5,7 +5,7 @@ Implementation of the Spelsberg SMART PRO charging station.
This EVCS component implementation is not yet fully feature tested. Please consider it BETA quality.
-=== Technical Data
+== Technical Data
* Rated current: 16A single and three phase
* Charging cable: Type 2, up to 16A
@@ -13,7 +13,7 @@ This EVCS component implementation is not yet fully feature tested. Please consi
* Communication protocol: Modbus TCP
-=== This implementation includes:
+== This implementation includes:
** Reading of current and power from the EVCS
** Setting charge power/current via OpenEMS Edge EVCS Controller
@@ -21,7 +21,7 @@ This EVCS component implementation is not yet fully feature tested. Please consi
** EVCS status updates
** Validation of Modbus TCP connection
-=== Planned Features:
+== Planned Features:
** Support for automatic phase shifting
diff --git a/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/RecordWorker.java b/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/RecordWorker.java
index fc51ebd37b5..f363bc0293b 100644
--- a/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/RecordWorker.java
+++ b/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/RecordWorker.java
@@ -202,8 +202,10 @@ public void collectData() {
protected void forever() throws InterruptedException {
final var record = this.records.take();
- if (this.config.readOnly() && this.config.debugMode()) {
- this.log.info("Read-Only-Mode is activated. Not writing record: " + record.toString());
+ if (this.config.readOnly()) {
+ if (this.config.debugMode()) {
+ this.log.info("Read-Only-Mode is activated. Not writing record: " + record.toString());
+ }
return;
}
diff --git a/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/Rrd4jReadHandler.java b/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/Rrd4jReadHandler.java
index 6747b3b96d9..7ee00663374 100644
--- a/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/Rrd4jReadHandler.java
+++ b/io.openems.edge.timedata.rrd4j/src/io/openems/edge/timedata/rrd4j/Rrd4jReadHandler.java
@@ -4,6 +4,7 @@
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
+import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -479,10 +480,10 @@ public SortedMap> queryHis
}, (t, u) -> t, TreeMap::new));
}
- private static record Range(ZonedDateTime from, ZonedDateTime to) {
+ protected static record Range(ZonedDateTime from, ZonedDateTime to) {
}
- private static Stream streamRanges(//
+ protected static Stream streamRanges(//
final ZonedDateTime from, //
final ZonedDateTime to, //
final Resolution resolution //
@@ -493,7 +494,8 @@ private static Stream streamRanges(//
final var builder = Stream.builder();
var fromRange = from;
- var toRange = increase(from, resolution);
+
+ var toRange = truncate(increase(from, resolution), resolution);
if (toRange.isAfter(to)) {
toRange = to;
}
@@ -501,7 +503,7 @@ private static Stream streamRanges(//
while (!fromRange.equals(toRange)) {
builder.accept(new Range(fromRange, toRange));
fromRange = toRange;
- toRange = increase(toRange, resolution);
+ toRange = truncate(increase(fromRange, resolution), resolution);
if (toRange.isAfter(to)) {
toRange = to;
}
@@ -510,6 +512,18 @@ private static Stream streamRanges(//
return builder.build();
}
+ private static ZonedDateTime truncate(ZonedDateTime date, Resolution resolution) {
+ return switch (resolution.getUnit()) {
+ case DAYS, HALF_DAYS, HOURS, SECONDS, MINUTES, MILLIS, NANOS, MICROS -> {
+ yield date.truncatedTo(resolution.getUnit());
+ }
+ case CENTURIES, DECADES, ERAS, FOREVER, MILLENNIA, YEARS, WEEKS -> {
+ throw new UnsupportedOperationException();
+ }
+ case MONTHS -> date.withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS);
+ };
+ }
+
private static ZonedDateTime increase(ZonedDateTime date, Resolution resolution) {
return switch (resolution.getUnit()) {
case DAYS, HALF_DAYS, HOURS, SECONDS, MINUTES, MILLIS, NANOS, MICROS -> {
diff --git a/io.openems.edge.timedata.rrd4j/test/io/openems/edge/timedata/rrd4j/Rrd4jReadHandlerTest.java b/io.openems.edge.timedata.rrd4j/test/io/openems/edge/timedata/rrd4j/Rrd4jReadHandlerTest.java
index 635a3035742..f0c0eab0d27 100644
--- a/io.openems.edge.timedata.rrd4j/test/io/openems/edge/timedata/rrd4j/Rrd4jReadHandlerTest.java
+++ b/io.openems.edge.timedata.rrd4j/test/io/openems/edge/timedata/rrd4j/Rrd4jReadHandlerTest.java
@@ -163,6 +163,21 @@ public void testQueryHistoricDataWithResolution15minutes() throws Exception {
), this.query(new Resolution(15, ChronoUnit.MINUTES)));
}
+ @Test
+ public void testStreamRanges() throws Exception {
+ final var utc = ZoneId.of("UTC");
+ final var from = ZonedDateTime.of(2023, 12, 26, 0, 0, 0, 0, utc);
+ final var to = ZonedDateTime.of(2024, 3, 8, 0, 0, 0, 0, utc);
+ final var result = Rrd4jReadHandler.streamRanges(from, to, new Resolution(1, ChronoUnit.MONTHS)).toList();
+ assertEquals(4, result.size());
+ assertEquals(new Rrd4jReadHandler.Range(from, ZonedDateTime.of(2024, 1, 1, 0, 0, 0, 0, utc)), result.get(0));
+ assertEquals(new Rrd4jReadHandler.Range(ZonedDateTime.of(2024, 1, 1, 0, 0, 0, 0, utc),
+ ZonedDateTime.of(2024, 2, 1, 0, 0, 0, 0, utc)), result.get(1));
+ assertEquals(new Rrd4jReadHandler.Range(ZonedDateTime.of(2024, 2, 1, 0, 0, 0, 0, utc),
+ ZonedDateTime.of(2024, 3, 1, 0, 0, 0, 0, utc)), result.get(2));
+ assertEquals(new Rrd4jReadHandler.Range(ZonedDateTime.of(2024, 3, 1, 0, 0, 0, 0, utc), to), result.get(3));
+ }
+
private SortedMap> query(Resolution resolution)
throws IllegalArgumentException, OpenemsNamedException {
return this.readHandler.queryHistoricData(this.rrdbId, //
diff --git a/io.openems.wrapper/influxdb-client-core.bnd b/io.openems.wrapper/influxdb-client-core.bnd
index 7798c9f3287..051a463b074 100644
--- a/io.openems.wrapper/influxdb-client-core.bnd
+++ b/io.openems.wrapper/influxdb-client-core.bnd
@@ -2,10 +2,10 @@ Bundle-Name: influxdb-client-core
Bundle-Description: The Java InfluxDB 2.0 Client Core
Bundle-DocURL: https://github.com/influxdata/influxdb-client-java
Bundle-License: https://opensource.org/licenses/MIT
-Bundle-Version: 7.1.0
+Bundle-Version: 7.2.0
Include-Resource: \
- @influxdb-client-core-7.1.0.jar,\
+ @influxdb-client-core-7.2.0.jar,\
Export-Package: \
com.influxdb,\
diff --git a/io.openems.wrapper/influxdb-client-java.bnd b/io.openems.wrapper/influxdb-client-java.bnd
index d104a2e8891..577af489e58 100644
--- a/io.openems.wrapper/influxdb-client-java.bnd
+++ b/io.openems.wrapper/influxdb-client-java.bnd
@@ -2,10 +2,10 @@ Bundle-Name: influxdb-client-java
Bundle-Description: The Java InfluxDB 2.0 Client Java
Bundle-DocURL: https://github.com/influxdata/influxdb-client-java
Bundle-License: https://opensource.org/licenses/MIT
-Bundle-Version: 7.1.0
+Bundle-Version: 7.2.0
Include-Resource: \
- @influxdb-client-java-7.1.0.jar,\
+ @influxdb-client-java-7.2.0.jar,\
Export-Package: \
com.influxdb.client,\
diff --git a/io.openems.wrapper/influxdb-client-utils.bnd b/io.openems.wrapper/influxdb-client-utils.bnd
index 32ffc20d813..d272fc79b37 100644
--- a/io.openems.wrapper/influxdb-client-utils.bnd
+++ b/io.openems.wrapper/influxdb-client-utils.bnd
@@ -2,10 +2,10 @@ Bundle-Name: influxdb-client-utils
Bundle-Description: The Java InfluxDB 2.0 Client Utils
Bundle-DocURL: https://github.com/influxdata/influxdb-client-java
Bundle-License: https://opensource.org/licenses/MIT
-Bundle-Version: 7.1.0
+Bundle-Version: 7.2.0
Include-Resource: \
- @influxdb-client-utils-7.1.0.jar,\
+ @influxdb-client-utils-7.2.0.jar,\
Export-Package: \
com.influxdb.utils,\
diff --git a/io.openems.wrapper/influxdb-flux-dsl.bnd b/io.openems.wrapper/influxdb-flux-dsl.bnd
index d7c95c16634..98b1eac6822 100644
--- a/io.openems.wrapper/influxdb-flux-dsl.bnd
+++ b/io.openems.wrapper/influxdb-flux-dsl.bnd
@@ -2,10 +2,10 @@ Bundle-Name: influxdb-flux-dsl
Bundle-Description: The Java InfluxDB 2.0 Flux DSL
Bundle-DocURL: https://github.com/influxdata/influxdb-client-java
Bundle-License: https://opensource.org/licenses/MIT
-Bundle-Version: 7.1.0
+Bundle-Version: 7.2.0
Include-Resource: \
- @flux-dsl-7.1.0.jar,\
+ @flux-dsl-7.2.0.jar,\
Export-Package: \
com.influxdb.query,\
diff --git a/tools/common.sh b/tools/common.sh
index 47370e548d1..ed3c536b323 100644
--- a/tools/common.sh
+++ b/tools/common.sh
@@ -8,11 +8,11 @@ common_initialize_environment() {
SRC_PACKAGE_JSON="ui/package.json"
SRC_PACKAGE_LOCK_JSON="ui/package-lock.json"
SRC_CHANGELOG_CONSTANTS="ui/src/app/changelog/view/component/changelog.constants.ts"
- SRC_ANDROID_GRADLE="ui/android/app/build.gradle"
# Set environment variables
- THEME="openems"
+ THEME="${THEME:-openems}"
PACKAGE_NAME="openems-edge"
+
VERSION_STRING=""
VERSION="$(cd ui && node -p "require('./package.json').version" && cd ..)"
local tmp_version=$(echo $VERSION | cut -d'-' -f1)
@@ -61,10 +61,6 @@ common_update_version_in_code() {
echo "## Update $SRC_CHANGELOG_CONSTANTS"
sed --in-place "s#\(UI_VERSION = \"\).*\(\";\)#\1$VERSION\2#" $SRC_CHANGELOG_CONSTANTS
-
- echo "## Update $SRC_ANDROID_GRADLE"
- sed --in-place "s#\(versionCode \).*\$#\1$(printf "%04d%02d%02d" $VERSION_MAJOR $VERSION_MINOR $VERSION_PATCH)#" $SRC_ANDROID_GRADLE
- sed --in-place "s#\(versionName \).*\$#\1\"$VERSION\"#" $SRC_ANDROID_GRADLE
}
# Build OpenEMS Backend
@@ -120,6 +116,36 @@ common_build_ui() {
fi
}
+common_build_android_app() {
+ echo "# Build OpenEMS Android APP"
+ if [ "${NODE_MODULES_CACHE}" != "" -a -d "$NODE_MODULES_CACHE" ]; then
+ echo "## Use cached node_modules"
+ mv -f "${NODE_MODULES_CACHE}" "ui/node_modules"
+ fi
+ cd ui
+
+ # Install dependencies from package.json
+ npm ci
+ if [ "${NG_CLI_CACHE_PATH}" != "" ]; then
+ echo "## Angular Cache: $NG_CLI_CACHE_PATH"
+ node_modules/.bin/ng config cli.cache.path "$NG_CLI_CACHE_PATH"
+ fi
+
+ case "${THEME^^}" in
+ "FENECON") NODE_ENV="FENECON";;
+ "HECKERT") NODE_ENV="Heckert";;
+ esac
+
+ # Install depencencies for capacitor
+ NODE_ENV=${NODE_ENV} ionic cap build android -c "${THEME},${THEME}-backend-deploy-app"
+
+ # Build App
+ cd android
+ THEME=${THEME} ./gradlew buildThemeRelease
+
+ cd ../..
+}
+
common_save_environment() {
local file=${1:-build.environment}
echo "
@@ -132,4 +158,4 @@ common_save_environment() {
export VERSION_DEV_COMMIT=\"$VERSION_DEV_COMMIT\"
export VERSION_DEV_BUILD_TIME=\"$VERSION_DEV_BUILD_TIME\"
" | tee $file
-}
\ No newline at end of file
+}
diff --git a/tools/drone/openems-android.sh b/tools/drone/openems-android.sh
index 8e19fd37bea..91067d639ab 100755
--- a/tools/drone/openems-android.sh
+++ b/tools/drone/openems-android.sh
@@ -2,10 +2,10 @@
NODE_MAJOR=20
-ANDROID_SDK_VERSION=9477386
+ANDROID_SDK_VERSION=11076708
ANDROID_HOME="/opt/android-sdk"
-ANDROID_BUILD_TOOLS_VERSION=32.0.0
-ANDROID_PLATFORMS_VERSION=32
+ANDROID_BUILD_TOOLS_VERSION=34.0.0
+ANDROID_PLATFORMS_VERSION=34
# Build/Update 'openems-android' Container for Drone/Woodpecker CI
@@ -14,6 +14,8 @@ docker pull node:${NODE_MAJOR}
docker build -t openems-android:${NODE_MAJOR}.${ANDROID_PLATFORMS_VERSION} -f - . < '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
- die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
+$ROOT/gradlew $@
diff --git a/ui/android/gradlew.bat b/ui/android/gradlew.bat
index 93e3f59f135..0aaa0ca9698 100644
--- a/ui/android/gradlew.bat
+++ b/ui/android/gradlew.bat
@@ -1,92 +1,4 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@echo off&setlocal
+set ROOT=%~dp0..\..
+
+CALL %ROOT%\gradlew.bat
diff --git a/ui/android/keystore.properties b/ui/android/keystore.properties
index 9ac490bd3ea..23a54c08f52 100644
--- a/ui/android/keystore.properties
+++ b/ui/android/keystore.properties
@@ -1,4 +1,4 @@
storePassword=Halelilu4
keyPassword=Halelilu4
keyAlias=key1
-storeFile=./../../key.jks
\ No newline at end of file
+storeFile=./../../key.jks
diff --git a/ui/android/settings.gradle b/ui/android/settings.gradle
index 3b4431d7724..944c98f4239 100644
--- a/ui/android/settings.gradle
+++ b/ui/android/settings.gradle
@@ -2,4 +2,4 @@ include ':app'
include ':capacitor-cordova-android-plugins'
project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
-apply from: 'capacitor.settings.gradle'
\ No newline at end of file
+apply from: 'capacitor.settings.gradle'
diff --git a/ui/android/variables.gradle b/ui/android/variables.gradle
index 5946adabdd2..631e62221ee 100644
--- a/ui/android/variables.gradle
+++ b/ui/android/variables.gradle
@@ -1,7 +1,7 @@
ext {
minSdkVersion = 22
- compileSdkVersion = 33
- targetSdkVersion = 33
+ compileSdkVersion = 34
+ targetSdkVersion = 34
androidxActivityVersion = '1.7.0'
androidxAppCompatVersion = '1.6.1'
androidxCoordinatorLayoutVersion = '1.2.0'
@@ -13,4 +13,4 @@ ext {
androidxJunitVersion = '1.1.5'
androidxEspressoCoreVersion = '3.5.1'
cordovaAndroidVersion = '10.1.1'
-}
\ No newline at end of file
+}
diff --git a/ui/angular.json b/ui/angular.json
index bb545d9ee55..e1fba2f0688 100644
--- a/ui/angular.json
+++ b/ui/angular.json
@@ -220,4 +220,4 @@
"styleext": "scss"
}
}
-}
\ No newline at end of file
+}
diff --git a/ui/capacitor.config.ts b/ui/capacitor.config.ts
index 7702fbd212e..eadd5c3ecba 100644
--- a/ui/capacitor.config.ts
+++ b/ui/capacitor.config.ts
@@ -22,10 +22,10 @@ const baseConfig: CapacitorConfig = {
useDialog: true,
},
CapacitorCookies: {
- enabled: true
- }
- }
-}
+ enabled: true,
+ },
+ },
+};
switch (process.env.NODE_ENV as Theme) {
// case 'EXAMPLE':
@@ -40,8 +40,7 @@ switch (process.env.NODE_ENV as Theme) {
// }
// break;
default:
- throw new Error(`Capacitor config for theme ${process.env.NODE_ENV} not implemented.`)
-}
-console.warn(config);
+ throw new Error(`Capacitor config for theme ${process.env.NODE_ENV} not implemented.`);
+}
export default config;
diff --git a/ui/e2e/tsconfig.json b/ui/e2e/tsconfig.json
index a5524bf13b2..a82df00eef3 100644
--- a/ui/e2e/tsconfig.json
+++ b/ui/e2e/tsconfig.json
@@ -9,4 +9,4 @@
"node"
]
}
-}
\ No newline at end of file
+}
diff --git a/ui/karma.conf.js b/ui/karma.conf.js
index 0980006d7ec..be800f624ce 100644
--- a/ui/karma.conf.js
+++ b/ui/karma.conf.js
@@ -31,7 +31,7 @@ module.exports = function (config) {
dir: require('path').join(__dirname, './coverage/ngv'),
subdir: '.',
reporters: [
- {type: 'lcov'},
+ { type: 'lcov' },
{ type: 'html' },
{ type: 'text-summary' }
],
diff --git a/ui/ngsw-config.json b/ui/ngsw-config.json
index cfbfb992b16..04d5a40739a 100644
--- a/ui/ngsw-config.json
+++ b/ui/ngsw-config.json
@@ -24,4 +24,4 @@
}
}
]
-}
\ No newline at end of file
+}
diff --git a/ui/package-lock.json b/ui/package-lock.json
index ce222429275..edc7956ab67 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -1,44 +1,44 @@
{
"name": "openems-ui",
- "version": "2024.8.0",
+ "version": "2024.9.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openems-ui",
- "version": "2024.8.0",
+ "version": "2024.9.0",
"license": "AGPL-3.0",
"dependencies": {
- "@angular/animations": "~16.2.12",
- "@angular/common": "~16.2.12",
- "@angular/core": "~16.2.12",
- "@angular/forms": "~16.2.12",
- "@angular/platform-browser": "~16.2.12",
- "@angular/platform-browser-dynamic": "~16.2.12",
- "@angular/router": "~16.2.12",
- "@angular/service-worker": "~16.2.12",
- "@capacitor-community/file-opener": "^1.0.5",
- "@capacitor/android": "5.7.7",
- "@capacitor/app": "^5.0.6",
- "@capacitor/core": "5.7.7",
- "@capacitor/filesystem": "^5.2.0",
- "@capacitor/ios": "5.7.7",
- "@capacitor/splash-screen": "^5.0.6",
+ "@angular/animations": "18.0.5",
+ "@angular/common": "18.0.5",
+ "@angular/core": "18.0.5",
+ "@angular/forms": "18.0.5",
+ "@angular/platform-browser": "18.0.5",
+ "@angular/platform-browser-dynamic": "18.0.5",
+ "@angular/router": "18.0.5",
+ "@angular/service-worker": "18.0.5",
+ "@capacitor-community/file-opener": "^6.0.0",
+ "@capacitor/android": "^6.0.0",
+ "@capacitor/app": "^6.0.0",
+ "@capacitor/core": "^6.0.0",
+ "@capacitor/filesystem": "^6.0.0",
+ "@capacitor/ios": "^6.0.0",
+ "@capacitor/splash-screen": "^6.0.0",
"@ionic-native/core": "^5.36.0",
"@ionic-native/file-opener": "^5.36.0",
"@ionic/angular": "^6.7.5",
- "@ionic/cli": "^7.1.6",
"@ngx-formly/core": "^6.3.0",
"@ngx-formly/ionic": "^6.3.6",
"@ngx-formly/schematics": "^6.3.0",
"@ngx-translate/core": "^15.0.0",
"@nodro7/angular-mydatepicker": "^0.14.0",
"capacitor-blob-writer": "^1.1.17",
- "capacitor-ios-autofill-save-password": "^2.0.0",
- "capacitor-secure-storage-plugin": "^0.9.0",
- "chart.js": "^4.4.3",
+ "capacitor-ios-autofill-save-password": "^3.0.0",
+ "capacitor-secure-storage-plugin": "^0.10.0",
+ "chart.js": "^4.4.4",
"chartjs-adapter-date-fns": "^3.0.0",
"chartjs-plugin-annotation": "^3.0.1",
+ "chartjs-plugin-datalabels": "^2.2.0",
"chartjs-plugin-zoom": "^2.0.1",
"classlist.js": "^1.1.20150312",
"compare-versions": "^6.1.1",
@@ -46,41 +46,49 @@
"date-fns": "^2.30.0",
"file-saver-es": "^2.0.5",
"ng2-charts": "4.1.1",
- "ngx-cookie-service": "^16.1.0",
- "ngx-device-detector": "^6.0.2",
+ "ngx-cookie-service": "18.0.0",
+ "ngx-device-detector": "^8.0.0",
"ngx-spinner": "^16.0.2",
"roboto-fontface": "^0.10.0",
"rxjs": "~6.6.7",
- "swiper": "11.1.8",
+ "swiper": "11.1.11",
"tslib": "^2.6.2",
"uuid": "^10.0.0",
- "zone.js": "~0.13.3"
+ "zone.js": "~0.14.7"
},
"devDependencies": {
- "@angular-devkit/build-angular": "^16.2.14",
- "@angular-eslint/builder": "^16.3.1",
- "@angular-eslint/eslint-plugin": "^16.3.1",
- "@angular-eslint/eslint-plugin-template": "^16.3.1",
- "@angular-eslint/template-parser": "^16.3.1",
- "@angular/cli": "^16.2.13",
- "@angular/compiler": "^16.2.12",
- "@angular/compiler-cli": "^16.2.12",
- "@angular/language-service": "^16.2.12",
- "@capacitor/assets": "^3.0.0",
- "@capacitor/cli": "6.1.1",
+ "@angular-devkit/build-angular": "^18.0.5",
+ "@angular-devkit/core": "18.0.5",
+ "@angular-devkit/schematics": "18.0.5",
+ "@angular-eslint/builder": "^18.1.0",
+ "@angular-eslint/eslint-plugin": "^18.1.0",
+ "@angular-eslint/eslint-plugin-template": "^18.1.0",
+ "@angular-eslint/template-parser": "^18.1.0",
+ "@angular/cli": "18.1.0",
+ "@angular/compiler": "18.0.5",
+ "@angular/compiler-cli": "18.0.5",
+ "@angular/language-service": "18.0.5",
+ "@capacitor/assets": "^3.0.5",
+ "@capacitor/cli": "6.1.2",
"@ionic/angular-toolkit": "^11.0.1",
- "@stylistic/eslint-plugin": "^2.4.0",
+ "@ionic/cli": "^7.2.0",
+ "@stylistic/eslint-plugin": "^2.7.2",
"@types/jasmine": "~4.3.6",
"@types/jasminewd2": "~2.0.13",
+ "@types/json-schema": "^7.0.15",
"@types/node": "^20.12.6",
+ "@types/qs": "^6.9.15",
+ "@types/range-parser": "^1.2.7",
+ "@types/send": "^0.17.4",
"@types/uuid": "^10.0.0",
- "@typescript-eslint/eslint-plugin": "^6.21.0",
- "@typescript-eslint/parser": "^6.21.0",
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
+ "@typescript-eslint/parser": "^7.0.0",
+ "@typescript-eslint/types": "^7.0.0",
"eslint": "^8.57.0",
"eslint-plugin-import": "2.29.1",
- "eslint-plugin-jsdoc": "48.2.3",
+ "eslint-plugin-jsdoc": "48.10.0",
"eslint-plugin-prefer-arrow": "1.2.3",
- "eslint-plugin-unused-imports": "^3.2.0",
+ "eslint-plugin-unused-imports": "^4.1.3",
"jasmine-core": "~4.5.0",
"jasmine-spec-reporter": "~7.0.0",
"karma": "~6.4.2",
@@ -91,20 +99,14 @@
"karma-jasmine-html-reporter": "^2.1.0",
"protractor": "~7.0.0",
"ts-node": "^10.9.2",
- "typescript": "~4.9.5",
+ "typescript": "~5.4.5",
"typescript-strict-plugin": "^2.4.4"
}
},
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -116,21 +118,70 @@
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.1602.13",
+ "version": "0.1802.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.2.tgz",
+ "integrity": "sha512-LPRl9jhcf0NgshaL6RoUy1uL/cAyNt7oxctoZ9EHUu8eh5E9W/jZGhVowjOLpirwqYhmEzKJJIeS49Ssqs3RQg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "16.2.13",
+ "@angular-devkit/core": "18.2.2",
"rxjs": "7.8.1"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ }
+ },
+ "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": {
+ "version": "18.2.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.2.tgz",
+ "integrity": "sha512-Zz0tGptI/QQnUBDdp+1G5wGwQWMjpfe2oO+UohkrDVgFS71yVj4VDnOy51kMTxBvzw+36evTgthPpmzqPIfxBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "8.17.1",
+ "ajv-formats": "3.0.1",
+ "jsonc-parser": "3.3.1",
+ "picomatch": "4.0.2",
+ "rxjs": "7.8.1",
+ "source-map": "0.7.4"
+ },
+ "engines": {
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@angular-devkit/architect/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/@angular-devkit/architect/node_modules/rxjs": {
"version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -138,95 +189,97 @@
}
},
"node_modules/@angular-devkit/build-angular": {
- "version": "16.2.14",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@ampproject/remapping": "2.2.1",
- "@angular-devkit/architect": "0.1602.14",
- "@angular-devkit/build-webpack": "0.1602.14",
- "@angular-devkit/core": "16.2.14",
- "@babel/core": "7.22.9",
- "@babel/generator": "7.22.9",
- "@babel/helper-annotate-as-pure": "7.22.5",
- "@babel/helper-split-export-declaration": "7.22.6",
- "@babel/plugin-proposal-async-generator-functions": "7.20.7",
- "@babel/plugin-transform-async-to-generator": "7.22.5",
- "@babel/plugin-transform-runtime": "7.22.9",
- "@babel/preset-env": "7.22.9",
- "@babel/runtime": "7.22.6",
- "@babel/template": "7.22.5",
- "@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "16.2.14",
- "@vitejs/plugin-basic-ssl": "1.0.1",
+ "version": "18.2.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.2.tgz",
+ "integrity": "sha512-7HEnTN2T1jnjuItXKcApOsoYGgfou4+POju3ZbwIQukDZ3B2COskvQkVTxqPNrQ0ZjT2mxZYoVlmGW9M+7N25g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "2.3.0",
+ "@angular-devkit/architect": "0.1802.2",
+ "@angular-devkit/build-webpack": "0.1802.2",
+ "@angular-devkit/core": "18.2.2",
+ "@angular/build": "18.2.2",
+ "@babel/core": "7.25.2",
+ "@babel/generator": "7.25.0",
+ "@babel/helper-annotate-as-pure": "7.24.7",
+ "@babel/helper-split-export-declaration": "7.24.7",
+ "@babel/plugin-transform-async-generator-functions": "7.25.0",
+ "@babel/plugin-transform-async-to-generator": "7.24.7",
+ "@babel/plugin-transform-runtime": "7.24.7",
+ "@babel/preset-env": "7.25.3",
+ "@babel/runtime": "7.25.0",
+ "@discoveryjs/json-ext": "0.6.1",
+ "@ngtools/webpack": "18.2.2",
+ "@vitejs/plugin-basic-ssl": "1.1.0",
"ansi-colors": "4.1.3",
- "autoprefixer": "10.4.14",
+ "autoprefixer": "10.4.20",
"babel-loader": "9.1.3",
- "babel-plugin-istanbul": "6.1.1",
"browserslist": "^4.21.5",
- "chokidar": "3.5.3",
- "copy-webpack-plugin": "11.0.0",
- "critters": "0.0.20",
- "css-loader": "6.8.1",
- "esbuild-wasm": "0.18.17",
- "fast-glob": "3.3.1",
- "guess-parser": "0.4.22",
- "https-proxy-agent": "5.0.1",
- "inquirer": "8.2.4",
- "jsonc-parser": "3.2.0",
+ "copy-webpack-plugin": "12.0.2",
+ "critters": "0.0.24",
+ "css-loader": "7.1.2",
+ "esbuild-wasm": "0.23.0",
+ "fast-glob": "3.3.2",
+ "http-proxy-middleware": "3.0.0",
+ "https-proxy-agent": "7.0.5",
+ "istanbul-lib-instrument": "6.0.3",
+ "jsonc-parser": "3.3.1",
"karma-source-map-support": "1.4.0",
- "less": "4.1.3",
- "less-loader": "11.1.0",
+ "less": "4.2.0",
+ "less-loader": "12.2.0",
"license-webpack-plugin": "4.0.2",
- "loader-utils": "3.2.1",
- "magic-string": "0.30.1",
- "mini-css-extract-plugin": "2.7.6",
- "mrmime": "1.0.1",
- "open": "8.4.2",
+ "loader-utils": "3.3.1",
+ "magic-string": "0.30.11",
+ "mini-css-extract-plugin": "2.9.0",
+ "mrmime": "2.0.0",
+ "open": "10.1.0",
"ora": "5.4.1",
"parse5-html-rewriting-stream": "7.0.0",
- "picomatch": "2.3.1",
- "piscina": "4.0.0",
- "postcss": "8.4.31",
- "postcss-loader": "7.3.3",
+ "picomatch": "4.0.2",
+ "piscina": "4.6.1",
+ "postcss": "8.4.41",
+ "postcss-loader": "8.1.1",
"resolve-url-loader": "5.0.0",
"rxjs": "7.8.1",
- "sass": "1.64.1",
- "sass-loader": "13.3.2",
- "semver": "7.5.4",
- "source-map-loader": "4.0.1",
+ "sass": "1.77.6",
+ "sass-loader": "16.0.0",
+ "semver": "7.6.3",
+ "source-map-loader": "5.0.0",
"source-map-support": "0.5.21",
- "terser": "5.19.2",
- "text-table": "0.2.0",
+ "terser": "5.31.6",
"tree-kill": "1.2.2",
- "tslib": "2.6.1",
- "vite": "4.5.3",
- "webpack": "5.88.2",
- "webpack-dev-middleware": "6.1.2",
- "webpack-dev-server": "4.15.1",
- "webpack-merge": "5.9.0",
+ "tslib": "2.6.3",
+ "vite": "5.4.0",
+ "watchpack": "2.4.1",
+ "webpack": "5.94.0",
+ "webpack-dev-middleware": "7.3.0",
+ "webpack-dev-server": "5.0.4",
+ "webpack-merge": "6.0.1",
"webpack-subresource-integrity": "5.1.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
},
"optionalDependencies": {
- "esbuild": "0.18.17"
+ "esbuild": "0.23.0"
},
"peerDependencies": {
- "@angular/compiler-cli": "^16.0.0",
- "@angular/localize": "^16.0.0",
- "@angular/platform-server": "^16.0.0",
- "@angular/service-worker": "^16.0.0",
+ "@angular/compiler-cli": "^18.0.0",
+ "@angular/localize": "^18.0.0",
+ "@angular/platform-server": "^18.0.0",
+ "@angular/service-worker": "^18.0.0",
+ "@web/test-runner": "^0.18.0",
+ "browser-sync": "^3.0.2",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"karma": "^6.3.0",
- "ng-packagr": "^16.0.0",
+ "ng-packagr": "^18.0.0",
"protractor": "^7.0.0",
"tailwindcss": "^2.0.0 || ^3.0.0",
- "typescript": ">=4.9.3 <5.2"
+ "typescript": ">=5.4 <5.6"
},
"peerDependenciesMeta": {
"@angular/localize": {
@@ -238,6 +291,12 @@
"@angular/service-worker": {
"optional": true
},
+ "@web/test-runner": {
+ "optional": true
+ },
+ "browser-sync": {
+ "optional": true
+ },
"jest": {
"optional": true
},
@@ -258,454 +317,531 @@
}
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/@ampproject/remapping": {
- "version": "2.2.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": {
- "version": "0.1602.14",
+ "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": {
+ "version": "18.2.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.2.tgz",
+ "integrity": "sha512-Zz0tGptI/QQnUBDdp+1G5wGwQWMjpfe2oO+UohkrDVgFS71yVj4VDnOy51kMTxBvzw+36evTgthPpmzqPIfxBw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "16.2.14",
- "rxjs": "7.8.1"
+ "ajv": "8.17.1",
+ "ajv-formats": "3.0.1",
+ "jsonc-parser": "3.3.1",
+ "picomatch": "4.0.2",
+ "rxjs": "7.8.1",
+ "source-map": "0.7.4"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": {
- "version": "16.2.14",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "8.12.0",
- "ajv-formats": "2.1.1",
- "jsonc-parser": "3.2.0",
- "picomatch": "2.3.1",
- "rxjs": "7.8.1",
- "source-map": "0.7.4"
+ "node_modules/@angular-devkit/build-angular/node_modules/@angular/build": {
+ "version": "18.2.2",
+ "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.2.tgz",
+ "integrity": "sha512-okaDdTMXnDhvnnnih6rPQnexL6htfEAPr19bB1Ci9d31gEjVuKZCjlcw2sPZ6BUyilwC9nZlCI5vbH1Ljf6mzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "2.3.0",
+ "@angular-devkit/architect": "0.1802.2",
+ "@babel/core": "7.25.2",
+ "@babel/helper-annotate-as-pure": "7.24.7",
+ "@babel/helper-split-export-declaration": "7.24.7",
+ "@babel/plugin-syntax-import-attributes": "7.24.7",
+ "@inquirer/confirm": "3.1.22",
+ "@vitejs/plugin-basic-ssl": "1.1.0",
+ "browserslist": "^4.23.0",
+ "critters": "0.0.24",
+ "esbuild": "0.23.0",
+ "fast-glob": "3.3.2",
+ "https-proxy-agent": "7.0.5",
+ "listr2": "8.2.4",
+ "lmdb": "3.0.13",
+ "magic-string": "0.30.11",
+ "mrmime": "2.0.0",
+ "parse5-html-rewriting-stream": "7.0.0",
+ "picomatch": "4.0.2",
+ "piscina": "4.6.1",
+ "rollup": "4.20.0",
+ "sass": "1.77.6",
+ "semver": "7.6.3",
+ "vite": "5.4.0",
+ "watchpack": "2.4.1"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
},
"peerDependencies": {
- "chokidar": "^3.5.2"
+ "@angular/compiler-cli": "^18.0.0",
+ "@angular/localize": "^18.0.0",
+ "@angular/platform-server": "^18.0.0",
+ "@angular/service-worker": "^18.0.0",
+ "less": "^4.2.0",
+ "postcss": "^8.4.0",
+ "tailwindcss": "^2.0.0 || ^3.0.0",
+ "typescript": ">=5.4 <5.6"
},
"peerDependenciesMeta": {
- "chokidar": {
+ "@angular/localize": {
+ "optional": true
+ },
+ "@angular/platform-server": {
+ "optional": true
+ },
+ "@angular/service-worker": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tailwindcss": {
"optional": true
}
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core/node_modules/ajv": {
- "version": "8.12.0",
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
+ "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
+ "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
+ "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
+ "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
+ "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
+ "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
+ "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
+ "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
+ "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
+ "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
+ "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
+ "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
+ "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
+ "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
+ "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
+ "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core/node_modules/source-map": {
- "version": "0.7.4",
+ "node_modules/@angular-devkit/build-angular/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
"engines": {
- "node": ">= 8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": {
- "version": "7.22.9",
+ "node_modules/@angular-devkit/build-angular/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.5",
- "@babel/generator": "^7.22.9",
- "@babel/helper-compilation-targets": "^7.22.9",
- "@babel/helper-module-transforms": "^7.22.9",
- "@babel/helpers": "^7.22.6",
- "@babel/parser": "^7.22.7",
- "@babel/template": "^7.22.5",
- "@babel/traverse": "^7.22.8",
- "@babel/types": "^7.22.5",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.1"
- },
"engines": {
- "node": ">=6.9.0"
+ "node": ">=12"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
+ "node_modules/@angular-devkit/build-angular/node_modules/emoji-regex": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
"dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
+ "license": "MIT"
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime": {
- "version": "7.22.6",
+ "node_modules/@angular-devkit/build-angular/node_modules/listr2": {
+ "version": "8.2.4",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz",
+ "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "regenerator-runtime": "^0.13.11"
+ "cli-truncate": "^4.0.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^6.1.0",
+ "rfdc": "^1.4.1",
+ "wrap-ansi": "^9.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/@babel/template": {
- "version": "7.22.5",
+ "node_modules/@angular-devkit/build-angular/node_modules/rollup": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
+ "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.22.5",
- "@babel/parser": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.20.0",
+ "@rollup/rollup-android-arm64": "4.20.0",
+ "@rollup/rollup-darwin-arm64": "4.20.0",
+ "@rollup/rollup-darwin-x64": "4.20.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.20.0",
+ "@rollup/rollup-linux-arm64-musl": "4.20.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-musl": "4.20.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.20.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.20.0",
+ "@rollup/rollup-win32-x64-msvc": "4.20.0",
+ "fsevents": "~2.3.2"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/ajv": {
- "version": "6.12.6",
+ "node_modules/@angular-devkit/build-angular/node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@angular-devkit/build-angular/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"dev": true,
"license": "MIT",
"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"
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/ajv-keywords": {
- "version": "3.5.2",
+ "node_modules/@angular-devkit/build-angular/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
"license": "MIT",
- "peerDependencies": {
- "ajv": "^6.9.1"
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/commander": {
- "version": "2.20.3",
+ "node_modules/@angular-devkit/build-angular/node_modules/tslib": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
"dev": true,
- "license": "MIT"
+ "license": "0BSD"
},
- "node_modules/@angular-devkit/build-angular/node_modules/fast-glob": {
- "version": "3.3.1",
+ "node_modules/@angular-devkit/build-angular/node_modules/wrap-ansi": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
},
"engines": {
- "node": ">=8.6.0"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@angular-devkit/build-angular/node_modules/jsonc-parser": {
- "version": "3.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@angular-devkit/build-angular/node_modules/less": {
- "version": "4.1.3",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "copy-anything": "^2.0.1",
- "parse-node-version": "^1.0.1",
- "tslib": "^2.3.0"
- },
- "bin": {
- "lessc": "bin/lessc"
- },
- "engines": {
- "node": ">=6"
- },
- "optionalDependencies": {
- "errno": "^0.1.1",
- "graceful-fs": "^4.1.2",
- "image-size": "~0.5.0",
- "make-dir": "^2.1.0",
- "mime": "^1.4.1",
- "needle": "^3.1.0",
- "source-map": "~0.6.0"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/postcss": {
- "version": "8.4.31",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/regenerator-runtime": {
- "version": "0.13.11",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@angular-devkit/build-angular/node_modules/rxjs": {
- "version": "7.8.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": {
- "version": "3.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/semver": {
- "version": "7.5.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/source-map": {
- "version": "0.6.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/terser": {
- "version": "5.19.2",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/tslib": {
- "version": "2.6.1",
- "dev": true,
- "license": "0BSD"
- },
- "node_modules/@angular-devkit/build-angular/node_modules/webpack": {
- "version": "5.88.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^1.0.0",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
- "acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
- "browserslist": "^4.14.5",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.7",
- "watchpack": "^2.4.0",
- "webpack-sources": "^3.2.3"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- }
- }
- },
- "node_modules/@angular-devkit/build-angular/node_modules/yallist": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
"node_modules/@angular-devkit/build-webpack": {
- "version": "0.1602.14",
+ "version": "0.1802.2",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.2.tgz",
+ "integrity": "sha512-Pj+YmKh0nJOKl6QAsqYh3SqfuVJrFqjyp5WrG9BgfsMD9GCMD+5teMHNYJlp+vG/C8e7VdZp4rqOon8K9Xn4Mw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.1602.14",
+ "@angular-devkit/architect": "0.1802.2",
"rxjs": "7.8.1"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
},
"peerDependencies": {
"webpack": "^5.30.0",
- "webpack-dev-server": "^4.0.0"
- }
- },
- "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": {
- "version": "0.1602.14",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@angular-devkit/core": "16.2.14",
- "rxjs": "7.8.1"
- },
- "engines": {
- "node": "^16.14.0 || >=18.10.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
- }
- },
- "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": {
- "version": "16.2.14",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "8.12.0",
- "ajv-formats": "2.1.1",
- "jsonc-parser": "3.2.0",
- "picomatch": "2.3.1",
- "rxjs": "7.8.1",
- "source-map": "0.7.4"
- },
- "engines": {
- "node": "^16.14.0 || >=18.10.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
- },
- "peerDependencies": {
- "chokidar": "^3.5.2"
- },
- "peerDependenciesMeta": {
- "chokidar": {
- "optional": true
- }
+ "webpack-dev-server": "^5.0.2"
}
},
- "node_modules/@angular-devkit/build-webpack/node_modules/jsonc-parser": {
- "version": "3.2.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@angular-devkit/build-webpack/node_modules/rxjs": {
"version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -713,19 +849,21 @@
}
},
"node_modules/@angular-devkit/core": {
- "version": "16.2.13",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.5.tgz",
+ "integrity": "sha512-sGtrS0SqkcBvyuv0QkIfyadwPgDhMroz1r51lMh1hwzJaJ0LNuVMLviEeYIybeBnvAdp9YvYC8I1WgB/FUEFBw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ajv": "8.12.0",
- "ajv-formats": "2.1.1",
- "jsonc-parser": "3.2.0",
- "picomatch": "2.3.1",
+ "ajv": "8.13.0",
+ "ajv-formats": "3.0.1",
+ "jsonc-parser": "3.2.1",
+ "picomatch": "4.0.2",
"rxjs": "7.8.1",
"source-map": "0.7.4"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
},
@@ -739,12 +877,16 @@
}
},
"node_modules/@angular-devkit/core/node_modules/jsonc-parser": {
- "version": "3.2.0",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
"dev": true,
"license": "MIT"
},
"node_modules/@angular-devkit/core/node_modules/rxjs": {
"version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -752,29 +894,45 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "16.2.13",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.5.tgz",
+ "integrity": "sha512-hZwAq3hwuJzCuh7uqO/7T9IMERhYVxz+ganJlEykpyr58o0IjUM1Q4ZSH5UOYlGRPdBCZJbfiafZ0Sg5w5xBww==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "16.2.13",
- "jsonc-parser": "3.2.0",
- "magic-string": "0.30.1",
+ "@angular-devkit/core": "18.0.5",
+ "jsonc-parser": "3.2.1",
+ "magic-string": "0.30.10",
"ora": "5.4.1",
"rxjs": "7.8.1"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
}
},
"node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": {
- "version": "3.2.0",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
"dev": true,
"license": "MIT"
},
+ "node_modules/@angular-devkit/schematics/node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
"node_modules/@angular-devkit/schematics/node_modules/rxjs": {
"version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -782,117 +940,106 @@
}
},
"node_modules/@angular-eslint/builder": {
- "version": "16.3.1",
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-18.3.0.tgz",
+ "integrity": "sha512-httEQyqyBw3+0CRtAa7muFxHrauRfkEfk/jmrh5fn2Eiu+I53hAqFPgrwVi1V6AP/kj2zbAiWhd5xM3pMJdoRQ==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@nx/devkit": "16.5.1",
- "nx": "16.5.1"
- },
"peerDependencies": {
- "eslint": "^7.20.0 || ^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
"typescript": "*"
}
},
"node_modules/@angular-eslint/bundled-angular-compiler": {
- "version": "16.3.1",
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.3.0.tgz",
+ "integrity": "sha512-v/59FxUKnMzymVce99gV43huxoqXWMb85aKvzlNvLN+ScDu6ZE4YMiTQNpfapVL2lkxhs0uwB3jH17EYd5TcsA==",
"dev": true,
"license": "MIT"
},
"node_modules/@angular-eslint/eslint-plugin": {
- "version": "16.3.1",
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.3.0.tgz",
+ "integrity": "sha512-Vl7gfPMXxvtHTjYdlzR161aj5xrqW6T57wd8ToQ7Gqzm0qHGfY6kE4SQobUa2LCYckTNSlv+zXe48C4ah/dSjw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-eslint/utils": "16.3.1",
- "@typescript-eslint/utils": "5.62.0"
+ "@angular-eslint/bundled-angular-compiler": "18.3.0",
+ "@angular-eslint/utils": "18.3.0"
},
"peerDependencies": {
- "eslint": "^7.20.0 || ^8.0.0",
+ "@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
"typescript": "*"
}
},
"node_modules/@angular-eslint/eslint-plugin-template": {
- "version": "16.3.1",
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.3.0.tgz",
+ "integrity": "sha512-ddR/qwYbUeq9IpyVKrPbfZyRBTy6V8uc5I0JcBKttQ4CZ4joXhqsVgWFsI+JAMi8E66uNj1VC7NuKCOjDINv2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-eslint/bundled-angular-compiler": "16.3.1",
- "@angular-eslint/utils": "16.3.1",
- "@typescript-eslint/type-utils": "5.62.0",
- "@typescript-eslint/utils": "5.62.0",
+ "@angular-eslint/bundled-angular-compiler": "18.3.0",
+ "@angular-eslint/utils": "18.3.0",
"aria-query": "5.3.0",
- "axobject-query": "4.0.0"
+ "axobject-query": "4.1.0"
},
"peerDependencies": {
- "eslint": "^7.20.0 || ^8.0.0",
+ "@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
"typescript": "*"
}
},
"node_modules/@angular-eslint/template-parser": {
- "version": "16.3.1",
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.3.0.tgz",
+ "integrity": "sha512-1mUquqcnugI4qsoxcYZKZ6WMi6RPelDcJZg2YqGyuaIuhWmi3ZqJZLErSSpjP60+TbYZu7wM8Kchqa1bwJtEaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-eslint/bundled-angular-compiler": "16.3.1",
- "eslint-scope": "^7.0.0"
+ "@angular-eslint/bundled-angular-compiler": "18.3.0",
+ "eslint-scope": "^8.0.2"
},
"peerDependencies": {
- "eslint": "^7.20.0 || ^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
"typescript": "*"
}
},
- "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": {
- "version": "7.2.2",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@angular-eslint/template-parser/node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/@angular-eslint/utils": {
- "version": "16.3.1",
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.3.0.tgz",
+ "integrity": "sha512-sCrkHkpxBJZLuCikdboZoawCfc2UgbJv+T14tu2uQCv+Vwzeadnu04vkeY2vTkA8GeBdBij/G9/N/nvwmwVw3g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-eslint/bundled-angular-compiler": "16.3.1",
- "@typescript-eslint/utils": "5.62.0"
+ "@angular-eslint/bundled-angular-compiler": "18.3.0"
},
"peerDependencies": {
- "eslint": "^7.20.0 || ^8.0.0",
+ "@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
"typescript": "*"
}
},
"node_modules/@angular/animations": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.0.5.tgz",
+ "integrity": "sha512-RYwlS+4I33beAWdzFFmaDPqXZN+r66qPzzMOk9LQguwF76eBJbykHniODalSLvjrY6Iz7CULavByYNpzq2TT7A==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/core": "16.2.12"
+ "@angular/core": "18.0.5"
}
},
"node_modules/@angular/cdk": {
- "version": "15.2.9",
+ "version": "18.2.1",
+ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.1.tgz",
+ "integrity": "sha512-6y4MmpEPXze6igUHkLsBUPkxw32F8+rmW0xVXZchkSyGlFgqfh53ueXoryWb0qL4s5enkNY6AzXnKAqHfPNkVQ==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -902,44 +1049,33 @@
"parse5": "^7.1.2"
},
"peerDependencies": {
- "@angular/common": "^15.0.0 || ^16.0.0",
- "@angular/core": "^15.0.0 || ^16.0.0",
+ "@angular/common": "^18.0.0 || ^19.0.0",
+ "@angular/core": "^18.0.0 || ^19.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
- "node_modules/@angular/cdk/node_modules/parse5": {
- "version": "7.1.2",
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
"node_modules/@angular/cli": {
- "version": "16.2.13",
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.1.0.tgz",
+ "integrity": "sha512-2E+b7S/736AOmxf5je9OWoPpgPY240TfJfFXwQiVvq/4KyC+ZR9lBrqRx72Xghn8nu3z8Q2BPZIXVGZppl0USQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.1602.13",
- "@angular-devkit/core": "16.2.13",
- "@angular-devkit/schematics": "16.2.13",
- "@schematics/angular": "16.2.13",
+ "@angular-devkit/architect": "0.1801.0",
+ "@angular-devkit/core": "18.1.0",
+ "@angular-devkit/schematics": "18.1.0",
+ "@inquirer/prompts": "5.0.7",
+ "@listr2/prompt-adapter-inquirer": "2.0.13",
+ "@schematics/angular": "18.1.0",
"@yarnpkg/lockfile": "1.1.0",
- "ansi-colors": "4.1.3",
- "ini": "4.1.1",
- "inquirer": "8.2.4",
- "jsonc-parser": "3.2.0",
- "npm-package-arg": "10.1.0",
- "npm-pick-manifest": "8.0.1",
- "open": "8.4.2",
- "ora": "5.4.1",
- "pacote": "15.2.0",
- "resolve": "1.22.2",
- "semver": "7.5.4",
+ "ini": "4.1.3",
+ "jsonc-parser": "3.3.1",
+ "listr2": "8.2.3",
+ "npm-package-arg": "11.0.2",
+ "npm-pick-manifest": "9.0.1",
+ "pacote": "18.0.6",
+ "resolve": "1.22.8",
+ "semver": "7.6.2",
"symbol-observable": "4.0.0",
"yargs": "17.7.2"
},
@@ -947,50 +1083,117 @@
"ng": "bin/ng.js"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
}
},
- "node_modules/@angular/cli/node_modules/jsonc-parser": {
- "version": "3.2.0",
+ "node_modules/@angular/cli/node_modules/@angular-devkit/architect": {
+ "version": "0.1801.0",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.0.tgz",
+ "integrity": "sha512-iZa3J3CrZT6MKiHPw8ijgVwMyCMewCsP4xc75SetUwF/yuqRUHygALs5jJVZQFQjSFUrkg9gqXa1cCjFDwpT8A==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "@angular-devkit/core": "18.1.0",
+ "rxjs": "7.8.1"
+ },
+ "engines": {
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ }
},
- "node_modules/@angular/cli/node_modules/lru-cache": {
- "version": "6.0.0",
+ "node_modules/@angular/cli/node_modules/@angular-devkit/core": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.0.tgz",
+ "integrity": "sha512-6eXQDzHZCbpSMLv9Ohl+1QyLVDmGEXpuuHz3y64LfUTP0aEiBaxk96FjLXIxzJ4f2pbbW2XHzc+yuboGToRA0w==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "ajv": "8.16.0",
+ "ajv-formats": "3.0.1",
+ "jsonc-parser": "3.3.1",
+ "picomatch": "4.0.2",
+ "rxjs": "7.8.1",
+ "source-map": "0.7.4"
},
"engines": {
- "node": ">=10"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
}
},
- "node_modules/@angular/cli/node_modules/resolve": {
- "version": "1.22.2",
+ "node_modules/@angular/cli/node_modules/@angular-devkit/schematics": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.1.0.tgz",
+ "integrity": "sha512-BjrYutLfYFiPOSEcLBWCj3ENkwDn8gMfBSJesaBz7OrZBZGK5j0dVgBLIsGTP96TKo4o4vszJQOvS4AtV6xMGg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-core-module": "^2.11.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
+ "@angular-devkit/core": "18.1.0",
+ "jsonc-parser": "3.3.1",
+ "magic-string": "0.30.10",
+ "ora": "5.4.1",
+ "rxjs": "7.8.1"
},
- "bin": {
- "resolve": "bin/resolve"
+ "engines": {
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ }
+ },
+ "node_modules/@angular/cli/node_modules/ajv": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+ "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.4.1"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@angular/cli/node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "node_modules/@angular/cli/node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
}
},
"node_modules/@angular/cli/node_modules/semver": {
- "version": "7.5.4",
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true,
"license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -998,36 +1201,35 @@
"node": ">=10"
}
},
- "node_modules/@angular/cli/node_modules/yallist": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
"node_modules/@angular/common": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.0.5.tgz",
+ "integrity": "sha512-yItVQSu+Rx8gthWJDTOHwbzItY8/lqmmmYA1RMex0u3GkJoX3/3TZSGXbbBXl8GH8vmQOfp9yj3C02JmlwldRg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/core": "16.2.12",
+ "@angular/core": "18.0.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.0.5.tgz",
+ "integrity": "sha512-U1/qjNDjxMukXwQrJZjmr87KVxQmHbD7fxVlg0+qafHLe+YDuCtyOfQSGEZrWhwktxvAYZbl3FK+m3Hnk/D3Nw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/core": "16.2.12"
+ "@angular/core": "18.0.5"
},
"peerDependenciesMeta": {
"@angular/core": {
@@ -1036,15 +1238,17 @@
}
},
"node_modules/@angular/compiler-cli": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.0.5.tgz",
+ "integrity": "sha512-aFKDDTsRmc691EkNRj9OkrKNXDOaHdXB42MyUrj3WwJIJFMnSY/UDf6h+CRVF0U+CITszFyWhmeHQRA/3mJWNg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "7.23.2",
+ "@babel/core": "7.24.7",
"@jridgewell/sourcemap-codec": "^1.4.14",
"chokidar": "^3.0.0",
"convert-source-map": "^1.5.1",
- "reflect-metadata": "^0.1.2",
+ "reflect-metadata": "^0.2.0",
"semver": "^7.0.0",
"tslib": "^2.3.0",
"yargs": "^17.2.1"
@@ -1055,64 +1259,120 @@
"ngcc": "bundles/ngcc/index.js"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/compiler": "16.2.12",
- "typescript": ">=4.9.3 <5.2"
+ "@angular/compiler": "18.0.5",
+ "typescript": ">=5.4 <5.5"
+ }
+ },
+ "node_modules/@angular/compiler-cli/node_modules/@babel/core": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
+ "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helpers": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/template": "^7.24.7",
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/@angular/core": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.0.5.tgz",
+ "integrity": "sha512-0UuL+aMMWGYksz09YBsiHq1li7GmL8obB3IC3T5MwDqnn7FGRUBfBUOZEkM6B+pwgg+RAtNdJkbCfbh1z74bFQ==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"rxjs": "^6.5.3 || ^7.4.0",
- "zone.js": "~0.13.0"
+ "zone.js": "~0.14.0"
}
},
"node_modules/@angular/forms": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.0.5.tgz",
+ "integrity": "sha512-nO7bN+nO2/czgKSvPx6ewqpfb8xXOyns06uovWpAXSH4jYoiZ6CHTHhOKrOL/3SRkhUV9u+EUXTTAOSBkS+OBA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "16.2.12",
- "@angular/core": "16.2.12",
- "@angular/platform-browser": "16.2.12",
+ "@angular/common": "18.0.5",
+ "@angular/core": "18.0.5",
+ "@angular/platform-browser": "18.0.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/language-service": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.0.5.tgz",
+ "integrity": "sha512-ahZnsUk8q/4k+okP9hBcfWRiOiMximSAI7Vq5M/fe9cezykt8cWEzxgRoduTvDKoQPqcRl0nHlDYju2zkXcU6g==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
}
},
"node_modules/@angular/platform-browser": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.0.5.tgz",
+ "integrity": "sha512-hBKaGz7dhsjNhD0aWB8G2/YZQ/MaBhzFIQSAZMPs2ccAqH1Jx772/Y11k57seA3VaPpnL8WZ1apOSJgALUJ//w==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/animations": "16.2.12",
- "@angular/common": "16.2.12",
- "@angular/core": "16.2.12"
+ "@angular/animations": "18.0.5",
+ "@angular/common": "18.0.5",
+ "@angular/core": "18.0.5"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -1121,39 +1381,45 @@
}
},
"node_modules/@angular/platform-browser-dynamic": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.0.5.tgz",
+ "integrity": "sha512-i8CXojKcjsKzD2JR2clIisqavlHCW1jw+F2hJVrf/JR9iu6kVpGpZOqb3yYHoQCsPa7hUzQnn0ewYwBvlWsDmw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "16.2.12",
- "@angular/compiler": "16.2.12",
- "@angular/core": "16.2.12",
- "@angular/platform-browser": "16.2.12"
+ "@angular/common": "18.0.5",
+ "@angular/compiler": "18.0.5",
+ "@angular/core": "18.0.5",
+ "@angular/platform-browser": "18.0.5"
}
},
"node_modules/@angular/router": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.0.5.tgz",
+ "integrity": "sha512-GmdzD5FZYPKCGP6mV3AZraAU6czfGcjjCym6mIsdJr3DyMwnQSwaaHAu8qlQbPDVfsP+gKVSPh1JxI1lzzarLA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "16.2.12",
- "@angular/core": "16.2.12",
- "@angular/platform-browser": "16.2.12",
+ "@angular/common": "18.0.5",
+ "@angular/core": "18.0.5",
+ "@angular/platform-browser": "18.0.5",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/service-worker": {
- "version": "16.2.12",
+ "version": "18.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.0.5.tgz",
+ "integrity": "sha512-Uz3rKHY0pBOvAfxhaGI9X8glS8oaPv03e3GsucZhzuDCijQGHQb1Plaz56NntIGvGaghLMq3zwV7YLPnquarvw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -1162,24 +1428,21 @@
"ngsw-config": "ngsw-config.js"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "16.2.12",
- "@angular/core": "16.2.12"
+ "@angular/common": "18.0.5",
+ "@angular/core": "18.0.5"
}
},
- "node_modules/@assemblyscript/loader": {
- "version": "0.10.1",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/@babel/code-frame": {
- "version": "7.24.2",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.24.2",
+ "@babel/highlight": "^7.24.7",
"picocolors": "^1.0.0"
},
"engines": {
@@ -1187,7 +1450,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.23.5",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
+ "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1195,20 +1460,22 @@
}
},
"node_modules/@babel/core": {
- "version": "7.23.2",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+ "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helpers": "^7.23.2",
- "@babel/parser": "^7.23.0",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-module-transforms": "^7.25.2",
+ "@babel/helpers": "^7.25.0",
+ "@babel/parser": "^7.25.0",
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.2",
+ "@babel/types": "^7.25.2",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -1223,27 +1490,17 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/@babel/generator": {
- "version": "7.24.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.0",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/core/node_modules/convert-source-map": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true,
"license": "MIT"
},
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -1251,13 +1508,15 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.22.9",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+ "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.5",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
+ "@babel/types": "^7.25.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
@@ -1265,35 +1524,42 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.15",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
+ "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.23.6",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
+ "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-validator-option": "^7.23.5",
- "browserslist": "^4.22.2",
+ "@babel/compat-data": "^7.25.2",
+ "@babel/helper-validator-option": "^7.24.8",
+ "browserslist": "^4.23.1",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -1303,6 +1569,8 @@
},
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -1310,18 +1578,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.24.4",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
+ "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/traverse": "^7.25.4",
"semver": "^6.3.1"
},
"engines": {
@@ -1333,6 +1601,8 @@
},
"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -1340,11 +1610,13 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.15",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
+ "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
"regexpu-core": "^5.3.1",
"semver": "^6.3.1"
},
@@ -1357,6 +1629,8 @@
},
"node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -1364,7 +1638,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.1",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
+ "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1378,69 +1654,45 @@
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
+ "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.23.0"
+ "@babel/traverse": "^7.24.8",
+ "@babel/types": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.23.3",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
+ "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "@babel/traverse": "^7.25.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1450,18 +1702,22 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+ "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.0",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+ "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1469,13 +1725,15 @@
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.22.20",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
+ "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-wrap-function": "^7.22.20"
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-wrap-function": "^7.25.0",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1485,13 +1743,15 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.24.1",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
+ "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5"
+ "@babel/helper-member-expression-to-functions": "^7.24.8",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1501,40 +1761,50 @@
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+ "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+ "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.23.4",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1542,7 +1812,9 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1550,7 +1822,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.23.5",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+ "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1558,37 +1832,42 @@
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.22.20",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
+ "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-function-name": "^7.22.5",
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.22.19"
+ "@babel/template": "^7.25.0",
+ "@babel/traverse": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.24.4",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
+ "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.1",
- "@babel/types": "^7.24.0"
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.24.2",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
@@ -1598,9 +1877,14 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.24.4",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
+ "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.25.4"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1608,12 +1892,15 @@
"node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.24.1",
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
+ "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1622,60 +1909,81 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.24.1",
+ "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
+ "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.24.1"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.13.0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-proposal-async-generator-functions": {
- "version": "7.20.7",
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
+ "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-remap-async-to-generator": "^7.18.9",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.21.0-placeholder-for-preset-env.2",
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
+ "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7"
+ },
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.13.0"
}
},
- "node_modules/@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.18.6",
+ "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
+ "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
@@ -1683,6 +1991,8 @@
},
"node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1694,6 +2004,8 @@
},
"node_modules/@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1705,6 +2017,8 @@
},
"node_modules/@babel/plugin-syntax-class-static-block": {
"version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1719,6 +2033,8 @@
},
"node_modules/@babel/plugin-syntax-dynamic-import": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1730,6 +2046,8 @@
},
"node_modules/@babel/plugin-syntax-export-namespace-from": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1740,11 +2058,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
+ "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1754,11 +2074,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
+ "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1769,6 +2091,8 @@
},
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1780,6 +2104,8 @@
},
"node_modules/@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1791,6 +2117,8 @@
},
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1802,6 +2130,8 @@
},
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1813,6 +2143,8 @@
},
"node_modules/@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1824,6 +2156,8 @@
},
"node_modules/@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1835,6 +2169,8 @@
},
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1846,6 +2182,8 @@
},
"node_modules/@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1857,6 +2195,8 @@
},
"node_modules/@babel/plugin-syntax-private-property-in-object": {
"version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1871,6 +2211,8 @@
},
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1885,6 +2227,8 @@
},
"node_modules/@babel/plugin-syntax-unicode-sets-regex": {
"version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1899,11 +2243,13 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
+ "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1913,14 +2259,16 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.24.3",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
+ "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-remap-async-to-generator": "^7.22.20",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-remap-async-to-generator": "^7.25.0",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1930,13 +2278,15 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.22.5",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
+ "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.5"
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-remap-async-to-generator": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1946,11 +2296,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
+ "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -1960,11 +2312,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.24.4",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
+ "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1974,12 +2328,14 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.24.1",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
+ "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-class-features-plugin": "^7.25.4",
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1989,12 +2345,14 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.24.4",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
+ "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.4",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
},
"engines": {
@@ -2005,17 +2363,17 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.24.1",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
+ "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-replace-supers": "^7.25.0",
+ "@babel/traverse": "^7.25.4",
"globals": "^11.1.0"
},
"engines": {
@@ -2026,12 +2384,14 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
+ "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/template": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/template": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2041,11 +2401,13 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.24.1",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
+ "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -2055,12 +2417,14 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
+ "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2070,11 +2434,13 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
+ "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2083,12 +2449,31 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
+ "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.25.0",
+ "@babel/helper-plugin-utils": "^7.24.8"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
+ "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
@@ -2099,12 +2484,14 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
+ "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2114,11 +2501,13 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
+ "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
@@ -2129,12 +2518,14 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
+ "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2144,13 +2535,15 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.24.1",
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
+ "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-compilation-targets": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/traverse": "^7.25.1"
},
"engines": {
"node": ">=6.9.0"
@@ -2160,11 +2553,13 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
+ "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
@@ -2175,11 +2570,13 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.24.1",
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
+ "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -2189,11 +2586,13 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
+ "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
@@ -2204,11 +2603,13 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
+ "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2218,12 +2619,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
+ "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2233,13 +2636,15 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.24.1",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
+ "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-simple-access": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.8",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-simple-access": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2249,14 +2654,16 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.24.1",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
+ "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-module-transforms": "^7.25.0",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "@babel/traverse": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
@@ -2266,12 +2673,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
+ "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2281,12 +2690,14 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.22.5",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
+ "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2296,11 +2707,13 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
+ "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2310,11 +2723,13 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
+ "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
@@ -2325,11 +2740,13 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
+ "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
@@ -2340,14 +2757,16 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
+ "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.24.1"
+ "@babel/plugin-transform-parameters": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2357,12 +2776,14 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
+ "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2372,11 +2793,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
+ "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
@@ -2387,12 +2810,14 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.24.1",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
+ "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"engines": {
@@ -2403,11 +2828,13 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
+ "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2417,12 +2844,14 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.24.1",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
+ "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-class-features-plugin": "^7.25.4",
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -2432,13 +2861,15 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
+ "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@@ -2449,11 +2880,13 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
+ "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2463,11 +2896,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
+ "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.7",
"regenerator-transform": "^0.15.2"
},
"engines": {
@@ -2478,11 +2913,13 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
+ "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2492,15 +2929,17 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.22.9",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz",
+ "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5",
- "babel-plugin-polyfill-corejs2": "^0.4.4",
- "babel-plugin-polyfill-corejs3": "^0.8.2",
- "babel-plugin-polyfill-regenerator": "^0.5.1",
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.1",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
"semver": "^6.3.1"
},
"engines": {
@@ -2512,6 +2951,8 @@
},
"node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -2519,11 +2960,13 @@
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
+ "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2533,12 +2976,14 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
+ "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2548,11 +2993,13 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
+ "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2562,11 +3009,13 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
+ "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2576,11 +3025,13 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.24.1",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
+ "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -2590,11 +3041,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
+ "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2604,12 +3057,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
+ "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2619,12 +3074,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.24.1",
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
+ "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
@@ -2634,12 +3091,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.24.1",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
+ "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.2",
+ "@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -2649,24 +3108,29 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.22.9",
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
+ "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-compilation-targets": "^7.22.9",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.5",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/compat-data": "^7.25.2",
+ "@babel/helper-compilation-targets": "^7.25.2",
+ "@babel/helper-plugin-utils": "^7.24.8",
+ "@babel/helper-validator-option": "^7.24.8",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.22.5",
- "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-assertions": "^7.24.7",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -2678,60 +3142,60 @@
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.22.5",
- "@babel/plugin-transform-async-generator-functions": "^7.22.7",
- "@babel/plugin-transform-async-to-generator": "^7.22.5",
- "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
- "@babel/plugin-transform-block-scoping": "^7.22.5",
- "@babel/plugin-transform-class-properties": "^7.22.5",
- "@babel/plugin-transform-class-static-block": "^7.22.5",
- "@babel/plugin-transform-classes": "^7.22.6",
- "@babel/plugin-transform-computed-properties": "^7.22.5",
- "@babel/plugin-transform-destructuring": "^7.22.5",
- "@babel/plugin-transform-dotall-regex": "^7.22.5",
- "@babel/plugin-transform-duplicate-keys": "^7.22.5",
- "@babel/plugin-transform-dynamic-import": "^7.22.5",
- "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
- "@babel/plugin-transform-export-namespace-from": "^7.22.5",
- "@babel/plugin-transform-for-of": "^7.22.5",
- "@babel/plugin-transform-function-name": "^7.22.5",
- "@babel/plugin-transform-json-strings": "^7.22.5",
- "@babel/plugin-transform-literals": "^7.22.5",
- "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
- "@babel/plugin-transform-member-expression-literals": "^7.22.5",
- "@babel/plugin-transform-modules-amd": "^7.22.5",
- "@babel/plugin-transform-modules-commonjs": "^7.22.5",
- "@babel/plugin-transform-modules-systemjs": "^7.22.5",
- "@babel/plugin-transform-modules-umd": "^7.22.5",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.22.5",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
- "@babel/plugin-transform-numeric-separator": "^7.22.5",
- "@babel/plugin-transform-object-rest-spread": "^7.22.5",
- "@babel/plugin-transform-object-super": "^7.22.5",
- "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.22.6",
- "@babel/plugin-transform-parameters": "^7.22.5",
- "@babel/plugin-transform-private-methods": "^7.22.5",
- "@babel/plugin-transform-private-property-in-object": "^7.22.5",
- "@babel/plugin-transform-property-literals": "^7.22.5",
- "@babel/plugin-transform-regenerator": "^7.22.5",
- "@babel/plugin-transform-reserved-words": "^7.22.5",
- "@babel/plugin-transform-shorthand-properties": "^7.22.5",
- "@babel/plugin-transform-spread": "^7.22.5",
- "@babel/plugin-transform-sticky-regex": "^7.22.5",
- "@babel/plugin-transform-template-literals": "^7.22.5",
- "@babel/plugin-transform-typeof-symbol": "^7.22.5",
- "@babel/plugin-transform-unicode-escapes": "^7.22.5",
- "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
- "@babel/plugin-transform-unicode-regex": "^7.22.5",
- "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
- "@babel/preset-modules": "^0.1.5",
- "@babel/types": "^7.22.5",
- "babel-plugin-polyfill-corejs2": "^0.4.4",
- "babel-plugin-polyfill-corejs3": "^0.8.2",
- "babel-plugin-polyfill-regenerator": "^0.5.1",
- "core-js-compat": "^3.31.0",
+ "@babel/plugin-transform-arrow-functions": "^7.24.7",
+ "@babel/plugin-transform-async-generator-functions": "^7.25.0",
+ "@babel/plugin-transform-async-to-generator": "^7.24.7",
+ "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
+ "@babel/plugin-transform-block-scoping": "^7.25.0",
+ "@babel/plugin-transform-class-properties": "^7.24.7",
+ "@babel/plugin-transform-class-static-block": "^7.24.7",
+ "@babel/plugin-transform-classes": "^7.25.0",
+ "@babel/plugin-transform-computed-properties": "^7.24.7",
+ "@babel/plugin-transform-destructuring": "^7.24.8",
+ "@babel/plugin-transform-dotall-regex": "^7.24.7",
+ "@babel/plugin-transform-duplicate-keys": "^7.24.7",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
+ "@babel/plugin-transform-dynamic-import": "^7.24.7",
+ "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
+ "@babel/plugin-transform-export-namespace-from": "^7.24.7",
+ "@babel/plugin-transform-for-of": "^7.24.7",
+ "@babel/plugin-transform-function-name": "^7.25.1",
+ "@babel/plugin-transform-json-strings": "^7.24.7",
+ "@babel/plugin-transform-literals": "^7.25.2",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
+ "@babel/plugin-transform-member-expression-literals": "^7.24.7",
+ "@babel/plugin-transform-modules-amd": "^7.24.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.8",
+ "@babel/plugin-transform-modules-systemjs": "^7.25.0",
+ "@babel/plugin-transform-modules-umd": "^7.24.7",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
+ "@babel/plugin-transform-new-target": "^7.24.7",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
+ "@babel/plugin-transform-numeric-separator": "^7.24.7",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.7",
+ "@babel/plugin-transform-object-super": "^7.24.7",
+ "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.8",
+ "@babel/plugin-transform-parameters": "^7.24.7",
+ "@babel/plugin-transform-private-methods": "^7.24.7",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.7",
+ "@babel/plugin-transform-property-literals": "^7.24.7",
+ "@babel/plugin-transform-regenerator": "^7.24.7",
+ "@babel/plugin-transform-reserved-words": "^7.24.7",
+ "@babel/plugin-transform-shorthand-properties": "^7.24.7",
+ "@babel/plugin-transform-spread": "^7.24.7",
+ "@babel/plugin-transform-sticky-regex": "^7.24.7",
+ "@babel/plugin-transform-template-literals": "^7.24.7",
+ "@babel/plugin-transform-typeof-symbol": "^7.24.8",
+ "@babel/plugin-transform-unicode-escapes": "^7.24.7",
+ "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.4",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "core-js-compat": "^3.37.1",
"semver": "^6.3.1"
},
"engines": {
@@ -2743,6 +3207,8 @@
},
"node_modules/@babel/preset-env/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -2750,13 +3216,13 @@
}
},
"node_modules/@babel/preset-modules": {
- "version": "0.1.6",
+ "version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
"@babel/types": "^7.4.4",
"esutils": "^2.0.2"
},
@@ -2766,11 +3232,15 @@
},
"node_modules/@babel/regjsgen": {
"version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
"dev": true,
"license": "MIT"
},
"node_modules/@babel/runtime": {
- "version": "7.24.0",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
+ "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -2780,31 +3250,32 @@
}
},
"node_modules/@babel/template": {
- "version": "7.24.0",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/parser": "^7.24.0",
- "@babel/types": "^7.24.0"
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.25.0",
+ "@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.24.1",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
+ "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.24.1",
- "@babel/generator": "^7.24.1",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.24.1",
- "@babel/types": "^7.24.0",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.4",
+ "@babel/parser": "^7.25.4",
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.4",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -2813,11 +3284,13 @@
}
},
"node_modules/@babel/traverse/node_modules/@babel/generator": {
- "version": "7.24.4",
+ "version": "7.25.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
+ "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.24.0",
+ "@babel/types": "^7.25.4",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -2827,12 +3300,14 @@
}
},
"node_modules/@babel/types": {
- "version": "7.24.0",
+ "version": "7.25.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
+ "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -2840,33 +3315,34 @@
}
},
"node_modules/@capacitor-community/file-opener": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@capacitor-community/file-opener/-/file-opener-1.0.6.tgz",
- "integrity": "sha512-iHsPblcgqTF8rEmvpVyAGfxuTUtV8BthoBv/zBLKEEb1vSUVONed0UTRjvvqjHxewS8LNEWVXzuMzXfQU1r1cA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@capacitor-community/file-opener/-/file-opener-6.0.0.tgz",
+ "integrity": "sha512-nJ9S5rCqnVDBKfqdjDhrYOIO9JLeScFkRfKLs2G+d6Df73vrJMes8dr+dGSEvKiPhyjRhICW5imDJEbzaD8KpA==",
"license": "MIT",
"engines": {
"node": ">=16.0.0",
"npm": ">=8.0.0"
},
"peerDependencies": {
- "@capacitor/core": "^5.0.0"
+ "@capacitor/core": "^6.0.0"
}
},
"node_modules/@capacitor/android": {
- "version": "5.7.7",
- "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.7.7.tgz",
- "integrity": "sha512-gkc8p0jjbRHu5oxKvWQV1d6zRHNeK7/GQUHOL9J6yQqnnttLDf1tSZ4BVjicMdyKlxUailuBcboWvng+KYilvQ==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-6.1.2.tgz",
+ "integrity": "sha512-Yh0gQDY1bgRrL25J6ecIlvvs2kF8iNSwIPXjyw6Yz9mnwYxBazF5KZbjpKtGPnJgicJhFkYGsqOkEtxrve0EoQ==",
+ "license": "MIT",
"peerDependencies": {
- "@capacitor/core": "^5.7.0"
+ "@capacitor/core": "^6.1.0"
}
},
"node_modules/@capacitor/app": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-5.0.8.tgz",
- "integrity": "sha512-ClUPJG6Awkf5HncVCZQwLrnuugjU8TnACSJ1dKJb6QNCHv2jQzmXvB3KvTvxTZyWbh5EVvlla0qlobYyU1lb6A==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-6.0.1.tgz",
+ "integrity": "sha512-0kXbOl7LPPMFVcAii3u/7Ps0DvXlr7dtHT97r9J1faDlgdQLQUvtGp48tjvFm48gqHI0aOPRJnTBr5JXW4ETYg==",
"license": "MIT",
"peerDependencies": {
- "@capacitor/core": "^5.0.0"
+ "@capacitor/core": "^6.0.0"
}
},
"node_modules/@capacitor/assets": {
@@ -2897,9 +3373,9 @@
}
},
"node_modules/@capacitor/assets/node_modules/@capacitor/cli": {
- "version": "5.7.6",
- "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.7.6.tgz",
- "integrity": "sha512-CDDcBF7wHm5v/j0dA2bls0vK954XlD1JCjMuTgLtjZMvWrIlTJAkwCQLkiqRhS2P63AXqfqQqkb/qs2RHc1zDQ==",
+ "version": "5.7.8",
+ "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.7.8.tgz",
+ "integrity": "sha512-qN8LDlREMhrYhOvVXahoJVNkP8LP55/YPRJrzTAFrMqlNJC18L3CzgWYIblFPnuwfbH/RxbfoZT/ydkwgVpMrw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2939,147 +3415,94 @@
"node": "^12.20.0 || >=14"
}
},
- "node_modules/@capacitor/assets/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "node_modules/@capacitor/assets/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/@capacitor/assets/node_modules/commander": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "node_modules/@capacitor/assets/node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 12"
+ "node": ">=8"
}
},
- "node_modules/@capacitor/assets/node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "node_modules/@capacitor/assets/node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "bin": {
+ "is-docker": "cli.js"
},
"engines": {
- "node": ">=12"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@capacitor/assets/node_modules/glob": {
- "version": "9.3.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
- "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
+ "node_modules/@capacitor/assets/node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "minimatch": "^8.0.2",
- "minipass": "^4.2.4",
- "path-scurry": "^1.6.1"
+ "is-docker": "^2.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=8"
}
},
- "node_modules/@capacitor/assets/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "node_modules/@capacitor/assets/node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@capacitor/assets/node_modules/minimatch": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
- "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@capacitor/assets/node_modules/minipass": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
- "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@capacitor/assets/node_modules/rimraf": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz",
- "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^9.2.0"
- },
- "bin": {
- "rimraf": "dist/cjs/src/bin.js"
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
},
"engines": {
- "node": ">=14"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@capacitor/assets/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@capacitor/assets/node_modules/xml2js": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
- "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+ "node_modules/@capacitor/assets/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
+ "license": "0BSD"
},
"node_modules/@capacitor/cli": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.1.1.tgz",
- "integrity": "sha512-rsRqEadfnBSUX90RZj59oXvi30bpSusLMfIcgbOIArOloTgfaaWr9R471F6m3gGWF7BhNoskJpZcCgSUsfywwA==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.1.2.tgz",
+ "integrity": "sha512-HKCNGE0RP8U7aiEF2vg5wTivJROS8BVfu8a3yYJb1mRQvzv+czpmtHNsTWS/WukvwoxUjyjRmsNQSAACHfMTmQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@ionic/cli-framework-output": "^2.2.5",
"@ionic/utils-fs": "^3.1.6",
@@ -3108,429 +3531,738 @@
"node": ">=18.0.0"
}
},
- "node_modules/@capacitor/cli/node_modules/@ionic/utils-array": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz",
- "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==",
+ "node_modules/@capacitor/cli/node_modules/commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
"dev": true,
- "dependencies": {
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=10.3.0"
+ "node": "^12.20.0 || >=14"
}
},
- "node_modules/@capacitor/cli/node_modules/@ionic/utils-fs": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.6.tgz",
- "integrity": "sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==",
+ "node_modules/@capacitor/cli/node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true,
- "dependencies": {
- "@types/fs-extra": "^8.0.0",
- "debug": "^4.0.0",
- "fs-extra": "^9.0.0",
- "tslib": "^2.0.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=10.3.0"
+ "node": ">=8"
}
},
- "node_modules/@capacitor/cli/node_modules/@ionic/utils-object": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz",
- "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==",
+ "node_modules/@capacitor/cli/node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
- "dependencies": {
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
},
"engines": {
- "node": ">=10.3.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@capacitor/cli/node_modules/@ionic/utils-stream": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz",
- "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==",
+ "node_modules/@capacitor/cli/node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
+ "is-docker": "^2.0.0"
},
"engines": {
- "node": ">=10.3.0"
+ "node": ">=8"
}
},
- "node_modules/@capacitor/cli/node_modules/@ionic/utils-subprocess": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.11.tgz",
- "integrity": "sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==",
+ "node_modules/@capacitor/cli/node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@ionic/utils-array": "2.1.5",
- "@ionic/utils-fs": "3.1.6",
- "@ionic/utils-process": "2.1.10",
- "@ionic/utils-stream": "3.1.5",
- "@ionic/utils-terminal": "2.3.3",
- "cross-spawn": "^7.0.3",
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
},
"engines": {
- "node": ">=10.3.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@capacitor/cli/node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": {
- "version": "2.1.10",
- "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz",
- "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==",
- "dev": true,
+ "node_modules/@capacitor/core": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.1.2.tgz",
+ "integrity": "sha512-xFy1/4qLFLp5WCIzIhtwUuVNNoz36+V7/BzHmLqgVJcvotc4MMjswW/TshnPQaLLujEOaLkA4h8ZJ0uoK3ImGg==",
+ "license": "MIT",
"dependencies": {
- "@ionic/utils-object": "2.1.5",
- "@ionic/utils-terminal": "2.3.3",
- "debug": "^4.0.0",
- "signal-exit": "^3.0.3",
- "tree-kill": "^1.2.2",
- "tslib": "^2.0.1"
- },
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@capacitor/filesystem": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@capacitor/filesystem/-/filesystem-6.0.1.tgz",
+ "integrity": "sha512-eHhXm6tzBIQhErzFnfOE6eA1U+15DHc2212/COfzzGGRk/dyGympoVV3ct2YPVzvpTSxMEW3xFocORv/xD9gFg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@capacitor/core": "^6.0.0"
+ }
+ },
+ "node_modules/@capacitor/ios": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-6.1.2.tgz",
+ "integrity": "sha512-HaeW68KisBd/7TmavzPDlL2bpoDK5AjR2ZYrqU4TlGwM88GtQfvduBCAlSCj20X0w/4+rWMkseD9dAAkacjiyQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@capacitor/core": "^6.1.0"
+ }
+ },
+ "node_modules/@capacitor/splash-screen": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/splash-screen/-/splash-screen-6.0.2.tgz",
+ "integrity": "sha512-WC0KYZ+ev15up03xs4fTnoTKwBVUSxXsKKQr/8XAncvi/nAG8qrpanW8OlavSC5zF5e1IZZDLsI2GSv0SkZ7VQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@capacitor/core": "^6.0.0"
+ }
+ },
+ "node_modules/@colors/colors": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10.3.0"
+ "node": ">=0.1.90"
}
},
- "node_modules/@capacitor/cli/node_modules/@ionic/utils-terminal": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz",
- "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==",
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/slice-ansi": "^4.0.0",
- "debug": "^4.0.0",
- "signal-exit": "^3.0.3",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "tslib": "^2.0.1",
- "untildify": "^4.0.0",
- "wrap-ansi": "^7.0.0"
+ "@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
- "node": ">=10.3.0"
+ "node": ">=12"
}
},
- "node_modules/@capacitor/cli/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
}
},
- "node_modules/@capacitor/cli/node_modules/commander": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
- "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "node_modules/@discoveryjs/json-ext": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz",
+ "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^12.20.0 || >=14"
+ "node": ">=14.17.0"
}
},
- "node_modules/@capacitor/cli/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "node_modules/@es-joy/jsdoccomment": {
+ "version": "0.46.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz",
+ "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "comment-parser": "1.4.1",
+ "esquery": "^1.6.0",
+ "jsdoc-type-pratt-parser": "~4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=16"
}
},
- "node_modules/@capacitor/cli/node_modules/glob": {
- "version": "9.3.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
- "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
+ "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "minimatch": "^8.0.2",
- "minipass": "^4.2.4",
- "path-scurry": "^1.6.1"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=18"
}
},
- "node_modules/@capacitor/cli/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz",
+ "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@capacitor/cli/node_modules/minimatch": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
- "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz",
+ "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=18"
}
},
- "node_modules/@capacitor/cli/node_modules/minipass": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
- "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz",
+ "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "ISC",
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/@capacitor/cli/node_modules/rimraf": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz",
- "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==",
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz",
+ "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^9.2.0"
- },
- "bin": {
- "rimraf": "dist/cjs/src/bin.js"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=18"
}
},
- "node_modules/@capacitor/cli/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz",
+ "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">= 10.0.0"
+ "node": ">=18"
}
},
- "node_modules/@capacitor/cli/node_modules/xml2js": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
- "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz",
+ "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- },
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@capacitor/core": {
- "version": "5.7.7",
- "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.7.7.tgz",
- "integrity": "sha512-LeV1ljAihl/1lFGHZERNY2DtD1fbPBF3rNOSHFPMXIluK4Cq4nK4a4z/dLPX+Cv4F0TyCIzX3+/t79PMbhDwrg==",
- "dependencies": {
- "tslib": "^2.1.0"
+ "node": ">=18"
}
},
- "node_modules/@capacitor/filesystem": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/@capacitor/filesystem/-/filesystem-5.2.2.tgz",
- "integrity": "sha512-h0Ta0NXF/zX9bXoD5qtoEoWSWCewow8Kredb2bBFO+vrd4NVthZH+GyrII2dk0++UIw40HjyLNk4apwGGSu9Sg==",
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz",
+ "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
- "peerDependencies": {
- "@capacitor/core": "^5.1.1"
- }
- },
- "node_modules/@capacitor/ios": {
- "version": "5.7.7",
- "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.7.7.tgz",
- "integrity": "sha512-bgvSJGia5C5Klfd7t/qlqlRAWzGGAwlIlzkOJYsxpJiYuz6OXVgeesuXRxMNOaUZQ9fmL7OWukmhcv03t9Up+w==",
- "peerDependencies": {
- "@capacitor/core": "^5.7.0"
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@capacitor/splash-screen": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/@capacitor/splash-screen/-/splash-screen-5.0.8.tgz",
- "integrity": "sha512-mDRJS9QFxL5UMN74gRr6cBhOtkZjWwdttPCjBJNgcMDJIGi9IAKRJuDGTsqSUbp6zWrPF4AW29Mu6qhXtHpHWg==",
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz",
+ "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
"license": "MIT",
- "peerDependencies": {
- "@capacitor/core": "^5.0.0"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@colors/colors": {
- "version": "1.5.0",
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz",
+ "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=0.1.90"
+ "node": ">=18"
}
},
- "node_modules/@cspotcode/source-map-support": {
- "version": "0.8.1",
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz",
+ "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "@jridgewell/trace-mapping": "0.3.9"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.9",
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz",
+ "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==",
+ "cpu": [
+ "loong64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@discoveryjs/json-ext": {
- "version": "0.5.7",
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz",
+ "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=10.0.0"
+ "node": ">=18"
}
},
- "node_modules/@es-joy/jsdoccomment": {
- "version": "0.42.0",
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz",
+ "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "comment-parser": "1.4.1",
- "esquery": "^1.5.0",
- "jsdoc-type-pratt-parser": "~4.0.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz",
+ "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==",
+ "cpu": [
+ "riscv64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz",
+ "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==",
+ "cpu": [
+ "s390x"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz",
+ "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ajv": {
- "version": "6.12.6",
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz",
+ "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "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"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/argparse": {
- "version": "2.0.1",
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz",
+ "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "Python-2.0"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
},
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.24.0",
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz",
+ "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
- "version": "4.1.0",
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz",
+ "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz",
+ "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz",
+ "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz",
+ "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
@@ -3542,19 +4274,19 @@
},
"node_modules/@eslint/js": {
"version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/@gar/promisify": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -3566,8 +4298,34 @@
"node": ">=10.10.0"
}
},
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -3579,7 +4337,10 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.2",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
"dev": true,
"license": "BSD-3-Clause"
},
@@ -3593,118 +4354,372 @@
"node": ">=6.9.0"
}
},
- "node_modules/@ionic-native/core": {
- "version": "5.36.0",
- "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.36.0.tgz",
- "integrity": "sha512-lOrkktadlKYbYf1LrDyAtsu1JnQ0oCCdkOU7iHQ8oXnNOkMwobFfD2m62F1CoOr0u9LIkpYnZSPjng8lZbmbNw==",
+ "node_modules/@inquirer/checkbox": {
+ "version": "2.4.7",
+ "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.4.7.tgz",
+ "integrity": "sha512-5YwCySyV1UEgqzz34gNsC38eKxRBtlRDpJLlKcRtTjlYA/yDKuc1rfw+hjw+2WJxbAZtaDPsRl5Zk7J14SBoBw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@types/cordova": "latest"
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/figures": "^1.0.5",
+ "@inquirer/type": "^1.5.2",
+ "ansi-escapes": "^4.3.2",
+ "yoctocolors-cjs": "^2.1.2"
},
- "peerDependencies": {
- "rxjs": "^5.5.0 || ^6.5.0"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@ionic-native/file-opener": {
- "version": "5.36.0",
- "resolved": "https://registry.npmjs.org/@ionic-native/file-opener/-/file-opener-5.36.0.tgz",
- "integrity": "sha512-UKp3pbqvQXsAtLMJ5JE+KcTMxpjSZMFebf6nvy/KJvwy85JGIaCV4ZVM/H9CFUrHJMWBH6wDbY+WPygnsrl4Yg==",
+ "node_modules/@inquirer/confirm": {
+ "version": "3.1.22",
+ "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz",
+ "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@types/cordova": "latest"
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/type": "^1.5.2"
},
- "peerDependencies": {
- "@ionic-native/core": "^5.1.0",
- "rxjs": "^5.5.0 || ^6.5.0"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@ionic/angular": {
- "version": "6.7.5",
+ "node_modules/@inquirer/core": {
+ "version": "9.0.10",
+ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz",
+ "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@ionic/core": "6.7.5",
- "ionicons": "^6.1.3",
- "jsonc-parser": "^3.0.0",
- "tslib": "^2.0.0"
+ "@inquirer/figures": "^1.0.5",
+ "@inquirer/type": "^1.5.2",
+ "@types/mute-stream": "^0.0.4",
+ "@types/node": "^22.1.0",
+ "@types/wrap-ansi": "^3.0.0",
+ "ansi-escapes": "^4.3.2",
+ "cli-spinners": "^2.9.2",
+ "cli-width": "^4.1.0",
+ "mute-stream": "^1.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^6.2.0",
+ "yoctocolors-cjs": "^2.1.2"
},
- "peerDependencies": {
- "@angular/core": ">=12.0.0",
- "@angular/forms": ">=12.0.0",
- "@angular/router": ">=12.0.0",
- "rxjs": ">=6.6.0",
- "zone.js": ">=0.11.0"
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@ionic/angular-toolkit": {
- "version": "11.0.1",
+ "node_modules/@inquirer/core/node_modules/@types/node": {
+ "version": "22.5.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz",
+ "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "^17.0.0",
- "@angular-devkit/schematics": "^17.0.0",
- "@schematics/angular": "^17.0.0"
+ "undici-types": "~6.19.2"
}
},
- "node_modules/@ionic/angular-toolkit/node_modules/@angular-devkit/core": {
- "version": "17.3.3",
+ "node_modules/@inquirer/editor": {
+ "version": "2.1.22",
+ "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.22.tgz",
+ "integrity": "sha512-K1QwTu7GCK+nKOVRBp5HY9jt3DXOfPGPr6WRDrPImkcJRelG9UTx2cAtK1liXmibRrzJlTWOwqgWT3k2XnS62w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ajv": "8.12.0",
- "ajv-formats": "2.1.1",
- "jsonc-parser": "3.2.1",
- "picomatch": "4.0.1",
- "rxjs": "7.8.1",
- "source-map": "0.7.4"
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/type": "^1.5.2",
+ "external-editor": "^3.1.0"
},
"engines": {
- "node": "^18.13.0 || >=20.9.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
- },
- "peerDependencies": {
- "chokidar": "^3.5.2"
- },
- "peerDependenciesMeta": {
- "chokidar": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@ionic/angular-toolkit/node_modules/@angular-devkit/schematics": {
- "version": "17.3.3",
+ "node_modules/@inquirer/expand": {
+ "version": "2.1.22",
+ "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.22.tgz",
+ "integrity": "sha512-wTZOBkzH+ItPuZ3ZPa9lynBsdMp6kQ9zbjVPYEtSBG7UulGjg2kQiAnUjgyG4SlntpTce5bOmXAPvE4sguXjpA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "17.3.3",
- "jsonc-parser": "3.2.1",
- "magic-string": "0.30.8",
- "ora": "5.4.1",
- "rxjs": "7.8.1"
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/type": "^1.5.2",
+ "yoctocolors-cjs": "^2.1.2"
},
"engines": {
- "node": "^18.13.0 || >=20.9.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
+ "node": ">=18"
}
},
- "node_modules/@ionic/angular-toolkit/node_modules/@schematics/angular": {
- "version": "17.3.3",
+ "node_modules/@inquirer/figures": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz",
+ "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@angular-devkit/core": "17.3.3",
- "@angular-devkit/schematics": "17.3.3",
- "jsonc-parser": "3.2.1"
- },
"engines": {
- "node": "^18.13.0 || >=20.9.0",
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/input": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.2.9.tgz",
+ "integrity": "sha512-7Z6N+uzkWM7+xsE+3rJdhdG/+mQgejOVqspoW+w0AbSZnL6nq5tGMEVASaYVWbkoSzecABWwmludO2evU3d31g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/type": "^1.5.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/password": {
+ "version": "2.1.22",
+ "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.22.tgz",
+ "integrity": "sha512-5Fxt1L9vh3rAKqjYwqsjU4DZsEvY/2Gll+QkqR4yEpy6wvzLxdSgFhUcxfDAOtO4BEoTreWoznC0phagwLU5Kw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/type": "^1.5.2",
+ "ansi-escapes": "^4.3.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/prompts": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.0.7.tgz",
+ "integrity": "sha512-GFcigCxJTKCH3aECzMIu4FhgLJWnFvMXzpI4CCSoELWFtkOOU2P+goYA61+OKpGrB8fPE7q6n8zAXBSlZRrHjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/checkbox": "^2.3.7",
+ "@inquirer/confirm": "^3.1.11",
+ "@inquirer/editor": "^2.1.11",
+ "@inquirer/expand": "^2.1.11",
+ "@inquirer/input": "^2.1.11",
+ "@inquirer/password": "^2.1.11",
+ "@inquirer/rawlist": "^2.1.11",
+ "@inquirer/select": "^2.3.7"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/rawlist": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.2.4.tgz",
+ "integrity": "sha512-pb6w9pWrm7EfnYDgQObOurh2d2YH07+eDo3xQBsNAM2GRhliz6wFXGi1thKQ4bN6B0xDd6C3tBsjdr3obsCl3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/type": "^1.5.2",
+ "yoctocolors-cjs": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/select": {
+ "version": "2.4.7",
+ "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.4.7.tgz",
+ "integrity": "sha512-JH7XqPEkBpNWp3gPCqWqY8ECbyMoFcCZANlL6pV9hf59qK6dGmkOlx1ydyhY+KZ0c5X74+W6Mtp+nm2QX0/MAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@inquirer/core": "^9.0.10",
+ "@inquirer/figures": "^1.0.5",
+ "@inquirer/type": "^1.5.2",
+ "ansi-escapes": "^4.3.2",
+ "yoctocolors-cjs": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@inquirer/type": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz",
+ "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mute-stream": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ionic-native/core": {
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.36.0.tgz",
+ "integrity": "sha512-lOrkktadlKYbYf1LrDyAtsu1JnQ0oCCdkOU7iHQ8oXnNOkMwobFfD2m62F1CoOr0u9LIkpYnZSPjng8lZbmbNw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/cordova": "latest"
+ },
+ "peerDependencies": {
+ "rxjs": "^5.5.0 || ^6.5.0"
+ }
+ },
+ "node_modules/@ionic-native/file-opener": {
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@ionic-native/file-opener/-/file-opener-5.36.0.tgz",
+ "integrity": "sha512-UKp3pbqvQXsAtLMJ5JE+KcTMxpjSZMFebf6nvy/KJvwy85JGIaCV4ZVM/H9CFUrHJMWBH6wDbY+WPygnsrl4Yg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/cordova": "latest"
+ },
+ "peerDependencies": {
+ "@ionic-native/core": "^5.1.0",
+ "rxjs": "^5.5.0 || ^6.5.0"
+ }
+ },
+ "node_modules/@ionic/angular": {
+ "version": "6.7.5",
+ "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-6.7.5.tgz",
+ "integrity": "sha512-nV8HP7RedjYkIAT8nVr5ifHNT0D3XzA74RPG3/WCCFJKunERNJ9SBiNkCTWhUpSkqsYYwEB4+SOOHz+R5NLk/w==",
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/core": "6.7.5",
+ "ionicons": "^6.1.3",
+ "jsonc-parser": "^3.0.0",
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/core": ">=12.0.0",
+ "@angular/forms": ">=12.0.0",
+ "@angular/router": ">=12.0.0",
+ "rxjs": ">=6.6.0",
+ "zone.js": ">=0.11.0"
+ }
+ },
+ "node_modules/@ionic/angular-toolkit": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-11.0.1.tgz",
+ "integrity": "sha512-dxx2RDbxDYM2nWRPIirKMJySHtqJ1u02T25PGbNb99W2Wlcmu1cza3+2/PQ8ga18yMz/dQqaGyEmPDf3ZSVO0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@angular-devkit/core": "^17.0.0",
+ "@angular-devkit/schematics": "^17.0.0",
+ "@schematics/angular": "^17.0.0"
+ }
+ },
+ "node_modules/@ionic/angular-toolkit/node_modules/@angular-devkit/core": {
+ "version": "17.3.8",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz",
+ "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "8.12.0",
+ "ajv-formats": "2.1.1",
+ "jsonc-parser": "3.2.1",
+ "picomatch": "4.0.1",
+ "rxjs": "7.8.1",
+ "source-map": "0.7.4"
+ },
+ "engines": {
+ "node": "^18.13.0 || >=20.9.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ionic/angular-toolkit/node_modules/@angular-devkit/schematics": {
+ "version": "17.3.8",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz",
+ "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@angular-devkit/core": "17.3.8",
+ "jsonc-parser": "3.2.1",
+ "magic-string": "0.30.8",
+ "ora": "5.4.1",
+ "rxjs": "7.8.1"
+ },
+ "engines": {
+ "node": "^18.13.0 || >=20.9.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ }
+ },
+ "node_modules/@ionic/angular-toolkit/node_modules/@schematics/angular": {
+ "version": "17.3.8",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.8.tgz",
+ "integrity": "sha512-2g4OmSyE9YGq50Uj7fNI26P/TSAFJ7ZuirwTF2O7Xc4XRQ29/tYIIqhezpNlTb6rlYblcQuMcUZBrMfWJHcqJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@angular-devkit/core": "17.3.8",
+ "@angular-devkit/schematics": "17.3.8",
+ "jsonc-parser": "3.2.1"
+ },
+ "engines": {
+ "node": "^18.13.0 || >=20.9.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
}
},
+ "node_modules/@ionic/angular-toolkit/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@ionic/angular-toolkit/node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ionic/angular-toolkit/node_modules/jsonc-parser": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@ionic/angular-toolkit/node_modules/magic-string": {
"version": "0.30.8",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
+ "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3716,6 +4731,8 @@
},
"node_modules/@ionic/angular-toolkit/node_modules/picomatch": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz",
+ "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3727,6 +4744,8 @@
},
"node_modules/@ionic/angular-toolkit/node_modules/rxjs": {
"version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -3737,6 +4756,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@ionic/cli/-/cli-7.2.0.tgz",
"integrity": "sha512-IEms9Df8mJOoWPqgvZEXmqKztttHDFAz+9ewDPZGYv8Xx66Cj7zSen13O2Vf4FuLXhl+U95HXT9sAs4lDwFmcQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@ionic/cli-framework": "6.0.1",
@@ -3777,6 +4797,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-6.0.1.tgz",
"integrity": "sha512-Fyix4eQt2HKTV+GoeoiziQGZyqIA8RfoMqjGyAS5XgNXLOYW0P27Ph348hQZh9Mphjf+m0lOYa6dWQTEPzUHiQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@ionic/cli-framework-output": "2.2.8",
@@ -3803,6 +4824,7 @@
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz",
"integrity": "sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@ionic/utils-terminal": "2.3.5",
@@ -3817,6 +4839,7 @@
"version": "2.1.13",
"resolved": "https://registry.npmjs.org/@ionic/cli-framework-prompts/-/cli-framework-prompts-2.1.13.tgz",
"integrity": "sha512-Yj1fz6p7OehreQ8C70bd9+M6tYP/rvzLw5JVj8pT/N9s0kQSjqEFRbs96LKr3lfd3TADZaS8OlZrQIqenFIUpg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@ionic/utils-terminal": "2.3.5",
@@ -3828,10 +4851,31 @@
"node": ">=16.0.0"
}
},
- "node_modules/@ionic/cli-framework-prompts/node_modules/ansi-styles": {
+ "node_modules/@ionic/cli-framework/node_modules/@ionic/utils-subprocess": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-3.0.1.tgz",
+ "integrity": "sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/utils-array": "2.1.6",
+ "@ionic/utils-fs": "3.1.7",
+ "@ionic/utils-process": "2.1.12",
+ "@ionic/utils-stream": "3.1.7",
+ "@ionic/utils-terminal": "2.3.5",
+ "cross-spawn": "^7.0.3",
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/cli-framework/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -3843,10 +4887,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@ionic/cli-framework-prompts/node_modules/chalk": {
+ "node_modules/@ionic/cli-framework/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -3859,10 +4904,11 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@ionic/cli-framework-prompts/node_modules/color-convert": {
+ "node_modules/@ionic/cli-framework/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -3871,43 +4917,45 @@
"node": ">=7.0.0"
}
},
- "node_modules/@ionic/cli-framework-prompts/node_modules/has-flag": {
+ "node_modules/@ionic/cli-framework/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@ionic/cli-framework/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/@ionic/cli-framework-prompts/node_modules/inquirer": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
- "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
- "license": "MIT",
+ "node_modules/@ionic/cli-framework/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.19",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.6.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
+ "glob": "^7.1.3"
},
- "engines": {
- "node": ">=8.0.0"
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@ionic/cli-framework-prompts/node_modules/supports-color": {
+ "node_modules/@ionic/cli-framework/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -3916,10 +4964,11 @@
"node": ">=8"
}
},
- "node_modules/@ionic/cli-framework/node_modules/@ionic/utils-subprocess": {
+ "node_modules/@ionic/cli/node_modules/@ionic/utils-subprocess": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-3.0.1.tgz",
"integrity": "sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@ionic/utils-array": "2.1.6",
@@ -3935,10 +4984,11 @@
"node": ">=16.0.0"
}
},
- "node_modules/@ionic/cli-framework/node_modules/ansi-styles": {
+ "node_modules/@ionic/cli/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -3950,10 +5000,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@ionic/cli-framework/node_modules/chalk": {
+ "node_modules/@ionic/cli/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -3966,10 +5017,11 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@ionic/cli-framework/node_modules/color-convert": {
+ "node_modules/@ionic/cli/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -3978,94 +5030,48 @@
"node": ">=7.0.0"
}
},
- "node_modules/@ionic/cli-framework/node_modules/has-flag": {
+ "node_modules/@ionic/cli/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@ionic/cli/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/@ionic/cli-framework/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@ionic/cli/node_modules/@ionic/utils-subprocess": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-3.0.1.tgz",
- "integrity": "sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==",
- "license": "MIT",
- "dependencies": {
- "@ionic/utils-array": "2.1.6",
- "@ionic/utils-fs": "3.1.7",
- "@ionic/utils-process": "2.1.12",
- "@ionic/utils-stream": "3.1.7",
- "@ionic/utils-terminal": "2.3.5",
- "cross-spawn": "^7.0.3",
- "debug": "^4.0.0",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@ionic/cli/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@ionic/cli/node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
+ "bin": {
+ "is-docker": "cli.js"
},
"engines": {
"node": ">=8"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@ionic/cli/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@ionic/cli/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/@ionic/cli/node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "color-name": "~1.1.4"
+ "is-docker": "^2.0.0"
},
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@ionic/cli/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4074,6 +5080,7 @@
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
"integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"is-docker": "^2.0.0",
@@ -4090,6 +5097,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -4100,6 +5108,8 @@
},
"node_modules/@ionic/core": {
"version": "6.7.5",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-6.7.5.tgz",
+ "integrity": "sha512-zRkRn+h/Vs3xt/EVgBdShMKDyeGOM4RU31NPF2icfu3CUTH+VrMV569MUnNjYvd1Lu2xK90pYy4TaicSWmC1Pw==",
"license": "MIT",
"dependencies": {
"@stencil/core": "^2.18.0",
@@ -4111,6 +5121,7 @@
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz",
"integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.0.0",
@@ -4124,6 +5135,7 @@
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz",
"integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/fs-extra": "^8.0.0",
@@ -4139,6 +5151,7 @@
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
"integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"at-least-node": "^1.0.0",
@@ -4150,31 +5163,11 @@
"node": ">=10"
}
},
- "node_modules/@ionic/utils-fs/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@ionic/utils-fs/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@ionic/utils-network": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/@ionic/utils-network/-/utils-network-2.1.7.tgz",
"integrity": "sha512-5Q3NdZtSLiLs7ufuX9X293BvAwo8CxaD93Hkp3ODPgctLYErv3nFibhq3j+eguEqUh2um9WNXEUOuQ8x+Sd1fw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.0.0",
@@ -4188,6 +5181,7 @@
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz",
"integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.0.0",
@@ -4201,6 +5195,7 @@
"version": "2.1.12",
"resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz",
"integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@ionic/utils-object": "2.1.6",
@@ -4214,10 +5209,18 @@
"node": ">=16.0.0"
}
},
+ "node_modules/@ionic/utils-process/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/@ionic/utils-stream": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.7.tgz",
"integrity": "sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.0.0",
@@ -4228,82 +5231,106 @@
}
},
"node_modules/@ionic/utils-subprocess": {
- "version": "2.1.14",
- "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.14.tgz",
- "integrity": "sha512-nGYvyGVjU0kjPUcSRFr4ROTraT3w/7r502f5QJEsMRKTqa4eEzCshtwRk+/mpASm0kgBN5rrjYA5A/OZg8ahqg==",
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.11.tgz",
+ "integrity": "sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@ionic/utils-array": "2.1.6",
- "@ionic/utils-fs": "3.1.7",
- "@ionic/utils-process": "2.1.11",
- "@ionic/utils-stream": "3.1.6",
- "@ionic/utils-terminal": "2.3.4",
+ "@ionic/utils-array": "2.1.5",
+ "@ionic/utils-fs": "3.1.6",
+ "@ionic/utils-process": "2.1.10",
+ "@ionic/utils-stream": "3.1.5",
+ "@ionic/utils-terminal": "2.3.3",
"cross-spawn": "^7.0.3",
"debug": "^4.0.0",
"tslib": "^2.0.1"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=10.3.0"
}
},
- "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.11.tgz",
- "integrity": "sha512-Uavxn+x8j3rDlZEk1X7YnaN6wCgbCwYQOeIjv/m94i1dzslqWhqIHEqxEyeE8HsT5Negboagg7GtQiABy+BLbA==",
+ "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-array": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz",
+ "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@ionic/utils-object": "2.1.6",
- "@ionic/utils-terminal": "2.3.4",
"debug": "^4.0.0",
- "signal-exit": "^3.0.3",
- "tree-kill": "^1.2.2",
"tslib": "^2.0.1"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=10.3.0"
}
},
- "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-stream": {
+ "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-fs": {
"version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.6.tgz",
- "integrity": "sha512-4+Kitey1lTA1yGtnigeYNhV/0tggI3lWBMjC7tBs1K9GXa/q7q4CtOISppdh8QgtOhrhAXS2Igp8rbko/Cj+lA==",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.6.tgz",
+ "integrity": "sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@types/fs-extra": "^8.0.0",
"debug": "^4.0.0",
+ "fs-extra": "^9.0.0",
"tslib": "^2.0.1"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=10.3.0"
}
},
- "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-terminal": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.4.tgz",
- "integrity": "sha512-cEiMFl3jklE0sW60r8JHH3ijFTwh/jkdEKWbylSyExQwZ8pPuwoXz7gpkWoJRLuoRHHSvg+wzNYyPJazIHfoJA==",
+ "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-object": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz",
+ "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/slice-ansi": "^4.0.0",
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10.3.0"
+ }
+ },
+ "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": {
+ "version": "2.1.10",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz",
+ "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/utils-object": "2.1.5",
+ "@ionic/utils-terminal": "2.3.3",
"debug": "^4.0.0",
"signal-exit": "^3.0.3",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "tslib": "^2.0.1",
- "untildify": "^4.0.0",
- "wrap-ansi": "^7.0.0"
+ "tree-kill": "^1.2.2",
+ "tslib": "^2.0.1"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=10.3.0"
}
},
- "node_modules/@ionic/utils-terminal": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz",
- "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==",
+ "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-stream": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz",
+ "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10.3.0"
+ }
+ },
+ "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-terminal": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz",
+ "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/slice-ansi": "^4.0.0",
@@ -4317,54 +5344,223 @@
"wrap-ansi": "^7.0.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=10.3.0"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
+ "node_modules/@ionic/utils-subprocess/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ "color-convert": "^2.0.1"
},
"engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
+ "node_modules/@ionic/utils-subprocess/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "color-name": "~1.1.4"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
+ "node_modules/@ionic/utils-subprocess/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"license": "MIT"
},
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
+ "node_modules/@ionic/utils-subprocess/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@ionic/utils-subprocess/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@ionic/utils-subprocess/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@ionic/utils-terminal": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz",
+ "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/slice-ansi": "^4.0.0",
+ "debug": "^4.0.0",
+ "signal-exit": "^3.0.3",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "tslib": "^2.0.1",
+ "untildify": "^4.0.0",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-terminal/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@ionic/utils-terminal/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-terminal/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@ionic/utils-terminal/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@ionic/utils-terminal/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4381,6 +5577,8 @@
},
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4395,6 +5593,8 @@
},
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4409,23 +5609,10 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4434,6 +5621,8 @@
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4446,7 +5635,9 @@
}
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4455,6 +5646,8 @@
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4462,21 +5655,27 @@
}
},
"node_modules/@jridgewell/source-map": {
- "version": "0.3.5",
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4484,95 +5683,350 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@kurkle/color": {
- "version": "0.3.2",
- "license": "MIT"
- },
- "node_modules/@leichtgewicht/ip-codec": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@ngtools/webpack": {
- "version": "16.2.14",
+ "node_modules/@jsonjoy.com/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"engines": {
- "node": "^16.14.0 || >=18.10.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
},
"peerDependencies": {
- "@angular/compiler-cli": "^16.0.0",
- "typescript": ">=4.9.3 <5.2",
- "webpack": "^5.54.0"
+ "tslib": "2"
}
},
- "node_modules/@ngx-formly/core": {
- "version": "6.3.6",
- "resolved": "https://registry.npmjs.org/@ngx-formly/core/-/core-6.3.6.tgz",
- "integrity": "sha512-0GDllrb9fFBTKG+yT+iQf96N3/CN+qRXIYsSX3uft12+c28qKVfMTsWTPYQsmKfGcrqtOZkMVTc+jGGD2JLZLg==",
+ "node_modules/@jsonjoy.com/json-pack": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz",
+ "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "tslib": "^2.0.0"
+ "@jsonjoy.com/base64": "^1.1.1",
+ "@jsonjoy.com/util": "^1.1.2",
+ "hyperdyperid": "^1.2.0",
+ "thingies": "^1.20.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
},
"peerDependencies": {
- "@angular/forms": ">=13.2.0",
- "rxjs": "^6.5.3 || ^7.0.0"
+ "tslib": "2"
}
},
- "node_modules/@ngx-formly/ionic": {
- "version": "6.3.6",
- "resolved": "https://registry.npmjs.org/@ngx-formly/ionic/-/ionic-6.3.6.tgz",
- "integrity": "sha512-GaZav6bGGuQ3BqEVYK9DV+QsdM92jjfPmKbN9qz5s+kXH4ahjGfMqcq6Rm4SP49vvl5Am3mJZbZU4g9XrJI5tQ==",
- "dependencies": {
- "tslib": "^2.0.0"
+ "node_modules/@jsonjoy.com/util": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz",
+ "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
},
"peerDependencies": {
- "@ionic/angular": "^6.0.0 || ^7.0.0",
- "@ngx-formly/core": "6.3.6"
+ "tslib": "2"
}
},
- "node_modules/@ngx-formly/schematics": {
- "version": "6.3.0",
- "license": "MIT",
- "dependencies": {
- "@angular-devkit/core": "^13.0.3",
- "@angular-devkit/schematics": "^13.0.3",
- "@schematics/angular": "^13.0.3"
- }
+ "node_modules/@kurkle/color": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
+ "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==",
+ "license": "MIT"
},
- "node_modules/@ngx-formly/schematics/node_modules/@angular-devkit/core": {
- "version": "13.3.11",
+ "node_modules/@leichtgewicht/ip-codec": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
+ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@listr2/prompt-adapter-inquirer": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.13.tgz",
+ "integrity": "sha512-nAl6teTt7EWSjttNavAnv3uFR3w3vPP3OTYmHyPNHzKhAj2NoBDHmbS3MGpvvO8KXXPASnHjEGrrKrdKTMKPnQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "ajv": "8.9.0",
- "ajv-formats": "2.1.1",
- "fast-json-stable-stringify": "2.1.0",
- "magic-string": "0.25.7",
- "rxjs": "6.6.7",
- "source-map": "0.7.3"
+ "@inquirer/type": "^1.3.3"
},
"engines": {
- "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
+ "node": ">=18.0.0"
},
"peerDependencies": {
- "chokidar": "^3.5.2"
- },
- "peerDependenciesMeta": {
- "chokidar": {
- "optional": true
- }
+ "@inquirer/prompts": ">= 3 < 6"
}
},
- "node_modules/@ngx-formly/schematics/node_modules/@angular-devkit/schematics": {
- "version": "13.3.11",
+ "node_modules/@lmdb/lmdb-darwin-arm64": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz",
+ "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@angular-devkit/core": "13.3.11",
- "jsonc-parser": "3.0.0",
- "magic-string": "0.25.7",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@lmdb/lmdb-darwin-x64": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz",
+ "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@lmdb/lmdb-linux-arm": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz",
+ "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@lmdb/lmdb-linux-arm64": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz",
+ "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@lmdb/lmdb-linux-x64": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz",
+ "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@lmdb/lmdb-win32-x64": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz",
+ "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz",
+ "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz",
+ "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz",
+ "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz",
+ "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz",
+ "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz",
+ "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@ngtools/webpack": {
+ "version": "18.2.2",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.2.tgz",
+ "integrity": "sha512-YhADmc+lVjLt3kze07A+yLry2yzcghdclu+7D3EDfa6fG2Pk33HK3MY2I0Z0BO+Ivoq7cV7yxm+naR+Od0Y5ng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "@angular/compiler-cli": "^18.0.0",
+ "typescript": ">=5.4 <5.6",
+ "webpack": "^5.54.0"
+ }
+ },
+ "node_modules/@ngx-formly/core": {
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/@ngx-formly/core/-/core-6.3.6.tgz",
+ "integrity": "sha512-0GDllrb9fFBTKG+yT+iQf96N3/CN+qRXIYsSX3uft12+c28qKVfMTsWTPYQsmKfGcrqtOZkMVTc+jGGD2JLZLg==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/forms": ">=13.2.0",
+ "rxjs": "^6.5.3 || ^7.0.0"
+ }
+ },
+ "node_modules/@ngx-formly/ionic": {
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/@ngx-formly/ionic/-/ionic-6.3.6.tgz",
+ "integrity": "sha512-GaZav6bGGuQ3BqEVYK9DV+QsdM92jjfPmKbN9qz5s+kXH4ahjGfMqcq6Rm4SP49vvl5Am3mJZbZU4g9XrJI5tQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@ionic/angular": "^6.0.0 || ^7.0.0",
+ "@ngx-formly/core": "6.3.6"
+ }
+ },
+ "node_modules/@ngx-formly/schematics": {
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/@ngx-formly/schematics/-/schematics-6.3.6.tgz",
+ "integrity": "sha512-QdrvdL4YrfhU9AxIXczSyzbZHWq7uuDtsIeEZ3lC0dFyvA0YyTxZRWfNyyMwCXCRXvn70WGlaU8UpeahTXsoAg==",
+ "license": "MIT",
+ "dependencies": {
+ "@angular-devkit/core": "^13.0.3",
+ "@angular-devkit/schematics": "^13.0.3",
+ "@schematics/angular": "^13.0.3"
+ }
+ },
+ "node_modules/@ngx-formly/schematics/node_modules/@angular-devkit/core": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
+ "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "8.9.0",
+ "ajv-formats": "2.1.1",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ngx-formly/schematics/node_modules/@angular-devkit/schematics": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz",
+ "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==",
+ "license": "MIT",
+ "dependencies": {
+ "@angular-devkit/core": "13.3.11",
+ "jsonc-parser": "3.0.0",
+ "magic-string": "0.25.7",
"ora": "5.4.1",
"rxjs": "6.6.7"
},
@@ -4584,6 +6038,8 @@
},
"node_modules/@ngx-formly/schematics/node_modules/@schematics/angular": {
"version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz",
+ "integrity": "sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A==",
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "13.3.11",
@@ -4598,6 +6054,8 @@
},
"node_modules/@ngx-formly/schematics/node_modules/ajv": {
"version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
+ "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -4610,12 +6068,33 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/@ngx-formly/schematics/node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@ngx-formly/schematics/node_modules/jsonc-parser": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
+ "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
"license": "MIT"
},
"node_modules/@ngx-formly/schematics/node_modules/magic-string": {
"version": "0.25.7",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
+ "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
"license": "MIT",
"dependencies": {
"sourcemap-codec": "^1.4.4"
@@ -4623,6 +6102,8 @@
},
"node_modules/@ngx-formly/schematics/node_modules/source-map": {
"version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">= 8"
@@ -4630,6 +6111,8 @@
},
"node_modules/@ngx-translate/core": {
"version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-15.0.0.tgz",
+ "integrity": "sha512-Am5uiuR0bOOxyoercDnAA3rJVizo4RRqJHo8N3RqJ+XfzVP/I845yEnMADykOHvM6HkVm4SZSnJBOiz0Anx5BA==",
"license": "SEE LICENSE IN LICENSE",
"engines": {
"node": "^16.13.0 || >=18.10.0"
@@ -4642,6 +6125,8 @@
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4654,6 +6139,8 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4662,6 +6149,8 @@
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4674,13 +6163,41 @@
},
"node_modules/@nodro7/angular-mydatepicker": {
"version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@nodro7/angular-mydatepicker/-/angular-mydatepicker-0.14.0.tgz",
+ "integrity": "sha512-NLUqU2Hpy3OQn/2xp5FDIqBlb87o9LCYRShnA9tfbQIPQIKay4sSexK6XPswZ3ccXkvrgRMhFDZpv10JURqahA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
}
},
+ "node_modules/@npmcli/agent": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
+ "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.1",
+ "lru-cache": "^10.0.1",
+ "socks-proxy-agent": "^8.0.3"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/agent/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/@npmcli/fs": {
- "version": "3.1.0",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
+ "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -4691,47 +6208,63 @@
}
},
"node_modules/@npmcli/git": {
- "version": "4.1.0",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz",
+ "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==",
"dev": true,
"license": "ISC",
"dependencies": {
- "@npmcli/promise-spawn": "^6.0.0",
- "lru-cache": "^7.4.4",
- "npm-pick-manifest": "^8.0.0",
- "proc-log": "^3.0.0",
+ "@npmcli/promise-spawn": "^7.0.0",
+ "ini": "^4.1.3",
+ "lru-cache": "^10.0.1",
+ "npm-pick-manifest": "^9.0.0",
+ "proc-log": "^4.0.0",
"promise-inflight": "^1.0.1",
"promise-retry": "^2.0.1",
"semver": "^7.3.5",
- "which": "^3.0.0"
+ "which": "^4.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@npmcli/git/node_modules/lru-cache": {
- "version": "7.18.3",
+ "node_modules/@npmcli/git/node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
"dev": true,
"license": "ISC",
"engines": {
- "node": ">=12"
+ "node": ">=16"
}
},
+ "node_modules/@npmcli/git/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/@npmcli/git/node_modules/which": {
- "version": "3.0.1",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "isexe": "^2.0.0"
+ "isexe": "^3.1.1"
},
"bin": {
"node-which": "bin/which.js"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.13.0 || >=18.0.0"
}
},
"node_modules/@npmcli/installed-package-contents": {
- "version": "2.0.2",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz",
+ "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -4739,178 +6272,194 @@
"npm-normalize-package-bin": "^3.0.0"
},
"bin": {
- "installed-package-contents": "lib/index.js"
+ "installed-package-contents": "bin/index.js"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/@npmcli/move-file": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/@npmcli/node-gyp": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
+ "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
"dev": true,
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/@npmcli/promise-spawn": {
- "version": "6.0.2",
+ "node_modules/@npmcli/package-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz",
+ "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==",
"dev": true,
"license": "ISC",
"dependencies": {
- "which": "^3.0.0"
+ "@npmcli/git": "^5.0.0",
+ "glob": "^10.2.2",
+ "hosted-git-info": "^7.0.0",
+ "json-parse-even-better-errors": "^3.0.0",
+ "normalize-package-data": "^6.0.0",
+ "proc-log": "^4.0.0",
+ "semver": "^7.5.3"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@npmcli/promise-spawn/node_modules/which": {
- "version": "3.0.1",
+ "node_modules/@npmcli/package-json/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "isexe": "^2.0.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
"bin": {
- "node-which": "bin/which.js"
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@npmcli/package-json/node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@npmcli/run-script": {
+ "node_modules/@npmcli/package-json/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@npmcli/package-json/node_modules/normalize-package-data": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
"dev": true,
- "license": "ISC",
+ "license": "BSD-2-Clause",
"dependencies": {
- "@npmcli/node-gyp": "^3.0.0",
- "@npmcli/promise-spawn": "^6.0.0",
- "node-gyp": "^9.0.0",
- "read-package-json-fast": "^3.0.0",
- "which": "^3.0.0"
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@npmcli/run-script/node_modules/which": {
- "version": "3.0.1",
+ "node_modules/@npmcli/promise-spawn": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz",
+ "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==",
"dev": true,
"license": "ISC",
"dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/which.js"
+ "which": "^4.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@nrwl/devkit": {
- "version": "16.5.1",
+ "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "@nx/devkit": "16.5.1"
+ "license": "ISC",
+ "engines": {
+ "node": ">=16"
}
},
- "node_modules/@nrwl/tao": {
- "version": "16.5.1",
+ "node_modules/@npmcli/promise-spawn/node_modules/which": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "nx": "16.5.1"
+ "isexe": "^3.1.1"
},
"bin": {
- "tao": "index.js"
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^16.13.0 || >=18.0.0"
}
},
- "node_modules/@nx/devkit": {
- "version": "16.5.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nrwl/devkit": "16.5.1",
- "ejs": "^3.1.7",
- "ignore": "^5.0.4",
- "semver": "7.5.3",
- "tmp": "~0.2.1",
- "tslib": "^2.3.0"
- },
- "peerDependencies": {
- "nx": ">= 15 <= 17"
- }
- },
- "node_modules/@nx/devkit/node_modules/lru-cache": {
- "version": "6.0.0",
+ "node_modules/@npmcli/redact": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz",
+ "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==",
"dev": true,
"license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
"engines": {
- "node": ">=10"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@nx/devkit/node_modules/semver": {
- "version": "7.5.3",
+ "node_modules/@npmcli/run-script": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz",
+ "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "@npmcli/node-gyp": "^3.0.0",
+ "@npmcli/package-json": "^5.0.0",
+ "@npmcli/promise-spawn": "^7.0.0",
+ "node-gyp": "^10.0.0",
+ "proc-log": "^4.0.0",
+ "which": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@nx/devkit/node_modules/tmp": {
- "version": "0.2.3",
+ "node_modules/@npmcli/run-script/node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"engines": {
- "node": ">=14.14"
+ "node": ">=16"
}
},
- "node_modules/@nx/devkit/node_modules/yallist": {
+ "node_modules/@npmcli/run-script/node_modules/which": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
"dev": true,
- "license": "ISC"
- },
- "node_modules/@parcel/watcher": {
- "version": "2.0.4",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "node-addon-api": "^3.2.1",
- "node-gyp-build": "^4.3.0"
+ "isexe": "^3.1.1"
},
- "engines": {
- "node": ">= 10.0.0"
+ "bin": {
+ "node-which": "bin/which.js"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
+ "engines": {
+ "node": "^16.13.0 || >=18.0.0"
}
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -4918,6 +6467,19 @@
"node": ">=14"
}
},
+ "node_modules/@pkgr/core": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
"node_modules/@prettier/plugin-xml": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz",
@@ -4929,155 +6491,435 @@
"prettier": ">=2.4.0"
}
},
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz",
+ "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz",
+ "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz",
+ "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz",
+ "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz",
+ "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz",
+ "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz",
+ "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz",
+ "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz",
+ "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz",
+ "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz",
+ "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz",
+ "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz",
+ "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz",
+ "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz",
+ "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz",
+ "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@schematics/angular": {
- "version": "16.2.13",
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.1.0.tgz",
+ "integrity": "sha512-k9Dy6JD7hqvCzDqnMjDm7J8H/P6m5mLuX2yEgQWKRAJ/YMINtBQAaKA1T9qXk97kEX6RNLpHMuDIsrIfK/H31Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "16.2.13",
- "@angular-devkit/schematics": "16.2.13",
- "jsonc-parser": "3.2.0"
+ "@angular-devkit/core": "18.1.0",
+ "@angular-devkit/schematics": "18.1.0",
+ "jsonc-parser": "3.3.1"
},
"engines": {
- "node": "^16.14.0 || >=18.10.0",
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
}
},
- "node_modules/@schematics/angular/node_modules/jsonc-parser": {
- "version": "3.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sigstore/bundle": {
- "version": "1.1.0",
+ "node_modules/@schematics/angular/node_modules/@angular-devkit/core": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.0.tgz",
+ "integrity": "sha512-6eXQDzHZCbpSMLv9Ohl+1QyLVDmGEXpuuHz3y64LfUTP0aEiBaxk96FjLXIxzJ4f2pbbW2XHzc+yuboGToRA0w==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"dependencies": {
- "@sigstore/protobuf-specs": "^0.2.0"
+ "ajv": "8.16.0",
+ "ajv-formats": "3.0.1",
+ "jsonc-parser": "3.3.1",
+ "picomatch": "4.0.2",
+ "rxjs": "7.8.1",
+ "source-map": "0.7.4"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
}
},
- "node_modules/@sigstore/protobuf-specs": {
- "version": "0.2.1",
+ "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": {
+ "version": "18.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.1.0.tgz",
+ "integrity": "sha512-BjrYutLfYFiPOSEcLBWCj3ENkwDn8gMfBSJesaBz7OrZBZGK5j0dVgBLIsGTP96TKo4o4vszJQOvS4AtV6xMGg==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "dependencies": {
+ "@angular-devkit/core": "18.1.0",
+ "jsonc-parser": "3.3.1",
+ "magic-string": "0.30.10",
+ "ora": "5.4.1",
+ "rxjs": "7.8.1"
+ },
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
}
},
- "node_modules/@sigstore/sign": {
- "version": "1.0.0",
+ "node_modules/@schematics/angular/node_modules/ajv": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+ "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"dependencies": {
- "@sigstore/bundle": "^1.1.0",
- "@sigstore/protobuf-specs": "^0.2.0",
- "make-fetch-happen": "^11.0.1"
+ "fast-deep-equal": "^3.1.3",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.4.1"
},
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@sigstore/sign/node_modules/@tootallnate/once": {
- "version": "2.0.0",
+ "node_modules/@schematics/angular/node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 10"
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
}
},
- "node_modules/@sigstore/sign/node_modules/http-proxy-agent": {
- "version": "5.0.0",
+ "node_modules/@schematics/angular/node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@sigstore/bundle": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz",
+ "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sigstore/protobuf-specs": "^0.3.2"
},
"engines": {
- "node": ">= 6"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@sigstore/sign/node_modules/lru-cache": {
- "version": "7.18.3",
+ "node_modules/@sigstore/core": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==",
"dev": true,
- "license": "ISC",
+ "license": "Apache-2.0",
"engines": {
- "node": ">=12"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@sigstore/sign/node_modules/make-fetch-happen": {
- "version": "11.1.1",
+ "node_modules/@sigstore/protobuf-specs": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz",
+ "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
- "http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^10.0.0"
- },
+ "license": "Apache-2.0",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@sigstore/sign/node_modules/minipass-fetch": {
- "version": "3.0.4",
+ "node_modules/@sigstore/sign": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz",
+ "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"dependencies": {
- "minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
+ "@sigstore/bundle": "^2.3.2",
+ "@sigstore/core": "^1.0.0",
+ "@sigstore/protobuf-specs": "^0.3.2",
+ "make-fetch-happen": "^13.0.1",
+ "proc-log": "^4.2.0",
+ "promise-retry": "^2.0.1"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "encoding": "^0.1.13"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": {
- "version": "7.0.4",
+ "node_modules/@sigstore/tuf": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz",
+ "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==",
"dev": true,
- "license": "ISC",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sigstore/protobuf-specs": "^0.3.2",
+ "tuf-js": "^2.2.1"
+ },
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/@sigstore/tuf": {
- "version": "1.0.3",
+ "node_modules/@sigstore/verify": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz",
+ "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@sigstore/protobuf-specs": "^0.2.0",
- "tuf-js": "^1.1.7"
+ "@sigstore/bundle": "^2.3.2",
+ "@sigstore/core": "^1.1.0",
+ "@sigstore/protobuf-specs": "^0.3.2"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@socket.io/component-emitter": {
- "version": "3.1.0",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
"dev": true,
"license": "MIT"
},
"node_modules/@stencil/core": {
"version": "2.22.3",
+ "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.22.3.tgz",
+ "integrity": "sha512-kmVA0M/HojwsfkeHsifvHVIYe4l5tin7J5+DLgtl8h6WWfiMClND5K3ifCXXI2ETDNKiEk21p6jql3Fx9o2rng==",
"license": "MIT",
"bin": {
"stencil": "bin/stencil"
@@ -5088,16 +6930,18 @@
}
},
"node_modules/@stylistic/eslint-plugin": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.4.0.tgz",
- "integrity": "sha512-GJ86m60wpKPm0m8sSuApOITjCvKUbyzhVO/BTQb7BNYXVUJMS3ql+uAro0V+4yoHwyBVXTB4EDy3UGkOqtEyyw==",
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.7.2.tgz",
+ "integrity": "sha512-3DVLU5HEuk2pQoBmXJlzvrxbKNpu2mJ0SRqz5O/CJjyNCr12ZiPcYMEtuArTyPOk5i7bsAU44nywh1rGfe3gKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@stylistic/eslint-plugin-js": "2.4.0",
- "@stylistic/eslint-plugin-jsx": "2.4.0",
- "@stylistic/eslint-plugin-plus": "2.4.0",
- "@stylistic/eslint-plugin-ts": "2.4.0",
- "@types/eslint": "^9.6.0"
+ "@types/eslint": "^9.6.1",
+ "@typescript-eslint/utils": "^8.3.0",
+ "eslint-visitor-keys": "^4.0.0",
+ "espree": "^10.1.0",
+ "estraverse": "^5.3.0",
+ "picomatch": "^4.0.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5106,440 +6950,17 @@
"eslint": ">=8.40.0"
}
},
- "node_modules/@stylistic/eslint-plugin-js": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.4.0.tgz",
- "integrity": "sha512-ScIYDFAwNz+ELr3KfAZMuYMCUq7Q6TdEEIq4RBRR77EHucpDrwi5Kx2d0VdYxb4s4o6nOtSkJmY9MCZupDYJow==",
+ "node_modules/@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
"dev": true,
- "dependencies": {
- "@types/eslint": "^9.6.0",
- "acorn": "^8.12.1",
- "eslint-visitor-keys": "^4.0.0",
- "espree": "^10.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "peerDependencies": {
- "eslint": ">=8.40.0"
- }
+ "license": "MIT"
},
- "node_modules/@stylistic/eslint-plugin-js/node_modules/eslint-visitor-keys": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
- "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-js/node_modules/espree": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
- "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.12.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.0.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-jsx": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.4.0.tgz",
- "integrity": "sha512-yaZXaRj9lOwrQd1YA1d1Ssz58IrDKDYTvLzlKcKED4NlpjDdMbj//Y4DlNhlW9M9v0ZsRsmKNQl2p5OWFfmdEw==",
- "dev": true,
- "dependencies": {
- "@stylistic/eslint-plugin-js": "^2.4.0",
- "@types/eslint": "^9.6.0",
- "estraverse": "^5.3.0",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "peerDependencies": {
- "eslint": ">=8.40.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-jsx/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-jsx/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.4.0.tgz",
- "integrity": "sha512-yqVZ2ps3lSzT3Atcx/jSbzTaRJfxtWeuPk1WvINUod1fRVxNlgKLDwiM+63Hq3Q7H4aM0lS5ccAbFlEGINNg0Q==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "^9.6.0",
- "@typescript-eslint/utils": "^7.17.0"
- },
- "peerDependencies": {
- "eslint": "*"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
- "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/types": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
- "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
- "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
- "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
- "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@stylistic/eslint-plugin-plus/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.4.0.tgz",
- "integrity": "sha512-0zi3hHrrqaXPGZESTfPNUm4YMvxq+aqPGCUiZfEnn7l5VNC19oKaPonZ6LmKzoksebzpJ7w6nieZLVeQm4o7tg==",
- "dev": true,
- "dependencies": {
- "@stylistic/eslint-plugin-js": "2.4.0",
- "@types/eslint": "^9.6.0",
- "@typescript-eslint/utils": "^7.17.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "peerDependencies": {
- "eslint": ">=8.40.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
- "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/types": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
- "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
- "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
- "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
- "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@stylistic/eslint-plugin-ts/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@tootallnate/quickjs-emscripten": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
- "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
- "license": "MIT"
- },
- "node_modules/@trapezedev/gradle-parse": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/@trapezedev/gradle-parse/-/gradle-parse-7.0.10.tgz",
- "integrity": "sha512-k822Is3jGroqOTKF0gAFm80LmhFJWBAyZvNtyuXq6uQUzDDe2fj/gHwixP6VFzlpaWKLP7IuR609Xv8gwJCXyg==",
+ "node_modules/@trapezedev/gradle-parse": {
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/@trapezedev/gradle-parse/-/gradle-parse-7.0.10.tgz",
+ "integrity": "sha512-k822Is3jGroqOTKF0gAFm80LmhFJWBAyZvNtyuXq6uQUzDDe2fj/gHwixP6VFzlpaWKLP7IuR609Xv8gwJCXyg==",
"dev": true,
"license": "SEE LICENSE"
},
@@ -5612,80 +7033,62 @@
"node": ">=10"
}
},
- "node_modules/@trapezedev/project/node_modules/tmp": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
- "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.14"
- }
- },
"node_modules/@tsconfig/node10": {
- "version": "1.0.9",
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node16": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"dev": true,
"license": "MIT"
},
"node_modules/@tufjs/canonical-json": {
- "version": "1.0.0",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
+ "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/@tufjs/models": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@tufjs/canonical-json": "1.0.0",
- "minimatch": "^9.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@tufjs/models/node_modules/brace-expansion": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz",
+ "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@tufjs/models/node_modules/minimatch": {
- "version": "9.0.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "@tufjs/canonical-json": "2.0.0",
+ "minimatch": "^9.0.4"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/@types/body-parser": {
"version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+ "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5695,6 +7098,8 @@
},
"node_modules/@types/bonjour": {
"version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
+ "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5703,6 +7108,8 @@
},
"node_modules/@types/connect": {
"version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5711,6 +7118,8 @@
},
"node_modules/@types/connect-history-api-fallback": {
"version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
+ "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5720,6 +7129,8 @@
},
"node_modules/@types/cookie": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
"dev": true,
"license": "MIT"
},
@@ -5731,6 +7142,8 @@
},
"node_modules/@types/cors": {
"version": "2.8.17",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+ "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5738,31 +7151,27 @@
}
},
"node_modules/@types/eslint": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
- "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"node_modules/@types/estree": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/express": {
"version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
+ "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5773,9 +7182,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz",
- "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==",
+ "version": "4.19.5",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
+ "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5789,6 +7198,7 @@
"version": "8.1.5",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz",
"integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
@@ -5796,11 +7206,15 @@
},
"node_modules/@types/http-errors": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/http-proxy": {
- "version": "1.17.14",
+ "version": "1.17.15",
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz",
+ "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5809,11 +7223,15 @@
},
"node_modules/@types/jasmine": {
"version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.6.tgz",
+ "integrity": "sha512-3N0FpQTeiWjm+Oo1WUYWguUS7E6JLceiGTriFrG8k5PU7zRLJCzLcWURU3wjMbZGS//a2/LgjsnO3QxIlwxt9g==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/jasminewd2": {
"version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.13.tgz",
+ "integrity": "sha512-aJ3wj8tXMpBrzQ5ghIaqMisD8C3FIrcO6sDKHqFbuqAsI7yOxj0fA7MrRCPLZHIVUjERIwsMmGn/vB0UQ9u0Hg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5822,16 +7240,22 @@
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/json5": {
"version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/mime": {
"version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
"dev": true,
"license": "MIT"
},
@@ -5842,15 +7266,30 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/mute-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz",
+ "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/node": {
- "version": "20.12.7",
+ "version": "20.16.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz",
+ "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.19.2"
}
},
"node_modules/@types/node-forge": {
"version": "1.3.11",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
+ "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5866,36 +7305,43 @@
},
"node_modules/@types/q": {
"version": "0.0.32",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
+ "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/qs": {
"version": "6.9.15",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
+ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/range-parser": {
"version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/retry": {
- "version": "0.12.0",
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
+ "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/selenium-webdriver": {
"version": "3.0.26",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/semver": {
- "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.26.tgz",
+ "integrity": "sha512-dyIGFKXfUFiwkMfNGn1+F6b80ZjR3uSYv1j6xVJSDlft5waZ2cwkHW4e7zNzvq7hiEackcgvBpmnXZrI1GltPg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/send": {
"version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+ "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5905,6 +7351,8 @@
},
"node_modules/@types/serve-index": {
"version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz",
+ "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5913,6 +7361,8 @@
},
"node_modules/@types/serve-static": {
"version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5925,10 +7375,13 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/sockjs": {
"version": "0.3.36",
+ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
+ "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5942,8 +7395,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/wrap-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",
+ "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/ws": {
- "version": "8.5.10",
+ "version": "8.5.12",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz",
+ "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5951,58 +7413,32 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.21.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
+ "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/type-utils": "6.21.0",
- "@typescript-eslint/utils": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4",
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/type-utils": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
"graphemer": "^1.4.0",
- "ignore": "^5.2.4",
+ "ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": {
- "version": "6.21.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/utils": "6.21.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
+ "ts-api-utils": "^1.3.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "@typescript-eslint/parser": "^7.0.0",
+ "eslint": "^8.56.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -6011,49 +7447,50 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
- "version": "6.21.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
+ "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "semver": "^7.5.4"
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/typescript-estree": "7.18.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "eslint": "^8.56.0"
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "6.21.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
+ "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
"debug": "^4.3.4"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "eslint": "^8.56.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -6062,15 +7499,17 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.21.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
+ "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0"
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -6078,62 +7517,26 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "5.62.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
+ "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "5.62.0",
- "@typescript-eslint/utils": "5.62.0",
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
"debug": "^4.3.4",
- "tsutils": "^3.21.0"
+ "ts-api-utils": "^1.3.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "eslint": "^8.56.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -6141,55 +7544,37 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
+ "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "7.18.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/typescript-estree": "7.18.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/globby": {
- "version": "11.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/slash": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
+ "peerDependencies": {
+ "eslint": "^8.56.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "6.21.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+ "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -6197,21 +7582,23 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.21.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
+ "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
+ "@typescript-eslint/types": "7.18.0",
+ "@typescript-eslint/visitor-keys": "7.18.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
- "minimatch": "9.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -6223,90 +7610,41 @@
}
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
- "version": "11.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@typescript-eslint/utils": {
- "version": "5.62.0",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz",
+ "integrity": "sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.3.0",
+ "@typescript-eslint/types": "8.3.0",
+ "@typescript-eslint/typescript-estree": "8.3.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "eslint": "^8.57.0 || ^9.0.0"
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz",
+ "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
+ "@typescript-eslint/types": "8.3.0",
+ "@typescript-eslint/visitor-keys": "8.3.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
@@ -6314,11 +7652,13 @@
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
+ "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
@@ -6326,20 +7666,23 @@
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz",
+ "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
+ "@typescript-eslint/types": "8.3.0",
+ "@typescript-eslint/visitor-keys": "8.3.0",
"debug": "^4.3.4",
- "globby": "^11.1.0",
+ "fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
@@ -6352,82 +7695,91 @@
}
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
+ "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
+ "@typescript-eslint/types": "8.3.0",
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/globby": {
- "version": "11.1.0",
+ "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
+ "license": "Apache-2.0",
"engines": {
- "node": ">=10"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/slash": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.21.0",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
+ "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "eslint-visitor-keys": "^3.4.1"
+ "@typescript-eslint/types": "7.18.0",
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true,
"license": "ISC"
},
"node_modules/@vitejs/plugin-basic-ssl": {
- "version": "1.0.1",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz",
+ "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14.6.0"
},
"peerDependencies": {
- "vite": "^3.0.0 || ^4.0.0"
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
}
},
"node_modules/@webassemblyjs/ast": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
+ "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6437,21 +7789,29 @@
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
"version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
+ "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6462,11 +7822,15 @@
},
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
+ "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6478,6 +7842,8 @@
},
"node_modules/@webassemblyjs/ieee754": {
"version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6486,6 +7852,8 @@
},
"node_modules/@webassemblyjs/leb128": {
"version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -6494,11 +7862,15 @@
},
"node_modules/@webassemblyjs/utf8": {
"version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
+ "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6514,6 +7886,8 @@
},
"node_modules/@webassemblyjs/wasm-gen": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
+ "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6526,6 +7900,8 @@
},
"node_modules/@webassemblyjs/wasm-opt": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
+ "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6537,6 +7913,8 @@
},
"node_modules/@webassemblyjs/wasm-parser": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
+ "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6550,6 +7928,8 @@
},
"node_modules/@webassemblyjs/wast-printer": {
"version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
+ "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6557,86 +7937,6 @@
"@xtuc/long": "4.2.2"
}
},
- "node_modules/@wessberg/ts-evaluator": {
- "version": "0.0.27",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "jsdom": "^16.4.0",
- "object-path": "^0.11.5",
- "tslib": "^2.0.3"
- },
- "engines": {
- "node": ">=10.1.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/wessberg/ts-evaluator?sponsor=1"
- },
- "peerDependencies": {
- "typescript": ">=3.2.x || >= 4.x"
- }
- },
- "node_modules/@wessberg/ts-evaluator/node_modules/ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@wessberg/ts-evaluator/node_modules/chalk": {
- "version": "4.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@wessberg/ts-evaluator/node_modules/color-convert": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@wessberg/ts-evaluator/node_modules/has-flag": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@wessberg/ts-evaluator/node_modules/supports-color": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@xml-tools/parser": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz",
@@ -6659,59 +7959,39 @@
},
"node_modules/@xtuc/ieee754": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/@yarnpkg/lockfile": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
"dev": true,
"license": "BSD-2-Clause"
},
- "node_modules/@yarnpkg/parsers": {
- "version": "3.0.0-rc.46",
+ "node_modules/abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
"dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "js-yaml": "^3.10.0",
- "tslib": "^2.4.0"
- },
+ "license": "ISC",
"engines": {
- "node": ">=14.15.0"
- }
- },
- "node_modules/@zkochan/js-yaml": {
- "version": "0.0.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/@zkochan/js-yaml/node_modules/argparse": {
- "version": "2.0.1",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/abab": {
- "version": "2.0.6",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/abbrev": {
- "version": "1.1.1",
- "dev": true,
- "license": "ISC"
- },
"node_modules/accepts": {
"version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6727,25 +8007,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
"dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
- "node_modules/acorn-globals/node_modules/acorn": {
- "version": "7.4.1",
- "dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -6754,16 +8015,10 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-globals/node_modules/acorn-walk": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-import-assertions": {
- "version": "1.9.0",
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -6772,6 +8027,8 @@
},
"node_modules/acorn-jsx": {
"version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -6779,9 +8036,14 @@
}
},
"node_modules/acorn-walk": {
- "version": "8.3.1",
+ "version": "8.3.3",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+ "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
"engines": {
"node": ">=0.4.0"
}
@@ -6795,6 +8057,8 @@
},
"node_modules/adjust-sourcemap-loader": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz",
+ "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6807,6 +8071,8 @@
},
"node_modules/adjust-sourcemap-loader/node_modules/loader-utils": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6819,37 +8085,32 @@
}
},
"node_modules/adm-zip": {
- "version": "0.5.12",
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.15.tgz",
+ "integrity": "sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=6.0"
+ "node": ">=12.0"
}
},
"node_modules/agent-base": {
- "version": "6.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agentkeepalive": {
- "version": "4.5.0",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "humanize-ms": "^1.2.1"
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">= 8.0.0"
+ "node": ">= 14"
}
},
"node_modules/aggregate-error": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6861,13 +8122,16 @@
}
},
"node_modules/ajv": {
- "version": "8.12.0",
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
+ "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
+ "fast-deep-equal": "^3.1.3",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "uri-js": "^4.4.1"
},
"funding": {
"type": "github",
@@ -6875,7 +8139,10 @@
}
},
"node_modules/ajv-formats": {
- "version": "2.1.1",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ajv": "^8.0.0"
@@ -6891,6 +8158,8 @@
},
"node_modules/ajv-keywords": {
"version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6902,6 +8171,8 @@
},
"node_modules/ansi-colors": {
"version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6910,6 +8181,9 @@
},
"node_modules/ansi-escapes": {
"version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"type-fest": "^0.21.3"
@@ -6923,6 +8197,8 @@
},
"node_modules/ansi-html-community": {
"version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
+ "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
"dev": true,
"engines": [
"node >= 0.8.0"
@@ -6934,6 +8210,8 @@
},
"node_modules/ansi-regex": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -6941,6 +8219,8 @@
},
"node_modules/ansi-styles": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6952,6 +8232,8 @@
},
"node_modules/anymatch": {
"version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"devOptional": true,
"license": "ISC",
"dependencies": {
@@ -6962,46 +8244,47 @@
"node": ">= 8"
}
},
- "node_modules/aproba": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC"
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
},
"node_modules/are-docs-informative": {
"version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+ "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
}
},
- "node_modules/are-we-there-yet": {
- "version": "3.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/arg": {
"version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true,
"license": "MIT"
},
"node_modules/argparse": {
- "version": "1.0.10",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
+ "license": "Python-2.0"
},
"node_modules/aria-query": {
"version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -7010,6 +8293,8 @@
},
"node_modules/array-buffer-byte-length": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7025,6 +8310,8 @@
},
"node_modules/array-flatten": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"dev": true,
"license": "MIT"
},
@@ -7036,14 +8323,17 @@
"license": "MIT"
},
"node_modules/array-includes": {
- "version": "3.1.7",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
"is-string": "^1.0.7"
},
"engines": {
@@ -7055,6 +8345,8 @@
},
"node_modules/array-union": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7063,6 +8355,8 @@
},
"node_modules/array-uniq": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7071,6 +8365,8 @@
},
"node_modules/array.prototype.findlastindex": {
"version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7090,6 +8386,8 @@
},
"node_modules/array.prototype.flat": {
"version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7107,6 +8405,8 @@
},
"node_modules/array.prototype.flatmap": {
"version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7124,6 +8424,8 @@
},
"node_modules/arraybuffer.prototype.slice": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7145,6 +8447,8 @@
},
"node_modules/arrify": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7155,10 +8459,13 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/asn1": {
"version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7167,6 +8474,8 @@
},
"node_modules/assert-plus": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7177,6 +8486,7 @@
"version": "0.13.4",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
"integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"tslib": "^2.0.1"
@@ -7189,31 +8499,33 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/async": {
- "version": "3.2.5",
- "dev": true,
- "license": "MIT"
- },
"node_modules/asynckit": {
"version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
"license": "MIT"
},
"node_modules/at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
"license": "ISC",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/autoprefixer": {
- "version": "10.4.14",
+ "version": "10.4.20",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
+ "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
"dev": true,
"funding": [
{
@@ -7223,15 +8535,19 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001464",
- "fraction.js": "^4.2.0",
+ "browserslist": "^4.23.3",
+ "caniuse-lite": "^1.0.30001646",
+ "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
+ "picocolors": "^1.0.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
@@ -7246,6 +8562,8 @@
},
"node_modules/available-typed-arrays": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7260,6 +8578,8 @@
},
"node_modules/aws-sign2": {
"version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -7267,39 +8587,20 @@
}
},
"node_modules/aws4": {
- "version": "1.12.0",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz",
+ "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==",
"dev": true,
"license": "MIT"
},
- "node_modules/axios": {
- "version": "1.6.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
- "node_modules/axios/node_modules/form-data": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/axobject-query": {
- "version": "4.0.0",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
"dev": true,
"license": "Apache-2.0",
- "dependencies": {
- "dequal": "^2.0.3"
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/b4a": {
@@ -7311,42 +8612,31 @@
},
"node_modules/babel-loader": {
"version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+ "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "find-cache-dir": "^4.0.0",
- "schema-utils": "^4.0.0"
- },
- "engines": {
- "node": ">= 14.15.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0",
- "webpack": ">=5"
- }
- },
- "node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
+ "dependencies": {
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">= 14.15.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.10",
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
+ "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.1",
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -7355,6 +8645,8 @@
},
"node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -7362,53 +8654,27 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.8.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.4",
- "core-js-compat": "^3.33.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.4.4",
+ "version": "0.10.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
+ "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "core-js-compat": "^3.38.0"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.5.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.5.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.5.0",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
+ "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
+ "@babel/helper-define-polyfill-provider": "^0.6.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -7416,6 +8682,9 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/bare-events": {
@@ -7471,6 +8740,8 @@
},
"node_modules/base64-js": {
"version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
@@ -7489,6 +8760,8 @@
},
"node_modules/base64id": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7499,6 +8772,7 @@
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
"integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -7506,11 +8780,15 @@
},
"node_modules/batch": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
"dev": true,
"license": "MIT"
},
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -7529,6 +8807,8 @@
},
"node_modules/big.js": {
"version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7536,15 +8816,22 @@
}
},
"node_modules/binary-extensions": {
- "version": "2.2.0",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/bl": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"license": "MIT",
"dependencies": {
"buffer": "^5.5.0",
@@ -7554,6 +8841,8 @@
},
"node_modules/blocking-proxy": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz",
+ "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7568,6 +8857,8 @@
},
"node_modules/body-parser": {
"version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7589,16 +8880,10 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/body-parser/node_modules/bytes": {
- "version": "3.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/body-parser/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7607,6 +8892,8 @@
},
"node_modules/body-parser/node_modules/iconv-lite": {
"version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7618,11 +8905,15 @@
},
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true,
"license": "MIT"
},
"node_modules/bonjour-service": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
+ "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7632,6 +8923,8 @@
},
"node_modules/boolbase": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true,
"license": "ISC"
},
@@ -7659,11 +8952,13 @@
}
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
@@ -7679,13 +8974,10 @@
"node": ">=8"
}
},
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "dev": true,
- "license": "BSD-2-Clause"
- },
"node_modules/browserslist": {
- "version": "4.23.0",
+ "version": "4.23.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+ "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"dev": true,
"funding": [
{
@@ -7703,10 +8995,10 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001587",
- "electron-to-chromium": "^1.4.668",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.13"
+ "caniuse-lite": "^1.0.30001646",
+ "electron-to-chromium": "^1.5.4",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.0"
},
"bin": {
"browserslist": "cli.js"
@@ -7717,6 +9009,8 @@
},
"node_modules/browserstack": {
"version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz",
+ "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7725,6 +9019,8 @@
},
"node_modules/browserstack/node_modules/agent-base": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+ "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7736,6 +9032,8 @@
},
"node_modules/browserstack/node_modules/debug": {
"version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7744,6 +9042,8 @@
},
"node_modules/browserstack/node_modules/https-proxy-agent": {
"version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7756,6 +9056,8 @@
},
"node_modules/buffer": {
"version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"funding": [
{
"type": "github",
@@ -7788,30 +9090,31 @@
},
"node_modules/buffer-from": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true,
"license": "MIT"
},
- "node_modules/builtin-modules": {
- "version": "3.3.0",
+ "node_modules/bundle-name": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
+ "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "run-applescript": "^7.0.0"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/builtins": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.0.0"
- }
- },
"node_modules/bytes": {
- "version": "3.0.0",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7819,16 +9122,18 @@
}
},
"node_modules/cacache": {
- "version": "17.1.4",
+ "version": "18.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
+ "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
"dev": true,
"license": "ISC",
"dependencies": {
"@npmcli/fs": "^3.1.0",
"fs-minipass": "^3.0.0",
"glob": "^10.2.2",
- "lru-cache": "^7.7.1",
+ "lru-cache": "^10.0.1",
"minipass": "^7.0.3",
- "minipass-collect": "^1.0.2",
+ "minipass-collect": "^2.0.1",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"p-map": "^4.0.0",
@@ -7837,27 +9142,42 @@
"unique-filename": "^3.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/cacache/node_modules/lru-cache": {
- "version": "7.18.3",
+ "node_modules/cacache/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"license": "ISC",
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/cacache/node_modules/minipass": {
- "version": "7.0.4",
+ "node_modules/cacache/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
+ "license": "ISC"
},
"node_modules/call-bind": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
@@ -7875,6 +9195,8 @@
},
"node_modules/callsites": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7883,6 +9205,8 @@
},
"node_modules/camelcase": {
"version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7908,7 +9232,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001606",
+ "version": "1.0.30001653",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
+ "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
"dev": true,
"funding": [
{
@@ -7930,36 +9256,41 @@
"version": "1.1.17",
"resolved": "https://registry.npmjs.org/capacitor-blob-writer/-/capacitor-blob-writer-1.1.17.tgz",
"integrity": "sha512-IixJbl0k4NQ+aPo+UbDvHJxztnaGymVMCkYoHKTjj3F3KDTsMEl5iK7fEZkQ5jhQabe8YJKW0wTGu6Qm/RmXrw==",
+ "license": "MIT",
"peerDependencies": {
"@capacitor/core": ">=3.0.0",
"@capacitor/filesystem": ">=1.0.0"
}
},
"node_modules/capacitor-ios-autofill-save-password": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capacitor-ios-autofill-save-password/-/capacitor-ios-autofill-save-password-2.0.0.tgz",
- "integrity": "sha512-7Tnu7qU5elnv1YkcXtXPIBhvyCZX9nskKrI78kJG65qaf6rSL1EE5IBOdTSQcpyPSyVio+UX1EFsS/QZjQrPuA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/capacitor-ios-autofill-save-password/-/capacitor-ios-autofill-save-password-3.0.0.tgz",
+ "integrity": "sha512-FGWralgZ47FtpRcIaJP+IcNDZfmoaCUmkeGBKo84V3nYMKQwQbpN9wLIzXa+TtHj8h1SenRuSR2eTsQBrRewAQ==",
"license": "MIT",
"peerDependencies": {
- "@capacitor/core": "^5.0.0"
+ "@capacitor/core": "^6.0.0"
}
},
"node_modules/capacitor-secure-storage-plugin": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/capacitor-secure-storage-plugin/-/capacitor-secure-storage-plugin-0.9.0.tgz",
- "integrity": "sha512-P5fiC94opcLHu41vceo9weXH+20g0SPYKkeAx+qm9eKNcVFqpcuI4dqwivXlGXYNMDygyjSQuAaFwZ4gW0Y91Q==",
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/capacitor-secure-storage-plugin/-/capacitor-secure-storage-plugin-0.10.0.tgz",
+ "integrity": "sha512-dV4E+HTZAJWC3gef7sBXaAkkb6wvcZHyXjJIHXNb3yz9gRQ/5VMLqCxa0khqpwgWh5oIbo4XFxg3g5tEkfaNMg==",
"license": "MIT",
"peerDependencies": {
- "@capacitor/core": "^5.0.0"
+ "@capacitor/core": "^6.0.0"
}
},
"node_modules/caseless": {
"version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/chalk": {
"version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7973,12 +9304,15 @@
},
"node_modules/chardet": {
"version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/chart.js": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz",
- "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz",
+ "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==",
"license": "MIT",
"dependencies": {
"@kurkle/color": "^0.3.0"
@@ -7989,6 +9323,8 @@
},
"node_modules/chartjs-adapter-date-fns": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz",
+ "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==",
"license": "MIT",
"peerDependencies": {
"chart.js": ">=2.8.0",
@@ -8004,8 +9340,19 @@
"chart.js": ">=4.0.0"
}
},
+ "node_modules/chartjs-plugin-datalabels": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.2.0.tgz",
+ "integrity": "sha512-14ZU30lH7n89oq+A4bWaJPnAG8a7ZTk7dKf48YAzMvJjQtjrgg5Dpk9f+LbjCF6bpx3RAGTeL13IXpKQYyRvlw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "chart.js": ">=3.0.0"
+ }
+ },
"node_modules/chartjs-plugin-zoom": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.1.tgz",
+ "integrity": "sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==",
"license": "MIT",
"dependencies": {
"hammerjs": "^2.0.8"
@@ -8025,14 +9372,10 @@
}
},
"node_modules/chokidar": {
- "version": "3.5.3",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"devOptional": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
@@ -8046,19 +9389,27 @@
"engines": {
"node": ">= 8.10.0"
},
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/chownr": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/chrome-trace-event": {
- "version": "1.0.3",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8067,10 +9418,14 @@
},
"node_modules/classlist.js": {
"version": "1.1.20150312",
+ "resolved": "https://registry.npmjs.org/classlist.js/-/classlist.js-1.1.20150312.tgz",
+ "integrity": "sha512-eR8yB970+yGslcTnJnROX2icsMa8v/KVLv/sgv3NhSvZSHgam64XNSF2TyJnKIfsnTFJBcTdrIneYqUIrvxLpg==",
"license": "Dedicated to the public domain"
},
"node_modules/clean-stack": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8079,6 +9434,8 @@
},
"node_modules/cli-cursor": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"license": "MIT",
"dependencies": {
"restore-cursor": "^3.1.0"
@@ -8089,6 +9446,8 @@
},
"node_modules/cli-spinners": {
"version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -8097,28 +9456,203 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/cli-truncate": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
+ "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "slice-ansi": "^5.0.0",
+ "string-width": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/slice-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.0.0",
+ "is-fullwidth-code-point": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/cli-width": {
- "version": "3.0.0",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+ "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+ "dev": true,
"license": "ISC",
"engines": {
- "node": ">= 10"
+ "node": ">= 12"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cliui/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "node_modules/cliui": {
- "version": "8.0.1",
+ "node_modules/cliui/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
- "license": "ISC",
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/clone": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
"license": "MIT",
"engines": {
"node": ">=0.8"
@@ -8126,6 +9660,8 @@
},
"node_modules/clone-deep": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8153,21 +9689,21 @@
},
"node_modules/color-convert": {
"version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
- "node_modules/color-convert/node_modules/color-name": {
+ "node_modules/color-name": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true,
"license": "MIT"
},
- "node_modules/color-name": {
- "version": "1.1.4",
- "license": "MIT"
- },
"node_modules/color-string": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
@@ -8179,14 +9715,6 @@
"simple-swizzle": "^0.2.2"
}
},
- "node_modules/color-support": {
- "version": "1.1.3",
- "dev": true,
- "license": "ISC",
- "bin": {
- "color-support": "bin.js"
- }
- },
"node_modules/color/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -8200,13 +9728,24 @@
"node": ">=7.0.0"
}
},
+ "node_modules/color/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/colorette": {
"version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true,
"license": "MIT"
},
"node_modules/colors": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8215,6 +9754,9 @@
},
"node_modules/combined-stream": {
"version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
@@ -8224,14 +9766,19 @@
}
},
"node_modules/commander": {
- "version": "7.2.0",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">= 12"
}
},
"node_modules/comment-parser": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
+ "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8240,6 +9787,8 @@
},
"node_modules/common-path-prefix": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
"dev": true,
"license": "ISC"
},
@@ -8264,6 +9813,7 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
+ "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -8271,6 +9821,8 @@
},
"node_modules/compressible": {
"version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8282,6 +9834,8 @@
},
"node_modules/compression": {
"version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8297,8 +9851,20 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/compression/node_modules/bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/compression/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8307,20 +9873,29 @@
},
"node_modules/compression/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true,
"license": "MIT"
},
"node_modules/compression/node_modules/safe-buffer": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/connect": {
"version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8335,6 +9910,8 @@
},
"node_modules/connect-history-api-fallback": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
+ "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8343,60 +9920,25 @@
},
"node_modules/connect/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
- "node_modules/connect/node_modules/finalhandler": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "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"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/connect/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true,
"license": "MIT"
},
- "node_modules/connect/node_modules/on-finished": {
- "version": "2.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/connect/node_modules/statuses": {
- "version": "1.5.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "dev": true,
- "license": "ISC"
- },
"node_modules/content-disposition": {
"version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8408,6 +9950,8 @@
},
"node_modules/content-type": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8451,18 +9995,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-angular/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-atom": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz",
@@ -8476,18 +10008,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-atom/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-codemirror": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz",
@@ -8501,18 +10021,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-codemirror/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-conventionalcommits": {
"version": "4.6.3",
"resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz",
@@ -8528,18 +10036,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-conventionalcommits/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-core": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz",
@@ -8566,67 +10062,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-core/node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/normalize-package-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "hosted-git-info": "^4.0.1",
- "is-core-module": "^2.5.0",
- "semver": "^7.3.4",
- "validate-npm-package-license": "^3.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
- "node_modules/conventional-changelog-core/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/conventional-changelog-ember": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz",
@@ -8640,18 +10075,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-ember/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-eslint": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz",
@@ -8665,18 +10088,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-eslint/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-express": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz",
@@ -8690,18 +10101,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-express/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-jquery": {
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz",
@@ -8715,18 +10114,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-jquery/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-jshint": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz",
@@ -8741,18 +10128,6 @@
"node": ">=10"
}
},
- "node_modules/conventional-changelog-jshint/node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/conventional-changelog-preset-loader": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz",
@@ -8834,11 +10209,15 @@
},
"node_modules/convert-source-map": {
"version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"dev": true,
"license": "MIT"
},
"node_modules/cookie": {
- "version": "0.6.0",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8847,6 +10226,8 @@
},
"node_modules/cookie-signature": {
"version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"dev": true,
"license": "MIT"
},
@@ -8854,10 +10235,13 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/copy-anything": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+ "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8868,19 +10252,21 @@
}
},
"node_modules/copy-webpack-plugin": {
- "version": "11.0.0",
+ "version": "12.0.2",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz",
+ "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "fast-glob": "^3.2.11",
+ "fast-glob": "^3.3.2",
"glob-parent": "^6.0.1",
- "globby": "^13.1.1",
+ "globby": "^14.0.0",
"normalize-path": "^3.0.0",
- "schema-utils": "^4.0.0",
- "serialize-javascript": "^6.0.0"
+ "schema-utils": "^4.2.0",
+ "serialize-javascript": "^6.0.2"
},
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
@@ -8892,6 +10278,8 @@
},
"node_modules/copy-webpack-plugin/node_modules/glob-parent": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -8901,12 +10289,61 @@
"node": ">=10.13.0"
}
},
+ "node_modules/copy-webpack-plugin/node_modules/globby": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz",
+ "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.2",
+ "ignore": "^5.2.4",
+ "path-type": "^5.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/path-type": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+ "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/core-js-compat": {
- "version": "3.36.1",
+ "version": "3.38.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
+ "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0"
+ "browserslist": "^4.23.3"
},
"funding": {
"type": "opencollective",
@@ -8915,10 +10352,15 @@
},
"node_modules/core-util-is": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/cors": {
"version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8930,14 +10372,16 @@
}
},
"node_modules/cosmiconfig": {
- "version": "8.3.6",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "env-paths": "^2.2.1",
"import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
+ "parse-json": "^5.2.0"
},
"engines": {
"node": ">=14"
@@ -8954,29 +10398,17 @@
}
}
},
- "node_modules/cosmiconfig/node_modules/argparse": {
- "version": "2.0.1",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/cosmiconfig/node_modules/js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/create-require": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true,
"license": "MIT"
},
"node_modules/critters": {
- "version": "0.0.20",
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz",
+ "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -8986,11 +10418,13 @@
"domhandler": "^5.0.2",
"htmlparser2": "^8.0.2",
"postcss": "^8.4.23",
- "pretty-bytes": "^5.3.0"
+ "postcss-media-query-parser": "^0.2.3"
}
},
"node_modules/critters/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9005,6 +10439,8 @@
},
"node_modules/critters/node_modules/chalk": {
"version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9020,6 +10456,8 @@
},
"node_modules/critters/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9029,8 +10467,17 @@
"node": ">=7.0.0"
}
},
+ "node_modules/critters/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/critters/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9039,6 +10486,8 @@
},
"node_modules/critters/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9060,6 +10509,9 @@
},
"node_modules/cross-spawn": {
"version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -9081,32 +10533,45 @@
}
},
"node_modules/css-loader": {
- "version": "6.8.1",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz",
+ "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==",
"dev": true,
"license": "MIT",
"dependencies": {
"icss-utils": "^5.1.0",
- "postcss": "^8.4.21",
- "postcss-modules-extract-imports": "^3.0.0",
- "postcss-modules-local-by-default": "^4.0.3",
- "postcss-modules-scope": "^3.0.0",
+ "postcss": "^8.4.33",
+ "postcss-modules-extract-imports": "^3.1.0",
+ "postcss-modules-local-by-default": "^4.0.5",
+ "postcss-modules-scope": "^3.2.0",
"postcss-modules-values": "^4.0.0",
"postcss-value-parser": "^4.2.0",
- "semver": "^7.3.8"
+ "semver": "^7.5.4"
},
"engines": {
- "node": ">= 12.13.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "^5.0.0"
+ "@rspack/core": "0.x || 1.x",
+ "webpack": "^5.27.0"
+ },
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
}
},
"node_modules/css-select": {
"version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -9122,6 +10587,8 @@
},
"node_modules/css-what": {
"version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -9133,6 +10600,8 @@
},
"node_modules/cssesc": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -9142,34 +10611,17 @@
"node": ">=4"
}
},
- "node_modules/cssom": {
- "version": "0.4.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssom": "~0.3.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "dev": true,
- "license": "MIT"
- },
"node_modules/custom-event": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==",
"dev": true,
"license": "MIT"
},
"node_modules/d3": {
"version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
+ "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
"license": "ISC",
"dependencies": {
"d3-array": "3",
@@ -9209,6 +10661,8 @@
},
"node_modules/d3-array": {
"version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
"license": "ISC",
"dependencies": {
"internmap": "1 - 2"
@@ -9219,6 +10673,8 @@
},
"node_modules/d3-axis": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9226,6 +10682,8 @@
},
"node_modules/d3-brush": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+ "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
"license": "ISC",
"dependencies": {
"d3-dispatch": "1 - 3",
@@ -9240,6 +10698,8 @@
},
"node_modules/d3-chord": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+ "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
"license": "ISC",
"dependencies": {
"d3-path": "1 - 3"
@@ -9250,6 +10710,8 @@
},
"node_modules/d3-color": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9257,6 +10719,8 @@
},
"node_modules/d3-contour": {
"version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+ "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
"license": "ISC",
"dependencies": {
"d3-array": "^3.2.0"
@@ -9267,6 +10731,8 @@
},
"node_modules/d3-delaunay": {
"version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+ "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
"license": "ISC",
"dependencies": {
"delaunator": "5"
@@ -9277,6 +10743,8 @@
},
"node_modules/d3-dispatch": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+ "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9284,6 +10752,8 @@
},
"node_modules/d3-drag": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+ "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
"license": "ISC",
"dependencies": {
"d3-dispatch": "1 - 3",
@@ -9295,6 +10765,8 @@
},
"node_modules/d3-dsv": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+ "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
"license": "ISC",
"dependencies": {
"commander": "7",
@@ -9316,8 +10788,19 @@
"node": ">=12"
}
},
+ "node_modules/d3-dsv/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/d3-ease": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=12"
@@ -9325,6 +10808,8 @@
},
"node_modules/d3-fetch": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+ "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
"license": "ISC",
"dependencies": {
"d3-dsv": "1 - 3"
@@ -9335,6 +10820,8 @@
},
"node_modules/d3-force": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+ "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
"license": "ISC",
"dependencies": {
"d3-dispatch": "1 - 3",
@@ -9347,13 +10834,17 @@
},
"node_modules/d3-format": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
"license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-geo": {
- "version": "3.1.0",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+ "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
"license": "ISC",
"dependencies": {
"d3-array": "2.5.0 - 3"
@@ -9364,6 +10855,8 @@
},
"node_modules/d3-hierarchy": {
"version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9371,6 +10864,8 @@
},
"node_modules/d3-interpolate": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
"license": "ISC",
"dependencies": {
"d3-color": "1 - 3"
@@ -9381,6 +10876,8 @@
},
"node_modules/d3-path": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9388,6 +10885,8 @@
},
"node_modules/d3-polygon": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+ "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9395,6 +10894,8 @@
},
"node_modules/d3-quadtree": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+ "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9402,6 +10903,8 @@
},
"node_modules/d3-random": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+ "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9409,6 +10912,8 @@
},
"node_modules/d3-scale": {
"version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
"license": "ISC",
"dependencies": {
"d3-array": "2.10.0 - 3",
@@ -9422,7 +10927,9 @@
}
},
"node_modules/d3-scale-chromatic": {
- "version": "3.0.0",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+ "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
"license": "ISC",
"dependencies": {
"d3-color": "1 - 3",
@@ -9434,6 +10941,8 @@
},
"node_modules/d3-selection": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9441,6 +10950,8 @@
},
"node_modules/d3-shape": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
"license": "ISC",
"dependencies": {
"d3-path": "^3.1.0"
@@ -9451,6 +10962,8 @@
},
"node_modules/d3-time": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
"license": "ISC",
"dependencies": {
"d3-array": "2 - 3"
@@ -9461,6 +10974,8 @@
},
"node_modules/d3-time-format": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
"license": "ISC",
"dependencies": {
"d3-time": "1 - 3"
@@ -9471,6 +10986,8 @@
},
"node_modules/d3-timer": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9478,6 +10995,8 @@
},
"node_modules/d3-transition": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+ "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
"license": "ISC",
"dependencies": {
"d3-color": "1 - 3",
@@ -9495,6 +11014,8 @@
},
"node_modules/d3-zoom": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+ "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
"license": "ISC",
"dependencies": {
"d3-dispatch": "1 - 3",
@@ -9519,6 +11040,8 @@
},
"node_modules/dashdash": {
"version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9532,26 +11055,16 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
"integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/data-urls": {
- "version": "2.0.0",
"dev": true,
"license": "MIT",
- "dependencies": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- },
"engines": {
- "node": ">=10"
+ "node": ">= 14"
}
},
"node_modules/data-view-buffer": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9568,6 +11081,8 @@
},
"node_modules/data-view-byte-length": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9584,6 +11099,8 @@
},
"node_modules/data-view-byte-offset": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9600,6 +11117,8 @@
},
"node_modules/date-fns": {
"version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.21.0"
@@ -9614,6 +11133,8 @@
},
"node_modules/date-format": {
"version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz",
+ "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9631,7 +11152,10 @@
}
},
"node_modules/debug": {
- "version": "4.3.4",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
@@ -9647,6 +11171,8 @@
},
"node_modules/decamelize": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9680,11 +11206,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/decimal.js": {
- "version": "10.4.3",
- "dev": true,
- "license": "MIT"
- },
"node_modules/decompress-response": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
@@ -9713,11 +11234,45 @@
},
"node_modules/deep-is": {
"version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true,
"license": "MIT"
},
+ "node_modules/default-browser": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
+ "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bundle-name": "^4.1.0",
+ "default-browser-id": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-browser-id": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
+ "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/default-gateway": {
"version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
+ "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -9727,8 +11282,64 @@
"node": ">= 10"
}
},
+ "node_modules/default-gateway/node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/default-gateway/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-gateway/node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/default-gateway/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/defaults": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
"license": "MIT",
"dependencies": {
"clone": "^1.0.2"
@@ -9739,6 +11350,9 @@
},
"node_modules/define-data-property": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
@@ -9753,15 +11367,22 @@
}
},
"node_modules/define-lazy-prop": {
- "version": "2.0.0",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/define-properties": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9780,89 +11401,45 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
"integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ast-types": "^0.13.4",
"escodegen": "^2.1.0",
- "esprima": "^4.0.1"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/del": {
- "version": "2.2.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/del/node_modules/array-union": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-uniq": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/del/node_modules/glob": {
- "version": "7.2.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/del/node_modules/globby": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "esprima": "^4.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 14"
}
},
- "node_modules/del/node_modules/pify": {
- "version": "2.3.0",
+ "node_modules/del": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
+ "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "globby": "^11.0.1",
+ "graceful-fs": "^4.2.4",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.2",
+ "p-map": "^4.0.0",
+ "rimraf": "^3.0.2",
+ "slash": "^3.0.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/del/node_modules/rimraf": {
- "version": "2.7.1",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -9870,29 +11447,34 @@
},
"bin": {
"rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/delaunator": {
- "version": "5.0.0",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz",
+ "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
"license": "ISC",
"dependencies": {
- "robust-predicates": "^3.0.0"
+ "robust-predicates": "^3.0.2"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
- "node_modules/delegates": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/depd": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9901,6 +11483,8 @@
},
"node_modules/dequal": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9909,6 +11493,8 @@
},
"node_modules/destroy": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9928,6 +11514,8 @@
},
"node_modules/detect-node": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
"dev": true,
"license": "MIT"
},
@@ -9935,6 +11523,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"asap": "^2.0.0",
@@ -9943,11 +11532,16 @@
},
"node_modules/di": {
"version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==",
"dev": true,
"license": "MIT"
},
"node_modules/diff": {
"version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
@@ -9955,6 +11549,8 @@
},
"node_modules/dir-glob": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9966,6 +11562,8 @@
},
"node_modules/dns-packet": {
"version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
+ "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9977,6 +11575,8 @@
},
"node_modules/doctrine": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -9988,6 +11588,8 @@
},
"node_modules/dom-serialize": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9999,6 +11601,8 @@
},
"node_modules/dom-serializer": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10012,6 +11616,8 @@
},
"node_modules/domelementtype": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"dev": true,
"funding": [
{
@@ -10021,27 +11627,10 @@
],
"license": "BSD-2-Clause"
},
- "node_modules/domexception": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "webidl-conversions": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/domhandler": {
"version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -10056,6 +11645,8 @@
},
"node_modules/domutils": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -10080,32 +11671,28 @@
"node": ">=8"
}
},
- "node_modules/dotenv": {
- "version": "10.0.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/duplexer": {
- "version": "0.1.2",
- "dev": true,
- "license": "MIT"
- },
"node_modules/duplexer2": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
"integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
+ "dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"readable-stream": "^2.0.2"
}
},
+ "node_modules/duplexer2/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/duplexer2/node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
@@ -10121,12 +11708,14 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
"license": "MIT"
},
"node_modules/duplexer2/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
@@ -10134,11 +11723,15 @@
},
"node_modules/eastasianwidth": {
"version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"dev": true,
"license": "MIT"
},
"node_modules/ecc-jsbn": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10146,27 +11739,24 @@
"safer-buffer": "^2.1.0"
}
},
- "node_modules/ee-first": {
- "version": "1.1.1",
+ "node_modules/ecc-jsbn/node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
"dev": true,
"license": "MIT"
},
- "node_modules/ejs": {
- "version": "3.1.10",
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "jake": "^10.8.5"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
+ "license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.4.728",
+ "version": "1.5.13",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
+ "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
"dev": true,
"license": "ISC"
},
@@ -10174,6 +11764,7 @@
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
"integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"sax": "1.1.4"
@@ -10182,18 +11773,17 @@
"node": ">= 0.4.0"
}
},
- "node_modules/elementtree/node_modules/sax": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
- "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==",
- "license": "ISC"
- },
"node_modules/emoji-regex": {
"version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
"license": "MIT"
},
"node_modules/emojis-list": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10202,6 +11792,8 @@
},
"node_modules/encodeurl": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10210,6 +11802,8 @@
},
"node_modules/encoding": {
"version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -10219,6 +11813,9 @@
},
"node_modules/end-of-stream": {
"version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"once": "^1.4.0"
@@ -10247,45 +11844,19 @@
}
},
"node_modules/engine.io-parser": {
- "version": "5.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/engine.io/node_modules/cookie": {
- "version": "0.4.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/engine.io/node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+ "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
}
},
"node_modules/enhanced-resolve": {
- "version": "5.15.0",
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10296,24 +11867,23 @@
"node": ">=10.13.0"
}
},
- "node_modules/enquirer": {
- "version": "2.3.6",
+ "node_modules/ent": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz",
+ "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-colors": "^4.1.1"
+ "punycode": "^1.4.1"
},
"engines": {
- "node": ">=8.6"
+ "node": ">= 0.4"
}
},
- "node_modules/ent": {
- "version": "2.2.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/entities": {
"version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"devOptional": true,
"license": "BSD-2-Clause",
"engines": {
@@ -10325,19 +11895,38 @@
},
"node_modules/env-paths": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/environment": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
+ "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/err-code": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
"dev": true,
"license": "MIT"
},
"node_modules/errno": {
"version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -10350,6 +11939,8 @@
},
"node_modules/error-ex": {
"version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10358,6 +11949,8 @@
},
"node_modules/es-abstract": {
"version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10417,6 +12010,9 @@
},
"node_modules/es-define-property": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.2.4"
@@ -10427,18 +12023,25 @@
},
"node_modules/es-errors": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-module-lexer": {
- "version": "1.5.0",
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
"dev": true,
"license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10450,6 +12053,8 @@
},
"node_modules/es-set-tostringtag": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10463,6 +12068,8 @@
},
"node_modules/es-shim-unscopables": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10471,6 +12078,8 @@
},
"node_modules/es-to-primitive": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10487,11 +12096,15 @@
},
"node_modules/es6-promise": {
"version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
"dev": true,
"license": "MIT"
},
"node_modules/es6-promisify": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10499,7 +12112,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.18.17",
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz",
+ "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -10507,46 +12122,52 @@
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"optionalDependencies": {
- "@esbuild/android-arm": "0.18.17",
- "@esbuild/android-arm64": "0.18.17",
- "@esbuild/android-x64": "0.18.17",
- "@esbuild/darwin-arm64": "0.18.17",
- "@esbuild/darwin-x64": "0.18.17",
- "@esbuild/freebsd-arm64": "0.18.17",
- "@esbuild/freebsd-x64": "0.18.17",
- "@esbuild/linux-arm": "0.18.17",
- "@esbuild/linux-arm64": "0.18.17",
- "@esbuild/linux-ia32": "0.18.17",
- "@esbuild/linux-loong64": "0.18.17",
- "@esbuild/linux-mips64el": "0.18.17",
- "@esbuild/linux-ppc64": "0.18.17",
- "@esbuild/linux-riscv64": "0.18.17",
- "@esbuild/linux-s390x": "0.18.17",
- "@esbuild/linux-x64": "0.18.17",
- "@esbuild/netbsd-x64": "0.18.17",
- "@esbuild/openbsd-x64": "0.18.17",
- "@esbuild/sunos-x64": "0.18.17",
- "@esbuild/win32-arm64": "0.18.17",
- "@esbuild/win32-ia32": "0.18.17",
- "@esbuild/win32-x64": "0.18.17"
+ "@esbuild/aix-ppc64": "0.23.0",
+ "@esbuild/android-arm": "0.23.0",
+ "@esbuild/android-arm64": "0.23.0",
+ "@esbuild/android-x64": "0.23.0",
+ "@esbuild/darwin-arm64": "0.23.0",
+ "@esbuild/darwin-x64": "0.23.0",
+ "@esbuild/freebsd-arm64": "0.23.0",
+ "@esbuild/freebsd-x64": "0.23.0",
+ "@esbuild/linux-arm": "0.23.0",
+ "@esbuild/linux-arm64": "0.23.0",
+ "@esbuild/linux-ia32": "0.23.0",
+ "@esbuild/linux-loong64": "0.23.0",
+ "@esbuild/linux-mips64el": "0.23.0",
+ "@esbuild/linux-ppc64": "0.23.0",
+ "@esbuild/linux-riscv64": "0.23.0",
+ "@esbuild/linux-s390x": "0.23.0",
+ "@esbuild/linux-x64": "0.23.0",
+ "@esbuild/netbsd-x64": "0.23.0",
+ "@esbuild/openbsd-arm64": "0.23.0",
+ "@esbuild/openbsd-x64": "0.23.0",
+ "@esbuild/sunos-x64": "0.23.0",
+ "@esbuild/win32-arm64": "0.23.0",
+ "@esbuild/win32-ia32": "0.23.0",
+ "@esbuild/win32-x64": "0.23.0"
}
},
"node_modules/esbuild-wasm": {
- "version": "0.18.17",
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz",
+ "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==",
"dev": true,
"license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/escalade": {
- "version": "3.1.1",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10555,11 +12176,16 @@
},
"node_modules/escape-html": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
"dev": true,
"license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
@@ -10567,6 +12193,9 @@
},
"node_modules/escodegen": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esprima": "^4.0.1",
@@ -10584,15 +12213,11 @@
"source-map": "~0.6.1"
}
},
- "node_modules/escodegen/node_modules/estraverse": {
- "version": "5.3.0",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/escodegen/node_modules/source-map": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
"license": "BSD-3-Clause",
"optional": true,
"engines": {
@@ -10601,6 +12226,8 @@
},
"node_modules/eslint": {
"version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10655,6 +12282,8 @@
},
"node_modules/eslint-import-resolver-node": {
"version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10665,6 +12294,8 @@
},
"node_modules/eslint-import-resolver-node/node_modules/debug": {
"version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10672,7 +12303,9 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.8.0",
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz",
+ "integrity": "sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10689,6 +12322,8 @@
},
"node_modules/eslint-module-utils/node_modules/debug": {
"version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10697,6 +12332,8 @@
},
"node_modules/eslint-plugin-import": {
"version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10725,8 +12362,21 @@
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
+ "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/eslint-plugin-import/node_modules/debug": {
"version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10735,6 +12385,8 @@
},
"node_modules/eslint-plugin-import/node_modules/doctrine": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -10744,8 +12396,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/eslint-plugin-import/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eslint-plugin-import/node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -10753,19 +12420,22 @@
}
},
"node_modules/eslint-plugin-jsdoc": {
- "version": "48.2.3",
+ "version": "48.10.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.10.0.tgz",
+ "integrity": "sha512-BEli0k8E0dzhJairAllwlkGnyYDZVKNn4WDmyKy+v6J5qGNuofjzxwNUi+55BOGmyO9mKBhqaidwGy+dxndn/Q==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@es-joy/jsdoccomment": "~0.42.0",
+ "@es-joy/jsdoccomment": "~0.46.0",
"are-docs-informative": "^0.0.2",
"comment-parser": "1.4.1",
- "debug": "^4.3.4",
+ "debug": "^4.3.5",
"escape-string-regexp": "^4.0.0",
- "esquery": "^1.5.0",
- "is-builtin-module": "^3.2.1",
- "semver": "^7.6.0",
- "spdx-expression-parse": "^4.0.0"
+ "esquery": "^1.6.0",
+ "parse-imports": "^2.1.1",
+ "semver": "^7.6.3",
+ "spdx-expression-parse": "^4.0.0",
+ "synckit": "^0.9.1"
},
"engines": {
"node": ">=18"
@@ -10776,6 +12446,8 @@
},
"node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10785,17 +12457,10 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
"node_modules/eslint-plugin-prefer-arrow": {
"version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz",
+ "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -10803,18 +12468,14 @@
}
},
"node_modules/eslint-plugin-unused-imports": {
- "version": "3.2.0",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.3.tgz",
+ "integrity": "sha512-lqrNZIZjFMUr7P06eoKtQLwyVRibvG7N+LtfKtObYGizAAGrcqLkc3tDx+iAik2z7q0j/XI3ihjupIqxhFabFA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "eslint-rule-composer": "^0.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
"peerDependencies": {
- "@typescript-eslint/eslint-plugin": "6 - 7",
- "eslint": "8"
+ "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0",
+ "eslint": "^9.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"@typescript-eslint/eslint-plugin": {
@@ -10822,32 +12483,31 @@
}
}
},
- "node_modules/eslint-rule-composer": {
- "version": "0.3.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/eslint-scope": {
- "version": "5.1.1",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
+ "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=8.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+ "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -10855,6 +12515,8 @@
},
"node_modules/eslint/node_modules/ajv": {
"version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10870,6 +12532,8 @@
},
"node_modules/eslint/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10882,13 +12546,21 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/eslint/node_modules/argparse": {
- "version": "2.0.1",
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
- "license": "Python-2.0"
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
},
"node_modules/eslint/node_modules/chalk": {
"version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10904,6 +12576,8 @@
},
"node_modules/eslint/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10913,8 +12587,17 @@
"node": ">=7.0.0"
}
},
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/eslint/node_modules/escape-string-regexp": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10926,6 +12609,8 @@
},
"node_modules/eslint/node_modules/eslint-scope": {
"version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -10939,31 +12624,41 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/estraverse": {
- "version": "5.3.0",
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "Apache-2.0",
"engines": {
- "node": ">=4.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/find-up": {
- "version": "5.0.0",
+ "node_modules/eslint/node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
- "license": "MIT",
+ "license": "BSD-2-Clause",
"dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
},
"engines": {
- "node": ">=10"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/glob-parent": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -10975,6 +12670,8 @@
},
"node_modules/eslint/node_modules/globals": {
"version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10989,72 +12686,38 @@
},
"node_modules/eslint/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/eslint/node_modules/js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/eslint/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
- "node_modules/eslint/node_modules/locate-path": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/p-limit": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/p-locate": {
- "version": "5.0.0",
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "p-limit": "^3.0.2"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "*"
}
},
"node_modules/eslint/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11066,6 +12729,8 @@
},
"node_modules/eslint/node_modules/type-fest": {
"version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
@@ -11076,16 +12741,18 @@
}
},
"node_modules/espree": {
- "version": "9.6.1",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+ "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.9.0",
+ "acorn": "^8.12.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
+ "eslint-visitor-keys": "^4.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -11093,6 +12760,9 @@
},
"node_modules/esprima": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
"license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
@@ -11103,7 +12773,9 @@
}
},
"node_modules/esquery": {
- "version": "1.5.0",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -11113,16 +12785,10 @@
"node": ">=0.10"
}
},
- "node_modules/esquery/node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/esrecurse": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -11132,16 +12798,10 @@
"node": ">=4.0"
}
},
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/estraverse": {
- "version": "4.3.0",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -11150,6 +12810,9 @@
},
"node_modules/esutils": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
@@ -11157,24 +12820,25 @@
},
"node_modules/etag": {
"version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/eventemitter-asyncresource": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/eventemitter3": {
"version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
"dev": true,
"license": "MIT"
},
"node_modules/events": {
"version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11182,18 +12846,20 @@
}
},
"node_modules/execa": {
- "version": "5.1.1",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
"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",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
"strip-final-newline": "^2.0.0"
},
"engines": {
@@ -11203,8 +12869,17 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
+ "node_modules/execa/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/exit": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
@@ -11222,11 +12897,15 @@
},
"node_modules/exponential-backoff": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
+ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/express": {
"version": "4.19.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
+ "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11266,26 +12945,74 @@
"node": ">= 0.10.0"
}
},
+ "node_modules/express/node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
+ "node_modules/express/node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true,
"license": "MIT"
},
+ "node_modules/express/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/extend": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true,
"license": "MIT"
},
"node_modules/external-editor": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"chardet": "^0.7.0",
@@ -11298,6 +13025,9 @@
},
"node_modules/external-editor/node_modules/iconv-lite": {
"version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
@@ -11306,8 +13036,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/external-editor/node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
"node_modules/extsprintf": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
"dev": true,
"engines": [
"node >=0.6.0"
@@ -11316,6 +13061,8 @@
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"license": "MIT"
},
"node_modules/fast-fifo": {
@@ -11327,6 +13074,8 @@
},
"node_modules/fast-glob": {
"version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11342,10 +13091,14 @@
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true,
"license": "MIT"
},
@@ -11353,10 +13106,20 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/fastq": {
- "version": "1.16.0",
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11365,6 +13128,8 @@
},
"node_modules/faye-websocket": {
"version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
+ "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -11386,6 +13151,9 @@
},
"node_modules/figures": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
@@ -11399,6 +13167,8 @@
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11410,35 +13180,10 @@
},
"node_modules/file-saver-es": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/file-saver-es/-/file-saver-es-2.0.5.tgz",
+ "integrity": "sha512-Kg0lt+is9nOyi/VDms9miScNGot25jVFbjFccXuCL/shd2Q+rt70MALxHVkXllsX83JEBLiHQNjDPGd/6FIOoQ==",
"license": "MIT"
},
- "node_modules/filelist": {
- "version": "1.0.4",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "minimatch": "^5.0.1"
- }
- },
- "node_modules/filelist/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/filelist/node_modules/minimatch": {
- "version": "5.1.6",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -11453,16 +13198,18 @@
}
},
"node_modules/finalhandler": {
- "version": "1.2.0",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "on-finished": "2.4.1",
+ "on-finished": "~2.3.0",
"parseurl": "~1.3.3",
- "statuses": "2.0.1",
+ "statuses": "~1.5.0",
"unpipe": "~1.0.0"
},
"engines": {
@@ -11471,6 +13218,8 @@
},
"node_modules/finalhandler/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11479,11 +13228,28 @@
},
"node_modules/finalhandler/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true,
"license": "MIT"
},
+ "node_modules/finalhandler/node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/find-cache-dir": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+ "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11498,19 +13264,26 @@
}
},
"node_modules/find-up": {
- "version": "4.1.0",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"license": "MIT",
"dependencies": {
- "locate-path": "^5.0.0",
+ "locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/flat": {
"version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true,
"license": "BSD-3-Clause",
"bin": {
@@ -11519,6 +13292,8 @@
},
"node_modules/flat-cache": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11530,13 +13305,34 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/flat-cache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/flatted": {
- "version": "3.2.9",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true,
"license": "ISC"
},
"node_modules/follow-redirects": {
"version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"dev": true,
"funding": [
{
@@ -11556,6 +13352,8 @@
},
"node_modules/for-each": {
"version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11563,7 +13361,9 @@
}
},
"node_modules/foreground-child": {
- "version": "3.1.1",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11577,19 +13377,10 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/forever-agent": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -11597,7 +13388,9 @@
}
},
"node_modules/form-data": {
- "version": "3.0.1",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11626,6 +13419,8 @@
},
"node_modules/forwarded": {
"version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11634,6 +13429,8 @@
},
"node_modules/fraction.js": {
"version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11646,6 +13443,8 @@
},
"node_modules/fresh": {
"version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11654,24 +13453,30 @@
},
"node_modules/fs-constants": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
"dev": true,
"license": "MIT"
},
"node_modules/fs-extra": {
- "version": "8.1.0",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
},
"engines": {
- "node": ">=6 <7 || >=8"
+ "node": ">=12"
}
},
"node_modules/fs-minipass": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
+ "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11681,25 +13486,33 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/fs-minipass/node_modules/minipass": {
- "version": "7.0.4",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/fs-monkey": {
- "version": "1.0.5",
- "dev": true,
- "license": "Unlicense"
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
"license": "ISC"
},
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -11707,6 +13520,8 @@
},
"node_modules/function.prototype.name": {
"version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11724,32 +13539,18 @@
},
"node_modules/functions-have-names": {
"version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/gauge": {
- "version": "4.0.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11758,14 +13559,32 @@
},
"node_modules/get-caller-file": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-east-asian-width": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
+ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/get-intrinsic": {
"version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -11781,14 +13600,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/get-pkg-repo": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz",
@@ -11808,6 +13619,22 @@
"node": ">=6.9.0"
}
},
+ "node_modules/get-pkg-repo/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
"node_modules/get-pkg-repo/node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -11820,31 +13647,32 @@
"wrap-ansi": "^7.0.0"
}
},
- "node_modules/get-pkg-repo/node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "node_modules/get-pkg-repo/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "lru-cache": "^6.0.0"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": ">=10"
+ "node": ">=7.0.0"
}
},
- "node_modules/get-pkg-repo/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "node_modules/get-pkg-repo/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
+ "license": "MIT"
+ },
+ "node_modules/get-pkg-repo/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/get-pkg-repo/node_modules/readable-stream": {
"version": "2.3.8",
@@ -11890,12 +13718,23 @@
"xtend": "~4.0.1"
}
},
- "node_modules/get-pkg-repo/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "node_modules/get-pkg-repo/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
- "license": "ISC"
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
},
"node_modules/get-pkg-repo/node_modules/yargs": {
"version": "16.2.0",
@@ -11916,22 +13755,17 @@
"node": ">=10"
}
},
- "node_modules/get-pkg-repo/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/get-stream": {
- "version": "6.0.1",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -11939,6 +13773,8 @@
},
"node_modules/get-symbol-description": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11957,6 +13793,7 @@
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz",
"integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"basic-ftp": "^5.0.2",
@@ -11972,6 +13809,7 @@
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
@@ -11982,29 +13820,10 @@
"node": ">=14.14"
}
},
- "node_modules/get-uri/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/get-uri/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/getpass": {
"version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12045,16 +13864,6 @@
"node": ">=4"
}
},
- "node_modules/git-remote-origin-url/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/git-semver-tags": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz",
@@ -12107,21 +13916,22 @@
"license": "MIT"
},
"node_modules/glob": {
- "version": "10.3.12",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"license": "ISC",
"dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.3.6",
- "minimatch": "^9.0.1",
- "minipass": "^7.0.4",
- "path-scurry": "^1.10.2"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -12129,6 +13939,8 @@
},
"node_modules/glob-parent": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"devOptional": true,
"license": "ISC",
"dependencies": {
@@ -12140,41 +13952,39 @@
},
"node_modules/glob-to-regexp": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true,
"license": "BSD-2-Clause"
},
"node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.1",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/glob/node_modules/minimatch": {
- "version": "9.0.4",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
+ "brace-expansion": "^1.1.7"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob/node_modules/minipass": {
- "version": "7.0.4",
- "dev": true,
- "license": "ISC",
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "*"
}
},
"node_modules/globals": {
"version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12182,11 +13992,14 @@
}
},
"node_modules/globalthis": {
- "version": "1.0.3",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "define-properties": "^1.1.3"
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -12196,18 +14009,21 @@
}
},
"node_modules/globby": {
- "version": "13.2.2",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "array-union": "^2.1.0",
"dir-glob": "^3.0.1",
- "fast-glob": "^3.3.0",
- "ignore": "^5.2.4",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
"merge2": "^1.4.1",
- "slash": "^4.0.0"
+ "slash": "^3.0.0"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -12215,6 +14031,9 @@
},
"node_modules/gopd": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3"
@@ -12225,6 +14044,9 @@
},
"node_modules/graceful-fs": {
"version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
"license": "ISC"
},
"node_modules/gradle-to-js": {
@@ -12242,22 +14064,15 @@
},
"node_modules/graphemer": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true,
"license": "MIT"
},
- "node_modules/guess-parser": {
- "version": "0.4.22",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@wessberg/ts-evaluator": "0.0.27"
- },
- "peerDependencies": {
- "typescript": ">=3.7.5"
- }
- },
"node_modules/hammerjs": {
"version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
+ "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==",
"license": "MIT",
"engines": {
"node": ">=0.8.0"
@@ -12265,6 +14080,8 @@
},
"node_modules/handle-thing": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
"dev": true,
"license": "MIT"
},
@@ -12302,6 +14119,8 @@
},
"node_modules/har-schema": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
"dev": true,
"license": "ISC",
"engines": {
@@ -12310,6 +14129,9 @@
},
"node_modules/har-validator": {
"version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12322,6 +14144,8 @@
},
"node_modules/har-validator/node_modules/ajv": {
"version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12337,6 +14161,8 @@
},
"node_modules/har-validator/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
@@ -12352,6 +14178,8 @@
},
"node_modules/has-ansi": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12363,6 +14191,8 @@
},
"node_modules/has-ansi/node_modules/ansi-regex": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12371,6 +14201,8 @@
},
"node_modules/has-bigints": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true,
"license": "MIT",
"funding": {
@@ -12379,6 +14211,8 @@
},
"node_modules/has-flag": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12387,6 +14221,9 @@
},
"node_modules/has-property-descriptors": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0"
@@ -12397,6 +14234,9 @@
},
"node_modules/has-proto": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -12407,6 +14247,9 @@
},
"node_modules/has-symbols": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -12417,6 +14260,8 @@
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12429,13 +14274,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-unicode": {
- "version": "2.0.1",
- "dev": true,
- "license": "ISC"
- },
"node_modules/hasown": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -12444,21 +14287,6 @@
"node": ">= 0.4"
}
},
- "node_modules/hdr-histogram-js": {
- "version": "2.0.3",
- "dev": true,
- "license": "BSD",
- "dependencies": {
- "@assemblyscript/loader": "^0.10.1",
- "base64-js": "^1.2.0",
- "pako": "^1.0.3"
- }
- },
- "node_modules/hdr-histogram-percentiles-obj": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -12473,32 +14301,49 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/hosted-git-info": {
- "version": "6.1.1",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"license": "ISC",
"dependencies": {
- "lru-cache": "^7.5.1"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=10"
}
},
- "node_modules/hosted-git-info/node_modules/lru-cache": {
- "version": "7.18.3",
+ "node_modules/hosted-git-info/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
+ "license": "ISC"
},
"node_modules/hpack.js": {
"version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12508,8 +14353,17 @@
"wbuf": "^1.1.0"
}
},
+ "node_modules/hpack.js/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/hpack.js/node_modules/readable-stream": {
"version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12524,30 +14378,25 @@
},
"node_modules/hpack.js/node_modules/safe-buffer": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT"
},
"node_modules/hpack.js/node_modules/string_decoder": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
- "node_modules/html-encoding-sniffer": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "whatwg-encoding": "^1.0.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/html-entities": {
"version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
+ "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
"dev": true,
"funding": [
{
@@ -12563,11 +14412,15 @@
},
"node_modules/html-escaper": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true,
"license": "MIT"
},
"node_modules/htmlparser2": {
"version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
"dev": true,
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
@@ -12586,16 +14439,22 @@
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
"dev": true,
"license": "BSD-2-Clause"
},
"node_modules/http-deceiver": {
"version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
"dev": true,
"license": "MIT"
},
"node_modules/http-errors": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12609,13 +14468,27 @@
"node": ">= 0.8"
}
},
+ "node_modules/http-errors/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/http-parser-js": {
"version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
+ "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
"dev": true,
"license": "MIT"
},
"node_modules/http-proxy": {
"version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12628,43 +14501,41 @@
}
},
"node_modules/http-proxy-agent": {
- "version": "4.0.1",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.6",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz",
+ "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/http-proxy": "^1.17.8",
+ "@types/http-proxy": "^1.17.10",
+ "debug": "^4.3.4",
"http-proxy": "^1.18.1",
"is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0",
- "micromatch": "^4.0.2"
+ "micromatch": "^4.0.5"
},
"engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "@types/express": "^4.17.13"
- },
- "peerDependenciesMeta": {
- "@types/express": {
- "optional": true
- }
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/http-signature": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12678,35 +14549,43 @@
}
},
"node_modules/https-proxy-agent": {
- "version": "5.0.1",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "agent-base": "6",
+ "agent-base": "^7.0.2",
"debug": "4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/human-signals": {
- "version": "2.1.0",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": ">=10.17.0"
+ "node": ">=8.12.0"
}
},
- "node_modules/humanize-ms": {
- "version": "1.2.1",
+ "node_modules/hyperdyperid": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
+ "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "ms": "^2.0.0"
+ "engines": {
+ "node": ">=10.18"
}
},
"node_modules/iconv-lite": {
"version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -12717,6 +14596,8 @@
},
"node_modules/icss-utils": {
"version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true,
"license": "ISC",
"engines": {
@@ -12728,6 +14609,8 @@
},
"node_modules/ieee754": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"funding": [
{
"type": "github",
@@ -12745,7 +14628,9 @@
"license": "BSD-3-Clause"
},
"node_modules/ignore": {
- "version": "5.3.0",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12760,7 +14645,9 @@
"license": "ISC"
},
"node_modules/ignore-walk": {
- "version": "6.0.4",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz",
+ "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -12770,30 +14657,10 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/ignore-walk/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/ignore-walk/node_modules/minimatch": {
- "version": "9.0.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/image-size": {
"version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -12806,16 +14673,22 @@
},
"node_modules/immediate": {
"version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"dev": true,
"license": "MIT"
},
"node_modules/immutable": {
- "version": "4.3.5",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
"dev": true,
"license": "MIT"
},
"node_modules/import-fresh": {
"version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12829,16 +14702,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-fresh/node_modules/resolve-from": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/imurmurhash": {
"version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
@@ -12846,19 +14714,20 @@
},
"node_modules/indent-string": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/infer-owner": {
- "version": "1.0.4",
- "dev": true,
- "license": "ISC"
- },
"node_modules/inflight": {
"version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
@@ -12867,10 +14736,14 @@
},
"node_modules/inherits": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/ini": {
- "version": "4.1.1",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+ "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
"dev": true,
"license": "ISC",
"engines": {
@@ -12878,32 +14751,34 @@
}
},
"node_modules/inquirer": {
- "version": "8.2.4",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-escapes": "^4.2.1",
- "chalk": "^4.1.1",
+ "chalk": "^4.1.0",
"cli-cursor": "^3.1.0",
"cli-width": "^3.0.0",
"external-editor": "^3.0.3",
"figures": "^3.0.0",
- "lodash": "^4.17.21",
+ "lodash": "^4.17.19",
"mute-stream": "0.0.8",
- "ora": "^5.4.1",
"run-async": "^2.4.0",
- "rxjs": "^7.5.5",
+ "rxjs": "^6.6.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0",
- "through": "^2.3.6",
- "wrap-ansi": "^7.0.0"
+ "through": "^2.3.6"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=8.0.0"
}
},
"node_modules/inquirer/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12918,6 +14793,8 @@
},
"node_modules/inquirer/node_modules/chalk": {
"version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12931,8 +14808,20 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/inquirer/node_modules/cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/inquirer/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12942,24 +14831,34 @@
"node": ">=7.0.0"
}
},
+ "node_modules/inquirer/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/inquirer/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/inquirer/node_modules/rxjs": {
- "version": "7.8.1",
+ "node_modules/inquirer/node_modules/mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
+ "license": "ISC"
},
"node_modules/inquirer/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12971,6 +14870,8 @@
},
"node_modules/internal-slot": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12984,6 +14885,8 @@
},
"node_modules/internmap": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -12991,6 +14894,8 @@
},
"node_modules/ionicons": {
"version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-6.1.3.tgz",
+ "integrity": "sha512-ptzz38dd/Yq+PgjhXegh7yhb/SLIk1bvL9vQDtLv1aoSc7alO6mX2DIMgcKYzt9vrNWkRu1f9Jr78zIFFyOXqw==",
"license": "MIT",
"dependencies": {
"@stencil/core": "^2.18.0"
@@ -12998,6 +14903,9 @@
},
"node_modules/ip-address": {
"version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"jsbn": "1.1.0",
@@ -13007,16 +14915,10 @@
"node": ">= 12"
}
},
- "node_modules/ip-address/node_modules/jsbn": {
- "version": "1.1.0",
- "license": "MIT"
- },
- "node_modules/ip-address/node_modules/sprintf-js": {
- "version": "1.1.3",
- "license": "BSD-3-Clause"
- },
"node_modules/ipaddr.js": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
+ "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13025,6 +14927,8 @@
},
"node_modules/is-array-buffer": {
"version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13040,11 +14944,15 @@
},
"node_modules/is-arrayish": {
"version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true,
"license": "MIT"
},
"node_modules/is-bigint": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13056,6 +14964,8 @@
},
"node_modules/is-binary-path": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -13067,6 +14977,8 @@
},
"node_modules/is-boolean-object": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13080,22 +14992,10 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-builtin-module": {
- "version": "3.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "builtin-modules": "^3.3.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-callable": {
"version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13106,11 +15006,16 @@
}
},
"node_modules/is-core-module": {
- "version": "2.13.1",
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+ "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hasown": "^2.0.0"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -13118,6 +15023,8 @@
},
"node_modules/is-data-view": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13132,6 +15039,8 @@
},
"node_modules/is-date-object": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13145,13 +15054,16 @@
}
},
"node_modules/is-docker": {
- "version": "2.2.1",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "dev": true,
"license": "MIT",
"bin": {
"is-docker": "cli.js"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -13159,6 +15071,8 @@
},
"node_modules/is-extglob": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"devOptional": true,
"license": "MIT",
"engines": {
@@ -13167,6 +15081,9 @@
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -13174,6 +15091,8 @@
},
"node_modules/is-glob": {
"version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -13183,8 +15102,29 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-interactive": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -13192,11 +15132,15 @@
},
"node_modules/is-lambda": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
"dev": true,
"license": "MIT"
},
"node_modules/is-negative-zero": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13206,6 +15150,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-network-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz",
+ "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -13218,6 +15175,8 @@
},
"node_modules/is-number-object": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13241,15 +15200,19 @@
}
},
"node_modules/is-path-cwd": {
- "version": "1.0.0",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=6"
}
},
"node_modules/is-path-in-cwd": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13261,6 +15224,8 @@
},
"node_modules/is-path-in-cwd/node_modules/is-path-inside": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13272,6 +15237,8 @@
},
"node_modules/is-path-inside": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13280,6 +15247,8 @@
},
"node_modules/is-plain-obj": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13291,6 +15260,8 @@
},
"node_modules/is-plain-object": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13300,13 +15271,10 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT"
- },
"node_modules/is-regex": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13322,6 +15290,8 @@
},
"node_modules/is-shared-array-buffer": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13336,6 +15306,9 @@
},
"node_modules/is-stream": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -13346,6 +15319,8 @@
},
"node_modules/is-string": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13360,6 +15335,8 @@
},
"node_modules/is-symbol": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13387,6 +15364,8 @@
},
"node_modules/is-typed-array": {
"version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13401,10 +15380,15 @@
},
"node_modules/is-typedarray": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/is-unicode-supported": {
"version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -13415,6 +15399,8 @@
},
"node_modules/is-weakref": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13426,25 +15412,38 @@
},
"node_modules/is-what": {
"version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
+ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
"dev": true,
"license": "MIT"
},
"node_modules/is-wsl": {
- "version": "2.2.0",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "is-docker": "^2.0.0"
+ "is-inside-container": "^1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/isarray": {
- "version": "1.0.0",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/isbinaryfile": {
"version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
+ "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13456,10 +15455,15 @@
},
"node_modules/isexe": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
"license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13468,11 +15472,15 @@
},
"node_modules/isstream": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
"dev": true,
"license": "MIT"
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -13480,30 +15488,26 @@
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/istanbul-lib-report": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -13517,28 +15521,18 @@
},
"node_modules/istanbul-lib-report/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/istanbul-lib-report/node_modules/make-dir": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/istanbul-lib-report/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13550,6 +15544,8 @@
},
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -13563,6 +15559,8 @@
},
"node_modules/istanbul-lib-source-maps/node_modules/source-map": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -13570,7 +15568,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.6",
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -13582,15 +15582,14 @@
}
},
"node_modules/jackspeak": {
- "version": "2.3.6",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
@@ -13598,84 +15597,10 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/jake": {
- "version": "10.8.7",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
- "filelist": "^1.0.4",
- "minimatch": "^3.1.2"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jake/node_modules/ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jake/node_modules/chalk": {
- "version": "4.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jake/node_modules/color-convert": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jake/node_modules/has-flag": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jake/node_modules/supports-color": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/jasmine": {
"version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz",
+ "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13689,43 +15614,32 @@
},
"node_modules/jasmine-core": {
"version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz",
+ "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==",
"dev": true,
"license": "MIT"
},
"node_modules/jasmine-spec-reporter": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz",
+ "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"colors": "1.4.0"
}
},
- "node_modules/jasmine/node_modules/glob": {
- "version": "7.2.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/jasmine/node_modules/jasmine-core": {
"version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz",
+ "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==",
"dev": true,
"license": "MIT"
},
"node_modules/jasminewd2": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz",
+ "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13734,6 +15648,8 @@
},
"node_modules/jest-worker": {
"version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13747,6 +15663,8 @@
},
"node_modules/jest-worker/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13755,6 +15673,8 @@
},
"node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13768,7 +15688,9 @@
}
},
"node_modules/jiti": {
- "version": "1.21.0",
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
"dev": true,
"license": "MIT",
"bin": {
@@ -13777,81 +15699,45 @@
},
"node_modules/js-tokens": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true,
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "3.14.1",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/jsbn": {
- "version": "0.1.1",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
"dev": true,
"license": "MIT"
},
"node_modules/jsdoc-type-pratt-parser": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+ "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.0.0"
}
},
- "node_modules/jsdom": {
- "version": "16.7.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
"node_modules/jsesc": {
"version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true,
"license": "MIT",
"bin": {
@@ -13863,6 +15749,8 @@
},
"node_modules/json-buffer": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
"license": "MIT"
},
@@ -13874,31 +15762,46 @@
"license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+ "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
},
"node_modules/json-schema": {
"version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
"dev": true,
"license": "(AFL-2.1 OR BSD-3-Clause)"
},
"node_modules/json-schema-traverse": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true,
"license": "MIT"
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
"dev": true,
"license": "ISC"
},
"node_modules/json5": {
"version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -13909,19 +15812,28 @@
}
},
"node_modules/jsonc-parser": {
- "version": "3.2.1",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
"license": "MIT"
},
"node_modules/jsonfile": {
- "version": "4.0.0",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/jsonparse": {
"version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
"dev": true,
"engines": [
"node >= 0.2.0"
@@ -13947,6 +15859,8 @@
},
"node_modules/jsprim": {
"version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13961,6 +15875,8 @@
},
"node_modules/jszip": {
"version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"dev": true,
"license": "(MIT OR GPL-3.0-or-later)",
"dependencies": {
@@ -13970,8 +15886,17 @@
"setimmediate": "^1.0.5"
}
},
+ "node_modules/jszip/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/jszip/node_modules/readable-stream": {
"version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13986,11 +15911,15 @@
},
"node_modules/jszip/node_modules/safe-buffer": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT"
},
"node_modules/jszip/node_modules/string_decoder": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13998,7 +15927,9 @@
}
},
"node_modules/karma": {
- "version": "6.4.2",
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz",
+ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14021,7 +15952,7 @@
"qjobs": "^1.2.0",
"range-parser": "^1.2.1",
"rimraf": "^3.0.2",
- "socket.io": "^4.4.1",
+ "socket.io": "^4.7.2",
"source-map": "^0.6.1",
"tmp": "^0.2.1",
"ua-parser-js": "^0.7.30",
@@ -14036,6 +15967,8 @@
},
"node_modules/karma-chrome-launcher": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz",
+ "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14044,6 +15977,8 @@
},
"node_modules/karma-chrome-launcher/node_modules/which": {
"version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -14055,6 +15990,8 @@
},
"node_modules/karma-coverage": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz",
+ "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14071,6 +16008,8 @@
},
"node_modules/karma-coverage-istanbul-reporter": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz",
+ "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14084,27 +16023,21 @@
"url": "https://github.com/sponsors/mattlewis92"
}
},
- "node_modules/karma-coverage-istanbul-reporter/node_modules/glob": {
- "version": "7.2.3",
+ "node_modules/karma-coverage-istanbul-reporter/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps": {
"version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
+ "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -14120,33 +16053,140 @@
},
"node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
+ "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=6"
}
},
- "node_modules/karma-coverage-istanbul-reporter/node_modules/rimraf": {
- "version": "2.7.1",
+ "node_modules/karma-coverage-istanbul-reporter/node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/karma-coverage-istanbul-reporter/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/karma-coverage-istanbul-reporter/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/karma-coverage-istanbul-reporter/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/karma-coverage-istanbul-reporter/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/karma-coverage-istanbul-reporter/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/karma-coverage/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/karma-coverage/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"license": "ISC",
"dependencies": {
- "glob": "^7.1.3"
+ "brace-expansion": "^1.1.7"
},
- "bin": {
- "rimraf": "bin.js"
+ "engines": {
+ "node": "*"
}
},
- "node_modules/karma-coverage-istanbul-reporter/node_modules/source-map": {
- "version": "0.6.1",
+ "node_modules/karma-coverage/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/karma-jasmine": {
"version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz",
+ "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14161,6 +16201,8 @@
},
"node_modules/karma-jasmine-html-reporter": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz",
+ "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -14171,14 +16213,45 @@
},
"node_modules/karma-source-map-support": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz",
+ "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==",
"dev": true,
"license": "MIT",
"dependencies": {
"source-map-support": "^0.5.5"
}
},
+ "node_modules/karma/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/karma/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"node_modules/karma/node_modules/cliui": {
"version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -14187,68 +16260,88 @@
"wrap-ansi": "^7.0.0"
}
},
- "node_modules/karma/node_modules/glob": {
- "version": "7.2.3",
+ "node_modules/karma/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=7.0.0"
}
},
- "node_modules/karma/node_modules/mime": {
- "version": "2.6.0",
+ "node_modules/karma/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
+ "license": "MIT"
+ },
+ "node_modules/karma/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">=4.0.0"
+ "node": "*"
}
},
- "node_modules/karma/node_modules/mkdirp": {
- "version": "0.5.6",
+ "node_modules/karma/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "minimist": "^1.2.6"
+ "glob": "^7.1.3"
},
"bin": {
- "mkdirp": "bin/cmd.js"
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/karma/node_modules/source-map": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/karma/node_modules/tmp": {
- "version": "0.2.1",
+ "node_modules/karma/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "rimraf": "^3.0.0"
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=8.17.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/karma/node_modules/yargs": {
"version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14264,16 +16357,10 @@
"node": ">=10"
}
},
- "node_modules/karma/node_modules/yargs-parser": {
- "version": "20.2.9",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/keyv": {
"version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14282,6 +16369,8 @@
},
"node_modules/kind-of": {
"version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -14298,16 +16387,10 @@
"node": ">=6"
}
},
- "node_modules/klona": {
- "version": "2.0.6",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/launch-editor": {
- "version": "2.6.1",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
+ "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14319,6 +16402,7 @@
"version": "0.0.24",
"resolved": "https://registry.npmjs.org/leek/-/leek-0.0.24.tgz",
"integrity": "sha512-6PVFIYXxlYF0o6hrAsHtGpTmi06otkwNrMcmQ0K96SeSRHPREPa9J3nJZ1frliVH7XT0XFswoJFQoXsDukzGNQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"debug": "^2.1.0",
@@ -14330,6 +16414,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
@@ -14339,13 +16424,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true,
"license": "MIT"
},
"node_modules/less": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
+ "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"copy-anything": "^2.0.1",
"parse-node-version": "^1.0.1",
@@ -14368,36 +16455,98 @@
}
},
"node_modules/less-loader": {
- "version": "11.1.0",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz",
+ "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "klona": "^2.0.4"
- },
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
+ "@rspack/core": "0.x || 1.x",
"less": "^3.5.0 || ^4.0.0",
"webpack": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/less/node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/less/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/less/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/less/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver"
}
},
"node_modules/less/node_modules/source-map": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"optional": true,
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/levn": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14410,6 +16559,8 @@
},
"node_modules/license-webpack-plugin": {
"version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz",
+ "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -14424,16 +16575,163 @@
}
}
},
- "node_modules/lie": {
- "version": "3.3.0",
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/listr2": {
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz",
+ "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cli-truncate": "^4.0.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^6.0.0",
+ "rfdc": "^1.4.1",
+ "wrap-ansi": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/listr2/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/listr2/node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/listr2/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/listr2/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/wrap-ansi": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/lmdb": {
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz",
+ "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "immediate": "~3.0.5"
+ "msgpackr": "^1.10.2",
+ "node-addon-api": "^6.1.0",
+ "node-gyp-build-optional-packages": "5.2.2",
+ "ordered-binary": "^1.4.1",
+ "weak-lru-cache": "^1.2.2"
+ },
+ "bin": {
+ "download-lmdb-prebuilds": "bin/download-prebuilds.js"
+ },
+ "optionalDependencies": {
+ "@lmdb/lmdb-darwin-arm64": "3.0.13",
+ "@lmdb/lmdb-darwin-x64": "3.0.13",
+ "@lmdb/lmdb-linux-arm": "3.0.13",
+ "@lmdb/lmdb-linux-arm64": "3.0.13",
+ "@lmdb/lmdb-linux-x64": "3.0.13",
+ "@lmdb/lmdb-win32-x64": "3.0.13"
}
},
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
+ "node_modules/lmdb/node_modules/node-addon-api": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
+ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
"dev": true,
"license": "MIT"
},
@@ -14479,6 +16777,8 @@
},
"node_modules/loader-runner": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -14486,7 +16786,9 @@
}
},
"node_modules/loader-utils": {
- "version": "3.2.1",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz",
+ "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -14494,28 +16796,39 @@
}
},
"node_modules/locate-path": {
- "version": "5.0.0",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash": {
"version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/lodash-es": {
"version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
"license": "MIT"
},
"node_modules/lodash._baseassign": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
"integrity": "sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"lodash._basecopy": "^3.0.0",
@@ -14526,18 +16839,21 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
"integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/lodash._bindcallback": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
"integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/lodash._createassigner": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
"integrity": "sha512-LziVL7IDnJjQeeV95Wvhw6G28Z8Q6da87LWKOPWmzBLv4u6FAT/x5v00pyGW0u38UoogNF2JnD3bGgZZDaNEBw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"lodash._bindcallback": "^3.0.0",
@@ -14549,2031 +16865,1939 @@
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
"integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/lodash._isiterateecall": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
"integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==",
- "license": "MIT"
- },
- "node_modules/lodash.assign": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
- "integrity": "sha512-/VVxzgGBmbphasTg51FrztxQJ/VgAUpol6zmJuSVSGcNg4g7FA4z7rQV8Ovr9V3vFBNWZhvKWHfpAytjTVUfFA==",
- "license": "MIT",
- "dependencies": {
- "lodash._baseassign": "^3.0.0",
- "lodash._createassigner": "^3.0.0",
- "lodash.keys": "^3.0.0"
- }
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==",
- "license": "MIT"
- },
- "node_modules/lodash.isarray": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==",
- "license": "MIT"
- },
- "node_modules/lodash.ismatch": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
- "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.keys": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
- "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==",
- "license": "MIT",
- "dependencies": {
- "lodash._getnative": "^3.0.0",
- "lodash.isarguments": "^3.0.0",
- "lodash.isarray": "^3.0.0"
- }
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
"dev": true,
"license": "MIT"
},
- "node_modules/lodash.restparam": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
- "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==",
- "license": "MIT"
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "4.3.0",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "4.1.2",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "2.0.1",
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "4.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "7.2.0",
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log4js": {
- "version": "6.9.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "flatted": "^3.2.7",
- "rfdc": "^1.3.0",
- "streamroller": "^3.1.5"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/macos-release": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
- "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/magic-string": {
- "version": "0.30.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/make-dir": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "5.7.2",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/make-error": {
- "version": "1.3.6",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/make-fetch-happen": {
- "version": "10.2.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^16.1.0",
- "http-cache-semantics": "^4.1.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^3.1.6",
- "minipass-collect": "^1.0.2",
- "minipass-fetch": "^2.0.3",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^9.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/make-fetch-happen/node_modules/@npmcli/fs": {
- "version": "2.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@gar/promisify": "^1.1.3",
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/make-fetch-happen/node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/make-fetch-happen/node_modules/brace-expansion": {
- "version": "2.0.1",
+ "node_modules/lodash.assign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
+ "integrity": "sha512-/VVxzgGBmbphasTg51FrztxQJ/VgAUpol6zmJuSVSGcNg4g7FA4z7rQV8Ovr9V3vFBNWZhvKWHfpAytjTVUfFA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "lodash._baseassign": "^3.0.0",
+ "lodash._createassigner": "^3.0.0",
+ "lodash.keys": "^3.0.0"
}
},
- "node_modules/make-fetch-happen/node_modules/cacache": {
- "version": "16.1.3",
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/fs": "^2.1.0",
- "@npmcli/move-file": "^2.0.0",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.1.0",
- "glob": "^8.0.1",
- "infer-owner": "^1.0.4",
- "lru-cache": "^7.7.1",
- "minipass": "^3.1.6",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "mkdirp": "^1.0.4",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^9.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
+ "license": "MIT"
},
- "node_modules/make-fetch-happen/node_modules/fs-minipass": {
- "version": "2.1.0",
+ "node_modules/lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
+ "license": "MIT"
},
- "node_modules/make-fetch-happen/node_modules/glob": {
- "version": "8.1.0",
+ "node_modules/lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
+ "license": "MIT"
},
- "node_modules/make-fetch-happen/node_modules/http-proxy-agent": {
- "version": "5.0.0",
+ "node_modules/lodash.ismatch": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
+ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
}
},
- "node_modules/make-fetch-happen/node_modules/lru-cache": {
- "version": "7.18.3",
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
+ "license": "MIT"
},
- "node_modules/make-fetch-happen/node_modules/minimatch": {
- "version": "5.1.6",
+ "node_modules/lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==",
"dev": true,
- "license": "ISC",
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "license": "MIT",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/make-fetch-happen/node_modules/minipass": {
- "version": "3.3.6",
- "dev": true,
- "license": "ISC",
+ "node_modules/log-symbols/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/make-fetch-happen/node_modules/ssri": {
- "version": "9.0.1",
- "dev": true,
- "license": "ISC",
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
"dependencies": {
- "minipass": "^3.1.1"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/make-fetch-happen/node_modules/unique-filename": {
+ "node_modules/log-symbols/node_modules/color-convert": {
"version": "2.0.1",
- "dev": true,
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
"dependencies": {
- "unique-slug": "^3.0.0"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "node": ">=7.0.0"
}
},
- "node_modules/make-fetch-happen/node_modules/unique-slug": {
- "version": "3.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
+ "node_modules/log-symbols/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
},
- "node_modules/make-fetch-happen/node_modules/yallist": {
+ "node_modules/log-symbols/node_modules/has-flag": {
"version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/map-obj": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"license": "MIT",
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/media-typer": {
- "version": "0.3.0",
- "dev": true,
+ "node_modules/log-symbols/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": ">=8"
}
},
- "node_modules/memfs": {
- "version": "3.5.3",
+ "node_modules/log-update": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
+ "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
"dev": true,
- "license": "Unlicense",
+ "license": "MIT",
"dependencies": {
- "fs-monkey": "^1.0.4"
+ "ansi-escapes": "^7.0.0",
+ "cli-cursor": "^5.0.0",
+ "slice-ansi": "^7.1.0",
+ "strip-ansi": "^7.1.0",
+ "wrap-ansi": "^9.0.0"
},
"engines": {
- "node": ">= 4.0.0"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
- "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
+ "node_modules/log-update/node_modules/ansi-escapes": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
+ "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.2.2",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.18.0",
- "yargs-parser": "^20.2.3"
+ "environment": "^1.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow/node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "node_modules/log-update/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
- "node_modules/meow/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "node_modules/log-update/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/meow/node_modules/normalize-package-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "node_modules/log-update/node_modules/cli-cursor": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
"dependencies": {
- "hosted-git-info": "^4.0.1",
- "is-core-module": "^2.5.0",
- "semver": "^7.3.4",
- "validate-npm-package-license": "^3.0.1"
+ "restore-cursor": "^5.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow/node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "node_modules/log-update/node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-update/node_modules/is-fullwidth-code-point": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
+ "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
+ "get-east-asian-width": "^1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow/node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "node_modules/log-update/node_modules/onetime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
+ "mimic-function": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "node_modules/log-update/node_modules/restore-cursor": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
"dev": true,
- "license": "(MIT OR CC0-1.0)",
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^7.0.0",
+ "signal-exit": "^4.1.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
+ "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
"dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/meow/node_modules/read-pkg/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
+ "ansi-styles": "^6.2.1",
+ "is-fullwidth-code-point": "^5.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
- "node_modules/meow/node_modules/type-fest": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "node_modules/log-update/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"dev": true,
- "license": "(MIT OR CC0-1.0)",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/meow/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "node_modules/log-update/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+ "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
},
- "node_modules/merge2": {
- "version": "1.4.1",
+ "node_modules/log4js": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
+ "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "date-format": "^4.0.14",
+ "debug": "^4.3.4",
+ "flatted": "^3.2.7",
+ "rfdc": "^1.3.0",
+ "streamroller": "^3.1.5"
+ },
"engines": {
- "node": ">= 8"
+ "node": ">=8.0"
}
},
- "node_modules/mergexml": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/mergexml/-/mergexml-1.2.4.tgz",
- "integrity": "sha512-yiOlDqcVCz7AG1eSboonc18FTlfqDEKYfGoAV3Lul98u6YRV/s0kjtf4bjk47t0hLTFJR0BSYMd6BpmX3xDjNQ==",
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "@xmldom/xmldom": "^0.7.0",
- "formidable": "^3.5.1",
- "xpath": "0.0.27"
+ "yallist": "^3.0.2"
}
},
- "node_modules/mergexml/node_modules/xpath": {
- "version": "0.0.27",
- "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz",
- "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==",
+ "node_modules/macos-release": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
+ "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.6.0"
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/methods": {
- "version": "1.1.2",
+ "node_modules/magic-string": {
+ "version": "0.30.11",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+ "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+ "dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 0.6"
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
}
},
- "node_modules/micromatch": {
- "version": "4.0.5",
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8.6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mime": {
- "version": "1.6.0",
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true,
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
+ "license": "ISC"
+ },
+ "node_modules/make-fetch-happen": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
+ "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/agent": "^2.0.0",
+ "cacache": "^18.0.0",
+ "http-cache-semantics": "^4.1.1",
+ "is-lambda": "^1.0.1",
+ "minipass": "^7.0.2",
+ "minipass-fetch": "^3.0.0",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.3",
+ "proc-log": "^4.2.0",
+ "promise-retry": "^2.0.1",
+ "ssri": "^10.0.0"
},
"engines": {
- "node": ">=4"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/mime-db": {
- "version": "1.52.0",
+ "node_modules/map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
+ "node": ">=8"
},
- "engines": {
- "node": ">= 0.6"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mimic-fn": {
- "version": "2.1.0",
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">= 0.6"
}
},
- "node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "node_modules/memfs": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz",
+ "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/json-pack": "^1.0.3",
+ "@jsonjoy.com/util": "^1.3.0",
+ "tree-dump": "^1.0.1",
+ "tslib": "^2.0.0"
+ },
"engines": {
- "node": ">=10"
+ "node": ">= 4.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
}
},
- "node_modules/min-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "node_modules/meow": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
+ "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
"engines": {
- "node": ">=4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mini-css-extract-plugin": {
- "version": "2.7.6",
+ "node_modules/meow/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "schema-utils": "^4.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
+ "node": ">=8"
}
},
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
+ "node_modules/meow/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true,
"license": "ISC"
},
- "node_modules/minimatch": {
- "version": "3.1.2",
- "license": "ISC",
+ "node_modules/meow/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "p-locate": "^4.1.0"
},
"engines": {
- "node": "*"
+ "node": ">=8"
}
},
- "node_modules/minimist": {
- "version": "1.2.8",
+ "node_modules/meow/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minimist-options": {
+ "node_modules/meow/node_modules/p-locate": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
- "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0",
- "kind-of": "^6.0.3"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">=8"
}
},
- "node_modules/minimist-options/node_modules/is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "node_modules/meow/node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/minipass": {
- "version": "5.0.0",
- "license": "ISC",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
"engines": {
"node": ">=8"
}
},
- "node_modules/minipass-collect": {
- "version": "1.0.2",
+ "node_modules/meow/node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "minipass": "^3.0.0"
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
},
"engines": {
- "node": ">= 8"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minipass-collect/node_modules/minipass": {
- "version": "3.3.6",
+ "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
- "node_modules/minipass-collect/node_modules/yallist": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/minipass-fetch": {
- "version": "2.1.2",
+ "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
- "license": "MIT",
+ "license": "BSD-2-Clause",
"dependencies": {
- "minipass": "^3.1.6",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- },
- "optionalDependencies": {
- "encoding": "^0.1.13"
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
}
},
- "node_modules/minipass-fetch/node_modules/minipass": {
- "version": "3.3.6",
+ "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
- "node_modules/minipass-fetch/node_modules/yallist": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
+ "node_modules/meow/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
+ "bin": {
+ "semver": "bin/semver"
}
},
- "node_modules/minipass-flush/node_modules/minipass": {
- "version": "3.3.6",
+ "node_modules/meow/node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "license": "(MIT OR CC0-1.0)",
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minipass-flush/node_modules/yallist": {
- "version": "4.0.0",
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
"dev": true,
- "license": "ISC"
+ "license": "MIT"
},
- "node_modules/minipass-json-stream": {
- "version": "1.0.1",
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "jsonparse": "^1.3.1",
- "minipass": "^3.0.0"
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/minipass-json-stream/node_modules/minipass": {
- "version": "3.3.6",
+ "node_modules/mergexml": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/mergexml/-/mergexml-1.2.4.tgz",
+ "integrity": "sha512-yiOlDqcVCz7AG1eSboonc18FTlfqDEKYfGoAV3Lul98u6YRV/s0kjtf4bjk47t0hLTFJR0BSYMd6BpmX3xDjNQ==",
"dev": true,
"license": "ISC",
"dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "@xmldom/xmldom": "^0.7.0",
+ "formidable": "^3.5.1",
+ "xpath": "0.0.27"
}
},
- "node_modules/minipass-json-stream/node_modules/yallist": {
- "version": "4.0.0",
+ "node_modules/mergexml/node_modules/xpath": {
+ "version": "0.0.27",
+ "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz",
+ "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==",
"dev": true,
- "license": "ISC"
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.0"
+ }
},
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">= 0.6"
}
},
- "node_modules/minipass-pipeline/node_modules/minipass": {
- "version": "3.3.6",
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=8.6"
}
},
- "node_modules/minipass-pipeline/node_modules/yallist": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/minipass-sized": {
- "version": "1.0.3",
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/minipass-sized/node_modules/minipass": {
- "version": "3.3.6",
+ "node_modules/mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=4.0.0"
}
},
- "node_modules/minipass-sized/node_modules/yallist": {
- "version": "4.0.0",
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
- "license": "ISC"
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
"license": "MIT",
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
"engines": {
- "node": ">= 8"
+ "node": ">= 0.6"
}
},
- "node_modules/minizlib/node_modules/minipass": {
- "version": "3.3.6",
- "license": "ISC",
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "mime-db": "1.52.0"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.6"
}
},
- "node_modules/minizlib/node_modules/yallist": {
- "version": "4.0.0",
- "license": "ISC"
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"license": "MIT",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
"engines": {
- "node": ">=10"
+ "node": ">=6"
}
},
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "node_modules/mimic-function": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "node_modules/modify-values": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
- "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mrmime": {
+ "node_modules/min-indent": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=4"
}
},
- "node_modules/ms": {
- "version": "2.1.2",
- "license": "MIT"
- },
- "node_modules/multicast-dns": {
- "version": "7.2.5",
+ "node_modules/mini-css-extract-plugin": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz",
+ "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "dns-packet": "^5.2.2",
- "thunky": "^1.0.2"
+ "schema-utils": "^4.0.0",
+ "tapable": "^2.2.1"
},
- "bin": {
- "multicast-dns": "cli.js"
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.0.0"
}
},
- "node_modules/mute-stream": {
- "version": "0.0.8",
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true,
"license": "ISC"
},
- "node_modules/nanoid": {
- "version": "3.3.7",
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/napi-build-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
- "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "node_modules/native-run": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz",
- "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==",
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@ionic/utils-fs": "^3.1.7",
- "@ionic/utils-terminal": "^2.3.4",
- "bplist-parser": "^0.3.2",
- "debug": "^4.3.4",
- "elementtree": "^0.1.7",
- "ini": "^4.1.1",
- "plist": "^3.1.0",
- "split2": "^4.2.0",
- "through2": "^4.0.2",
- "tslib": "^2.6.2",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "native-run": "bin/native-run"
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">= 6"
}
},
- "node_modules/native-run/node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "node_modules/minimist-options/node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 10.x"
+ "node": ">=0.10.0"
}
},
- "node_modules/natural-compare": {
- "version": "1.4.0",
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
- "license": "MIT"
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
},
- "node_modules/needle": {
- "version": "3.3.1",
+ "node_modules/minipass-collect": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
+ "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
"dev": true,
- "license": "MIT",
- "optional": true,
+ "license": "ISC",
"dependencies": {
- "iconv-lite": "^0.6.3",
- "sax": "^1.2.4"
- },
- "bin": {
- "needle": "bin/needle"
+ "minipass": "^7.0.3"
},
"engines": {
- "node": ">= 4.4.x"
+ "node": ">=16 || 14 >=14.17"
}
},
- "node_modules/negotiator": {
- "version": "0.6.3",
+ "node_modules/minipass-fetch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
+ "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "minipass": "^7.0.3",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.1.2"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.13"
}
},
- "node_modules/neo-async": {
- "version": "2.6.2",
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/netmask": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
- "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
- "license": "MIT",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
"engines": {
- "node": ">= 0.4.0"
+ "node": ">= 8"
}
},
- "node_modules/ng2-charts": {
- "version": "4.1.1",
+ "node_modules/minipass-flush/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
"license": "ISC",
"dependencies": {
- "lodash-es": "^4.17.15",
- "tslib": "^2.3.0"
+ "yallist": "^4.0.0"
},
- "peerDependencies": {
- "@angular/cdk": ">=14.0.0",
- "@angular/common": ">=14.0.0",
- "@angular/core": ">=14.0.0",
- "chart.js": "^3.4.0 || ^4.0.0",
- "rxjs": "^6.5.3 || ^7.4.0"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/ngx-cookie-service": {
- "version": "16.1.0",
- "license": "MIT",
+ "node_modules/minipass-flush/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "tslib": "^2.0.0"
+ "minipass": "^3.0.0"
},
- "peerDependencies": {
- "@angular/common": "^16.0.0",
- "@angular/core": "^16.0.0"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/ngx-device-detector": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ngx-device-detector/-/ngx-device-detector-6.0.2.tgz",
- "integrity": "sha512-+zaYUYGepNE4vMBA/6kyc1rhuUm5uU4cwbvFEEy0gAY4OarId15zwcb1iyvQbyrLCXhZW0DrPZTBoQxzp7dyVw==",
- "license": "MIT",
+ "node_modules/minipass-pipeline/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "tslib": "^2.0.0"
+ "yallist": "^4.0.0"
},
- "peerDependencies": {
- "@angular/common": "^16.0.0",
- "@angular/core": "^16.0.0"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/ngx-spinner": {
- "version": "16.0.2",
- "license": "MIT",
+ "node_modules/minipass-pipeline/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "tslib": "^2.3.0"
+ "minipass": "^3.0.0"
},
- "peerDependencies": {
- "@angular/animations": ">=15.0.0",
- "@angular/common": ">=15.0.0",
- "@angular/core": ">=15.0.0"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/node-abi": {
- "version": "3.65.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz",
- "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==",
+ "node_modules/minipass-sized/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "semver": "^7.3.5"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
}
},
- "node_modules/node-addon-api": {
- "version": "3.2.1",
+ "node_modules/minipass-sized/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true,
- "license": "MIT"
+ "license": "ISC"
},
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "whatwg-url": "^5.0.0"
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
},
"engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
+ "node": ">= 8"
}
},
- "node_modules/node-fetch/node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"dev": true,
- "license": "MIT"
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "node_modules/node-fetch/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "node_modules/minizlib/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true,
- "license": "BSD-2-Clause"
+ "license": "ISC"
},
- "node_modules/node-fetch/node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
}
},
- "node_modules/node-forge": {
- "version": "1.3.1",
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
"dev": true,
- "license": "(BSD-3-Clause OR GPL-2.0)",
- "engines": {
- "node": ">= 6.13.0"
- }
+ "license": "MIT"
},
- "node_modules/node-gyp": {
- "version": "9.4.1",
+ "node_modules/modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "env-paths": "^2.2.0",
- "exponential-backoff": "^3.1.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^10.0.3",
- "nopt": "^6.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
"engines": {
- "node": "^12.13 || ^14.13 || >=16"
+ "node": ">=0.10.0"
}
},
- "node_modules/node-gyp-build": {
- "version": "4.8.0",
+ "node_modules/mrmime": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
+ "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
"dev": true,
"license": "MIT",
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/node-gyp/node_modules/glob": {
- "version": "7.2.3",
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
+ "license": "MIT"
},
- "node_modules/node-html-parser": {
- "version": "5.4.2",
- "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz",
- "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==",
+ "node_modules/msgpackr": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz",
+ "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "css-select": "^4.2.1",
- "he": "1.2.0"
+ "optionalDependencies": {
+ "msgpackr-extract": "^3.0.2"
}
},
- "node_modules/node-html-parser/node_modules/css-select": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "node_modules/msgpackr-extract": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz",
+ "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==",
"dev": true,
- "license": "BSD-2-Clause",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
"dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.0.1",
- "domhandler": "^4.3.1",
- "domutils": "^2.8.0",
- "nth-check": "^2.0.1"
+ "node-gyp-build-optional-packages": "5.2.2"
},
- "funding": {
- "url": "https://github.com/sponsors/fb55"
+ "bin": {
+ "download-msgpackr-prebuilds": "bin/download-prebuilds.js"
+ },
+ "optionalDependencies": {
+ "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3",
+ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3"
}
},
- "node_modules/node-html-parser/node_modules/dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+ "node_modules/multicast-dns": {
+ "version": "7.2.5",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
+ "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
+ "dns-packet": "^5.2.2",
+ "thunky": "^1.0.2"
},
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ "bin": {
+ "multicast-dns": "cli.js"
}
},
- "node_modules/node-html-parser/node_modules/domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "node_modules/mute-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
+ "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
"dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "domelementtype": "^2.2.0"
- },
+ "license": "ISC",
"engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/node-html-parser/node_modules/domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
},
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/node-html-parser/node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true,
- "license": "BSD-2-Clause",
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/node-releases": {
- "version": "2.0.14",
+ "node_modules/napi-build-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
"dev": true,
"license": "MIT"
},
- "node_modules/nodemon": {
- "version": "2.0.22",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz",
- "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==",
+ "node_modules/native-run": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz",
+ "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "chokidar": "^3.5.2",
- "debug": "^3.2.7",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.1.2",
- "pstree.remy": "^1.1.8",
- "semver": "^5.7.1",
- "simple-update-notifier": "^1.0.7",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.5"
+ "@ionic/utils-fs": "^3.1.7",
+ "@ionic/utils-terminal": "^2.3.4",
+ "bplist-parser": "^0.3.2",
+ "debug": "^4.3.4",
+ "elementtree": "^0.1.7",
+ "ini": "^4.1.1",
+ "plist": "^3.1.0",
+ "split2": "^4.2.0",
+ "through2": "^4.0.2",
+ "tslib": "^2.6.2",
+ "yauzl": "^2.10.0"
},
"bin": {
- "nodemon": "bin/nodemon.js"
+ "native-run": "bin/native-run"
},
"engines": {
- "node": ">=8.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/nodemon"
+ "node": ">=16.0.0"
}
},
- "node_modules/nodemon/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "node_modules/native-run/node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10.x"
}
},
- "node_modules/nodemon/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
+ "license": "MIT"
},
- "node_modules/nopt": {
- "version": "6.0.0",
+ "node_modules/needle": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz",
+ "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
+ "optional": true,
"dependencies": {
- "abbrev": "^1.0.0"
+ "iconv-lite": "^0.6.3",
+ "sax": "^1.2.4"
},
"bin": {
- "nopt": "bin/nopt.js"
+ "needle": "bin/needle"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "node": ">= 4.4.x"
}
},
- "node_modules/normalize-package-data": {
- "version": "5.0.0",
+ "node_modules/needle/node_modules/sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
"dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "hosted-git-info": "^6.0.0",
- "is-core-module": "^2.8.1",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
+ "license": "ISC",
+ "optional": true
},
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "devOptional": true,
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.6"
}
},
- "node_modules/normalize-range": {
- "version": "0.1.2",
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/netmask": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4.0"
}
},
- "node_modules/npm-bundled": {
- "version": "3.0.0",
- "dev": true,
+ "node_modules/ng2-charts": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.1.1.tgz",
+ "integrity": "sha512-iHwXDbmX86lfeH8VRcsaW2tJATsuAZo4kvvC/Yk2l35zOHjevja1qBvO6BAibiDazi9r9aS6ZRJOqWPsz1pP2w==",
"license": "ISC",
"dependencies": {
- "npm-normalize-package-bin": "^3.0.0"
+ "lodash-es": "^4.17.15",
+ "tslib": "^2.3.0"
},
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "peerDependencies": {
+ "@angular/cdk": ">=14.0.0",
+ "@angular/common": ">=14.0.0",
+ "@angular/core": ">=14.0.0",
+ "chart.js": "^3.4.0 || ^4.0.0",
+ "rxjs": "^6.5.3 || ^7.4.0"
}
},
- "node_modules/npm-install-checks": {
- "version": "6.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
+ "node_modules/ngx-cookie-service": {
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-18.0.0.tgz",
+ "integrity": "sha512-hkkUckzZTXXWtFgvVkT2hg6mwYMLXioXDZWBsVCOy9gYkADjsj0N5VViO7eo2izQ0VcMPd/Etog1trf/T4oZMQ==",
+ "license": "MIT",
"dependencies": {
- "semver": "^7.1.1"
+ "tslib": "^2.6.2"
},
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "peerDependencies": {
+ "@angular/common": "^18.0.0-rc.0",
+ "@angular/core": "^18.0.0-rc.0"
}
},
- "node_modules/npm-normalize-package-bin": {
- "version": "3.0.1",
+ "node_modules/ngx-device-detector": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/ngx-device-detector/-/ngx-device-detector-8.0.0.tgz",
+ "integrity": "sha512-ik6EwUKnlN+xwoWHzyJp5+V+QRWYrmpTqAvRwa16xBnAVd7/i3jElN7MZjs/InwcYz7AW3XcSNeu+XRvtHgb9w==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/common": "^18.0.0",
+ "@angular/core": "^18.0.0"
+ }
+ },
+ "node_modules/ngx-spinner": {
+ "version": "16.0.2",
+ "resolved": "https://registry.npmjs.org/ngx-spinner/-/ngx-spinner-16.0.2.tgz",
+ "integrity": "sha512-MZpOHb3dvSqD6xiEdR+EtOfPY2r1kfA7t5Hv5IVwi7gkbTwVgnqxDWdOYJ/HW1pSZ5iEGhqlJqWg6CysLmNfHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "peerDependencies": {
+ "@angular/animations": ">=15.0.0",
+ "@angular/common": ">=15.0.0",
+ "@angular/core": ">=15.0.0"
+ }
+ },
+ "node_modules/nice-napi": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
+ "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "!win32"
+ ],
+ "dependencies": {
+ "node-addon-api": "^3.0.0",
+ "node-gyp-build": "^4.2.2"
}
},
- "node_modules/npm-package-arg": {
- "version": "10.1.0",
+ "node_modules/node-abi": {
+ "version": "3.67.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz",
+ "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "hosted-git-info": "^6.0.0",
- "proc-log": "^3.0.0",
- "semver": "^7.3.5",
- "validate-npm-package-name": "^5.0.0"
+ "semver": "^7.3.5"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=10"
}
},
- "node_modules/npm-packlist": {
- "version": "7.0.4",
+ "node_modules/node-addon-api": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
+ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ignore-walk": "^6.0.0"
+ "whatwg-url": "^5.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
}
},
- "node_modules/npm-pick-manifest": {
- "version": "8.0.1",
+ "node_modules/node-forge": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
+ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "npm-install-checks": "^6.0.0",
- "npm-normalize-package-bin": "^3.0.0",
- "npm-package-arg": "^10.0.0",
- "semver": "^7.3.5"
- },
+ "license": "(BSD-3-Clause OR GPL-2.0)",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">= 6.13.0"
}
},
- "node_modules/npm-registry-fetch": {
- "version": "14.0.5",
+ "node_modules/node-gyp": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz",
+ "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "make-fetch-happen": "^11.0.0",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-json-stream": "^1.0.1",
- "minizlib": "^2.1.2",
- "npm-package-arg": "^10.0.0",
- "proc-log": "^3.0.0"
+ "env-paths": "^2.2.0",
+ "exponential-backoff": "^3.1.1",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^13.0.0",
+ "nopt": "^7.0.0",
+ "proc-log": "^4.1.0",
+ "semver": "^7.3.5",
+ "tar": "^6.2.1",
+ "which": "^4.0.0"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": {
- "version": "2.0.0",
+ "node_modules/node-gyp-build": {
+ "version": "4.8.2",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz",
+ "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 10"
+ "optional": true,
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
}
},
- "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": {
- "version": "5.0.0",
+ "node_modules/node-gyp-build-optional-packages": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz",
+ "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
+ "detect-libc": "^2.0.1"
+ },
+ "bin": {
+ "node-gyp-build-optional-packages": "bin.js",
+ "node-gyp-build-optional-packages-optional": "optional.js",
+ "node-gyp-build-optional-packages-test": "build-test.js"
+ }
+ },
+ "node_modules/node-gyp/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": ">= 6"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/npm-registry-fetch/node_modules/lru-cache": {
- "version": "7.18.3",
+ "node_modules/node-gyp/node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
"dev": true,
"license": "ISC",
"engines": {
- "node": ">=12"
+ "node": ">=16"
}
},
- "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": {
- "version": "11.1.1",
+ "node_modules/node-gyp/node_modules/which": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
- "http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^10.0.0"
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.13.0 || >=18.0.0"
}
},
- "node_modules/npm-registry-fetch/node_modules/minipass-fetch": {
- "version": "3.0.4",
+ "node_modules/node-html-parser": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz",
+ "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "encoding": "^0.1.13"
+ "css-select": "^4.2.1",
+ "he": "1.2.0"
}
},
- "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": {
- "version": "7.0.4",
+ "node_modules/node-html-parser/node_modules/css-select": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
+ "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "license": "MIT",
+ "license": "BSD-2-Clause",
"dependencies": {
- "path-key": "^3.0.0"
+ "boolbase": "^1.0.0",
+ "css-what": "^6.0.1",
+ "domhandler": "^4.3.1",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
}
},
- "node_modules/npm-watch": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.9.0.tgz",
- "integrity": "sha512-C5Rgh5+jvY33K1EH8Qjr1hfpH9Nhasc90QJ0W+JyKg2ogE0LOCZI4xirC8QmywW7XinyBpynwxlrN6aPfjc3Hw==",
+ "node_modules/node-html-parser/node_modules/dom-serializer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
"dev": true,
"license": "MIT",
"dependencies": {
- "nodemon": "^2.0.7",
- "through2": "^4.0.2"
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
},
- "bin": {
- "npm-watch": "cli.js"
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
- "node_modules/npmlog": {
- "version": "6.0.2",
+ "node_modules/node-html-parser/node_modules/domhandler": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
- "license": "ISC",
+ "license": "BSD-2-Clause",
"dependencies": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
+ "domelementtype": "^2.2.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
- "node_modules/nth-check": {
- "version": "2.1.1",
+ "node_modules/node-html-parser/node_modules/domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "boolbase": "^1.0.0"
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
},
"funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/node-html-parser/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/nwsapi": {
- "version": "2.2.7",
+ "node_modules/node-releases": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true,
"license": "MIT"
},
- "node_modules/nx": {
- "version": "16.5.1",
+ "node_modules/nodemon": {
+ "version": "2.0.22",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz",
+ "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==",
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "@nrwl/tao": "16.5.1",
- "@parcel/watcher": "2.0.4",
- "@yarnpkg/lockfile": "^1.1.0",
- "@yarnpkg/parsers": "3.0.0-rc.46",
- "@zkochan/js-yaml": "0.0.6",
- "axios": "^1.0.0",
- "chalk": "^4.1.0",
- "cli-cursor": "3.1.0",
- "cli-spinners": "2.6.1",
- "cliui": "^7.0.2",
- "dotenv": "~10.0.0",
- "enquirer": "~2.3.6",
- "fast-glob": "3.2.7",
- "figures": "3.2.0",
- "flat": "^5.0.2",
- "fs-extra": "^11.1.0",
- "glob": "7.1.4",
- "ignore": "^5.0.4",
- "js-yaml": "4.1.0",
- "jsonc-parser": "3.2.0",
- "lines-and-columns": "~2.0.3",
- "minimatch": "3.0.5",
- "npm-run-path": "^4.0.1",
- "open": "^8.4.0",
- "semver": "7.5.3",
- "string-width": "^4.2.3",
- "strong-log-transformer": "^2.1.0",
- "tar-stream": "~2.2.0",
- "tmp": "~0.2.1",
- "tsconfig-paths": "^4.1.2",
- "tslib": "^2.3.0",
- "v8-compile-cache": "2.3.0",
- "yargs": "^17.6.2",
- "yargs-parser": "21.1.1"
+ "chokidar": "^3.5.2",
+ "debug": "^3.2.7",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^5.7.1",
+ "simple-update-notifier": "^1.0.7",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
},
"bin": {
- "nx": "bin/nx.js"
- },
- "optionalDependencies": {
- "@nx/nx-darwin-arm64": "16.5.1",
- "@nx/nx-darwin-x64": "16.5.1",
- "@nx/nx-freebsd-x64": "16.5.1",
- "@nx/nx-linux-arm-gnueabihf": "16.5.1",
- "@nx/nx-linux-arm64-gnu": "16.5.1",
- "@nx/nx-linux-arm64-musl": "16.5.1",
- "@nx/nx-linux-x64-gnu": "16.5.1",
- "@nx/nx-linux-x64-musl": "16.5.1",
- "@nx/nx-win32-arm64-msvc": "16.5.1",
- "@nx/nx-win32-x64-msvc": "16.5.1"
- },
- "peerDependencies": {
- "@swc-node/register": "^1.4.2",
- "@swc/core": "^1.2.173"
- },
- "peerDependenciesMeta": {
- "@swc-node/register": {
- "optional": true
- },
- "@swc/core": {
- "optional": true
- }
- }
- },
- "node_modules/nx/node_modules/ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
+ "nodemon": "bin/nodemon.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=8.10.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
}
},
- "node_modules/nx/node_modules/argparse": {
- "version": "2.0.1",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/nx/node_modules/chalk": {
- "version": "4.1.2",
+ "node_modules/nodemon/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "node_modules/nx/node_modules/cli-spinners": {
- "version": "2.6.1",
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "dependencies": {
+ "ms": "^2.1.1"
}
},
- "node_modules/nx/node_modules/cliui": {
- "version": "7.0.4",
+ "node_modules/nodemon/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"license": "ISC",
"dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
}
},
- "node_modules/nx/node_modules/color-convert": {
- "version": "2.0.1",
+ "node_modules/nodemon/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
}
},
- "node_modules/nx/node_modules/fast-glob": {
- "version": "3.2.7",
+ "node_modules/nopt": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "abbrev": "^2.0.0"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
},
"engines": {
- "node": ">=8"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/fs-extra": {
- "version": "11.2.0",
+ "node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
"dev": true,
- "license": "MIT",
+ "license": "BSD-2-Clause",
"dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
},
"engines": {
- "node": ">=14.14"
+ "node": ">=10"
}
},
- "node_modules/nx/node_modules/glob": {
- "version": "7.1.4",
- "dev": true,
- "license": "ISC",
- "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"
- },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "devOptional": true,
+ "license": "MIT",
"engines": {
- "node": "*"
+ "node": ">=0.10.0"
}
},
- "node_modules/nx/node_modules/has-flag": {
- "version": "4.0.0",
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/nx/node_modules/js-yaml": {
- "version": "4.1.0",
+ "node_modules/npm-bundled": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz",
+ "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "argparse": "^2.0.1"
+ "npm-normalize-package-bin": "^3.0.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/jsonc-parser": {
- "version": "3.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nx/node_modules/jsonfile": {
- "version": "6.1.0",
+ "node_modules/npm-install-checks": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz",
+ "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==",
"dev": true,
- "license": "MIT",
+ "license": "BSD-2-Clause",
"dependencies": {
- "universalify": "^2.0.0"
+ "semver": "^7.1.1"
},
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/lines-and-columns": {
- "version": "2.0.4",
+ "node_modules/npm-normalize-package-bin": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
+ "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/lru-cache": {
- "version": "6.0.0",
+ "node_modules/npm-package-arg": {
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz",
+ "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==",
"dev": true,
"license": "ISC",
"dependencies": {
- "yallist": "^4.0.0"
+ "hosted-git-info": "^7.0.0",
+ "proc-log": "^4.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-name": "^5.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/minimatch": {
- "version": "3.0.5",
+ "node_modules/npm-package-arg/node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "lru-cache": "^10.0.1"
},
"engines": {
- "node": "*"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/semver": {
- "version": "7.5.3",
+ "node_modules/npm-package-arg/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/npm-packlist": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz",
+ "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==",
"dev": true,
"license": "ISC",
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "ignore-walk": "^6.0.4"
},
"engines": {
- "node": ">=10"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/supports-color": {
- "version": "7.2.0",
+ "node_modules/npm-pick-manifest": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz",
+ "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "has-flag": "^4.0.0"
+ "npm-install-checks": "^6.0.0",
+ "npm-normalize-package-bin": "^3.0.0",
+ "npm-package-arg": "^11.0.0",
+ "semver": "^7.3.5"
},
"engines": {
- "node": ">=8"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/tmp": {
- "version": "0.2.3",
+ "node_modules/npm-registry-fetch": {
+ "version": "17.1.0",
+ "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz",
+ "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/redact": "^2.0.0",
+ "jsonparse": "^1.3.1",
+ "make-fetch-happen": "^13.0.0",
+ "minipass": "^7.0.2",
+ "minipass-fetch": "^3.0.0",
+ "minizlib": "^2.1.2",
+ "npm-package-arg": "^11.0.0",
+ "proc-log": "^4.0.0"
+ },
"engines": {
- "node": ">=14.14"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/nx/node_modules/tsconfig-paths": {
- "version": "4.2.0",
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "json5": "^2.2.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
+ "path-key": "^3.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
- "node_modules/nx/node_modules/universalify": {
- "version": "2.0.1",
+ "node_modules/npm-watch": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.9.0.tgz",
+ "integrity": "sha512-C5Rgh5+jvY33K1EH8Qjr1hfpH9Nhasc90QJ0W+JyKg2ogE0LOCZI4xirC8QmywW7XinyBpynwxlrN6aPfjc3Hw==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
+ "dependencies": {
+ "nodemon": "^2.0.7",
+ "through2": "^4.0.2"
+ },
+ "bin": {
+ "npm-watch": "cli.js"
}
},
- "node_modules/nx/node_modules/yallist": {
- "version": "4.0.0",
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"dev": true,
- "license": "ISC"
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
},
"node_modules/oauth-sign": {
"version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -16582,6 +18806,8 @@
},
"node_modules/object-assign": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -16589,30 +18815,32 @@
}
},
"node_modules/object-inspect": {
- "version": "1.13.1",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "dev": true,
"license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object-keys": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
- "node_modules/object-path": {
- "version": "0.11.8",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.12.0"
- }
- },
"node_modules/object.assign": {
"version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -16630,6 +18858,8 @@
},
"node_modules/object.fromentries": {
"version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -16647,6 +18877,8 @@
},
"node_modules/object.groupby": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -16659,13 +18891,15 @@
}
},
"node_modules/object.values": {
- "version": "1.1.7",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -16676,11 +18910,15 @@
},
"node_modules/obuf": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
"dev": true,
"license": "MIT"
},
"node_modules/on-finished": {
"version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -16692,6 +18930,8 @@
},
"node_modules/on-headers": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -16700,6 +18940,9 @@
},
"node_modules/once": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
@@ -16707,6 +18950,8 @@
},
"node_modules/onetime": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
@@ -16719,32 +18964,37 @@
}
},
"node_modules/open": {
- "version": "8.4.2",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
+ "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "define-lazy-prop": "^2.0.0",
- "is-docker": "^2.1.1",
- "is-wsl": "^2.2.0"
+ "default-browser": "^5.2.1",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^3.1.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/optionator": {
- "version": "0.9.3",
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
},
"engines": {
"node": ">= 0.8.0"
@@ -16752,6 +19002,8 @@
},
"node_modules/ora": {
"version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+ "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
"license": "MIT",
"dependencies": {
"bl": "^4.1.0",
@@ -16773,6 +19025,8 @@
},
"node_modules/ora/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -16786,6 +19040,8 @@
},
"node_modules/ora/node_modules/chalk": {
"version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -16800,6 +19056,8 @@
},
"node_modules/ora/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -16808,8 +19066,16 @@
"node": ">=7.0.0"
}
},
+ "node_modules/ora/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
"node_modules/ora/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -16817,6 +19083,8 @@
},
"node_modules/ora/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -16825,10 +19093,18 @@
"node": ">=8"
}
},
+ "node_modules/ordered-binary": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz",
+ "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/os-name": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz",
"integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"macos-release": "^2.5.0",
@@ -16843,38 +19119,50 @@
},
"node_modules/os-tmpdir": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/p-limit": {
- "version": "2.3.0",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-try": "^2.0.0"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
- "version": "4.1.0",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-limit": "^2.2.0"
+ "p-limit": "^3.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-map": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -16888,19 +19176,27 @@
}
},
"node_modules/p-retry": {
- "version": "4.6.2",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
+ "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/retry": "0.12.0",
+ "@types/retry": "0.12.2",
+ "is-network-error": "^1.0.0",
"retry": "^0.13.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-retry/node_modules/retry": {
"version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
+ "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -16909,6 +19205,8 @@
},
"node_modules/p-try": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -16919,6 +19217,7 @@
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz",
"integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@tootallnate/quickjs-emscripten": "^0.23.0",
@@ -16934,62 +19233,11 @@
"node": ">= 14"
}
},
- "node_modules/pac-proxy-agent/node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.0.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
- "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.1",
- "debug": "^4.3.4",
- "socks": "^2.8.3"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/pac-resolver": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
"integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"degenerator": "^5.0.0",
@@ -16999,44 +19247,56 @@
"node": ">= 14"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
"node_modules/pacote": {
- "version": "15.2.0",
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz",
+ "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==",
"dev": true,
"license": "ISC",
"dependencies": {
- "@npmcli/git": "^4.0.0",
+ "@npmcli/git": "^5.0.0",
"@npmcli/installed-package-contents": "^2.0.1",
- "@npmcli/promise-spawn": "^6.0.1",
- "@npmcli/run-script": "^6.0.0",
- "cacache": "^17.0.0",
+ "@npmcli/package-json": "^5.1.0",
+ "@npmcli/promise-spawn": "^7.0.0",
+ "@npmcli/run-script": "^8.0.0",
+ "cacache": "^18.0.0",
"fs-minipass": "^3.0.0",
- "minipass": "^5.0.0",
- "npm-package-arg": "^10.0.0",
- "npm-packlist": "^7.0.0",
- "npm-pick-manifest": "^8.0.0",
- "npm-registry-fetch": "^14.0.0",
- "proc-log": "^3.0.0",
+ "minipass": "^7.0.2",
+ "npm-package-arg": "^11.0.0",
+ "npm-packlist": "^8.0.0",
+ "npm-pick-manifest": "^9.0.0",
+ "npm-registry-fetch": "^17.0.0",
+ "proc-log": "^4.0.0",
"promise-retry": "^2.0.1",
- "read-package-json": "^6.0.0",
- "read-package-json-fast": "^3.0.0",
- "sigstore": "^1.3.0",
+ "sigstore": "^2.2.0",
"ssri": "^10.0.0",
"tar": "^6.1.11"
},
"bin": {
- "pacote": "lib/bin.js"
+ "pacote": "bin/index.js"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/pako": {
"version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true,
"license": "(MIT AND Zlib)"
},
"node_modules/parent-module": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17046,8 +19306,24 @@
"node": ">=6"
}
},
+ "node_modules/parse-imports": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz",
+ "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "es-module-lexer": "^1.5.3",
+ "slashes": "^3.0.12"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
"node_modules/parse-json": {
"version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17062,36 +19338,29 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
- },
- "node_modules/parse-node-version": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/parse5": {
- "version": "6.0.1",
+ },
+ "node_modules/parse-json/node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true,
"license": "MIT"
},
- "node_modules/parse5-html-rewriting-stream": {
- "version": "7.0.0",
+ "node_modules/parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "entities": "^4.3.0",
- "parse5": "^7.0.0",
- "parse5-sax-parser": "^7.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
+ "engines": {
+ "node": ">= 0.10"
}
},
- "node_modules/parse5-html-rewriting-stream/node_modules/parse5": {
+ "node_modules/parse5": {
"version": "7.1.2",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"entities": "^4.4.0"
@@ -17100,23 +19369,29 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
- "node_modules/parse5-sax-parser": {
+ "node_modules/parse5-html-rewriting-stream": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz",
+ "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "parse5": "^7.0.0"
+ "entities": "^4.3.0",
+ "parse5": "^7.0.0",
+ "parse5-sax-parser": "^7.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
- "node_modules/parse5-sax-parser/node_modules/parse5": {
- "version": "7.1.2",
+ "node_modules/parse5-sax-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz",
+ "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "entities": "^4.4.0"
+ "parse5": "^7.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -17124,6 +19399,8 @@
},
"node_modules/parseurl": {
"version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17132,6 +19409,8 @@
},
"node_modules/path-exists": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17140,6 +19419,9 @@
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -17147,11 +19429,16 @@
},
"node_modules/path-is-inside": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
"dev": true,
"license": "(WTFPL OR MIT)"
},
"node_modules/path-key": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -17159,11 +19446,15 @@
},
"node_modules/path-parse": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true,
"license": "MIT"
},
"node_modules/path-scurry": {
- "version": "1.10.2",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -17171,27 +19462,30 @@
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.2.0",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": "14 || >=16.14"
- }
+ "license": "ISC"
},
"node_modules/path-to-regexp": {
"version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dev": true,
"license": "MIT"
},
"node_modules/path-type": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17207,35 +19501,45 @@
},
"node_modules/performance-now": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"dev": true,
"license": "MIT"
},
"node_modules/picocolors": {
- "version": "1.0.0",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "devOptional": true,
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=8.6"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/pify": {
- "version": "4.0.1",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
}
},
"node_modules/pinkie": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17244,6 +19548,8 @@
},
"node_modules/pinkie-promise": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17254,20 +19560,19 @@
}
},
"node_modules/piscina": {
- "version": "4.0.0",
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz",
+ "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "eventemitter-asyncresource": "^1.0.0",
- "hdr-histogram-js": "^2.0.1",
- "hdr-histogram-percentiles-obj": "^3.0.0"
- },
"optionalDependencies": {
"nice-napi": "^1.0.2"
}
},
"node_modules/pkg-dir": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17282,6 +19587,8 @@
},
"node_modules/pkg-dir/node_modules/find-up": {
"version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17297,6 +19604,8 @@
},
"node_modules/pkg-dir/node_modules/locate-path": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17311,6 +19620,8 @@
},
"node_modules/pkg-dir/node_modules/p-limit": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17325,6 +19636,8 @@
},
"node_modules/pkg-dir/node_modules/p-locate": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17339,6 +19652,8 @@
},
"node_modules/pkg-dir/node_modules/path-exists": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17346,7 +19661,9 @@
}
},
"node_modules/pkg-dir/node_modules/yocto-queue": {
- "version": "1.0.0",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+ "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17381,18 +19698,10 @@
"node": ">=10.0.0"
}
},
- "node_modules/plist/node_modules/xmlbuilder": {
- "version": "15.1.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
- "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.0"
- }
- },
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17400,7 +19709,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.35",
+ "version": "8.4.41",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+ "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
"dev": true,
"funding": [
{
@@ -17419,36 +19730,56 @@
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-loader": {
- "version": "7.3.3",
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz",
+ "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cosmiconfig": "^8.2.0",
- "jiti": "^1.18.2",
- "semver": "^7.3.8"
+ "cosmiconfig": "^9.0.0",
+ "jiti": "^1.20.0",
+ "semver": "^7.5.4"
},
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
+ "@rspack/core": "0.x || 1.x",
"postcss": "^7.0.0 || ^8.0.1",
"webpack": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
}
},
+ "node_modules/postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/postcss-modules-extract-imports": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
+ "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
"dev": true,
"license": "ISC",
"engines": {
@@ -17460,6 +19791,8 @@
},
"node_modules/postcss-modules-local-by-default": {
"version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz",
+ "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17476,6 +19809,8 @@
},
"node_modules/postcss-modules-scope": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz",
+ "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -17490,6 +19825,8 @@
},
"node_modules/postcss-modules-values": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -17503,7 +19840,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.16",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17516,6 +19855,8 @@
},
"node_modules/postcss-value-parser": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true,
"license": "MIT"
},
@@ -17566,8 +19907,27 @@
"tar-stream": "^2.1.4"
}
},
+ "node_modules/prebuild-install/node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17590,19 +19950,10 @@
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
- "node_modules/pretty-bytes": {
- "version": "5.6.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/proc-log": {
- "version": "3.0.0",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+ "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
"dev": true,
"license": "ISC",
"engines": {
@@ -17611,15 +19962,22 @@
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true,
"license": "MIT"
},
"node_modules/promise-inflight": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
"dev": true,
"license": "ISC"
},
"node_modules/promise-retry": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17656,6 +20014,9 @@
},
"node_modules/protractor": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz",
+ "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==",
+ "deprecated": "We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17685,6 +20046,8 @@
},
"node_modules/protractor/node_modules/ansi-regex": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17693,6 +20056,8 @@
},
"node_modules/protractor/node_modules/ansi-styles": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17701,6 +20066,8 @@
},
"node_modules/protractor/node_modules/chalk": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17716,6 +20083,8 @@
},
"node_modules/protractor/node_modules/cliui": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -17726,6 +20095,8 @@
},
"node_modules/protractor/node_modules/cliui/node_modules/ansi-regex": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17734,6 +20105,8 @@
},
"node_modules/protractor/node_modules/cliui/node_modules/strip-ansi": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17743,124 +20116,128 @@
"node": ">=8"
}
},
- "node_modules/protractor/node_modules/color-convert": {
- "version": "2.0.1",
+ "node_modules/protractor/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "color-name": "~1.1.4"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">=8"
}
},
- "node_modules/protractor/node_modules/glob": {
- "version": "7.2.3",
+ "node_modules/protractor/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
+ "p-locate": "^4.1.0"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/protractor/node_modules/source-map": {
- "version": "0.5.7",
- "dev": true,
- "license": "BSD-3-Clause",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/protractor/node_modules/source-map-support": {
- "version": "0.4.18",
+ "node_modules/protractor/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "source-map": "^0.5.6"
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/protractor/node_modules/strip-ansi": {
- "version": "3.0.1",
+ "node_modules/protractor/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-regex": "^2.0.0"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/protractor/node_modules/supports-color": {
- "version": "2.0.0",
+ "node_modules/protractor/node_modules/q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==",
+ "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.8.0"
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
}
},
- "node_modules/protractor/node_modules/wrap-ansi": {
- "version": "6.2.0",
+ "node_modules/protractor/node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
+ "license": "BSD-3-Clause",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "5.0.1",
+ "node_modules/protractor/node_modules/source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "source-map": "^0.5.6"
}
},
- "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
+ "node_modules/protractor/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "color-convert": "^2.0.1"
+ "ansi-regex": "^2.0.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=0.10.0"
}
},
- "node_modules/protractor/node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "6.0.1",
+ "node_modules/protractor/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": ">=0.8.0"
}
},
"node_modules/protractor/node_modules/y18n": {
"version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"dev": true,
"license": "ISC"
},
"node_modules/protractor/node_modules/yargs": {
"version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17882,6 +20259,8 @@
},
"node_modules/protractor/node_modules/yargs-parser": {
"version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -17894,6 +20273,8 @@
},
"node_modules/proxy-addr": {
"version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17906,64 +20287,29 @@
},
"node_modules/proxy-addr/node_modules/ipaddr.js": {
"version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/proxy-agent": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz",
- "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.0.2",
- "debug": "^4.3.4",
- "http-proxy-agent": "^7.0.1",
- "https-proxy-agent": "^7.0.3",
- "lru-cache": "^7.14.1",
- "pac-proxy-agent": "^7.0.1",
- "proxy-from-env": "^1.1.0",
- "socks-proxy-agent": "^8.0.2"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/proxy-agent/node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/proxy-agent/node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
+ "node": ">= 0.10"
}
},
- "node_modules/proxy-agent/node_modules/https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "node_modules/proxy-agent": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz",
+ "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "^7.0.2",
- "debug": "4"
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.1",
+ "https-proxy-agent": "^7.0.3",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.0.1",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.2"
},
"engines": {
"node": ">= 14"
@@ -17973,37 +20319,31 @@
"version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
"integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "dev": true,
"license": "ISC",
"engines": {
"node": ">=12"
}
},
- "node_modules/proxy-agent/node_modules/socks-proxy-agent": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
- "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.1",
- "debug": "^4.3.4",
- "socks": "^2.8.3"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/proxy-from-env": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/prr": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/psl": {
"version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true,
"license": "MIT"
},
@@ -18016,6 +20356,9 @@
},
"node_modules/pump": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
@@ -18023,14 +20366,17 @@
}
},
"node_modules/punycode": {
- "version": "2.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/q": {
- "version": "1.4.1",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
+ "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
"dev": true,
"license": "MIT",
"engines": {
@@ -18040,6 +20386,8 @@
},
"node_modules/qjobs": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -18048,6 +20396,9 @@
},
"node_modules/qs": {
"version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.4"
@@ -18059,13 +20410,10 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/querystringify": {
- "version": "2.2.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/queue-microtask": {
"version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [
{
@@ -18102,6 +20450,8 @@
},
"node_modules/randombytes": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18110,6 +20460,8 @@
},
"node_modules/range-parser": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -18118,6 +20470,8 @@
},
"node_modules/raw-body": {
"version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18130,16 +20484,10 @@
"node": ">= 0.8"
}
},
- "node_modules/raw-body/node_modules/bytes": {
- "version": "3.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18182,48 +20530,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/read-package-json": {
- "version": "6.0.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^10.2.2",
- "json-parse-even-better-errors": "^3.0.0",
- "normalize-package-data": "^5.0.0",
- "npm-normalize-package-bin": "^3.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/read-package-json-fast": {
- "version": "3.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "json-parse-even-better-errors": "^3.0.0",
- "npm-normalize-package-bin": "^3.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/read-package-json/node_modules/json-parse-even-better-errors": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -18380,7 +20686,9 @@
}
},
"node_modules/readable-stream": {
- "version": "3.6.0",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
@@ -18393,6 +20701,8 @@
},
"node_modules/readdirp": {
"version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -18402,6 +20712,19 @@
"node": ">=8.10.0"
}
},
+ "node_modules/readdirp/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/redent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
@@ -18417,17 +20740,23 @@
}
},
"node_modules/reflect-metadata": {
- "version": "0.1.14",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
+ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/regenerate": {
"version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"dev": true,
"license": "MIT"
},
"node_modules/regenerate-unicode-properties": {
"version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+ "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18439,10 +20768,14 @@
},
"node_modules/regenerator-runtime": {
"version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
"license": "MIT"
},
"node_modules/regenerator-transform": {
"version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18451,6 +20784,8 @@
},
"node_modules/regex-parser": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz",
+ "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==",
"dev": true,
"license": "MIT"
},
@@ -18463,6 +20798,8 @@
},
"node_modules/regexp.prototype.flags": {
"version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18480,6 +20817,8 @@
},
"node_modules/regexpu-core": {
"version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18496,6 +20835,8 @@
},
"node_modules/regjsparser": {
"version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -18507,6 +20848,8 @@
},
"node_modules/regjsparser/node_modules/jsesc": {
"version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
"dev": true,
"bin": {
"jsesc": "bin/jsesc"
@@ -18531,20 +20874,15 @@
"node": ">= 6"
}
},
- "node_modules/replace/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/replace/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/replace/node_modules/cliui": {
@@ -18559,17 +20897,31 @@
"wrap-ansi": "^6.2.0"
}
},
- "node_modules/replace/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/replace/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "color-name": "~1.1.4"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">=8"
+ }
+ },
+ "node_modules/replace/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/replace/node_modules/minimatch": {
@@ -18585,16 +20937,30 @@
"node": "*"
}
},
- "node_modules/replace/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "node_modules/replace/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/replace/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
@@ -18646,6 +21012,9 @@
},
"node_modules/request": {
"version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -18676,6 +21045,8 @@
},
"node_modules/request/node_modules/form-data": {
"version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18689,26 +21060,19 @@
},
"node_modules/request/node_modules/qs": {
"version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.6"
}
},
- "node_modules/request/node_modules/tough-cookie": {
- "version": "2.5.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/request/node_modules/uuid": {
"version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
"dev": true,
"license": "MIT",
"bin": {
@@ -18717,6 +21081,8 @@
},
"node_modules/require-directory": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -18725,6 +21091,8 @@
},
"node_modules/require-from-string": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -18732,16 +21100,22 @@
},
"node_modules/require-main-filename": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true,
"license": "ISC"
},
"node_modules/requires-port": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"dev": true,
"license": "MIT"
},
"node_modules/resolve": {
"version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18757,15 +21131,19 @@
}
},
"node_modules/resolve-from": {
- "version": "5.0.0",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=4"
}
},
"node_modules/resolve-url-loader": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz",
+ "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18781,6 +21159,8 @@
},
"node_modules/resolve-url-loader/node_modules/loader-utils": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18794,6 +21174,8 @@
},
"node_modules/resolve-url-loader/node_modules/source-map": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -18802,6 +21184,8 @@
},
"node_modules/restore-cursor": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"license": "MIT",
"dependencies": {
"onetime": "^5.1.0",
@@ -18811,8 +21195,16 @@
"node": ">=8"
}
},
+ "node_modules/restore-cursor/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "license": "ISC"
+ },
"node_modules/retry": {
"version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
"dev": true,
"license": "MIT",
"engines": {
@@ -18821,6 +21213,8 @@
},
"node_modules/reusify": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -18829,61 +21223,121 @@
}
},
"node_modules/rfdc": {
- "version": "1.3.0",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
"dev": true,
"license": "MIT"
},
"node_modules/rimraf": {
- "version": "3.0.2",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz",
+ "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==",
+ "dev": true,
"license": "ISC",
"dependencies": {
- "glob": "^7.1.3"
+ "glob": "^9.2.0"
},
"bin": {
- "rimraf": "bin.js"
+ "rimraf": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
+ "version": "9.3.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
+ "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "minimatch": "^8.0.2",
+ "minipass": "^4.2.4",
+ "path-scurry": "^1.6.1"
},
"engines": {
- "node": "*"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/minimatch": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
+ "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/rimraf/node_modules/minipass": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
+ "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/roboto-fontface": {
"version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz",
+ "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==",
"license": "Apache-2.0"
},
"node_modules/robust-predicates": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
+ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==",
"license": "Unlicense"
},
"node_modules/rollup": {
- "version": "3.29.4",
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz",
+ "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=14.18.0",
+ "node": ">=18.0.0",
"npm": ">=8.0.0"
},
"optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.21.2",
+ "@rollup/rollup-android-arm64": "4.21.2",
+ "@rollup/rollup-darwin-arm64": "4.21.2",
+ "@rollup/rollup-darwin-x64": "4.21.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.21.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.21.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.21.2",
+ "@rollup/rollup-linux-arm64-musl": "4.21.2",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.21.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.21.2",
+ "@rollup/rollup-linux-x64-gnu": "4.21.2",
+ "@rollup/rollup-linux-x64-musl": "4.21.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.21.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.21.2",
+ "@rollup/rollup-win32-x64-msvc": "4.21.2",
"fsevents": "~2.3.2"
}
},
@@ -18891,13 +21345,30 @@
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
"integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": "0.12.* || 4.* || 6.* || >= 7.*"
}
},
+ "node_modules/run-applescript": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
+ "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/run-async": {
"version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@@ -18905,6 +21376,8 @@
},
"node_modules/run-parallel": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [
{
@@ -18927,10 +21400,14 @@
},
"node_modules/rw": {
"version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
"license": "BSD-3-Clause"
},
"node_modules/rxjs": {
"version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^1.9.0"
@@ -18941,10 +21418,14 @@
},
"node_modules/rxjs/node_modules/tslib": {
"version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"license": "0BSD"
},
"node_modules/safe-array-concat": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18960,13 +21441,10 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/safe-array-concat/node_modules/isarray": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
"node_modules/safe-buffer": {
"version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
@@ -18985,6 +21463,8 @@
},
"node_modules/safe-regex-test": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19001,10 +21481,14 @@
},
"node_modules/safer-buffer": {
"version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.64.1",
+ "version": "1.77.6",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz",
+ "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19020,28 +21504,30 @@
}
},
"node_modules/sass-loader": {
- "version": "13.3.2",
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz",
+ "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==",
"dev": true,
"license": "MIT",
"dependencies": {
"neo-async": "^2.6.2"
},
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "fibers": ">= 3.1.0",
+ "@rspack/core": "0.x || 1.x",
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
"sass": "^1.3.0",
"sass-embedded": "*",
"webpack": "^5.0.0"
},
"peerDependenciesMeta": {
- "fibers": {
+ "@rspack/core": {
"optional": true
},
"node-sass": {
@@ -19052,11 +21538,16 @@
},
"sass-embedded": {
"optional": true
+ },
+ "webpack": {
+ "optional": true
}
}
},
"node_modules/saucelabs": {
"version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz",
+ "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==",
"dev": true,
"dependencies": {
"https-proxy-agent": "^2.2.1"
@@ -19067,6 +21558,8 @@
},
"node_modules/saucelabs/node_modules/agent-base": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+ "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19078,6 +21571,8 @@
},
"node_modules/saucelabs/node_modules/debug": {
"version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19086,6 +21581,8 @@
},
"node_modules/saucelabs/node_modules/https-proxy-agent": {
"version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19097,23 +21594,16 @@
}
},
"node_modules/sax": {
- "version": "1.3.0",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
+ "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==",
"dev": true,
"license": "ISC"
},
- "node_modules/saxes": {
- "version": "5.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/schema-utils": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
+ "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19130,13 +21620,35 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/schema-utils/node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
"node_modules/select-hose": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
"dev": true,
"license": "MIT"
},
"node_modules/selenium-webdriver": {
"version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz",
+ "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -19149,27 +21661,11 @@
"node": ">= 6.9.0"
}
},
- "node_modules/selenium-webdriver/node_modules/glob": {
- "version": "7.2.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/selenium-webdriver/node_modules/rimraf": {
"version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -19181,6 +21677,8 @@
},
"node_modules/selenium-webdriver/node_modules/tmp": {
"version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
+ "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19190,8 +21688,34 @@
"node": ">=0.4.0"
}
},
+ "node_modules/selenium-webdriver/node_modules/xml2js": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
+ "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/selenium-webdriver/node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/selfsigned": {
"version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
+ "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19203,11 +21727,11 @@
}
},
"node_modules/semver": {
- "version": "7.6.0",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
"license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -19215,22 +21739,10 @@
"node": ">=10"
}
},
- "node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver/node_modules/yallist": {
- "version": "4.0.0",
- "license": "ISC"
- },
"node_modules/send": {
"version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19254,6 +21766,8 @@
},
"node_modules/send/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19262,16 +21776,45 @@
},
"node_modules/send/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true,
"license": "MIT"
},
+ "node_modules/send/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
+ "node_modules/send/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/serialize-javascript": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -19280,6 +21823,8 @@
},
"node_modules/serve-index": {
"version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19297,6 +21842,8 @@
},
"node_modules/serve-index/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19305,6 +21852,8 @@
},
"node_modules/serve-index/node_modules/depd": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -19313,6 +21862,8 @@
},
"node_modules/serve-index/node_modules/http-errors": {
"version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19327,29 +21878,29 @@
},
"node_modules/serve-index/node_modules/inherits": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
"dev": true,
"license": "ISC"
},
"node_modules/serve-index/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true,
"license": "MIT"
},
"node_modules/serve-index/node_modules/setprototypeof": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
"dev": true,
"license": "ISC"
},
- "node_modules/serve-index/node_modules/statuses": {
- "version": "1.5.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/serve-static": {
"version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19364,11 +21915,16 @@
},
"node_modules/set-blocking": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"dev": true,
"license": "ISC"
},
"node_modules/set-function-length": {
"version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
@@ -19384,6 +21940,8 @@
},
"node_modules/set-function-name": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19398,16 +21956,22 @@
},
"node_modules/setimmediate": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"dev": true,
"license": "MIT"
},
"node_modules/setprototypeof": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"dev": true,
"license": "ISC"
},
"node_modules/shallow-clone": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19450,6 +22014,9 @@
},
"node_modules/shebang-command": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
@@ -19460,6 +22027,9 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -19467,6 +22037,8 @@
},
"node_modules/shell-quote": {
"version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
"dev": true,
"license": "MIT",
"funding": {
@@ -19474,115 +22046,53 @@
}
},
"node_modules/side-channel": {
- "version": "1.0.4",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/signal-exit": {
- "version": "3.0.7",
- "license": "ISC"
- },
- "node_modules/sigstore": {
- "version": "1.9.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@sigstore/bundle": "^1.1.0",
- "@sigstore/protobuf-specs": "^0.2.0",
- "@sigstore/sign": "^1.0.0",
- "@sigstore/tuf": "^1.0.3",
- "make-fetch-happen": "^11.0.1"
- },
- "bin": {
- "sigstore": "bin/sigstore.js"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/sigstore/node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/sigstore/node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/sigstore/node_modules/lru-cache": {
- "version": "7.18.3",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
"license": "ISC",
"engines": {
- "node": ">=12"
- }
- },
- "node_modules/sigstore/node_modules/make-fetch-happen": {
- "version": "11.1.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
- "http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^10.0.0"
+ "node": ">=14"
},
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/sigstore/node_modules/minipass-fetch": {
- "version": "3.0.4",
+ "node_modules/sigstore": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz",
+ "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"dependencies": {
- "minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "@sigstore/bundle": "^2.3.2",
+ "@sigstore/core": "^1.0.0",
+ "@sigstore/protobuf-specs": "^0.3.2",
+ "@sigstore/sign": "^2.3.2",
+ "@sigstore/tuf": "^2.3.4",
+ "@sigstore/verify": "^1.2.1"
},
- "optionalDependencies": {
- "encoding": "^0.1.13"
- }
- },
- "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": {
- "version": "7.0.4",
- "dev": true,
- "license": "ISC",
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/simple-concat": {
@@ -19705,20 +22215,27 @@
"license": "MIT"
},
"node_modules/slash": {
- "version": "4.0.0",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
+ "node_modules/slashes": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
+ "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/slice-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -19736,6 +22253,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -19751,6 +22269,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -19759,8 +22278,18 @@
"node": ">=7.0.0"
}
},
+ "node_modules/slice-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/smart-buffer": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 6.0.0",
@@ -19768,7 +22297,9 @@
}
},
"node_modules/socket.io": {
- "version": "4.7.3",
+ "version": "4.7.5",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
+ "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19778,47 +22309,27 @@
"debug": "~4.3.2",
"engine.io": "~6.5.2",
"socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.4"
- },
- "engines": {
- "node": ">=10.2.0"
- }
- },
- "node_modules/socket.io-adapter": {
- "version": "2.5.5",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
- "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "~4.3.4",
- "ws": "~8.17.1"
- }
- },
- "node_modules/socket.io-adapter/node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.2.0"
+ }
+ },
+ "node_modules/socket.io-adapter": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
+ "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "~4.3.4",
+ "ws": "~8.17.1"
}
},
"node_modules/socket.io-parser": {
"version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+ "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19831,6 +22342,8 @@
},
"node_modules/sockjs": {
"version": "0.3.24",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
+ "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19841,6 +22354,8 @@
},
"node_modules/sockjs/node_modules/uuid": {
"version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -19851,6 +22366,7 @@
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ip-address": "^9.0.5",
@@ -19862,20 +22378,24 @@
}
},
"node_modules/socks-proxy-agent": {
- "version": "7.0.0",
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
+ "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.3",
- "socks": "^2.6.2"
+ "agent-base": "^7.1.1",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
},
"engines": {
- "node": ">= 10"
+ "node": ">= 14"
}
},
"node_modules/source-map": {
"version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -19883,7 +22403,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -19891,16 +22413,17 @@
}
},
"node_modules/source-map-loader": {
- "version": "4.0.1",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz",
+ "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "abab": "^2.0.6",
"iconv-lite": "^0.6.3",
"source-map-js": "^1.0.2"
},
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
@@ -19912,6 +22435,8 @@
},
"node_modules/source-map-support": {
"version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19921,6 +22446,8 @@
},
"node_modules/source-map-support/node_modules/source-map": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -19929,10 +22456,15 @@
},
"node_modules/sourcemap-codec": {
"version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "deprecated": "Please use @jridgewell/sourcemap-codec instead",
"license": "MIT"
},
"node_modules/spdx-correct": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -19940,13 +22472,28 @@
"spdx-license-ids": "^3.0.0"
}
},
+ "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
"node_modules/spdx-exceptions": {
- "version": "2.3.0",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
"dev": true,
"license": "CC-BY-3.0"
},
"node_modules/spdx-expression-parse": {
- "version": "3.0.1",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
+ "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19955,12 +22502,16 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.16",
+ "version": "3.0.20",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
+ "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
"dev": true,
"license": "CC0-1.0"
},
"node_modules/spdy": {
"version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19976,6 +22527,8 @@
},
"node_modules/spdy-transport": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20004,13 +22557,16 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
"integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"readable-stream": "^3.0.0"
}
},
"node_modules/sprintf-js": {
- "version": "1.0.3",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
"dev": true,
"license": "BSD-3-Clause"
},
@@ -20018,10 +22574,13 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/ssh-config/-/ssh-config-1.1.6.tgz",
"integrity": "sha512-ZPO9rECxzs5JIQ6G/2EfL1I9ho/BVZkx9HRKn8+0af7QgwAmumQ7XBFP1ggMyPMo+/tUbmv0HFdv4qifdO/9JA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/sshpk": {
"version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20044,8 +22603,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/sshpk/node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/ssri": {
- "version": "10.0.5",
+ "version": "10.0.6",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
+ "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -20055,20 +22623,14 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/ssri/node_modules/minipass": {
- "version": "7.0.4",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/statuses": {
- "version": "2.0.1",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.6"
}
},
"node_modules/stream-buffers": {
@@ -20085,16 +22647,25 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
"integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"duplexer2": "~0.1.0",
"readable-stream": "^2.0.2"
}
},
+ "node_modules/stream-combiner2/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/stream-combiner2/node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
@@ -20110,12 +22681,14 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
"license": "MIT"
},
"node_modules/stream-combiner2/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
@@ -20123,6 +22696,8 @@
},
"node_modules/streamroller": {
"version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
+ "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20134,10 +22709,45 @@
"node": ">=8.0"
}
},
+ "node_modules/streamroller/node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/streamroller/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "license": "MIT",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/streamroller/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
"node_modules/streamx": {
- "version": "2.18.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
- "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.19.0.tgz",
+ "integrity": "sha512-5z6CNR4gtkPbwlxyEqoDGDmWIzoNJqCBt4Eac1ICP9YaIT08ct712cFj0u1rx4F8luAuL+3Qc+RFIdI4OX00kg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20151,6 +22761,8 @@
},
"node_modules/string_decoder": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.2.0"
@@ -20158,6 +22770,9 @@
},
"node_modules/string-width": {
"version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -20171,6 +22786,8 @@
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20184,6 +22801,8 @@
},
"node_modules/string.prototype.trim": {
"version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20201,6 +22820,8 @@
},
"node_modules/string.prototype.trimend": {
"version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20214,6 +22835,8 @@
},
"node_modules/string.prototype.trimstart": {
"version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20230,6 +22853,8 @@
},
"node_modules/strip-ansi": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -20241,6 +22866,8 @@
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20252,6 +22879,8 @@
},
"node_modules/strip-bom": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20260,6 +22889,9 @@
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -20280,6 +22912,8 @@
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20289,27 +22923,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strong-log-transformer": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "duplexer": "^0.1.1",
- "minimist": "^1.2.0",
- "through": "^2.3.4"
- },
- "bin": {
- "sl-log-transformer": "bin/sl-log-transformer.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/superagent": {
"version": "8.1.2",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
"deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net",
+ "dev": true,
"license": "MIT",
"dependencies": {
"component-emitter": "^1.3.0",
@@ -20327,24 +22946,11 @@
"node": ">=6.4.0 <13 || >=14"
}
},
- "node_modules/superagent/node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/superagent/node_modules/formidable": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
"integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"dezalgo": "^1.0.4",
@@ -20356,20 +22962,10 @@
"url": "https://ko-fi.com/tunnckoCore/commissions"
}
},
- "node_modules/superagent/node_modules/mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/supports-color": {
"version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20381,6 +22977,8 @@
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20391,9 +22989,9 @@
}
},
"node_modules/swiper": {
- "version": "11.1.8",
- "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.8.tgz",
- "integrity": "sha512-sBFp7fA+IfZ/7BMcg8/JSEqDD1qZXBUyliT76yk3zIYVu2fMwFVAghhAJ9vBM5tJUtHW5qcD0pmeEGQs1EK14w==",
+ "version": "11.1.11",
+ "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.11.tgz",
+ "integrity": "sha512-077Aw3OrlZpkkBRf/6+44bGh/HZY/vsLEyate2db2KkJgYUIR5TvDgvvhcJtW/puXzw79w5KBc30DauEX6GZYQ==",
"funding": [
{
"type": "patreon",
@@ -20404,25 +23002,42 @@
"url": "http://opencollective.com/swiper"
}
],
+ "license": "MIT",
"engines": {
"node": ">= 4.7.0"
}
},
"node_modules/symbol-observable": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
+ "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10"
}
},
- "node_modules/symbol-tree": {
- "version": "3.2.4",
+ "node_modules/synckit": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz",
+ "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
},
"node_modules/tapable": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20431,6 +23046,9 @@
},
"node_modules/tar": {
"version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"chownr": "^2.0.0",
@@ -20459,7 +23077,7 @@
"bare-path": "^2.1.0"
}
},
- "node_modules/tar-fs/node_modules/tar-stream": {
+ "node_modules/tar-stream": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
"integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
@@ -20471,23 +23089,11 @@
"streamx": "^2.15.0"
}
},
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/tar/node_modules/fs-minipass": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"minipass": "^3.0.0"
@@ -20498,6 +23104,9 @@
},
"node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -20506,8 +23115,34 @@
"node": ">=8"
}
},
+ "node_modules/tar/node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/tar/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
"license": "ISC"
},
"node_modules/temp-dir": {
@@ -20528,80 +23163,16 @@
"license": "MIT",
"dependencies": {
"del": "^6.0.0",
- "is-stream": "^2.0.0",
- "temp-dir": "^2.0.0",
- "type-fest": "^0.16.0",
- "unique-string": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/tempy/node_modules/del": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/tempy/node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/tempy/node_modules/is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tempy/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "license": "MIT",
+ "is-stream": "^2.0.0",
+ "temp-dir": "^2.0.0",
+ "type-fest": "^0.16.0",
+ "unique-string": "^2.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/tempy/node_modules/type-fest": {
@@ -20618,7 +23189,9 @@
}
},
"node_modules/terser": {
- "version": "5.29.1",
+ "version": "5.31.6",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
+ "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -20636,6 +23209,8 @@
},
"node_modules/terser-webpack-plugin": {
"version": "5.3.10",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
+ "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20669,6 +23244,8 @@
},
"node_modules/terser-webpack-plugin/node_modules/ajv": {
"version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20684,6 +23261,8 @@
},
"node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
"version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -20692,11 +23271,15 @@
},
"node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
"node_modules/terser-webpack-plugin/node_modules/schema-utils": {
"version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20714,45 +23297,15 @@
},
"node_modules/terser/node_modules/commander": {
"version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true,
"license": "MIT"
},
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/test-exclude/node_modules/glob": {
- "version": "7.2.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/text-decoder": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz",
- "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz",
+ "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -20771,11 +23324,29 @@
},
"node_modules/text-table": {
"version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true,
"license": "MIT"
},
+ "node_modules/thingies": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
+ "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
+ "dev": true,
+ "license": "Unlicense",
+ "engines": {
+ "node": ">=10.18"
+ },
+ "peerDependencies": {
+ "tslib": "^2"
+ }
+ },
"node_modules/through": {
"version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/through2": {
@@ -20790,21 +23361,25 @@
},
"node_modules/thunky": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true,
"license": "MIT"
},
"node_modules/tmp": {
- "version": "0.0.33",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "os-tmpdir": "~1.0.2"
- },
"engines": {
- "node": ">=0.6.0"
+ "node": ">=14.14"
}
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20826,6 +23401,8 @@
},
"node_modules/toidentifier": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20843,40 +23420,58 @@
}
},
"node_modules/tough-cookie": {
- "version": "4.1.3",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=0.8"
}
},
- "node_modules/tough-cookie/node_modules/universalify": {
- "version": "0.2.0",
+ "node_modules/tough-cookie/node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 4.0.0"
+ "node": ">=6"
}
},
"node_modules/tr46": {
- "version": "2.1.0",
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.1.1"
- },
+ "license": "MIT"
+ },
+ "node_modules/tree-dump": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
+ "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": ">=8"
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
}
},
"node_modules/tree-kill": {
"version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
"license": "MIT",
"bin": {
"tree-kill": "cli.js"
@@ -20907,6 +23502,8 @@
},
"node_modules/ts-node": {
"version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20949,6 +23546,8 @@
},
"node_modules/tsconfig-paths": {
"version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20960,6 +23559,8 @@
},
"node_modules/tsconfig-paths/node_modules/json5": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20970,121 +23571,30 @@
}
},
"node_modules/tslib": {
- "version": "2.6.2",
- "license": "0BSD"
- },
- "node_modules/tsutils": {
- "version": "3.21.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tslib": "^1.8.1"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
- }
- },
- "node_modules/tsutils/node_modules/tslib": {
- "version": "1.14.1",
- "dev": true,
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
"license": "0BSD"
},
"node_modules/tuf-js": {
- "version": "1.1.7",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz",
+ "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tufjs/models": "1.0.4",
+ "@tufjs/models": "2.0.1",
"debug": "^4.3.4",
- "make-fetch-happen": "^11.1.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/tuf-js/node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/tuf-js/node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/tuf-js/node_modules/lru-cache": {
- "version": "7.18.3",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/tuf-js/node_modules/make-fetch-happen": {
- "version": "11.1.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
- "http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^10.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/tuf-js/node_modules/minipass-fetch": {
- "version": "3.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
+ "make-fetch-happen": "^13.0.1"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "encoding": "^0.1.13"
- }
- },
- "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": {
- "version": "7.0.4",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/tunnel-agent": {
"version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -21096,11 +23606,15 @@
},
"node_modules/tweetnacl": {
"version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
"dev": true,
"license": "Unlicense"
},
"node_modules/type-check": {
"version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21112,6 +23626,9 @@
},
"node_modules/type-fest": {
"version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
@@ -21122,6 +23639,8 @@
},
"node_modules/type-is": {
"version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21134,6 +23653,8 @@
},
"node_modules/typed-array-buffer": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21147,6 +23668,8 @@
},
"node_modules/typed-array-byte-length": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21165,6 +23688,8 @@
},
"node_modules/typed-array-byte-offset": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21184,6 +23709,8 @@
},
"node_modules/typed-array-length": {
"version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21203,6 +23730,8 @@
},
"node_modules/typed-assert": {
"version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
+ "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
"dev": true,
"license": "MIT"
},
@@ -21210,13 +23739,16 @@
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"is-typedarray": "^1.0.0"
}
},
"node_modules/typescript": {
- "version": "4.9.5",
+ "version": "5.4.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+ "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -21224,7 +23756,7 @@
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=14.17"
}
},
"node_modules/typescript-strict-plugin": {
@@ -21247,6 +23779,8 @@
},
"node_modules/typescript-strict-plugin/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21259,16 +23793,10 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/typescript-strict-plugin/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
"node_modules/typescript-strict-plugin/node_modules/chalk": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21281,6 +23809,8 @@
},
"node_modules/typescript-strict-plugin/node_modules/cliui": {
"version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -21291,6 +23821,8 @@
},
"node_modules/typescript-strict-plugin/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21300,85 +23832,58 @@
"node": ">=7.0.0"
}
},
- "node_modules/typescript-strict-plugin/node_modules/execa": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/typescript-strict-plugin/node_modules/get-stream": {
- "version": "5.2.0",
+ "node_modules/typescript-strict-plugin/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "license": "MIT"
},
"node_modules/typescript-strict-plugin/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/typescript-strict-plugin/node_modules/human-signals": {
- "version": "1.1.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.12.0"
- }
- },
- "node_modules/typescript-strict-plugin/node_modules/minimatch": {
- "version": "9.0.4",
+ "node_modules/typescript-strict-plugin/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=8"
}
},
- "node_modules/typescript-strict-plugin/node_modules/supports-color": {
- "version": "7.2.0",
+ "node_modules/typescript-strict-plugin/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-flag": "^4.0.0"
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/typescript-strict-plugin/node_modules/yargs": {
"version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21394,16 +23899,10 @@
"node": ">=10"
}
},
- "node_modules/typescript-strict-plugin/node_modules/yargs-parser": {
- "version": "20.2.9",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/ua-parser-js": {
- "version": "0.7.37",
+ "version": "0.7.38",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz",
+ "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==",
"dev": true,
"funding": [
{
@@ -21425,9 +23924,9 @@
}
},
"node_modules/uglify-js": {
- "version": "3.18.0",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz",
- "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==",
+ "version": "3.19.2",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz",
+ "integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==",
"dev": true,
"license": "BSD-2-Clause",
"optional": true,
@@ -21440,6 +23939,8 @@
},
"node_modules/unbox-primitive": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21460,11 +23961,16 @@
"license": "MIT"
},
"node_modules/undici-types": {
- "version": "5.26.5",
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -21473,6 +23979,8 @@
},
"node_modules/unicode-match-property-ecmascript": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21485,6 +23993,8 @@
},
"node_modules/unicode-match-property-value-ecmascript": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -21493,14 +24003,31 @@
},
"node_modules/unicode-property-aliases-ecmascript": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
+ "node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/unique-filename": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
+ "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -21512,6 +24039,8 @@
},
"node_modules/unique-slug": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
+ "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -21535,15 +24064,19 @@
}
},
"node_modules/universalify": {
- "version": "0.1.2",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 4.0.0"
+ "node": ">= 10.0.0"
}
},
"node_modules/unpipe": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -21554,13 +24087,16 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.13",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
"dev": true,
"funding": [
{
@@ -21578,8 +24114,8 @@
],
"license": "MIT",
"dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -21590,179 +24126,619 @@
},
"node_modules/uri-js": {
"version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
- "node_modules/url-parse": {
- "version": "1.5.10",
+ "node_modules/uri-js/node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/validate-npm-package-name": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
+ "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
+ "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.40",
+ "rollup": "^4.13.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "license": "MIT"
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
+ "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 0.4.0"
+ "node": ">=12"
}
},
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
+ "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
],
+ "dev": true,
"license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
+ "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
- "node_modules/v8-compile-cache-lib": {
- "version": "3.0.1",
+ "node_modules/vite/node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
+ "node_modules/vite/node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/validate-npm-package-name": {
- "version": "5.0.0",
+ "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "builtins": "^5.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=12"
}
},
- "node_modules/vary": {
- "version": "1.1.2",
+ "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": ">= 0.8"
+ "node": ">=12"
}
},
- "node_modules/verror": {
- "version": "1.10.0",
- "dev": true,
- "engines": [
- "node >=0.6.0"
+ "node_modules/vite/node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/vite": {
- "version": "4.5.3",
+ "node_modules/vite/node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "esbuild": "^0.18.10",
- "postcss": "^8.4.27",
- "rollup": "^3.27.1"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- },
- "peerDependencies": {
- "@types/node": ">= 14",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.4.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- }
+ "node": ">=12"
}
},
- "node_modules/void-elements": {
- "version": "2.0.1",
+ "node_modules/vite/node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=0.10.0"
+ "node": ">=12"
}
},
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
+ "node_modules/vite/node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/w3c-xmlserializer": {
- "version": "2.0.0",
+ "node_modules/vite/node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "dependencies": {
- "xml-name-validator": "^3.0.0"
+ "bin": {
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/watchpack": {
- "version": "2.4.0",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
+ "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21775,6 +24751,8 @@
},
"node_modules/wbuf": {
"version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21783,13 +24761,24 @@
},
"node_modules/wcwidth": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"license": "MIT",
"dependencies": {
"defaults": "^1.0.3"
}
},
+ "node_modules/weak-lru-cache": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz",
+ "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/webdriver-js-extender": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz",
+ "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21802,6 +24791,8 @@
},
"node_modules/webdriver-manager": {
"version": "12.1.9",
+ "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.9.tgz",
+ "integrity": "sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21826,6 +24817,8 @@
},
"node_modules/webdriver-manager/node_modules/ansi-regex": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -21834,14 +24827,31 @@
},
"node_modules/webdriver-manager/node_modules/ansi-styles": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/webdriver-manager/node_modules/array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/webdriver-manager/node_modules/chalk": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21855,32 +24865,65 @@
"node": ">=0.10.0"
}
},
- "node_modules/webdriver-manager/node_modules/glob": {
- "version": "7.2.3",
+ "node_modules/webdriver-manager/node_modules/del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
},
"engines": {
- "node": "*"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webdriver-manager/node_modules/globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/webdriver-manager/node_modules/ini": {
"version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true,
"license": "ISC"
},
+ "node_modules/webdriver-manager/node_modules/is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/webdriver-manager/node_modules/rimraf": {
"version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -21892,6 +24935,8 @@
},
"node_modules/webdriver-manager/node_modules/semver": {
"version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"license": "ISC",
"bin": {
@@ -21900,6 +24945,8 @@
},
"node_modules/webdriver-manager/node_modules/strip-ansi": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21911,41 +24958,66 @@
},
"node_modules/webdriver-manager/node_modules/supports-color": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/webdriver-manager/node_modules/xml2js": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
+ "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/webdriver-manager/node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=0.8.0"
+ "node": ">=4.0"
}
},
"node_modules/webidl-conversions": {
- "version": "6.1.0",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=10.4"
- }
+ "license": "BSD-2-Clause"
},
"node_modules/webpack": {
- "version": "5.90.3",
+ "version": "5.94.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
+ "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
+ "@webassemblyjs/ast": "^1.12.1",
+ "@webassemblyjs/wasm-edit": "^1.12.1",
+ "@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
+ "acorn-import-attributes": "^1.9.5",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
+ "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
+ "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
@@ -21953,7 +25025,7 @@
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.0",
+ "watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
@@ -21973,18 +25045,21 @@
}
},
"node_modules/webpack-dev-middleware": {
- "version": "6.1.2",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.3.0.tgz",
+ "integrity": "sha512-xD2qnNew+F6KwOGZR7kWdbIou/ud7cVqLEXeK1q0nHcNsX/u7ul/fSdlOTX4ntSL5FNFy7ZJJXbf0piF591JYw==",
"dev": true,
"license": "MIT",
"dependencies": {
"colorette": "^2.0.10",
- "memfs": "^3.4.12",
+ "memfs": "^4.6.0",
"mime-types": "^2.1.31",
+ "on-finished": "^2.4.1",
"range-parser": "^1.2.1",
"schema-utils": "^4.0.0"
},
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
@@ -22000,53 +25075,55 @@
}
},
"node_modules/webpack-dev-server": {
- "version": "4.15.1",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
+ "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/bonjour": "^3.5.9",
- "@types/connect-history-api-fallback": "^1.3.5",
- "@types/express": "^4.17.13",
- "@types/serve-index": "^1.9.1",
- "@types/serve-static": "^1.13.10",
- "@types/sockjs": "^0.3.33",
- "@types/ws": "^8.5.5",
+ "@types/bonjour": "^3.5.13",
+ "@types/connect-history-api-fallback": "^1.5.4",
+ "@types/express": "^4.17.21",
+ "@types/serve-index": "^1.9.4",
+ "@types/serve-static": "^1.15.5",
+ "@types/sockjs": "^0.3.36",
+ "@types/ws": "^8.5.10",
"ansi-html-community": "^0.0.8",
- "bonjour-service": "^1.0.11",
- "chokidar": "^3.5.3",
+ "bonjour-service": "^1.2.1",
+ "chokidar": "^3.6.0",
"colorette": "^2.0.10",
"compression": "^1.7.4",
"connect-history-api-fallback": "^2.0.0",
"default-gateway": "^6.0.3",
"express": "^4.17.3",
"graceful-fs": "^4.2.6",
- "html-entities": "^2.3.2",
+ "html-entities": "^2.4.0",
"http-proxy-middleware": "^2.0.3",
- "ipaddr.js": "^2.0.1",
- "launch-editor": "^2.6.0",
- "open": "^8.0.9",
- "p-retry": "^4.5.0",
- "rimraf": "^3.0.2",
- "schema-utils": "^4.0.0",
- "selfsigned": "^2.1.1",
+ "ipaddr.js": "^2.1.0",
+ "launch-editor": "^2.6.1",
+ "open": "^10.0.3",
+ "p-retry": "^6.2.0",
+ "rimraf": "^5.0.5",
+ "schema-utils": "^4.2.0",
+ "selfsigned": "^2.4.1",
"serve-index": "^1.9.1",
"sockjs": "^0.3.24",
"spdy": "^4.0.2",
- "webpack-dev-middleware": "^5.3.1",
- "ws": "^8.13.0"
+ "webpack-dev-middleware": "^7.1.0",
+ "ws": "^8.16.0"
},
"bin": {
"webpack-dev-server": "bin/webpack-dev-server.js"
},
"engines": {
- "node": ">= 12.13.0"
+ "node": ">= 18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "^4.37.0 || ^5.0.0"
+ "webpack": "^5.0.0"
},
"peerDependenciesMeta": {
"webpack": {
@@ -22057,64 +25134,87 @@
}
}
},
- "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": {
- "version": "5.3.4",
+ "node_modules/webpack-dev-server/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "colorette": "^2.0.10",
- "memfs": "^3.4.3",
- "mime-types": "^2.1.31",
- "range-parser": "^1.2.1",
- "schema-utils": "^4.0.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": ">= 12.13.0"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/webpack-dev-server/node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
+ "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@types/http-proxy": "^1.17.8",
+ "http-proxy": "^1.18.1",
+ "is-glob": "^4.0.1",
+ "is-plain-obj": "^3.0.0",
+ "micromatch": "^4.0.2"
+ },
"engines": {
- "node": ">=10.0.0"
+ "node": ">=12.0.0"
},
"peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
+ "@types/express": "^4.17.13"
},
"peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
+ "@types/express": {
"optional": true
}
}
},
+ "node_modules/webpack-dev-server/node_modules/rimraf": {
+ "version": "5.0.10",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
+ "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^10.3.7"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/webpack-merge": {
- "version": "5.9.0",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz",
+ "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==",
"dev": true,
"license": "MIT",
"dependencies": {
"clone-deep": "^4.0.1",
- "wildcard": "^2.0.0"
+ "flat": "^5.0.2",
+ "wildcard": "^2.0.1"
},
"engines": {
- "node": ">=10.0.0"
+ "node": ">=18.0.0"
}
},
"node_modules/webpack-sources": {
"version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -22123,6 +25223,8 @@
},
"node_modules/webpack-subresource-integrity": {
"version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz",
+ "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22143,9 +25245,10 @@
},
"node_modules/webpack/node_modules/ajv": {
"version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -22159,24 +25262,58 @@
},
"node_modules/webpack/node_modules/ajv-keywords": {
"version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"ajv": "^6.9.1"
}
},
+ "node_modules/webpack/node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/webpack/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/webpack/node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/webpack/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/webpack/node_modules/schema-utils": {
"version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
@@ -22192,6 +25329,8 @@
},
"node_modules/websocket-driver": {
"version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -22205,51 +25344,30 @@
},
"node_modules/websocket-extensions": {
"version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=0.8.0"
}
},
- "node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "iconv-lite": "0.4.24"
- }
- },
- "node_modules/whatwg-encoding/node_modules/iconv-lite": {
- "version": "0.4.24",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/whatwg-url": {
- "version": "8.7.0",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
"node_modules/which": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -22263,6 +25381,8 @@
},
"node_modules/which-boxed-primitive": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22278,11 +25398,15 @@
},
"node_modules/which-module": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"dev": true,
"license": "ISC"
},
"node_modules/which-typed-array": {
"version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22299,16 +25423,10 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/wide-align": {
- "version": "1.1.5",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
"node_modules/wildcard": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
+ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
"dev": true,
"license": "MIT"
},
@@ -22316,6 +25434,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz",
"integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"execa": "^4.0.2"
@@ -22327,51 +25446,14 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/windows-release/node_modules/execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/windows-release/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/windows-release/node_modules/human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "license": "Apache-2.0",
"engines": {
- "node": ">=8.12.0"
+ "node": ">=0.10.0"
}
},
"node_modules/wordwrap": {
@@ -22382,7 +25464,10 @@
"license": "MIT"
},
"node_modules/wrap-ansi": {
- "version": "7.0.0",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -22390,15 +25475,14 @@
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22415,6 +25499,8 @@
},
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22429,6 +25515,8 @@
},
"node_modules/wrap-ansi-cjs/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22438,8 +25526,18 @@
"node": ">=7.0.0"
}
},
+ "node_modules/wrap-ansi-cjs/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/wrap-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -22453,6 +25551,9 @@
},
"node_modules/wrap-ansi/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -22461,14 +25562,25 @@
"node": ">=7.0.0"
}
},
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/wrappy": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
"license": "ISC"
},
"node_modules/write-file-atomic": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
"integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
@@ -22477,18 +25589,25 @@
"typedarray-to-buffer": "^3.1.5"
}
},
+ "node_modules/write-file-atomic/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8.3.0"
+ "node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
+ "utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
@@ -22536,13 +25655,17 @@
"xml-js": "bin/cli.js"
}
},
- "node_modules/xml-name-validator": {
- "version": "3.0.0",
+ "node_modules/xml-js/node_modules/sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
"dev": true,
- "license": "Apache-2.0"
+ "license": "ISC"
},
"node_modules/xml2js": {
- "version": "0.4.23",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22553,18 +25676,25 @@
"node": ">=4.0.0"
}
},
- "node_modules/xmlbuilder": {
+ "node_modules/xml2js/node_modules/xmlbuilder": {
"version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4.0"
}
},
- "node_modules/xmlchars": {
- "version": "2.2.0",
+ "node_modules/xmlbuilder": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
+ "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0"
+ }
},
"node_modules/xpath": {
"version": "0.0.32",
@@ -22588,6 +25718,8 @@
},
"node_modules/y18n": {
"version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"license": "ISC",
"engines": {
@@ -22596,11 +25728,15 @@
},
"node_modules/yallist": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true,
"license": "ISC"
},
"node_modules/yargs": {
"version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -22617,7 +25753,19 @@
}
},
"node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs/node_modules/yargs-parser": {
"version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
"license": "ISC",
"engines": {
@@ -22637,6 +25785,8 @@
},
"node_modules/yn": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -22645,6 +25795,8 @@
},
"node_modules/yocto-queue": {
"version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -22654,12 +25806,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/zone.js": {
- "version": "0.13.3",
+ "node_modules/yoctocolors-cjs": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
+ "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "tslib": "^2.3.0"
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/zone.js": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
+ "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
+ "license": "MIT"
}
}
}
diff --git a/ui/package.json b/ui/package.json
index a5194f5d6bc..0e232477e3c 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -1,39 +1,39 @@
{
"name": "openems-ui",
- "version": "2024.8.0",
+ "version": "2024.9.0",
"license": "AGPL-3.0",
"private": true,
"dependencies": {
- "@angular/animations": "~16.2.12",
- "@angular/common": "~16.2.12",
- "@angular/core": "~16.2.12",
- "@angular/forms": "~16.2.12",
- "@angular/platform-browser": "~16.2.12",
- "@angular/platform-browser-dynamic": "~16.2.12",
- "@angular/router": "~16.2.12",
- "@angular/service-worker": "~16.2.12",
- "@capacitor-community/file-opener": "^1.0.5",
- "@capacitor/android": "5.7.7",
- "@capacitor/app": "^5.0.6",
- "@capacitor/core": "5.7.7",
- "@capacitor/filesystem": "^5.2.0",
- "@capacitor/ios": "5.7.7",
- "@capacitor/splash-screen": "^5.0.6",
+ "@angular/animations": "18.0.5",
+ "@angular/common": "18.0.5",
+ "@angular/core": "18.0.5",
+ "@angular/forms": "18.0.5",
+ "@angular/platform-browser": "18.0.5",
+ "@angular/platform-browser-dynamic": "18.0.5",
+ "@angular/router": "18.0.5",
+ "@angular/service-worker": "18.0.5",
+ "@capacitor-community/file-opener": "^6.0.0",
+ "@capacitor/android": "^6.0.0",
+ "@capacitor/app": "^6.0.0",
+ "@capacitor/core": "^6.0.0",
+ "@capacitor/filesystem": "^6.0.0",
+ "@capacitor/ios": "^6.0.0",
+ "@capacitor/splash-screen": "^6.0.0",
"@ionic-native/core": "^5.36.0",
"@ionic-native/file-opener": "^5.36.0",
"@ionic/angular": "^6.7.5",
- "@ionic/cli": "^7.1.6",
"@ngx-formly/core": "^6.3.0",
"@ngx-formly/ionic": "^6.3.6",
"@ngx-formly/schematics": "^6.3.0",
"@ngx-translate/core": "^15.0.0",
"@nodro7/angular-mydatepicker": "^0.14.0",
"capacitor-blob-writer": "^1.1.17",
- "capacitor-ios-autofill-save-password": "^2.0.0",
- "capacitor-secure-storage-plugin": "^0.9.0",
- "chart.js": "^4.4.3",
+ "capacitor-ios-autofill-save-password": "^3.0.0",
+ "capacitor-secure-storage-plugin": "^0.10.0",
+ "chart.js": "^4.4.4",
"chartjs-adapter-date-fns": "^3.0.0",
"chartjs-plugin-annotation": "^3.0.1",
+ "chartjs-plugin-datalabels": "^2.2.0",
"chartjs-plugin-zoom": "^2.0.1",
"classlist.js": "^1.1.20150312",
"compare-versions": "^6.1.1",
@@ -41,41 +41,49 @@
"date-fns": "^2.30.0",
"file-saver-es": "^2.0.5",
"ng2-charts": "4.1.1",
- "ngx-cookie-service": "^16.1.0",
- "ngx-device-detector": "^6.0.2",
+ "ngx-cookie-service": "18.0.0",
+ "ngx-device-detector": "^8.0.0",
"ngx-spinner": "^16.0.2",
"roboto-fontface": "^0.10.0",
"rxjs": "~6.6.7",
- "swiper": "11.1.8",
+ "swiper": "11.1.11",
"tslib": "^2.6.2",
"uuid": "^10.0.0",
- "zone.js": "~0.13.3"
+ "zone.js": "~0.14.7"
},
"devDependencies": {
- "@angular-devkit/build-angular": "^16.2.14",
- "@angular-eslint/builder": "^16.3.1",
- "@angular-eslint/eslint-plugin": "^16.3.1",
- "@angular-eslint/eslint-plugin-template": "^16.3.1",
- "@angular-eslint/template-parser": "^16.3.1",
- "@angular/cli": "^16.2.13",
- "@angular/compiler": "^16.2.12",
- "@angular/compiler-cli": "^16.2.12",
- "@angular/language-service": "^16.2.12",
- "@capacitor/assets": "^3.0.0",
- "@capacitor/cli": "6.1.1",
+ "@angular-devkit/build-angular": "^18.0.5",
+ "@angular-devkit/core": "18.0.5",
+ "@angular-devkit/schematics": "18.0.5",
+ "@angular-eslint/builder": "^18.1.0",
+ "@angular-eslint/eslint-plugin": "^18.1.0",
+ "@angular-eslint/eslint-plugin-template": "^18.1.0",
+ "@angular-eslint/template-parser": "^18.1.0",
+ "@angular/cli": "18.1.0",
+ "@angular/compiler": "18.0.5",
+ "@angular/compiler-cli": "18.0.5",
+ "@angular/language-service": "18.0.5",
+ "@capacitor/assets": "^3.0.5",
+ "@capacitor/cli": "6.1.2",
"@ionic/angular-toolkit": "^11.0.1",
- "@stylistic/eslint-plugin": "^2.4.0",
+ "@ionic/cli": "^7.2.0",
+ "@stylistic/eslint-plugin": "^2.7.2",
"@types/jasmine": "~4.3.6",
"@types/jasminewd2": "~2.0.13",
+ "@types/json-schema": "^7.0.15",
"@types/node": "^20.12.6",
+ "@types/qs": "^6.9.15",
+ "@types/range-parser": "^1.2.7",
+ "@types/send": "^0.17.4",
"@types/uuid": "^10.0.0",
- "@typescript-eslint/eslint-plugin": "^6.21.0",
- "@typescript-eslint/parser": "^6.21.0",
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
+ "@typescript-eslint/parser": "^7.0.0",
+ "@typescript-eslint/types": "^7.0.0",
"eslint": "^8.57.0",
"eslint-plugin-import": "2.29.1",
- "eslint-plugin-jsdoc": "48.2.3",
+ "eslint-plugin-jsdoc": "48.10.0",
"eslint-plugin-prefer-arrow": "1.2.3",
- "eslint-plugin-unused-imports": "^3.2.0",
+ "eslint-plugin-unused-imports": "^4.1.3",
"jasmine-core": "~4.5.0",
"jasmine-spec-reporter": "~7.0.0",
"karma": "~6.4.2",
@@ -86,7 +94,7 @@
"karma-jasmine-html-reporter": "^2.1.0",
"protractor": "~7.0.0",
"ts-node": "^10.9.2",
- "typescript": "~4.9.5",
+ "typescript": "~5.4.5",
"typescript-strict-plugin": "^2.4.4"
},
"scripts": {
diff --git a/ui/src/app/app-routing.module.ts b/ui/src/app/app-routing.module.ts
index cee2a75e5c7..b04097ce80b 100644
--- a/ui/src/app/app-routing.module.ts
+++ b/ui/src/app/app-routing.module.ts
@@ -1,146 +1,151 @@
-import { NgModule } from '@angular/core';
-import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
-import { environment } from 'src/environments';
+import { NgModule } from "@angular/core";
+import { PreloadAllModules, RouterModule, Routes } from "@angular/router";
+import { environment } from "src/environments";
+import { ChangelogViewComponent } from "./changelog/view/view";
+import { EdgeComponent } from "./edge/edge.component";
+import { OverviewComponent as AutarchyChartOverviewComponent } from "./edge/history/common/autarchy/overview/overview";
+import { DetailsOverviewComponent as ConsumptionDetailsOverviewComponent } from "./edge/history/common/consumption/details/details.overview";
+import { OverviewComponent as ConsumptionChartOverviewComponent } from "./edge/history/common/consumption/overview/overview";
+import { DetailsOverviewComponent as GridDetailsOverviewComponent } from "./edge/history/common/grid/details/details.overview";
+import { OverviewComponent as GridChartOverviewComponent } from "./edge/history/common/grid/overview/overview";
+import { DetailsOverviewComponent } from "./edge/history/common/production/details/details.overview";
+import { DetailsOverviewComponent as DigitalOutputDetailsOverviewComponent } from "./edge/history/Controller/Io/DigitalOutput/details/details.overview";
+import { OverviewComponent as ProductionChartOverviewComponent } from "./edge/history/common/production/overview/overview";
+import { OverviewComponent as SelfconsumptionChartOverviewComponent } from "./edge/history/common/selfconsumption/overview/overview";
+import { OverviewComponent as ChannelthresholdChartOverviewComponent } from "./edge/history/Controller/ChannelThreshold/overview/overview";
+import { OverviewComponent as GridOptimizedChargeChartOverviewComponent } from "./edge/history/Controller/Ess/GridoptimizedCharge/overview/overview";
+import { OverviewComponent as TimeOfUseTariffOverviewComponent } from "./edge/history/Controller/Ess/TimeOfUseTariff/overview/overview";
+import { DelayedSellToGridChartOverviewComponent } from "./edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component";
+import { HeatingelementChartOverviewComponent } from "./edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component";
+import { HeatPumpChartOverviewComponent } from "./edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component";
+import { HistoryComponent as EdgeHistoryComponent } from "./edge/history/history.component";
+import { HistoryDataService } from "./edge/history/historydataservice";
+import { HistoryParentComponent } from "./edge/history/historyparent.component";
+import { AsymmetricPeakshavingChartOverviewComponent } from "./edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component";
+import { SymmetricPeakshavingChartOverviewComponent } from "./edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component";
+import { TimeslotPeakshavingChartOverviewComponent } from "./edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component";
+import { StorageChartOverviewComponent } from "./edge/history/storage/storagechartoverview/storagechartoverview.component";
+import { LiveComponent as EdgeLiveComponent } from "./edge/live/live.component";
+import { LiveDataService } from "./edge/live/livedataservice";
+import { AlertingComponent as EdgeSettingsAlerting } from "./edge/settings/alerting/alerting.component";
+import { IndexComponent as EdgeSettingsAppIndex } from "./edge/settings/app/index.component";
+import { InstallAppComponent as EdgeSettingsAppInstall } from "./edge/settings/app/install.component";
+import { SingleAppComponent as EdgeSettingsAppSingle } from "./edge/settings/app/single.component";
+import { UpdateAppComponent as EdgeSettingsAppUpdate } from "./edge/settings/app/update.component";
+import { ChannelsComponent as EdgeSettingsChannelsComponent } from "./edge/settings/channels/channels.component";
+import { IndexComponent as EdgeSettingsComponentInstallIndexComponentComponent } from "./edge/settings/component/install/index.component";
+import { ComponentInstallComponent as EdgeSettingsComponentInstallComponentComponent } from "./edge/settings/component/install/install.component";
+import { IndexComponent as EdgeSettingsComponentUpdateIndexComponentComponent } from "./edge/settings/component/update/index.component";
+import { ComponentUpdateComponent as EdgeSettingsComponentUpdateComponentComponent } from "./edge/settings/component/update/update.component";
+import { JsonrpcTestComponent } from "./edge/settings/jsonrpctest/jsonrpctest";
+import { NetworkComponent as EdgeSettingsNetworkComponent } from "./edge/settings/network/network.component";
+import { PowerAssistantComponent } from "./edge/settings/powerassistant/powerassistant";
+import { AliasUpdateComponent } from "./edge/settings/profile/aliasupdate.component";
+import { ProfileComponent as EdgeSettingsProfileComponent } from "./edge/settings/profile/profile.component";
+import { SettingsComponent as EdgeSettingsComponent } from "./edge/settings/settings.component";
+import { SystemComponent as EdgeSettingsSystemComponent } from "./edge/settings/system/system.component";
+import { SystemExecuteComponent as EdgeSettingsSystemExecuteComponent } from "./edge/settings/systemexecute/systemexecute.component";
+import { SystemLogComponent as EdgeSettingsSystemLogComponent } from "./edge/settings/systemlog/systemlog.component";
+import { LoginComponent } from "./index/login.component";
+import { OverViewComponent } from "./index/overview/overview.component";
+import { UserComponent } from "./user/user.component";
+import { LoadingScreenComponent } from "./index/shared/loading-screen";
+import { CurrentAndVoltageOverviewComponent } from "./shared/components/edge/meter/currentVoltage/currentVoltage.overview";
+import { DataService } from "./shared/components/shared/dataservice";
+import { hasEdgeRole } from "./shared/guards/functional-guards";
+import { Role } from "./shared/type/role";
+import { OverviewComponent as DigitalOutputChartOverviewComponent } from "./edge/history/Controller/Io/DigitalOutput/overview/overview";
-import { ChangelogViewComponent } from './changelog/view/view';
-import { EdgeComponent } from './edge/edge.component';
-import { OverviewComponent as AutarchyChartOverviewComponent } from './edge/history/common/autarchy/overview/overview';
-import { DetailsOverviewComponent as ConsumptionDetailsOverviewComponent } from './edge/history/common/consumption/details/details.overview';
-import { OverviewComponent as ConsumptionChartOverviewComponent } from './edge/history/common/consumption/overview/overview';
-import { OverviewComponent as GridChartOverviewComponent } from './edge/history/common/grid/overview/overview';
-import { DetailsOverviewComponent } from './edge/history/common/production/details/details.overview';
-import { OverviewComponent as ProductionChartOverviewComponent } from './edge/history/common/production/overview/overview';
-import { OverviewComponent as SelfconsumptionChartOverviewComponent } from './edge/history/common/selfconsumption/overview/overview';
-import { OverviewComponent as ChannelthresholdChartOverviewComponent } from './edge/history/Controller/ChannelThreshold/overview/overview';
-import { OverviewComponent as TimeOfUseTariffOverviewComponent } from './edge/history/Controller/Ess/TimeOfUseTariff/overview/overview';
-import { OverviewComponent as GridOptimizedChargeChartOverviewComponent } from './edge/history/Controller/Ess/GridoptimizedCharge/overview/overview';
-import { DelayedSellToGridChartOverviewComponent } from './edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component';
-import { FixDigitalOutputChartOverviewComponent } from './edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component';
-import { HeatingelementChartOverviewComponent } from './edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component';
-import { HeatPumpChartOverviewComponent } from './edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component';
-import { HistoryComponent as EdgeHistoryComponent } from './edge/history/history.component';
-import { HistoryDataService } from './edge/history/historydataservice';
-import { HistoryParentComponent } from './edge/history/historyparent.component';
-import { AsymmetricPeakshavingChartOverviewComponent } from './edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component';
-import { SymmetricPeakshavingChartOverviewComponent } from './edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component';
-import { TimeslotPeakshavingChartOverviewComponent } from './edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component';
-import { SinglethresholdChartOverviewComponent } from './edge/history/singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component';
-import { StorageChartOverviewComponent } from './edge/history/storage/storagechartoverview/storagechartoverview.component';
-import { LiveComponent as EdgeLiveComponent } from './edge/live/live.component';
-import { LiveDataService } from './edge/live/livedataservice';
-import { AlertingComponent as EdgeSettingsAlerting } from './edge/settings/alerting/alerting.component';
-import { IndexComponent as EdgeSettingsAppIndex } from './edge/settings/app/index.component';
-import { InstallAppComponent as EdgeSettingsAppInstall } from './edge/settings/app/install.component';
-import { SingleAppComponent as EdgeSettingsAppSingle } from './edge/settings/app/single.component';
-import { UpdateAppComponent as EdgeSettingsAppUpdate } from './edge/settings/app/update.component';
-import { ChannelsComponent as EdgeSettingsChannelsComponent } from './edge/settings/channels/channels.component';
-import { IndexComponent as EdgeSettingsComponentInstallIndexComponentComponent } from './edge/settings/component/install/index.component';
-import { ComponentInstallComponent as EdgeSettingsComponentInstallComponentComponent } from './edge/settings/component/install/install.component';
-import { IndexComponent as EdgeSettingsComponentUpdateIndexComponentComponent } from './edge/settings/component/update/index.component';
-import { ComponentUpdateComponent as EdgeSettingsComponentUpdateComponentComponent } from './edge/settings/component/update/update.component';
-import { JsonrpcTestComponent } from './edge/settings/jsonrpctest/jsonrpctest';
-import { NetworkComponent as EdgeSettingsNetworkComponent } from './edge/settings/network/network.component';
-import { PowerAssistantComponent } from './edge/settings/powerassistant/powerassistant';
-import { AliasUpdateComponent } from './edge/settings/profile/aliasupdate.component';
-import { ProfileComponent as EdgeSettingsProfileComponent } from './edge/settings/profile/profile.component';
-import { SettingsComponent as EdgeSettingsComponent } from './edge/settings/settings.component';
-import { SystemComponent as EdgeSettingsSystemComponent } from './edge/settings/system/system.component';
-import { SystemExecuteComponent as EdgeSettingsSystemExecuteComponent } from './edge/settings/systemexecute/systemexecute.component';
-import { SystemLogComponent as EdgeSettingsSystemLogComponent } from './edge/settings/systemlog/systemlog.component';
-import { LoginComponent } from './index/login.component';
-import { OverViewComponent } from './index/overview/overview.component';
-import { LoadingScreenComponent } from './index/shared/loading-screen';
-import { DataService } from './shared/components/shared/dataservice';
-import { UserComponent } from './user/user.component';
-import { CurrentAndVoltageOverviewComponent } from './shared/components/edge/meter/currentVoltage/currentVoltage.overview';
-const routes: Routes = [
+export const routes: Routes = [
// TODO should be removed in the future
- { path: '', redirectTo: 'index', pathMatch: 'full' },
- { path: 'index', component: LoadingScreenComponent },
- { path: 'login', component: LoginComponent, data: { navbarTitle: environment.uiTitle } },
+ { path: "", redirectTo: "index", pathMatch: "full" },
+ { path: "index", component: LoadingScreenComponent },
+ { path: "login", component: LoginComponent, data: { navbarTitle: environment.uiTitle } },
- { path: 'overview', component: OverViewComponent },
+ { path: "overview", component: OverViewComponent },
- { path: 'user', component: UserComponent },
- { path: 'changelog', component: ChangelogViewComponent, data: { navbarTitleToBeTranslated: 'Menu.changelog' } },
+ { path: "user", component: UserComponent, data: { navbarTitleToBeTranslated: "Menu.user" } },
+ { path: "changelog", component: ChangelogViewComponent, data: { navbarTitleToBeTranslated: "Menu.changelog" } },
// Edge Pages
{
- path: 'device/:edgeId', component: EdgeComponent, children: [
- { path: '', redirectTo: 'live', pathMatch: 'full' },
+ path: "device/:edgeId", component: EdgeComponent, children: [
+ { path: "", redirectTo: "live", pathMatch: "full" },
{
- path: 'live', data: { navbarTitle: environment.uiTitle }, providers: [{
+ path: "live", data: { navbarTitle: environment.uiTitle }, providers: [{
useClass: LiveDataService,
provide: DataService,
}], component: EdgeLiveComponent,
},
{
- path: 'history', providers: [{
+ path: "history", providers: [{
useClass: HistoryDataService,
provide: DataService,
}], component: HistoryParentComponent, children: [
- { path: '', component: EdgeHistoryComponent },
+ { path: "", component: EdgeHistoryComponent },
// History Chart Pages
- { path: ':componentId/asymmetricpeakshavingchart', component: AsymmetricPeakshavingChartOverviewComponent },
- { path: ':componentId/delayedselltogridchart', component: DelayedSellToGridChartOverviewComponent },
- { path: ':componentId/fixdigitaloutputchart', component: FixDigitalOutputChartOverviewComponent },
- { path: ':componentId/gridOptimizedChargeChart', component: GridOptimizedChargeChartOverviewComponent },
- { path: ':componentId/heatingelementchart', component: HeatingelementChartOverviewComponent },
- { path: ':componentId/heatpumpchart', component: HeatPumpChartOverviewComponent },
- { path: ':componentId/scheduleChart', component: TimeOfUseTariffOverviewComponent },
- { path: ':componentId/singlethresholdchart', component: SinglethresholdChartOverviewComponent },
- { path: ':componentId/symmetricpeakshavingchart', component: SymmetricPeakshavingChartOverviewComponent },
- { path: ':componentId/timeslotpeakshavingchart', component: TimeslotPeakshavingChartOverviewComponent },
- { path: 'autarchychart', component: AutarchyChartOverviewComponent },
- { path: 'consumptionchart', component: ConsumptionChartOverviewComponent },
- { path: 'consumptionchart/:componentId', component: ConsumptionDetailsOverviewComponent },
- { path: 'consumptionchart/:componentId/currentVoltage', component: CurrentAndVoltageOverviewComponent },
- { path: 'gridchart', component: GridChartOverviewComponent },
- { path: 'productionchart', component: ProductionChartOverviewComponent },
- { path: 'productionchart/:componentId', component: DetailsOverviewComponent },
- { path: 'productionchart/:componentId/currentVoltage', component: CurrentAndVoltageOverviewComponent },
- { path: 'selfconsumptionchart', component: SelfconsumptionChartOverviewComponent },
- { path: 'storagechart', component: StorageChartOverviewComponent },
+ { path: ":componentId/asymmetricpeakshavingchart", component: AsymmetricPeakshavingChartOverviewComponent },
+ { path: ":componentId/delayedselltogridchart", component: DelayedSellToGridChartOverviewComponent },
+ { path: ":componentId/gridOptimizedChargeChart", component: GridOptimizedChargeChartOverviewComponent },
+ { path: ":componentId/heatingelementchart", component: HeatingelementChartOverviewComponent },
+ { path: ":componentId/heatpumpchart", component: HeatPumpChartOverviewComponent },
+ { path: ":componentId/scheduleChart", component: TimeOfUseTariffOverviewComponent },
+ { path: ":componentId/symmetricpeakshavingchart", component: SymmetricPeakshavingChartOverviewComponent },
+ { path: ":componentId/timeslotpeakshavingchart", component: TimeslotPeakshavingChartOverviewComponent },
+ { path: "autarchychart", component: AutarchyChartOverviewComponent },
+ { path: "consumptionchart", component: ConsumptionChartOverviewComponent },
+ { path: "consumptionchart/:componentId", component: ConsumptionDetailsOverviewComponent },
+ { path: "consumptionchart/:componentId/currentVoltage", component: CurrentAndVoltageOverviewComponent },
+ { path: "gridchart", component: GridChartOverviewComponent },
+ { path: "gridchart/:componentId", component: GridDetailsOverviewComponent },
+ { path: "gridchart/:componentId/currentVoltage", component: CurrentAndVoltageOverviewComponent },
+ { path: "productionchart", component: ProductionChartOverviewComponent },
+ { path: "productionchart/:componentId", component: DetailsOverviewComponent },
+ { path: "productionchart/:componentId/currentVoltage", component: CurrentAndVoltageOverviewComponent },
+ { path: "selfconsumptionchart", component: SelfconsumptionChartOverviewComponent },
+ { path: "storagechart", component: StorageChartOverviewComponent },
// Controllers
- { path: 'channelthresholdchart', component: ChannelthresholdChartOverviewComponent },
+ { path: "channelthresholdchart", component: ChannelthresholdChartOverviewComponent },
+ { path: "digitaloutputchart", component: DigitalOutputChartOverviewComponent },
+ { path: "digitaloutputchart/:componentId", component: DigitalOutputDetailsOverviewComponent },
],
},
- { path: 'settings', data: { navbarTitleToBeTranslated: 'Menu.edgeSettings' }, component: EdgeSettingsComponent },
- { path: 'settings/channels', component: EdgeSettingsChannelsComponent },
- { path: 'settings/component.install', component: EdgeSettingsComponentInstallIndexComponentComponent, data: { navbarTitleToBeTranslated: 'Edge.Config.Index.addComponents' } },
- { path: 'settings/component.install/:factoryId', component: EdgeSettingsComponentInstallComponentComponent, data: { navbarTitleToBeTranslated: 'Edge.Config.Index.addComponents' } },
- { path: 'settings/component.update', component: EdgeSettingsComponentUpdateIndexComponentComponent, data: { navbarTitleToBeTranslated: 'Edge.Config.Index.adjustComponents' } },
- { path: 'settings/component.update/:componentId', component: EdgeSettingsComponentUpdateComponentComponent, data: { navbarTitleToBeTranslated: 'Edge.Config.Index.adjustComponents' } },
- { path: 'settings/network', component: EdgeSettingsNetworkComponent, data: { navbarTitleToBeTranslated: 'Edge.Config.Index.networkConfiguration' } },
- { path: 'settings/profile', component: EdgeSettingsProfileComponent },
- { path: 'settings/profile/:componentId', component: AliasUpdateComponent },
- { path: 'settings/systemexecute', component: EdgeSettingsSystemExecuteComponent },
- { path: 'settings/systemlog', component: EdgeSettingsSystemLogComponent, data: { navbarTitleToBeTranslated: 'Edge.Config.Index.liveLog' } },
- { path: 'settings/system', component: EdgeSettingsSystemComponent, data: { navbarTitleToBeTranslated: 'Edge.Config.Index.SYSTEM' } },
- { path: 'settings/app', data: { navbarTitle: environment.edgeShortName + ' Apps' }, component: EdgeSettingsAppIndex },
- { path: 'settings/app/install/:appId', component: EdgeSettingsAppInstall },
- { path: 'settings/app/update/:appId', component: EdgeSettingsAppUpdate },
- { path: 'settings/app/single/:appId', component: EdgeSettingsAppSingle },
- { path: 'settings/alerting', component: EdgeSettingsAlerting },
- { path: 'settings/jsonrpctest', component: JsonrpcTestComponent },
- { path: 'settings/powerAssistant', component: PowerAssistantComponent, data: { navbarTitle: 'Power-Assistant' } },
+ { path: "settings", data: { navbarTitleToBeTranslated: "Menu.edgeSettings" }, component: EdgeSettingsComponent },
+ { path: "settings/channels", component: EdgeSettingsChannelsComponent, canActivate: [hasEdgeRole(Role.ADMIN)], data: { navbarTitle: "Channels" } },
+ { path: "settings/component.install", component: EdgeSettingsComponentInstallIndexComponentComponent, canActivate: [hasEdgeRole(Role.ADMIN)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.addComponents" } },
+ { path: "settings/component.install/:factoryId", component: EdgeSettingsComponentInstallComponentComponent, canActivate: [hasEdgeRole(Role.ADMIN)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.addComponents" } },
+ { path: "settings/component.update", component: EdgeSettingsComponentUpdateIndexComponentComponent, canActivate: [hasEdgeRole(Role.ADMIN)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.adjustComponents" } },
+ { path: "settings/component.update/:componentId", component: EdgeSettingsComponentUpdateComponentComponent, canActivate: [hasEdgeRole(Role.ADMIN)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.adjustComponents" } },
+ { path: "settings/network", component: EdgeSettingsNetworkComponent, canActivate: [hasEdgeRole(Role.INSTALLER)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.networkConfiguration" } },
+ { path: "settings/profile", component: EdgeSettingsProfileComponent, data: { navbarTitleToBeTranslated: "Edge.Config.Index.systemProfile" } },
+ { path: "settings/profile/:componentId", component: AliasUpdateComponent, data: { navbarTitleToBeTranslated: "Edge.Config.Index.renameComponents" } },
+ { path: "settings/systemexecute", component: EdgeSettingsSystemExecuteComponent, canActivate: [hasEdgeRole(Role.ADMIN)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.systemExecute" } },
+ { path: "settings/systemlog", component: EdgeSettingsSystemLogComponent, canActivate: [hasEdgeRole(Role.OWNER)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.liveLog" } },
+ { path: "settings/system", component: EdgeSettingsSystemComponent, canActivate: [hasEdgeRole(Role.OWNER)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.SYSTEM" } },
+ { path: "settings/app", canActivate: [hasEdgeRole(Role.OWNER)], data: { navbarTitle: environment.edgeShortName + " Apps" }, component: EdgeSettingsAppIndex },
+ { path: "settings/app/install/:appId", component: EdgeSettingsAppInstall, canActivate: [hasEdgeRole(Role.OWNER)] },
+ { path: "settings/app/update/:appId", component: EdgeSettingsAppUpdate, canActivate: [hasEdgeRole(Role.OWNER)] },
+ { path: "settings/app/single/:appId", component: EdgeSettingsAppSingle, canActivate: [hasEdgeRole(Role.OWNER)] },
+ { path: "settings/alerting", component: EdgeSettingsAlerting, canActivate: [hasEdgeRole(Role.OWNER)], data: { navbarTitleToBeTranslated: "Edge.Config.Index.alerting" } },
+ { path: "settings/jsonrpctest", component: JsonrpcTestComponent, data: { navbarTitle: "Jsonrpc Test" } },
+ { path: "settings/powerAssistant", component: PowerAssistantComponent, canActivate: [hasEdgeRole(Role.ADMIN)], data: { navbarTitle: "Power-Assistant" } },
],
},
- { path: 'demo', component: LoginComponent },
+ { path: "demo", component: LoginComponent },
// Fallback
- { path: '**', pathMatch: 'full', redirectTo: 'index' },
+ { path: "**", pathMatch: "full", redirectTo: "index" },
];
export const appRoutingProviders: any[] = [];
@NgModule({
imports: [
- RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }),
+ RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules, paramsInheritanceStrategy: "always" }),
],
exports: [RouterModule],
})
diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts
index 033478c4795..bcab88af3be 100644
--- a/ui/src/app/app.component.ts
+++ b/ui/src/app/app.component.ts
@@ -1,26 +1,25 @@
// @ts-strict-ignore
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { Meta, Title } from '@angular/platform-browser';
-import { NavigationEnd, Router } from '@angular/router';
-import { MenuController, ModalController, Platform, ToastController } from '@ionic/angular';
-import { Subject, Subscription } from 'rxjs';
-import { filter, takeUntil } from 'rxjs/operators';
-
-import { environment } from '../environments';
-import { GlobalRouteChangeHandler } from './shared/service/globalRouteChangeHandler';
-import { Service, UserPermission, Websocket } from './shared/shared';
-import { Language } from './shared/type/language';
-import { SplashScreen } from '@capacitor/splash-screen';
-import { AppService } from './app.service';
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { Meta, Title } from "@angular/platform-browser";
+import { NavigationEnd, Router } from "@angular/router";
+import { SplashScreen } from "@capacitor/splash-screen";
+import { MenuController, ModalController, Platform, ToastController } from "@ionic/angular";
+import { Subject, Subscription } from "rxjs";
+import { filter, takeUntil } from "rxjs/operators";
+import { environment } from "../environments";
+import { AppService } from "./app.service";
+import { GlobalRouteChangeHandler } from "./shared/service/globalRouteChangeHandler";
+import { Service, UserPermission, Websocket } from "./shared/shared";
+import { Language } from "./shared/type/language";
@Component({
- selector: 'app-root',
- templateUrl: 'app.component.html',
+ selector: "app-root",
+ templateUrl: "app.component.html",
})
export class AppComponent implements OnInit, OnDestroy {
public environment = environment;
- public backUrl: string | boolean = '/';
+ public backUrl: string | boolean = "/";
public enableSideMenu: boolean;
public isSystemLogEnabled: boolean = false;
@@ -55,8 +54,8 @@ export class AppComponent implements OnInit, OnDestroy {
this.subscription.add(
this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((e: NavigationEnd) => {
// Hide footer for history detail views
- const segments = e.url.split('/');
- this.isHistoryDetailView = segments.slice(0, -1).includes('history');
+ const segments = e.url.split("/");
+ this.isHistoryDetailView = segments.slice(0, -1).includes("history");
}));
this.appService.listen();
@@ -79,12 +78,12 @@ export class AppComponent implements OnInit, OnDestroy {
this.service.notificationEvent.pipe(takeUntil(this.ngUnsubscribe)).subscribe(async notification => {
const toast = await this.toastController.create({
message: notification.message,
- position: 'top',
+ position: "top",
duration: 2000,
buttons: [
{
- text: 'Ok',
- role: 'cancel',
+ text: "Ok",
+ role: "cancel",
},
],
});
@@ -93,9 +92,9 @@ export class AppComponent implements OnInit, OnDestroy {
this.platform.ready().then(() => {
// OEM colors exist only after ionic is initialized, so the notch color has to be set here
- const notchColor = getComputedStyle(document.documentElement).getPropertyValue('--ion-color-background');
+ const notchColor = getComputedStyle(document.documentElement).getPropertyValue("--ion-color-background");
this.meta.updateTag(
- { name: 'theme-color', content: notchColor },
+ { name: "theme-color", content: notchColor },
);
this.service.deviceHeight = this.platform.height();
this.service.deviceWidth = this.platform.width();
diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts
index 79a367d56af..8a191a18baa 100644
--- a/ui/src/app/app.module.ts
+++ b/ui/src/app/app.module.ts
@@ -1,35 +1,34 @@
-import { registerLocaleData } from '@angular/common';
-import { HttpClientModule } from '@angular/common/http';
-import localDE from '@angular/common/locales/de';
-import { ErrorHandler, LOCALE_ID, NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { RouteReuseStrategy } from '@angular/router';
-import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
-import { FORMLY_CONFIG } from '@ngx-formly/core';
-import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
-import { AngularMyDatePickerModule } from '@nodro7/angular-mydatepicker';
-import { CookieService } from 'ngx-cookie-service';
-
-import { AppRoutingModule } from './app-routing.module';
-import { AppComponent } from './app.component';
-import { AppService } from './app.service';
-import { CheckForUpdateService } from './appupdateservice';
-import { ChangelogModule } from './changelog/changelog.module';
-import { EdgeModule } from './edge/edge.module';
-import { SettingsModule as EdgeSettingsModule } from './edge/settings/settings.module';
-import { SystemLogComponent } from './edge/settings/systemlog/systemlog.component';
-import { IndexModule } from './index/index.module';
-import { RegistrationModule } from './registration/registration.module';
-import { StatusSingleComponent } from './shared/components/status/single/status.component';
-import { ChartOptionsPopoverComponent } from './shared/legacy/chartoptions/popover/popover.component';
-import { MyErrorHandler } from './shared/service/myerrorhandler';
-import { Pagination } from './shared/service/pagination';
-import { SharedModule } from './shared/shared.module';
-import { registerTranslateExtension } from './shared/translate.extension';
-import { Language, MyTranslateLoader } from './shared/type/language';
-import { UserModule } from './user/user.module';
-import { DeviceDetectorService } from 'ngx-device-detector';
+import { registerLocaleData } from "@angular/common";
+import { HttpClientModule } from "@angular/common/http";
+import localDE from "@angular/common/locales/de";
+import { ErrorHandler, LOCALE_ID, NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
+import { RouteReuseStrategy } from "@angular/router";
+import { IonicModule, IonicRouteStrategy } from "@ionic/angular";
+import { FORMLY_CONFIG } from "@ngx-formly/core";
+import { TranslateLoader, TranslateModule, TranslateService } from "@ngx-translate/core";
+import { AngularMyDatePickerModule } from "@nodro7/angular-mydatepicker";
+import { CookieService } from "ngx-cookie-service";
+import { DeviceDetectorService } from "ngx-device-detector";
+import { AppRoutingModule } from "./app-routing.module";
+import { AppComponent } from "./app.component";
+import { AppService } from "./app.service";
+import { CheckForUpdateService } from "./appupdateservice";
+import { ChangelogModule } from "./changelog/changelog.module";
+import { EdgeModule } from "./edge/edge.module";
+import { SettingsModule as EdgeSettingsModule } from "./edge/settings/settings.module";
+import { SystemLogComponent } from "./edge/settings/systemlog/systemlog.component";
+import { IndexModule } from "./index/index.module";
+import { RegistrationModule } from "./registration/registration.module";
+import { StatusSingleComponent } from "./shared/components/status/single/status.component";
+import { ChartOptionsPopoverComponent } from "./shared/legacy/chartoptions/popover/popover.component";
+import { MyErrorHandler } from "./shared/service/myerrorhandler";
+import { Pagination } from "./shared/service/pagination";
+import { SharedModule } from "./shared/shared.module";
+import { registerTranslateExtension } from "./shared/translate.extension";
+import { Language, MyTranslateLoader } from "./shared/type/language";
+import { UserModule } from "./user/user.module";
@NgModule({
declarations: [
diff --git a/ui/src/app/app.service.ts b/ui/src/app/app.service.ts
index 5bff76b82b5..e544f51838a 100644
--- a/ui/src/app/app.service.ts
+++ b/ui/src/app/app.service.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Injectable } from '@angular/core';
-import { App } from '@capacitor/app';
-import { Capacitor } from '@capacitor/core';
-import { Directory, Encoding, Filesystem } from '@capacitor/filesystem';
-import { FileOpener } from '@ionic-native/file-opener';
-import { AlertController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { saveAs } from 'file-saver-es';
-import { DeviceDetectorService, DeviceInfo } from 'ngx-device-detector';
-import { BehaviorSubject, Subject } from 'rxjs';
-import { environment } from 'src/environments';
-import { JsonrpcRequest } from './shared/jsonrpc/base';
+import { Injectable } from "@angular/core";
+import { App } from "@capacitor/app";
+import { Capacitor } from "@capacitor/core";
+import { Directory, Encoding, Filesystem } from "@capacitor/filesystem";
+import { FileOpener } from "@ionic-native/file-opener";
+import { AlertController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { saveAs } from "file-saver-es";
+import { DeviceDetectorService, DeviceInfo } from "ngx-device-detector";
+import { BehaviorSubject, Subject } from "rxjs";
+import { environment } from "src/environments";
+import { JsonrpcRequest } from "./shared/jsonrpc/base";
@Injectable()
export class AppService {
@@ -42,9 +42,9 @@ export class AppService {
public static getAppStoreLink(): string | null {
if (this.isMobile) {
switch (AppService.deviceInfo.os) {
- case 'iOS':
+ case "iOS":
return environment.links.APP.IOS;
- case 'Android':
+ case "Android":
return environment.links.APP.ANDROID;
default:
return null;
@@ -71,25 +71,25 @@ export class AppService {
});
FileOpener.open(result.uri, data.type)
- .then(() => console.log('File is opened'))
- .catch(e => console.log('Error opening file', e));
+ .then(() => console.log("File is opened"))
+ .catch(e => console.log("Error opening file", e));
- console.log('Wrote file', result.uri);
+ console.log("Wrote file", result.uri);
} catch (e) {
- console.error('Unable to write file', e);
+ console.error("Unable to write file", e);
}
};
}
public listen() {
// Don't use in web
- if (AppService.platform === 'web') {
+ if (AppService.platform === "web") {
return;
}
this.updateState();
- App.addListener('appStateChange', () => {
+ App.addListener("appStateChange", () => {
this.updateState();
});
}
@@ -128,7 +128,7 @@ export class AppService {
encoding: Encoding.UTF8,
});
- console.log('secrets:', contents);
+ console.log("secrets:", contents);
};
await writeSecretFile();
@@ -146,16 +146,16 @@ export class AppService {
header: header,
message: message,
buttons: [{
- text: this.translate.instant('INSTALLATION.BACK'),
- role: 'cancel',
+ text: this.translate.instant("INSTALLATION.BACK"),
+ role: "cancel",
},
{
- text: this.translate.instant('INSTALLATION.FORWARD'),
+ text: this.translate.instant("INSTALLATION.FORWARD"),
handler: () => {
successCallback();
},
}],
- cssClass: 'alertController',
+ cssClass: "alertController",
});
(await alert).present();
}
diff --git a/ui/src/app/appupdateservice.ts b/ui/src/app/appupdateservice.ts
index 7029043c8fa..c7c02533b42 100644
--- a/ui/src/app/appupdateservice.ts
+++ b/ui/src/app/appupdateservice.ts
@@ -4,23 +4,13 @@ import { SwUpdate } from "@angular/service-worker";
import { Service } from "./shared/shared";
@Injectable({
- providedIn: 'root',
+ providedIn: "root",
})
export class CheckForUpdateService {
constructor(private update: SwUpdate,
private service: Service,
) { }
-
- init() {
- setInterval(async () => {
- const updateFound = await this.update.checkForUpdate();
- console.log(updateFound ? 'A new version is available.' : 'Already on the latest version.');
- if (updateFound) {
- window.location.reload();
- }
- }, 10000);
- }
}
// Will be used in Future
@Injectable()
@@ -29,16 +19,18 @@ export class LogUpdateService {
constructor(updates: SwUpdate) {
updates.versionUpdates.subscribe(evt => {
switch (evt.type) {
- case 'VERSION_DETECTED':
+ case "VERSION_DETECTED":
console.log(`Downloading new app version: ${evt.version.hash}`);
break;
- case 'VERSION_READY':
+ case "VERSION_READY":
console.log(`Current app version: ${evt.currentVersion.hash}`);
console.log(`New app version ready for use: ${evt.latestVersion.hash}`);
break;
- case 'VERSION_INSTALLATION_FAILED':
+ case "VERSION_INSTALLATION_FAILED":
console.log(`Failed to install app version '${evt.version.hash}': ${evt.error}`);
break;
+ default:
+ break;
}
});
}
diff --git a/ui/src/app/changelog/changelog.module.ts b/ui/src/app/changelog/changelog.module.ts
index f59ea5869f9..b6a7a5810ae 100644
--- a/ui/src/app/changelog/changelog.module.ts
+++ b/ui/src/app/changelog/changelog.module.ts
@@ -1,7 +1,7 @@
-import { NgModule } from '@angular/core';
-import { SharedModule } from './../shared/shared.module';
-import { ChangelogComponent } from './view/component/changelog.component';
-import { ChangelogViewComponent } from './view/view';
+import { NgModule } from "@angular/core";
+import { SharedModule } from "./../shared/shared.module";
+import { ChangelogComponent } from "./view/component/changelog.component";
+import { ChangelogViewComponent } from "./view/view";
@NgModule({
imports: [
diff --git a/ui/src/app/changelog/view/component/changelog.component.ts b/ui/src/app/changelog/view/component/changelog.component.ts
index cb3e44f3df8..9bba2dcddae 100644
--- a/ui/src/app/changelog/view/component/changelog.component.ts
+++ b/ui/src/app/changelog/view/component/changelog.component.ts
@@ -1,14 +1,14 @@
-import { Component } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { environment } from 'src/environments';
-import { Service } from '../../../shared/shared';
-import { Role } from '../../../shared/type/role';
-import { Changelog } from './changelog.constants';
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { environment } from "src/environments";
+import { Service } from "../../../shared/shared";
+import { Role } from "../../../shared/type/role";
+import { Changelog } from "./changelog.constants";
@Component({
- selector: 'changelog',
- templateUrl: './changelog.component.html',
+ selector: "changelog",
+ templateUrl: "./changelog.component.html",
})
export class ChangelogComponent {
@@ -21,9 +21,9 @@ export class ChangelogComponent {
changes: Array
}[] = [
{
- version: 'x.y.z',
+ version: "x.y.z",
changes: [
- Changelog.link("OpenEMS Releases", 'https://github.com/OpenEMS/openems/releases'),
+ Changelog.link("OpenEMS Releases", "https://github.com/OpenEMS/openems/releases"),
],
},
];
diff --git a/ui/src/app/changelog/view/component/changelog.constants.ts b/ui/src/app/changelog/view/component/changelog.constants.ts
index e2c21860448..99de881dd8b 100644
--- a/ui/src/app/changelog/view/component/changelog.constants.ts
+++ b/ui/src/app/changelog/view/component/changelog.constants.ts
@@ -2,10 +2,10 @@ import { Role } from "src/app/shared/type/role";
export class Changelog {
- public static readonly UI_VERSION = "2024.8.0";
+ public static readonly UI_VERSION = "2024.9.0";
public static product(...products: Product[]) {
- return products.map(product => Changelog.link(product.name, product.url)).join(", ") + '. ';
+ return products.map(product => Changelog.link(product.name, product.url)).join(", ") + ". ";
}
public static app(app: App, ...names: string[]) {
@@ -15,7 +15,7 @@ export class Changelog {
}
public static openems(version: string) {
- return 'Update auf OpenEMS Version ' + version + '. Mehr Details auf ' + Changelog.link('Github', 'https://github.com/OpenEMS/openems/releases/tag/' + version);
+ return "Update auf OpenEMS Version " + version + ". Mehr Details auf " + Changelog.link("Github", "https://github.com/OpenEMS/openems/releases/tag/" + version);
}
public static openemsComponent(openemsComponent: OpenemsComponent, change: string) {
@@ -23,18 +23,18 @@ export class Changelog {
}
public static library(...libraries: Library[]) {
- return 'Aktualisierung externer Programmbibliotheken: ' + libraries.map(library => library.name).join(", ");
+ return "Aktualisierung externer Programmbibliotheken: " + libraries.map(library => library.name).join(", ");
}
public static link(title: string, url: string) {
- return '' + title + '';
+ return "" + title + "";
}
}
export class Product {
- public static readonly OPENEMS_EDGE = new Product('OpenEMS Edge', 'https://github.com/OpenEMS/openems');
- public static readonly OPENEMS_UI = new Product('OpenEMS Edge', 'https://github.com/OpenEMS/openems');
- public static readonly OPENEMS_BACKEND = new Product('OpenEMS Edge', 'https://github.com/OpenEMS/openems');
+ public static readonly OPENEMS_EDGE = new Product("OpenEMS Edge", "https://github.com/OpenEMS/openems");
+ public static readonly OPENEMS_UI = new Product("OpenEMS Edge", "https://github.com/OpenEMS/openems");
+ public static readonly OPENEMS_BACKEND = new Product("OpenEMS Edge", "https://github.com/OpenEMS/openems");
// private to disallow creating other instances of this type
private constructor(public readonly name: string, public readonly url: string) {
@@ -48,8 +48,8 @@ export class App {
}
export class OpenemsComponent {
- public static readonly PQ_PLUS_ZAEHLER = new OpenemsComponent('PQ-Plus Zähler', 'https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.meter.pqplus');
- public static readonly SDM630_ZAEHLER = new OpenemsComponent('SDM 630 Zähler', 'https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.meter.microcare.sdm630');
+ public static readonly PQ_PLUS_ZAEHLER = new OpenemsComponent("PQ-Plus Zähler", "https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.meter.pqplus");
+ public static readonly SDM630_ZAEHLER = new OpenemsComponent("SDM 630 Zähler", "https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.meter.microcare.sdm630");
// private to disallow creating other instances of this type
private constructor(public readonly name: string, public readonly url: string) {
@@ -58,49 +58,49 @@ export class OpenemsComponent {
export class Library {
// Java
- public static readonly APACHE_FELIX_FILEINSTALL = new Library('Apache Felix File Install', 'org.apache.felix..fileinstall');
- public static readonly APACHE_FELIX_FRAMEWORK = new Library('Apache Felix Framework', 'org.apache.felix.framework');
- public static readonly APACHE_FELIX_HTTP_JETTY = new Library('Apache Felix HTTP Jetty', 'org.apache.felix.http.jetty');
- public static readonly APACHE_FELIX_INVENTORY = new Library('Apache Felix Inventory', 'org.apache.felix.inventory');
- public static readonly APACHE_FELIX_METATYPE = new Library('Apache Felix MetaType', 'org.apache.felix.metatype');
- public static readonly APACHE_FELIX_SCR = new Library('Apache Felix SCR', 'org.apache.felix.scr');
- public static readonly APACHE_FELIX_WEBCONSOLE = new Library('Apache Felix Webconsole', 'org.apache.felix.webconsole');
- public static readonly APACHE_FELIX_CONFIGADMIN = new Library('Apache Felix Configuration Admin', 'org.apache.felix.configadmin');
- public static readonly CHARGETIME_OCPP = new Library('Open Charge Alliance Java OCPP', 'eu.chargetime.ocpp'); // https://github.com/ChargeTimeEU/Java-OCA-OCPP
- public static readonly ECLIPSE_OSGI = new Library('Eclipse OSGi', 'org.eclipse.osgi');
- public static readonly FASTEXCEL = new Library('fastexcel', 'fastexcel');
- public static readonly GRADLE = new Library('Gradle', 'gradle');
- public static readonly GUAVA = new Library('Guava', 'com.google.guava');
- public static readonly GSON = new Library('GSON', 'com.google.gson');
- public static readonly HIKARI_CP = new Library('HikariCP', 'hikaricp');
- public static readonly INFLUXDB = new Library('influxdb-java', 'influxdb-java');
- public static readonly JNA = new Library('JNA', 'net.java.dev.jna');
- public static readonly JAVA_WEBSOCKET = new Library('Java-WebSocket', 'org.java-websocket');
- public static readonly RETROFIT = new Library('Retrofit', 'com.squareup.retrofit');
- public static readonly MOSHI = new Library('Moshi', 'com.squareup.moshi');
- public static readonly MSGPACK = new Library('MsgPack', 'org.msgpack');
- public static readonly PAX_LOGGING = new Library('PAX Logging', 'org.ops4j.pax.logging');
- public static readonly OSGI_UTIL_FUNCTION = new Library('org.osgi.util.function', 'org.osgi.util.function');
- public static readonly OSGI_UTIL_PROMISE = new Library('org.osgi.util.promise', 'org.osgi.util.promise');
- public static readonly OSGI_SERVICE_JDBC = new Library('org.osgi.service.jdbc', 'org.osgi.service.jdbc');
- public static readonly POSTGRESQL = new Library('Postgresql', 'org.postgresql');
- public static readonly SLF4J = new Library('SLF4j', 'org.slf4j');
- public static readonly RRD4J = new Library('RRD4j', 'org.rrd4j');
- public static readonly OKHTTP = new Library('OkHttp', 'com.squareup.okhttp3');
- public static readonly OKIO = new Library('Okio', 'com.squareup.okio');
+ public static readonly APACHE_FELIX_FILEINSTALL = new Library("Apache Felix File Install", "org.apache.felix..fileinstall");
+ public static readonly APACHE_FELIX_FRAMEWORK = new Library("Apache Felix Framework", "org.apache.felix.framework");
+ public static readonly APACHE_FELIX_HTTP_JETTY = new Library("Apache Felix HTTP Jetty", "org.apache.felix.http.jetty");
+ public static readonly APACHE_FELIX_INVENTORY = new Library("Apache Felix Inventory", "org.apache.felix.inventory");
+ public static readonly APACHE_FELIX_METATYPE = new Library("Apache Felix MetaType", "org.apache.felix.metatype");
+ public static readonly APACHE_FELIX_SCR = new Library("Apache Felix SCR", "org.apache.felix.scr");
+ public static readonly APACHE_FELIX_WEBCONSOLE = new Library("Apache Felix Webconsole", "org.apache.felix.webconsole");
+ public static readonly APACHE_FELIX_CONFIGADMIN = new Library("Apache Felix Configuration Admin", "org.apache.felix.configadmin");
+ public static readonly CHARGETIME_OCPP = new Library("Open Charge Alliance Java OCPP", "eu.chargetime.ocpp"); // https://github.com/ChargeTimeEU/Java-OCA-OCPP
+ public static readonly ECLIPSE_OSGI = new Library("Eclipse OSGi", "org.eclipse.osgi");
+ public static readonly FASTEXCEL = new Library("fastexcel", "fastexcel");
+ public static readonly GRADLE = new Library("Gradle", "gradle");
+ public static readonly GUAVA = new Library("Guava", "com.google.guava");
+ public static readonly GSON = new Library("GSON", "com.google.gson");
+ public static readonly HIKARI_CP = new Library("HikariCP", "hikaricp");
+ public static readonly INFLUXDB = new Library("influxdb-java", "influxdb-java");
+ public static readonly JNA = new Library("JNA", "net.java.dev.jna");
+ public static readonly JAVA_WEBSOCKET = new Library("Java-WebSocket", "org.java-websocket");
+ public static readonly RETROFIT = new Library("Retrofit", "com.squareup.retrofit");
+ public static readonly MOSHI = new Library("Moshi", "com.squareup.moshi");
+ public static readonly MSGPACK = new Library("MsgPack", "org.msgpack");
+ public static readonly PAX_LOGGING = new Library("PAX Logging", "org.ops4j.pax.logging");
+ public static readonly OSGI_UTIL_FUNCTION = new Library("org.osgi.util.function", "org.osgi.util.function");
+ public static readonly OSGI_UTIL_PROMISE = new Library("org.osgi.util.promise", "org.osgi.util.promise");
+ public static readonly OSGI_SERVICE_JDBC = new Library("org.osgi.service.jdbc", "org.osgi.service.jdbc");
+ public static readonly POSTGRESQL = new Library("Postgresql", "org.postgresql");
+ public static readonly SLF4J = new Library("SLF4j", "org.slf4j");
+ public static readonly RRD4J = new Library("RRD4j", "org.rrd4j");
+ public static readonly OKHTTP = new Library("OkHttp", "com.squareup.okhttp3");
+ public static readonly OKIO = new Library("Okio", "com.squareup.okio");
// UI
- public static readonly ANGULAR = new Library('Angular', 'angular');
- public static readonly D3 = new Library('d3', 'd3');
- public static readonly DATE_FNS = new Library('date-fns', 'date-fns'); // https://date-fns.org/
- public static readonly IONIC = new Library('Ionic', 'ionic');
- public static readonly MYDATEPICKER = new Library('MyDatePicker', 'mydatepicker');
- public static readonly NG2_CHARTS = new Library('ng2-charts', 'ng2-charts');
- public static readonly NGX_COOKIE_SERVICE = new Library('ngx-cookie-service', 'ngx-cookie-service');
- public static readonly NGX_FORMLY = new Library('ngx-formly', 'ngx-formly');
- public static readonly NGX_SPINNER = new Library('ngx-spinner', 'ngx-spinner');
- public static readonly RXJS = new Library('RxJs', 'rxjs');
- public static readonly UUID = new Library('UUID', 'uuid');
+ public static readonly ANGULAR = new Library("Angular", "angular");
+ public static readonly D3 = new Library("d3", "d3");
+ public static readonly DATE_FNS = new Library("date-fns", "date-fns"); // https://date-fns.org/
+ public static readonly IONIC = new Library("Ionic", "ionic");
+ public static readonly MYDATEPICKER = new Library("MyDatePicker", "mydatepicker");
+ public static readonly NG2_CHARTS = new Library("ng2-charts", "ng2-charts");
+ public static readonly NGX_COOKIE_SERVICE = new Library("ngx-cookie-service", "ngx-cookie-service");
+ public static readonly NGX_FORMLY = new Library("ngx-formly", "ngx-formly");
+ public static readonly NGX_SPINNER = new Library("ngx-spinner", "ngx-spinner");
+ public static readonly RXJS = new Library("RxJs", "rxjs");
+ public static readonly UUID = new Library("UUID", "uuid");
// private to disallow creating other instances of this type
private constructor(public readonly name: string, public readonly url: string) {
diff --git a/ui/src/app/changelog/view/view.html b/ui/src/app/changelog/view/view.html
index ee8a40dc029..2746d025db1 100644
--- a/ui/src/app/changelog/view/view.html
+++ b/ui/src/app/changelog/view/view.html
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/changelog/view/view.ts b/ui/src/app/changelog/view/view.ts
index d196a7a4856..7a08765ad46 100644
--- a/ui/src/app/changelog/view/view.ts
+++ b/ui/src/app/changelog/view/view.ts
@@ -1,7 +1,7 @@
import { Component } from "@angular/core";
@Component({
- selector: 'changelogViewComponent',
- templateUrl: './view.html',
+ selector: "changelogViewComponent",
+ templateUrl: "./view.html",
})
export class ChangelogViewComponent { }
diff --git a/ui/src/app/edge/edge.component.ts b/ui/src/app/edge/edge.component.ts
index 8f6f8c7e965..fdeeebc3a3c 100644
--- a/ui/src/app/edge/edge.component.ts
+++ b/ui/src/app/edge/edge.component.ts
@@ -4,7 +4,6 @@ import { ActivatedRoute, Router } from "@angular/router";
import { SubscribeEdgesRequest } from "src/app/shared/jsonrpc/request/subscribeEdgesRequest";
import { ChannelAddress, Edge, Service, Websocket } from "src/app/shared/shared";
-
/*** This component is needed as a routing parent and acts as a transit station without being displayed.*/
@Component({
selector: "edge",
@@ -31,7 +30,7 @@ export class EdgeComponent implements OnInit, OnDestroy {
public ngOnInit(): void {
this.activatedRoute.params.subscribe((params) => {
// Set CurrentEdge in Metadata
- const edgeId = params['edgeId'];
+ const edgeId = params["edgeId"];
this.service.updateCurrentEdge(edgeId).then((edge) => {
this.edge = edge;
@@ -40,12 +39,12 @@ export class EdgeComponent implements OnInit, OnDestroy {
.then(() => {
// Subscribe on these channels for the state in HeaderComponent
- edge.subscribeChannels(this.websocket, '', [
- new ChannelAddress('_sum', 'State'),
+ edge.subscribeChannels(this.websocket, "", [
+ new ChannelAddress("_sum", "State"),
]);
});
}).catch(() => {
- this.router.navigate(['index']);
+ this.router.navigate(["index"]);
});
});
}
diff --git a/ui/src/app/edge/edge.module.ts b/ui/src/app/edge/edge.module.ts
index 14c27cb4243..38a9176e4a1 100644
--- a/ui/src/app/edge/edge.module.ts
+++ b/ui/src/app/edge/edge.module.ts
@@ -1,8 +1,8 @@
-import { HistoryModule } from './history/history.module';
-import { LiveModule } from './live/live.module';
-import { NgModule } from '@angular/core';
-import { SharedModule } from './../shared/shared.module';
-import { EdgeComponent } from './edge.component';
+import { NgModule } from "@angular/core";
+import { SharedModule } from "./../shared/shared.module";
+import { EdgeComponent } from "./edge.component";
+import { HistoryModule } from "./history/history.module";
+import { LiveModule } from "./live/live.module";
@NgModule({
declarations: [
diff --git a/ui/src/app/edge/history/Controller/ChannelThreshold/chart/totalchart.component.ts b/ui/src/app/edge/history/Controller/ChannelThreshold/chart/totalchart.component.ts
index 56270897edd..29658f87838 100644
--- a/ui/src/app/edge/history/Controller/ChannelThreshold/chart/totalchart.component.ts
+++ b/ui/src/app/edge/history/Controller/ChannelThreshold/chart/totalchart.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, Utils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, EdgeConfig } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
@Component({
- selector: 'totalChart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "totalChart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class TotalChartComponent extends AbstractHistoryChart {
@@ -20,9 +20,9 @@ export class TotalChartComponent extends AbstractHistoryChart {
const input: HistoryUtils.InputChannel[] = [];
for (const controllerId of controller) {
- const powerChannel = ChannelAddress.fromString(config.getComponentProperties(controllerId)['outputChannelAddress']);
+ const powerChannel = ChannelAddress.fromString(config.getComponentProperties(controllerId)["outputChannelAddress"]);
components[controllerId] = powerChannel.channelId;
- input.push({ name: controllerId, powerChannel: powerChannel, energyChannel: new ChannelAddress(controllerId, 'CumulatedActiveTime') });
+ input.push({ name: controllerId, powerChannel: powerChannel, energyChannel: new ChannelAddress(controllerId, "CumulatedActiveTime") });
}
return {
@@ -31,14 +31,14 @@ export class TotalChartComponent extends AbstractHistoryChart {
const output: HistoryUtils.DisplayValue[] = [];
- const colors: string[] = ['rgb(0,0,139)', 'rgb(0,191,255)', 'rgb(0,0,56)', 'rgb(77,77,174)'];
+ const colors: string[] = ["rgb(0,0,139)", "rgb(0,191,255)", "rgb(0,0,56)", "rgb(77,77,174)"];
for (let i = 0; i < controller.length; i++) {
const controllerId = controller[i];
output.push({
name: components[controllerId] ?? controllerId,
nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyQueryResponse?.result.data[controllerId + '/CumulatedActiveTime'] ?? null;
+ return energyQueryResponse?.result.data[controllerId + "/CumulatedActiveTime"] ?? null;
},
converter: () => {
@@ -54,11 +54,11 @@ export class TotalChartComponent extends AbstractHistoryChart {
return output;
},
tooltip: {
- formatNumber: '1.0-0',
+ formatNumber: "1.0-0",
},
yAxes: [{
- unit: YAxisTitle.RELAY,
- position: 'left',
+ unit: YAxisType.RELAY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}],
};
diff --git a/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.html b/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.html
index 79d645191eb..17aa513987c 100644
--- a/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.html
+++ b/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.html
@@ -5,4 +5,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.ts b/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.ts
index e9c42616532..54403badbeb 100644
--- a/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.ts
+++ b/ui/src/app/edge/history/Controller/ChannelThreshold/flat/flat.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
+import { Component } from "@angular/core";
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { Converter } from 'src/app/shared/components/shared/converter';
-import { ChannelAddress, EdgeConfig } from 'src/app/shared/shared';
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { Converter } from "src/app/shared/components/shared/converter";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
@Component({
- selector: 'channelthresholdWidget',
- templateUrl: './flat.html',
+ selector: "channelthresholdWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -20,14 +20,14 @@ export class FlatComponent extends AbstractFlatWidget {
protected override getChannelAddresses(): ChannelAddress[] {
- this.controllers = this.config.getComponentsByFactory('Controller.ChannelThreshold').concat(this.config.getComponentsImplementingNature('io.openems.impl.controller.channelthreshold.ChannelThresholdController'));
+ this.controllers = this.config.getComponentsByFactory("Controller.ChannelThreshold").concat(this.config.getComponentsImplementingNature("io.openems.impl.controller.channelthreshold.ChannelThresholdController"));
const channelAddresses: ChannelAddress[] = [];
for (const controller of this.controllers) {
- const output: ChannelAddress | null = ChannelAddress.fromString(controller.properties['outputChannelAddress']);
+ const output: ChannelAddress | null = ChannelAddress.fromString(controller.properties["outputChannelAddress"]);
this.displayName.set(controller.id, this.getDisplayName(controller, output));
- channelAddresses.push(new ChannelAddress(controller.id, 'CumulatedActiveTime'));
+ channelAddresses.push(new ChannelAddress(controller.id, "CumulatedActiveTime"));
}
return channelAddresses;
}
diff --git a/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.html b/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.html
index e761c780138..5c47abc06bf 100644
--- a/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.html
+++ b/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.html
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.ts b/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.ts
index 8ff3f52f7cd..5d6f53c8e92 100644
--- a/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.ts
+++ b/ui/src/app/edge/history/Controller/ChannelThreshold/overview/overview.ts
@@ -2,7 +2,7 @@ import { Component } from "@angular/core";
import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
@Component({
- selector: 'overview',
- templateUrl: './overview.html',
+ selector: "overview",
+ templateUrl: "./overview.html",
})
export class OverviewComponent extends AbstractHistoryChartOverview { }
diff --git a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/chart.ts b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/chart.ts
index f016859e52f..88a6d60c838 100644
--- a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/chart.ts
+++ b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/chart.ts
@@ -1,86 +1,86 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { ChartAxis, HistoryUtils, Utils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, EdgeConfig } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
@Component({
- selector: 'gridOptimizedChargeChart',
- templateUrl: '../../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "gridOptimizedChargeChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
})
export class GridOptimizedChargeChartComponent extends AbstractHistoryChart {
public static getChartData(component: EdgeConfig.Component, translate: TranslateService): HistoryUtils.ChartData {
return {
input: [
{
- name: 'DelayChargeMaximumChargeLimit',
- powerChannel: new ChannelAddress(component.id, 'DelayChargeMaximumChargeLimit'),
+ name: "DelayChargeMaximumChargeLimit",
+ powerChannel: new ChannelAddress(component.id, "DelayChargeMaximumChargeLimit"),
},
{
- name: 'SellToGridLimitMinimumChargeLimit',
- powerChannel: new ChannelAddress(component.id, 'SellToGridLimitMinimumChargeLimit'),
+ name: "SellToGridLimitMinimumChargeLimit",
+ powerChannel: new ChannelAddress(component.id, "SellToGridLimitMinimumChargeLimit"),
converter: HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO,
},
{
- name: 'ProductionDcActualPower',
- powerChannel: new ChannelAddress('_sum', 'ProductionDcActualPower'),
+ name: "ProductionDcActualPower",
+ powerChannel: new ChannelAddress("_sum", "ProductionDcActualPower"),
},
{
- name: 'EssActivePower',
- powerChannel: new ChannelAddress('_sum', 'EssActivePower'),
+ name: "EssActivePower",
+ powerChannel: new ChannelAddress("_sum", "EssActivePower"),
},
{
- name: 'EssSoc',
- powerChannel: new ChannelAddress('_sum', 'EssSoc'),
+ name: "EssSoc",
+ powerChannel: new ChannelAddress("_sum", "EssSoc"),
},
],
output: (data: HistoryUtils.ChannelData) => ([
{
- name: translate.instant('Edge.Index.Widgets.GridOptimizedCharge.maximumCharge'),
- converter: () => data['DelayChargeMaximumChargeLimit'],
- color: 'rgb(253,197,7)',
+ name: translate.instant("Edge.Index.Widgets.GridOptimizedCharge.maximumCharge"),
+ converter: () => data["DelayChargeMaximumChargeLimit"],
+ color: "rgb(253,197,7)",
borderDash: [3, 3],
},
{
- name: translate.instant('Edge.Index.Widgets.GridOptimizedCharge.minimumCharge'),
- converter: () => data['SellToGridLimitMinimumChargeLimit'],
- color: 'rgb(200,0,0)',
+ name: translate.instant("Edge.Index.Widgets.GridOptimizedCharge.minimumCharge"),
+ converter: () => data["SellToGridLimitMinimumChargeLimit"],
+ color: "rgb(200,0,0)",
borderDash: [3, 3],
},
{
- name: translate.instant('General.chargePower'),
+ name: translate.instant("General.chargePower"),
converter: () =>
- (data['ProductionDcActualPower']
+ (data["ProductionDcActualPower"]
?
- data['ProductionDcActualPower'].map((value, index) => {
- return Utils.subtractSafely(data['EssActivePower'][index], value);
+ data["ProductionDcActualPower"].map((value, index) => {
+ return Utils.subtractSafely(data["EssActivePower"][index], value);
})
:
- data['EssActivePower'])?.map(val => HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE(val)) ?? null,
- color: 'rgb(0,223,0)',
+ data["EssActivePower"])?.map(val => HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE(val)) ?? null,
+ color: "rgb(0,223,0)",
},
{
- name: translate.instant('General.soc'),
- converter: () => data['EssSoc'].map(el => Utils.multiplySafely(el, 1000)),
- color: 'rgb(189, 195, 199)',
+ name: translate.instant("General.soc"),
+ converter: () => data["EssSoc"].map(el => Utils.multiplySafely(el, 1000)),
+ color: "rgb(189, 195, 199)",
borderDash: [10, 10],
yAxisId: ChartAxis.RIGHT,
custom: {
- unit: YAxisTitle.PERCENTAGE,
+ unit: YAxisType.PERCENTAGE,
},
},
]),
tooltip: {
- formatNumber: '1.0-2',
+ formatNumber: "1.0-2",
},
yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
+ unit: YAxisType.ENERGY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}, {
- unit: YAxisTitle.PERCENTAGE,
- position: 'right',
+ unit: YAxisType.PERCENTAGE,
+ position: "right",
yAxisId: ChartAxis.RIGHT,
displayGrid: false,
}],
diff --git a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/sellToGridLimitChart.component.ts b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/sellToGridLimitChart.component.ts
index c1ebb017450..77072343e95 100644
--- a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/sellToGridLimitChart.component.ts
+++ b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/chart/sellToGridLimitChart.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { ChartAxis, HistoryUtils, Utils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress } from "src/app/shared/shared";
@Component({
- selector: 'sellToGridLimitChart',
- templateUrl: '../../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "sellToGridLimitChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
})
export class SellToGridLimitChartComponent extends AbstractHistoryChart {
@@ -15,56 +15,56 @@ export class SellToGridLimitChartComponent extends AbstractHistoryChart {
return {
input: [
{
- name: 'ActivePower',
- powerChannel: new ChannelAddress(gridmeterId, 'ActivePower'),
+ name: "ActivePower",
+ powerChannel: new ChannelAddress(gridmeterId, "ActivePower"),
converter: HistoryUtils.ValueConverter.ONLY_NEGATIVE_AND_NEGATIVE_AS_POSITIVE,
},
{
- name: '_PropertyMaximumSellToGridPower',
- powerChannel: new ChannelAddress(componentId, '_PropertyMaximumSellToGridPower'),
+ name: "_PropertyMaximumSellToGridPower",
+ powerChannel: new ChannelAddress(componentId, "_PropertyMaximumSellToGridPower"),
},
{
- name: 'ProductionActivePower',
- powerChannel: new ChannelAddress('_sum', 'ProductionActivePower'),
+ name: "ProductionActivePower",
+ powerChannel: new ChannelAddress("_sum", "ProductionActivePower"),
},
],
output: (data: HistoryUtils.ChannelData) => ([
{
- name: translate.instant('General.gridSell'),
- converter: () => data['ActivePower'],
- color: 'rgb(0,0,200)',
+ name: translate.instant("General.gridSell"),
+ converter: () => data["ActivePower"],
+ color: "rgb(0,0,200)",
},
{
- name: translate.instant('Edge.Index.Widgets.GridOptimizedCharge.maximumGridFeedIn'),
- converter: () => data['_PropertyMaximumSellToGridPower'],
- color: 'rgb(0,0,0)',
+ name: translate.instant("Edge.Index.Widgets.GridOptimizedCharge.maximumGridFeedIn"),
+ converter: () => data["_PropertyMaximumSellToGridPower"],
+ color: "rgb(0,0,0)",
borderDash: [3, 3],
},
{
- name: translate.instant('Edge.Index.Widgets.GridOptimizedCharge.MAXIMUM_GRIDSELL_WITH_CHARGE'),
- converter: () => data['_PropertyMaximumSellToGridPower'].map(el => Utils.multiplySafely(el, 0.95)),
- color: 'rgb(200,0,0)',
+ name: translate.instant("Edge.Index.Widgets.GridOptimizedCharge.MAXIMUM_GRIDSELL_WITH_CHARGE"),
+ converter: () => data["_PropertyMaximumSellToGridPower"].map(el => Utils.multiplySafely(el, 0.95)),
+ color: "rgb(200,0,0)",
borderDash: [3, 3],
},
{
- name: translate.instant('General.production'),
- converter: () => data['ProductionActivePower'],
- color: 'rgb(45,143,171)',
+ name: translate.instant("General.production"),
+ converter: () => data["ProductionActivePower"],
+ color: "rgb(45,143,171)",
},
]),
tooltip: {
- formatNumber: '1.0-2',
+ formatNumber: "1.0-2",
},
yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
+ unit: YAxisType.ENERGY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}],
};
}
protected getChartData(): HistoryUtils.ChartData {
- const gridMeterId = this.config.getComponentProperties(this.component.id)['meter.id'];
+ const gridMeterId = this.config.getComponentProperties(this.component.id)["meter.id"];
return SellToGridLimitChartComponent.getChartData(gridMeterId, this.component.id, this.translate);
}
diff --git a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/flat/flat.ts b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/flat/flat.ts
index 60c63aa9d5a..67cd22d5d32 100644
--- a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/flat/flat.ts
+++ b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/flat/flat.ts
@@ -1,12 +1,12 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { Converter } from 'src/app/shared/components/shared/converter';
-import { Filter } from 'src/app/shared/components/shared/filter';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { Converter } from "src/app/shared/components/shared/converter";
+import { Filter } from "src/app/shared/components/shared/filter";
@Component({
- selector: 'gridOptimizedChargeWidget',
- templateUrl: './flat.html',
+ selector: "gridOptimizedChargeWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
protected FORMAT_SECONDS_TO_DURATION = Converter.FORMAT_SECONDS_TO_DURATION(this.translate.currentLang);
diff --git a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.html b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.html
index 370e95f0b7e..0c7ce394dd6 100644
--- a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.html
+++ b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.html
@@ -1,5 +1,4 @@
-
+
diff --git a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.ts b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.ts
index 0fdf540900f..f5e4cab17f3 100644
--- a/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.ts
+++ b/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/overview/overview.ts
@@ -1,9 +1,9 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
+import { Component } from "@angular/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
@Component({
- selector: 'gridoptimizedcharge-chart-overview',
- templateUrl: './overview.html',
+ selector: "gridoptimizedcharge-chart-overview",
+ templateUrl: "./overview.html",
})
export class OverviewComponent extends AbstractHistoryChartOverview { }
diff --git a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/chart/chart.ts b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/chart/chart.ts
index 8bd48521984..6a7850fcafb 100644
--- a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/chart/chart.ts
+++ b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/chart/chart.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, Input } from '@angular/core';
-import * as Chart from 'chart.js';
-import { calculateResolution, ChronoUnit, Resolution } from 'src/app/edge/history/shared';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { ChartAxis, HistoryUtils, TimeOfUseTariffUtils, Utils, YAxisTitle } from 'src/app/shared/service/utils';
+import { Component, Input } from "@angular/core";
+import * as Chart from "chart.js";
+import { calculateResolution, ChronoUnit, Resolution } from "src/app/edge/history/shared";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { ChartAxis, HistoryUtils, TimeOfUseTariffUtils, Utils, YAxisType } from "src/app/shared/service/utils";
import { ChannelAddress, Currency, EdgeConfig } from "src/app/shared/shared";
-import { ColorUtils } from 'src/app/shared/utils/color/color.utils';
+import { ColorUtils } from "src/app/shared/utils/color/color.utils";
@Component({
- selector: 'scheduleChart',
- templateUrl: '../../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "scheduleChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
})
export class ChartComponent extends AbstractHistoryChart {
@@ -19,76 +19,76 @@ export class ChartComponent extends AbstractHistoryChart {
protected override getChartData(): HistoryUtils.ChartData {
// Assigning the component to be able to use the id.
- const componentId: string = this.config.getComponentIdsByFactory('Controller.Ess.Time-Of-Use-Tariff')[0];
+ const componentId: string = this.config.getComponentIdsByFactory("Controller.Ess.Time-Of-Use-Tariff")[0];
this.component = this.config.components[componentId];
- const currency = this.config.components['_meta'].properties.currency;
+ const currency = this.config.components["_meta"].properties.currency;
this.currencyLabel = Currency.getCurrencyLabelByCurrency(currency);
- this.chartType = 'bar';
+ this.chartType = "bar";
return {
input: [
{
- name: 'QuarterlyPrice',
- powerChannel: ChannelAddress.fromString(this.component.id + '/QuarterlyPrices'),
+ name: "QuarterlyPrice",
+ powerChannel: ChannelAddress.fromString(this.component.id + "/QuarterlyPrices"),
},
{
- name: 'StateMachine',
- powerChannel: ChannelAddress.fromString(this.component.id + '/StateMachine'),
+ name: "StateMachine",
+ powerChannel: ChannelAddress.fromString(this.component.id + "/StateMachine"),
},
{
- name: 'Soc',
- powerChannel: ChannelAddress.fromString('_sum/EssSoc'),
+ name: "Soc",
+ powerChannel: ChannelAddress.fromString("_sum/EssSoc"),
},
{
- name: 'GridBuy',
- powerChannel: ChannelAddress.fromString('_sum/GridActivePower'),
+ name: "GridBuy",
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower"),
converter: HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO,
},
],
output: (data: HistoryUtils.ChannelData) => {
return [{
- name: this.translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING'),
+ name: this.translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING"),
converter: () => this.getDataset(data, TimeOfUseTariffUtils.State.Balancing),
- color: 'rgb(51,102,0)',
+ color: "rgb(51,102,0)",
stack: 1,
order: 1,
},
{
- name: this.translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID'),
+ name: this.translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID"),
converter: () => this.getDataset(data, TimeOfUseTariffUtils.State.ChargeGrid),
- color: 'rgb(0, 204, 204)',
+ color: "rgb(0, 204, 204)",
stack: 1,
order: 1,
},
{
- name: this.translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE'),
+ name: this.translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE"),
converter: () => this.getDataset(data, TimeOfUseTariffUtils.State.DelayDischarge),
- color: 'rgb(0,0,0)',
+ color: "rgb(0,0,0)",
stack: 1,
order: 1,
},
{
- name: this.translate.instant('General.soc'),
- converter: () => data['Soc']?.map(value => Utils.multiplySafely(value, 1000)),
- color: 'rgb(189, 195, 199)',
+ name: this.translate.instant("General.soc"),
+ converter: () => data["Soc"]?.map(value => Utils.multiplySafely(value, 1000)),
+ color: "rgb(189, 195, 199)",
borderDash: [10, 10],
yAxisId: ChartAxis.RIGHT,
custom: {
- type: 'line',
- unit: YAxisTitle.PERCENTAGE,
- formatNumber: '1.0-0',
+ type: "line",
+ unit: YAxisType.PERCENTAGE,
+ formatNumber: "1.0-0",
},
order: 0,
},
{
- name: this.translate.instant('General.gridBuy'),
- converter: () => data['GridBuy'],
- color: 'rgb(0,0,0)',
+ name: this.translate.instant("General.gridBuy"),
+ converter: () => data["GridBuy"],
+ color: "rgb(0,0,0)",
yAxisId: ChartAxis.RIGHT_2,
custom: {
- type: 'line',
- formatNumber: '1.0-0',
+ type: "line",
+ formatNumber: "1.0-0",
},
hiddenOnInit: true,
order: 2,
@@ -96,22 +96,22 @@ export class ChartComponent extends AbstractHistoryChart {
];
},
tooltip: {
- formatNumber: '1.1-4',
+ formatNumber: "1.1-4",
},
yAxes: [{
- unit: YAxisTitle.CURRENCY,
- position: 'left',
+ unit: YAxisType.CURRENCY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
},
{
- unit: YAxisTitle.PERCENTAGE,
- position: 'right',
+ unit: YAxisType.PERCENTAGE,
+ position: "right",
yAxisId: ChartAxis.RIGHT,
displayGrid: false,
},
{
- unit: YAxisTitle.POWER,
- position: 'right',
+ unit: YAxisType.POWER,
+ position: "right",
yAxisId: ChartAxis.RIGHT_2,
displayGrid: false,
},
@@ -126,7 +126,7 @@ export class ChartComponent extends AbstractHistoryChart {
const unit: Resolution = { unit: ChronoUnit.Type.MINUTES, value: 15 };
this.queryHistoricTimeseriesData(this.service.historyPeriod.value.from, this.service.historyPeriod.value.to, unit)
.then((dataResponse) => {
- this.chartType = 'line';
+ this.chartType = "line";
this.chartObject = this.getChartData();
const displayValues = AbstractHistoryChart.fillChart(this.chartType, this.chartObject, dataResponse);
@@ -135,10 +135,10 @@ export class ChartComponent extends AbstractHistoryChart {
this.labels = displayValues.labels;
this.setChartLabel();
- this.options.scales.x['time'].unit = calculateResolution(this.service, this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).timeFormat;
- this.options.scales.x.ticks['source'] = 'auto';
+ this.options.scales.x["time"].unit = calculateResolution(this.service, this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).timeFormat;
+ this.options.scales.x.ticks["source"] = "auto";
this.options.scales.x.grid = { offset: false };
- this.options.plugins.tooltip.mode = 'index';
+ this.options.plugins.tooltip.mode = "index";
this.options.scales.x.ticks.maxTicksLimit = 30;
this.options.scales[ChartAxis.LEFT].min = this.getMinimumAxisValue(this.datasets);
@@ -148,7 +148,7 @@ export class ChartComponent extends AbstractHistoryChart {
backgroundColor: item.dataset.backgroundColor,
};
};
- this.options.scales.x['bounds'] = 'ticks';
+ this.options.scales.x["bounds"] = "ticks";
this.options.plugins.tooltip.callbacks.label = (item: Chart.TooltipItem) => {
const label = item.dataset.label;
@@ -157,17 +157,17 @@ export class ChartComponent extends AbstractHistoryChart {
return TimeOfUseTariffUtils.getLabel(value, label, this.translate, this.currencyLabel);
};
- this.options.scales[ChartAxis.LEFT]['title'].text = this.currencyLabel;
+ this.options.scales[ChartAxis.LEFT]["title"].text = this.currencyLabel;
this.datasets = this.datasets.map((el) => {
- const opacity = el.type === 'line' ? 0.2 : 0.5;
+ const opacity = el.type === "line" ? 0.2 : 0.5;
el.backgroundColor = ColorUtils.changeOpacityFromRGBA(el.backgroundColor.toString(), opacity);
el.borderColor = ColorUtils.changeOpacityFromRGBA(el.borderColor.toString(), 1);
return el;
});
- this.options.scales.x['offset'] = false;
- this.options['animation'] = false;
+ this.options.scales.x["offset"] = false;
+ this.options["animation"] = false;
});
}
@@ -179,9 +179,9 @@ export class ChartComponent extends AbstractHistoryChart {
* @returns the desired state array data.
*/
private getDataset(data: HistoryUtils.ChannelData, desiredState): any[] {
- const prices = data['QuarterlyPrice']
+ const prices = data["QuarterlyPrice"]
.map(val => TimeOfUseTariffUtils.formatPrice(Utils.multiplySafely(val, 1000)));
- const states = data['StateMachine']
+ const states = data["StateMachine"]
.map(val => Utils.multiplySafely(val, 1000));
const length = prices.length;
const dataset = Array(length).fill(null);
@@ -207,9 +207,9 @@ export class ChartComponent extends AbstractHistoryChart {
private getMinimumAxisValue(datasets: Chart.ChartDataset[]): number {
const labels = [
- this.translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING'),
- this.translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID'),
- this.translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE'),
+ this.translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING"),
+ this.translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID"),
+ this.translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE"),
];
const finalArray: number[] = labels
diff --git a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/flat/flat.ts b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/flat/flat.ts
index 3eb8b26a26f..126647bbd92 100644
--- a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/flat/flat.ts
+++ b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/flat/flat.ts
@@ -1,12 +1,12 @@
-import { Component, Input } from '@angular/core';
+import { Component, Input } from "@angular/core";
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChannelAddress, CurrentData } from 'src/app/shared/shared';
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChannelAddress, CurrentData } from "src/app/shared/shared";
@Component({
- selector: 'timeOfUseTariffWidget',
- templateUrl: './flat.html',
+ selector: "timeOfUseTariffWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -17,14 +17,14 @@ export class FlatComponent extends AbstractFlatWidget {
override getChannelAddresses(): ChannelAddress[] {
return [
- new ChannelAddress(this.componentId, 'DelayedTime'),
- new ChannelAddress(this.componentId, 'ChargedTime'),
+ new ChannelAddress(this.componentId, "DelayedTime"),
+ new ChannelAddress(this.componentId, "ChargedTime"),
];
}
protected override onCurrentData(currentData: CurrentData) {
- this.delayedActiveTimeOverPeriod = currentData.allComponents[this.componentId + '/DelayedTime'];
- this.chargedConsumptionActiveTimeOverPeriod = currentData.allComponents[this.componentId + '/ChargedTime'];
+ this.delayedActiveTimeOverPeriod = currentData.allComponents[this.componentId + "/DelayedTime"];
+ this.chargedConsumptionActiveTimeOverPeriod = currentData.allComponents[this.componentId + "/ChargedTime"];
}
}
diff --git a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/overview/overview.ts b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/overview/overview.ts
index a3f812c1a88..51ed8f95a67 100644
--- a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/overview/overview.ts
+++ b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/overview/overview.ts
@@ -1,7 +1,7 @@
-import { Component } from '@angular/core';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
+import { Component } from "@angular/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
@Component({
- templateUrl: './overview.html',
+ templateUrl: "./overview.html",
})
export class OverviewComponent extends AbstractHistoryChartOverview { }
diff --git a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/timeOfUseTariff.module.ts b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/timeOfUseTariff.module.ts
index 16ac1004777..fbd0c4c0428 100644
--- a/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/timeOfUseTariff.module.ts
+++ b/ui/src/app/edge/history/Controller/Ess/TimeOfUseTariff/timeOfUseTariff.module.ts
@@ -1,9 +1,9 @@
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { SharedModule } from "src/app/shared/shared.module";
+import { ChartComponent } from "./chart/chart";
import { FlatComponent } from "./flat/flat";
import { OverviewComponent } from "./overview/overview";
-import { ChartComponent } from "./chart/chart";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/history/Controller/Ess/ess.module.ts b/ui/src/app/edge/history/Controller/Ess/ess.module.ts
new file mode 100644
index 00000000000..feff7fa422d
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Ess/ess.module.ts
@@ -0,0 +1,12 @@
+import { NgModule } from "@angular/core";
+import { TimeOfUseTariff } from "./TimeOfUseTariff/timeOfUseTariff.module";
+
+@NgModule({
+ imports: [
+ TimeOfUseTariff,
+ ],
+ exports: [
+ TimeOfUseTariff,
+ ],
+})
+export class ControllerEss { }
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/chart/chart.ts b/ui/src/app/edge/history/Controller/Io/DigitalOutput/chart/chart.ts
new file mode 100644
index 00000000000..9daf18f5179
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/chart/chart.ts
@@ -0,0 +1,68 @@
+import { Component } from "@angular/core";
+
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { Name } from "src/app/shared/components/shared/name";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "totalChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class TotalChartComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, chartType: "bar" | "line"): HistoryUtils.ChartData {
+
+ const fixDigitalOutputControllers: EdgeConfig.Component[] = config.getComponentsByFactory("Controller.Io.FixDigitalOutput");
+ const singleThresholdControllers: EdgeConfig.Component[] = config.getComponentsByFactory("Controller.IO.ChannelSingleThreshold");
+ const controllers = [...fixDigitalOutputControllers, ...singleThresholdControllers];
+ const input: HistoryUtils.InputChannel[] = [];
+
+ for (const controller of controllers) {
+ const powerChannel = ChannelAddress.fromString(Array.isArray(config.getComponentProperties(controller.id)["outputChannelAddress"])
+ ? config.getComponentProperties(controller.id)["outputChannelAddress"][0]
+ : config.getComponentProperties(controller.id)["outputChannelAddress"]);
+ input.push({ name: controller.id, powerChannel: powerChannel, energyChannel: new ChannelAddress(controller.id, "CumulatedActiveTime") });
+ }
+
+ return {
+ input: input,
+ output: (data: HistoryUtils.ChannelData) => {
+ const output: HistoryUtils.DisplayValue[] = [];
+ const colors: string[] = ["rgb(0,0,139)", "rgb(0,191,255)", "rgb(0,0,56)", "rgb(77,77,174)"];
+
+ for (let i = 0; i < controllers.length; i++) {
+ const controller = controllers[i];
+ output.push({
+ name: Name.METER_ALIAS_OR_ID(controller),
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
+ return energyQueryResponse?.result.data[controller.id + "/CumulatedActiveTime"] ?? null;
+ },
+ converter: () => {
+
+ return data[controller.id]
+ // TODO add logic to not have to adjust non power data manually
+ .map(val => Utils.multiplySafely(val, 1000));
+ },
+ color: colors[i % colors.length],
+ stack: 0,
+ });
+ }
+ return output;
+ },
+ tooltip: {
+ formatNumber: "1.0-0",
+ },
+ yAxes: [{
+ unit: chartType === "line" ? YAxisType.RELAY : YAxisType.TIME,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+ }
+
+ protected override getChartData(): HistoryUtils.ChartData {
+ return TotalChartComponent.getChartData(this.config, this.chartType);
+ }
+}
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/chart/chart.ts b/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/chart/chart.ts
new file mode 100644
index 00000000000..91c271d820a
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/chart/chart.ts
@@ -0,0 +1,163 @@
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { Name } from "src/app/shared/components/shared/name";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "detailChart",
+ templateUrl: "../../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class ChartComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, chartType: "line" | "bar", route: ActivatedRoute, translate: TranslateService): HistoryUtils.ChartData {
+ const controller: EdgeConfig.Component = config.getComponent(route.snapshot.params.componentId);
+
+ const input: HistoryUtils.InputChannel[] = [];
+ let inputChannel: ChannelAddress | null = null;
+ const outputChannel = ChannelAddress.fromString(Array.isArray(config.getComponentProperties(controller.id)["outputChannelAddress"])
+ ? config.getComponentProperties(controller.id)["outputChannelAddress"][0]
+ : config.getComponentProperties(controller.id)["outputChannelAddress"]);
+
+ if (controller.factoryId === "Controller.IO.ChannelSingleThreshold") {
+ inputChannel = ChannelAddress.fromString(config.getComponentProperties(controller.id)["inputChannelAddress"]);
+ input.push({
+ name: inputChannel.toString(), powerChannel: inputChannel,
+ });
+ }
+
+ input.push({
+ name: controller.id + "output", powerChannel: outputChannel, energyChannel: new ChannelAddress(controller.id, "CumulatedActiveTime"),
+ });
+
+ return {
+ input: input,
+ output: (data: HistoryUtils.ChannelData) => {
+ const output: HistoryUtils.DisplayValue[] = [];
+
+ output.push({
+ name: Name.METER_ALIAS_OR_ID(controller),
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
+ return energyQueryResponse?.result.data[controller.id + "/CumulatedActiveTime"] ?? null;
+ },
+ converter: () => {
+
+ if (chartType == "line") {
+ return data[controller.id + "output"]?.map(val => Utils.multiplySafely(1000, val));
+ }
+
+ return data[controller.id + "output"]
+ // TODO add logic to not have to adjust non power data manually
+ ?.map(val => Utils.multiplySafely(val, 1000));
+ },
+ color: "rgb(0,191,255)",
+ stack: 0,
+ });
+
+ if (inputChannel) {
+ output.push(ChartComponent.getDisplayValue(data, inputChannel, translate));
+ }
+
+ return output;
+ },
+ tooltip: {
+ formatNumber: "1.0-0",
+ },
+ yAxes: ChartComponent.getYAxes(inputChannel, chartType),
+ };
+ }
+ protected static getInputChannelLabel(translate: TranslateService, channelAddress: ChannelAddress): string {
+ switch (channelAddress.channelId) {
+ case "GridActivePower":
+ return translate.instant("General.grid");
+ case "ProductionActivePower":
+ return translate.instant("General.production");
+ case "EssSoc":
+ return translate.instant("General.soc");
+ default:
+ return translate.instant("Edge.Index.Widgets.Singlethreshold.other");
+ }
+ }
+
+ protected static getYAxes(inputChannel: ChannelAddress | null, chartType: "line" | "bar"): HistoryUtils.yAxes[] {
+ const leftYAxis: HistoryUtils.yAxes = {
+ unit: chartType === "line" ? YAxisType.RELAY : YAxisType.TIME,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ };
+ const yAxes: HistoryUtils.yAxes[] = [leftYAxis];
+
+ if (!inputChannel) {
+ return yAxes;
+ }
+
+ if (chartType !== "line") {
+ return yAxes;
+ }
+
+ switch (inputChannel.channelId) {
+ case "EssSoc":
+ yAxes.push({
+ unit: YAxisType.PERCENTAGE,
+ position: "right",
+ yAxisId: ChartAxis.RIGHT,
+ });
+ break;
+ default:
+ yAxes.push({
+ unit: YAxisType.ENERGY,
+ position: "right",
+ yAxisId: ChartAxis.RIGHT,
+ });
+ break;
+ }
+ return yAxes;
+ }
+
+ protected static getYAxisId(inputChannel: ChannelAddress): ChartAxis {
+ if (!inputChannel) {
+ return ChartAxis.LEFT;
+ }
+
+ switch (inputChannel.channelId) {
+ case "EssSoc":
+ default:
+ return ChartAxis.RIGHT;
+ }
+ }
+
+ protected static getColor(inputChannel: ChannelAddress): string {
+ if (!inputChannel || inputChannel.channelId != "EssSoc") {
+ return "rgb(0,0,0)";
+ }
+ return "rgb(189,195,199)";
+ }
+
+ protected static getConverter(inputChannel: ChannelAddress, data: HistoryUtils.ChannelData): () => {} {
+ if (!inputChannel || inputChannel.channelId != "EssSoc") {
+ return () => data[inputChannel.toString()];
+ }
+
+ return () => data[inputChannel.toString()]
+ // TODO add logic to not have to adjust non power data manually
+ ?.map((val: number) => Utils.multiplySafely(val, 1000));
+ }
+
+ private static getDisplayValue(data: HistoryUtils.ChannelData, inputChannel: ChannelAddress, translate: TranslateService): HistoryUtils.DisplayValue {
+ return {
+ name: ChartComponent.getInputChannelLabel(translate, inputChannel),
+ converter: ChartComponent.getConverter(inputChannel, data),
+ color: ChartComponent.getColor(inputChannel),
+ yAxisId: ChartAxis.RIGHT,
+ stack: 1,
+ };
+ }
+ protected override getChartData(): HistoryUtils.ChartData {
+ return ChartComponent.getChartData(this.config, this.chartType, this.route, this.translate);
+ }
+
+
+}
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/details.overview.html b/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/details.overview.html
new file mode 100644
index 00000000000..546f5640513
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/details.overview.html
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/details.overview.ts b/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/details.overview.ts
new file mode 100644
index 00000000000..df7cf0ec298
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/details/details.overview.ts
@@ -0,0 +1,7 @@
+import { Component } from "@angular/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
+
+@Component({
+ templateUrl: "./details.overview.html",
+})
+export class DetailsOverviewComponent extends AbstractHistoryChartOverview { }
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/digitalOutput.module.ts b/ui/src/app/edge/history/Controller/Io/DigitalOutput/digitalOutput.module.ts
new file mode 100644
index 00000000000..df92f38b353
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/digitalOutput.module.ts
@@ -0,0 +1,32 @@
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { TotalChartComponent } from "./chart/chart";
+import { FlatComponent } from "./flat/flat";
+import { OverviewComponent } from "./overview/overview";
+import { ChartComponent } from "./details/chart/chart";
+import { DetailsOverviewComponent } from "./details/details.overview";
+import { FooterNavigationModule } from "src/app/shared/components/footer/subnavigation/footerNavigation.module";
+
+@NgModule({
+ imports: [
+ BrowserModule,
+ SharedModule,
+ FooterNavigationModule,
+ ],
+ declarations: [
+ FlatComponent,
+ OverviewComponent,
+ TotalChartComponent,
+ DetailsOverviewComponent,
+ ChartComponent,
+ ],
+ exports: [
+ FlatComponent,
+ OverviewComponent,
+ TotalChartComponent,
+ DetailsOverviewComponent,
+ ChartComponent,
+ ],
+})
+export class DigitalOutput { }
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/flat/flat.html b/ui/src/app/edge/history/Controller/Io/DigitalOutput/flat/flat.html
new file mode 100644
index 00000000000..95886fc8abf
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/flat/flat.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ 0 && fixDigitalOutputControllers.length > 0">
+
+
+
+
+
+
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/flat/flat.ts b/ui/src/app/edge/history/Controller/Io/DigitalOutput/flat/flat.ts
new file mode 100644
index 00000000000..36aba75e504
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/flat/flat.ts
@@ -0,0 +1,22 @@
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { TextIndentation } from "src/app/shared/components/modal/modal-line/modal-line";
+import { Converter } from "src/app/shared/components/shared/converter";
+import { EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "DigitalOutputWidget",
+ templateUrl: "./flat.html",
+})
+export class FlatComponent extends AbstractFlatWidget {
+ protected FORMAT_SECONDS_TO_DURATION = Converter.FORMAT_SECONDS_TO_DURATION(this.translate.currentLang);
+ protected fixDigitalOutputControllers: EdgeConfig.Component[] = [];
+ protected singleThresholdControllers: EdgeConfig.Component[] = [];
+
+ protected readonly TextIndentation = TextIndentation;
+
+ protected override afterIsInitialized(): void {
+ this.fixDigitalOutputControllers = this.config?.getComponentsByFactory("Controller.Io.FixDigitalOutput");
+ this.singleThresholdControllers = this.config?.getComponentsByFactory("Controller.IO.ChannelSingleThreshold");
+ }
+}
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/overview/overview.html b/ui/src/app/edge/history/Controller/Io/DigitalOutput/overview/overview.html
new file mode 100644
index 00000000000..4c3b034653b
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/overview/overview.html
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/ui/src/app/edge/history/Controller/Io/DigitalOutput/overview/overview.ts b/ui/src/app/edge/history/Controller/Io/DigitalOutput/overview/overview.ts
new file mode 100644
index 00000000000..c3eeec802be
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/DigitalOutput/overview/overview.ts
@@ -0,0 +1,36 @@
+// @ts-strict-ignore
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
+import { NavigationOption } from "src/app/shared/components/footer/subnavigation/footerNavigation";
+import { ChannelAddress, EdgeConfig, Service } from "src/app/shared/shared";
+
+@Component({
+ selector: "overview",
+ templateUrl: "./overview.html",
+})
+export class OverviewComponent extends AbstractHistoryChartOverview {
+
+ protected navigationButtons: NavigationOption[] = [];
+
+ constructor(
+ public override service: Service,
+ protected override route: ActivatedRoute,
+ public override modalCtrl: ModalController,
+ private router: Router,
+ ) {
+ super(service, route, modalCtrl);
+ }
+
+ protected override getChannelAddresses(): ChannelAddress[] {
+ const fixDigitalOutputControllers: EdgeConfig.Component[] = this.config.getComponentsByFactory("Controller.Io.FixDigitalOutput");
+ const singleThresholdControllers: EdgeConfig.Component[] = this.config.getComponentsByFactory("Controller.IO.ChannelSingleThreshold");
+ const controllers = [...fixDigitalOutputControllers, ...singleThresholdControllers];
+
+ this.navigationButtons = controllers.map(el => (
+ { id: el.id, alias: el.alias, callback: () => { this.router.navigate(["./" + el.id], { relativeTo: this.route }); } }
+ ));
+ return [];
+ }
+}
diff --git a/ui/src/app/edge/history/Controller/Io/Io.module.ts b/ui/src/app/edge/history/Controller/Io/Io.module.ts
new file mode 100644
index 00000000000..caeda2b8417
--- /dev/null
+++ b/ui/src/app/edge/history/Controller/Io/Io.module.ts
@@ -0,0 +1,12 @@
+import { NgModule } from "@angular/core";
+import { DigitalOutput } from "./DigitalOutput/digitalOutput.module";
+
+@NgModule({
+ imports: [
+ DigitalOutput,
+ ],
+ exports: [
+ DigitalOutput,
+ ],
+})
+export class ControllerIo { }
diff --git a/ui/src/app/edge/history/Controller/controller.module.ts b/ui/src/app/edge/history/Controller/controller.module.ts
index 4be2b267717..dec242649f6 100644
--- a/ui/src/app/edge/history/Controller/controller.module.ts
+++ b/ui/src/app/edge/history/Controller/controller.module.ts
@@ -1,16 +1,21 @@
import { NgModule } from "@angular/core";
-
+import { ControllerEss } from "./Ess/ess.module";
+import { ControllerIo } from "./Io/Io.module";
import { ChannelThreshold } from "./ChannelThreshold/channelThreshold.module";
import { GridOptimizeCharge } from "./Ess/GridoptimizedCharge/gridOptimizeCharge.module";
import { TimeOfUseTariff } from "./Ess/TimeOfUseTariff/timeOfUseTariff.module";
@NgModule({
imports: [
+ ControllerEss,
+ ControllerIo,
ChannelThreshold,
TimeOfUseTariff,
GridOptimizeCharge,
],
exports: [
+ ControllerEss,
+ ControllerIo,
ChannelThreshold,
TimeOfUseTariff,
GridOptimizeCharge,
diff --git a/ui/src/app/edge/history/abstracthistorychart.html b/ui/src/app/edge/history/abstracthistorychart.html
index 086f2be9aff..b9b3c9edc7d 100644
--- a/ui/src/app/edge/history/abstracthistorychart.html
+++ b/ui/src/app/edge/history/abstracthistorychart.html
@@ -5,4 +5,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/abstracthistorychart.ts b/ui/src/app/edge/history/abstracthistorychart.ts
index ded3ceb8226..0891b3f453e 100644
--- a/ui/src/app/edge/history/abstracthistorychart.ts
+++ b/ui/src/app/edge/history/abstracthistorychart.ts
@@ -1,19 +1,18 @@
// @ts-strict-ignore
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { AbstractHistoryChart as NewAbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { JsonrpcResponseError } from 'src/app/shared/jsonrpc/base';
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { AbstractHistoryChart as NewAbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { ChartConstants, XAxisType } from "src/app/shared/components/chart/chart.constants";
+import { JsonrpcResponseError } from "src/app/shared/jsonrpc/base";
import { QueryHistoricTimeseriesDataRequest } from "src/app/shared/jsonrpc/request/queryHistoricTimeseriesDataRequest";
-import { QueryHistoricTimeseriesEnergyPerPeriodRequest } from 'src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyPerPeriodRequest';
+import { QueryHistoricTimeseriesEnergyPerPeriodRequest } from "src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyPerPeriodRequest";
import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
-import { QueryHistoricTimeseriesEnergyPerPeriodResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyPerPeriodResponse';
-import { ChartAxis, HistoryUtils, Utils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, Edge, EdgeConfig, Service } from 'src/app/shared/shared';
-import { DateUtils } from 'src/app/shared/utils/date/dateutils';
-import { DateTimeUtils } from 'src/app/shared/utils/datetime/datetime-utils';
-
-import { calculateResolution, ChronoUnit, DEFAULT_TIME_CHART_OPTIONS, EMPTY_DATASET, Resolution, setLabelVisible } from './shared';
-import { ChartConstants } from 'src/app/shared/components/chart/chart.constants';
+import { QueryHistoricTimeseriesEnergyPerPeriodResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyPerPeriodResponse";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, Edge, EdgeConfig, Service } from "src/app/shared/shared";
+import { DateUtils } from "src/app/shared/utils/date/dateutils";
+import { DateTimeUtils } from "src/app/shared/utils/datetime/datetime-utils";
+import { ChronoUnit, DEFAULT_TIME_CHART_OPTIONS, EMPTY_DATASET, Resolution, calculateResolution, setLabelVisible } from "./shared";
// NOTE: Auto-refresh of widgets is currently disabled to reduce server load
export abstract class AbstractHistoryChart {
@@ -38,24 +37,29 @@ export abstract class AbstractHistoryChart {
protected hasSubscribed: boolean = false;
/** @deprecated*/
- protected unit: YAxisTitle = YAxisTitle.ENERGY;
+ protected unit: YAxisType = YAxisType.ENERGY;
+ /** @deprecated*/
+ protected formatNumber: string = "1.0-2";
/** @deprecated*/
- protected formatNumber: string = '1.0-2';
+ protected xAxisType: XAxisType = XAxisType.TIMESERIES;
// Colors for Phase 1-3
protected phase1Color = {
- backgroundColor: 'rgba(255,127,80,0.05)',
- borderColor: 'rgba(255,127,80,1)',
+ backgroundColor: "rgba(255,127,80,0.05)",
+ borderColor: "rgba(255,127,80,1)",
};
protected phase2Color = {
- backgroundColor: 'rgba(0,0,255,0.1)',
- borderColor: 'rgba(0,0,255,1)',
+ backgroundColor: "rgba(0,0,255,0.1)",
+ borderColor: "rgba(0,0,255,1)",
};
protected phase3Color = {
- backgroundColor: 'rgba(128,128,0,0.1)',
- borderColor: 'rgba(128,128,0,1)',
+ backgroundColor: "rgba(128,128,0,0.1)",
+ borderColor: "rgba(128,128,0,1)",
};
+ private activeQueryData: string;
+ private debounceTimeout: any | null = null;
+
constructor(
public readonly spinnerId: string,
protected service: Service,
@@ -66,21 +70,21 @@ export abstract class AbstractHistoryChart {
* Generates a Tooltip Title string from a 'fromDate' and 'toDate'.
*
* @param fromDate the From-Date
- * @param toDate the To-Date
+ * @param toDate the To-Date
* @param date Date from TooltipItem
* @returns period for Tooltip Header
*/
protected static toTooltipTitle(fromDate: Date, toDate: Date, date: Date, service: Service): string {
const unit = calculateResolution(service, fromDate, toDate).resolution.unit;
if (unit == ChronoUnit.Type.MONTHS) {
- return date.toLocaleDateString('default', { month: 'long' });
+ return date.toLocaleDateString("default", { month: "long" });
} else if (unit == ChronoUnit.Type.DAYS) {
- return date.toLocaleDateString('default', { day: '2-digit', month: 'long' });
+ return date.toLocaleDateString("default", { day: "2-digit", month: "long" });
} else {
// Default
- return date.toLocaleString('default', { day: '2-digit', month: '2-digit', year: '2-digit' }) + ' ' + date.toLocaleTimeString('default', { hour12: false, hour: '2-digit', minute: '2-digit' });
+ return date.toLocaleString("default", { day: "2-digit", month: "2-digit", year: "2-digit" }) + " " + date.toLocaleTimeString("default", { hour12: false, hour: "2-digit", minute: "2-digit" });
}
}
@@ -106,16 +110,16 @@ export abstract class AbstractHistoryChart {
}
/**
- *
- * Sets chart options
- *
- * @deprecated used for charts not using {@link NewAbstractHistoryChart} but {@link AbstractHistoryChart}
- */
+ *
+ * Sets chart options
+ *
+ * @deprecated used for charts not using {@link NewAbstractHistoryChart} but {@link AbstractHistoryChart}
+ */
public setOptions(options: Chart.ChartOptions): Promise {
return new Promise((resolve) => {
const locale = this.service.translate.currentLang;
- const yAxis: HistoryUtils.yAxes = { position: 'left', unit: this.unit, yAxisId: ChartAxis.LEFT };
+ const yAxis: HistoryUtils.yAxes = { position: "left", unit: this.unit, yAxisId: ChartAxis.LEFT };
const chartObject: HistoryUtils.ChartData = {
input: [],
output: () => [],
@@ -129,10 +133,11 @@ export abstract class AbstractHistoryChart {
const colors = this.colors;
const translate = this.translate;
this.service.getConfig().then((conf) => {
- options.datasets.line.borderWidth = 2;
+
+ options = NewAbstractHistoryChart.getDefaultOptions(this.xAxisType, this.service, this.labels);
/** Hide default displayed yAxis */
- options.scales['y'] = {
+ options.scales["y"] = {
display: false,
};
@@ -150,7 +155,7 @@ export abstract class AbstractHistoryChart {
const value = tooltipItem.dataset.data[tooltipItem.dataIndex];
const customUnit = tooltipItem.dataset.unit ?? null;
- return label.split(":")[0] + ": " + NewAbstractHistoryChart.getToolTipsSuffix("", value, formatNumber, customUnit ?? unit, 'line', locale, translate, conf);
+ return label.split(":")[0] + ": " + NewAbstractHistoryChart.getToolTipsSuffix("", value, formatNumber, customUnit ?? unit, "line", locale, translate, conf);
};
options.plugins.tooltip.callbacks.labelColor = (item: Chart.TooltipItem) => {
@@ -184,10 +189,10 @@ export abstract class AbstractHistoryChart {
text: dataset.label,
datasetIndex: index,
fillStyle: color.backgroundColor,
- fontColor: getComputedStyle(document.documentElement).getPropertyValue('--ion-color-text'),
+ fontColor: getComputedStyle(document.documentElement).getPropertyValue("--ion-color-text"),
hidden: !chart.isDatasetVisible(index),
lineWidth: 2,
- ...(dataset['borderDash'] && { lineDash: dataset['borderDash'] }),
+ ...(dataset["borderDash"] && { lineDash: dataset["borderDash"] }),
strokeStyle: color.borderColor,
});
});
@@ -218,29 +223,31 @@ export abstract class AbstractHistoryChart {
};
const timeFormat = calculateResolution(this.service, this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).timeFormat;
- options.scales.x['time'].unit = timeFormat;
+ options.scales.x["time"].unit = timeFormat;
switch (timeFormat) {
- case 'hour':
- options.scales.x.ticks['source'] = 'auto';//labels,auto
+ case "hour":
+ options.scales.x.ticks["source"] = "auto";//labels,auto
options.scales.x.ticks.maxTicksLimit = 31;
break;
- case 'day':
- case 'month':
- options.scales.x.ticks['source'] = 'data';
+ case "day":
+ case "month":
+ options.scales.x.ticks["source"] = "data";
+ break;
+ default:
break;
}
// Only one yAxis defined
- options = NewAbstractHistoryChart.getYAxisOptions(options, yAxis, this.translate, 'line', locale, ChartConstants.EMPTY_DATASETS, false);
+ options = NewAbstractHistoryChart.getYAxisOptions(options, yAxis, this.translate, "line", locale, ChartConstants.EMPTY_DATASETS, false);
- options.scales.x['stacked'] = true;
- options.scales[ChartAxis.LEFT]['stacked'] = false;
- options = NewAbstractHistoryChart.applyChartTypeSpecificOptionsChanges('line', options, this.service, chartObject);
+ options.scales.x["stacked"] = true;
+ options.scales[ChartAxis.LEFT]["stacked"] = false;
+ options = NewAbstractHistoryChart.applyChartTypeSpecificOptionsChanges("line", options, this.service, chartObject);
/** Overwrite default yAxisId */
this.datasets = this.datasets
.map(el => {
- el['yAxisID'] = ChartAxis.LEFT;
+ el["yAxisID"] = ChartAxis.LEFT;
return el;
});
}).then(() => {
@@ -265,34 +272,47 @@ export abstract class AbstractHistoryChart {
this.errorResponse = null;
- const result: Promise = new Promise((resolve, reject) => {
- this.service.getCurrentEdge().then(edge => {
- this.service.getConfig().then(config => {
- this.setLabel(config);
- this.getChannelAddresses(edge, config).then(channelAddresses => {
-
- const request = new QueryHistoricTimeseriesDataRequest(DateUtils.maxDate(fromDate, this.edge?.firstSetupProtocol), toDate, channelAddresses, resolution);
- edge.sendRequest(this.service.websocket, request).then(response => {
- resolve(response as QueryHistoricTimeseriesDataResponse);
- }).catch(error => {
- this.errorResponse = error;
- resolve(new QueryHistoricTimeseriesDataResponse(error.id, {
- timestamps: [null], data: { null: null },
- }));
+ if (this.debounceTimeout) {
+ clearTimeout(this.debounceTimeout);
+ }
+
+ this.debounceTimeout = setTimeout(() => {
+ const result: Promise = new Promise((resolve, reject) => {
+ this.service.getCurrentEdge().then(edge => {
+ this.service.getConfig().then(config => {
+ this.setLabel(config);
+ this.getChannelAddresses(edge, config).then(channelAddresses => {
+ const request = new QueryHistoricTimeseriesDataRequest(DateUtils.maxDate(fromDate, this.edge?.firstSetupProtocol), toDate, channelAddresses, resolution);
+ edge.sendRequest(this.service.websocket, request).then(response => {
+ resolve(response as QueryHistoricTimeseriesDataResponse);
+ this.activeQueryData = request.id;
+ }).catch(error => {
+ this.errorResponse = error;
+ resolve(new QueryHistoricTimeseriesDataResponse(error.id, {
+ timestamps: [null], data: { null: null },
+ }));
+ });
});
});
});
+ }).then((response) => {
+ if (this.activeQueryData !== response.id) {
+ return;
+ }
+ if (Utils.isDataEmpty(response)) {
+ this.loading = false;
+ this.service.stopSpinner(this.spinnerId);
+ this.initializeChart();
+ }
+ return DateTimeUtils.normalizeTimestamps(resolution.unit, response);
});
- }).then((response) => {
- if (Utils.isDataEmpty(response)) {
- this.loading = false;
- this.service.stopSpinner(this.spinnerId);
- this.initializeChart();
- }
- return DateTimeUtils.normalizeTimestamps(resolution.unit, response);
- });
- return result;
+ return result;
+ }, ChartConstants.REQUEST_TIMEOUT);
+
+ return new Promise((resolve) => {
+ resolve(new QueryHistoricTimeseriesDataResponse("", { timestamps: [], data: {} }));
+ });
}
/**
@@ -401,7 +421,7 @@ export abstract class AbstractHistoryChart {
* @param spinnerSelector to stop spinner
*/
protected initializeChart() {
- EMPTY_DATASET[0].label = this.translate.instant('Edge.History.noData');
+ EMPTY_DATASET[0].label = this.translate.instant("Edge.History.noData");
this.datasets = EMPTY_DATASET;
this.labels = [];
this.loading = false;
diff --git a/ui/src/app/edge/history/abstracthistorywidget.ts b/ui/src/app/edge/history/abstracthistorywidget.ts
index 8f07ccf5cc4..2af3a49bc47 100644
--- a/ui/src/app/edge/history/abstracthistorywidget.ts
+++ b/ui/src/app/edge/history/abstracthistorywidget.ts
@@ -1,14 +1,17 @@
// @ts-strict-ignore
-import { JsonrpcResponseError } from 'src/app/shared/jsonrpc/base';
-import { QueryHistoricTimeseriesDataRequest } from 'src/app/shared/jsonrpc/request/queryHistoricTimeseriesDataRequest';
-import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { ChannelAddress, Edge, EdgeConfig, Service } from 'src/app/shared/shared';
-import { calculateResolution } from './shared';
-import { DateUtils } from 'src/app/shared/utils/date/dateutils';
+import { JsonrpcResponseError } from "src/app/shared/jsonrpc/base";
+import { QueryHistoricTimeseriesDataRequest } from "src/app/shared/jsonrpc/request/queryHistoricTimeseriesDataRequest";
+import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { ChannelAddress, Edge, EdgeConfig, Service } from "src/app/shared/shared";
+import { DateUtils } from "src/app/shared/utils/date/dateutils";
+import { DateTimeUtils } from "src/app/shared/utils/datetime/datetime-utils";
+import { calculateResolution } from "./shared";
// NOTE: Auto-refresh of widgets is currently disabled to reduce server load
export abstract class AbstractHistoryWidget {
+ private activeQueryData: string;
+
//observable is used to fetch new widget data every 5 minutes
// private refreshWidgetData = interval(600000);
@@ -52,13 +55,14 @@ export abstract class AbstractHistoryWidget {
protected queryHistoricTimeseriesData(fromDate: Date, toDate: Date): Promise {
const resolution = calculateResolution(this.service, fromDate, toDate).resolution;
- return new Promise((resolve, reject) => {
+ const result: Promise = new Promise((resolve, reject) => {
this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.getChannelAddresses(edge, config).then(channelAddresses => {
const request = new QueryHistoricTimeseriesDataRequest(DateUtils.maxDate(fromDate, edge?.firstSetupProtocol), toDate, channelAddresses, resolution);
edge.sendRequest(this.service.websocket, request).then(response => {
const result = (response as QueryHistoricTimeseriesDataResponse).result;
+ this.activeQueryData = response.id;
if (Object.keys(result.data).length != 0 && Object.keys(result.timestamps).length != 0) {
resolve(response as QueryHistoricTimeseriesDataResponse);
} else {
@@ -68,7 +72,13 @@ export abstract class AbstractHistoryWidget {
}).catch(reason => reject(reason));
});
});
+ }).then((response) => {
+ if (this.activeQueryData !== response.id) {
+ return;
+ }
+ return DateTimeUtils.normalizeTimestamps(resolution.unit, response);
});
+ return result;
}
/**
diff --git a/ui/src/app/edge/history/chpsoc/chart.component.ts b/ui/src/app/edge/history/chpsoc/chart.component.ts
index 3be26bf6160..89019ad7b87 100644
--- a/ui/src/app/edge/history/chpsoc/chart.component.ts
+++ b/ui/src/app/edge/history/chpsoc/chart.component.ts
@@ -1,16 +1,15 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
-import { YAxisTitle } from 'src/app/shared/service/utils';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'chpsocchart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "chpsocchart",
+ templateUrl: "../abstracthistorychart.html",
})
export class ChpSocChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -31,7 +30,6 @@ export class ChpSocChartComponent extends AbstractHistoryChart implements OnInit
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -49,10 +47,10 @@ export class ChpSocChartComponent extends AbstractHistoryChart implements OnInit
this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
this.service.getCurrentEdge().then(() => {
this.service.getConfig().then(config => {
- const outputChannel = config.getComponentProperties(this.componentId)['outputChannelAddress'];
- const inputChannel = config.getComponentProperties(this.componentId)['inputChannelAddress'];
- const lowThreshold = this.componentId + '/_PropertyLowThreshold';
- const highThreshold = this.componentId + '/_PropertyHighThreshold';
+ const outputChannel = config.getComponentProperties(this.componentId)["outputChannelAddress"];
+ const inputChannel = config.getComponentProperties(this.componentId)["inputChannelAddress"];
+ const lowThreshold = this.componentId + "/_PropertyLowThreshold";
+ const highThreshold = this.componentId + "/_PropertyHighThreshold";
const result = response.result;
// convert labels
const labels: Date[] = [];
@@ -80,8 +78,8 @@ export class ChpSocChartComponent extends AbstractHistoryChart implements OnInit
data: data,
});
this.colors.push({
- backgroundColor: 'rgba(0,191,255,0.05)',
- borderColor: 'rgba(0,191,255,1)',
+ backgroundColor: "rgba(0,191,255,0.05)",
+ borderColor: "rgba(0,191,255,1)",
});
} else {
const data = result.data[channel].map(value => {
@@ -95,34 +93,34 @@ export class ChpSocChartComponent extends AbstractHistoryChart implements OnInit
});
if (channel == inputChannel) {
datasets.push({
- label: this.translate.instant('General.soc'),
+ label: this.translate.instant("General.soc"),
data: data,
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(0,223,0,1)",
});
}
if (channel == lowThreshold) {
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.CHP.lowThreshold'),
+ label: this.translate.instant("Edge.Index.Widgets.CHP.lowThreshold"),
data: data,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(0,191,255,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(0,191,255,1)",
});
}
if (channel == highThreshold) {
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.CHP.highThreshold'),
+ label: this.translate.instant("Edge.Index.Widgets.CHP.highThreshold"),
data: data,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(0,191,255,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(0,191,255,1)",
});
}
}
@@ -145,20 +143,20 @@ export class ChpSocChartComponent extends AbstractHistoryChart implements OnInit
this.initializeChart();
return;
}).finally(() => {
- this.unit = YAxisTitle.PERCENTAGE;
+ this.unit = YAxisType.PERCENTAGE;
this.setOptions(this.options);
});
}
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
- const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['outputChannelAddress']);
- const inputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['inputChannelAddress']);
+ const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)["outputChannelAddress"]);
+ const inputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)["inputChannelAddress"]);
const result: ChannelAddress[] = [
outputChannel,
inputChannel,
- new ChannelAddress(this.componentId, '_PropertyHighThreshold'),
- new ChannelAddress(this.componentId, '_PropertyLowThreshold'),
+ new ChannelAddress(this.componentId, "_PropertyHighThreshold"),
+ new ChannelAddress(this.componentId, "_PropertyLowThreshold"),
];
resolve(result);
});
diff --git a/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.html b/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.html
index 45e614e2e66..44ed82a5b13 100644
--- a/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.html
+++ b/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.html
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.ts b/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.ts
index da9418c8c68..56db2b42f82 100644
--- a/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.ts
+++ b/ui/src/app/edge/history/chpsoc/chpsocchartoverview/chpsocchartoverview.component.ts
@@ -1,10 +1,10 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Edge, EdgeConfig, Service } from "../../../../shared/shared";
@Component({
selector: ChpSocChartOverviewComponent.SELECTOR,
- templateUrl: './chpsocchartoverview.component.html',
+ templateUrl: "./chpsocchartoverview.component.html",
})
export class ChpSocChartOverviewComponent implements OnInit {
@@ -19,7 +19,7 @@ export class ChpSocChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.edge = edge;
this.config = config;
diff --git a/ui/src/app/edge/history/chpsoc/widget.component.ts b/ui/src/app/edge/history/chpsoc/widget.component.ts
index a72c4c2fb34..9056355309b 100644
--- a/ui/src/app/edge/history/chpsoc/widget.component.ts
+++ b/ui/src/app/edge/history/chpsoc/widget.component.ts
@@ -1,15 +1,15 @@
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryWidget } from '../abstracthistorywidget';
-import { calculateActiveTimeOverPeriod } from '../shared';
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryWidget } from "../abstracthistorywidget";
+import { calculateActiveTimeOverPeriod } from "../shared";
@Component({
selector: ChpSocWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class ChpSocWidgetComponent extends AbstractHistoryWidget implements OnInit, OnChanges, OnDestroy {
@@ -29,8 +29,8 @@ export class ChpSocWidgetComponent extends AbstractHistoryWidget implements OnIn
}
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(response => {
- this.edge = response;
+ this.service.getCurrentEdge().then(edge => {
+ this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
});
@@ -50,7 +50,7 @@ export class ChpSocWidgetComponent extends AbstractHistoryWidget implements OnIn
this.queryHistoricTimeseriesData(this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).then(response => {
this.service.getConfig().then(config => {
const result = (response as QueryHistoricTimeseriesDataResponse).result;
- const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['outputChannelAddress']);
+ const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)["outputChannelAddress"]);
this.activeSecondsOverPeriod = calculateActiveTimeOverPeriod(outputChannel, result);
});
});
@@ -58,7 +58,7 @@ export class ChpSocWidgetComponent extends AbstractHistoryWidget implements OnIn
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
- const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['outputChannelAddress']);
+ const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)["outputChannelAddress"]);
const channeladdresses = [outputChannel];
resolve(channeladdresses);
});
diff --git a/ui/src/app/edge/history/common/autarchy/Autarchy.ts b/ui/src/app/edge/history/common/autarchy/Autarchy.ts
index 1407ff291e6..cc35ac3c7ce 100644
--- a/ui/src/app/edge/history/common/autarchy/Autarchy.ts
+++ b/ui/src/app/edge/history/common/autarchy/Autarchy.ts
@@ -1,9 +1,9 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ChartComponent } from './chart/chart';
-import { OverviewComponent } from './overview/overview';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { ChartComponent } from "./chart/chart";
+import { FlatComponent } from "./flat/flat";
+import { OverviewComponent } from "./overview/overview";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/history/common/autarchy/chart/chart.ts b/ui/src/app/edge/history/common/autarchy/chart/chart.ts
index e7a0998880c..8a17580e381 100644
--- a/ui/src/app/edge/history/common/autarchy/chart/chart.ts
+++ b/ui/src/app/edge/history/common/autarchy/chart/chart.ts
@@ -1,52 +1,52 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, Utils } from "src/app/shared/shared";
@Component({
- selector: 'autarchychart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "autarchychart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class ChartComponent extends AbstractHistoryChart {
protected override getChartData(): HistoryUtils.ChartData {
- this.spinnerId = 'autarchy-chart';
+ this.spinnerId = "autarchy-chart";
return {
input:
[{
- name: 'Consumption',
- powerChannel: ChannelAddress.fromString('_sum/ConsumptionActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/ConsumptionActiveEnergy'),
+ name: "Consumption",
+ powerChannel: ChannelAddress.fromString("_sum/ConsumptionActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/ConsumptionActiveEnergy"),
},
{
- name: 'GridBuy',
- powerChannel: ChannelAddress.fromString('_sum/GridActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/GridBuyActiveEnergy'),
+ name: "GridBuy",
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/GridBuyActiveEnergy"),
converter: HistoryUtils.ValueConverter.NON_NULL_OR_NEGATIVE,
}],
output: (data: HistoryUtils.ChannelData) => {
return [{
- name: this.translate.instant('General.autarchy'),
+ name: this.translate.instant("General.autarchy"),
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return Utils.calculateAutarchy(energyValues?.result.data['_sum/GridBuyActiveEnergy'] ?? null, energyValues?.result.data['_sum/ConsumptionActiveEnergy'] ?? null);
+ return Utils.calculateAutarchy(energyValues?.result.data["_sum/GridBuyActiveEnergy"] ?? null, energyValues?.result.data["_sum/ConsumptionActiveEnergy"] ?? null);
},
converter: () => {
- return data['Consumption']
+ return data["Consumption"]
?.map((value, index) =>
- Utils.calculateAutarchy(data['GridBuy'][index], value),
+ Utils.calculateAutarchy(data["GridBuy"][index], value),
);
},
- color: 'rgb(0,152,204)',
+ color: "rgb(0,152,204)",
}];
},
tooltip: {
- formatNumber: '1.0-0',
+ formatNumber: "1.0-0",
},
yAxes: [{
- unit: YAxisTitle.PERCENTAGE,
- position: 'left',
+ unit: YAxisType.PERCENTAGE,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}],
};
diff --git a/ui/src/app/edge/history/common/autarchy/flat/flat.html b/ui/src/app/edge/history/common/autarchy/flat/flat.html
index e6e5fe45c4a..632cc21b2df 100644
--- a/ui/src/app/edge/history/common/autarchy/flat/flat.html
+++ b/ui/src/app/edge/history/common/autarchy/flat/flat.html
@@ -2,4 +2,4 @@
routerLink="/device/{{edge.id}}/history/autarchychart" *ngIf="isInitialized">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/autarchy/flat/flat.ts b/ui/src/app/edge/history/common/autarchy/flat/flat.ts
index 748253a44bd..429cca30b54 100644
--- a/ui/src/app/edge/history/common/autarchy/flat/flat.ts
+++ b/ui/src/app/edge/history/common/autarchy/flat/flat.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, Utils } from '../../../../../shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, Utils } from "../../../../../shared/shared";
@Component({
- selector: 'autarchyWidget',
- templateUrl: './flat.html',
+ selector: "autarchyWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -14,14 +14,14 @@ export class FlatComponent extends AbstractFlatWidget {
protected override onCurrentData(currentData: CurrentData) {
this.autarchyValue =
Utils.calculateAutarchy(
- currentData.allComponents['_sum/GridBuyActiveEnergy'] / 1000,
- currentData.allComponents['_sum/ConsumptionActiveEnergy'] / 1000);
+ currentData.allComponents["_sum/GridBuyActiveEnergy"] / 1000,
+ currentData.allComponents["_sum/ConsumptionActiveEnergy"] / 1000);
}
protected override getChannelAddresses(): ChannelAddress[] {
return [
- new ChannelAddress('_sum', 'GridBuyActiveEnergy'),
- new ChannelAddress('_sum', 'ConsumptionActiveEnergy'),
+ new ChannelAddress("_sum", "GridBuyActiveEnergy"),
+ new ChannelAddress("_sum", "ConsumptionActiveEnergy"),
];
}
}
diff --git a/ui/src/app/edge/history/common/autarchy/overview/overview.html b/ui/src/app/edge/history/common/autarchy/overview/overview.html
index 6daae33cb38..63b79fdd217 100644
--- a/ui/src/app/edge/history/common/autarchy/overview/overview.html
+++ b/ui/src/app/edge/history/common/autarchy/overview/overview.html
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/autarchy/overview/overview.ts b/ui/src/app/edge/history/common/autarchy/overview/overview.ts
index a3f812c1a88..51ed8f95a67 100644
--- a/ui/src/app/edge/history/common/autarchy/overview/overview.ts
+++ b/ui/src/app/edge/history/common/autarchy/overview/overview.ts
@@ -1,7 +1,7 @@
-import { Component } from '@angular/core';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
+import { Component } from "@angular/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
@Component({
- templateUrl: './overview.html',
+ templateUrl: "./overview.html",
})
export class OverviewComponent extends AbstractHistoryChartOverview { }
diff --git a/ui/src/app/edge/history/common/common.ts b/ui/src/app/edge/history/common/common.ts
index 2dad8182fd7..bdfda86d25d 100644
--- a/ui/src/app/edge/history/common/common.ts
+++ b/ui/src/app/edge/history/common/common.ts
@@ -1,11 +1,10 @@
-import { NgModule } from '@angular/core';
-
-import { Common_Autarchy } from './autarchy/Autarchy';
-import { CommonEnergyMonitor } from './energy/energy';
-import { Common_Grid } from './grid/grid';
-import { Common_Production } from './production/production';
-import { Common_Selfconsumption } from './selfconsumption/SelfConsumption';
-import { Common_Consumption } from './consumption/Consumption';
+import { NgModule } from "@angular/core";
+import { Common_Autarchy } from "./autarchy/Autarchy";
+import { Common_Consumption } from "./consumption/Consumption";
+import { CommonEnergyMonitor } from "./energy/energy";
+import { Common_Grid } from "./grid/grid";
+import { Common_Production } from "./production/production";
+import { Common_Selfconsumption } from "./selfconsumption/SelfConsumption";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/history/common/consumption/Consumption.ts b/ui/src/app/edge/history/common/consumption/Consumption.ts
index e6ce25df02b..c36c786695d 100644
--- a/ui/src/app/edge/history/common/consumption/Consumption.ts
+++ b/ui/src/app/edge/history/common/consumption/Consumption.ts
@@ -1,14 +1,16 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { FooterNavigationModule } from 'src/app/shared/components/footer/subnavigation/footerNavigation.module';
-import { SharedModule } from 'src/app/shared/shared.module';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { FooterNavigationModule } from "src/app/shared/components/footer/subnavigation/footerNavigation.module";
+import { SharedModule } from "src/app/shared/shared.module";
-import { ChartComponent } from './chart/chart';
-import { ChartComponent as DetailsChartComponent } from './details/chart/chart';
-import { DetailsOverviewComponent } from './details/details.overview';
-import { FlatComponent } from './flat/flat';
-import { OverviewComponent } from './overview/overview';
-import { CurrentVoltageModule } from 'src/app/shared/components/edge/meter/currentVoltage/currentVoltageModule';
+import { CurrentVoltageModule } from "src/app/shared/components/edge/meter/currentVoltage/currentVoltageModule";
+import { ChartComponent } from "./chart/chart";
+import { ConsumptionMeterChartDetailsComponent } from "./details/chart/consumptionMeter";
+import { EvcsChartDetailsComponent } from "./details/chart/evcs";
+import { SumChartDetailsComponent } from "./details/chart/sum";
+import { DetailsOverviewComponent } from "./details/details.overview";
+import { FlatComponent } from "./flat/flat";
+import { OverviewComponent } from "./overview/overview";
@NgModule({
imports: [
@@ -25,7 +27,9 @@ import { CurrentVoltageModule } from 'src/app/shared/components/edge/meter/curre
// consumptionChart:componentId
DetailsOverviewComponent,
- DetailsChartComponent,
+ ConsumptionMeterChartDetailsComponent,
+ EvcsChartDetailsComponent,
+ SumChartDetailsComponent,
],
exports: [
// consumptionChart
@@ -35,7 +39,9 @@ import { CurrentVoltageModule } from 'src/app/shared/components/edge/meter/curre
// consumptionChart:componentId
DetailsOverviewComponent,
- DetailsChartComponent,
+ ConsumptionMeterChartDetailsComponent,
+ EvcsChartDetailsComponent,
+ SumChartDetailsComponent,
],
})
export class Common_Consumption { }
diff --git a/ui/src/app/edge/history/common/consumption/chart/channels.spec.ts b/ui/src/app/edge/history/common/consumption/chart/channels.spec.ts
index fdb26cdf064..1b92f47b159 100644
--- a/ui/src/app/edge/history/common/consumption/chart/channels.spec.ts
+++ b/ui/src/app/edge/history/common/consumption/chart/channels.spec.ts
@@ -23,12 +23,12 @@ export namespace History {
}),
dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", {
data: {
- '_sum/ConsumptionActivePower': [null, null, null, 565.8045977011494, 560.5148514851485, 561.425925925926, 573.2169811320755, 565.8080808080808, 587.9803921568628, 584.2389380530974, 607.4818181818182, 605.0275229357799, 595.6407766990292, 602.5294117647059, 578.1684210526316, 581.6813186813187, 649.5166666666667, 560.3, 567.0373831775701, 629.7672413793103, 568.8613861386139, 589.6039603960396, 634.5090909090909, 622.6633663366337, 617.7196261682243, 608.122641509434, 602.78, 650.8155339805825, 605.8877551020408, 594.3904761904762, 576.36, 565.066037735849, 587.495145631068, 626.375, 681.9428571428572, 650.4629629629629, 631.373831775701, 687.25, 560.2452830188679, 527.8952380952381, 620.2222222222222, 546.6355140186915, 587.8130841121496, 604, 616.295918367347, 578.940594059406, 594.3396226415094, 648.1078431372549, null, null, null, 565.2183908045977, 573.6481481481482, 536.5462962962963, 558.081081081081, 574.7543859649123, 574.3557692307693, 596.9047619047619, 654.072072072072, 615.21, 612.8045977011494, 636.11, 613.7948717948718, 538.8857142857142, 537.1157894736842, 551.1634615384615, 558.8809523809524, 559.1222222222223, 618.5576923076923, 654.3287671232877, 616.0574712643678, 588.9056603773585, 578.7096774193549, 583.0360360360361, 572.5700934579439, 595.2631578947369, 745.0888888888888, 820.7323943661971, 2651.1923076923076, 8063.131147540984, 6952.055555555556, 7413.41052631579, 6695.175, 6688.301075268817, 7135.544444444445, 6935.6125, 6768.398148148148, 6962.593220338983, 3449.51968503937, 677.4427860696518, 982.7305699481865, 858.2012987012987, 767.8924050632911, 761.950495049505, 682.1319796954315, 725.4198473282443, 702.1286549707602, 730.9484536082474, 739, 730.572864321608, 754.7467532467532, 657.373417721519, 640.9480519480519, 669.8156424581006, 787.6280991735537, 2931.229357798165, 1954.2808988764045, 777.5346534653465, 1098.538860103627, 1244.1524390243903, 2919.4913793103447, 2987.4188034188032, 3414.029411764706, 1355.2, 2714.2824427480914, 2657.8703703703704, 2873.892307692308, 6140.337078651685, 3966.560606060606, 3021.5789473684213, 1774.1875, 1076.46, 1426.8691588785048, 1261.0386740331492, 1019.3491124260355, 1194.960199004975, 1241.2878787878788, 3323, 3968.45625, 1468.0961538461538, 3630.4166666666665, 2269.5301204819275, 2554.391025641026, 1845.7888888888888, 1728.9767441860465, 2862.08, 2324.1241379310345, 1964.0169491525423, 1808.4, 3466.05035971223, 2297.4397590361446, 2530.0493827160494, 2439.3584905660377, 2007.9060773480662, 1751.5, 1416.3181818181818, 1429.2298850574712, 1452.0298507462687, 1489.720430107527, 1633.095238095238, 1826.2928571428572, 1610.1904761904761, 1680.9292929292928, 2881.743119266055, 3585.1634615384614, 3689.1666666666665, 3657.340277777778, 3643.5348837209303, 3714.8645833333335, 3731.375, 3744.79, 3636.2363636363634, 4273.113924050633, 3446.2, 3538.714285714286, 3790.6065573770493, 3527.675, 3467.671232876712, 3559.5, 3798.2, 5460.666666666667, 1309.4406779661017, 1535.7454545454545, 3423.8260869565215, 3382.3636363636365, 3400.6315789473683, 2950.75, 3386.731707317073, 2506, 1447.1666666666667, 1442.6, 946, 942.578947368421, 950.7142857142857, 947, 976.2857142857143, 1786.2857142857142, 1513.5777777777778, 1499.5625, 1338, 1327.8125, 1273.9175257731958, 1438.7457627118645, 1248.4186046511627, 1286.6693548387098, 1284.8934911242604, 1223.7952755905512, 748.09375, 871.7684210526315, 844.5338983050848, 791.675, 804.1932773109244, 730.3737373737374, 705.5024390243902, 687.2407407407408, 690.9939759036145, 751, 765.139344262295, 686.8717948717949, 669.7434210526316, 1767.8091603053435, 724.6764705882352, 748.2772277227723, 940.1142857142858, 750.368, 1366.0232558139535, 727.4137931034483, 710.719512195122, 689.8555555555556, 739.453488372093, 817.875, 730.4303797468355, 735.5890410958904, 738.2258064516129, 1906.9217391304348, 2290.785714285714, 1207.5072463768115, 1167.5890410958905, 1229.0208333333333, 1192.3777777777777, 1208.871794871795, 1367.715909090909, 1284.2233009708739, 1163.1739130434783, 1152.53, 1161.4545454545455, 1219.5681818181818, 1183.752808988764, 1197.778947368421, 1233.888888888889, 1275.070588235294, 1235.554054054054, 1207.83908045977, 1241.6184210526317, 1159.042735042735, 1138.2948717948718, 1106.9915966386554, 1171.4504504504505, 1223.822429906542, 1122.169642857143, 1018.8928571428571, 981.8285714285714, 998.8363636363637, 6056.572916666667, 7225.528846153846, 7193.834782608696, 7507.321100917431, 7588.695238095238, 7678.689189189189, 9469.633027522936, 10236.186046511628, 10106.608695652174, 9989.125, 9948.229357798165, 9796.030927835052, 9704.217391304348, 8454.028571428571, 6813.476190476191, 6706.782608695652, 6523.452173913043, 6661.553571428572, 5620.777777777777, 812.3142857142857, 809.5892857142857, 866.4786324786324, 877.8319327731092, 810.8141592920354, 815.7121212121212, 770.6470588235294, 763.3157894736842, 781.5151515151515, 807.5833333333334, 824.743119266055, 876.2151898734177, 882.424, 750.2213114754098, 675.9549549549549, 637.1222222222223],
- '_sum/ConsumptionActivePowerL1': [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741],
- '_sum/ConsumptionActivePowerL2': [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741],
- '_sum/ConsumptionActivePowerL3': [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741],
- 'evcs0/ChargePower': [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, 4104.142857142857, 5829.969696969697, 5806.212121212121, 6195.333333333333, 5777.333333333333, 5786.25, 5789.727272727273, 5789.571428571428, 5783.0526315789475, 5772.657142857143, 4864.8421052631575, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, null, null, 0, 0, null, 0, 0, null, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, null, null, 0, 0, 0, null, 0, null, null, 0, 0, null, 0, null, null, null, null, 0, null, 0, 0, null, null, null, null, null, 0, null, null, null, null, null, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, 0, null, 0, 0, 0, 0, 0, 0, null, null, 0, 0, null, 0, 0, 0, null, null, 0, 0, null, 0, 0, null, null, null, 0, null, null, null, null, null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 0, null, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, 5213.0952380952385, 5787.580645161291, 5789.484848484848, 5790.818181818182, 5807.34375, 5820.136363636364, 5798.862068965517, 5809.041666666667, 5805.5625, 5794.346153846154, 5798, 5740.214285714285, 5727.242424242424, 5742.542857142857, 5753.424242424242, 5752.4, 5731.966666666666, 5734.323529411765, 5335.586206896552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null],
- 'meter0/ActivePower': [124.28571428571429, 0, null, 0, 173.33333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113.33333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113.33333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113.33333333333333, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2126.875, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176.25, 175.83333333333334, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ConsumptionActivePower": [null, null, null, 565.8045977011494, 560.5148514851485, 561.425925925926, 573.2169811320755, 565.8080808080808, 587.9803921568628, 584.2389380530974, 607.4818181818182, 605.0275229357799, 595.6407766990292, 602.5294117647059, 578.1684210526316, 581.6813186813187, 649.5166666666667, 560.3, 567.0373831775701, 629.7672413793103, 568.8613861386139, 589.6039603960396, 634.5090909090909, 622.6633663366337, 617.7196261682243, 608.122641509434, 602.78, 650.8155339805825, 605.8877551020408, 594.3904761904762, 576.36, 565.066037735849, 587.495145631068, 626.375, 681.9428571428572, 650.4629629629629, 631.373831775701, 687.25, 560.2452830188679, 527.8952380952381, 620.2222222222222, 546.6355140186915, 587.8130841121496, 604, 616.295918367347, 578.940594059406, 594.3396226415094, 648.1078431372549, null, null, null, 565.2183908045977, 573.6481481481482, 536.5462962962963, 558.081081081081, 574.7543859649123, 574.3557692307693, 596.9047619047619, 654.072072072072, 615.21, 612.8045977011494, 636.11, 613.7948717948718, 538.8857142857142, 537.1157894736842, 551.1634615384615, 558.8809523809524, 559.1222222222223, 618.5576923076923, 654.3287671232877, 616.0574712643678, 588.9056603773585, 578.7096774193549, 583.0360360360361, 572.5700934579439, 595.2631578947369, 745.0888888888888, 820.7323943661971, 2651.1923076923076, 8063.131147540984, 6952.055555555556, 7413.41052631579, 6695.175, 6688.301075268817, 7135.544444444445, 6935.6125, 6768.398148148148, 6962.593220338983, 3449.51968503937, 677.4427860696518, 982.7305699481865, 858.2012987012987, 767.8924050632911, 761.950495049505, 682.1319796954315, 725.4198473282443, 702.1286549707602, 730.9484536082474, 739, 730.572864321608, 754.7467532467532, 657.373417721519, 640.9480519480519, 669.8156424581006, 787.6280991735537, 2931.229357798165, 1954.2808988764045, 777.5346534653465, 1098.538860103627, 1244.1524390243903, 2919.4913793103447, 2987.4188034188032, 3414.029411764706, 1355.2, 2714.2824427480914, 2657.8703703703704, 2873.892307692308, 6140.337078651685, 3966.560606060606, 3021.5789473684213, 1774.1875, 1076.46, 1426.8691588785048, 1261.0386740331492, 1019.3491124260355, 1194.960199004975, 1241.2878787878788, 3323, 3968.45625, 1468.0961538461538, 3630.4166666666665, 2269.5301204819275, 2554.391025641026, 1845.7888888888888, 1728.9767441860465, 2862.08, 2324.1241379310345, 1964.0169491525423, 1808.4, 3466.05035971223, 2297.4397590361446, 2530.0493827160494, 2439.3584905660377, 2007.9060773480662, 1751.5, 1416.3181818181818, 1429.2298850574712, 1452.0298507462687, 1489.720430107527, 1633.095238095238, 1826.2928571428572, 1610.1904761904761, 1680.9292929292928, 2881.743119266055, 3585.1634615384614, 3689.1666666666665, 3657.340277777778, 3643.5348837209303, 3714.8645833333335, 3731.375, 3744.79, 3636.2363636363634, 4273.113924050633, 3446.2, 3538.714285714286, 3790.6065573770493, 3527.675, 3467.671232876712, 3559.5, 3798.2, 5460.666666666667, 1309.4406779661017, 1535.7454545454545, 3423.8260869565215, 3382.3636363636365, 3400.6315789473683, 2950.75, 3386.731707317073, 2506, 1447.1666666666667, 1442.6, 946, 942.578947368421, 950.7142857142857, 947, 976.2857142857143, 1786.2857142857142, 1513.5777777777778, 1499.5625, 1338, 1327.8125, 1273.9175257731958, 1438.7457627118645, 1248.4186046511627, 1286.6693548387098, 1284.8934911242604, 1223.7952755905512, 748.09375, 871.7684210526315, 844.5338983050848, 791.675, 804.1932773109244, 730.3737373737374, 705.5024390243902, 687.2407407407408, 690.9939759036145, 751, 765.139344262295, 686.8717948717949, 669.7434210526316, 1767.8091603053435, 724.6764705882352, 748.2772277227723, 940.1142857142858, 750.368, 1366.0232558139535, 727.4137931034483, 710.719512195122, 689.8555555555556, 739.453488372093, 817.875, 730.4303797468355, 735.5890410958904, 738.2258064516129, 1906.9217391304348, 2290.785714285714, 1207.5072463768115, 1167.5890410958905, 1229.0208333333333, 1192.3777777777777, 1208.871794871795, 1367.715909090909, 1284.2233009708739, 1163.1739130434783, 1152.53, 1161.4545454545455, 1219.5681818181818, 1183.752808988764, 1197.778947368421, 1233.888888888889, 1275.070588235294, 1235.554054054054, 1207.83908045977, 1241.6184210526317, 1159.042735042735, 1138.2948717948718, 1106.9915966386554, 1171.4504504504505, 1223.822429906542, 1122.169642857143, 1018.8928571428571, 981.8285714285714, 998.8363636363637, 6056.572916666667, 7225.528846153846, 7193.834782608696, 7507.321100917431, 7588.695238095238, 7678.689189189189, 9469.633027522936, 10236.186046511628, 10106.608695652174, 9989.125, 9948.229357798165, 9796.030927835052, 9704.217391304348, 8454.028571428571, 6813.476190476191, 6706.782608695652, 6523.452173913043, 6661.553571428572, 5620.777777777777, 812.3142857142857, 809.5892857142857, 866.4786324786324, 877.8319327731092, 810.8141592920354, 815.7121212121212, 770.6470588235294, 763.3157894736842, 781.5151515151515, 807.5833333333334, 824.743119266055, 876.2151898734177, 882.424, 750.2213114754098, 675.9549549549549, 637.1222222222223],
+ "_sum/ConsumptionActivePowerL1": [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741],
+ "_sum/ConsumptionActivePowerL2": [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741],
+ "_sum/ConsumptionActivePowerL3": [null, null, null, 188.60153256704982, 186.83828382838283, 187.141975308642, 191.07232704402517, 188.60269360269362, 195.99346405228758, 194.7463126843658, 202.4939393939394, 201.6758409785933, 198.54692556634305, 200.84313725490196, 192.7228070175439, 193.89377289377288, 216.50555555555556, 186.76666666666665, 189.01246105919003, 209.92241379310346, 189.6204620462046, 196.53465346534654, 211.5030303030303, 207.55445544554456, 205.90654205607476, 202.7075471698113, 200.92666666666665, 216.93851132686083, 201.9625850340136, 198.13015873015874, 192.12, 188.35534591194968, 195.831715210356, 208.79166666666666, 227.31428571428572, 216.820987654321, 210.45794392523365, 229.08333333333334, 186.74842767295596, 175.9650793650794, 206.74074074074073, 182.21183800623052, 195.93769470404985, 201.33333333333334, 205.43197278911566, 192.98019801980197, 198.11320754716982, 216.0359477124183, null, null, null, 188.40613026819923, 191.21604938271605, 178.84876543209876, 186.027027027027, 191.58479532163744, 191.4519230769231, 198.96825396825398, 218.02402402402402, 205.07000000000002, 204.26819923371647, 212.03666666666666, 204.59829059829062, 179.6285714285714, 179.03859649122808, 183.72115384615384, 186.2936507936508, 186.3740740740741, 206.18589743589743, 218.1095890410959, 205.35249042145594, 196.30188679245282, 192.90322580645162, 194.34534534534535, 190.85669781931463, 198.42105263157896, 248.36296296296294, 273.57746478873236, 883.7307692307692, 2687.7103825136614, 2317.3518518518517, 2471.1368421052634, 2231.725, 2229.4336917562723, 2378.514814814815, 2311.8708333333334, 2256.1327160493825, 2320.864406779661, 1149.8398950131234, 225.81426202321725, 327.5768566493955, 286.06709956709955, 255.96413502109704, 253.983498349835, 227.37732656514382, 241.80661577608143, 234.04288499025338, 243.64948453608247, 246.33333333333334, 243.52428810720266, 251.58225108225108, 219.12447257383965, 213.64935064935062, 223.27188081936686, 262.5426997245179, 977.0764525993883, 651.4269662921348, 259.1782178217822, 366.1796200345423, 414.7174796747968, 973.1637931034483, 995.8062678062678, 1138.0098039215686, 451.73333333333335, 904.7608142493638, 885.9567901234568, 957.9641025641026, 2046.7790262172284, 1322.1868686868686, 1007.1929824561404, 591.3958333333334, 358.82, 475.6230529595016, 420.3462246777164, 339.78303747534517, 398.3200663349917, 413.76262626262627, 1107.6666666666667, 1322.8187500000001, 489.3653846153846, 1210.138888888889, 756.5100401606425, 851.4636752136753, 615.2629629629629, 576.3255813953489, 954.0266666666666, 774.7080459770115, 654.6723163841808, 602.8000000000001, 1155.3501199040768, 765.8132530120482, 843.3497942386831, 813.1194968553459, 669.3020257826887, 583.8333333333334, 472.10606060606057, 476.4099616858237, 484.00995024875624, 496.57347670250897, 544.3650793650794, 608.7642857142857, 536.7301587301587, 560.3097643097643, 960.5810397553518, 1195.054487179487, 1229.7222222222222, 1219.1134259259259, 1214.5116279069769, 1238.2881944444446, 1243.7916666666667, 1248.2633333333333, 1212.0787878787878, 1424.3713080168775, 1148.7333333333333, 1179.5714285714287, 1263.535519125683, 1175.8916666666667, 1155.890410958904, 1186.5, 1266.0666666666666, 1820.2222222222224, 436.48022598870057, 511.91515151515154, 1141.2753623188405, 1127.4545454545455, 1133.5438596491229, 983.5833333333334, 1128.910569105691, 835.3333333333334, 482.3888888888889, 480.8666666666666, 315.3333333333333, 314.1929824561403, 316.90476190476187, 315.6666666666667, 325.42857142857144, 595.4285714285714, 504.52592592592595, 499.8541666666667, 446, 442.6041666666667, 424.63917525773195, 479.5819209039548, 416.1395348837209, 428.8897849462366, 428.29783037475346, 407.93175853018374, 249.36458333333334, 290.58947368421053, 281.51129943502826, 263.89166666666665, 268.0644257703081, 243.45791245791247, 235.16747967479674, 229.08024691358025, 230.33132530120483, 250.33333333333334, 255.04644808743168, 228.95726495726498, 223.24780701754386, 589.2697201017812, 241.55882352941174, 249.42574257425744, 313.37142857142857, 250.12266666666667, 455.3410852713178, 242.47126436781608, 236.90650406504065, 229.95185185185187, 246.484496124031, 272.625, 243.47679324894514, 245.19634703196346, 246.07526881720432, 635.640579710145, 763.5952380952381, 402.50241545893715, 389.1963470319635, 409.6736111111111, 397.4592592592592, 402.95726495726495, 455.905303030303, 428.074433656958, 387.72463768115944, 384.1766666666667, 387.1515151515152, 406.52272727272725, 394.5842696629213, 399.25964912280705, 411.2962962962963, 425.0235294117647, 411.8513513513513, 402.61302681992333, 413.8728070175439, 386.34757834757835, 379.43162393162396, 368.99719887955183, 390.4834834834835, 407.94080996884736, 374.05654761904765, 339.63095238095235, 327.2761904761905, 332.94545454545454, 2018.857638888889, 2408.5096153846152, 2397.9449275362317, 2502.440366972477, 2529.5650793650793, 2559.563063063063, 3156.544342507645, 3412.062015503876, 3368.8695652173915, 3329.7083333333335, 3316.0764525993886, 3265.343642611684, 3234.7391304347825, 2818.0095238095237, 2271.15873015873, 2235.5942028985505, 2174.4840579710144, 2220.5178571428573, 1873.5925925925924, 270.77142857142854, 269.86309523809524, 288.8262108262108, 292.6106442577031, 270.27138643067843, 271.9040404040404, 256.88235294117646, 254.43859649122805, 260.5050505050505, 269.19444444444446, 274.914373088685, 292.07172995780587, 294.1413333333333, 250.0737704918033, 225.31831831831832, 212.3740740740741],
+ "evcs0/ChargePower": [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, 4104.142857142857, 5829.969696969697, 5806.212121212121, 6195.333333333333, 5777.333333333333, 5786.25, 5789.727272727273, 5789.571428571428, 5783.0526315789475, 5772.657142857143, 4864.8421052631575, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, null, null, 0, 0, null, 0, 0, null, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, null, null, 0, 0, 0, null, 0, null, null, 0, 0, null, 0, null, null, null, null, 0, null, 0, 0, null, null, null, null, null, 0, null, null, null, null, null, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, 0, null, 0, 0, 0, 0, 0, 0, null, null, 0, 0, null, 0, 0, 0, null, null, 0, 0, null, 0, 0, null, null, null, 0, null, null, null, null, null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 0, null, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, 5213.0952380952385, 5787.580645161291, 5789.484848484848, 5790.818181818182, 5807.34375, 5820.136363636364, 5798.862068965517, 5809.041666666667, 5805.5625, 5794.346153846154, 5798, 5740.214285714285, 5727.242424242424, 5742.542857142857, 5753.424242424242, 5752.4, 5731.966666666666, 5734.323529411765, 5335.586206896552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null],
+ "meter0/ActivePower": [124.28571428571429, 0, null, 0, 173.33333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113.33333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113.33333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113.33333333333333, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2126.875, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176.25, 175.83333333333334, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
},
timestamps: ["2023-07-02T22:00:00Z", "2023-07-02T22:05:00Z", "2023-07-02T22:10:00Z", "2023-07-02T22:15:00Z", "2023-07-02T22:20:00Z", "2023-07-02T22:25:00Z", "2023-07-02T22:30:00Z", "2023-07-02T22:35:00Z", "2023-07-02T22:40:00Z", "2023-07-02T22:45:00Z", "2023-07-02T22:50:00Z", "2023-07-02T22:55:00Z", "2023-07-02T23:00:00Z", "2023-07-02T23:05:00Z", "2023-07-02T23:10:00Z", "2023-07-02T23:15:00Z", "2023-07-02T23:20:00Z", "2023-07-02T23:25:00Z", "2023-07-02T23:30:00Z", "2023-07-02T23:35:00Z", "2023-07-02T23:40:00Z", "2023-07-02T23:45:00Z", "2023-07-02T23:50:00Z", "2023-07-02T23:55:00Z", "2023-07-03T00:00:00Z", "2023-07-03T00:05:00Z", "2023-07-03T00:10:00Z", "2023-07-03T00:15:00Z", "2023-07-03T00:20:00Z", "2023-07-03T00:25:00Z", "2023-07-03T00:30:00Z", "2023-07-03T00:35:00Z", "2023-07-03T00:40:00Z", "2023-07-03T00:45:00Z", "2023-07-03T00:50:00Z", "2023-07-03T00:55:00Z", "2023-07-03T01:00:00Z", "2023-07-03T01:05:00Z", "2023-07-03T01:10:00Z", "2023-07-03T01:15:00Z", "2023-07-03T01:20:00Z", "2023-07-03T01:25:00Z", "2023-07-03T01:30:00Z", "2023-07-03T01:35:00Z", "2023-07-03T01:40:00Z", "2023-07-03T01:45:00Z", "2023-07-03T01:50:00Z", "2023-07-03T01:55:00Z", "2023-07-03T02:00:00Z", "2023-07-03T02:05:00Z", "2023-07-03T02:10:00Z", "2023-07-03T02:15:00Z", "2023-07-03T02:20:00Z", "2023-07-03T02:25:00Z", "2023-07-03T02:30:00Z", "2023-07-03T02:35:00Z", "2023-07-03T02:40:00Z", "2023-07-03T02:45:00Z", "2023-07-03T02:50:00Z", "2023-07-03T02:55:00Z", "2023-07-03T03:00:00Z", "2023-07-03T03:05:00Z", "2023-07-03T03:10:00Z", "2023-07-03T03:15:00Z", "2023-07-03T03:20:00Z", "2023-07-03T03:25:00Z", "2023-07-03T03:30:00Z", "2023-07-03T03:35:00Z", "2023-07-03T03:40:00Z", "2023-07-03T03:45:00Z", "2023-07-03T03:50:00Z", "2023-07-03T03:55:00Z", "2023-07-03T04:00:00Z", "2023-07-03T04:05:00Z", "2023-07-03T04:10:00Z", "2023-07-03T04:15:00Z", "2023-07-03T04:20:00Z", "2023-07-03T04:25:00Z", "2023-07-03T04:30:00Z", "2023-07-03T04:35:00Z", "2023-07-03T04:40:00Z", "2023-07-03T04:45:00Z", "2023-07-03T04:50:00Z", "2023-07-03T04:55:00Z", "2023-07-03T05:00:00Z", "2023-07-03T05:05:00Z", "2023-07-03T05:10:00Z", "2023-07-03T05:15:00Z", "2023-07-03T05:20:00Z", "2023-07-03T05:25:00Z", "2023-07-03T05:30:00Z", "2023-07-03T05:35:00Z", "2023-07-03T05:40:00Z", "2023-07-03T05:45:00Z", "2023-07-03T05:50:00Z", "2023-07-03T05:55:00Z", "2023-07-03T06:00:00Z", "2023-07-03T06:05:00Z", "2023-07-03T06:10:00Z", "2023-07-03T06:15:00Z", "2023-07-03T06:20:00Z", "2023-07-03T06:25:00Z", "2023-07-03T06:30:00Z", "2023-07-03T06:35:00Z", "2023-07-03T06:40:00Z", "2023-07-03T06:45:00Z", "2023-07-03T06:50:00Z", "2023-07-03T06:55:00Z", "2023-07-03T07:00:00Z", "2023-07-03T07:05:00Z", "2023-07-03T07:10:00Z", "2023-07-03T07:15:00Z", "2023-07-03T07:20:00Z", "2023-07-03T07:25:00Z", "2023-07-03T07:30:00Z", "2023-07-03T07:35:00Z", "2023-07-03T07:40:00Z", "2023-07-03T07:45:00Z", "2023-07-03T07:50:00Z", "2023-07-03T07:55:00Z", "2023-07-03T08:00:00Z", "2023-07-03T08:05:00Z", "2023-07-03T08:10:00Z", "2023-07-03T08:15:00Z", "2023-07-03T08:20:00Z", "2023-07-03T08:25:00Z", "2023-07-03T08:30:00Z", "2023-07-03T08:35:00Z", "2023-07-03T08:40:00Z", "2023-07-03T08:45:00Z", "2023-07-03T08:50:00Z", "2023-07-03T08:55:00Z", "2023-07-03T09:00:00Z", "2023-07-03T09:05:00Z", "2023-07-03T09:10:00Z", "2023-07-03T09:15:00Z", "2023-07-03T09:20:00Z", "2023-07-03T09:25:00Z", "2023-07-03T09:30:00Z", "2023-07-03T09:35:00Z", "2023-07-03T09:40:00Z", "2023-07-03T09:45:00Z", "2023-07-03T09:50:00Z", "2023-07-03T09:55:00Z", "2023-07-03T10:00:00Z", "2023-07-03T10:05:00Z", "2023-07-03T10:10:00Z", "2023-07-03T10:15:00Z", "2023-07-03T10:20:00Z", "2023-07-03T10:25:00Z", "2023-07-03T10:30:00Z", "2023-07-03T10:35:00Z", "2023-07-03T10:40:00Z", "2023-07-03T10:45:00Z", "2023-07-03T10:50:00Z", "2023-07-03T10:55:00Z", "2023-07-03T11:00:00Z", "2023-07-03T11:05:00Z", "2023-07-03T11:10:00Z", "2023-07-03T11:15:00Z", "2023-07-03T11:20:00Z", "2023-07-03T11:25:00Z", "2023-07-03T11:30:00Z", "2023-07-03T11:35:00Z", "2023-07-03T11:40:00Z", "2023-07-03T11:45:00Z", "2023-07-03T11:50:00Z", "2023-07-03T11:55:00Z", "2023-07-03T12:00:00Z", "2023-07-03T12:05:00Z", "2023-07-03T12:10:00Z", "2023-07-03T12:15:00Z", "2023-07-03T12:20:00Z", "2023-07-03T12:25:00Z", "2023-07-03T12:30:00Z", "2023-07-03T12:35:00Z", "2023-07-03T12:40:00Z", "2023-07-03T12:45:00Z", "2023-07-03T12:50:00Z", "2023-07-03T12:55:00Z", "2023-07-03T13:00:00Z", "2023-07-03T13:05:00Z", "2023-07-03T13:10:00Z", "2023-07-03T13:15:00Z", "2023-07-03T13:20:00Z", "2023-07-03T13:25:00Z", "2023-07-03T13:30:00Z", "2023-07-03T13:35:00Z", "2023-07-03T13:40:00Z", "2023-07-03T13:45:00Z", "2023-07-03T13:50:00Z", "2023-07-03T13:55:00Z", "2023-07-03T14:00:00Z", "2023-07-03T14:05:00Z", "2023-07-03T14:10:00Z", "2023-07-03T14:15:00Z", "2023-07-03T14:20:00Z", "2023-07-03T14:25:00Z", "2023-07-03T14:30:00Z", "2023-07-03T14:35:00Z", "2023-07-03T14:40:00Z", "2023-07-03T14:45:00Z", "2023-07-03T14:50:00Z", "2023-07-03T14:55:00Z", "2023-07-03T15:00:00Z", "2023-07-03T15:05:00Z", "2023-07-03T15:10:00Z", "2023-07-03T15:15:00Z", "2023-07-03T15:20:00Z", "2023-07-03T15:25:00Z", "2023-07-03T15:30:00Z", "2023-07-03T15:35:00Z", "2023-07-03T15:40:00Z", "2023-07-03T15:45:00Z", "2023-07-03T15:50:00Z", "2023-07-03T15:55:00Z", "2023-07-03T16:00:00Z", "2023-07-03T16:05:00Z", "2023-07-03T16:10:00Z", "2023-07-03T16:15:00Z", "2023-07-03T16:20:00Z", "2023-07-03T16:25:00Z", "2023-07-03T16:30:00Z", "2023-07-03T16:35:00Z", "2023-07-03T16:40:00Z", "2023-07-03T16:45:00Z", "2023-07-03T16:50:00Z", "2023-07-03T16:55:00Z", "2023-07-03T17:00:00Z", "2023-07-03T17:05:00Z", "2023-07-03T17:10:00Z", "2023-07-03T17:15:00Z", "2023-07-03T17:20:00Z", "2023-07-03T17:25:00Z", "2023-07-03T17:30:00Z", "2023-07-03T17:35:00Z", "2023-07-03T17:40:00Z", "2023-07-03T17:45:00Z", "2023-07-03T17:50:00Z", "2023-07-03T17:55:00Z", "2023-07-03T18:00:00Z", "2023-07-03T18:05:00Z", "2023-07-03T18:10:00Z", "2023-07-03T18:15:00Z", "2023-07-03T18:20:00Z", "2023-07-03T18:25:00Z", "2023-07-03T18:30:00Z", "2023-07-03T18:35:00Z", "2023-07-03T18:40:00Z", "2023-07-03T18:45:00Z", "2023-07-03T18:50:00Z", "2023-07-03T18:55:00Z", "2023-07-03T19:00:00Z", "2023-07-03T19:05:00Z", "2023-07-03T19:10:00Z", "2023-07-03T19:15:00Z", "2023-07-03T19:20:00Z", "2023-07-03T19:25:00Z", "2023-07-03T19:30:00Z", "2023-07-03T19:35:00Z", "2023-07-03T19:40:00Z", "2023-07-03T19:45:00Z", "2023-07-03T19:50:00Z", "2023-07-03T19:55:00Z", "2023-07-03T20:00:00Z", "2023-07-03T20:05:00Z", "2023-07-03T20:10:00Z", "2023-07-03T20:15:00Z", "2023-07-03T20:20:00Z", "2023-07-03T20:25:00Z", "2023-07-03T20:30:00Z", "2023-07-03T20:35:00Z", "2023-07-03T20:40:00Z", "2023-07-03T20:45:00Z", "2023-07-03T20:50:00Z", "2023-07-03T20:55:00Z", "2023-07-03T21:00:00Z", "2023-07-03T21:05:00Z", "2023-07-03T21:10:00Z", "2023-07-03T21:15:00Z", "2023-07-03T21:20:00Z", "2023-07-03T21:25:00Z", "2023-07-03T21:30:00Z", "2023-07-03T21:35:00Z", "2023-07-03T21:40:00Z", "2023-07-03T21:45:00Z", "2023-07-03T21:50:00Z", "2023-07-03T21:55:00Z"],
}),
@@ -47,9 +47,9 @@ export namespace History {
}),
dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", {
data: {
- '_sum/ConsumptionActivePower': [663.9876181166504, 937.5188284518829, 761.5839462743844, 599.7653758542141, 989.6435035552682, 666.2890016920473, 1054.177495462795, 1042.9070871481858, 661.1515631183221, 734.2340980187696, 845.5174603174603, 969.5830886670582, 591.8473777253978, 1960.0339449541284, 919.7469512195122, 1232.6632911392405, 562.9648946840522, 786.2627471383975, 931.422932330827, 837.381753312946, 1112.3010184835912, 902.5108194395176, 807.5094273743017, 988.311229946524, 614.0189035916824, 868.6555377207062, 906.9389035667107, 673.3970826580227, 827.6491228070175, 851.9108776685869, 852.9105374823197, 867.4681647940075, 1303.01722614841, 950.6813929313929, 1124.7157794676807, 908.7814790139906, 1554.5020215633424, 4743.944086021505, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
- 'evcs0/ChargePower': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4586.923076923077, 4846.2192982456145, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
- 'meter0/ActivePower': [27.956773446545736, 27.93238434163701, 28.003065134099618, 27.952205882352942, 27.998854961832063, 28.116988416988416, 27.987117552334944, 28.404306220095695, 22.10508757297748, 24.58289572393098, 25.521831735889243, 33.94027565084227, 66.40016920473774, 74.85995085995086, 56.30216802168022, 40.562390158172235, 42.72727272727273, 41.85823488533704, 29.56647864625302, 26.93582887700535, 29.227223427331886, 31.081920903954803, 29.50079575596817, 29.29895178197065, 27.74064837905237, 27.340638930163447, 27.272103350827614, 27.199391171993913, 26.97577592732778, 26.88116057233704, 27.04352806414662, 26.709154929577466, 24.765209940017137, 20.726594301221166, 24.283930058284763, 27.086363636363636, 47.70666666666666, 53.07067510548523, 52.73466476462197, 54.75776892430279, 50.23135033050047, 41.280141843971634, 31.509341199606688, 26.471978392977718, 31.050412465627865, 29.384710234278668, 27.95327604726101, 28.357904496986556, 25.56408588158751, null, 26.944094488188977, 27.036082474226806, 26.367164179104478, 25.185562632696392, 26.994444444444444, 25.911782850092536, 13.431970713849909, 24.309846431797652, 25.234712230215827, 26.126705653021443, 60.64339781328848, 39.96433289299868, 37.667578659370726, 50.66542750929368, 41.89218523878437, 29.88109495295124, 26.93968253968254, 25.741935483870968, 28.64, 31.331460674157302, 30.017262638717632, 28.636402753872634, 28.408956692913385, 28.14567233384853, 28.25509028044564, 28.12612966601179, 28.175675675675677, 27.409126063418405, 27.54943984413054, 27.246363209760677, 22.96663244353183, 21.65732959850607, 22.306306306306308, 25.892307692307693, 51.8, 52.903225806451616, 59.02597402597402, 39.35110294117647, 33.87375113533152, 29.98160073597056, 26.481973434535103, 29.473684210526315, 28.432854465958776, 29.162214983713355, 28.663861386138613, 28.23558082859464, 28.460033305578683, 29.076231430805315, 28.803389830508475, 28.62062404870624, 28.578023655093475, 28.370570107858242, 27.46546431312356, 27.873293515358363, 25.733505154639175, 26.357802874743328, 27.692853246044734, 24.205128205128204, null, 26.746031746031747, 23.178571428571427, 26.16861826697892, 28.333646616541355, 26.758232235701907, 23.993934142114384, 24.71902131018153, 28.23051948051948, 28.74572127139364, 28.485825458588103, 28.22232263895165, 28.392755392755394, 28.338354151359294, 27.164207340143776, 26.949324324324323, 26.942610652663166, 27.8092203898051, 27.980593607305938, 28.26596758817922, 29.656794425087107, 25.145056246299585, 25.203214100570243, 28.82728749323227, 32.22576966932725, 31.200444197667963, 30.594259988745076, 43.34990059642147, 46.15876288659794, 33.40802469135802, 27.489320388349515, 25.818808777429467, 27.95967741935484, 28.96995139195758, 27.5499557913351, 28.341370558375633, 28.25076053889613, 27.812838360402164, 28.10333080999243, 27.840314136125656, 27.800384615384615, 27.97958397534669, 27.235769230769233, 26.924960505529224, 29.03847980997625, 27.93128390596745, 34.10349373764008, 32.7387339055794, 29.509929906542055, 37.00855745721272, 32.240085744908896, 27.701363636363638, 30.787037037037038, 25.786028602860284, 29.997148966500358, 32.89406099518459, 35.328729281767956, 25.65564738292011, 27.46238030095759, 28.27226647356988],
+ "_sum/ConsumptionActivePower": [663.9876181166504, 937.5188284518829, 761.5839462743844, 599.7653758542141, 989.6435035552682, 666.2890016920473, 1054.177495462795, 1042.9070871481858, 661.1515631183221, 734.2340980187696, 845.5174603174603, 969.5830886670582, 591.8473777253978, 1960.0339449541284, 919.7469512195122, 1232.6632911392405, 562.9648946840522, 786.2627471383975, 931.422932330827, 837.381753312946, 1112.3010184835912, 902.5108194395176, 807.5094273743017, 988.311229946524, 614.0189035916824, 868.6555377207062, 906.9389035667107, 673.3970826580227, 827.6491228070175, 851.9108776685869, 852.9105374823197, 867.4681647940075, 1303.01722614841, 950.6813929313929, 1124.7157794676807, 908.7814790139906, 1554.5020215633424, 4743.944086021505, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "evcs0/ChargePower": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4586.923076923077, 4846.2192982456145, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePower": [27.956773446545736, 27.93238434163701, 28.003065134099618, 27.952205882352942, 27.998854961832063, 28.116988416988416, 27.987117552334944, 28.404306220095695, 22.10508757297748, 24.58289572393098, 25.521831735889243, 33.94027565084227, 66.40016920473774, 74.85995085995086, 56.30216802168022, 40.562390158172235, 42.72727272727273, 41.85823488533704, 29.56647864625302, 26.93582887700535, 29.227223427331886, 31.081920903954803, 29.50079575596817, 29.29895178197065, 27.74064837905237, 27.340638930163447, 27.272103350827614, 27.199391171993913, 26.97577592732778, 26.88116057233704, 27.04352806414662, 26.709154929577466, 24.765209940017137, 20.726594301221166, 24.283930058284763, 27.086363636363636, 47.70666666666666, 53.07067510548523, 52.73466476462197, 54.75776892430279, 50.23135033050047, 41.280141843971634, 31.509341199606688, 26.471978392977718, 31.050412465627865, 29.384710234278668, 27.95327604726101, 28.357904496986556, 25.56408588158751, null, 26.944094488188977, 27.036082474226806, 26.367164179104478, 25.185562632696392, 26.994444444444444, 25.911782850092536, 13.431970713849909, 24.309846431797652, 25.234712230215827, 26.126705653021443, 60.64339781328848, 39.96433289299868, 37.667578659370726, 50.66542750929368, 41.89218523878437, 29.88109495295124, 26.93968253968254, 25.741935483870968, 28.64, 31.331460674157302, 30.017262638717632, 28.636402753872634, 28.408956692913385, 28.14567233384853, 28.25509028044564, 28.12612966601179, 28.175675675675677, 27.409126063418405, 27.54943984413054, 27.246363209760677, 22.96663244353183, 21.65732959850607, 22.306306306306308, 25.892307692307693, 51.8, 52.903225806451616, 59.02597402597402, 39.35110294117647, 33.87375113533152, 29.98160073597056, 26.481973434535103, 29.473684210526315, 28.432854465958776, 29.162214983713355, 28.663861386138613, 28.23558082859464, 28.460033305578683, 29.076231430805315, 28.803389830508475, 28.62062404870624, 28.578023655093475, 28.370570107858242, 27.46546431312356, 27.873293515358363, 25.733505154639175, 26.357802874743328, 27.692853246044734, 24.205128205128204, null, 26.746031746031747, 23.178571428571427, 26.16861826697892, 28.333646616541355, 26.758232235701907, 23.993934142114384, 24.71902131018153, 28.23051948051948, 28.74572127139364, 28.485825458588103, 28.22232263895165, 28.392755392755394, 28.338354151359294, 27.164207340143776, 26.949324324324323, 26.942610652663166, 27.8092203898051, 27.980593607305938, 28.26596758817922, 29.656794425087107, 25.145056246299585, 25.203214100570243, 28.82728749323227, 32.22576966932725, 31.200444197667963, 30.594259988745076, 43.34990059642147, 46.15876288659794, 33.40802469135802, 27.489320388349515, 25.818808777429467, 27.95967741935484, 28.96995139195758, 27.5499557913351, 28.341370558375633, 28.25076053889613, 27.812838360402164, 28.10333080999243, 27.840314136125656, 27.800384615384615, 27.97958397534669, 27.235769230769233, 26.924960505529224, 29.03847980997625, 27.93128390596745, 34.10349373764008, 32.7387339055794, 29.509929906542055, 37.00855745721272, 32.240085744908896, 27.701363636363638, 30.787037037037038, 25.786028602860284, 29.997148966500358, 32.89406099518459, 35.328729281767956, 25.65564738292011, 27.46238030095759, 28.27226647356988],
},
timestamps: ["2023-06-25T22:00:00Z", "2023-06-25T23:00:00Z", "2023-06-26T00:00:00Z", "2023-06-26T01:00:00Z", "2023-06-26T02:00:00Z", "2023-06-26T03:00:00Z", "2023-06-26T04:00:00Z", "2023-06-26T05:00:00Z", "2023-06-26T06:00:00Z", "2023-06-26T07:00:00Z", "2023-06-26T08:00:00Z", "2023-06-26T09:00:00Z", "2023-06-26T10:00:00Z", "2023-06-26T11:00:00Z", "2023-06-26T12:00:00Z", "2023-06-26T13:00:00Z", "2023-06-26T14:00:00Z", "2023-06-26T15:00:00Z", "2023-06-26T16:00:00Z", "2023-06-26T17:00:00Z", "2023-06-26T18:00:00Z", "2023-06-26T19:00:00Z", "2023-06-26T20:00:00Z", "2023-06-26T21:00:00Z", "2023-06-26T22:00:00Z", "2023-06-26T23:00:00Z", "2023-06-27T00:00:00Z", "2023-06-27T01:00:00Z", "2023-06-27T02:00:00Z", "2023-06-27T03:00:00Z", "2023-06-27T04:00:00Z", "2023-06-27T05:00:00Z", "2023-06-27T06:00:00Z", "2023-06-27T07:00:00Z", "2023-06-27T08:00:00Z", "2023-06-27T09:00:00Z", "2023-06-27T10:00:00Z", "2023-06-27T11:00:00Z", "2023-06-27T12:00:00Z", "2023-06-27T13:00:00Z", "2023-06-27T14:00:00Z", "2023-06-27T15:00:00Z", "2023-06-27T16:00:00Z", "2023-06-27T17:00:00Z", "2023-06-27T18:00:00Z", "2023-06-27T19:00:00Z", "2023-06-27T20:00:00Z", "2023-06-27T21:00:00Z", "2023-06-27T22:00:00Z", "2023-06-27T23:00:00Z", "2023-06-28T00:00:00Z", "2023-06-28T01:00:00Z", "2023-06-28T02:00:00Z", "2023-06-28T03:00:00Z", "2023-06-28T04:00:00Z", "2023-06-28T05:00:00Z", "2023-06-28T06:00:00Z", "2023-06-28T07:00:00Z", "2023-06-28T08:00:00Z", "2023-06-28T09:00:00Z", "2023-06-28T10:00:00Z", "2023-06-28T11:00:00Z", "2023-06-28T12:00:00Z", "2023-06-28T13:00:00Z", "2023-06-28T14:00:00Z", "2023-06-28T15:00:00Z", "2023-06-28T16:00:00Z", "2023-06-28T17:00:00Z", "2023-06-28T18:00:00Z", "2023-06-28T19:00:00Z", "2023-06-28T20:00:00Z", "2023-06-28T21:00:00Z", "2023-06-28T22:00:00Z", "2023-06-28T23:00:00Z", "2023-06-29T00:00:00Z", "2023-06-29T01:00:00Z", "2023-06-29T02:00:00Z", "2023-06-29T03:00:00Z", "2023-06-29T04:00:00Z", "2023-06-29T05:00:00Z", "2023-06-29T06:00:00Z", "2023-06-29T07:00:00Z", "2023-06-29T08:00:00Z", "2023-06-29T09:00:00Z", "2023-06-29T10:00:00Z", "2023-06-29T11:00:00Z", "2023-06-29T12:00:00Z", "2023-06-29T13:00:00Z", "2023-06-29T14:00:00Z", "2023-06-29T15:00:00Z", "2023-06-29T16:00:00Z", "2023-06-29T17:00:00Z", "2023-06-29T18:00:00Z", "2023-06-29T19:00:00Z", "2023-06-29T20:00:00Z", "2023-06-29T21:00:00Z", "2023-06-29T22:00:00Z", "2023-06-29T23:00:00Z", "2023-06-30T00:00:00Z", "2023-06-30T01:00:00Z", "2023-06-30T02:00:00Z", "2023-06-30T03:00:00Z", "2023-06-30T04:00:00Z", "2023-06-30T05:00:00Z", "2023-06-30T06:00:00Z", "2023-06-30T07:00:00Z", "2023-06-30T08:00:00Z", "2023-06-30T09:00:00Z", "2023-06-30T10:00:00Z", "2023-06-30T11:00:00Z", "2023-06-30T12:00:00Z", "2023-06-30T13:00:00Z", "2023-06-30T14:00:00Z", "2023-06-30T15:00:00Z", "2023-06-30T16:00:00Z", "2023-06-30T17:00:00Z", "2023-06-30T18:00:00Z", "2023-06-30T19:00:00Z", "2023-06-30T20:00:00Z", "2023-06-30T21:00:00Z", "2023-06-30T22:00:00Z", "2023-06-30T23:00:00Z", "2023-07-01T00:00:00Z", "2023-07-01T01:00:00Z", "2023-07-01T02:00:00Z", "2023-07-01T03:00:00Z", "2023-07-01T04:00:00Z", "2023-07-01T05:00:00Z", "2023-07-01T06:00:00Z", "2023-07-01T07:00:00Z", "2023-07-01T08:00:00Z", "2023-07-01T09:00:00Z", "2023-07-01T10:00:00Z", "2023-07-01T11:00:00Z", "2023-07-01T12:00:00Z", "2023-07-01T13:00:00Z", "2023-07-01T14:00:00Z", "2023-07-01T15:00:00Z", "2023-07-01T16:00:00Z", "2023-07-01T17:00:00Z", "2023-07-01T18:00:00Z", "2023-07-01T19:00:00Z", "2023-07-01T20:00:00Z", "2023-07-01T21:00:00Z", "2023-07-01T22:00:00Z", "2023-07-01T23:00:00Z", "2023-07-02T00:00:00Z", "2023-07-02T01:00:00Z", "2023-07-02T02:00:00Z", "2023-07-02T03:00:00Z", "2023-07-02T04:00:00Z", "2023-07-02T05:00:00Z", "2023-07-02T06:00:00Z", "2023-07-02T07:00:00Z", "2023-07-02T08:00:00Z", "2023-07-02T09:00:00Z", "2023-07-02T10:00:00Z", "2023-07-02T11:00:00Z", "2023-07-02T12:00:00Z", "2023-07-02T13:00:00Z", "2023-07-02T14:00:00Z", "2023-07-02T15:00:00Z", "2023-07-02T16:00:00Z", "2023-07-02T17:00:00Z", "2023-07-02T18:00:00Z", "2023-07-02T19:00:00Z", "2023-07-02T20:00:00Z", "2023-07-02T21:00:00Z"],
}),
@@ -60,7 +60,7 @@ export namespace History {
export const MONTH: OeTester.Types.Channels = {
energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
data: {
- '_sum/ConsumptionActiveEnergy': 1033427,
+ "_sum/ConsumptionActiveEnergy": 1033427,
"evcs0/ActiveConsumptionEnergy": 328451,
"meter0/ActiveProductionEnergy": 21649,
},
@@ -68,7 +68,7 @@ export namespace History {
energyPerPeriodChannelWithValues:
new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", {
data: {
- '_sum/ConsumptionActiveEnergy': [1784.3478512581187, 955.1978135997077, 1604.9176251387696, 1821.5474663613152, 1204.011627189301, 1037.408900359932, 1287.891020875591, 1183.057735422114, 1027.8784377276404, 1412.783196754379, 737.2379614126091, 730.6143394985477, 1727.4568452231197, 2045.4827463867603, 1289.9867373938441, 1866.5731598778827, 896.448259060122, 1271.0485678635469, 1489.7323302960576, 1367.9696489029907, 2375.6092366846033, 2368.729102836224, 2686.60326649514, 1597.0390753045413, 972.6650191463931, 1774.233690168573, 2953.838257099637, 917.3087792235759, 1172.9800154902882, null, null],
+ "_sum/ConsumptionActiveEnergy": [1784.3478512581187, 955.1978135997077, 1604.9176251387696, 1821.5474663613152, 1204.011627189301, 1037.408900359932, 1287.891020875591, 1183.057735422114, 1027.8784377276404, 1412.783196754379, 737.2379614126091, 730.6143394985477, 1727.4568452231197, 2045.4827463867603, 1289.9867373938441, 1866.5731598778827, 896.448259060122, 1271.0485678635469, 1489.7323302960576, 1367.9696489029907, 2375.6092366846033, 2368.729102836224, 2686.60326649514, 1597.0390753045413, 972.6650191463931, 1774.233690168573, 2953.838257099637, 917.3087792235759, 1172.9800154902882, null, null],
"evcs0/ActiveConsumptionEnergy": [598.058461158158, 0, 607.3861225965935, 891.3491768679577, 269.6236843407865, 0, 306.41009901340226, 220.51407209843148, 50.15525733301707, 356.42246970726825, 0, 0, 880.0942036863182, 977.4033026217928, 210.23831546417276, 787.0712558876392, 0, 165.50743075023163, 513.2605942604259, 149.06825174512016, 883.6100586172083, 1203.117101530366, 1467.2314708234808, 553.6230686820822, 0, 714.8486366912176, 1836.7765179313803, 0, 300.374916784946, null, null],
"meter0/ActiveProductionEnergy": [15.53700680772126, 13.97856617670663, 16.22420643945345, 15.425155003970989, 16.41557086346929, 15.280936198647838, 15.028196655704793, 15.146427851947054, 15.567356482244767, 17.404197969735606, 17.635152684968116, 14.140394156739468, 16.107488806188936, 16.75001277671301, 15.512752420609466, 14.951999780788457, 13.733457057782298, 16.868671206682027, 14.770978996449593, 16.47697124898351, 16.772182319685665, 16.288562161254703, 15.417362341926745, 15.892028990939403, 13.811584043067414, 14.81782772305683, 14.165639305307824, 16.223347257543285, 14.495672387672808, null, null],
},
@@ -81,23 +81,23 @@ export namespace History {
export const YEAR: OeTester.Types.Channels = {
energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
data: {
- '_sum/ConsumptionActiveEnergy': 14863655,
+ "_sum/ConsumptionActiveEnergy": 14863655,
"_sum/ConsumptionActiveEnergyL1": 4954551,
"_sum/ConsumptionActiveEnergyL2": 4954551,
"_sum/ConsumptionActiveEnergyL3": 4954551,
- 'evcs0/ActiveConsumptionEnergy': 2071139,
- 'meter0/ActiveProductionEnergy': 1908650,
+ "evcs0/ActiveConsumptionEnergy": 2071139,
+ "meter0/ActiveProductionEnergy": 1908650,
},
}),
energyPerPeriodChannelWithValues:
new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", {
data: {
- '_sum/ConsumptionActiveEnergy': [1682941, 1834729, 1805222, 1934144, 1757577, 1511352, 2306988, 2029933, 0, 0, 0, 0],
- '_sum/ConsumptionActiveEnergyL1': [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0],
- '_sum/ConsumptionActiveEnergyL2': [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0],
- '_sum/ConsumptionActiveEnergyL3': [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0],
- 'evcs0/ActiveConsumptionEnergy': [69104, 131703, 25773, 51085, 169943, 332522, 748189, 540740, 0, 0, 0, 0],
- 'meter0/ActiveProductionEnergy': [338070, 312380, 298930, 317700, 200210, 151160, 145880, 144280, 0, 0, 0, 0],
+ "_sum/ConsumptionActiveEnergy": [1682941, 1834729, 1805222, 1934144, 1757577, 1511352, 2306988, 2029933, 0, 0, 0, 0],
+ "_sum/ConsumptionActiveEnergyL1": [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0],
+ "_sum/ConsumptionActiveEnergyL2": [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0],
+ "_sum/ConsumptionActiveEnergyL3": [560980.3333333334, 611576.3333333334, 601740.6666666666, 644714.6666666666, 585859, 503784, 768996, 676644.3333333334, 0, 0, 0, 0],
+ "evcs0/ActiveConsumptionEnergy": [69104, 131703, 25773, 51085, 169943, 332522, 748189, 540740, 0, 0, 0, 0],
+ "meter0/ActiveProductionEnergy": [338070, 312380, 298930, 317700, 200210, 151160, 145880, 144280, 0, 0, 0, 0],
},
timestamps: ["2022-12-31T23:00:00Z", "2023-01-31T23:00:00Z", "2023-02-28T23:00:00Z", "2023-03-31T22:00:00Z", "2023-04-30T22:00:00Z", "2023-05-31T22:00:00Z", "2023-06-30T22:00:00Z", "2023-07-31T22:00:00Z", "2023-08-31T22:00:00Z", "2023-09-30T22:00:00Z", "2023-10-31T23:00:00Z", "2023-11-30T23:00:00Z"],
}),
diff --git a/ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts b/ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts
index ef1030814ca..c9bc81b39a5 100644
--- a/ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts
+++ b/ui/src/app/edge/history/common/consumption/chart/chart.constants.spec.ts
@@ -1,12 +1,11 @@
import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
import { OeTester } from "src/app/shared/components/shared/testing/common";
import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
-import { EdgeConfig } from "src/app/shared/shared";
import { removeFunctions, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
-
+import { EdgeConfig } from "src/app/shared/shared";
import { ChartComponent } from "./chart";
-export function expectView(config: EdgeConfig, testContext: TestContext, chartType: 'line' | 'bar', channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+export function expectView(config: EdgeConfig, testContext: TestContext, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
expect(removeFunctions(OeChartTester
.apply(ChartComponent
diff --git a/ui/src/app/edge/history/common/consumption/chart/chart.spec.ts b/ui/src/app/edge/history/common/consumption/chart/chart.spec.ts
index 2ff4b493fe0..66697d1c191 100644
--- a/ui/src/app/edge/history/common/consumption/chart/chart.spec.ts
+++ b/ui/src/app/edge/history/common/consumption/chart/chart.spec.ts
@@ -7,7 +7,7 @@ import { DATA, LABELS } from "../../energy/chart/chart.constants.spec";
import { History } from "./channels.spec";
import { expectView } from "./chart.constants.spec";
-describe('History Consumption', () => {
+describe("History Consumption", () => {
const defaultEMS = DummyConfig.from(
DummyConfig.Component.SOCOMEC_CONSUMPTION_METER("meter0", "Whirlpool"),
DummyConfig.Component.EVCS_HARDY_BARTH("evcs0", "Charging Station"),
@@ -18,21 +18,21 @@ describe('History Consumption', () => {
TEST_CONTEXT = await sharedSetup(),
);
- it('#getChartData()', () => {
+ it("#getChartData()", () => {
{
// Line-Chart, phases
- expectView(defaultEMS, TEST_CONTEXT, 'line', History.DAY,
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
{
datasets: {
data: [
- DATA('Gesamt: 93 kWh', [null, null, null, 0.5658045977011494, 0.5605148514851485, 0.561425925925926, 0.5732169811320755, 0.5658080808080809, 0.5879803921568627, 0.5842389380530973, 0.6074818181818182, 0.6050275229357799, 0.5956407766990292, 0.6025294117647059, 0.5781684210526317, 0.5816813186813187, 0.6495166666666666, 0.5602999999999999, 0.56703738317757, 0.6297672413793104, 0.5688613861386138, 0.5896039603960396, 0.6345090909090909, 0.6226633663366337, 0.6177196261682243, 0.608122641509434, 0.60278, 0.6508155339805825, 0.6058877551020408, 0.5943904761904762, 0.57636, 0.5650660377358491, 0.587495145631068, 0.626375, 0.6819428571428572, 0.6504629629629629, 0.6313738317757009, 0.68725, 0.5602452830188679, 0.5278952380952382, 0.6202222222222221, 0.5466355140186916, 0.5878130841121496, 0.604, 0.616295918367347, 0.5789405940594059, 0.5943396226415094, 0.6481078431372549, null, null, null, 0.5652183908045977, 0.5736481481481481, 0.5365462962962964, 0.558081081081081, 0.5747543859649124, 0.5743557692307693, 0.5969047619047619, 0.6540720720720721, 0.61521, 0.6128045977011494, 0.6361100000000001, 0.6137948717948718, 0.5388857142857142, 0.5371157894736842, 0.5511634615384615, 0.5588809523809524, 0.5591222222222223, 0.6185576923076923, 0.6543287671232877, 0.6160574712643678, 0.5889056603773585, 0.5787096774193549, 0.583036036036036, 0.572570093457944, 0.5952631578947368, 0.7450888888888888, 0.8207323943661972, 2.6511923076923076, 8.063131147540984, 6.952055555555556, 7.41341052631579, 6.695175, 6.688301075268817, 7.135544444444445, 6.9356125, 6.768398148148147, 6.962593220338983, 3.44951968503937, 0.6774427860696518, 0.9827305699481865, 0.8582012987012987, 0.7678924050632912, 0.761950495049505, 0.6821319796954315, 0.7254198473282443, 0.7021286549707602, 0.7309484536082475, 0.739, 0.730572864321608, 0.7547467532467532, 0.657373417721519, 0.6409480519480519, 0.6698156424581005, 0.7876280991735537, 2.931229357798165, 1.9542808988764044, 0.7775346534653466, 1.098538860103627, 1.2441524390243903, 2.9194913793103447, 2.9874188034188034, 3.4140294117647056, 1.3552, 2.7142824427480914, 2.6578703703703703, 2.8738923076923077, 6.140337078651685, 3.966560606060606, 3.0215789473684214, 1.7741875, 1.07646, 1.4268691588785047, 1.2610386740331492, 1.0193491124260354, 1.194960199004975, 1.2412878787878787, 3.323, 3.96845625, 1.4680961538461539, 3.6304166666666666, 2.2695301204819276, 2.554391025641026, 1.8457888888888887, 1.7289767441860464, 2.8620799999999997, 2.3241241379310345, 1.9640169491525423, 1.8084, 3.4660503597122303, 2.2974397590361444, 2.5300493827160495, 2.439358490566038, 2.0079060773480664, 1.7515, 1.4163181818181818, 1.4292298850574712, 1.4520298507462688, 1.4897204301075269, 1.6330952380952382, 1.8262928571428572, 1.6101904761904762, 1.680929292929293, 2.881743119266055, 3.5851634615384613, 3.6891666666666665, 3.6573402777777777, 3.6435348837209305, 3.7148645833333336, 3.731375, 3.74479, 3.6362363636363635, 4.273113924050633, 3.4461999999999997, 3.5387142857142857, 3.7906065573770493, 3.5276750000000003, 3.4676712328767123, 3.5595, 3.7982, 5.460666666666667, 1.3094406779661016, 1.5357454545454545, 3.4238260869565216, 3.3823636363636367, 3.4006315789473684, 2.95075, 3.386731707317073, 2.506, 1.4471666666666667, 1.4425999999999999, 0.946, 0.9425789473684211, 0.9507142857142856, 0.947, 0.9762857142857143, 1.7862857142857143, 1.5135777777777777, 1.4995625, 1.338, 1.3278125, 1.2739175257731958, 1.4387457627118645, 1.2484186046511627, 1.2866693548387098, 1.2848934911242604, 1.2237952755905512, 0.74809375, 0.8717684210526315, 0.8445338983050847, 0.7916749999999999, 0.8041932773109244, 0.7303737373737375, 0.7055024390243902, 0.6872407407407407, 0.6909939759036144, 0.751, 0.765139344262295, 0.686871794871795, 0.6697434210526315, 1.7678091603053436, 0.7246764705882353, 0.7482772277227723, 0.9401142857142858, 0.750368, 1.3660232558139536, 0.7274137931034482, 0.710719512195122, 0.6898555555555557, 0.739453488372093, 0.817875, 0.7304303797468354, 0.7355890410958904, 0.738225806451613, 1.906921739130435, 2.290785714285714, 1.2075072463768115, 1.1675890410958905, 1.2290208333333332, 1.1923777777777778, 1.2088717948717949, 1.367715909090909, 1.284223300970874, 1.1631739130434782, 1.15253, 1.1614545454545455, 1.2195681818181818, 1.183752808988764, 1.197778947368421, 1.2338888888888888, 1.275070588235294, 1.235554054054054, 1.20783908045977, 1.2416184210526318, 1.159042735042735, 1.1382948717948718, 1.1069915966386554, 1.1714504504504506, 1.223822429906542, 1.1221696428571428, 1.018892857142857, 0.9818285714285714, 0.9988363636363636, 6.056572916666667, 7.225528846153845, 7.193834782608696, 7.507321100917431, 7.588695238095238, 7.678689189189189, 9.469633027522935, 10.236186046511628, 10.106608695652174, 9.989125, 9.948229357798166, 9.796030927835051, 9.704217391304349, 8.454028571428571, 6.813476190476191, 6.706782608695652, 6.523452173913043, 6.661553571428572, 5.620777777777778, 0.8123142857142857, 0.8095892857142857, 0.8664786324786324, 0.8778319327731092, 0.8108141592920354, 0.8157121212121212, 0.7706470588235294, 0.7633157894736842, 0.7815151515151515, 0.8075833333333333, 0.824743119266055, 0.8762151898734176, 0.882424, 0.7502213114754098, 0.675954954954955, 0.6371222222222223]),
- DATA('Charging Station: 13,7 kWh', [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, 4.104142857142857, 5.829969696969697, 5.806212121212121, 6.195333333333333, 5.777333333333333, 5.78625, 5.789727272727273, 5.789571428571429, 5.783052631578948, 5.772657142857144, 4.864842105263158, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, null, null, 0, 0, null, 0, 0, null, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, null, null, 0, 0, 0, null, 0, null, null, 0, 0, null, 0, null, null, null, null, 0, null, 0, 0, null, null, null, null, null, 0, null, null, null, null, null, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, 0, null, 0, 0, 0, 0, 0, 0, null, null, 0, 0, null, 0, 0, 0, null, null, 0, 0, null, 0, 0, null, null, null, 0, null, null, null, null, null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 0, null, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, 5.213095238095239, 5.787580645161291, 5.7894848484848485, 5.790818181818182, 5.80734375, 5.820136363636364, 5.7988620689655175, 5.809041666666667, 5.8055625, 5.7943461538461545, 5.798, 5.740214285714285, 5.727242424242424, 5.742542857142857, 5.753424242424242, 5.7524, 5.731966666666667, 5.734323529411765, 5.335586206896552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null]),
- DATA('Whirlpool: 15,9 kWh', [0.12428571428571429, 0, null, 0, 0.17333333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.11333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.11333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.11333333333333333, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.126875, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.17625, 0.17583333333333334, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Sonstiger: 63,3 kWh', [null, null, null, 0.5658045977011494, 0.3871815181518151, 0.561425925925926, 0.5732169811320755, 0.5658080808080809, 0.5879803921568627, 0.5842389380530973, 0.6074818181818182, 0.6050275229357799, 0.5956407766990292, 0.6025294117647059, 0.5781684210526317, 0.5816813186813187, 0.6495166666666666, 0.5602999999999999, 0.56703738317757, 0.6297672413793104, 0.5688613861386138, 0.5896039603960396, 0.5245090909090909, 0.5093300330033004, 0.6177196261682243, 0.608122641509434, 0.60278, 0.6508155339805825, 0.6058877551020408, 0.5943904761904762, 0.57636, 0.5650660377358491, 0.587495145631068, 0.626375, 0.6819428571428572, 0.6504629629629629, 0.6313738317757009, 0.68725, 0.5602452830188679, 0.5278952380952382, 0.6202222222222221, 0.4016355140186916, 0.5878130841121496, 0.604, 0.616295918367347, 0.5789405940594059, 0.5943396226415094, 0.6481078431372549, null, null, null, 0.5652183908045977, 0.5736481481481481, 0.5365462962962964, 0.558081081081081, 0.5747543859649124, 0.5743557692307693, 0.5969047619047619, 0.6540720720720721, 0.5018766666666667, 0.6128045977011494, 0.6361100000000001, 0.6137948717948718, 0.5388857142857142, 0.5371157894736842, 0.5511634615384615, 0.5588809523809524, 0.5591222222222223, 0.6185576923076923, 0.6543287671232877, 0.6160574712643678, 0.5889056603773585, 0.5787096774193549, 0.583036036036036, 0.572570093457944, 0.5952631578947368, 0.7450888888888888, 0.7073990610328639, -1.452950549450549, 2.233161450571287, 1.1458434343434352, 1.2180771929824568, 0.9178416666666669, 0.9020510752688171, 1.3458171717171723, 1.1460410714285718, 0.9853455165691996, 1.189936077481839, -1.4153224202237875, 0.6774427860696518, 0.9827305699481865, 0.8582012987012987, 0.7678924050632912, 0.761950495049505, 0.6821319796954315, 0.5954198473282443, 0.7021286549707602, 0.7309484536082475, 0.739, 0.730572864321608, 0.7547467532467532, 0.657373417721519, 0.6409480519480519, 0.6698156424581005, 0.7876280991735537, 2.931229357798165, 1.9542808988764044, 0.7775346534653466, 1.098538860103627, 1.2441524390243903, 2.9194913793103447, 2.9874188034188034, 3.4140294117647056, 1.2151999999999998, 2.7142824427480914, 2.6578703703703703, 2.8738923076923077, 4.013462078651685, 3.791560606060606, 2.845578947368421, 1.7741875, 0.89646, 1.2468691588785048, 1.0760386740331491, 0.8393491124260355, 1.194960199004975, 1.0562878787878787, 3.133, 3.78845625, 1.288096153846154, 3.4541666666666666, 2.0936967871485943, 2.384391025641026, 1.6707888888888887, 1.5589767441860465, 2.8620799999999997, 2.3241241379310345, 1.9640169491525423, 1.8084, 3.4660503597122303, 2.2974397590361444, 2.5300493827160495, 2.439358490566038, 2.0079060773480664, 1.7515, 1.4163181818181818, 1.4292298850574712, 1.4520298507462688, 1.4897204301075269, 1.6330952380952382, 1.8262928571428572, 1.6101904761904762, 1.680929292929293, 2.881743119266055, 3.5851634615384613, 3.6891666666666665, 3.6573402777777777, 3.6435348837209305, 3.7148645833333336, 3.731375, 3.74479, 3.6362363636363635, 4.273113924050633, 3.4461999999999997, 3.5387142857142857, 3.7906065573770493, 3.5276750000000003, 3.4676712328767123, 3.5595, 3.7982, 5.460666666666667, 1.3094406779661016, 1.5357454545454545, 3.4238260869565216, 3.3823636363636367, 3.4006315789473684, 2.95075, 3.386731707317073, 2.506, 1.4471666666666667, 1.4425999999999999, 0.946, 0.9425789473684211, 0.9507142857142856, 0.947, 0.9762857142857143, 1.7862857142857143, 1.5135777777777777, 1.4995625, 1.338, 1.3278125, 1.2739175257731958, 1.4387457627118645, 1.2484186046511627, 1.2866693548387098, 1.2848934911242604, 1.2237952755905512, 0.74809375, 0.8717684210526315, 0.8445338983050847, 0.7916749999999999, 0.8041932773109244, 0.7303737373737375, 0.7055024390243902, 0.6872407407407407, 0.6909939759036144, 0.751, 0.765139344262295, 0.686871794871795, 0.6697434210526315, 1.7678091603053436, 0.7246764705882353, 0.7482772277227723, 0.9401142857142858, 0.750368, 1.3660232558139536, 0.7274137931034482, 0.710719512195122, 0.6898555555555557, 0.739453488372093, 0.817875, 0.7304303797468354, 0.7355890410958904, 0.738225806451613, 1.906921739130435, 2.290785714285714, 1.2075072463768115, 1.1675890410958905, 1.2290208333333332, 1.1923777777777778, 1.2088717948717949, 1.367715909090909, 1.284223300970874, 1.1631739130434782, 1.15253, 1.1614545454545455, 1.2195681818181818, 1.183752808988764, 1.197778947368421, 1.2338888888888888, 1.275070588235294, 1.235554054054054, 1.20783908045977, 1.2416184210526318, 1.159042735042735, 1.1382948717948718, 1.1069915966386554, 1.1714504504504506, 1.223822429906542, 1.1221696428571428, 1.018892857142857, 0.9818285714285714, 0.9988363636363636, 0.8434776785714284, 1.4379482009925546, 1.4043499341238475, 1.7165029190992493, 1.781351488095238, 1.8585528255528247, 3.6707709585574175, 4.427144379844961, 4.301046195652174, 4.194778846153845, 4.150229357798166, 4.055816642120766, 3.976974967061925, 2.711485714285714, 1.0600519480519486, 0.954382608695652, 0.7914855072463762, 0.9272300420168067, 0.28519157088122604, 0.8123142857142857, 0.8095892857142857, 0.8664786324786324, 0.8778319327731092, 0.8108141592920354, 0.8157121212121212, 0.7706470588235294, 0.7633157894736842, 0.7815151515151515, 0.8075833333333333, 0.824743119266055, 0.8762151898734176, 0.882424, 0.7502213114754098, 0.675954954954955, 0.6371222222222223]),
+ DATA("Gesamt: 93 kWh", [null, null, null, 0.5658045977011494, 0.5605148514851485, 0.561425925925926, 0.5732169811320755, 0.5658080808080809, 0.5879803921568627, 0.5842389380530973, 0.6074818181818182, 0.6050275229357799, 0.5956407766990292, 0.6025294117647059, 0.5781684210526317, 0.5816813186813187, 0.6495166666666666, 0.5602999999999999, 0.56703738317757, 0.6297672413793104, 0.5688613861386138, 0.5896039603960396, 0.6345090909090909, 0.6226633663366337, 0.6177196261682243, 0.608122641509434, 0.60278, 0.6508155339805825, 0.6058877551020408, 0.5943904761904762, 0.57636, 0.5650660377358491, 0.587495145631068, 0.626375, 0.6819428571428572, 0.6504629629629629, 0.6313738317757009, 0.68725, 0.5602452830188679, 0.5278952380952382, 0.6202222222222221, 0.5466355140186916, 0.5878130841121496, 0.604, 0.616295918367347, 0.5789405940594059, 0.5943396226415094, 0.6481078431372549, null, null, null, 0.5652183908045977, 0.5736481481481481, 0.5365462962962964, 0.558081081081081, 0.5747543859649124, 0.5743557692307693, 0.5969047619047619, 0.6540720720720721, 0.61521, 0.6128045977011494, 0.6361100000000001, 0.6137948717948718, 0.5388857142857142, 0.5371157894736842, 0.5511634615384615, 0.5588809523809524, 0.5591222222222223, 0.6185576923076923, 0.6543287671232877, 0.6160574712643678, 0.5889056603773585, 0.5787096774193549, 0.583036036036036, 0.572570093457944, 0.5952631578947368, 0.7450888888888888, 0.8207323943661972, 2.6511923076923076, 8.063131147540984, 6.952055555555556, 7.41341052631579, 6.695175, 6.688301075268817, 7.135544444444445, 6.9356125, 6.768398148148147, 6.962593220338983, 3.44951968503937, 0.6774427860696518, 0.9827305699481865, 0.8582012987012987, 0.7678924050632912, 0.761950495049505, 0.6821319796954315, 0.7254198473282443, 0.7021286549707602, 0.7309484536082475, 0.739, 0.730572864321608, 0.7547467532467532, 0.657373417721519, 0.6409480519480519, 0.6698156424581005, 0.7876280991735537, 2.931229357798165, 1.9542808988764044, 0.7775346534653466, 1.098538860103627, 1.2441524390243903, 2.9194913793103447, 2.9874188034188034, 3.4140294117647056, 1.3552, 2.7142824427480914, 2.6578703703703703, 2.8738923076923077, 6.140337078651685, 3.966560606060606, 3.0215789473684214, 1.7741875, 1.07646, 1.4268691588785047, 1.2610386740331492, 1.0193491124260354, 1.194960199004975, 1.2412878787878787, 3.323, 3.96845625, 1.4680961538461539, 3.6304166666666666, 2.2695301204819276, 2.554391025641026, 1.8457888888888887, 1.7289767441860464, 2.8620799999999997, 2.3241241379310345, 1.9640169491525423, 1.8084, 3.4660503597122303, 2.2974397590361444, 2.5300493827160495, 2.439358490566038, 2.0079060773480664, 1.7515, 1.4163181818181818, 1.4292298850574712, 1.4520298507462688, 1.4897204301075269, 1.6330952380952382, 1.8262928571428572, 1.6101904761904762, 1.680929292929293, 2.881743119266055, 3.5851634615384613, 3.6891666666666665, 3.6573402777777777, 3.6435348837209305, 3.7148645833333336, 3.731375, 3.74479, 3.6362363636363635, 4.273113924050633, 3.4461999999999997, 3.5387142857142857, 3.7906065573770493, 3.5276750000000003, 3.4676712328767123, 3.5595, 3.7982, 5.460666666666667, 1.3094406779661016, 1.5357454545454545, 3.4238260869565216, 3.3823636363636367, 3.4006315789473684, 2.95075, 3.386731707317073, 2.506, 1.4471666666666667, 1.4425999999999999, 0.946, 0.9425789473684211, 0.9507142857142856, 0.947, 0.9762857142857143, 1.7862857142857143, 1.5135777777777777, 1.4995625, 1.338, 1.3278125, 1.2739175257731958, 1.4387457627118645, 1.2484186046511627, 1.2866693548387098, 1.2848934911242604, 1.2237952755905512, 0.74809375, 0.8717684210526315, 0.8445338983050847, 0.7916749999999999, 0.8041932773109244, 0.7303737373737375, 0.7055024390243902, 0.6872407407407407, 0.6909939759036144, 0.751, 0.765139344262295, 0.686871794871795, 0.6697434210526315, 1.7678091603053436, 0.7246764705882353, 0.7482772277227723, 0.9401142857142858, 0.750368, 1.3660232558139536, 0.7274137931034482, 0.710719512195122, 0.6898555555555557, 0.739453488372093, 0.817875, 0.7304303797468354, 0.7355890410958904, 0.738225806451613, 1.906921739130435, 2.290785714285714, 1.2075072463768115, 1.1675890410958905, 1.2290208333333332, 1.1923777777777778, 1.2088717948717949, 1.367715909090909, 1.284223300970874, 1.1631739130434782, 1.15253, 1.1614545454545455, 1.2195681818181818, 1.183752808988764, 1.197778947368421, 1.2338888888888888, 1.275070588235294, 1.235554054054054, 1.20783908045977, 1.2416184210526318, 1.159042735042735, 1.1382948717948718, 1.1069915966386554, 1.1714504504504506, 1.223822429906542, 1.1221696428571428, 1.018892857142857, 0.9818285714285714, 0.9988363636363636, 6.056572916666667, 7.225528846153845, 7.193834782608696, 7.507321100917431, 7.588695238095238, 7.678689189189189, 9.469633027522935, 10.236186046511628, 10.106608695652174, 9.989125, 9.948229357798166, 9.796030927835051, 9.704217391304349, 8.454028571428571, 6.813476190476191, 6.706782608695652, 6.523452173913043, 6.661553571428572, 5.620777777777778, 0.8123142857142857, 0.8095892857142857, 0.8664786324786324, 0.8778319327731092, 0.8108141592920354, 0.8157121212121212, 0.7706470588235294, 0.7633157894736842, 0.7815151515151515, 0.8075833333333333, 0.824743119266055, 0.8762151898734176, 0.882424, 0.7502213114754098, 0.675954954954955, 0.6371222222222223]),
+ DATA("Charging Station: 13,7 kWh", [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, 4.104142857142857, 5.829969696969697, 5.806212121212121, 6.195333333333333, 5.777333333333333, 5.78625, 5.789727272727273, 5.789571428571429, 5.783052631578948, 5.772657142857144, 4.864842105263158, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, 0, null, null, 0, 0, null, 0, 0, null, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, null, null, 0, 0, 0, null, 0, null, null, 0, 0, null, 0, null, null, null, null, 0, null, 0, 0, null, null, null, null, null, 0, null, null, null, null, null, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, 0, null, 0, 0, 0, 0, 0, 0, null, null, 0, 0, null, 0, 0, 0, null, null, 0, 0, null, 0, 0, null, null, null, 0, null, null, null, null, null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 0, null, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, 5.213095238095239, 5.787580645161291, 5.7894848484848485, 5.790818181818182, 5.80734375, 5.820136363636364, 5.7988620689655175, 5.809041666666667, 5.8055625, 5.7943461538461545, 5.798, 5.740214285714285, 5.727242424242424, 5.742542857142857, 5.753424242424242, 5.7524, 5.731966666666667, 5.734323529411765, 5.335586206896552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null]),
+ DATA("Whirlpool: 15,9 kWh", [0.12428571428571429, 0, null, 0, 0.17333333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.11333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.11333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.11333333333333333, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.126875, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.17625, 0.17583333333333334, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Sonstiger: 63,3 kWh", [null, null, null, 0.5658045977011494, 0.3871815181518151, 0.561425925925926, 0.5732169811320755, 0.5658080808080809, 0.5879803921568627, 0.5842389380530973, 0.6074818181818182, 0.6050275229357799, 0.5956407766990292, 0.6025294117647059, 0.5781684210526317, 0.5816813186813187, 0.6495166666666666, 0.5602999999999999, 0.56703738317757, 0.6297672413793104, 0.5688613861386138, 0.5896039603960396, 0.5245090909090909, 0.5093300330033004, 0.6177196261682243, 0.608122641509434, 0.60278, 0.6508155339805825, 0.6058877551020408, 0.5943904761904762, 0.57636, 0.5650660377358491, 0.587495145631068, 0.626375, 0.6819428571428572, 0.6504629629629629, 0.6313738317757009, 0.68725, 0.5602452830188679, 0.5278952380952382, 0.6202222222222221, 0.4016355140186916, 0.5878130841121496, 0.604, 0.616295918367347, 0.5789405940594059, 0.5943396226415094, 0.6481078431372549, null, null, null, 0.5652183908045977, 0.5736481481481481, 0.5365462962962964, 0.558081081081081, 0.5747543859649124, 0.5743557692307693, 0.5969047619047619, 0.6540720720720721, 0.5018766666666667, 0.6128045977011494, 0.6361100000000001, 0.6137948717948718, 0.5388857142857142, 0.5371157894736842, 0.5511634615384615, 0.5588809523809524, 0.5591222222222223, 0.6185576923076923, 0.6543287671232877, 0.6160574712643678, 0.5889056603773585, 0.5787096774193549, 0.583036036036036, 0.572570093457944, 0.5952631578947368, 0.7450888888888888, 0.7073990610328639, -1.452950549450549, 2.233161450571287, 1.1458434343434352, 1.2180771929824568, 0.9178416666666669, 0.9020510752688171, 1.3458171717171723, 1.1460410714285718, 0.9853455165691996, 1.189936077481839, -1.4153224202237875, 0.6774427860696518, 0.9827305699481865, 0.8582012987012987, 0.7678924050632912, 0.761950495049505, 0.6821319796954315, 0.5954198473282443, 0.7021286549707602, 0.7309484536082475, 0.739, 0.730572864321608, 0.7547467532467532, 0.657373417721519, 0.6409480519480519, 0.6698156424581005, 0.7876280991735537, 2.931229357798165, 1.9542808988764044, 0.7775346534653466, 1.098538860103627, 1.2441524390243903, 2.9194913793103447, 2.9874188034188034, 3.4140294117647056, 1.2151999999999998, 2.7142824427480914, 2.6578703703703703, 2.8738923076923077, 4.013462078651685, 3.791560606060606, 2.845578947368421, 1.7741875, 0.89646, 1.2468691588785048, 1.0760386740331491, 0.8393491124260355, 1.194960199004975, 1.0562878787878787, 3.133, 3.78845625, 1.288096153846154, 3.4541666666666666, 2.0936967871485943, 2.384391025641026, 1.6707888888888887, 1.5589767441860465, 2.8620799999999997, 2.3241241379310345, 1.9640169491525423, 1.8084, 3.4660503597122303, 2.2974397590361444, 2.5300493827160495, 2.439358490566038, 2.0079060773480664, 1.7515, 1.4163181818181818, 1.4292298850574712, 1.4520298507462688, 1.4897204301075269, 1.6330952380952382, 1.8262928571428572, 1.6101904761904762, 1.680929292929293, 2.881743119266055, 3.5851634615384613, 3.6891666666666665, 3.6573402777777777, 3.6435348837209305, 3.7148645833333336, 3.731375, 3.74479, 3.6362363636363635, 4.273113924050633, 3.4461999999999997, 3.5387142857142857, 3.7906065573770493, 3.5276750000000003, 3.4676712328767123, 3.5595, 3.7982, 5.460666666666667, 1.3094406779661016, 1.5357454545454545, 3.4238260869565216, 3.3823636363636367, 3.4006315789473684, 2.95075, 3.386731707317073, 2.506, 1.4471666666666667, 1.4425999999999999, 0.946, 0.9425789473684211, 0.9507142857142856, 0.947, 0.9762857142857143, 1.7862857142857143, 1.5135777777777777, 1.4995625, 1.338, 1.3278125, 1.2739175257731958, 1.4387457627118645, 1.2484186046511627, 1.2866693548387098, 1.2848934911242604, 1.2237952755905512, 0.74809375, 0.8717684210526315, 0.8445338983050847, 0.7916749999999999, 0.8041932773109244, 0.7303737373737375, 0.7055024390243902, 0.6872407407407407, 0.6909939759036144, 0.751, 0.765139344262295, 0.686871794871795, 0.6697434210526315, 1.7678091603053436, 0.7246764705882353, 0.7482772277227723, 0.9401142857142858, 0.750368, 1.3660232558139536, 0.7274137931034482, 0.710719512195122, 0.6898555555555557, 0.739453488372093, 0.817875, 0.7304303797468354, 0.7355890410958904, 0.738225806451613, 1.906921739130435, 2.290785714285714, 1.2075072463768115, 1.1675890410958905, 1.2290208333333332, 1.1923777777777778, 1.2088717948717949, 1.367715909090909, 1.284223300970874, 1.1631739130434782, 1.15253, 1.1614545454545455, 1.2195681818181818, 1.183752808988764, 1.197778947368421, 1.2338888888888888, 1.275070588235294, 1.235554054054054, 1.20783908045977, 1.2416184210526318, 1.159042735042735, 1.1382948717948718, 1.1069915966386554, 1.1714504504504506, 1.223822429906542, 1.1221696428571428, 1.018892857142857, 0.9818285714285714, 0.9988363636363636, 0.8434776785714284, 1.4379482009925546, 1.4043499341238475, 1.7165029190992493, 1.781351488095238, 1.8585528255528247, 3.6707709585574175, 4.427144379844961, 4.301046195652174, 4.194778846153845, 4.150229357798166, 4.055816642120766, 3.976974967061925, 2.711485714285714, 1.0600519480519486, 0.954382608695652, 0.7914855072463762, 0.9272300420168067, 0.28519157088122604, 0.8123142857142857, 0.8095892857142857, 0.8664786324786324, 0.8778319327731092, 0.8108141592920354, 0.8157121212121212, 0.7706470588235294, 0.7633157894736842, 0.7815151515151515, 0.8075833333333333, 0.824743119266055, 0.8762151898734176, 0.882424, 0.7502213114754098, 0.675954954954955, 0.6371222222222223]),
],
labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.LINE_CHART_OPTIONS('hour', 'line', {},
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", {},
),
},
});
@@ -40,51 +40,51 @@ describe('History Consumption', () => {
{
// Line-Chart, no phases, no phasecolors
- expectView(defaultEMS, TEST_CONTEXT, 'line', History.WEEK,
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.WEEK,
{
datasets: {
data: [
- DATA('Gesamt: 354,1 kWh', [0.6639876181166504, 0.9375188284518828, 0.7615839462743844, 0.5997653758542141, 0.9896435035552682, 0.6662890016920473, 1.054177495462795, 1.0429070871481858, 0.6611515631183221, 0.7342340980187696, 0.8455174603174603, 0.9695830886670582, 0.5918473777253977, 1.9600339449541284, 0.9197469512195122, 1.2326632911392406, 0.5629648946840522, 0.7862627471383975, 0.9314229323308271, 0.837381753312946, 1.112301018483591, 0.9025108194395176, 0.8075094273743018, 0.988311229946524, 0.6140189035916823, 0.8686555377207063, 0.9069389035667107, 0.6733970826580227, 0.8276491228070175, 0.8519108776685869, 0.8529105374823197, 0.8674681647940076, 1.3030172261484099, 0.9506813929313929, 1.1247157794676808, 0.9087814790139906, 1.5545020215633425, 4.743944086021505, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Charging Station: 157 kWh', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.586923076923077, 4.8462192982456145, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Whirlpool: 100 kWh', [0.027956773446545735, 0.02793238434163701, 0.028003065134099617, 0.02795220588235294, 0.027998854961832062, 0.028116988416988415, 0.027987117552334944, 0.028404306220095696, 0.02210508757297748, 0.02458289572393098, 0.025521831735889244, 0.03394027565084227, 0.06640016920473774, 0.07485995085995086, 0.05630216802168022, 0.040562390158172236, 0.042727272727272725, 0.04185823488533704, 0.02956647864625302, 0.02693582887700535, 0.029227223427331885, 0.031081920903954802, 0.02950079575596817, 0.02929895178197065, 0.02774064837905237, 0.027340638930163447, 0.027272103350827612, 0.027199391171993912, 0.02697577592732778, 0.02688116057233704, 0.02704352806414662, 0.026709154929577466, 0.024765209940017137, 0.020726594301221167, 0.024283930058284765, 0.027086363636363638, 0.04770666666666666, 0.05307067510548523, 0.05273466476462197, 0.054757768924302785, 0.05023135033050047, 0.041280141843971635, 0.03150934119960669, 0.026471978392977717, 0.031050412465627866, 0.029384710234278667, 0.02795327604726101, 0.028357904496986556, 0.025564085881587508, null, 0.026944094488188977, 0.027036082474226807, 0.026367164179104476, 0.025185562632696393, 0.026994444444444442, 0.025911782850092536, 0.01343197071384991, 0.024309846431797653, 0.02523471223021583, 0.026126705653021443, 0.06064339781328848, 0.03996433289299867, 0.037667578659370725, 0.050665427509293676, 0.04189218523878437, 0.02988109495295124, 0.02693968253968254, 0.025741935483870968, 0.028640000000000002, 0.031331460674157305, 0.030017262638717634, 0.028636402753872633, 0.028408956692913385, 0.02814567233384853, 0.02825509028044564, 0.028126129666011787, 0.028175675675675676, 0.027409126063418405, 0.027549439844130538, 0.027246363209760677, 0.02296663244353183, 0.02165732959850607, 0.022306306306306308, 0.025892307692307694, 0.0518, 0.05290322580645162, 0.05902597402597402, 0.03935110294117647, 0.03387375113533152, 0.02998160073597056, 0.0264819734345351, 0.029473684210526315, 0.028432854465958775, 0.029162214983713356, 0.028663861386138613, 0.02823558082859464, 0.028460033305578683, 0.029076231430805316, 0.028803389830508477, 0.02862062404870624, 0.028578023655093474, 0.02837057010785824, 0.02746546431312356, 0.027873293515358364, 0.025733505154639177, 0.02635780287474333, 0.027692853246044733, 0.024205128205128205, null, 0.026746031746031747, 0.023178571428571427, 0.026168618266978923, 0.028333646616541353, 0.026758232235701906, 0.023993934142114384, 0.02471902131018153, 0.02823051948051948, 0.028745721271393642, 0.028485825458588104, 0.02822232263895165, 0.028392755392755393, 0.028338354151359293, 0.027164207340143777, 0.02694932432432432, 0.026942610652663165, 0.027809220389805097, 0.027980593607305936, 0.02826596758817922, 0.029656794425087108, 0.025145056246299584, 0.02520321410057024, 0.02882728749323227, 0.03222576966932725, 0.031200444197667963, 0.030594259988745078, 0.04334990059642147, 0.04615876288659794, 0.03340802469135802, 0.027489320388349517, 0.025818808777429467, 0.02795967741935484, 0.028969951391957578, 0.027549955791335103, 0.02834137055837563, 0.028250760538896132, 0.027812838360402166, 0.02810333080999243, 0.027840314136125657, 0.027800384615384616, 0.027979583975346688, 0.027235769230769234, 0.026924960505529224, 0.029038479809976248, 0.02793128390596745, 0.03410349373764008, 0.0327387339055794, 0.029509929906542054, 0.03700855745721272, 0.03224008574490889, 0.02770136363636364, 0.030787037037037036, 0.025786028602860285, 0.029997148966500357, 0.03289406099518459, 0.03532872928176795, 0.025655647382920112, 0.02746238030095759, 0.02827226647356988]),
- DATA('Sonstiger: 97,1 kWh', [0.6360308446701046, 0.9095864441102458, 0.7335808811402847, 0.5718131699718612, 0.9616446485934361, 0.6381720132750589, 1.02619037791046, 1.0145027809280902, 0.6390464755453447, 0.7096512022948386, 0.819995628581571, 0.935642813016216, 0.5254472085206601, 1.8851739940941776, 0.863444783197832, 1.1921009009810684, 0.5202376219567795, 0.7444045122530605, 0.901856453684574, 0.8104459244359407, 1.0830737950562592, 0.8714288985355628, 0.7780086316183336, 0.9590122781645534, 0.58627825521263, 0.8413148987905428, 0.8796668002158831, 0.6461976914860288, 0.8006733468796897, 0.8250297170962498, 0.825867009418173, 0.8407590098644301, 1.2782520162083928, 0.9299547986301717, 1.100431849409396, 0.881695115377627, -3.0801277220264014, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Gesamt: 354,1 kWh", [0.6639876181166504, 0.9375188284518828, 0.7615839462743844, 0.5997653758542141, 0.9896435035552682, 0.6662890016920473, 1.054177495462795, 1.0429070871481858, 0.6611515631183221, 0.7342340980187696, 0.8455174603174603, 0.9695830886670582, 0.5918473777253977, 1.9600339449541284, 0.9197469512195122, 1.2326632911392406, 0.5629648946840522, 0.7862627471383975, 0.9314229323308271, 0.837381753312946, 1.112301018483591, 0.9025108194395176, 0.8075094273743018, 0.988311229946524, 0.6140189035916823, 0.8686555377207063, 0.9069389035667107, 0.6733970826580227, 0.8276491228070175, 0.8519108776685869, 0.8529105374823197, 0.8674681647940076, 1.3030172261484099, 0.9506813929313929, 1.1247157794676808, 0.9087814790139906, 1.5545020215633425, 4.743944086021505, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Charging Station: 157 kWh", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.586923076923077, 4.8462192982456145, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Whirlpool: 100 kWh", [0.027956773446545735, 0.02793238434163701, 0.028003065134099617, 0.02795220588235294, 0.027998854961832062, 0.028116988416988415, 0.027987117552334944, 0.028404306220095696, 0.02210508757297748, 0.02458289572393098, 0.025521831735889244, 0.03394027565084227, 0.06640016920473774, 0.07485995085995086, 0.05630216802168022, 0.040562390158172236, 0.042727272727272725, 0.04185823488533704, 0.02956647864625302, 0.02693582887700535, 0.029227223427331885, 0.031081920903954802, 0.02950079575596817, 0.02929895178197065, 0.02774064837905237, 0.027340638930163447, 0.027272103350827612, 0.027199391171993912, 0.02697577592732778, 0.02688116057233704, 0.02704352806414662, 0.026709154929577466, 0.024765209940017137, 0.020726594301221167, 0.024283930058284765, 0.027086363636363638, 0.04770666666666666, 0.05307067510548523, 0.05273466476462197, 0.054757768924302785, 0.05023135033050047, 0.041280141843971635, 0.03150934119960669, 0.026471978392977717, 0.031050412465627866, 0.029384710234278667, 0.02795327604726101, 0.028357904496986556, 0.025564085881587508, null, 0.026944094488188977, 0.027036082474226807, 0.026367164179104476, 0.025185562632696393, 0.026994444444444442, 0.025911782850092536, 0.01343197071384991, 0.024309846431797653, 0.02523471223021583, 0.026126705653021443, 0.06064339781328848, 0.03996433289299867, 0.037667578659370725, 0.050665427509293676, 0.04189218523878437, 0.02988109495295124, 0.02693968253968254, 0.025741935483870968, 0.028640000000000002, 0.031331460674157305, 0.030017262638717634, 0.028636402753872633, 0.028408956692913385, 0.02814567233384853, 0.02825509028044564, 0.028126129666011787, 0.028175675675675676, 0.027409126063418405, 0.027549439844130538, 0.027246363209760677, 0.02296663244353183, 0.02165732959850607, 0.022306306306306308, 0.025892307692307694, 0.0518, 0.05290322580645162, 0.05902597402597402, 0.03935110294117647, 0.03387375113533152, 0.02998160073597056, 0.0264819734345351, 0.029473684210526315, 0.028432854465958775, 0.029162214983713356, 0.028663861386138613, 0.02823558082859464, 0.028460033305578683, 0.029076231430805316, 0.028803389830508477, 0.02862062404870624, 0.028578023655093474, 0.02837057010785824, 0.02746546431312356, 0.027873293515358364, 0.025733505154639177, 0.02635780287474333, 0.027692853246044733, 0.024205128205128205, null, 0.026746031746031747, 0.023178571428571427, 0.026168618266978923, 0.028333646616541353, 0.026758232235701906, 0.023993934142114384, 0.02471902131018153, 0.02823051948051948, 0.028745721271393642, 0.028485825458588104, 0.02822232263895165, 0.028392755392755393, 0.028338354151359293, 0.027164207340143777, 0.02694932432432432, 0.026942610652663165, 0.027809220389805097, 0.027980593607305936, 0.02826596758817922, 0.029656794425087108, 0.025145056246299584, 0.02520321410057024, 0.02882728749323227, 0.03222576966932725, 0.031200444197667963, 0.030594259988745078, 0.04334990059642147, 0.04615876288659794, 0.03340802469135802, 0.027489320388349517, 0.025818808777429467, 0.02795967741935484, 0.028969951391957578, 0.027549955791335103, 0.02834137055837563, 0.028250760538896132, 0.027812838360402166, 0.02810333080999243, 0.027840314136125657, 0.027800384615384616, 0.027979583975346688, 0.027235769230769234, 0.026924960505529224, 0.029038479809976248, 0.02793128390596745, 0.03410349373764008, 0.0327387339055794, 0.029509929906542054, 0.03700855745721272, 0.03224008574490889, 0.02770136363636364, 0.030787037037037036, 0.025786028602860285, 0.029997148966500357, 0.03289406099518459, 0.03532872928176795, 0.025655647382920112, 0.02746238030095759, 0.02827226647356988]),
+ DATA("Sonstiger: 97,1 kWh", [0.6360308446701046, 0.9095864441102458, 0.7335808811402847, 0.5718131699718612, 0.9616446485934361, 0.6381720132750589, 1.02619037791046, 1.0145027809280902, 0.6390464755453447, 0.7096512022948386, 0.819995628581571, 0.935642813016216, 0.5254472085206601, 1.8851739940941776, 0.863444783197832, 1.1921009009810684, 0.5202376219567795, 0.7444045122530605, 0.901856453684574, 0.8104459244359407, 1.0830737950562592, 0.8714288985355628, 0.7780086316183336, 0.9590122781645534, 0.58627825521263, 0.8413148987905428, 0.8796668002158831, 0.6461976914860288, 0.8006733468796897, 0.8250297170962498, 0.825867009418173, 0.8407590098644301, 1.2782520162083928, 0.9299547986301717, 1.100431849409396, 0.881695115377627, -3.0801277220264014, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
],
labels: LABELS(History.WEEK.dataChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.LINE_CHART_OPTIONS('day', 'line', {}),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("day", "line", {}),
},
});
}
{
// Bar-Chart, no phases, no phasecolors
- expectView(defaultEMS, TEST_CONTEXT, 'bar', History.MONTH,
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
{
datasets: {
data: [
- DATA('Gesamt: 1.033,4 kWh', [1.7843478512581188, 0.9551978135997077, 1.6049176251387696, 1.8215474663613151, 1.2040116271893009, 1.037408900359932, 1.287891020875591, 1.1830577354221141, 1.0278784377276404, 1.4127831967543791, 0.7372379614126091, 0.7306143394985477, 1.7274568452231196, 2.04548274638676, 1.289986737393844, 1.8665731598778827, 0.896448259060122, 1.2710485678635468, 1.4897323302960577, 1.3679696489029907, 2.3756092366846033, 2.3687291028362236, 2.68660326649514, 1.5970390753045414, 0.9726650191463931, 1.7742336901685731, 2.953838257099637, 0.9173087792235759, 1.1729800154902883, null, null]),
- DATA('Charging Station: 328,5 kWh', [0.598058461158158, 0, 0.6073861225965935, 0.8913491768679577, 0.2696236843407865, 0, 0.30641009901340227, 0.2205140720984315, 0.05015525733301707, 0.35642246970726826, 0, 0, 0.8800942036863182, 0.9774033026217929, 0.21023831546417276, 0.7870712558876392, 0, 0.16550743075023164, 0.5132605942604259, 0.14906825174512017, 0.8836100586172083, 1.2031171015303659, 1.4672314708234808, 0.5536230686820822, 0, 0.7148486366912177, 1.8367765179313804, 0, 0.300374916784946, null, null]),
- DATA('Whirlpool: 21,6 kWh', [0.01553700680772126, 0.01397856617670663, 0.01622420643945345, 0.01542515500397099, 0.01641557086346929, 0.015280936198647838, 0.015028196655704793, 0.015146427851947055, 0.015567356482244768, 0.017404197969735604, 0.017635152684968115, 0.014140394156739467, 0.016107488806188935, 0.01675001277671301, 0.015512752420609467, 0.014951999780788457, 0.013733457057782297, 0.016868671206682027, 0.014770978996449592, 0.01647697124898351, 0.016772182319685667, 0.016288562161254704, 0.015417362341926746, 0.015892028990939402, 0.013811584043067414, 0.01481782772305683, 0.014165639305307825, 0.016223347257543284, 0.014495672387672808, null, null]),
- DATA('Sonstiger: 683,3 kWh', [1.1707523832922395, 0.941219247423001, 0.9813072961027226, 0.9147731344893865, 0.9179723719850451, 1.0221279641612842, 0.9664527252064838, 0.9473972354717356, 0.9621558239123786, 1.0389565290773752, 0.719602808727641, 0.7164739453418082, 0.8312551527306125, 1.0513294309882544, 1.0642356695090618, 1.0645499042094553, 0.8827148020023398, 1.0886724659066331, 0.9617007570391821, 1.202424425908887, 1.4752269957477093, 1.149323439144603, 1.2039544333297325, 1.0275239776315197, 0.9588534351033258, 1.0445672257542986, 1.1028960998629487, 0.9010854319660326, 0.8581094263176695, null, null]),
+ DATA("Gesamt: 1.033,4 kWh", [1.7843478512581188, 0.9551978135997077, 1.6049176251387696, 1.8215474663613151, 1.2040116271893009, 1.037408900359932, 1.287891020875591, 1.1830577354221141, 1.0278784377276404, 1.4127831967543791, 0.7372379614126091, 0.7306143394985477, 1.7274568452231196, 2.04548274638676, 1.289986737393844, 1.8665731598778827, 0.896448259060122, 1.2710485678635468, 1.4897323302960577, 1.3679696489029907, 2.3756092366846033, 2.3687291028362236, 2.68660326649514, 1.5970390753045414, 0.9726650191463931, 1.7742336901685731, 2.953838257099637, 0.9173087792235759, 1.1729800154902883, null, null]),
+ DATA("Charging Station: 328,5 kWh", [0.598058461158158, 0, 0.6073861225965935, 0.8913491768679577, 0.2696236843407865, 0, 0.30641009901340227, 0.2205140720984315, 0.05015525733301707, 0.35642246970726826, 0, 0, 0.8800942036863182, 0.9774033026217929, 0.21023831546417276, 0.7870712558876392, 0, 0.16550743075023164, 0.5132605942604259, 0.14906825174512017, 0.8836100586172083, 1.2031171015303659, 1.4672314708234808, 0.5536230686820822, 0, 0.7148486366912177, 1.8367765179313804, 0, 0.300374916784946, null, null]),
+ DATA("Whirlpool: 21,6 kWh", [0.01553700680772126, 0.01397856617670663, 0.01622420643945345, 0.01542515500397099, 0.01641557086346929, 0.015280936198647838, 0.015028196655704793, 0.015146427851947055, 0.015567356482244768, 0.017404197969735604, 0.017635152684968115, 0.014140394156739467, 0.016107488806188935, 0.01675001277671301, 0.015512752420609467, 0.014951999780788457, 0.013733457057782297, 0.016868671206682027, 0.014770978996449592, 0.01647697124898351, 0.016772182319685667, 0.016288562161254704, 0.015417362341926746, 0.015892028990939402, 0.013811584043067414, 0.01481782772305683, 0.014165639305307825, 0.016223347257543284, 0.014495672387672808, null, null]),
+ DATA("Sonstiger: 683,3 kWh", [1.1707523832922395, 0.941219247423001, 0.9813072961027226, 0.9147731344893865, 0.9179723719850451, 1.0221279641612842, 0.9664527252064838, 0.9473972354717356, 0.9621558239123786, 1.0389565290773752, 0.719602808727641, 0.7164739453418082, 0.8312551527306125, 1.0513294309882544, 1.0642356695090618, 1.0645499042094553, 0.8827148020023398, 1.0886724659066331, 0.9617007570391821, 1.202424425908887, 1.4752269957477093, 1.149323439144603, 1.2039544333297325, 1.0275239776315197, 0.9588534351033258, 1.0445672257542986, 1.1028960998629487, 0.9010854319660326, 0.8581094263176695, null, null]),
],
labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.BAR_CHART_OPTIONS('day', 'bar', {}),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
},
});
}
{
// Bar-Chart, phases
- expectView(defaultEMS, TEST_CONTEXT, 'bar', History.YEAR,
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.YEAR,
{
datasets: {
data: [
- DATA('Gesamt: 14.863,7 kWh', [1682.941, 1834.729, 1805.222, 1934.144, 1757.577, 1511.352, 2306.988, 2029.933, 0, 0, 0, 0]),
- DATA('Charging Station: 2.071,1 kWh', [69.104, 131.703, 25.773, 51.085, 169.943, 332.522, 748.189, 540.74, 0, 0, 0, 0]),
- DATA('Whirlpool: 1.908,7 kWh', [338.07, 312.38, 298.93, 317.7, 200.21, 151.16, 145.88, 144.28, 0, 0, 0, 0]),
- DATA('Sonstiger: 10.883,9 kWh', [1275.767, 1390.6460000000002, 1480.519, 1565.359, 1387.424, 1027.67, 1412.9189999999999, 1344.913, 0, 0, 0, 0]),
+ DATA("Gesamt: 14.863,7 kWh", [1682.941, 1834.729, 1805.222, 1934.144, 1757.577, 1511.352, 2306.988, 2029.933, 0, 0, 0, 0]),
+ DATA("Charging Station: 2.071,1 kWh", [69.104, 131.703, 25.773, 51.085, 169.943, 332.522, 748.189, 540.74, 0, 0, 0, 0]),
+ DATA("Whirlpool: 1.908,7 kWh", [338.07, 312.38, 298.93, 317.7, 200.21, 151.16, 145.88, 144.28, 0, 0, 0, 0]),
+ DATA("Sonstiger: 10.883,9 kWh", [1275.767, 1390.6460000000002, 1480.519, 1565.359, 1387.424, 1027.67, 1412.9189999999999, 1344.913, 0, 0, 0, 0]),
],
labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.BAR_CHART_OPTIONS('month', 'bar', {}),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("month", "bar", {}),
},
});
}
diff --git a/ui/src/app/edge/history/common/consumption/chart/chart.ts b/ui/src/app/edge/history/common/consumption/chart/chart.ts
index 2c5f3b436bb..bc5474bde75 100644
--- a/ui/src/app/edge/history/common/consumption/chart/chart.ts
+++ b/ui/src/app/edge/history/common/consumption/chart/chart.ts
@@ -1,47 +1,47 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, EdgeConfig, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig, Utils } from "src/app/shared/shared";
@Component({
- selector: 'consumptionchart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "consumptionchart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class ChartComponent extends AbstractHistoryChart {
public static getChartData(config: EdgeConfig, translate: TranslateService): HistoryUtils.ChartData {
const inputChannel: HistoryUtils.InputChannel[] = [{
- name: 'ConsumptionActivePower',
- powerChannel: ChannelAddress.fromString('_sum/ConsumptionActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/ConsumptionActiveEnergy'),
+ name: "ConsumptionActivePower",
+ powerChannel: ChannelAddress.fromString("_sum/ConsumptionActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/ConsumptionActiveEnergy"),
}];
const evcsComponents: EdgeConfig.Component[] = config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs")
.filter(component => !(
- component.factoryId == 'Evcs.Cluster' ||
- component.factoryId == 'Evcs.Cluster.PeakShaving' ||
- component.factoryId == 'Evcs.Cluster.SelfConsumption'));
+ component.factoryId == "Evcs.Cluster" ||
+ component.factoryId == "Evcs.Cluster.PeakShaving" ||
+ component.factoryId == "Evcs.Cluster.SelfConsumption"));
const consumptionMeters: EdgeConfig.Component[] = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter")
.filter(component => component.isEnabled && config.isTypeConsumptionMetered(component));
evcsComponents.forEach(component => {
inputChannel.push({
- name: component.id + '/ChargePower',
- powerChannel: ChannelAddress.fromString(component.id + '/ChargePower'),
- energyChannel: ChannelAddress.fromString(component.id + '/ActiveConsumptionEnergy'),
+ name: component.id + "/ChargePower",
+ powerChannel: ChannelAddress.fromString(component.id + "/ChargePower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActiveConsumptionEnergy"),
});
});
consumptionMeters.forEach(meter => {
inputChannel.push({
- name: meter.id + '/ActivePower',
- powerChannel: ChannelAddress.fromString(meter.id + '/ActivePower'),
- energyChannel: ChannelAddress.fromString(meter.id + '/ActiveProductionEnergy'),
+ name: meter.id + "/ActivePower",
+ powerChannel: ChannelAddress.fromString(meter.id + "/ActivePower"),
+ energyChannel: ChannelAddress.fromString(meter.id + "/ActiveProductionEnergy"),
});
});
@@ -53,41 +53,41 @@ export class ChartComponent extends AbstractHistoryChart {
output: (data: HistoryUtils.ChannelData) => {
const datasets: HistoryUtils.DisplayValue[] = [];
datasets.push({
- name: translate.instant('General.TOTAL'),
+ name: translate.instant("General.TOTAL"),
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return energyValues?.result.data['_sum/ConsumptionActiveEnergy'];
+ return energyValues?.result.data["_sum/ConsumptionActiveEnergy"];
},
converter: () => {
- return data['ConsumptionActivePower'] ?? null;
+ return data["ConsumptionActivePower"] ?? null;
},
- color: 'rgb(253,197,7)',
+ color: "rgb(253,197,7)",
stack: 0,
});
- const evcsComponentColors: string[] = ['rgb(0,223,0)', 'rgb(0,178,0)', 'rgb(0,201,0)', 'rgb(0,134,0)', 'rgb(0,156,0)'];
+ const evcsComponentColors: string[] = ["rgb(0,223,0)", "rgb(0,178,0)", "rgb(0,201,0)", "rgb(0,134,0)", "rgb(0,156,0)"];
evcsComponents.forEach((component, index) => {
datasets.push({
name: component.alias,
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return energyValues?.result.data[component.id + '/ActiveConsumptionEnergy'];
+ return energyValues?.result.data[component.id + "/ActiveConsumptionEnergy"];
},
converter: () => {
- return data[component.id + '/ChargePower'] ?? null;
+ return data[component.id + "/ChargePower"] ?? null;
},
color: evcsComponentColors[Math.min(index, (evcsComponentColors.length - 1))],
stack: 1,
});
});
- const consumptionMeterColors: string[] = ['rgb(220,20,60)', 'rgb(202, 158, 6', 'rgb(228, 177, 6)', 'rgb(177, 138, 5)', 'rgb(152, 118, 4)'];
+ const consumptionMeterColors: string[] = ["rgb(220,20,60)", "rgb(202, 158, 6", "rgb(228, 177, 6)", "rgb(177, 138, 5)", "rgb(152, 118, 4)"];
consumptionMeters.forEach((meter, index) => {
datasets.push({
name: meter.alias,
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return energyValues?.result.data[meter.id + '/ActiveProductionEnergy'];
+ return energyValues?.result.data[meter.id + "/ActiveProductionEnergy"];
},
converter: () => {
- return data[meter.id + '/ActivePower'] ?? null;
+ return data[meter.id + "/ActivePower"] ?? null;
},
color: consumptionMeterColors[Math.min(index, (consumptionMeterColors.length - 1))],
stack: 1,
@@ -97,14 +97,14 @@ export class ChartComponent extends AbstractHistoryChart {
// other consumption
if (consumptionMeters.length > 0 || evcsComponents.length > 0) {
datasets.push({
- name: translate.instant('General.otherConsumption'),
+ name: translate.instant("General.otherConsumption"),
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
return Utils.calculateOtherConsumptionTotal(energyValues, evcsComponents, consumptionMeters);
},
converter: () => {
return Utils.calculateOtherConsumption(data, evcsComponents, consumptionMeters);
},
- color: 'rgb(0,0,0)',
+ color: "rgb(0,0,0)",
stack: 1,
});
}
@@ -112,12 +112,12 @@ export class ChartComponent extends AbstractHistoryChart {
return datasets;
},
tooltip: {
- formatNumber: '1.0-2',
+ formatNumber: "1.0-2",
},
yAxes: [
{
- unit: YAxisTitle.ENERGY,
- position: 'left',
+ unit: YAxisType.ENERGY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}],
};
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/channels.spec.ts b/ui/src/app/edge/history/common/consumption/details/chart/channels.spec.ts
new file mode 100644
index 00000000000..3f907efebad
--- /dev/null
+++ b/ui/src/app/edge/history/common/consumption/details/chart/channels.spec.ts
@@ -0,0 +1,62 @@
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { QueryHistoricTimeseriesEnergyPerPeriodResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyPerPeriodResponse";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+
+
+export namespace History {
+
+ /**
+ * up to 288 datapoints (5 min aggregated values) from a
+ *
+ * {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}
+ * */
+ export const DAY: OeTester.Types.Channels = ({
+ energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
+ data: {
+ "evcs0/ActiveConsumptionEnergy": 15930,
+ "_sum/ConsumptionActiveEnergy": 15930,
+ "meter0/ActiveProductionEnergy": 15930,
+ },
+ }),
+ dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", {
+ data: {
+ "evcs0/ChargePower": [124, 0, null, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePower": [124, 0, null, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePowerL1": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePowerL2": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePowerL3": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ConsumptionActivePower": [124, 0, null, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ConsumptionActivePowerL1": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ConsumptionActivePowerL2": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ConsumptionActivePowerL3": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+
+ },
+ timestamps: ["2023-07-02T22:00:00Z", "2023-07-02T22:05:00Z", "2023-07-02T22:10:00Z", "2023-07-02T22:15:00Z", "2023-07-02T22:20:00Z", "2023-07-02T22:25:00Z", "2023-07-02T22:30:00Z", "2023-07-02T22:35:00Z", "2023-07-02T22:40:00Z", "2023-07-02T22:45:00Z", "2023-07-02T22:50:00Z", "2023-07-02T22:55:00Z", "2023-07-02T23:00:00Z", "2023-07-02T23:05:00Z", "2023-07-02T23:10:00Z", "2023-07-02T23:15:00Z", "2023-07-02T23:20:00Z", "2023-07-02T23:25:00Z", "2023-07-02T23:30:00Z", "2023-07-02T23:35:00Z", "2023-07-02T23:40:00Z", "2023-07-02T23:45:00Z", "2023-07-02T23:50:00Z", "2023-07-02T23:55:00Z", "2023-07-03T00:00:00Z", "2023-07-03T00:05:00Z", "2023-07-03T00:10:00Z", "2023-07-03T00:15:00Z", "2023-07-03T00:20:00Z", "2023-07-03T00:25:00Z", "2023-07-03T00:30:00Z", "2023-07-03T00:35:00Z", "2023-07-03T00:40:00Z", "2023-07-03T00:45:00Z", "2023-07-03T00:50:00Z", "2023-07-03T00:55:00Z", "2023-07-03T01:00:00Z", "2023-07-03T01:05:00Z", "2023-07-03T01:10:00Z", "2023-07-03T01:15:00Z", "2023-07-03T01:20:00Z", "2023-07-03T01:25:00Z", "2023-07-03T01:30:00Z", "2023-07-03T01:35:00Z", "2023-07-03T01:40:00Z", "2023-07-03T01:45:00Z", "2023-07-03T01:50:00Z", "2023-07-03T01:55:00Z", "2023-07-03T02:00:00Z", "2023-07-03T02:05:00Z", "2023-07-03T02:10:00Z", "2023-07-03T02:15:00Z", "2023-07-03T02:20:00Z", "2023-07-03T02:25:00Z", "2023-07-03T02:30:00Z", "2023-07-03T02:35:00Z", "2023-07-03T02:40:00Z", "2023-07-03T02:45:00Z", "2023-07-03T02:50:00Z", "2023-07-03T02:55:00Z", "2023-07-03T03:00:00Z", "2023-07-03T03:05:00Z", "2023-07-03T03:10:00Z", "2023-07-03T03:15:00Z", "2023-07-03T03:20:00Z", "2023-07-03T03:25:00Z", "2023-07-03T03:30:00Z", "2023-07-03T03:35:00Z", "2023-07-03T03:40:00Z", "2023-07-03T03:45:00Z", "2023-07-03T03:50:00Z", "2023-07-03T03:55:00Z", "2023-07-03T04:00:00Z", "2023-07-03T04:05:00Z", "2023-07-03T04:10:00Z", "2023-07-03T04:15:00Z", "2023-07-03T04:20:00Z", "2023-07-03T04:25:00Z", "2023-07-03T04:30:00Z", "2023-07-03T04:35:00Z", "2023-07-03T04:40:00Z", "2023-07-03T04:45:00Z", "2023-07-03T04:50:00Z", "2023-07-03T04:55:00Z", "2023-07-03T05:00:00Z", "2023-07-03T05:05:00Z", "2023-07-03T05:10:00Z", "2023-07-03T05:15:00Z", "2023-07-03T05:20:00Z", "2023-07-03T05:25:00Z", "2023-07-03T05:30:00Z", "2023-07-03T05:35:00Z", "2023-07-03T05:40:00Z", "2023-07-03T05:45:00Z", "2023-07-03T05:50:00Z", "2023-07-03T05:55:00Z", "2023-07-03T06:00:00Z", "2023-07-03T06:05:00Z", "2023-07-03T06:10:00Z", "2023-07-03T06:15:00Z", "2023-07-03T06:20:00Z", "2023-07-03T06:25:00Z", "2023-07-03T06:30:00Z", "2023-07-03T06:35:00Z", "2023-07-03T06:40:00Z", "2023-07-03T06:45:00Z", "2023-07-03T06:50:00Z", "2023-07-03T06:55:00Z", "2023-07-03T07:00:00Z", "2023-07-03T07:05:00Z", "2023-07-03T07:10:00Z", "2023-07-03T07:15:00Z", "2023-07-03T07:20:00Z", "2023-07-03T07:25:00Z", "2023-07-03T07:30:00Z", "2023-07-03T07:35:00Z", "2023-07-03T07:40:00Z", "2023-07-03T07:45:00Z", "2023-07-03T07:50:00Z", "2023-07-03T07:55:00Z", "2023-07-03T08:00:00Z", "2023-07-03T08:05:00Z", "2023-07-03T08:10:00Z", "2023-07-03T08:15:00Z", "2023-07-03T08:20:00Z", "2023-07-03T08:25:00Z", "2023-07-03T08:30:00Z", "2023-07-03T08:35:00Z", "2023-07-03T08:40:00Z", "2023-07-03T08:45:00Z", "2023-07-03T08:50:00Z", "2023-07-03T08:55:00Z", "2023-07-03T09:00:00Z", "2023-07-03T09:05:00Z", "2023-07-03T09:10:00Z", "2023-07-03T09:15:00Z", "2023-07-03T09:20:00Z", "2023-07-03T09:25:00Z", "2023-07-03T09:30:00Z", "2023-07-03T09:35:00Z", "2023-07-03T09:40:00Z", "2023-07-03T09:45:00Z", "2023-07-03T09:50:00Z", "2023-07-03T09:55:00Z", "2023-07-03T10:00:00Z", "2023-07-03T10:05:00Z", "2023-07-03T10:10:00Z", "2023-07-03T10:15:00Z", "2023-07-03T10:20:00Z", "2023-07-03T10:25:00Z", "2023-07-03T10:30:00Z", "2023-07-03T10:35:00Z", "2023-07-03T10:40:00Z", "2023-07-03T10:45:00Z", "2023-07-03T10:50:00Z", "2023-07-03T10:55:00Z", "2023-07-03T11:00:00Z", "2023-07-03T11:05:00Z", "2023-07-03T11:10:00Z", "2023-07-03T11:15:00Z", "2023-07-03T11:20:00Z", "2023-07-03T11:25:00Z", "2023-07-03T11:30:00Z", "2023-07-03T11:35:00Z", "2023-07-03T11:40:00Z", "2023-07-03T11:45:00Z", "2023-07-03T11:50:00Z", "2023-07-03T11:55:00Z", "2023-07-03T12:00:00Z", "2023-07-03T12:05:00Z", "2023-07-03T12:10:00Z", "2023-07-03T12:15:00Z", "2023-07-03T12:20:00Z", "2023-07-03T12:25:00Z", "2023-07-03T12:30:00Z", "2023-07-03T12:35:00Z", "2023-07-03T12:40:00Z", "2023-07-03T12:45:00Z", "2023-07-03T12:50:00Z", "2023-07-03T12:55:00Z", "2023-07-03T13:00:00Z", "2023-07-03T13:05:00Z", "2023-07-03T13:10:00Z", "2023-07-03T13:15:00Z", "2023-07-03T13:20:00Z", "2023-07-03T13:25:00Z", "2023-07-03T13:30:00Z", "2023-07-03T13:35:00Z", "2023-07-03T13:40:00Z", "2023-07-03T13:45:00Z", "2023-07-03T13:50:00Z", "2023-07-03T13:55:00Z", "2023-07-03T14:00:00Z", "2023-07-03T14:05:00Z", "2023-07-03T14:10:00Z", "2023-07-03T14:15:00Z", "2023-07-03T14:20:00Z", "2023-07-03T14:25:00Z", "2023-07-03T14:30:00Z", "2023-07-03T14:35:00Z", "2023-07-03T14:40:00Z", "2023-07-03T14:45:00Z", "2023-07-03T14:50:00Z", "2023-07-03T14:55:00Z", "2023-07-03T15:00:00Z", "2023-07-03T15:05:00Z", "2023-07-03T15:10:00Z", "2023-07-03T15:15:00Z", "2023-07-03T15:20:00Z", "2023-07-03T15:25:00Z", "2023-07-03T15:30:00Z", "2023-07-03T15:35:00Z", "2023-07-03T15:40:00Z", "2023-07-03T15:45:00Z", "2023-07-03T15:50:00Z", "2023-07-03T15:55:00Z", "2023-07-03T16:00:00Z", "2023-07-03T16:05:00Z", "2023-07-03T16:10:00Z", "2023-07-03T16:15:00Z", "2023-07-03T16:20:00Z", "2023-07-03T16:25:00Z", "2023-07-03T16:30:00Z", "2023-07-03T16:35:00Z", "2023-07-03T16:40:00Z", "2023-07-03T16:45:00Z", "2023-07-03T16:50:00Z", "2023-07-03T16:55:00Z", "2023-07-03T17:00:00Z", "2023-07-03T17:05:00Z", "2023-07-03T17:10:00Z", "2023-07-03T17:15:00Z", "2023-07-03T17:20:00Z", "2023-07-03T17:25:00Z", "2023-07-03T17:30:00Z", "2023-07-03T17:35:00Z", "2023-07-03T17:40:00Z", "2023-07-03T17:45:00Z", "2023-07-03T17:50:00Z", "2023-07-03T17:55:00Z", "2023-07-03T18:00:00Z", "2023-07-03T18:05:00Z", "2023-07-03T18:10:00Z", "2023-07-03T18:15:00Z", "2023-07-03T18:20:00Z", "2023-07-03T18:25:00Z", "2023-07-03T18:30:00Z", "2023-07-03T18:35:00Z", "2023-07-03T18:40:00Z", "2023-07-03T18:45:00Z", "2023-07-03T18:50:00Z", "2023-07-03T18:55:00Z", "2023-07-03T19:00:00Z", "2023-07-03T19:05:00Z", "2023-07-03T19:10:00Z", "2023-07-03T19:15:00Z", "2023-07-03T19:20:00Z", "2023-07-03T19:25:00Z", "2023-07-03T19:30:00Z", "2023-07-03T19:35:00Z", "2023-07-03T19:40:00Z", "2023-07-03T19:45:00Z", "2023-07-03T19:50:00Z", "2023-07-03T19:55:00Z", "2023-07-03T20:00:00Z", "2023-07-03T20:05:00Z", "2023-07-03T20:10:00Z", "2023-07-03T20:15:00Z", "2023-07-03T20:20:00Z", "2023-07-03T20:25:00Z", "2023-07-03T20:30:00Z", "2023-07-03T20:35:00Z", "2023-07-03T20:40:00Z", "2023-07-03T20:45:00Z", "2023-07-03T20:50:00Z", "2023-07-03T20:55:00Z", "2023-07-03T21:00:00Z", "2023-07-03T21:05:00Z", "2023-07-03T21:10:00Z", "2023-07-03T21:15:00Z", "2023-07-03T21:20:00Z", "2023-07-03T21:25:00Z", "2023-07-03T21:30:00Z", "2023-07-03T21:35:00Z", "2023-07-03T21:40:00Z", "2023-07-03T21:45:00Z", "2023-07-03T21:50:00Z", "2023-07-03T21:55:00Z"],
+ }),
+ });
+
+ /**
+ * up to 31 datapoints(1 day values) from a {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}*/
+ export const MONTH: OeTester.Types.Channels = {
+ energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
+ data: {
+ "evcs0/ActiveConsumptionEnergy": 21649,
+ "_sum/ConsumptionActiveEnergy": 21649,
+ "meter0/ActiveProductionEnergy": 21649,
+ },
+ }),
+ energyPerPeriodChannelWithValues:
+ new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", {
+ data: {
+ "evcs0/ActiveConsumptionEnergy": [16, 14, 16, 15, 16, 15, 15, 15, 16, 17, 18, 14, 16, 17, 16, 15, 14, 17, 15, 16, 17, 16, 15, 16, 14, 15, 14, 16, 14, null, null],
+ "_sum/ConsumptionActiveEnergy": [16, 14, 16, 15, 16, 15, 15, 15, 16, 17, 18, 14, 16, 17, 16, 15, 14, 17, 15, 16, 17, 16, 15, 16, 14, 15, 14, 16, 14, null, null],
+ "meter0/ActiveProductionEnergy": [16, 14, 16, 15, 16, 15, 15, 15, 16, 17, 18, 14, 16, 17, 16, 15, 14, 17, 15, 16, 17, 16, 15, 16, 14, 15, 14, 16, 14, null, null],
+ "meter0/ActiveProductionEnergyL1": [5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 6, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, null, null],
+ "meter0/ActiveProductionEnergyL2": [5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 6, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, null, null],
+ "meter0/ActiveProductionEnergyL3": [5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 6, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, null, null],
+ },
+ timestamps: ["2023-05-31T22:00:00Z", "2023-06-01T22:00:00Z", "2023-06-02T22:00:00Z", "2023-06-03T22:00:00Z", "2023-06-04T22:00:00Z", "2023-06-05T22:00:00Z", "2023-06-06T22:00:00Z", "2023-06-07T22:00:00Z", "2023-06-08T22:00:00Z", "2023-06-09T22:00:00Z", "2023-06-10T22:00:00Z", "2023-06-11T22:00:00Z", "2023-06-12T22:00:00Z", "2023-06-13T22:00:00Z", "2023-06-14T22:00:00Z", "2023-06-15T22:00:00Z", "2023-06-16T22:00:00Z", "2023-06-17T22:00:00Z", "2023-06-18T22:00:00Z", "2023-06-19T22:00:00Z", "2023-06-20T22:00:00Z", "2023-06-21T22:00:00Z", "2023-06-22T22:00:00Z", "2023-06-23T22:00:00Z", "2023-06-24T22:00:00Z", "2023-06-25T22:00:00Z", "2023-06-26T22:00:00Z", "2023-06-27T22:00:00Z", "2023-06-28T22:00:00Z", "2023-06-29T22:00:00Z"],
+ }),
+ };
+}
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/chart.ts b/ui/src/app/edge/history/common/consumption/details/chart/chart.ts
deleted file mode 100644
index 56430b4557c..00000000000
--- a/ui/src/app/edge/history/common/consumption/details/chart/chart.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { Phase } from 'src/app/shared/components/shared/phase';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress } from 'src/app/shared/shared';
-
-@Component({
- selector: 'consumptionMeterChart',
- templateUrl: '../../../../../../shared/components/chart/abstracthistorychart.html',
-})
-export class ChartComponent extends AbstractHistoryChart {
-
- protected override getChartData(): HistoryUtils.ChartData {
-
- const component = this.config?.getComponent(this.route.snapshot.params.componentId);
-
- const isConsumptionMetered: boolean = this.config?.hasComponentNature("io.openems.edge.meter.api.ElectricityMeter", component?.id)
- && this.config?.isTypeConsumptionMetered(component);
- const isEvcs: boolean = this.config?.hasComponentNature("io.openems.edge.evcs.api.Evcs", component?.id)
- && (component?.factoryId !== 'Evcs.Cluster.SelfConsumption')
- && component?.factoryId !== 'Evcs.Cluster.PeakShaving'
- && component?.isEnabled !== false;
- const channels: HistoryUtils.InputChannel[] = [];
-
- if (isEvcs) {
- channels.push({
- name: component.id,
- powerChannel: ChannelAddress.fromString(component.id + '/ChargePower'),
- energyChannel: ChannelAddress.fromString(component.id + '/ActiveConsumptionEnergy'),
- });
- }
-
- if (isConsumptionMetered) {
- channels.push({
- name: component.id,
- powerChannel: ChannelAddress.fromString(component.id + '/ActivePower'),
- energyChannel: ChannelAddress.fromString(component.id + '/ActiveProductionEnergy'),
- });
-
- channels.push(...Phase.THREE_PHASE.map(phase => ({
- name: 'ConsumptionActivePower' + phase,
- powerChannel: ChannelAddress.fromString(component.id + '/ActivePower' + phase),
- energyChannel: ChannelAddress.fromString(component.id + '/ActiveProductionEnergy' + phase),
- })));
- }
-
- const chartObject: HistoryUtils.ChartData = {
- input: channels,
- output: (data: HistoryUtils.ChannelData) => {
- const datasets: HistoryUtils.DisplayValue[] = [];
- datasets.push({
- name: component.alias,
- nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyQueryResponse.result.data[isEvcs ? component.id + '/ActiveConsumptionEnergy' : component.id + '/ActiveProductionEnergy'];
- },
- converter: () => {
- return data[component.id];
- },
- color: 'rgb(0,152,204)',
- hiddenOnInit: false,
- stack: 2,
- });
-
- if (!isConsumptionMetered) {
- return datasets;
- }
-
- datasets.push(...Phase.THREE_PHASE.map((phase, i) => ({
- name: "Phase " + phase,
- nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => energyQueryResponse.result.data[component.id + '/ActiveProductionEnergy' + phase],
- converter: () =>
- data['ConsumptionActivePower' + phase],
- color: 'rgb(' + AbstractHistoryChart.phaseColors[i] + ')',
- stack: 3,
- })));
-
- return datasets;
- },
- tooltip: {
- formatNumber: '1.1-2',
- afterTitle: this.translate.instant('General.TOTAL'),
- },
- yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
- yAxisId: ChartAxis.LEFT,
- }],
- };
-
- return chartObject;
- }
-}
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/consumptionMeter.spec.ts b/ui/src/app/edge/history/common/consumption/details/chart/consumptionMeter.spec.ts
new file mode 100644
index 00000000000..c73384cbce2
--- /dev/null
+++ b/ui/src/app/edge/history/common/consumption/details/chart/consumptionMeter.spec.ts
@@ -0,0 +1,64 @@
+// @ts-strict-ignore
+import { ActivatedRoute } from "@angular/router";
+import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
+import { removeFunctions, sharedSetupWithComponentIdRoute, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
+import { EdgeConfig } from "src/app/shared/shared";
+import { DATA, LABELS } from "../../../energy/chart/chart.constants.spec";
+import { History } from "./channels.spec";
+import { ConsumptionMeterChartDetailsComponent } from "./consumptionMeter";
+
+describe("History Consumption Details - consumptionMeters", () => {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.SOCOMEC_CONSUMPTION_METER("meter0"),
+ );
+
+ let TEST_CONTEXT: TestContext & { route: ActivatedRoute };
+ beforeEach(async () => {
+ TEST_CONTEXT = await sharedSetupWithComponentIdRoute("meter0");
+ });
+
+ it("#getChartData()", () => {
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("meter0: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L1", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L2", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L3", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ ],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("meter0: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ DATA("Phase L1", [0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.006, 0.006, 0.005, 0.005, 0.006, 0.005, 0.005, 0.005, 0.006, 0.005, 0.005, 0.006, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, null, null]),
+ DATA("Phase L2", [0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.006, 0.006, 0.005, 0.005, 0.006, 0.005, 0.005, 0.005, 0.006, 0.005, 0.005, 0.006, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, null, null]),
+ DATA("Phase L3", [0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.006, 0.006, 0.005, 0.005, 0.006, 0.005, 0.005, 0.005, 0.006, 0.005, 0.005, 0.006, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+});
+
+export function expectView(config: EdgeConfig, testContext: TestContext & { route: ActivatedRoute }, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+ expect(removeFunctions(OeChartTester
+ .apply(ConsumptionMeterChartDetailsComponent
+ .getChartData(
+ DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.route,
+ testContext.translate), chartType, channels, testContext, config)))
+ .toEqual(removeFunctions(view));
+}
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/consumptionMeter.ts b/ui/src/app/edge/history/common/consumption/details/chart/consumptionMeter.ts
new file mode 100644
index 00000000000..7fd59547f17
--- /dev/null
+++ b/ui/src/app/edge/history/common/consumption/details/chart/consumptionMeter.ts
@@ -0,0 +1,63 @@
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { Phase } from "src/app/shared/components/shared/phase";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "consumptionMeterChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class ConsumptionMeterChartDetailsComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, route: ActivatedRoute, translate: TranslateService): HistoryUtils.ChartData {
+ const component = config?.getComponent(route.snapshot.params.componentId);
+ return {
+ input: [{
+ name: component.id,
+ powerChannel: ChannelAddress.fromString(component.id + "/ActivePower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActiveProductionEnergy"),
+ },
+ ...Phase.THREE_PHASE.map(phase => ({
+ name: "ConsumptionActivePower" + phase,
+ powerChannel: ChannelAddress.fromString(component.id + "/ActivePower" + phase),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActiveProductionEnergy" + phase),
+ }))],
+ output: (data: HistoryUtils.ChannelData) => [
+ {
+ name: component.alias,
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => energyQueryResponse.result.data[component.id + "/ActiveProductionEnergy"],
+ converter: () => data[component.id],
+ color: "rgb(0,152,204)",
+ hiddenOnInit: false,
+ stack: 2,
+ },
+
+ ...Phase.THREE_PHASE.map((phase, i) => ({
+ name: "Phase " + phase,
+ converter: () =>
+ data["ConsumptionActivePower" + phase],
+ color: "rgb(" + AbstractHistoryChart.phaseColors[i] + ")",
+ stack: 3,
+ })),
+ ],
+ tooltip: {
+ formatNumber: "1.1-2",
+ afterTitle: translate.instant("General.TOTAL"),
+ },
+ yAxes: [{
+ unit: YAxisType.ENERGY,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+ }
+
+ protected override getChartData(): HistoryUtils.ChartData {
+ return ConsumptionMeterChartDetailsComponent.getChartData(this.config, this.route, this.translate);
+ }
+
+}
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/evcs.spec.ts b/ui/src/app/edge/history/common/consumption/details/chart/evcs.spec.ts
new file mode 100644
index 00000000000..75a40f7b0ba
--- /dev/null
+++ b/ui/src/app/edge/history/common/consumption/details/chart/evcs.spec.ts
@@ -0,0 +1,58 @@
+// @ts-strict-ignore
+import { ActivatedRoute } from "@angular/router";
+import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
+import { removeFunctions, sharedSetupWithComponentIdRoute, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
+import { EdgeConfig } from "src/app/shared/shared";
+import { DATA, LABELS } from "../../../energy/chart/chart.constants.spec";
+import { History } from "./channels.spec";
+import { EvcsChartDetailsComponent } from "./evcs";
+
+describe("History Consumption Details - evcs", () => {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.EVCS_KEBA_KECONTACT("evcs0", "Charging Station"),
+ );
+
+ let TEST_CONTEXT: TestContext & { route: ActivatedRoute };
+ beforeEach(async () => {
+ TEST_CONTEXT = await sharedSetupWithComponentIdRoute("evcs0");
+ });
+
+ it("#getChartData() - evcs", () => {
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("Charging Station: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ ],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("Charging Station: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+});
+
+export function expectView(config: EdgeConfig, testContext: TestContext & { route: ActivatedRoute }, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+ expect(removeFunctions(OeChartTester
+ .apply(EvcsChartDetailsComponent
+ .getChartData(
+ DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.route,
+ testContext.translate), chartType, channels, testContext, config)))
+ .toEqual(removeFunctions(view));
+}
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/evcs.ts b/ui/src/app/edge/history/common/consumption/details/chart/evcs.ts
new file mode 100644
index 00000000000..62e58482cfe
--- /dev/null
+++ b/ui/src/app/edge/history/common/consumption/details/chart/evcs.ts
@@ -0,0 +1,47 @@
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "evcsChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class EvcsChartDetailsComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, route: ActivatedRoute, translate: TranslateService): HistoryUtils.ChartData {
+
+ const component = config?.getComponent(route.snapshot.params.componentId);
+ return {
+ input: [{
+ name: component.id,
+ powerChannel: ChannelAddress.fromString(component.id + "/ChargePower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActiveConsumptionEnergy"),
+ }],
+ output: (data: HistoryUtils.ChannelData) => [{
+ name: component.alias,
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => energyQueryResponse.result.data[component.id + "/ActiveConsumptionEnergy"],
+ converter: () => data[component.id],
+ color: "rgb(0,152,204)",
+ hiddenOnInit: false,
+ stack: 2,
+ }],
+ tooltip: {
+ formatNumber: "1.1-2",
+ afterTitle: translate.instant("General.TOTAL"),
+ },
+ yAxes: [{
+ unit: YAxisType.ENERGY,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+ }
+
+ protected override getChartData(): HistoryUtils.ChartData {
+ return EvcsChartDetailsComponent.getChartData(this.config, this.route, this.translate);
+ }
+}
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/sum.spec.ts b/ui/src/app/edge/history/common/consumption/details/chart/sum.spec.ts
new file mode 100644
index 00000000000..0192ff39015
--- /dev/null
+++ b/ui/src/app/edge/history/common/consumption/details/chart/sum.spec.ts
@@ -0,0 +1,61 @@
+// @ts-strict-ignore
+import { ActivatedRoute } from "@angular/router";
+import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
+import { removeFunctions, sharedSetupWithComponentIdRoute, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
+import { EdgeConfig } from "src/app/shared/shared";
+import { DATA, LABELS } from "../../../energy/chart/chart.constants.spec";
+import { History } from "./channels.spec";
+import { SumChartDetailsComponent } from "./sum";
+
+describe("History Production Details - _sum", () => {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.SUM("_sum", "Gesamt"),
+ );
+
+ let TEST_CONTEXT: TestContext & { route: ActivatedRoute };
+ beforeEach(async () => {
+ TEST_CONTEXT = await sharedSetupWithComponentIdRoute("_sum");
+ });
+
+ it("#getChartData()", () => {
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L1", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L2", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L3", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ ],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+});
+
+export function expectView(config: EdgeConfig, testContext: TestContext & { route: ActivatedRoute }, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+ expect(removeFunctions(OeChartTester
+ .apply(SumChartDetailsComponent
+ .getChartData(
+ DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.route,
+ testContext.translate), chartType, channels, testContext, config)))
+ .toEqual(removeFunctions(view));
+}
diff --git a/ui/src/app/edge/history/common/consumption/details/chart/sum.ts b/ui/src/app/edge/history/common/consumption/details/chart/sum.ts
new file mode 100644
index 00000000000..cf25ef1a843
--- /dev/null
+++ b/ui/src/app/edge/history/common/consumption/details/chart/sum.ts
@@ -0,0 +1,62 @@
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { Phase } from "src/app/shared/components/shared/phase";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "sumChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class SumChartDetailsComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, route: ActivatedRoute, translate: TranslateService): HistoryUtils.ChartData {
+
+ const component = config?.getComponent(route.snapshot.params.componentId);
+ return {
+ input: [{
+ name: component.id,
+ powerChannel: ChannelAddress.fromString(component.id + "/ConsumptionActivePower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ConsumptionActiveEnergy"),
+ },
+
+ ...Phase.THREE_PHASE.map(phase => ({
+ name: "ConsumptionActivePower" + phase,
+ powerChannel: ChannelAddress.fromString(component.id + "/ConsumptionActivePower" + phase),
+ }))],
+
+ output: (data: HistoryUtils.ChannelData) => [{
+ name: component.alias,
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => energyQueryResponse.result.data[component.id + "/ConsumptionActiveEnergy"],
+ converter: () => data[component.id],
+ color: "rgb(0,152,204)",
+ hiddenOnInit: false,
+ stack: 2,
+ },
+
+ ...Phase.THREE_PHASE.map((phase, i) => ({
+ name: "Phase " + phase,
+ converter: () =>
+ data["ConsumptionActivePower" + phase],
+ color: "rgb(" + AbstractHistoryChart.phaseColors[i] + ")",
+ stack: 3,
+ }))],
+ tooltip: {
+ formatNumber: "1.1-2",
+ afterTitle: translate.instant("General.TOTAL"),
+ },
+ yAxes: [{
+ unit: YAxisType.ENERGY,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+ }
+
+ protected override getChartData(): HistoryUtils.ChartData {
+ return SumChartDetailsComponent.getChartData(this.config, this.route, this.translate);
+ }
+}
diff --git a/ui/src/app/edge/history/common/consumption/details/details.overview.html b/ui/src/app/edge/history/common/consumption/details/details.overview.html
index ee10f2f639c..31819efc6fb 100644
--- a/ui/src/app/edge/history/common/consumption/details/details.overview.html
+++ b/ui/src/app/edge/history/common/consumption/details/details.overview.html
@@ -1,7 +1,9 @@
-
-
+
+
+
+
+
+
diff --git a/ui/src/app/edge/history/common/consumption/details/details.overview.ts b/ui/src/app/edge/history/common/consumption/details/details.overview.ts
index 10c26d168f3..645fd4194dd 100644
--- a/ui/src/app/edge/history/common/consumption/details/details.overview.ts
+++ b/ui/src/app/edge/history/common/consumption/details/details.overview.ts
@@ -1,17 +1,18 @@
-import { Component } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
-import { NavigationOption } from 'src/app/shared/components/footer/subnavigation/footerNavigation';
-import { Service } from 'src/app/shared/shared';
-import { Role } from 'src/app/shared/type/role';
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
+import { NavigationOption } from "src/app/shared/components/footer/subnavigation/footerNavigation";
+import { Service } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
@Component({
- templateUrl: './details.overview.html',
+ templateUrl: "./details.overview.html",
})
export class DetailsOverviewComponent extends AbstractHistoryChartOverview {
protected navigationButtons: NavigationOption[] = [];
+ protected componentType: "sum" | "consumptionMeter" | "evcs" | null = null;
constructor(
public override service: Service,
@@ -24,14 +25,48 @@ export class DetailsOverviewComponent extends AbstractHistoryChartOverview {
}
protected override afterIsInitialized() {
+ this.componentType = this.getComponentType();
this.service.getCurrentEdge().then(edge => {
- if (this.component && this.config?.hasComponentNature("io.openems.edge.evcs.api.Evcs", this.component.id)) {
+ if (!this.component) {
+ return;
+ }
+
+ if (this.config?.hasComponentNature("io.openems.edge.evcs.api.Evcs", this.component.id)) {
+ return;
+ }
+
+ if (this.component.factoryId === "Core.Sum") {
+ this.component.alias = this.translate.instant("General.TOTAL");
return;
}
this.navigationButtons = [
- { id: 'currentVoltage', isEnabled: edge.roleIsAtLeast(Role.INSTALLER), alias: this.translate.instant("Edge.History.CURRENT_AND_VOLTAGE"), callback: () => { this.router.navigate(['./currentVoltage'], { relativeTo: this.route }); } }];
+ { id: "currentVoltage", isEnabled: edge.roleIsAtLeast(Role.INSTALLER), alias: this.translate.instant("Edge.History.CURRENT_AND_VOLTAGE"), callback: () => { this.router.navigate(["./currentVoltage"], { relativeTo: this.route }); } }];
});
}
+
+ private getComponentType(): typeof this.componentType {
+ if (!this.component) {
+ return null;
+ }
+
+ if (this.config?.hasComponentNature("io.openems.edge.evcs.api.Evcs", this.component.id)
+ && (this.component.factoryId !== "Evcs.Cluster.SelfConsumption")
+ && this.component.factoryId !== "Evcs.Cluster.PeakShaving"
+ && this.component.isEnabled !== false) {
+ return "evcs";
+ }
+
+ if (this.config?.hasComponentNature("io.openems.edge.meter.api.ElectricityMeter", this.component.id)
+ && this.config.isTypeConsumptionMetered(this.component) && this.component.isEnabled) {
+ return "consumptionMeter";
+ }
+
+ if (this.component.factoryId === "Core.Sum") {
+ return "sum";
+ }
+
+ return null;
+ }
}
diff --git a/ui/src/app/edge/history/common/consumption/flat/flat.html b/ui/src/app/edge/history/common/consumption/flat/flat.html
index 05eab4f6128..ac93f31a491 100644
--- a/ui/src/app/edge/history/common/consumption/flat/flat.html
+++ b/ui/src/app/edge/history/common/consumption/flat/flat.html
@@ -25,4 +25,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/consumption/flat/flat.ts b/ui/src/app/edge/history/common/consumption/flat/flat.ts
index 7431f592845..149521db911 100644
--- a/ui/src/app/edge/history/common/consumption/flat/flat.ts
+++ b/ui/src/app/edge/history/common/consumption/flat/flat.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, EdgeConfig } from '../../../../../shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, EdgeConfig } from "../../../../../shared/shared";
@Component({
- selector: 'consumptionWidget',
- templateUrl: './flat.html',
+ selector: "consumptionWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -17,21 +17,21 @@ export class FlatComponent extends AbstractFlatWidget {
this.evcsComponents = this.config?.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs")
.filter(component =>
- !(component.factoryId === 'Evcs.Cluster.SelfConsumption') &&
- !(component.factoryId === 'Evcs.Cluster.PeakShaving') &&
+ !(component.factoryId === "Evcs.Cluster.SelfConsumption") &&
+ !(component.factoryId === "Evcs.Cluster.PeakShaving") &&
!component.isEnabled === false);
this.consumptionMeterComponents = this.config?.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter")
.filter(component => component.isEnabled && this.config.isTypeConsumptionMetered(component));
- const channels: ChannelAddress[] = [new ChannelAddress('_sum', 'ConsumptionActiveEnergy')];
+ const channels: ChannelAddress[] = [new ChannelAddress("_sum", "ConsumptionActiveEnergy")];
this.evcsComponents.forEach((component) => {
- channels.push(new ChannelAddress(component.id, 'ActiveConsumptionEnergy'));
+ channels.push(new ChannelAddress(component.id, "ActiveConsumptionEnergy"));
});
this.consumptionMeterComponents.forEach((component) => {
- channels.push(new ChannelAddress(component.id, 'ActiveProductionEnergy'));
+ channels.push(new ChannelAddress(component.id, "ActiveProductionEnergy"));
});
@@ -51,10 +51,10 @@ export class FlatComponent extends AbstractFlatWidget {
private getTotalOtherEnergy(currentData: CurrentData): number {
let otherEnergy: number = 0;
this.evcsComponents.forEach(component => {
- otherEnergy += currentData.allComponents[component.id + '/ActiveConsumptionEnergy'] ?? 0;
+ otherEnergy += currentData.allComponents[component.id + "/ActiveConsumptionEnergy"] ?? 0;
});
this.consumptionMeterComponents.forEach(component => {
- otherEnergy += currentData.allComponents[component.id + '/ActiveProductionEnergy'] ?? 0;
+ otherEnergy += currentData.allComponents[component.id + "/ActiveProductionEnergy"] ?? 0;
});
return currentData.allComponents["_sum/ConsumptionActiveEnergy"] - otherEnergy;
}
diff --git a/ui/src/app/edge/history/common/consumption/overview/overview.html b/ui/src/app/edge/history/common/consumption/overview/overview.html
index c7036474b77..02f12138d2e 100644
--- a/ui/src/app/edge/history/common/consumption/overview/overview.html
+++ b/ui/src/app/edge/history/common/consumption/overview/overview.html
@@ -3,4 +3,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/consumption/overview/overview.ts b/ui/src/app/edge/history/common/consumption/overview/overview.ts
index 87fab1299e0..cf75130de35 100644
--- a/ui/src/app/edge/history/common/consumption/overview/overview.ts
+++ b/ui/src/app/edge/history/common/consumption/overview/overview.ts
@@ -1,12 +1,13 @@
-import { Component } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
-import { NavigationOption } from 'src/app/shared/components/footer/subnavigation/footerNavigation';
-import { ChannelAddress, EdgeConfig, Service } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
+import { NavigationOption } from "src/app/shared/components/footer/subnavigation/footerNavigation";
+import { ChannelAddress, EdgeConfig, Service } from "src/app/shared/shared";
@Component({
- templateUrl: './overview.html',
+ templateUrl: "./overview.html",
})
export class OverviewComponent extends AbstractHistoryChartOverview {
@@ -19,6 +20,7 @@ export class OverviewComponent extends AbstractHistoryChartOverview {
protected override route: ActivatedRoute,
public override modalCtrl: ModalController,
private router: Router,
+ private translate: TranslateService,
) {
super(service, route, modalCtrl);
}
@@ -27,15 +29,18 @@ export class OverviewComponent extends AbstractHistoryChartOverview {
this.evcsComponents = this.config?.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs")
.filter(component =>
- !(component.factoryId === 'Evcs.Cluster.SelfConsumption') &&
- !(component.factoryId === 'Evcs.Cluster.PeakShaving') &&
+ !(component.factoryId === "Evcs.Cluster.SelfConsumption") &&
+ !(component.factoryId === "Evcs.Cluster.PeakShaving") &&
!component.isEnabled === false);
this.consumptionMeterComponents = this.config?.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter")
.filter(component => component.isEnabled && this.config.isTypeConsumptionMetered(component));
- this.navigationButtons = [...this.evcsComponents, ...this.consumptionMeterComponents].map(el => (
- { id: el.id, alias: el.alias, callback: () => { this.router.navigate(['./' + el.id], { relativeTo: this.route }); } }
+ const sum: EdgeConfig.Component = this.config.getComponent("_sum");
+ sum.alias = this.translate.instant("General.TOTAL");
+
+ this.navigationButtons = [sum, ...this.evcsComponents, ...this.consumptionMeterComponents].map(el => (
+ { id: el.id, alias: el.alias, callback: () => { this.router.navigate(["./" + el.id], { relativeTo: this.route }); } }
));
return [];
diff --git a/ui/src/app/edge/history/common/energy/chart/channels.spec.ts b/ui/src/app/edge/history/common/energy/chart/channels.spec.ts
index 55694cda21b..2abfaee9aed 100644
--- a/ui/src/app/edge/history/common/energy/chart/channels.spec.ts
+++ b/ui/src/app/edge/history/common/energy/chart/channels.spec.ts
@@ -8,20 +8,36 @@ import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/re
export namespace History {
- export const LINE_CHART_OPTIONS = (period: string, chartType: 'line' | 'bar', options: { [key: string]: { scale: { min: number, max: number; } | null, ticks: { stepSize: number }; }; }): OeChartTester.Dataset.Option => ({
- type: 'option',
+ export const LINE_CHART_OPTIONS = (period: string, chartType: "line" | "bar", options: { [key: string]: { scale: { min: number, max: number; } | null, ticks: { stepSize: number }; }; }): OeChartTester.Dataset.Option => ({
+ type: "option",
options: {
- "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": {}, "line": {} }, "plugins": { "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": '' } }, "tooltip": { "intersect": false, "mode": "index", "callbacks": {} }, "annotation": { annotations: {} } }, "scales": {
+ "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": {}, "line": {} },
+ "plugins": {
+ "colors": {
+ "enabled": false,
+ },
+ "legend": {
+ "display": true, "position": "bottom", "labels": { "color": "" },
+ }, "tooltip": {
+ "intersect": false, "mode": "index", "callbacks": {},
+ },
+ "annotation": {
+ annotations: {},
+ },
+ "datalabels": {
+ display: false,
+ },
+ }, "scales": {
"x": { "stacked": true, "offset": false, "type": "time", "ticks": { "source": "auto", "maxTicksLimit": 31 }, "bounds": "ticks", "adapters": { "date": { "locale": { "code": "de", "formatLong": {}, "localize": {}, "match": {}, "options": { "weekStartsOn": 1, "firstWeekContainsDate": 4 } } } }, "time": { "unit": period as TimeUnit, "displayFormats": { "datetime": "yyyy-MM-dd HH:mm:ss", "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:00", "day": "dd", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "yyyy" } } },
"left": {
- ...options["left"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kW", "display": true, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
- "ticks": { ...options["left"]?.ticks, "color": '', "padding": 5, "maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS },
+ ...options["left"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kW", "display": true, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
+ "ticks": { ...options["left"]?.ticks, "color": "", "padding": 5, "maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS },
},
"right": {
- ...options["right"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": true, "max": 100, "min": 0, "type": "linear", "title": { "text": "%", "display": true, "font": { "size": 11 }, "padding": 5 }, "position": "right", "grid": { "display": false },
+ ...options["right"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "beginAtZero": true, "max": 100, "min": 0, "type": "linear", "title": { "text": "%", "display": true, "font": { "size": 11 }, "padding": 5 }, "position": "right", "grid": { "display": false },
"ticks": {
...options["right"]?.ticks,
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
@@ -29,16 +45,32 @@ export namespace History {
},
},
});
- export const BAR_CHART_OPTIONS = (period: string, chartType: 'line' | 'bar', options: { [key: string]: { scale: { min?: number, max?: number; }, ticks: { stepSize?: number; }; }; }): OeChartTester.Dataset.Option => ({
- type: 'option',
+ export const BAR_CHART_OPTIONS = (period: string, chartType: "line" | "bar", options: { [key: string]: { scale: { min?: number, max?: number; }, ticks: { stepSize?: number; }; }; }): OeChartTester.Dataset.Option => ({
+ type: "option",
options: {
- "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": { "barPercentage": 1 }, "line": {} }, "plugins": { "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": '' } }, "tooltip": { "intersect": false, "mode": "x", "callbacks": {} }, "annotation": { annotations: {} } }, "scales": {
+ "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": { "barPercentage": 1 }, "line": {} },
+ "plugins": {
+ "colors": {
+ "enabled": false,
+ },
+ "legend": {
+ "display": true, "position": "bottom", "labels": { "color": "" },
+ }, "tooltip": {
+ "intersect": false, "mode": "x", "callbacks": {},
+ },
+ "annotation": {
+ annotations: {},
+ },
+ "datalabels": {
+ display: false,
+ },
+ }, "scales": {
"x": { "stacked": true, "offset": true, "type": "time", "ticks": { "source": "auto", "maxTicksLimit": 31 }, "bounds": "ticks", "adapters": { "date": { "locale": { "code": "de", "formatLong": {}, "localize": {}, "match": {}, "options": { "weekStartsOn": 1, "firstWeekContainsDate": 4 } } } }, "time": { "unit": period as TimeUnit, "displayFormats": { "datetime": "yyyy-MM-dd HH:mm:ss", "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:00", "day": "dd", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "yyyy" } } },
"left": {
- ...options["left"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kWh", "display": true, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
+ ...options["left"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kWh", "display": true, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
"ticks": {
...options["left"]?.ticks,
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
@@ -55,17 +87,17 @@ export namespace History {
export const DAY: OeTester.Types.Channels = ({
energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
data: {
- '_sum/GridBuyActiveEnergy': 938,
- '_sum/ConsumptionActiveEnergy': 24364,
- '_sum/EssDcChargeEnergy': 15766,
- '_sum/EssDcDischargeEnergy': 7209,
- '_sum/GridSellActiveEnergy': 15615,
- '_sum/ProductionActiveEnergy': 47597,
+ "_sum/GridBuyActiveEnergy": 938,
+ "_sum/ConsumptionActiveEnergy": 24364,
+ "_sum/EssDcChargeEnergy": 15766,
+ "_sum/EssDcDischargeEnergy": 7209,
+ "_sum/GridSellActiveEnergy": 15615,
+ "_sum/ProductionActiveEnergy": 47597,
},
}),
dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", {
data: {
- '_sum/ConsumptionActivePower': [null,
+ "_sum/ConsumptionActivePower": [null,
null,
null,
112,
@@ -353,9 +385,9 @@ export namespace History {
null,
null,
null],
- '_sum/GridActivePower': [null, null, null, 31, 18, -6, 20, 16, 15, 14, 9, 20, 25, 25, 25, 21, 12, 9, 10, 11, 5, 3, -4, 15, 18, 23, -4, 0, 0, 2, 2, 3, 15, 8, 22, 27, 16, 3, 2, -5, 28, 27, 17, 1, 0, -1, -2, null, null, null, null, 11, 10, 4, 6, 7, 18, 8, 12, 9, 4, 13, 15, 12, 0, -1, -4, 2, -4, 5, 1, 30, 62, -5, -13, -6, -4, -17, -15, -17, -11, 15, 5, 4, 7, -29, -15, -13, -19, -14, -7, -16, 5, -18, -22, 0, -12, -11, -7, 21, -33, -7, -3, -4, -11, 3, -38, 4, 0, -19, 32, -16, -14, -18, 0, -1119, -3453, -3608, -3941, -4392, -3786, -4805, -4688, -3095, -2320, -2851, -3058, -4044, -5011, -2789, -6530, -5029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/GridActivePower": [null, null, null, 31, 18, -6, 20, 16, 15, 14, 9, 20, 25, 25, 25, 21, 12, 9, 10, 11, 5, 3, -4, 15, 18, 23, -4, 0, 0, 2, 2, 3, 15, 8, 22, 27, 16, 3, 2, -5, 28, 27, 17, 1, 0, -1, -2, null, null, null, null, 11, 10, 4, 6, 7, 18, 8, 12, 9, 4, 13, 15, 12, 0, -1, -4, 2, -4, 5, 1, 30, 62, -5, -13, -6, -4, -17, -15, -17, -11, 15, 5, 4, 7, -29, -15, -13, -19, -14, -7, -16, 5, -18, -22, 0, -12, -11, -7, 21, -33, -7, -3, -4, -11, 3, -38, 4, 0, -19, 32, -16, -14, -18, 0, -1119, -3453, -3608, -3941, -4392, -3786, -4805, -4688, -3095, -2320, -2851, -3058, -4044, -5011, -2789, -6530, -5029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
// 'GridSell': [6476, 6488, -1000, 0],
- '_sum/EssSoc': [null,
+ "_sum/EssSoc": [null,
null,
null,
80,
@@ -643,7 +675,7 @@ export namespace History {
null,
null,
null],
- '_sum/EssActivePower': [null,
+ "_sum/EssActivePower": [null,
null,
null,
81,
@@ -931,7 +963,7 @@ export namespace History {
null,
null,
null],
- '_sum/ProductionActivePower': [null,
+ "_sum/ProductionActivePower": [null,
null,
null,
0,
@@ -1219,7 +1251,7 @@ export namespace History {
null,
null,
null],
- '_sum/ProductionDcActualPower': [null,
+ "_sum/ProductionDcActualPower": [null,
null,
null,
0,
@@ -1807,17 +1839,17 @@ export namespace History {
export const WEEK: OeTester.Types.Channels = {
energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
data: {
- '_sum/GridBuyActiveEnergy': 2368,
- '_sum/ConsumptionActiveEnergy': 76690,
- '_sum/EssDcChargeEnergy': 38671,
- '_sum/EssDcDischargeEnergy': 31809,
- '_sum/GridSellActiveEnergy': 119692,
- '_sum/ProductionActiveEnergy': 200875,
+ "_sum/GridBuyActiveEnergy": 2368,
+ "_sum/ConsumptionActiveEnergy": 76690,
+ "_sum/EssDcChargeEnergy": 38671,
+ "_sum/EssDcDischargeEnergy": 31809,
+ "_sum/GridSellActiveEnergy": 119692,
+ "_sum/ProductionActiveEnergy": 200875,
},
}),
dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", {
data: {
- '_sum/ConsumptionActivePower': [160.22222222222223,
+ "_sum/ConsumptionActivePower": [160.22222222222223,
165.16666666666666,
149.91666666666666,
242.45454545454547,
@@ -1985,7 +2017,7 @@ export namespace History {
444.625,
569.6,
131.5],
- '_sum/GridActivePower': [-2.3333333333333335,
+ "_sum/GridActivePower": [-2.3333333333333335,
11.916666666666666,
16.333333333333332,
6.090909090909091,
@@ -2154,7 +2186,7 @@ export namespace History {
-9,
-18.875],
// 'GridSell': [6476, 6488, -1000, 0],
- '_sum/EssSoc': [76.11111111111111,
+ "_sum/EssSoc": [76.11111111111111,
74.83333333333333,
73.75,
72.54545454545455,
@@ -2322,7 +2354,7 @@ export namespace History {
85.875,
83.7,
80.5],
- '_sum/EssActivePower': [162.55555555555554,
+ "_sum/EssActivePower": [162.55555555555554,
153.08333333333334,
133.58333333333334,
236.45454545454547,
@@ -2490,7 +2522,7 @@ export namespace History {
439.375,
578.7,
150.375],
- '_sum/ProductionActivePower': [0,
+ "_sum/ProductionActivePower": [0,
0,
0,
0,
@@ -2658,7 +2690,7 @@ export namespace History {
61.5,
0.6,
0],
- '_sum/ProductionDcActualPower': [0,
+ "_sum/ProductionDcActualPower": [0,
0,
0,
0,
@@ -3005,18 +3037,18 @@ export namespace History {
export const MONTH: OeTester.Types.Channels = {
energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
data: {
- '_sum/GridBuyActiveEnergy': 773000,
- '_sum/ConsumptionActiveEnergy': 9976102,
- '_sum/EssDcChargeEnergy': 3944328,
- '_sum/EssDcDischargeEnergy': 3394430,
- '_sum/GridSellActiveEnergy': 12738000,
- '_sum/ProductionActiveEnergy': 22491000,
+ "_sum/GridBuyActiveEnergy": 773000,
+ "_sum/ConsumptionActiveEnergy": 9976102,
+ "_sum/EssDcChargeEnergy": 3944328,
+ "_sum/EssDcDischargeEnergy": 3394430,
+ "_sum/GridSellActiveEnergy": 12738000,
+ "_sum/ProductionActiveEnergy": 22491000,
},
}),
energyPerPeriodChannelWithValues:
new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", {
data: {
- '_sum/ConsumptionActiveEnergy': [320342,
+ "_sum/ConsumptionActiveEnergy": [320342,
346615,
341433,
333054,
@@ -3247,18 +3279,18 @@ export namespace History {
export const YEAR: OeTester.Types.Channels = {
energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
data: {
- '_sum/GridBuyActiveEnergy': 23209000,
- '_sum/ConsumptionActiveEnergy': 58573394,
- '_sum/EssDcChargeEnergy': 15296815,
- '_sum/EssDcDischargeEnergy': 12898209,
- '_sum/GridSellActiveEnergy': 30703000,
- '_sum/ProductionActiveEnergy': 68466000,
+ "_sum/GridBuyActiveEnergy": 23209000,
+ "_sum/ConsumptionActiveEnergy": 58573394,
+ "_sum/EssDcChargeEnergy": 15296815,
+ "_sum/EssDcDischargeEnergy": 12898209,
+ "_sum/GridSellActiveEnergy": 30703000,
+ "_sum/ProductionActiveEnergy": 68466000,
},
}),
energyPerPeriodChannelWithValues:
new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", {
data: {
- '_sum/ConsumptionActiveEnergy': [11634885,
+ "_sum/ConsumptionActiveEnergy": [11634885,
8207927,
8976354,
8311835,
diff --git a/ui/src/app/edge/history/common/energy/chart/chart.constants.spec.ts b/ui/src/app/edge/history/common/energy/chart/chart.constants.spec.ts
index b5d7a8fdae7..0b7d24e89a5 100644
--- a/ui/src/app/edge/history/common/energy/chart/chart.constants.spec.ts
+++ b/ui/src/app/edge/history/common/energy/chart/chart.constants.spec.ts
@@ -1,12 +1,11 @@
import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
import { OeTester } from "src/app/shared/components/shared/testing/common";
-import { EdgeConfig } from "src/app/shared/shared";
import { removeFunctions, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
-
+import { EdgeConfig } from "src/app/shared/shared";
import { OeChartTester } from "../../../../../shared/components/shared/testing/tester";
import { ChartComponent } from "./chart";
-export function expectView(config: EdgeConfig, testContext: TestContext, chartType: 'line' | 'bar', channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+export function expectView(config: EdgeConfig, testContext: TestContext, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
expect(removeFunctions(OeChartTester
.apply(ChartComponent
.getChartData(DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), chartType, testContext.translate), chartType, channels, testContext, config)))
diff --git a/ui/src/app/edge/history/common/energy/chart/chart.spec.ts b/ui/src/app/edge/history/common/energy/chart/chart.spec.ts
index 312baba765b..cd1695a6c81 100644
--- a/ui/src/app/edge/history/common/energy/chart/chart.spec.ts
+++ b/ui/src/app/edge/history/common/energy/chart/chart.spec.ts
@@ -5,7 +5,7 @@ import { sharedSetup, TestContext } from "src/app/shared/components/shared/testi
import { DATA, expectView, LABELS } from "./chart.constants.spec";
-describe('History EnergyMonitor', () => {
+describe("History EnergyMonitor", () => {
const defaultEMS = DummyConfig.from(
DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"),
DummyConfig.Component.ESS_GENERIC_MANAGEDSYMMETRIC("ess0"),
@@ -17,24 +17,24 @@ describe('History EnergyMonitor', () => {
TEST_CONTEXT = await sharedSetup(),
);
- it('getChartData()', () => {
+ it("getChartData()", () => {
{
// Line - Chart
- expectView(defaultEMS, TEST_CONTEXT, 'line', History.DAY,
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
{
datasets: {
data: [
- DATA('Erzeugung: 47,6 kWh', [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, 0.002, 0.03, 0.027, 0.03, 0.039, 0.074, 0.093, 0.12, 0.12, 0.116, 0.106, 0.099, 0.101, 0.113, 0.131, 0.141, 0.131, 0.132, 0.105, 0.139, 0.165, 0.195, 0.255, 0.385, 0.458, 0.402, 0.428, 0.56, 0.615, 0.715, 0.7, 0.807, 0.796, 0.79, 0.813, 0.854, 0.832, 1.052, 1.427, 1.481, 1.765, 1.291, 1.625, 2.138, 1.686, 1.367, 1.562, 1.271, 1.176, 2.542, 2.91, 2.616, 2.193, 2.039, 2.376, 2.919, 3.862, 3.793, 4.309, 3.932, 4.126, 4.406, 4.757, 4.728, 5.231, 4.4, 4.169, 5.232, 5.77, 5.3, 6.327, 6.636, 4.573, 3.678, 3.422, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Beladung: 15,8 kWh', [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.065, 0.063, 0.185, 0.262, 0.09500000000000003, 0.265, 0.48300000000000004, 0.537, 0.639, 0, 0, 0, 0, 0.18799999999999994, 0.701, 0.586, 0.881, 1.204, 1.282, 1.547, 0.988, 1.353, 1.94, 1.564, 1.2469999999999999, 1.4140000000000001, 1.0479999999999998, 0.2499999999999999, 1.9089999999999998, 2.7, 2.3810000000000002, 1.861, 1.729, 1.859, 1.6680000000000001, 3.225, 2.763, 3.847, 3.59, 2.3530000000000006, 4.143, 4.478999999999999, 4.382, 2.2329999999999997, 0.7170000000000005, 0.07699999999999996, 0.03200000000000003, 0.06099999999999994, 0.027000000000000135, 0.07099999999999973, 0.057000000000000384, 0.012000000000000455, 0.0259999999999998, 0.04800000000000004, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Entladung: 7,2 kWh', [null, null, null, 0.081, 0.244, 0.398, 0.221, 0.214, 0.214, 0.214, 0.308, 0.204, 0.108, 0.109, 0.108, 0.171, 0.197, 0.081, 0.084, 0.085, 0.16, 0.295, 0.188, 0.167, 0.165, 0.175, 0.337, 0.183, 0.093, 0.095, 0.095, 0.194, 0.251, 0.169, 0.122, 0.113, 0.156, 0.301, 0.303, 0.242, 0.204, 0.2, 0.266, 0.343, 0.135, 0.097, 0.096, null, null, null, null, 0.089, 0.089, 0.10900000000000001, 0.265, 0.20199999999999999, 0.175, 0.218, 0.178, 0.324, 0.331, 0.16100000000000003, 0.119, 0.11299999999999999, 0.136, 0.26, 0.10500000000000001, 0.066, 0.05099999999999999, 0.05600000000000001, 0.14100000000000001, 0.043999999999999984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17200000000000004, 0.30799999999999994, 0.27, 0.2589999999999999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Einspeisung: 15,6 kWh', [null, null, null, 0, 0, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0, 0, 0, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0.001, 0.002, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.004, 0, 0.004, 0, 0, 0, 0, 0.005, 0.013, 0.006, 0.004, 0.017, 0.015, 0.017, 0.011, 0, 0, 0, 0, 0.029, 0.015, 0.013, 0.019, 0.014, 0.007, 0.016, 0, 0.018, 0.022, 0, 0.012, 0.011, 0.007, 0, 0.033, 0.007, 0.003, 0.004, 0.011, 0, 0.038, 0, 0, 0.019, 0, 0.016, 0.014, 0.018, 0, 1.119, 3.453, 3.608, 3.941, 4.392, 3.786, 4.805, 4.688, 3.095, 2.32, 2.851, 3.058, 4.044, 5.011, 2.789, 6.53, 5.029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Bezug: 0,9 kWh', [null, null, null, 0.031, 0.018, 0, 0.02, 0.016, 0.015, 0.014, 0.009, 0.02, 0.025, 0.025, 0.025, 0.021, 0.012, 0.009, 0.01, 0.011, 0.005, 0.003, 0, 0.015, 0.018, 0.023, 0, 0, 0, 0.002, 0.002, 0.003, 0.015, 0.008, 0.022, 0.027, 0.016, 0.003, 0.002, 0, 0.028, 0.027, 0.017, 0.001, 0, 0, 0, null, null, null, null, 0.011, 0.01, 0.004, 0.006, 0.007, 0.018, 0.008, 0.012, 0.009, 0.004, 0.013, 0.015, 0.012, 0, 0, 0, 0.002, 0, 0.005, 0.001, 0.03, 0.062, 0, 0, 0, 0, 0, 0, 0, 0, 0.015, 0.005, 0.004, 0.007, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0, 0.021, 0, 0, 0, 0, 0, 0.003, 0, 0.004, 0, 0, 0.032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Verbrauch: 24,4 kWh', [null, null, null, 0.112, 0.262, 0.392, 0.24, 0.23, 0.229, 0.227, 0.317, 0.224, 0.133, 0.135, 0.133, 0.192, 0.209, 0.09, 0.095, 0.096, 0.164, 0.297, 0.184, 0.182, 0.183, 0.198, 0.333, 0.183, 0.093, 0.097, 0.098, 0.197, 0.266, 0.177, 0.144, 0.14, 0.173, 0.304, 0.305, 0.237, 0.232, 0.227, 0.283, 0.344, 0.135, 0.096, 0.095, null, null, null, null, 0.102, 0.129, 0.14, 0.301, 0.248, 0.267, 0.319, 0.31, 0.452, 0.451, 0.28, 0.234, 0.226, 0.249, 0.39, 0.242, 0.199, 0.179, 0.166, 0.28, 0.239, 0.192, 0.187, 0.187, 0.19, 0.303, 0.146, 0.062, 0.062, 0.064, 0.887, 1.119, 1.07, 1.057, 0.596, 0.138, 0.233, 0.152, 0.209, 0.192, 0.202, 0.308, 0.254, 0.175, 0.122, 0.108, 0.137, 0.216, 0.947, 0.599, 0.203, 0.232, 0.328, 0.299, 0.52, 1.213, 0.641, 1.03, 0.442, 0.374, 1.758, 0.249, 0.26, 0.346, 1.879, 0.23, 0.484, 1.26, 1.317, 1.488, 1.451, 1.892, 1.466, 1.332, 0.523, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Ladezustand', History.DAY.dataChannelWithValues.result.data['_sum/EssSoc']),
+ DATA("Erzeugung: 47,6 kWh", [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, 0.002, 0.03, 0.027, 0.03, 0.039, 0.074, 0.093, 0.12, 0.12, 0.116, 0.106, 0.099, 0.101, 0.113, 0.131, 0.141, 0.131, 0.132, 0.105, 0.139, 0.165, 0.195, 0.255, 0.385, 0.458, 0.402, 0.428, 0.56, 0.615, 0.715, 0.7, 0.807, 0.796, 0.79, 0.813, 0.854, 0.832, 1.052, 1.427, 1.481, 1.765, 1.291, 1.625, 2.138, 1.686, 1.367, 1.562, 1.271, 1.176, 2.542, 2.91, 2.616, 2.193, 2.039, 2.376, 2.919, 3.862, 3.793, 4.309, 3.932, 4.126, 4.406, 4.757, 4.728, 5.231, 4.4, 4.169, 5.232, 5.77, 5.3, 6.327, 6.636, 4.573, 3.678, 3.422, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Beladung: 15,8 kWh", [null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.065, 0.063, 0.185, 0.262, 0.09500000000000003, 0.265, 0.48300000000000004, 0.537, 0.639, 0, 0, 0, 0, 0.18799999999999994, 0.701, 0.586, 0.881, 1.204, 1.282, 1.547, 0.988, 1.353, 1.94, 1.564, 1.2469999999999999, 1.4140000000000001, 1.0479999999999998, 0.2499999999999999, 1.9089999999999998, 2.7, 2.3810000000000002, 1.861, 1.729, 1.859, 1.6680000000000001, 3.225, 2.763, 3.847, 3.59, 2.3530000000000006, 4.143, 4.478999999999999, 4.382, 2.2329999999999997, 0.7170000000000005, 0.07699999999999996, 0.03200000000000003, 0.06099999999999994, 0.027000000000000135, 0.07099999999999973, 0.057000000000000384, 0.012000000000000455, 0.0259999999999998, 0.04800000000000004, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Entladung: 7,2 kWh", [null, null, null, 0.081, 0.244, 0.398, 0.221, 0.214, 0.214, 0.214, 0.308, 0.204, 0.108, 0.109, 0.108, 0.171, 0.197, 0.081, 0.084, 0.085, 0.16, 0.295, 0.188, 0.167, 0.165, 0.175, 0.337, 0.183, 0.093, 0.095, 0.095, 0.194, 0.251, 0.169, 0.122, 0.113, 0.156, 0.301, 0.303, 0.242, 0.204, 0.2, 0.266, 0.343, 0.135, 0.097, 0.096, null, null, null, null, 0.089, 0.089, 0.10900000000000001, 0.265, 0.20199999999999999, 0.175, 0.218, 0.178, 0.324, 0.331, 0.16100000000000003, 0.119, 0.11299999999999999, 0.136, 0.26, 0.10500000000000001, 0.066, 0.05099999999999999, 0.05600000000000001, 0.14100000000000001, 0.043999999999999984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17200000000000004, 0.30799999999999994, 0.27, 0.2589999999999999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Einspeisung: 15,6 kWh", [null, null, null, 0, 0, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0, 0, 0, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0.001, 0.002, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.004, 0, 0.004, 0, 0, 0, 0, 0.005, 0.013, 0.006, 0.004, 0.017, 0.015, 0.017, 0.011, 0, 0, 0, 0, 0.029, 0.015, 0.013, 0.019, 0.014, 0.007, 0.016, 0, 0.018, 0.022, 0, 0.012, 0.011, 0.007, 0, 0.033, 0.007, 0.003, 0.004, 0.011, 0, 0.038, 0, 0, 0.019, 0, 0.016, 0.014, 0.018, 0, 1.119, 3.453, 3.608, 3.941, 4.392, 3.786, 4.805, 4.688, 3.095, 2.32, 2.851, 3.058, 4.044, 5.011, 2.789, 6.53, 5.029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Bezug: 0,9 kWh", [null, null, null, 0.031, 0.018, 0, 0.02, 0.016, 0.015, 0.014, 0.009, 0.02, 0.025, 0.025, 0.025, 0.021, 0.012, 0.009, 0.01, 0.011, 0.005, 0.003, 0, 0.015, 0.018, 0.023, 0, 0, 0, 0.002, 0.002, 0.003, 0.015, 0.008, 0.022, 0.027, 0.016, 0.003, 0.002, 0, 0.028, 0.027, 0.017, 0.001, 0, 0, 0, null, null, null, null, 0.011, 0.01, 0.004, 0.006, 0.007, 0.018, 0.008, 0.012, 0.009, 0.004, 0.013, 0.015, 0.012, 0, 0, 0, 0.002, 0, 0.005, 0.001, 0.03, 0.062, 0, 0, 0, 0, 0, 0, 0, 0, 0.015, 0.005, 0.004, 0.007, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0, 0.021, 0, 0, 0, 0, 0, 0.003, 0, 0.004, 0, 0, 0.032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Verbrauch: 24,4 kWh", [null, null, null, 0.112, 0.262, 0.392, 0.24, 0.23, 0.229, 0.227, 0.317, 0.224, 0.133, 0.135, 0.133, 0.192, 0.209, 0.09, 0.095, 0.096, 0.164, 0.297, 0.184, 0.182, 0.183, 0.198, 0.333, 0.183, 0.093, 0.097, 0.098, 0.197, 0.266, 0.177, 0.144, 0.14, 0.173, 0.304, 0.305, 0.237, 0.232, 0.227, 0.283, 0.344, 0.135, 0.096, 0.095, null, null, null, null, 0.102, 0.129, 0.14, 0.301, 0.248, 0.267, 0.319, 0.31, 0.452, 0.451, 0.28, 0.234, 0.226, 0.249, 0.39, 0.242, 0.199, 0.179, 0.166, 0.28, 0.239, 0.192, 0.187, 0.187, 0.19, 0.303, 0.146, 0.062, 0.062, 0.064, 0.887, 1.119, 1.07, 1.057, 0.596, 0.138, 0.233, 0.152, 0.209, 0.192, 0.202, 0.308, 0.254, 0.175, 0.122, 0.108, 0.137, 0.216, 0.947, 0.599, 0.203, 0.232, 0.328, 0.299, 0.52, 1.213, 0.641, 1.03, 0.442, 0.374, 1.758, 0.249, 0.26, 0.346, 1.879, 0.23, 0.484, 1.26, 1.317, 1.488, 1.451, 1.892, 1.466, 1.332, 0.523, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Ladezustand", History.DAY.dataChannelWithValues.result.data["_sum/EssSoc"]),
],
labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
- options: History.LINE_CHART_OPTIONS('hour', 'line', {
- ['right']: { ticks: { stepSize: 20 }, scale: null },
+ options: History.LINE_CHART_OPTIONS("hour", "line", {
+ ["right"]: { ticks: { stepSize: 20 }, scale: null },
}),
},
});
@@ -42,78 +42,78 @@ describe('History EnergyMonitor', () => {
{
// Line-Chart
- expectView(defaultEMS, TEST_CONTEXT, 'line', History.WEEK,
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.WEEK,
{
datasets: {
data: [
- DATA('Erzeugung: 200,9 kWh', [0, 0, 0, 0, 0.06877777777777777, 0.10641666666666667, 0.24808333333333335, 0.9343333333333333, 2.7069166666666664, 4.60225, 6.1075, 7.152166666666667, 7.8105, 7.919833333333333, 7.5575, 5.898916666666667, 3.4225, 1.20825, 0.6315833333333334, 0.4348333333333333, 0.11625, 0.0555, 0, 0, 0, 0, 0, 0, 0.05566666666666666, 0.11616666666666667, 0.41533333333333333, 0.80975, 1.3233333333333333, 1.5246666666666668, 4.180416666666667, 2.5433333333333334, 2.1981666666666664, 4.257916666666667, 5.337583333333333, 3.255, 2.7370833333333335, 1.9298333333333333, 1.0460833333333333, 0.5075, 0.12633333333333333, 0.0575, 0, 0, 0, 0, 0, 0, 0.03266666666666666, 0.08233333333333333, 0.3933333333333333, 1.09875, 1.88925, 4.037166666666667, 6.144166666666667, 7.2335, 7.912333333333333, 7.1735, 7.83025, 6.541166666666667, 3.7155, 1.372, 0.4713333333333333, 0.29875, 0.12891666666666665, 0.0605, 0.0014166666666666668, 0, 0, 0, 0, 0, 0.07055555555555555, 0.126, 0.22975, 0.9369166666666666, 2.7914166666666667, 4.741666666666667, 6.264666666666667, 7.398416666666667, 7.854166666666667, 8.1385, 7.7740833333333335, 6.136583333333333, 3.59375, 0.9946666666666666, 0.39208333333333334, 0.3069090909090909, 0.12022222222222223, 0.0585, 0.00008333333333333333, 0, 0, 0, 0, 0, 0.04644444444444444, 0.123, 0.47733333333333333, 1.2674166666666666, 2.0323333333333333, 2.60675, 2.39825, 1.2404166666666667, 0.7430833333333333, 0.72275, 0.706, 2.8409166666666663, 3.1284166666666664, 1.23975, 0.7388333333333333, 0.3690833333333333, 0.11475, 0.05725, 0, 0, 0, 0, 0, 0, 0.03622222222222222, 0.11033333333333332, 0.41425, 1.2955833333333333, 2.0244166666666668, 1.6163333333333332, 1.624, 5.705, 4.2615, 2.9964166666666667, 4.293333333333333, 4.474083333333333, 2.6373333333333333, 0.5760833333333334, 0.7170833333333334, 0.3575, 0.16566666666666666, 0.061, 0, 0, 0, 0, 0, 0, 0.04122222222222222, 0.09633333333333333, 0.18325, 0.4275, 1.8598181818181818, 3.429, 1.2262857142857142, 2.923, 4.695, 4.4568, 5.333916666666667, 4.859545454545455, 2.6625, 2.284, 0.7131666666666666, 0.4491, 0.1561, 0.0615, 0.0006, 0]),
- DATA('Beladung: 38,7 kWh', [0, 0, 0, 0, 0, 0, 0.053916666666666696, 0.7623333333333333, 2.138083333333333, 2.88375, 0.040750000000000064, 0.05616666666666692, 0.06824999999999992, 0.05333333333333279, 0.052833333333333066, 0.06191666666666684, 0.05941666666666645, 0.06133333333333324, 0.041166666666666796, 0.27449999999999997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03533333333333333, 0.07091666666666663, 0.9209166666666666, 0.1278333333333337, 3.353, 0.12391666666666712, 0.05908333333333271, 0.05958333333333332, 0.039833333333333165, 0.0448333333333335, 0.05183333333333362, 0.06066666666666665, 0, 0.08024999999999993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05283333333333329, 0.24774999999999991, 1.4625000000000001, 2.159, 0.05708333333333382, 0.05458333333333343, 0.052666666666666195, 0.06583333333333297, 0.053749999999999964, 0.057000000000000384, 0.2017500000000001, 0, 0.23058333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.041166666666667, 3.0615000000000006, 0.07808333333333373, 0.0442499999999999, 0.06674999999999986, 0.051916666666667055, 0.04716666666666658, 0.054250000000000576, 0.049249999999999794, 0.051416666666666555, 0.0595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.32333333333333336, 0.589, 1.2433333333333332, 2.029166666666667, 0.4844166666666667, 0, 0, 0, 0.03066666666666662, 2.34975, 0.07308333333333294, 0.06908333333333316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2748333333333334, 1.13575, 0, 0.8175833333333332, 0.6326666666666667, 5.248833333333334, 1.257083333333333, 0, 0.8414166666666665, 0, 0.27624999999999966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2515, 0.5249090909090908, 2.5081666666666664, 0.6641428571428571, 2.0005, 2.226888888888889, 1.0726000000000004, 0.020500000000000185, 0.12281818181818238, 0.04666666666666641, 0.04499999999999993, 0, 0.2635, 0, 0, 0, 0]),
- DATA('Entladung: 31,8 kWh', [0.16255555555555554, 0.15308333333333335, 0.13358333333333333, 0.23645454545454547, 0.16444444444444445, 0.15000000000000002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8418333333333334, 0.40008333333333335, 0.3143333333333333, 0.87825, 0.15983333333333336, 0.15433333333333335, 0.12808333333333335, 0.13336363636363638, 0.12544444444444444, 0.10674999999999998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.011833333333333584, 0, 0.6314166666666667, 0.3428333333333333, 0.1775, 0.24691666666666665, 0.32225, 0.20191666666666666, 0.17116666666666666, 0.15227272727272728, 0.13366666666666666, 0.1650833333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17574999999999985, 0, 0.307, 0.30425, 0.8374166666666666, 0.5858333333333334, 0.233, 0.12245454545454545, 0.19341666666666665, 0.16675, 0.16018181818181818, 0.1677777777777778, 0.07708333333333334, 0.2829166666666666, 0.3085000000000002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3293636363636363, 0.3361111111111111, 0.9013333333333333, 0.21000000000000002, 0.6339166666666667, 0.11658333333333333, 0.17658333333333334, 0.13425, 0.19072727272727272, 0.1686666666666667, 0.10341666666666666, 0, 0, 0, 0, 0, 0.13316666666666643, 1.2479166666666668, 0.5, 0, 0, 0, 0, 0.2433333333333333, 2.1755833333333334, 1.2095833333333335, 2.0555000000000003, 0.67025, 0.17266666666666666, 0.16391666666666665, 0.13858333333333334, 0.07441666666666667, 0.20381818181818182, 0.18944444444444444, 0.3955, 0, 0, 0.049249999999999794, 0, 0, 0, 0, 0.6410833333333334, 0, 0.3483333333333345, 0, 1.5750000000000002, 0.34658333333333335, 0.8439166666666669, 0.42374999999999996, 1.0724166666666668, 0.33325, 0.3395, 0.6474166666666666, 0.4916666666666667, 0.18208333333333335, 0.13436363636363638, 0.15433333333333332, 0.12583333333333332, 0.019250000000000017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3953333333333334, 0, 0.5301, 0.377875, 0.5781, 0.150375]),
- DATA('Einspeisung: 119,7 kWh', [0.0023333333333333335, 0, 0, 0, 0, 0, 0, 0.014166666666666666, 0.02808333333333333, 0.9546666666666667, 4.150583333333333, 6.431333333333333, 5.737583333333333, 5.6714166666666666, 5.873333333333333, 5.049083333333333, 3.122, 1.0374166666666667, 0.22808333333333333, 0.02, 0, 0, 0, 0.008333333333333333, 0.0030833333333333333, 0.008333333333333333, 0, 0.007727272727272728, 0, 0, 0.00275, 0.013833333333333335, 0.017416666666666667, 0.006083333333333333, 0.5646666666666667, 2.2251666666666665, 2.03375, 3.99725, 4.990083333333333, 3.0128333333333335, 2.4844166666666667, 1.378, 0.65975, 0, 0.001, 0.006916666666666667, 0.008166666666666666, 0, 0, 0, 0, 0, 0, 0, 0.004083333333333333, 0.010583333333333333, 0.011166666666666667, 1.261, 5.308833333333333, 6.604, 6.321166666666667, 6.488333333333333, 6.78425, 6.052083333333333, 2.5839166666666666, 0.529, 0.01616666666666667, 0.0055, 0, 0.0006666666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0024166666666666664, 0.0125, 0.7065, 5.835416666666667, 4.77025, 6.03925, 6.8445833333333335, 5.370333333333333, 4.490166666666667, 2.3506666666666667, 0.7650833333333333, 0.08583333333333333, 0.011454545454545455, 0, 0, 0.005666666666666667, 0, 0, 0, 0, 0, 0, 0, 0.0033333333333333335, 0.004083333333333333, 0.02033333333333333, 0.02316666666666667, 1.4106666666666667, 0.8588333333333333, 0.0015833333333333333, 0.006583333333333333, 0.010083333333333335, 0.3410833333333333, 2.9290833333333337, 1.1175833333333332, 0.48583333333333334, 0, 0, 0, 0.0006666666666666666, 0.017916666666666668, 0.004, 0, 0, 0.001, 0, 0, 0, 0.02358333333333333, 0.006416666666666667, 0.008166666666666666, 0.0031666666666666666, 0.009916666666666666, 2.7254166666666664, 1.83725, 2.63225, 2.2170833333333335, 0.529, 0, 0, 0, 0, 0, 0.0003333333333333333, 0, 0, 0.011416666666666665, 0.011083333333333334, 0, 0, 0, 0, 0.008333333333333333, 0.008818181818181819, 0.015333333333333334, 0.018857142857142857, 0.024833333333333332, 0.010888888888888889, 2.2174, 3.9214166666666666, 1.6248181818181817, 1.937, 1.789, 0.0195, 0.0143, 0, 0, 0.009, 0.018875]),
- DATA('Bezug: 2,4 kWh', [0, 0.011916666666666666, 0.01633333333333333, 0.00609090909090909, 0.015333333333333334, 0.011666666666666665, 0.0024166666666666664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02425, 0.004416666666666667, 0.0035833333333333333, 0, 0, 0, 0.04441666666666667, 0, 0.013111111111111112, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0011666666666666668, 0, 0, 0, 0.0015833333333333333, 0.013333333333333334, 0.020416666666666666, 0.01125, 0.019727272727272725, 0.012444444444444445, 0.009583333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.007666666666666667, 0, 0.0023333333333333335, 0.0125, 0.01609090909090909, 0.02016666666666667, 0.014083333333333333, 0.006363636363636363, 0.01955555555555556, 0.04841666666666666, 0.011166666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.014222222222222221, 0.00225, 0, 0.0036666666666666666, 0.032916666666666664, 0.014666666666666666, 0.0135, 0.017363636363636362, 0.013333333333333334, 0.022083333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0009166666666666666, 0, 0.0021666666666666666, 0, 0, 0, 0.0005, 0.04841666666666666, 0, 0.005555555555555556, 0.02716666666666667, 0.017333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0023333333333333335, 0.008333333333333333, 0.003, 0.015916666666666666, 0.00325, 0, 0.004333333333333333, 0.001, 0, 0, 0.019545454545454546, 0.0017777777777777776, 0.006416666666666667, 0.017666666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0058, 0.005625, 0, 0]),
- DATA('Verbrauch: 76,7 kWh', [0.16022222222222224, 0.16516666666666666, 0.14991666666666667, 0.24245454545454548, 0.24866666666666665, 0.2679166666666667, 0.19658333333333333, 0.15775, 0.5408333333333334, 0.7640833333333333, 1.9163333333333332, 0.6645833333333334, 2.0044166666666667, 2.1950833333333333, 1.63125, 0.7880833333333334, 0.24116666666666667, 0.1095, 0.3621666666666667, 0.14041666666666666, 0.9824166666666666, 0.4598333333333333, 0.31808333333333333, 0.8699166666666667, 0.157, 0.14616666666666667, 0.17258333333333334, 0.12590909090909091, 0.19444444444444445, 0.22383333333333336, 0.37725, 0.7250833333333334, 0.385, 1.39075, 0.26275, 0.19433333333333333, 0.10516666666666667, 0.201, 0.30775, 0.19716666666666666, 0.20083333333333334, 0.4910833333333333, 0.398, 0.42825, 0.75675, 0.3935, 0.16933333333333334, 0.24841666666666665, 0.3354166666666667, 0.22233333333333336, 0.1825, 0.1720909090909091, 0.179, 0.2568333333333333, 0.3364166666666667, 0.8403333333333334, 0.4155, 0.6171666666666666, 0.7785, 0.5746666666666667, 1.53875, 0.6193333333333334, 0.99225, 0.43191666666666667, 0.92975, 1.0189166666666667, 0.22433333333333333, 0.6004166666666666, 0.4410833333333333, 0.8973333333333333, 0.5895, 0.24541666666666664, 0.13836363636363638, 0.21366666666666664, 0.18075, 0.16654545454545452, 0.2578888888888889, 0.2514166666666667, 0.5236666666666666, 1.2431666666666668, 0.7379166666666667, 0.9735833333333334, 0.35125, 2.5838333333333336, 1.7480833333333332, 1.2421666666666666, 2.35675, 1.5921666666666667, 1.19375, 0.17808333333333334, 0.24683333333333335, 0.6248181818181818, 0.47044444444444444, 0.9619166666666666, 0.20433333333333334, 0.6376666666666666, 0.14958333333333335, 0.19125, 0.14783333333333334, 0.208, 0.22866666666666666, 0.24891666666666665, 0.1505, 0.6745, 0.7685, 0.5545833333333333, 0.50325, 0.5148333333333334, 1.9893333333333332, 1.2161666666666668, 0.6651666666666667, 0.15025, 0.12625, 0.05316666666666667, 0.4963333333333333, 2.54575, 1.3246666666666667, 2.115, 0.6698333333333334, 0.15458333333333335, 0.15975, 0.13916666666666666, 0.12266666666666667, 0.2029090909090909, 0.23122222222222222, 0.533, 0.15675, 0.13625, 2.067, 0.7903333333333333, 0.9883333333333334, 0.44608333333333333, 0.2790833333333333, 1.8005, 0.8198333333333334, 2.60525, 1.83225, 2.1533333333333333, 1.072, 1.2043333333333333, 0.6051666666666666, 1.13675, 0.3330833333333333, 0.3438333333333333, 0.6486666666666666, 0.48025, 0.17116666666666666, 0.15381818181818183, 0.19722222222222222, 0.22858333333333333, 0.22016666666666665, 0.16758333333333333, 1.3263636363636362, 0.9056666666666666, 0.5432857142857144, 0.8975, 2.457222222222222, 1.1668, 1.3920833333333333, 3.111909090909091, 0.6785, 0.451, 1.089, 0.1713, 0.6919, 0.444625, 0.5696, 0.1315]),
- DATA('Ladezustand', History.WEEK.dataChannelWithValues.result.data['_sum/EssSoc']),
+ DATA("Erzeugung: 200,9 kWh", [0, 0, 0, 0, 0.06877777777777777, 0.10641666666666667, 0.24808333333333335, 0.9343333333333333, 2.7069166666666664, 4.60225, 6.1075, 7.152166666666667, 7.8105, 7.919833333333333, 7.5575, 5.898916666666667, 3.4225, 1.20825, 0.6315833333333334, 0.4348333333333333, 0.11625, 0.0555, 0, 0, 0, 0, 0, 0, 0.05566666666666666, 0.11616666666666667, 0.41533333333333333, 0.80975, 1.3233333333333333, 1.5246666666666668, 4.180416666666667, 2.5433333333333334, 2.1981666666666664, 4.257916666666667, 5.337583333333333, 3.255, 2.7370833333333335, 1.9298333333333333, 1.0460833333333333, 0.5075, 0.12633333333333333, 0.0575, 0, 0, 0, 0, 0, 0, 0.03266666666666666, 0.08233333333333333, 0.3933333333333333, 1.09875, 1.88925, 4.037166666666667, 6.144166666666667, 7.2335, 7.912333333333333, 7.1735, 7.83025, 6.541166666666667, 3.7155, 1.372, 0.4713333333333333, 0.29875, 0.12891666666666665, 0.0605, 0.0014166666666666668, 0, 0, 0, 0, 0, 0.07055555555555555, 0.126, 0.22975, 0.9369166666666666, 2.7914166666666667, 4.741666666666667, 6.264666666666667, 7.398416666666667, 7.854166666666667, 8.1385, 7.7740833333333335, 6.136583333333333, 3.59375, 0.9946666666666666, 0.39208333333333334, 0.3069090909090909, 0.12022222222222223, 0.0585, 0.00008333333333333333, 0, 0, 0, 0, 0, 0.04644444444444444, 0.123, 0.47733333333333333, 1.2674166666666666, 2.0323333333333333, 2.60675, 2.39825, 1.2404166666666667, 0.7430833333333333, 0.72275, 0.706, 2.8409166666666663, 3.1284166666666664, 1.23975, 0.7388333333333333, 0.3690833333333333, 0.11475, 0.05725, 0, 0, 0, 0, 0, 0, 0.03622222222222222, 0.11033333333333332, 0.41425, 1.2955833333333333, 2.0244166666666668, 1.6163333333333332, 1.624, 5.705, 4.2615, 2.9964166666666667, 4.293333333333333, 4.474083333333333, 2.6373333333333333, 0.5760833333333334, 0.7170833333333334, 0.3575, 0.16566666666666666, 0.061, 0, 0, 0, 0, 0, 0, 0.04122222222222222, 0.09633333333333333, 0.18325, 0.4275, 1.8598181818181818, 3.429, 1.2262857142857142, 2.923, 4.695, 4.4568, 5.333916666666667, 4.859545454545455, 2.6625, 2.284, 0.7131666666666666, 0.4491, 0.1561, 0.0615, 0.0006, 0]),
+ DATA("Beladung: 38,7 kWh", [0, 0, 0, 0, 0, 0, 0.053916666666666696, 0.7623333333333333, 2.138083333333333, 2.88375, 0.040750000000000064, 0.05616666666666692, 0.06824999999999992, 0.05333333333333279, 0.052833333333333066, 0.06191666666666684, 0.05941666666666645, 0.06133333333333324, 0.041166666666666796, 0.27449999999999997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03533333333333333, 0.07091666666666663, 0.9209166666666666, 0.1278333333333337, 3.353, 0.12391666666666712, 0.05908333333333271, 0.05958333333333332, 0.039833333333333165, 0.0448333333333335, 0.05183333333333362, 0.06066666666666665, 0, 0.08024999999999993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05283333333333329, 0.24774999999999991, 1.4625000000000001, 2.159, 0.05708333333333382, 0.05458333333333343, 0.052666666666666195, 0.06583333333333297, 0.053749999999999964, 0.057000000000000384, 0.2017500000000001, 0, 0.23058333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.041166666666667, 3.0615000000000006, 0.07808333333333373, 0.0442499999999999, 0.06674999999999986, 0.051916666666667055, 0.04716666666666658, 0.054250000000000576, 0.049249999999999794, 0.051416666666666555, 0.0595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.32333333333333336, 0.589, 1.2433333333333332, 2.029166666666667, 0.4844166666666667, 0, 0, 0, 0.03066666666666662, 2.34975, 0.07308333333333294, 0.06908333333333316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2748333333333334, 1.13575, 0, 0.8175833333333332, 0.6326666666666667, 5.248833333333334, 1.257083333333333, 0, 0.8414166666666665, 0, 0.27624999999999966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2515, 0.5249090909090908, 2.5081666666666664, 0.6641428571428571, 2.0005, 2.226888888888889, 1.0726000000000004, 0.020500000000000185, 0.12281818181818238, 0.04666666666666641, 0.04499999999999993, 0, 0.2635, 0, 0, 0, 0]),
+ DATA("Entladung: 31,8 kWh", [0.16255555555555554, 0.15308333333333335, 0.13358333333333333, 0.23645454545454547, 0.16444444444444445, 0.15000000000000002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8418333333333334, 0.40008333333333335, 0.3143333333333333, 0.87825, 0.15983333333333336, 0.15433333333333335, 0.12808333333333335, 0.13336363636363638, 0.12544444444444444, 0.10674999999999998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.011833333333333584, 0, 0.6314166666666667, 0.3428333333333333, 0.1775, 0.24691666666666665, 0.32225, 0.20191666666666666, 0.17116666666666666, 0.15227272727272728, 0.13366666666666666, 0.1650833333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17574999999999985, 0, 0.307, 0.30425, 0.8374166666666666, 0.5858333333333334, 0.233, 0.12245454545454545, 0.19341666666666665, 0.16675, 0.16018181818181818, 0.1677777777777778, 0.07708333333333334, 0.2829166666666666, 0.3085000000000002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3293636363636363, 0.3361111111111111, 0.9013333333333333, 0.21000000000000002, 0.6339166666666667, 0.11658333333333333, 0.17658333333333334, 0.13425, 0.19072727272727272, 0.1686666666666667, 0.10341666666666666, 0, 0, 0, 0, 0, 0.13316666666666643, 1.2479166666666668, 0.5, 0, 0, 0, 0, 0.2433333333333333, 2.1755833333333334, 1.2095833333333335, 2.0555000000000003, 0.67025, 0.17266666666666666, 0.16391666666666665, 0.13858333333333334, 0.07441666666666667, 0.20381818181818182, 0.18944444444444444, 0.3955, 0, 0, 0.049249999999999794, 0, 0, 0, 0, 0.6410833333333334, 0, 0.3483333333333345, 0, 1.5750000000000002, 0.34658333333333335, 0.8439166666666669, 0.42374999999999996, 1.0724166666666668, 0.33325, 0.3395, 0.6474166666666666, 0.4916666666666667, 0.18208333333333335, 0.13436363636363638, 0.15433333333333332, 0.12583333333333332, 0.019250000000000017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3953333333333334, 0, 0.5301, 0.377875, 0.5781, 0.150375]),
+ DATA("Einspeisung: 119,7 kWh", [0.0023333333333333335, 0, 0, 0, 0, 0, 0, 0.014166666666666666, 0.02808333333333333, 0.9546666666666667, 4.150583333333333, 6.431333333333333, 5.737583333333333, 5.6714166666666666, 5.873333333333333, 5.049083333333333, 3.122, 1.0374166666666667, 0.22808333333333333, 0.02, 0, 0, 0, 0.008333333333333333, 0.0030833333333333333, 0.008333333333333333, 0, 0.007727272727272728, 0, 0, 0.00275, 0.013833333333333335, 0.017416666666666667, 0.006083333333333333, 0.5646666666666667, 2.2251666666666665, 2.03375, 3.99725, 4.990083333333333, 3.0128333333333335, 2.4844166666666667, 1.378, 0.65975, 0, 0.001, 0.006916666666666667, 0.008166666666666666, 0, 0, 0, 0, 0, 0, 0, 0.004083333333333333, 0.010583333333333333, 0.011166666666666667, 1.261, 5.308833333333333, 6.604, 6.321166666666667, 6.488333333333333, 6.78425, 6.052083333333333, 2.5839166666666666, 0.529, 0.01616666666666667, 0.0055, 0, 0.0006666666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0024166666666666664, 0.0125, 0.7065, 5.835416666666667, 4.77025, 6.03925, 6.8445833333333335, 5.370333333333333, 4.490166666666667, 2.3506666666666667, 0.7650833333333333, 0.08583333333333333, 0.011454545454545455, 0, 0, 0.005666666666666667, 0, 0, 0, 0, 0, 0, 0, 0.0033333333333333335, 0.004083333333333333, 0.02033333333333333, 0.02316666666666667, 1.4106666666666667, 0.8588333333333333, 0.0015833333333333333, 0.006583333333333333, 0.010083333333333335, 0.3410833333333333, 2.9290833333333337, 1.1175833333333332, 0.48583333333333334, 0, 0, 0, 0.0006666666666666666, 0.017916666666666668, 0.004, 0, 0, 0.001, 0, 0, 0, 0.02358333333333333, 0.006416666666666667, 0.008166666666666666, 0.0031666666666666666, 0.009916666666666666, 2.7254166666666664, 1.83725, 2.63225, 2.2170833333333335, 0.529, 0, 0, 0, 0, 0, 0.0003333333333333333, 0, 0, 0.011416666666666665, 0.011083333333333334, 0, 0, 0, 0, 0.008333333333333333, 0.008818181818181819, 0.015333333333333334, 0.018857142857142857, 0.024833333333333332, 0.010888888888888889, 2.2174, 3.9214166666666666, 1.6248181818181817, 1.937, 1.789, 0.0195, 0.0143, 0, 0, 0.009, 0.018875]),
+ DATA("Bezug: 2,4 kWh", [0, 0.011916666666666666, 0.01633333333333333, 0.00609090909090909, 0.015333333333333334, 0.011666666666666665, 0.0024166666666666664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02425, 0.004416666666666667, 0.0035833333333333333, 0, 0, 0, 0.04441666666666667, 0, 0.013111111111111112, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0011666666666666668, 0, 0, 0, 0.0015833333333333333, 0.013333333333333334, 0.020416666666666666, 0.01125, 0.019727272727272725, 0.012444444444444445, 0.009583333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.007666666666666667, 0, 0.0023333333333333335, 0.0125, 0.01609090909090909, 0.02016666666666667, 0.014083333333333333, 0.006363636363636363, 0.01955555555555556, 0.04841666666666666, 0.011166666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.014222222222222221, 0.00225, 0, 0.0036666666666666666, 0.032916666666666664, 0.014666666666666666, 0.0135, 0.017363636363636362, 0.013333333333333334, 0.022083333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0009166666666666666, 0, 0.0021666666666666666, 0, 0, 0, 0.0005, 0.04841666666666666, 0, 0.005555555555555556, 0.02716666666666667, 0.017333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0023333333333333335, 0.008333333333333333, 0.003, 0.015916666666666666, 0.00325, 0, 0.004333333333333333, 0.001, 0, 0, 0.019545454545454546, 0.0017777777777777776, 0.006416666666666667, 0.017666666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0058, 0.005625, 0, 0]),
+ DATA("Verbrauch: 76,7 kWh", [0.16022222222222224, 0.16516666666666666, 0.14991666666666667, 0.24245454545454548, 0.24866666666666665, 0.2679166666666667, 0.19658333333333333, 0.15775, 0.5408333333333334, 0.7640833333333333, 1.9163333333333332, 0.6645833333333334, 2.0044166666666667, 2.1950833333333333, 1.63125, 0.7880833333333334, 0.24116666666666667, 0.1095, 0.3621666666666667, 0.14041666666666666, 0.9824166666666666, 0.4598333333333333, 0.31808333333333333, 0.8699166666666667, 0.157, 0.14616666666666667, 0.17258333333333334, 0.12590909090909091, 0.19444444444444445, 0.22383333333333336, 0.37725, 0.7250833333333334, 0.385, 1.39075, 0.26275, 0.19433333333333333, 0.10516666666666667, 0.201, 0.30775, 0.19716666666666666, 0.20083333333333334, 0.4910833333333333, 0.398, 0.42825, 0.75675, 0.3935, 0.16933333333333334, 0.24841666666666665, 0.3354166666666667, 0.22233333333333336, 0.1825, 0.1720909090909091, 0.179, 0.2568333333333333, 0.3364166666666667, 0.8403333333333334, 0.4155, 0.6171666666666666, 0.7785, 0.5746666666666667, 1.53875, 0.6193333333333334, 0.99225, 0.43191666666666667, 0.92975, 1.0189166666666667, 0.22433333333333333, 0.6004166666666666, 0.4410833333333333, 0.8973333333333333, 0.5895, 0.24541666666666664, 0.13836363636363638, 0.21366666666666664, 0.18075, 0.16654545454545452, 0.2578888888888889, 0.2514166666666667, 0.5236666666666666, 1.2431666666666668, 0.7379166666666667, 0.9735833333333334, 0.35125, 2.5838333333333336, 1.7480833333333332, 1.2421666666666666, 2.35675, 1.5921666666666667, 1.19375, 0.17808333333333334, 0.24683333333333335, 0.6248181818181818, 0.47044444444444444, 0.9619166666666666, 0.20433333333333334, 0.6376666666666666, 0.14958333333333335, 0.19125, 0.14783333333333334, 0.208, 0.22866666666666666, 0.24891666666666665, 0.1505, 0.6745, 0.7685, 0.5545833333333333, 0.50325, 0.5148333333333334, 1.9893333333333332, 1.2161666666666668, 0.6651666666666667, 0.15025, 0.12625, 0.05316666666666667, 0.4963333333333333, 2.54575, 1.3246666666666667, 2.115, 0.6698333333333334, 0.15458333333333335, 0.15975, 0.13916666666666666, 0.12266666666666667, 0.2029090909090909, 0.23122222222222222, 0.533, 0.15675, 0.13625, 2.067, 0.7903333333333333, 0.9883333333333334, 0.44608333333333333, 0.2790833333333333, 1.8005, 0.8198333333333334, 2.60525, 1.83225, 2.1533333333333333, 1.072, 1.2043333333333333, 0.6051666666666666, 1.13675, 0.3330833333333333, 0.3438333333333333, 0.6486666666666666, 0.48025, 0.17116666666666666, 0.15381818181818183, 0.19722222222222222, 0.22858333333333333, 0.22016666666666665, 0.16758333333333333, 1.3263636363636362, 0.9056666666666666, 0.5432857142857144, 0.8975, 2.457222222222222, 1.1668, 1.3920833333333333, 3.111909090909091, 0.6785, 0.451, 1.089, 0.1713, 0.6919, 0.444625, 0.5696, 0.1315]),
+ DATA("Ladezustand", History.WEEK.dataChannelWithValues.result.data["_sum/EssSoc"]),
],
labels: LABELS(History.WEEK.dataChannelWithValues.result.timestamps),
- options: History.LINE_CHART_OPTIONS('day', 'line', { ['right']: { ticks: { stepSize: 20 }, scale: null } }),
+ options: History.LINE_CHART_OPTIONS("day", "line", { ["right"]: { ticks: { stepSize: 20 }, scale: null } }),
},
});
}
{
// Bar-Chart Year
- expectView(defaultEMS, TEST_CONTEXT, 'bar', History.MONTH,
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
{
datasets: {
data: [
- DATA('Erzeugung: 22.491 kWh', [908, 967, 900, 926, 403, 597, 957, null, 1579, 556, 852, 976, 1026, 724, 839, 749, 709, 978, 607, 790, 652, null, 1011, 697, 908, null, 1466, 808, 906, null]),
+ DATA("Erzeugung: 22.491 kWh", [908, 967, 900, 926, 403, 597, 957, null, 1579, 556, 852, 976, 1026, 724, 839, 749, 709, 978, 607, 790, 652, null, 1011, 697, 908, null, 1466, 808, 906, null]),
// Only one of the two following datasets is shown in legend
- DATA('Direktverbrauch: 5.808,7 kWh', [191.524, 214.083, 198.811, 196.842, 184.218, 201.167, 175.916, null, 347.243, 166.862, 176.461, 218.586, 229.496, 228.661, 211.608, 217.075, 177.422, 179.495, 200.029, 229.434, 229.765, null, 360.727, 171.324, 206.255, null, 442.327, 225.59, 227.751, null]),
- DATA('Direktverbrauch: 5.808,7 kWh', [191.524, 214.083, 198.811, 196.842, 184.218, 201.167, 175.916, null, 347.243, 166.862, 176.461, 218.586, 229.496, 228.661, 211.608, 217.075, 177.422, 179.495, 200.029, 229.434, 229.765, null, 360.727, 171.324, 206.255, null, 442.327, 225.59, 227.751, null]),
- DATA('Beladung: 3.944,3 kWh', [113.476, 162.917, 150.189, 157.158, 149.782, 159.833, 155.084, null, 228.757, 128.138, 157.539, 59.414, 156.504, 107.339, 156.392, 158.925, 158.578, 121.505, 120.971, 154.566, 173.235, null, 204.273, 156.676, 143.745, null, 247.673, 157.41, 104.249, null]),
- DATA('Entladung: 3.394,4 kWh', [112.818, 126.532, 139.622, 133.212, 169.24, 98.705, 109.367, null, 204.267, 118.504, 121.261, 74.97, 144.175, 89.897, 141.582, 111.261, 122.274, 106.232, 139.405, 132.225, 143.86, null, 235.044, 63.914, 123.844, null, 242.102, 130.546, 59.571, null]),
- DATA('Einspeisung: 12.738 kWh', [603, 590, 551, 572, 69, 236, 626, null, 1003, 261, 518, 698, 640, 388, 471, 373, 373, 677, 286, 406, 249, null, 446, 369, 558, null, 776, 425, 574, null]),
- DATA('Bezug: 773 kWh', [16, 6, 3, 3, 5, 48, 4, null, 5, 26, 17, 62, 8, 66, 13, 21, 4, 3, 18, 27, 29, null, 118, 85, 2, null, 72, 28, 84, null]),
- DATA('Verbrauch: 9.976,1 kWh', [320.342, 346.615, 341.433, 333.054, 358.458, 347.872, 289.283, null, 556.51, 311.366, 314.722, 355.556, 381.671, 384.558, 366.19, 349.336, 303.696, 288.727, 357.434, 388.659, 402.625, null, 713.771, 320.238, 332.099, null, 756.429, 384.136, 371.322, null]),
+ DATA("Direktverbrauch: 5.808,7 kWh", [191.524, 214.083, 198.811, 196.842, 184.218, 201.167, 175.916, null, 347.243, 166.862, 176.461, 218.586, 229.496, 228.661, 211.608, 217.075, 177.422, 179.495, 200.029, 229.434, 229.765, null, 360.727, 171.324, 206.255, null, 442.327, 225.59, 227.751, null]),
+ DATA("Direktverbrauch: 5.808,7 kWh", [191.524, 214.083, 198.811, 196.842, 184.218, 201.167, 175.916, null, 347.243, 166.862, 176.461, 218.586, 229.496, 228.661, 211.608, 217.075, 177.422, 179.495, 200.029, 229.434, 229.765, null, 360.727, 171.324, 206.255, null, 442.327, 225.59, 227.751, null]),
+ DATA("Beladung: 3.944,3 kWh", [113.476, 162.917, 150.189, 157.158, 149.782, 159.833, 155.084, null, 228.757, 128.138, 157.539, 59.414, 156.504, 107.339, 156.392, 158.925, 158.578, 121.505, 120.971, 154.566, 173.235, null, 204.273, 156.676, 143.745, null, 247.673, 157.41, 104.249, null]),
+ DATA("Entladung: 3.394,4 kWh", [112.818, 126.532, 139.622, 133.212, 169.24, 98.705, 109.367, null, 204.267, 118.504, 121.261, 74.97, 144.175, 89.897, 141.582, 111.261, 122.274, 106.232, 139.405, 132.225, 143.86, null, 235.044, 63.914, 123.844, null, 242.102, 130.546, 59.571, null]),
+ DATA("Einspeisung: 12.738 kWh", [603, 590, 551, 572, 69, 236, 626, null, 1003, 261, 518, 698, 640, 388, 471, 373, 373, 677, 286, 406, 249, null, 446, 369, 558, null, 776, 425, 574, null]),
+ DATA("Bezug: 773 kWh", [16, 6, 3, 3, 5, 48, 4, null, 5, 26, 17, 62, 8, 66, 13, 21, 4, 3, 18, 27, 29, null, 118, 85, 2, null, 72, 28, 84, null]),
+ DATA("Verbrauch: 9.976,1 kWh", [320.342, 346.615, 341.433, 333.054, 358.458, 347.872, 289.283, null, 556.51, 311.366, 314.722, 355.556, 381.671, 384.558, 366.19, 349.336, 303.696, 288.727, 357.434, 388.659, 402.625, null, 713.771, 320.238, 332.099, null, 756.429, 384.136, 371.322, null]),
],
labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
- options: History.BAR_CHART_OPTIONS('day', 'bar', {}),
+ options: History.BAR_CHART_OPTIONS("day", "bar", {}),
},
});
}
{
// Bar-Chart - Year
- expectView(defaultEMS, TEST_CONTEXT, 'bar', History.YEAR,
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.YEAR,
{
datasets: {
data: [
- DATA('Erzeugung: 68.466 kWh', [1912, 3816, 7165, 10452, 20841, 22491, 1546, null, null, null, null, null]),
+ DATA("Erzeugung: 68.466 kWh", [1912, 3816, 7165, 10452, 20841, 22491, 1546, null, null, null, null, null]),
// Only one of the two following datasets is shown in legend
- DATA('Direktverbrauch: 22.466,2 kWh', [1597.394, 2056.891, 3150.228, 3720.697, 5506.053, 5808.6720000000005, 546.405, null, null, null, null, null]),
- DATA('Direktverbrauch: 22.466,2 kWh', [1597.394, 2056.891, 3150.228, 3720.697, 5506.053, 5808.6720000000005, 546.405, null, null, null, null, null]),
- DATA('Beladung: 15.296,8 kWh', [294.606, 1673.109, 3337.772, 3074.303, 2495.947, 3944.328, 372.595, null, null, null, null, null]),
- DATA('Entladung: 12.898,2 kWh', [208.491, 1339.036, 2911.126, 2555.138, 2123.751, 3394.43, 335.402, null, null, null, null, null]),
- DATA('Einspeisung: 30.703 kWh', [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
- DATA('Bezug: 23.209 kWh', [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
- DATA('Verbrauch: 58.573,4 kWh', [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
+ DATA("Direktverbrauch: 22.466,2 kWh", [1597.394, 2056.891, 3150.228, 3720.697, 5506.053, 5808.6720000000005, 546.405, null, null, null, null, null]),
+ DATA("Direktverbrauch: 22.466,2 kWh", [1597.394, 2056.891, 3150.228, 3720.697, 5506.053, 5808.6720000000005, 546.405, null, null, null, null, null]),
+ DATA("Beladung: 15.296,8 kWh", [294.606, 1673.109, 3337.772, 3074.303, 2495.947, 3944.328, 372.595, null, null, null, null, null]),
+ DATA("Entladung: 12.898,2 kWh", [208.491, 1339.036, 2911.126, 2555.138, 2123.751, 3394.43, 335.402, null, null, null, null, null]),
+ DATA("Einspeisung: 30.703 kWh", [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
+ DATA("Bezug: 23.209 kWh", [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
+ DATA("Verbrauch: 58.573,4 kWh", [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
],
labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps),
- options: History.BAR_CHART_OPTIONS('month', 'bar', {}),
+ options: History.BAR_CHART_OPTIONS("month", "bar", {}),
},
});
}
{
// Bar-Chart: no config
const EMS = DummyConfig.from();
- expectView(EMS, TEST_CONTEXT, 'bar', History.YEAR,
+ expectView(EMS, TEST_CONTEXT, "bar", History.YEAR,
{
datasets: {
data: [],
labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps),
- options: History.BAR_CHART_OPTIONS('month', 'bar', {
+ options: History.BAR_CHART_OPTIONS("month", "bar", {
}),
},
});
@@ -125,19 +125,19 @@ describe('History EnergyMonitor', () => {
DummyConfig.Component.ESS_GENERIC_MANAGEDSYMMETRIC("ess0"),
);
- expectView(EMS, TEST_CONTEXT, 'bar', History.YEAR,
+ expectView(EMS, TEST_CONTEXT, "bar", History.YEAR,
{
datasets: {
data: [
- DATA('Beladung: 15.296,8 kWh', [294.606, 1673.109, 3337.772, 3074.303, 2495.947, 3944.328, 372.595, null, null, null, null, null]),
- DATA('Entladung: 12.898,2 kWh', [208.491, 1339.036, 2911.126, 2555.138, 2123.751, 3394.43, 335.402, null, null, null, null, null]),
- DATA('Einspeisung: 30.703 kWh', [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
- DATA('Bezug: 23.209 kWh', [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
- DATA('Verbrauch: 58.573,4 kWh', [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
+ DATA("Beladung: 15.296,8 kWh", [294.606, 1673.109, 3337.772, 3074.303, 2495.947, 3944.328, 372.595, null, null, null, null, null]),
+ DATA("Entladung: 12.898,2 kWh", [208.491, 1339.036, 2911.126, 2555.138, 2123.751, 3394.43, 335.402, null, null, null, null, null]),
+ DATA("Einspeisung: 30.703 kWh", [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
+ DATA("Bezug: 23.209 kWh", [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
+ DATA("Verbrauch: 58.573,4 kWh", [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
],
labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps),
- options: History.BAR_CHART_OPTIONS('month', 'bar', {}),
+ options: History.BAR_CHART_OPTIONS("month", "bar", {}),
},
});
}
@@ -148,16 +148,16 @@ describe('History EnergyMonitor', () => {
DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"),
);
- expectView(EMS, TEST_CONTEXT, 'bar', History.YEAR,
+ expectView(EMS, TEST_CONTEXT, "bar", History.YEAR,
{
datasets: {
data: [
- DATA('Einspeisung: 30.703 kWh', [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
- DATA('Bezug: 23.209 kWh', [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
- DATA('Verbrauch: 58.573,4 kWh', [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
+ DATA("Einspeisung: 30.703 kWh", [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
+ DATA("Bezug: 23.209 kWh", [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
+ DATA("Verbrauch: 58.573,4 kWh", [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
],
labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps),
- options: History.BAR_CHART_OPTIONS('month', 'bar', {}),
+ options: History.BAR_CHART_OPTIONS("month", "bar", {}),
},
});
}
@@ -168,16 +168,16 @@ describe('History EnergyMonitor', () => {
DummyConfig.Component.ESS_GENERIC_MANAGEDSYMMETRIC("ess0"),
);
- expectView(EMS, TEST_CONTEXT, 'bar', History.YEAR,
+ expectView(EMS, TEST_CONTEXT, "bar", History.YEAR,
{
datasets: {
data: [
- DATA('Beladung: 15.296,8 kWh', [294.606, 1673.109, 3337.772, 3074.303, 2495.947, 3944.328, 372.595, null, null, null, null, null]),
- DATA('Entladung: 12.898,2 kWh', [208.491, 1339.036, 2911.126, 2555.138, 2123.751, 3394.43, 335.402, null, null, null, null, null]),
- DATA('Verbrauch: 58.573,4 kWh', [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
+ DATA("Beladung: 15.296,8 kWh", [294.606, 1673.109, 3337.772, 3074.303, 2495.947, 3944.328, 372.595, null, null, null, null, null]),
+ DATA("Entladung: 12.898,2 kWh", [208.491, 1339.036, 2911.126, 2555.138, 2123.751, 3394.43, 335.402, null, null, null, null, null]),
+ DATA("Verbrauch: 58.573,4 kWh", [11634.885, 8207.927, 8976.354, 8311.835, 10341.804, 9976.102, 975.807, null, null, null, null, null]),
],
labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps),
- options: History.BAR_CHART_OPTIONS('month', 'bar', {}),
+ options: History.BAR_CHART_OPTIONS("month", "bar", {}),
},
});
}
diff --git a/ui/src/app/edge/history/common/energy/chart/chart.ts b/ui/src/app/edge/history/common/energy/chart/chart.ts
index 1fb80029716..dff22346d79 100644
--- a/ui/src/app/edge/history/common/energy/chart/chart.ts
+++ b/ui/src/app/edge/history/common/energy/chart/chart.ts
@@ -1,68 +1,68 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, EdgeConfig, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig, Utils } from "src/app/shared/shared";
@Component({
- selector: 'energychart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "energychart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class ChartComponent extends AbstractHistoryChart {
- public static getChartData(config: EdgeConfig | null, chartType: 'line' | 'bar', translate: TranslateService): HistoryUtils.ChartData {
+ public static getChartData(config: EdgeConfig | null, chartType: "line" | "bar", translate: TranslateService): HistoryUtils.ChartData {
const input: HistoryUtils.InputChannel[] =
config?.widgets.classes.reduce((arr: HistoryUtils.InputChannel[], key) => {
const newObj = [];
switch (key) {
- case 'Energymonitor':
- case 'Consumption':
+ case "Energymonitor":
+ case "Consumption":
newObj.push({
- name: 'Consumption',
- powerChannel: new ChannelAddress('_sum', 'ConsumptionActivePower'),
- energyChannel: new ChannelAddress('_sum', 'ConsumptionActiveEnergy'),
+ name: "Consumption",
+ powerChannel: new ChannelAddress("_sum", "ConsumptionActivePower"),
+ energyChannel: new ChannelAddress("_sum", "ConsumptionActiveEnergy"),
});
break;
- case 'Common_Autarchy':
- case 'Grid':
+ case "Common_Autarchy":
+ case "Grid":
newObj.push({
- name: 'GridBuy',
- powerChannel: new ChannelAddress('_sum', 'GridActivePower'),
- energyChannel: new ChannelAddress('_sum', 'GridBuyActiveEnergy'),
- ...(chartType === 'line' && { converter: HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO }),
+ name: "GridBuy",
+ powerChannel: new ChannelAddress("_sum", "GridActivePower"),
+ energyChannel: new ChannelAddress("_sum", "GridBuyActiveEnergy"),
+ ...(chartType === "line" && { converter: HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO }),
}, {
- name: 'GridSell',
- powerChannel: new ChannelAddress('_sum', 'GridActivePower'),
- energyChannel: new ChannelAddress('_sum', 'GridSellActiveEnergy'),
- ...(chartType === 'line' && { converter: HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE }),
+ name: "GridSell",
+ powerChannel: new ChannelAddress("_sum", "GridActivePower"),
+ energyChannel: new ChannelAddress("_sum", "GridSellActiveEnergy"),
+ ...(chartType === "line" && { converter: HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE }),
});
break;
- case 'Storage':
+ case "Storage":
newObj.push({
- name: 'EssSoc',
- powerChannel: new ChannelAddress('_sum', 'EssSoc'),
+ name: "EssSoc",
+ powerChannel: new ChannelAddress("_sum", "EssSoc"),
}, {
- name: 'EssCharge',
- powerChannel: new ChannelAddress('_sum', 'EssActivePower'),
- energyChannel: new ChannelAddress('_sum', 'EssDcChargeEnergy'),
+ name: "EssCharge",
+ powerChannel: new ChannelAddress("_sum", "EssActivePower"),
+ energyChannel: new ChannelAddress("_sum", "EssDcChargeEnergy"),
}, {
- name: 'EssDischarge',
- powerChannel: new ChannelAddress('_sum', 'EssActivePower'),
- energyChannel: new ChannelAddress('_sum', 'EssDcDischargeEnergy'),
+ name: "EssDischarge",
+ powerChannel: new ChannelAddress("_sum", "EssActivePower"),
+ energyChannel: new ChannelAddress("_sum", "EssDcDischargeEnergy"),
});
break;
- case 'Common_Selfconsumption':
- case 'Common_Production':
+ case "Common_Selfconsumption":
+ case "Common_Production":
newObj.push({
- name: 'ProductionActivePower',
- powerChannel: new ChannelAddress('_sum', 'ProductionActivePower'),
- energyChannel: new ChannelAddress('_sum', 'ProductionActiveEnergy'),
+ name: "ProductionActivePower",
+ powerChannel: new ChannelAddress("_sum", "ProductionActivePower"),
+ energyChannel: new ChannelAddress("_sum", "ProductionActiveEnergy"),
}, {
- name: 'ProductionDcActual',
- powerChannel: new ChannelAddress('_sum', 'ProductionDcActualPower'),
- energyChannel: new ChannelAddress('_sum', 'ProductionActiveEnergy'),
+ name: "ProductionDcActual",
+ powerChannel: new ChannelAddress("_sum", "ProductionDcActualPower"),
+ energyChannel: new ChannelAddress("_sum", "ProductionActiveEnergy"),
});
break;
}
@@ -76,92 +76,92 @@ export class ChartComponent extends AbstractHistoryChart {
output: (data: HistoryUtils.ChannelData) => {
return [
{
- name: translate.instant('General.production'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data['_sum/ProductionActiveEnergy'],
- converter: () => data['ProductionActivePower'],
- color: 'rgb(45,143,171)',
+ name: translate.instant("General.production"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data["_sum/ProductionActiveEnergy"],
+ converter: () => data["ProductionActivePower"],
+ color: "rgb(45,143,171)",
stack: 0,
- hiddenOnInit: chartType == 'line' ? false : true,
+ hiddenOnInit: chartType == "line" ? false : true,
order: 1,
},
// DirectConsumption, displayed in stack 1 & 2, only one legenItem
- ...[chartType === 'bar' && {
- name: translate.instant('General.directConsumption'),
+ ...[chartType === "bar" && {
+ name: translate.instant("General.directConsumption"),
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return Utils.subtractSafely(energyValues.result.data['_sum/ProductionActiveEnergy'], energyValues.result.data['_sum/GridSellActiveEnergy'], energyValues.result.data['_sum/EssDcChargeEnergy']);
+ return Utils.subtractSafely(energyValues.result.data["_sum/ProductionActiveEnergy"], energyValues.result.data["_sum/GridSellActiveEnergy"], energyValues.result.data["_sum/EssDcChargeEnergy"]);
},
converter: () =>
- data['ProductionActivePower']?.map((value, index) => Utils.subtractSafely(value, data['GridSell'][index], data['EssCharge'][index]))
+ data["ProductionActivePower"]?.map((value, index) => Utils.subtractSafely(value, data["GridSell"][index], data["EssCharge"][index]))
?.map(value => HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO(value)),
- color: 'rgb(244,164,96)',
+ color: "rgb(244,164,96)",
stack: [1, 2],
order: 2,
}],
// Charge Power
{
- name: translate.instant('General.chargePower'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data['_sum/EssDcChargeEnergy'],
- converter: () => chartType === 'line' //
- ? data['EssCharge']?.map((value, index) => {
- return HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE(Utils.subtractSafely(value, data['ProductionDcActual']?.[index]));
- }) : data['EssCharge'],
- color: 'rgb(0,223,0)',
+ name: translate.instant("General.chargePower"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data["_sum/EssDcChargeEnergy"],
+ converter: () => chartType === "line" //
+ ? data["EssCharge"]?.map((value, index) => {
+ return HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE(Utils.subtractSafely(value, data["ProductionDcActual"]?.[index]));
+ }) : data["EssCharge"],
+ color: "rgb(0,223,0)",
stack: 1,
- ...(chartType === 'line' && { order: 6 }),
+ ...(chartType === "line" && { order: 6 }),
},
// Discharge Power
{
- name: translate.instant('General.dischargePower'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data['_sum/EssDcDischargeEnergy'],
+ name: translate.instant("General.dischargePower"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data["_sum/EssDcDischargeEnergy"],
converter: () => {
- return chartType === 'line' ?
- data['EssDischarge']?.map((value, index) => {
- return HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO(Utils.subtractSafely(value, data['ProductionDcActual']?.[index]));
- }) : data['EssDischarge'];
+ return chartType === "line" ?
+ data["EssDischarge"]?.map((value, index) => {
+ return HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO(Utils.subtractSafely(value, data["ProductionDcActual"]?.[index]));
+ }) : data["EssDischarge"];
},
- color: 'rgb(200,0,0)',
+ color: "rgb(200,0,0)",
stack: 2,
- ...(chartType === 'line' && { order: 5 }),
+ ...(chartType === "line" && { order: 5 }),
},
// Sell to grid
{
- name: translate.instant('General.gridSellAdvanced'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data['_sum/GridSellActiveEnergy'],
- converter: () => data['GridSell'],
- color: 'rgb(0,0,200)',
+ name: translate.instant("General.gridSellAdvanced"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data["_sum/GridSellActiveEnergy"],
+ converter: () => data["GridSell"],
+ color: "rgb(0,0,200)",
stack: 1,
- ...(chartType === 'line' && { order: 4 }),
+ ...(chartType === "line" && { order: 4 }),
},
// Buy from Grid
{
- name: translate.instant('General.gridBuyAdvanced'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data['_sum/GridBuyActiveEnergy'],
- converter: () => data['GridBuy'],
- color: 'rgb(0,0,0)',
+ name: translate.instant("General.gridBuyAdvanced"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data["_sum/GridBuyActiveEnergy"],
+ converter: () => data["GridBuy"],
+ color: "rgb(0,0,0)",
stack: 2,
- ...(chartType === 'line' && { order: 2 }),
+ ...(chartType === "line" && { order: 2 }),
},
// Consumption
{
- name: translate.instant('General.consumption'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data['_sum/ConsumptionActiveEnergy'],
- converter: () => data['Consumption'],
- color: 'rgb(253,197,7)',
+ name: translate.instant("General.consumption"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues.result.data["_sum/ConsumptionActiveEnergy"],
+ converter: () => data["Consumption"],
+ color: "rgb(253,197,7)",
stack: 3,
- hiddenOnInit: chartType == 'line' ? false : true,
- ...(chartType === 'line' && { order: 0 }),
+ hiddenOnInit: chartType == "line" ? false : true,
+ ...(chartType === "line" && { order: 0 }),
},
- ...[chartType === 'line' &&
+ ...[chartType === "line" &&
{
- name: translate.instant('General.soc'),
- converter: () => data['EssSoc']?.map(value => Utils.multiplySafely(value, 1000)),
- color: 'rgb(189, 195, 199)',
+ name: translate.instant("General.soc"),
+ converter: () => data["EssSoc"]?.map(value => Utils.multiplySafely(value, 1000)),
+ color: "rgb(189, 195, 199)",
borderDash: [10, 10],
yAxisId: ChartAxis.RIGHT,
stack: 1,
@@ -169,12 +169,15 @@ export class ChartComponent extends AbstractHistoryChart {
];
},
tooltip: {
- formatNumber: '1.0-2',
+ formatNumber: "1.0-2",
afterTitle: (stack: string) => {
- if (stack === "1") {
- return translate.instant('General.production');
- } else if (stack === "2") {
- return translate.instant('General.consumption');
+
+ if (chartType === "bar") {
+ if (stack === "1") {
+ return translate.instant("General.production");
+ } else if (stack === "2") {
+ return translate.instant("General.consumption");
+ }
}
return null;
},
@@ -183,16 +186,16 @@ export class ChartComponent extends AbstractHistoryChart {
// Left YAxis
{
- unit: YAxisTitle.ENERGY,
- position: 'left',
+ unit: YAxisType.ENERGY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
},
// Right Yaxis, only shown for line-chart
- (chartType === 'line' && {
- unit: YAxisTitle.PERCENTAGE,
- customTitle: '%',
- position: 'right',
+ (chartType === "line" && {
+ unit: YAxisType.PERCENTAGE,
+ customTitle: "%",
+ position: "right",
yAxisId: ChartAxis.RIGHT,
displayGrid: false,
}),
diff --git a/ui/src/app/edge/history/common/energy/energy.ts b/ui/src/app/edge/history/common/energy/energy.ts
index fe07c430784..95ac46ccad6 100644
--- a/ui/src/app/edge/history/common/energy/energy.ts
+++ b/ui/src/app/edge/history/common/energy/energy.ts
@@ -1,9 +1,9 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
-import { ChartComponent } from './chart/chart';
-import { FlatComponent } from './flat/flat';
+import { ChartComponent } from "./chart/chart";
+import { FlatComponent } from "./flat/flat";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/history/common/energy/flat/flat.html b/ui/src/app/edge/history/common/energy/flat/flat.html
index 94a5b9ea5be..9dd2bd9c078 100644
--- a/ui/src/app/edge/history/common/energy/flat/flat.html
+++ b/ui/src/app/edge/history/common/energy/flat/flat.html
@@ -24,4 +24,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/energy/flat/flat.ts b/ui/src/app/edge/history/common/energy/flat/flat.ts
index 54cc70482c4..49db6041eb6 100644
--- a/ui/src/app/edge/history/common/energy/flat/flat.ts
+++ b/ui/src/app/edge/history/common/energy/flat/flat.ts
@@ -1,24 +1,24 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, Utils } from '../../../../../shared/shared';
-import { Base64PayloadResponse } from 'src/app/shared/jsonrpc/response/base64PayloadResponse';
-import { QueryHistoricTimeseriesExportXlxsRequest } from 'src/app/shared/jsonrpc/request/queryHistoricTimeseriesExportXlxs';
-import { isSameDay, format, isSameMonth, isSameYear } from 'date-fns';
-import { saveAs } from 'file-saver-es';
-import { AppService } from 'src/app/app.service';
+import { Component } from "@angular/core";
+import { format, isSameDay, isSameMonth, isSameYear } from "date-fns";
+import { saveAs } from "file-saver-es";
+import { AppService } from "src/app/app.service";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { QueryHistoricTimeseriesExportXlxsRequest } from "src/app/shared/jsonrpc/request/queryHistoricTimeseriesExportXlxs";
+import { Base64PayloadResponse } from "src/app/shared/jsonrpc/response/base64PayloadResponse";
+import { ChannelAddress, CurrentData, Utils } from "../../../../../shared/shared";
@Component({
- selector: 'energy',
- templateUrl: './flat.html',
+ selector: "energy",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
- private static readonly EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
- private static readonly EXCEL_EXTENSION = '.xlsx';
+ private static readonly EXCEL_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8";
+ private static readonly EXCEL_EXTENSION = ".xlsx";
protected autarchyValue: number | null;
protected readonly isSmartphoneResolution = this.service.isSmartphoneResolution;
- protected readonly isApp: boolean = AppService.platform !== 'web';
+ protected readonly isApp: boolean = AppService.platform !== "web";
public getChartHeight(): number {
return this.service.deviceHeight / 2;
@@ -27,14 +27,14 @@ export class FlatComponent extends AbstractFlatWidget {
protected override onCurrentData(currentData: CurrentData) {
this.autarchyValue =
Utils.calculateAutarchy(
- currentData.allComponents['_sum/GridBuyActiveEnergy'] / 1000,
- currentData.allComponents['_sum/ConsumptionActiveEnergy'] / 1000);
+ currentData.allComponents["_sum/GridBuyActiveEnergy"] / 1000,
+ currentData.allComponents["_sum/ConsumptionActiveEnergy"] / 1000);
}
protected override getChannelAddresses(): ChannelAddress[] {
return [
- new ChannelAddress('_sum', 'GridBuyActiveEnergy'),
- new ChannelAddress('_sum', 'ConsumptionActiveEnergy'),
+ new ChannelAddress("_sum", "GridBuyActiveEnergy"),
+ new ChannelAddress("_sum", "ConsumptionActiveEnergy"),
];
}
@@ -44,14 +44,14 @@ export class FlatComponent extends AbstractFlatWidget {
protected exportToXlxs() {
if (this.isApp) {
- this.service.toast(this.translate.instant('APP.FUNCTIONALITY_TEMPORARILY_NOT_AVAILABLE'), "warning");
+ this.service.toast(this.translate.instant("APP.FUNCTIONALITY_TEMPORARILY_NOT_AVAILABLE"), "warning");
return;
}
this.service.getCurrentEdge().then(edge => {
edge.sendRequest(this.websocket, new QueryHistoricTimeseriesExportXlxsRequest(this.service.historyPeriod.value.from, this.service.historyPeriod.value.to)).then(response => {
const r = response as Base64PayloadResponse;
- const binary = atob(r.result.payload.replace(/\s/g, ''));
+ const binary = atob(r.result.payload.replace(/\s/g, ""));
const len = binary.length;
const buffer = new ArrayBuffer(len);
const view = new Uint8Array(buffer);
diff --git a/ui/src/app/edge/history/common/grid/chart/chart.constants.spec.ts b/ui/src/app/edge/history/common/grid/chart/chart.constants.spec.ts
index 1c3156cb6e5..bba5418804d 100644
--- a/ui/src/app/edge/history/common/grid/chart/chart.constants.spec.ts
+++ b/ui/src/app/edge/history/common/grid/chart/chart.constants.spec.ts
@@ -6,7 +6,7 @@ import { EdgeConfig } from "src/app/shared/shared";
import { ChartComponent } from "./chart";
-export function expectView(config: EdgeConfig, testContext: TestContext, chartType: 'line' | 'bar', channels: OeTester.Types.Channels, view: OeChartTester.View, showPhases: boolean): void {
+export function expectView(config: EdgeConfig, testContext: TestContext, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View, showPhases: boolean): void {
expect(removeFunctions(OeChartTester
.apply(ChartComponent
.getChartData(DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), chartType, testContext.translate, showPhases), chartType, channels, testContext, config)))
diff --git a/ui/src/app/edge/history/common/grid/chart/chart.spec.ts b/ui/src/app/edge/history/common/grid/chart/chart.spec.ts
index 9510e70e64b..64c0455cdf2 100644
--- a/ui/src/app/edge/history/common/grid/chart/chart.spec.ts
+++ b/ui/src/app/edge/history/common/grid/chart/chart.spec.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
import { History } from "src/app/edge/history/common/energy/chart/channels.spec";
-import { DATA, LABELS } from "../../energy/chart/chart.constants.spec";
-import { expectView } from "./chart.constants.spec";
import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
import { OeTester } from "src/app/shared/components/shared/testing/common";
import { TestContext, sharedSetup } from "src/app/shared/components/shared/testing/utils.spec";
import { ChartAxis } from "src/app/shared/service/utils";
+import { DATA, LABELS } from "../../energy/chart/chart.constants.spec";
+import { expectView } from "./chart.constants.spec";
-describe('History Grid', () => {
+describe("History Grid", () => {
const edgeConfigWithOutController14a = DummyConfig.from(
DummyConfig.Component.SOCOMEC_GRID_METER("meter0", "Netzzähler"),
@@ -24,18 +24,18 @@ describe('History Grid', () => {
TEST_CONTEXT = await sharedSetup(),
);
- it('#getChartData()', () => {
+ it("#getChartData()", () => {
{
// Line - Chart - without Controller 14a
- expectView(edgeConfigWithOutController14a, TEST_CONTEXT, 'line', History.DAY,
+ expectView(edgeConfigWithOutController14a, TEST_CONTEXT, "line", History.DAY,
{
datasets: {
data: [
- DATA('Einspeisung: 15,6 kWh', [null, null, null, 0, 0, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0, 0, 0, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0.001, 0.002, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.004, 0, 0.004, 0, 0, 0, 0, 0.005, 0.013, 0.006, 0.004, 0.017, 0.015, 0.017, 0.011, 0, 0, 0, 0, 0.029, 0.015, 0.013, 0.019, 0.014, 0.007, 0.016, 0, 0.018, 0.022, 0, 0.012, 0.011, 0.007, 0, 0.033, 0.007, 0.003, 0.004, 0.011, 0, 0.038, 0, 0, 0.019, 0, 0.016, 0.014, 0.018, 0, 1.119, 3.453, 3.608, 3.941, 4.392, 3.786, 4.805, 4.688, 3.095, 2.32, 2.851, 3.058, 4.044, 5.011, 2.789, 6.53, 5.029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Bezug: 0,9 kWh', [null, null, null, 0.031, 0.018, 0, 0.02, 0.016, 0.015, 0.014, 0.009, 0.02, 0.025, 0.025, 0.025, 0.021, 0.012, 0.009, 0.01, 0.011, 0.005, 0.003, 0, 0.015, 0.018, 0.023, 0, 0, 0, 0.002, 0.002, 0.003, 0.015, 0.008, 0.022, 0.027, 0.016, 0.003, 0.002, 0, 0.028, 0.027, 0.017, 0.001, 0, 0, 0, null, null, null, null, 0.011, 0.01, 0.004, 0.006, 0.007, 0.018, 0.008, 0.012, 0.009, 0.004, 0.013, 0.015, 0.012, 0, 0, 0, 0.002, 0, 0.005, 0.001, 0.03, 0.062, 0, 0, 0, 0, 0, 0, 0, 0, 0.015, 0.005, 0.004, 0.007, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0, 0.021, 0, 0, 0, 0, 0, 0.003, 0, 0.004, 0, 0, 0.032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Einspeisung: 15,6 kWh", [null, null, null, 0, 0, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0, 0, 0, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0.001, 0.002, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.004, 0, 0.004, 0, 0, 0, 0, 0.005, 0.013, 0.006, 0.004, 0.017, 0.015, 0.017, 0.011, 0, 0, 0, 0, 0.029, 0.015, 0.013, 0.019, 0.014, 0.007, 0.016, 0, 0.018, 0.022, 0, 0.012, 0.011, 0.007, 0, 0.033, 0.007, 0.003, 0.004, 0.011, 0, 0.038, 0, 0, 0.019, 0, 0.016, 0.014, 0.018, 0, 1.119, 3.453, 3.608, 3.941, 4.392, 3.786, 4.805, 4.688, 3.095, 2.32, 2.851, 3.058, 4.044, 5.011, 2.789, 6.53, 5.029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Bezug: 0,9 kWh", [null, null, null, 0.031, 0.018, 0, 0.02, 0.016, 0.015, 0.014, 0.009, 0.02, 0.025, 0.025, 0.025, 0.021, 0.012, 0.009, 0.01, 0.011, 0.005, 0.003, 0, 0.015, 0.018, 0.023, 0, 0, 0, 0.002, 0.002, 0.003, 0.015, 0.008, 0.022, 0.027, 0.016, 0.003, 0.002, 0, 0.028, 0.027, 0.017, 0.001, 0, 0, 0, null, null, null, null, 0.011, 0.01, 0.004, 0.006, 0.007, 0.018, 0.008, 0.012, 0.009, 0.004, 0.013, 0.015, 0.012, 0, 0, 0, 0.002, 0, 0.005, 0.001, 0.03, 0.062, 0, 0, 0, 0, 0, 0, 0, 0, 0.015, 0.005, 0.004, 0.007, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0, 0.021, 0, 0, 0, 0, 0, 0.003, 0, 0.004, 0, 0, 0.032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
],
labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.LINE_CHART_OPTIONS('hour', 'line', {
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", {
[ChartAxis.LEFT]: { scale: { beginAtZero: true } },
}),
},
@@ -43,48 +43,48 @@ describe('History Grid', () => {
}
{
// Line - Chart
- expectView(edgeConfig, TEST_CONTEXT, 'line', History.DAY,
+ expectView(edgeConfig, TEST_CONTEXT, "line", History.DAY,
{
datasets: {
data: [
- DATA('Einspeisung: 15,6 kWh', [null, null, null, 0, 0, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0, 0, 0, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0.001, 0.002, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.004, 0, 0.004, 0, 0, 0, 0, 0.005, 0.013, 0.006, 0.004, 0.017, 0.015, 0.017, 0.011, 0, 0, 0, 0, 0.029, 0.015, 0.013, 0.019, 0.014, 0.007, 0.016, 0, 0.018, 0.022, 0, 0.012, 0.011, 0.007, 0, 0.033, 0.007, 0.003, 0.004, 0.011, 0, 0.038, 0, 0, 0.019, 0, 0.016, 0.014, 0.018, 0, 1.119, 3.453, 3.608, 3.941, 4.392, 3.786, 4.805, 4.688, 3.095, 2.32, 2.851, 3.058, 4.044, 5.011, 2.789, 6.53, 5.029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
- DATA('Bezug: 0,9 kWh', [null, null, null, 0.031, 0.018, 0, 0.02, 0.016, 0.015, 0.014, 0.009, 0.02, 0.025, 0.025, 0.025, 0.021, 0.012, 0.009, 0.01, 0.011, 0.005, 0.003, 0, 0.015, 0.018, 0.023, 0, 0, 0, 0.002, 0.002, 0.003, 0.015, 0.008, 0.022, 0.027, 0.016, 0.003, 0.002, 0, 0.028, 0.027, 0.017, 0.001, 0, 0, 0, null, null, null, null, 0.011, 0.01, 0.004, 0.006, 0.007, 0.018, 0.008, 0.012, 0.009, 0.004, 0.013, 0.015, 0.012, 0, 0, 0, 0.002, 0, 0.005, 0.001, 0.03, 0.062, 0, 0, 0, 0, 0, 0, 0, 0, 0.015, 0.005, 0.004, 0.007, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0, 0.021, 0, 0, 0, 0, 0, 0.003, 0, 0.004, 0, 0, 0.032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Einspeisung: 15,6 kWh", [null, null, null, 0, 0, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0, 0, 0, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0.001, 0.002, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.004, 0, 0.004, 0, 0, 0, 0, 0.005, 0.013, 0.006, 0.004, 0.017, 0.015, 0.017, 0.011, 0, 0, 0, 0, 0.029, 0.015, 0.013, 0.019, 0.014, 0.007, 0.016, 0, 0.018, 0.022, 0, 0.012, 0.011, 0.007, 0, 0.033, 0.007, 0.003, 0.004, 0.011, 0, 0.038, 0, 0, 0.019, 0, 0.016, 0.014, 0.018, 0, 1.119, 3.453, 3.608, 3.941, 4.392, 3.786, 4.805, 4.688, 3.095, 2.32, 2.851, 3.058, 4.044, 5.011, 2.789, 6.53, 5.029, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Bezug: 0,9 kWh", [null, null, null, 0.031, 0.018, 0, 0.02, 0.016, 0.015, 0.014, 0.009, 0.02, 0.025, 0.025, 0.025, 0.021, 0.012, 0.009, 0.01, 0.011, 0.005, 0.003, 0, 0.015, 0.018, 0.023, 0, 0, 0, 0.002, 0.002, 0.003, 0.015, 0.008, 0.022, 0.027, 0.016, 0.003, 0.002, 0, 0.028, 0.027, 0.017, 0.001, 0, 0, 0, null, null, null, null, 0.011, 0.01, 0.004, 0.006, 0.007, 0.018, 0.008, 0.012, 0.009, 0.004, 0.013, 0.015, 0.012, 0, 0, 0, 0.002, 0, 0.005, 0.001, 0.03, 0.062, 0, 0, 0, 0, 0, 0, 0, 0, 0.015, 0.005, 0.004, 0.007, 0, 0, 0, 0, 0, 0, 0, 0.005, 0, 0, 0, 0, 0, 0, 0.021, 0, 0, 0, 0, 0, 0.003, 0, 0.004, 0, 0, 0.032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
],
labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.MULTI_LINE_OPTIONS('hour', 'line', {
- ['right']: { scale: { max: 1, min: 0 }, ticks: { stepSize: 1 } },
+ options: OeTester.ChartOptions.MULTI_LINE_OPTIONS("hour", "line", {
+ ["right"]: { scale: { max: 1, min: 0 }, ticks: { stepSize: 1 } },
}),
},
}, false);
}
{
// Line - Chart
- expectView(edgeConfig, TEST_CONTEXT, 'line', History.WEEK,
+ expectView(edgeConfig, TEST_CONTEXT, "line", History.WEEK,
{
datasets: {
data: [
- DATA('Einspeisung: 119,7 kWh', [0.0023333333333333335, 0, 0, 0, 0, 0, 0, 0.014166666666666666, 0.02808333333333333, 0.9546666666666667, 4.150583333333333, 6.431333333333333, 5.737583333333333, 5.6714166666666666, 5.873333333333333, 5.049083333333333, 3.122, 1.0374166666666667, 0.22808333333333333, 0.02, 0, 0, 0, 0.008333333333333333, 0.0030833333333333333, 0.008333333333333333, 0, 0.007727272727272728, 0, 0, 0.00275, 0.013833333333333335, 0.017416666666666667, 0.006083333333333333, 0.5646666666666667, 2.2251666666666665, 2.03375, 3.99725, 4.990083333333333, 3.0128333333333335, 2.4844166666666667, 1.378, 0.65975, 0, 0.001, 0.006916666666666667, 0.008166666666666666, 0, 0, 0, 0, 0, 0, 0, 0.004083333333333333, 0.010583333333333333, 0.011166666666666667, 1.261, 5.308833333333333, 6.604, 6.321166666666667, 6.488333333333333, 6.78425, 6.052083333333333, 2.5839166666666666, 0.529, 0.01616666666666667, 0.0055, 0, 0.0006666666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0024166666666666664, 0.0125, 0.7065, 5.835416666666667, 4.77025, 6.03925, 6.8445833333333335, 5.370333333333333, 4.490166666666667, 2.3506666666666667, 0.7650833333333333, 0.08583333333333333, 0.011454545454545455, 0, 0, 0.005666666666666667, 0, 0, 0, 0, 0, 0, 0, 0.0033333333333333335, 0.004083333333333333, 0.02033333333333333, 0.02316666666666667, 1.4106666666666667, 0.8588333333333333, 0.0015833333333333333, 0.006583333333333333, 0.010083333333333335, 0.3410833333333333, 2.9290833333333337, 1.1175833333333332, 0.48583333333333334, 0, 0, 0, 0.0006666666666666666, 0.017916666666666668, 0.004, 0, 0, 0.001, 0, 0, 0, 0.02358333333333333, 0.006416666666666667, 0.008166666666666666, 0.0031666666666666666, 0.009916666666666666, 2.7254166666666664, 1.83725, 2.63225, 2.2170833333333335, 0.529, 0, 0, 0, 0, 0, 0.0003333333333333333, 0, 0, 0.011416666666666665, 0.011083333333333334, 0, 0, 0, 0, 0.008333333333333333, 0.008818181818181819, 0.015333333333333334, 0.018857142857142857, 0.024833333333333332, 0.010888888888888889, 2.2174, 3.9214166666666666, 1.6248181818181817, 1.937, 1.789, 0.0195, 0.0143, 0, 0, 0.009, 0.018875]),
- DATA('Bezug: 2,4 kWh', [0, 0.011916666666666666, 0.01633333333333333, 0.00609090909090909, 0.015333333333333334, 0.011666666666666665, 0.0024166666666666664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02425, 0.004416666666666667, 0.0035833333333333333, 0, 0, 0, 0.04441666666666667, 0, 0.013111111111111112, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0011666666666666668, 0, 0, 0, 0.0015833333333333333, 0.013333333333333334, 0.020416666666666666, 0.01125, 0.019727272727272725, 0.012444444444444445, 0.009583333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.007666666666666667, 0, 0.0023333333333333335, 0.0125, 0.01609090909090909, 0.02016666666666667, 0.014083333333333333, 0.006363636363636363, 0.01955555555555556, 0.04841666666666666, 0.011166666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.014222222222222221, 0.00225, 0, 0.0036666666666666666, 0.032916666666666664, 0.014666666666666666, 0.0135, 0.017363636363636362, 0.013333333333333334, 0.022083333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0009166666666666666, 0, 0.0021666666666666666, 0, 0, 0, 0.0005, 0.04841666666666666, 0, 0.005555555555555556, 0.02716666666666667, 0.017333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0023333333333333335, 0.008333333333333333, 0.003, 0.015916666666666666, 0.00325, 0, 0.004333333333333333, 0.001, 0, 0, 0.019545454545454546, 0.0017777777777777776, 0.006416666666666667, 0.017666666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0058, 0.005625, 0, 0]),
+ DATA("Einspeisung: 119,7 kWh", [0.0023333333333333335, 0, 0, 0, 0, 0, 0, 0.014166666666666666, 0.02808333333333333, 0.9546666666666667, 4.150583333333333, 6.431333333333333, 5.737583333333333, 5.6714166666666666, 5.873333333333333, 5.049083333333333, 3.122, 1.0374166666666667, 0.22808333333333333, 0.02, 0, 0, 0, 0.008333333333333333, 0.0030833333333333333, 0.008333333333333333, 0, 0.007727272727272728, 0, 0, 0.00275, 0.013833333333333335, 0.017416666666666667, 0.006083333333333333, 0.5646666666666667, 2.2251666666666665, 2.03375, 3.99725, 4.990083333333333, 3.0128333333333335, 2.4844166666666667, 1.378, 0.65975, 0, 0.001, 0.006916666666666667, 0.008166666666666666, 0, 0, 0, 0, 0, 0, 0, 0.004083333333333333, 0.010583333333333333, 0.011166666666666667, 1.261, 5.308833333333333, 6.604, 6.321166666666667, 6.488333333333333, 6.78425, 6.052083333333333, 2.5839166666666666, 0.529, 0.01616666666666667, 0.0055, 0, 0.0006666666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0024166666666666664, 0.0125, 0.7065, 5.835416666666667, 4.77025, 6.03925, 6.8445833333333335, 5.370333333333333, 4.490166666666667, 2.3506666666666667, 0.7650833333333333, 0.08583333333333333, 0.011454545454545455, 0, 0, 0.005666666666666667, 0, 0, 0, 0, 0, 0, 0, 0.0033333333333333335, 0.004083333333333333, 0.02033333333333333, 0.02316666666666667, 1.4106666666666667, 0.8588333333333333, 0.0015833333333333333, 0.006583333333333333, 0.010083333333333335, 0.3410833333333333, 2.9290833333333337, 1.1175833333333332, 0.48583333333333334, 0, 0, 0, 0.0006666666666666666, 0.017916666666666668, 0.004, 0, 0, 0.001, 0, 0, 0, 0.02358333333333333, 0.006416666666666667, 0.008166666666666666, 0.0031666666666666666, 0.009916666666666666, 2.7254166666666664, 1.83725, 2.63225, 2.2170833333333335, 0.529, 0, 0, 0, 0, 0, 0.0003333333333333333, 0, 0, 0.011416666666666665, 0.011083333333333334, 0, 0, 0, 0, 0.008333333333333333, 0.008818181818181819, 0.015333333333333334, 0.018857142857142857, 0.024833333333333332, 0.010888888888888889, 2.2174, 3.9214166666666666, 1.6248181818181817, 1.937, 1.789, 0.0195, 0.0143, 0, 0, 0.009, 0.018875]),
+ DATA("Bezug: 2,4 kWh", [0, 0.011916666666666666, 0.01633333333333333, 0.00609090909090909, 0.015333333333333334, 0.011666666666666665, 0.0024166666666666664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02425, 0.004416666666666667, 0.0035833333333333333, 0, 0, 0, 0.04441666666666667, 0, 0.013111111111111112, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0011666666666666668, 0, 0, 0, 0.0015833333333333333, 0.013333333333333334, 0.020416666666666666, 0.01125, 0.019727272727272725, 0.012444444444444445, 0.009583333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.007666666666666667, 0, 0.0023333333333333335, 0.0125, 0.01609090909090909, 0.02016666666666667, 0.014083333333333333, 0.006363636363636363, 0.01955555555555556, 0.04841666666666666, 0.011166666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.014222222222222221, 0.00225, 0, 0.0036666666666666666, 0.032916666666666664, 0.014666666666666666, 0.0135, 0.017363636363636362, 0.013333333333333334, 0.022083333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0009166666666666666, 0, 0.0021666666666666666, 0, 0, 0, 0.0005, 0.04841666666666666, 0, 0.005555555555555556, 0.02716666666666667, 0.017333333333333333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0023333333333333335, 0.008333333333333333, 0.003, 0.015916666666666666, 0.00325, 0, 0.004333333333333333, 0.001, 0, 0, 0.019545454545454546, 0.0017777777777777776, 0.006416666666666667, 0.017666666666666667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0058, 0.005625, 0, 0]),
],
labels: LABELS(History.WEEK.dataChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.MULTI_LINE_OPTIONS('day', 'line', {
- ['right']: { scale: { max: 1, min: 0 }, ticks: { stepSize: 1 } },
+ options: OeTester.ChartOptions.MULTI_LINE_OPTIONS("day", "line", {
+ ["right"]: { scale: { max: 1, min: 0 }, ticks: { stepSize: 1 } },
}),
},
}, false);
}
{
// Line - Chart
- expectView(edgeConfig, TEST_CONTEXT, 'bar', History.MONTH,
+ expectView(edgeConfig, TEST_CONTEXT, "bar", History.MONTH,
{
datasets: {
data: [
- DATA('Einspeisung: 12.738 kWh', [603, 590, 551, 572, 69, 236, 626, null, 1003, 261, 518, 698, 640, 388, 471, 373, 373, 677, 286, 406, 249, null, 446, 369, 558, null, 776, 425, 574, null]),
- DATA('Bezug: 773 kWh', [16, 6, 3, 3, 5, 48, 4, null, 5, 26, 17, 62, 8, 66, 13, 21, 4, 3, 18, 27, 29, null, 118, 85, 2, null, 72, 28, 84, null]),
+ DATA("Einspeisung: 12.738 kWh", [603, 590, 551, 572, 69, 236, 626, null, 1003, 261, 518, 698, 640, 388, 471, 373, 373, 677, 286, 406, 249, null, 446, 369, 558, null, 776, 425, 574, null]),
+ DATA("Bezug: 773 kWh", [16, 6, 3, 3, 5, 48, 4, null, 5, 26, 17, 62, 8, 66, 13, 21, 4, 3, 18, 27, 29, null, 118, 85, 2, null, 72, 28, 84, null]),
],
labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.MULTI_BAR_OPTIONS('day', 'bar', {
- ['right']: { scale: {}, ticks: { stepSize: 1 } },
+ options: OeTester.ChartOptions.MULTI_BAR_OPTIONS("day", "bar", {
+ ["right"]: { scale: {}, ticks: { stepSize: 1 } },
}),
},
@@ -92,16 +92,16 @@ describe('History Grid', () => {
}
{
// BAR - Chart
- expectView(edgeConfig, TEST_CONTEXT, 'bar', History.YEAR,
+ expectView(edgeConfig, TEST_CONTEXT, "bar", History.YEAR,
{
datasets: {
data: [
- DATA('Einspeisung: 30.703 kWh', [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
- DATA('Bezug: 23.209 kWh', [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
+ DATA("Einspeisung: 30.703 kWh", [20, 86, 677, 3657, 12839, 12738, 627, null, null, null, null, null]),
+ DATA("Bezug: 23.209 kWh", [9829, 4812, 2915, 2036, 2712, 773, 94, null, null, null, null, null]),
],
labels: LABELS(History.YEAR.energyPerPeriodChannelWithValues.result.timestamps),
- options: OeTester.ChartOptions.MULTI_BAR_OPTIONS('month', 'bar', {
- ['right']: { scale: {}, ticks: { stepSize: 1 } },
+ options: OeTester.ChartOptions.MULTI_BAR_OPTIONS("month", "bar", {
+ ["right"]: { scale: {}, ticks: { stepSize: 1 } },
}),
},
}, false);
diff --git a/ui/src/app/edge/history/common/grid/chart/chart.ts b/ui/src/app/edge/history/common/grid/chart/chart.ts
index 3198760bcb3..f195179022c 100644
--- a/ui/src/app/edge/history/common/grid/chart/chart.ts
+++ b/ui/src/app/edge/history/common/grid/chart/chart.ts
@@ -1,77 +1,77 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { BoxAnnotationOptions } from 'chartjs-plugin-annotation';
-import { GridSectionComponent } from 'src/app/edge/live/energymonitor/chart/section/grid.component';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, EdgeConfig } from 'src/app/shared/shared';
-import { ChartAnnotationState } from 'src/app/shared/type/general';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { BoxAnnotationOptions } from "chartjs-plugin-annotation";
+import { GridSectionComponent } from "src/app/edge/live/energymonitor/chart/section/grid.component";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+import { ChartAnnotationState } from "src/app/shared/type/general";
@Component({
- selector: 'gridchart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "gridchart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class ChartComponent extends AbstractHistoryChart {
- public static getChartData(config: EdgeConfig, chartType: 'line' | 'bar', translate: TranslateService, showPhases: boolean): HistoryUtils.ChartData {
+ public static getChartData(config: EdgeConfig, chartType: "line" | "bar", translate: TranslateService, showPhases: boolean): HistoryUtils.ChartData {
const input: HistoryUtils.InputChannel[] = [
{
- name: 'GridSell',
- powerChannel: ChannelAddress.fromString('_sum/GridActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/GridSellActiveEnergy'),
- ...(chartType === 'line' && { converter: HistoryUtils.ValueConverter.ONLY_NEGATIVE_AND_NEGATIVE_AS_POSITIVE }),
+ name: "GridSell",
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/GridSellActiveEnergy"),
+ ...(chartType === "line" && { converter: HistoryUtils.ValueConverter.ONLY_NEGATIVE_AND_NEGATIVE_AS_POSITIVE }),
},
{
- name: 'GridBuy',
- powerChannel: ChannelAddress.fromString('_sum/GridActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/GridBuyActiveEnergy'),
+ name: "GridBuy",
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/GridBuyActiveEnergy"),
converter: HistoryUtils.ValueConverter.NEGATIVE_AS_ZERO,
},
];
if (GridSectionComponent.isControllerEnabled(config, "Controller.Ess.Limiter14a")) {
input.push({
- name: 'Restriction',
- powerChannel: ChannelAddress.fromString('ctrlEssLimiter14a0/RestrictionMode'),
- energyChannel: ChannelAddress.fromString('ctrlEssLimiter14a0/CumulatedRestrictionTime'),
+ name: "Restriction",
+ powerChannel: ChannelAddress.fromString("ctrlEssLimiter14a0/RestrictionMode"),
+ energyChannel: ChannelAddress.fromString("ctrlEssLimiter14a0/CumulatedRestrictionTime"),
});
input.push({
- name: 'OffGrid',
- powerChannel: ChannelAddress.fromString('_sum/GridMode'),
- energyChannel: ChannelAddress.fromString('_sum/GridModeOffGridTime'),
+ name: "OffGrid",
+ powerChannel: ChannelAddress.fromString("_sum/GridMode"),
+ energyChannel: ChannelAddress.fromString("_sum/GridModeOffGridTime"),
});
}
if (showPhases) {
- ['L1', 'L2', 'L3'].forEach(phase => {
+ ["L1", "L2", "L3"].forEach(phase => {
input.push({
- name: 'GridActivePower' + phase,
- powerChannel: ChannelAddress.fromString('_sum/GridActivePower' + phase),
+ name: "GridActivePower" + phase,
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower" + phase),
});
});
}
const yAxes: HistoryUtils.yAxes[] = [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
+ unit: YAxisType.ENERGY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}];
if (GridSectionComponent.isControllerEnabled(config, "Controller.Ess.Limiter14a")) {
- yAxes.push((chartType === 'bar' ?
+ yAxes.push((chartType === "bar" ?
{
- unit: YAxisTitle.TIME,
- position: 'right',
+ unit: YAxisType.TIME,
+ position: "right",
yAxisId: ChartAxis.RIGHT,
displayGrid: false,
} :
{
- unit: YAxisTitle.RELAY,
- position: 'right',
+ unit: YAxisType.RELAY,
+ position: "right",
yAxisId: ChartAxis.RIGHT,
- customTitle: translate.instant('General.state'),
+ customTitle: translate.instant("General.state"),
displayGrid: false,
}
));
@@ -84,46 +84,46 @@ export class ChartComponent extends AbstractHistoryChart {
let restrictionData;
let offGridData;
- if (chartType === 'line') {
+ if (chartType === "line") {
// Convert values > 0 to 1 (=on)
- restrictionData = data['Restriction']?.map((value) => (value > 0 ? ChartAnnotationState.ON : ChartAnnotationState.OFF_HIDDEN));
+ restrictionData = data["Restriction"]?.map((value) => (value > 0 ? ChartAnnotationState.ON : ChartAnnotationState.OFF_HIDDEN));
// Off-Grid (=2) to on (=1)
- offGridData = data['OffGrid']?.map((value) => (value * 1000 > 1 ? ChartAnnotationState.ON : ChartAnnotationState.OFF_HIDDEN));
+ offGridData = data["OffGrid"]?.map((value) => (value * 1000 > 1 ? ChartAnnotationState.ON : ChartAnnotationState.OFF_HIDDEN));
} else {
- restrictionData = data['Restriction']?.map((value) => value * 1000);
- offGridData = data['OffGrid']?.map((value) => value * 1000);
+ restrictionData = data["Restriction"]?.map((value) => value * 1000);
+ offGridData = data["OffGrid"]?.map((value) => value * 1000);
}
const datasets: HistoryUtils.DisplayValue[] = [
{
- name: translate.instant('General.gridSellAdvanced'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data['_sum/GridSellActiveEnergy'] ?? null,
- converter: () => data['GridSell'],
- color: 'rgba(0,0,200)',
+ name: translate.instant("General.gridSellAdvanced"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data["_sum/GridSellActiveEnergy"] ?? null,
+ converter: () => data["GridSell"],
+ color: "rgba(0,0,200)",
stack: 1,
},
{
- name: translate.instant('General.gridBuyAdvanced'),
+ name: translate.instant("General.gridBuyAdvanced"),
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return energyValues?.result.data['_sum/GridBuyActiveEnergy'] ?? null;
+ return energyValues?.result.data["_sum/GridBuyActiveEnergy"] ?? null;
},
- converter: () => data['GridBuy'],
- color: 'rgb(0,0,0)',
+ converter: () => data["GridBuy"],
+ color: "rgb(0,0,0)",
stack: 0,
},
offGridData ? ({
- name: translate.instant('GRID_STATES.OFF_GRID'),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data['_sum/GridModeOffGridTime'],
+ name: translate.instant("GRID_STATES.OFF_GRID"),
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data["_sum/GridModeOffGridTime"],
converter: () => offGridData,
- color: 'rgb(139,0,0)',
+ color: "rgb(139,0,0)",
stack: 2,
custom: (
- chartType === 'line' ? {
- unit: YAxisTitle.RELAY,
- pluginType: 'box',
+ chartType === "line" ? {
+ unit: YAxisType.RELAY,
+ pluginType: "box",
annotations: getAnnotations(offGridData, labels),
} : {
- unit: YAxisTitle.TIME,
+ unit: YAxisType.TIME,
}
),
yAxisId: ChartAxis.RIGHT,
@@ -133,17 +133,17 @@ export class ChartComponent extends AbstractHistoryChart {
// Show the controller data only if the controller is enabled and there was at least one limitation set(=1) on the current day.
GridSectionComponent.isControllerEnabled(config, "Controller.Ess.Limiter14a") ? ({
name: translate.instant("GRID_STATES.RESTRICTION"),
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data['ctrlEssLimiter14a0/CumulatedRestrictionTime'],
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data["ctrlEssLimiter14a0/CumulatedRestrictionTime"],
converter: () => restrictionData,
- color: 'rgb(255, 165, 0)',
+ color: "rgb(255, 165, 0)",
stack: 2,
custom: (
- chartType === 'line' ? {
- unit: YAxisTitle.RELAY,
- pluginType: 'box',
+ chartType === "line" ? {
+ unit: YAxisType.RELAY,
+ pluginType: "box",
annotations: getAnnotations(restrictionData, labels),
} : {
- unit: YAxisTitle.TIME,
+ unit: YAxisType.TIME,
}
),
yAxisId: ChartAxis.RIGHT,
@@ -155,11 +155,11 @@ export class ChartComponent extends AbstractHistoryChart {
return datasets;
}
- ['L1', 'L2', 'L3'].forEach((phase, index) => {
+ ["L1", "L2", "L3"].forEach((phase, index) => {
datasets.push({
- name: 'Phase ' + phase,
- nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data['_sum/GridActivePower' + phase],
- converter: () => data['GridActivePower' + phase] ?? null,
+ name: "Phase " + phase,
+ nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => energyValues?.result.data["_sum/GridActivePower" + phase],
+ converter: () => data["GridActivePower" + phase] ?? null,
color: AbstractHistoryChart.phaseColors[index],
stack: 3,
});
@@ -168,7 +168,7 @@ export class ChartComponent extends AbstractHistoryChart {
return datasets;
},
tooltip: {
- formatNumber: '1.0-2',
+ formatNumber: "1.0-2",
},
yAxes: yAxes,
};
@@ -183,9 +183,9 @@ export class ChartComponent extends AbstractHistoryChart {
if (data) {
const limitationEpochs = getLimitationEpochs(data);
const restrictionAnnotations = limitationEpochs.map(e => ({
- type: 'box',
+ type: "box",
borderWidth: 1,
- xScaleID: 'x',
+ xScaleID: "x",
yMin: null,
yMax: null,
xMin: labels[e.start].toISOString(),
diff --git a/ui/src/app/edge/history/common/grid/details/chart/channels.spec.ts b/ui/src/app/edge/history/common/grid/details/chart/channels.spec.ts
new file mode 100644
index 00000000000..dda556efe21
--- /dev/null
+++ b/ui/src/app/edge/history/common/grid/details/chart/channels.spec.ts
@@ -0,0 +1,41 @@
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { QueryHistoricTimeseriesEnergyPerPeriodResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyPerPeriodResponse";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+
+
+export namespace History {
+
+ /**
+ * up to 288 datapoints (5 min aggregated values) from a
+ *
+ * {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}
+ * */
+ export const DAY: OeTester.Types.Channels = ({
+ energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
+ data: {},
+ }),
+ dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", {
+ data: {
+ "_sum/GridActivePower": [124, 0, null, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/GridActivePowerL1": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/GridActivePowerL2": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/GridActivePowerL3": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ },
+ timestamps: ["2023-07-02T22:00:00Z", "2023-07-02T22:05:00Z", "2023-07-02T22:10:00Z", "2023-07-02T22:15:00Z", "2023-07-02T22:20:00Z", "2023-07-02T22:25:00Z", "2023-07-02T22:30:00Z", "2023-07-02T22:35:00Z", "2023-07-02T22:40:00Z", "2023-07-02T22:45:00Z", "2023-07-02T22:50:00Z", "2023-07-02T22:55:00Z", "2023-07-02T23:00:00Z", "2023-07-02T23:05:00Z", "2023-07-02T23:10:00Z", "2023-07-02T23:15:00Z", "2023-07-02T23:20:00Z", "2023-07-02T23:25:00Z", "2023-07-02T23:30:00Z", "2023-07-02T23:35:00Z", "2023-07-02T23:40:00Z", "2023-07-02T23:45:00Z", "2023-07-02T23:50:00Z", "2023-07-02T23:55:00Z", "2023-07-03T00:00:00Z", "2023-07-03T00:05:00Z", "2023-07-03T00:10:00Z", "2023-07-03T00:15:00Z", "2023-07-03T00:20:00Z", "2023-07-03T00:25:00Z", "2023-07-03T00:30:00Z", "2023-07-03T00:35:00Z", "2023-07-03T00:40:00Z", "2023-07-03T00:45:00Z", "2023-07-03T00:50:00Z", "2023-07-03T00:55:00Z", "2023-07-03T01:00:00Z", "2023-07-03T01:05:00Z", "2023-07-03T01:10:00Z", "2023-07-03T01:15:00Z", "2023-07-03T01:20:00Z", "2023-07-03T01:25:00Z", "2023-07-03T01:30:00Z", "2023-07-03T01:35:00Z", "2023-07-03T01:40:00Z", "2023-07-03T01:45:00Z", "2023-07-03T01:50:00Z", "2023-07-03T01:55:00Z", "2023-07-03T02:00:00Z", "2023-07-03T02:05:00Z", "2023-07-03T02:10:00Z", "2023-07-03T02:15:00Z", "2023-07-03T02:20:00Z", "2023-07-03T02:25:00Z", "2023-07-03T02:30:00Z", "2023-07-03T02:35:00Z", "2023-07-03T02:40:00Z", "2023-07-03T02:45:00Z", "2023-07-03T02:50:00Z", "2023-07-03T02:55:00Z", "2023-07-03T03:00:00Z", "2023-07-03T03:05:00Z", "2023-07-03T03:10:00Z", "2023-07-03T03:15:00Z", "2023-07-03T03:20:00Z", "2023-07-03T03:25:00Z", "2023-07-03T03:30:00Z", "2023-07-03T03:35:00Z", "2023-07-03T03:40:00Z", "2023-07-03T03:45:00Z", "2023-07-03T03:50:00Z", "2023-07-03T03:55:00Z", "2023-07-03T04:00:00Z", "2023-07-03T04:05:00Z", "2023-07-03T04:10:00Z", "2023-07-03T04:15:00Z", "2023-07-03T04:20:00Z", "2023-07-03T04:25:00Z", "2023-07-03T04:30:00Z", "2023-07-03T04:35:00Z", "2023-07-03T04:40:00Z", "2023-07-03T04:45:00Z", "2023-07-03T04:50:00Z", "2023-07-03T04:55:00Z", "2023-07-03T05:00:00Z", "2023-07-03T05:05:00Z", "2023-07-03T05:10:00Z", "2023-07-03T05:15:00Z", "2023-07-03T05:20:00Z", "2023-07-03T05:25:00Z", "2023-07-03T05:30:00Z", "2023-07-03T05:35:00Z", "2023-07-03T05:40:00Z", "2023-07-03T05:45:00Z", "2023-07-03T05:50:00Z", "2023-07-03T05:55:00Z", "2023-07-03T06:00:00Z", "2023-07-03T06:05:00Z", "2023-07-03T06:10:00Z", "2023-07-03T06:15:00Z", "2023-07-03T06:20:00Z", "2023-07-03T06:25:00Z", "2023-07-03T06:30:00Z", "2023-07-03T06:35:00Z", "2023-07-03T06:40:00Z", "2023-07-03T06:45:00Z", "2023-07-03T06:50:00Z", "2023-07-03T06:55:00Z", "2023-07-03T07:00:00Z", "2023-07-03T07:05:00Z", "2023-07-03T07:10:00Z", "2023-07-03T07:15:00Z", "2023-07-03T07:20:00Z", "2023-07-03T07:25:00Z", "2023-07-03T07:30:00Z", "2023-07-03T07:35:00Z", "2023-07-03T07:40:00Z", "2023-07-03T07:45:00Z", "2023-07-03T07:50:00Z", "2023-07-03T07:55:00Z", "2023-07-03T08:00:00Z", "2023-07-03T08:05:00Z", "2023-07-03T08:10:00Z", "2023-07-03T08:15:00Z", "2023-07-03T08:20:00Z", "2023-07-03T08:25:00Z", "2023-07-03T08:30:00Z", "2023-07-03T08:35:00Z", "2023-07-03T08:40:00Z", "2023-07-03T08:45:00Z", "2023-07-03T08:50:00Z", "2023-07-03T08:55:00Z", "2023-07-03T09:00:00Z", "2023-07-03T09:05:00Z", "2023-07-03T09:10:00Z", "2023-07-03T09:15:00Z", "2023-07-03T09:20:00Z", "2023-07-03T09:25:00Z", "2023-07-03T09:30:00Z", "2023-07-03T09:35:00Z", "2023-07-03T09:40:00Z", "2023-07-03T09:45:00Z", "2023-07-03T09:50:00Z", "2023-07-03T09:55:00Z", "2023-07-03T10:00:00Z", "2023-07-03T10:05:00Z", "2023-07-03T10:10:00Z", "2023-07-03T10:15:00Z", "2023-07-03T10:20:00Z", "2023-07-03T10:25:00Z", "2023-07-03T10:30:00Z", "2023-07-03T10:35:00Z", "2023-07-03T10:40:00Z", "2023-07-03T10:45:00Z", "2023-07-03T10:50:00Z", "2023-07-03T10:55:00Z", "2023-07-03T11:00:00Z", "2023-07-03T11:05:00Z", "2023-07-03T11:10:00Z", "2023-07-03T11:15:00Z", "2023-07-03T11:20:00Z", "2023-07-03T11:25:00Z", "2023-07-03T11:30:00Z", "2023-07-03T11:35:00Z", "2023-07-03T11:40:00Z", "2023-07-03T11:45:00Z", "2023-07-03T11:50:00Z", "2023-07-03T11:55:00Z", "2023-07-03T12:00:00Z", "2023-07-03T12:05:00Z", "2023-07-03T12:10:00Z", "2023-07-03T12:15:00Z", "2023-07-03T12:20:00Z", "2023-07-03T12:25:00Z", "2023-07-03T12:30:00Z", "2023-07-03T12:35:00Z", "2023-07-03T12:40:00Z", "2023-07-03T12:45:00Z", "2023-07-03T12:50:00Z", "2023-07-03T12:55:00Z", "2023-07-03T13:00:00Z", "2023-07-03T13:05:00Z", "2023-07-03T13:10:00Z", "2023-07-03T13:15:00Z", "2023-07-03T13:20:00Z", "2023-07-03T13:25:00Z", "2023-07-03T13:30:00Z", "2023-07-03T13:35:00Z", "2023-07-03T13:40:00Z", "2023-07-03T13:45:00Z", "2023-07-03T13:50:00Z", "2023-07-03T13:55:00Z", "2023-07-03T14:00:00Z", "2023-07-03T14:05:00Z", "2023-07-03T14:10:00Z", "2023-07-03T14:15:00Z", "2023-07-03T14:20:00Z", "2023-07-03T14:25:00Z", "2023-07-03T14:30:00Z", "2023-07-03T14:35:00Z", "2023-07-03T14:40:00Z", "2023-07-03T14:45:00Z", "2023-07-03T14:50:00Z", "2023-07-03T14:55:00Z", "2023-07-03T15:00:00Z", "2023-07-03T15:05:00Z", "2023-07-03T15:10:00Z", "2023-07-03T15:15:00Z", "2023-07-03T15:20:00Z", "2023-07-03T15:25:00Z", "2023-07-03T15:30:00Z", "2023-07-03T15:35:00Z", "2023-07-03T15:40:00Z", "2023-07-03T15:45:00Z", "2023-07-03T15:50:00Z", "2023-07-03T15:55:00Z", "2023-07-03T16:00:00Z", "2023-07-03T16:05:00Z", "2023-07-03T16:10:00Z", "2023-07-03T16:15:00Z", "2023-07-03T16:20:00Z", "2023-07-03T16:25:00Z", "2023-07-03T16:30:00Z", "2023-07-03T16:35:00Z", "2023-07-03T16:40:00Z", "2023-07-03T16:45:00Z", "2023-07-03T16:50:00Z", "2023-07-03T16:55:00Z", "2023-07-03T17:00:00Z", "2023-07-03T17:05:00Z", "2023-07-03T17:10:00Z", "2023-07-03T17:15:00Z", "2023-07-03T17:20:00Z", "2023-07-03T17:25:00Z", "2023-07-03T17:30:00Z", "2023-07-03T17:35:00Z", "2023-07-03T17:40:00Z", "2023-07-03T17:45:00Z", "2023-07-03T17:50:00Z", "2023-07-03T17:55:00Z", "2023-07-03T18:00:00Z", "2023-07-03T18:05:00Z", "2023-07-03T18:10:00Z", "2023-07-03T18:15:00Z", "2023-07-03T18:20:00Z", "2023-07-03T18:25:00Z", "2023-07-03T18:30:00Z", "2023-07-03T18:35:00Z", "2023-07-03T18:40:00Z", "2023-07-03T18:45:00Z", "2023-07-03T18:50:00Z", "2023-07-03T18:55:00Z", "2023-07-03T19:00:00Z", "2023-07-03T19:05:00Z", "2023-07-03T19:10:00Z", "2023-07-03T19:15:00Z", "2023-07-03T19:20:00Z", "2023-07-03T19:25:00Z", "2023-07-03T19:30:00Z", "2023-07-03T19:35:00Z", "2023-07-03T19:40:00Z", "2023-07-03T19:45:00Z", "2023-07-03T19:50:00Z", "2023-07-03T19:55:00Z", "2023-07-03T20:00:00Z", "2023-07-03T20:05:00Z", "2023-07-03T20:10:00Z", "2023-07-03T20:15:00Z", "2023-07-03T20:20:00Z", "2023-07-03T20:25:00Z", "2023-07-03T20:30:00Z", "2023-07-03T20:35:00Z", "2023-07-03T20:40:00Z", "2023-07-03T20:45:00Z", "2023-07-03T20:50:00Z", "2023-07-03T20:55:00Z", "2023-07-03T21:00:00Z", "2023-07-03T21:05:00Z", "2023-07-03T21:10:00Z", "2023-07-03T21:15:00Z", "2023-07-03T21:20:00Z", "2023-07-03T21:25:00Z", "2023-07-03T21:30:00Z", "2023-07-03T21:35:00Z", "2023-07-03T21:40:00Z", "2023-07-03T21:45:00Z", "2023-07-03T21:50:00Z", "2023-07-03T21:55:00Z"],
+ }),
+ });
+
+ /**
+ * up to 31 datapoints(1 day values) from a {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}*/
+ export const MONTH: OeTester.Types.Channels = {
+ energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
+ data: {},
+ }),
+ energyPerPeriodChannelWithValues:
+ new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", {
+ data: {},
+ timestamps: [],
+ }),
+ };
+}
diff --git a/ui/src/app/edge/history/common/grid/details/chart/chart.spec.ts b/ui/src/app/edge/history/common/grid/details/chart/chart.spec.ts
new file mode 100644
index 00000000000..286718266cf
--- /dev/null
+++ b/ui/src/app/edge/history/common/grid/details/chart/chart.spec.ts
@@ -0,0 +1,58 @@
+// @ts-strict-ignore
+import { ActivatedRoute } from "@angular/router";
+import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
+import { removeFunctions, sharedSetupWithComponentIdRoute, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
+import { EdgeConfig } from "src/app/shared/shared";
+import { DATA, LABELS } from "../../../energy/chart/chart.constants.spec";
+import { History } from "./channels.spec";
+import { ChartComponent } from "./chart";
+
+describe("History Grid Details - _sum", () => {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.SUM("_sum"),
+ );
+
+ let TEST_CONTEXT: TestContext & { route: ActivatedRoute };
+ beforeEach(async () => {
+ TEST_CONTEXT = await sharedSetupWithComponentIdRoute("_sum");
+ });
+
+ it("#getChartData()", () => {
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L1", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L2", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L3", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ ],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("hour", "bar", {}),
+ },
+ });
+ }
+ });
+});
+
+export function expectView(config: EdgeConfig, testContext: TestContext & { route: ActivatedRoute }, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+ expect(removeFunctions(OeChartTester
+ .apply(ChartComponent
+ .getChartData(
+ testContext.translate), chartType, channels, testContext, config)))
+ .toEqual(removeFunctions(view));
+}
diff --git a/ui/src/app/edge/history/common/grid/details/chart/chart.ts b/ui/src/app/edge/history/common/grid/details/chart/chart.ts
new file mode 100644
index 00000000000..c941630eb8a
--- /dev/null
+++ b/ui/src/app/edge/history/common/grid/details/chart/chart.ts
@@ -0,0 +1,65 @@
+// @ts-strict-ignore
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { Phase } from "src/app/shared/components/shared/phase";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress } from "src/app/shared/shared";
+
+@Component({
+ selector: "gridDetailsChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class ChartComponent extends AbstractHistoryChart {
+
+ public static getChartData(translate: TranslateService): HistoryUtils.ChartData {
+ return {
+ input: [
+ {
+ name: "GridActivePower",
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower"),
+ },
+ ...Phase.THREE_PHASE.map((phase, index) => ({
+ name: "Phase" + phase,
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower" + phase),
+ })),
+ ],
+ output: (data: DefaultTypes.History.ChannelData) => {
+
+ const datasets: DefaultTypes.History.DisplayValues[] =
+ [
+ {
+ name: translate.instant("General.TOTAL"),
+ converter: () => {
+ return data["GridActivePower"];
+ },
+ color: "rgba(0,0,200)",
+ stack: 1,
+ },
+ ...Phase.THREE_PHASE.map((phase, index) => ({
+ name: "Phase " + phase,
+ converter: () => {
+ return data["Phase" + phase];
+ },
+ color: AbstractHistoryChart.phaseColors[index],
+ })),
+ ];
+
+ return datasets;
+ },
+ tooltip: {
+ formatNumber: "1.0-2",
+ },
+ yAxes: [{
+ unit: YAxisType.ENERGY,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+ }
+
+ public override getChartData() {
+ return ChartComponent.getChartData(this.translate);
+ }
+}
diff --git a/ui/src/app/edge/history/common/grid/details/details.overview.html b/ui/src/app/edge/history/common/grid/details/details.overview.html
new file mode 100644
index 00000000000..1bba13ab767
--- /dev/null
+++ b/ui/src/app/edge/history/common/grid/details/details.overview.html
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/ui/src/app/edge/history/common/grid/details/details.overview.ts b/ui/src/app/edge/history/common/grid/details/details.overview.ts
new file mode 100644
index 00000000000..179c6ca5ce5
--- /dev/null
+++ b/ui/src/app/edge/history/common/grid/details/details.overview.ts
@@ -0,0 +1,40 @@
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
+import { NavigationOption } from "src/app/shared/components/footer/subnavigation/footerNavigation";
+import { Service } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
+
+@Component({
+ templateUrl: "./details.overview.html",
+})
+export class DetailsOverviewComponent extends AbstractHistoryChartOverview {
+ protected navigationButtons: NavigationOption[] = [];
+
+ constructor(
+ public override service: Service,
+ protected override route: ActivatedRoute,
+ public override modalCtrl: ModalController,
+ private router: Router,
+ private translate: TranslateService,
+ ) {
+ super(service, route, modalCtrl);
+ }
+
+ protected override afterIsInitialized() {
+ this.service.getCurrentEdge().then(edge => {
+
+ const gridMeter = Object.values(this.config.components)
+ .find((component) => component.isEnabled && this.config.isTypeGrid(component)) ?? null;
+
+ if (!gridMeter) {
+ return;
+ }
+
+ this.navigationButtons = [
+ { id: "currentVoltage", isEnabled: edge.roleIsAtLeast(Role.INSTALLER), alias: this.translate.instant("Edge.History.CURRENT_AND_VOLTAGE"), callback: () => { this.router.navigate([`../${gridMeter.id}/currentVoltage`], { relativeTo: this.route }); } }];
+ });
+ }
+}
diff --git a/ui/src/app/edge/history/common/grid/flat/flat.html b/ui/src/app/edge/history/common/grid/flat/flat.html
index b3b81f12c25..8a23fd9c1b3 100644
--- a/ui/src/app/edge/history/common/grid/flat/flat.html
+++ b/ui/src/app/edge/history/common/grid/flat/flat.html
@@ -1,16 +1,16 @@
- 0" [name]="'GRID_STATES.OFF_GRID' | translate" channelAddress="_sum/GridModeOffGridTime"
- [converter]="TIME_CONVERTER">
-
- 0" [name]="'GRID_STATES.RESTRICTION' | translate" channelAddress="ctrlEssLimiter14a0/CumulatedRestrictionTime"
- [converter]="TIME_CONVERTER">
-
- 0 || offGridTime > 0 ">
+ [title]="'General.grid' | translate" *ngIf="isInitialized">
+ 0" [name]="'GRID_STATES.OFF_GRID' | translate"
+ channelAddress="_sum/GridModeOffGridTime" [converter]="TIME_CONVERTER">
+
+ 0" [name]="'GRID_STATES.RESTRICTION' | translate"
+ channelAddress="ctrlEssLimiter14a0/CumulatedRestrictionTime" [converter]="TIME_CONVERTER">
+
+ 0 || offGridTime > 0 ">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/grid/flat/flat.ts b/ui/src/app/edge/history/common/grid/flat/flat.ts
index 4d622e9ab7b..bb7d272b6cf 100644
--- a/ui/src/app/edge/history/common/grid/flat/flat.ts
+++ b/ui/src/app/edge/history/common/grid/flat/flat.ts
@@ -1,18 +1,18 @@
-import { Component } from '@angular/core';
-import { GridSectionComponent } from 'src/app/edge/live/energymonitor/chart/section/grid.component';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData } from 'src/app/shared/shared';
-import { TimeUtils } from 'src/app/shared/utils/time/timeutils';
+import { Component } from "@angular/core";
+import { GridSectionComponent } from "src/app/edge/live/energymonitor/chart/section/grid.component";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData } from "src/app/shared/shared";
+import { TimeUtils } from "src/app/shared/utils/time/timeutils";
@Component({
- selector: 'gridWidget',
- templateUrl: './flat.html',
+ selector: "gridWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
- private static readonly RESTRICTION_MODE: ChannelAddress = new ChannelAddress('ctrlEssLimiter14a0', 'RestrictionMode');
- private static readonly RESTRICTION_TIME: ChannelAddress = new ChannelAddress('ctrlEssLimiter14a0', 'CumulatedRestrictionTime');
- private static readonly OFF_GRID_TIME: ChannelAddress = new ChannelAddress('_sum', 'GridModeOffGridTime');
+ private static readonly RESTRICTION_MODE: ChannelAddress = new ChannelAddress("ctrlEssLimiter14a0", "RestrictionMode");
+ private static readonly RESTRICTION_TIME: ChannelAddress = new ChannelAddress("ctrlEssLimiter14a0", "CumulatedRestrictionTime");
+ private static readonly OFF_GRID_TIME: ChannelAddress = new ChannelAddress("_sum", "GridModeOffGridTime");
protected restrictionTime: number | null = null;
protected offGridTime: number | null = null;
diff --git a/ui/src/app/edge/history/common/grid/grid.ts b/ui/src/app/edge/history/common/grid/grid.ts
index 85814e76c9f..2957572d7f9 100644
--- a/ui/src/app/edge/history/common/grid/grid.ts
+++ b/ui/src/app/edge/history/common/grid/grid.ts
@@ -1,25 +1,34 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-
-import { ChartComponent } from './chart/chart';
-import { FlatComponent } from './flat/flat';
-import { OverviewComponent } from './overview/overview';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { FooterNavigationModule } from "src/app/shared/components/footer/subnavigation/footerNavigation.module";
+import { SharedModule } from "src/app/shared/shared.module";
+import { ChartComponent } from "./chart/chart";
+import { ChartComponent as DetailsChartComponent } from "./details/chart/chart";
+import { DetailsOverviewComponent } from "./details/details.overview";
+import { FlatComponent } from "./flat/flat";
+import { OverviewComponent } from "./overview/overview";
@NgModule({
imports: [
BrowserModule,
+ FooterNavigationModule,
SharedModule,
],
declarations: [
FlatComponent,
ChartComponent,
OverviewComponent,
+
+ DetailsChartComponent,
+ DetailsOverviewComponent,
],
exports: [
FlatComponent,
ChartComponent,
OverviewComponent,
+
+ DetailsChartComponent,
+ DetailsOverviewComponent,
],
})
export class Common_Grid { }
diff --git a/ui/src/app/edge/history/common/grid/overview/overview.html b/ui/src/app/edge/history/common/grid/overview/overview.html
index 73ac2d72a13..71e464fef64 100644
--- a/ui/src/app/edge/history/common/grid/overview/overview.html
+++ b/ui/src/app/edge/history/common/grid/overview/overview.html
@@ -2,4 +2,5 @@
*ngIf="isInitialized" [period]="service.historyPeriod">
-
\ No newline at end of file
+
+
diff --git a/ui/src/app/edge/history/common/grid/overview/overview.ts b/ui/src/app/edge/history/common/grid/overview/overview.ts
index a3f812c1a88..b99f248ebf5 100644
--- a/ui/src/app/edge/history/common/grid/overview/overview.ts
+++ b/ui/src/app/edge/history/common/grid/overview/overview.ts
@@ -1,7 +1,47 @@
-import { Component } from '@angular/core';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
+import { NavigationOption } from "src/app/shared/components/footer/subnavigation/footerNavigation";
+import { EdgeConfig, Service } from "src/app/shared/shared";
@Component({
- templateUrl: './overview.html',
+ templateUrl: "./overview.html",
})
-export class OverviewComponent extends AbstractHistoryChartOverview { }
+export class OverviewComponent extends AbstractHistoryChartOverview {
+ protected navigationButtons: NavigationOption[] = [];
+
+ constructor(
+ public override service: Service,
+ protected override route: ActivatedRoute,
+ public override modalCtrl: ModalController,
+ private router: Router,
+ private translate: TranslateService,
+ ) {
+ super(service, route, modalCtrl);
+ }
+
+ protected override afterIsInitialized() {
+
+ const sum: EdgeConfig.Component = this.config.getComponent("_sum");
+ sum.alias = this.translate.instant("General.TOTAL");
+ const navigationButtons: EdgeConfig.Component[] = [];
+ const gridMeters = Object.values(this.config.components)
+ .filter((component) => component.isEnabled && this.config.isTypeGrid(component));
+
+ if (!gridMeters) {
+ navigationButtons.push(sum);
+ }
+
+ if (gridMeters?.length <= 1) {
+ navigationButtons.push(sum);
+ } else {
+ navigationButtons.push(...gridMeters);
+ }
+
+ this.navigationButtons = navigationButtons.map(el => (
+ { id: el.id, alias: el.alias, callback: () => { this.router.navigate(["./" + el.id], { relativeTo: this.route }); } }
+ ));
+ }
+}
diff --git a/ui/src/app/edge/history/common/production/chart/chargerChart.ts b/ui/src/app/edge/history/common/production/chart/chargerChart.ts
deleted file mode 100644
index 9ce42c52677..00000000000
--- a/ui/src/app/edge/history/common/production/chart/chargerChart.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-
-import { ChannelAddress } from '../../../../../shared/shared';
-
-@Component({
- selector: 'productionChargerChart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
-})
-export class ChargerChartComponent extends AbstractHistoryChart {
-
- protected override getChartData(): HistoryUtils.ChartData {
- return {
- input: [{
- name: 'ActualPower',
- powerChannel: ChannelAddress.fromString(this.component.id + '/ActualPower'),
- energyChannel: ChannelAddress.fromString(this.component.id + '/ActualEnergy'),
- converter: (data) => data != null ? data : null,
- }],
- output: (data: HistoryUtils.ChannelData) => {
- return [
- {
- name: this.translate.instant('General.production'),
- converter: () => { return data['ActualPower']; },
- nameSuffix: (energyResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyResponse.result.data[this.component.id + '/ActualEnergy'];
- },
- color: 'rgb(0,152,204)',
- },
- ];
- },
- tooltip: {
- formatNumber: '1.1-2',
- },
- yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
- yAxisId: ChartAxis.LEFT,
- }],
- };
- }
-}
diff --git a/ui/src/app/edge/history/common/production/chart/productionMeterChart.ts b/ui/src/app/edge/history/common/production/chart/productionMeterChart.ts
index b083189112a..3d65f4a0ce3 100644
--- a/ui/src/app/edge/history/common/production/chart/productionMeterChart.ts
+++ b/ui/src/app/edge/history/common/production/chart/productionMeterChart.ts
@@ -1,23 +1,23 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
+import { Component } from "@angular/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
-import { ChannelAddress } from '../../../../../shared/shared';
+import { ChannelAddress } from "../../../../../shared/shared";
/** Will be used in the Future again */
@Component({
- selector: 'productionMeterchart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "productionMeterchart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class ProductionMeterChartComponent extends AbstractHistoryChart {
protected override getChartData(): HistoryUtils.ChartData {
const channels: HistoryUtils.InputChannel[] = [{
- name: 'ActivePower',
- powerChannel: ChannelAddress.fromString(this.component.id + '/ActivePower'),
- energyChannel: ChannelAddress.fromString(this.component.id + '/ActiveProductionEnergy'),
+ name: "ActivePower",
+ powerChannel: ChannelAddress.fromString(this.component.id + "/ActivePower"),
+ energyChannel: ChannelAddress.fromString(this.component.id + "/ActiveProductionEnergy"),
converter: (data) => data != null ? data : null,
},
];
@@ -25,9 +25,9 @@ export class ProductionMeterChartComponent extends AbstractHistoryChart {
// Phase 1 to 3
for (let i = 1; i < 4; i++) {
channels.push({
- name: 'ActivePowerL' + i,
- powerChannel: ChannelAddress.fromString(this.component.id + '/ActivePowerL' + i),
- energyChannel: ChannelAddress.fromString(this.component.id + '/ActiveProductionEnergyL' + i),
+ name: "ActivePowerL" + i,
+ powerChannel: ChannelAddress.fromString(this.component.id + "/ActivePowerL" + i),
+ energyChannel: ChannelAddress.fromString(this.component.id + "/ActiveProductionEnergyL" + i),
});
}
return {
@@ -35,14 +35,14 @@ export class ProductionMeterChartComponent extends AbstractHistoryChart {
output: (data: HistoryUtils.ChannelData) => {
const datasets: HistoryUtils.DisplayValue[] = [];
datasets.push({
- name: this.translate.instant('General.production'),
+ name: this.translate.instant("General.production"),
nameSuffix: (energyPeriodResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyPeriodResponse?.result.data[this.component.id + '/ActiveProductionEnergy'] ?? null;
+ return energyPeriodResponse?.result.data[this.component.id + "/ActiveProductionEnergy"] ?? null;
},
converter: () => {
- return data['ActivePower'];
+ return data["ActivePower"];
},
- color: 'rgb(0,152,204)',
+ color: "rgb(0,152,204)",
});
if (this.showPhases) {
@@ -51,7 +51,7 @@ export class ProductionMeterChartComponent extends AbstractHistoryChart {
datasets.push({
name: "Erzeugung Phase L" + i,
converter: () => {
- return data['ActivePowerL' + i] ?? null;
+ return data["ActivePowerL" + i] ?? null;
},
color: AbstractHistoryChart.phaseColors[i - 1],
});
@@ -60,13 +60,14 @@ export class ProductionMeterChartComponent extends AbstractHistoryChart {
return datasets;
},
tooltip: {
- formatNumber: '1.1-2',
+ formatNumber: "1.1-2",
},
yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
+ unit: YAxisType.ENERGY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}],
};
}
}
+
diff --git a/ui/src/app/edge/history/common/production/chart/totalAcChart.ts b/ui/src/app/edge/history/common/production/chart/totalAcChart.ts
deleted file mode 100644
index 78311cd0bfb..00000000000
--- a/ui/src/app/edge/history/common/production/chart/totalAcChart.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-
-import { ChannelAddress } from '../../../../../shared/shared';
-
-@Component({
- selector: 'productionTotalAcChart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
-})
-export class TotalAcChartComponent extends AbstractHistoryChart {
-
- protected override getChartData(): HistoryUtils.ChartData {
- return {
- input:
- [
- {
- name: 'ProductionAcActivePower',
- powerChannel: ChannelAddress.fromString('_sum/ProductionAcActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/ProductionAcActiveEnergy'),
- },
- {
- name: 'ProductionAcActivePowerL1',
- powerChannel: ChannelAddress.fromString('_sum/ProductionAcActivePowerL1'),
- },
- {
- name: 'ProductionAcActivePowerL2',
- powerChannel: ChannelAddress.fromString('_sum/ProductionAcActivePowerL2'),
- },
- {
- name: 'ProductionAcActivePowerL3',
- powerChannel: ChannelAddress.fromString('_sum/ProductionAcActivePowerL3'),
- },
- ],
- output: (data: HistoryUtils.ChannelData) => {
- const datasets: HistoryUtils.DisplayValue[] = [];
-
- datasets.push({
- name: this.translate.instant("General.TOTAL"),
- nameSuffix: (energyPeriodResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyPeriodResponse.result.data['_sum/ProductionAcActiveEnergy'] ?? null;
- },
- converter: () => {
- return data['ProductionAcActivePower'];
- },
- color: "rgb(0,152,204)",
- stack: 0,
- });
-
- for (let i = 1; i < 4; i++) {
- datasets.push({
- name: "Phase L" + i,
- converter: () => {
- if (!this.showPhases) {
- return null;
- }
- return data['ProductionAcActivePowerL' + i] ?? null;
- },
- color: 'rgb(' + AbstractHistoryChart.phaseColors[i - 1] + ')',
- });
- }
-
- return datasets;
- },
- tooltip: {
- formatNumber: '1.1-2',
- },
- yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
- yAxisId: ChartAxis.LEFT,
- }],
- };
- }
-}
diff --git a/ui/src/app/edge/history/common/production/chart/totalChart.ts b/ui/src/app/edge/history/common/production/chart/totalChart.ts
index 1e0c6110d3d..9c54d688961 100644
--- a/ui/src/app/edge/history/common/production/chart/totalChart.ts
+++ b/ui/src/app/edge/history/common/production/chart/totalChart.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
+import { Component } from "@angular/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
-import { ChartAxis, HistoryUtils, Utils, YAxisTitle } from '../../../../../shared/service/utils';
-import { ChannelAddress } from '../../../../../shared/shared';
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "../../../../../shared/service/utils";
+import { ChannelAddress } from "../../../../../shared/shared";
@Component({
- selector: 'productionTotalChart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "productionTotalChart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class TotalChartComponent extends AbstractHistoryChart {
@@ -26,17 +26,17 @@ export class TotalChartComponent extends AbstractHistoryChart {
const chargerComponents = this.config.getComponentsImplementingNature("io.openems.edge.ess.dccharger.api.EssDcCharger");
const channels: HistoryUtils.InputChannel[] = [{
- name: 'ProductionActivePower',
- powerChannel: ChannelAddress.fromString('_sum/ProductionActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/ProductionActiveEnergy'),
+ name: "ProductionActivePower",
+ powerChannel: ChannelAddress.fromString("_sum/ProductionActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/ProductionActiveEnergy"),
}];
// If at least one charger
if (chargerComponents.length > 0) {
channels.push({
- name: 'ProductionDcActualPower',
- powerChannel: ChannelAddress.fromString('_sum/ProductionDcActualPower'),
- energyChannel: ChannelAddress.fromString('_sum/ProductionDcActiveEnergy'),
+ name: "ProductionDcActualPower",
+ powerChannel: ChannelAddress.fromString("_sum/ProductionDcActualPower"),
+ energyChannel: ChannelAddress.fromString("_sum/ProductionDcActiveEnergy"),
});
}
@@ -44,32 +44,32 @@ export class TotalChartComponent extends AbstractHistoryChart {
if (this.showPhases) {
channels.push(
{
- name: 'ProductionAcActivePowerL1',
- powerChannel: ChannelAddress.fromString('_sum/ProductionAcActivePowerL1'),
+ name: "ProductionAcActivePowerL1",
+ powerChannel: ChannelAddress.fromString("_sum/ProductionAcActivePowerL1"),
},
{
- name: 'ProductionAcActivePowerL2',
- powerChannel: ChannelAddress.fromString('_sum/ProductionAcActivePowerL2'),
+ name: "ProductionAcActivePowerL2",
+ powerChannel: ChannelAddress.fromString("_sum/ProductionAcActivePowerL2"),
},
{
- name: 'ProductionAcActivePowerL3',
- powerChannel: ChannelAddress.fromString('_sum/ProductionAcActivePowerL3'),
+ name: "ProductionAcActivePowerL3",
+ powerChannel: ChannelAddress.fromString("_sum/ProductionAcActivePowerL3"),
});
}
for (const component of productionMeterComponents) {
channels.push({
name: component.id,
- powerChannel: ChannelAddress.fromString(component.id + '/ActivePower'),
- energyChannel: ChannelAddress.fromString(component.id + '/ActiveProductionEnergy'),
+ powerChannel: ChannelAddress.fromString(component.id + "/ActivePower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActiveProductionEnergy"),
});
}
for (const component of chargerComponents) {
channels.push({
name: component.id,
- powerChannel: ChannelAddress.fromString(component.id + '/ActualPower'),
- energyChannel: ChannelAddress.fromString(component.id + '/ActualEnergy'),
+ powerChannel: ChannelAddress.fromString(component.id + "/ActualPower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActualEnergy"),
});
}
@@ -78,14 +78,14 @@ export class TotalChartComponent extends AbstractHistoryChart {
output: (data: HistoryUtils.ChannelData) => {
const datasets: HistoryUtils.DisplayValue[] = [];
datasets.push({
- name: this.showTotal == false ? this.translate.instant('General.production') : this.translate.instant('General.TOTAL'),
+ name: this.showTotal == false ? this.translate.instant("General.production") : this.translate.instant("General.TOTAL"),
nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyQueryResponse?.result.data['_sum/ProductionActiveEnergy'] ?? null;
+ return energyQueryResponse?.result.data["_sum/ProductionActiveEnergy"] ?? null;
},
converter: () => {
- return data['ProductionActivePower'];
+ return data["ProductionActivePower"];
},
- color: 'rgb(0,152,204)',
+ color: "rgb(0,152,204)",
hiddenOnInit: true,
stack: 2,
});
@@ -98,7 +98,7 @@ export class TotalChartComponent extends AbstractHistoryChart {
datasets.push({
name: "Phase L" + i,
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return energyValues.result.data['_sum/ProductionAcActiveEnergyL' + i];
+ return energyValues.result.data["_sum/ProductionAcActiveEnergyL" + i];
},
converter: () => {
if (!this.showPhases) {
@@ -108,27 +108,27 @@ export class TotalChartComponent extends AbstractHistoryChart {
let effectiveProduction = [];
if (this.config.getComponentsImplementingNature("io.openems.edge.ess.dccharger.api.EssDcCharger").length > 0) {
- data['ProductionDcActualPower'].forEach((value, index) => {
- effectiveProduction[index] = Utils.addSafely(data['ProductionAcActivePowerL' + i][index], value / 3);
+ data["ProductionDcActualPower"].forEach((value, index) => {
+ effectiveProduction[index] = Utils.addSafely(data["ProductionAcActivePowerL" + i][index], value / 3);
});
} else if (this.config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter").length > 0) {
- effectiveProduction = data['ProductionAcActivePowerL' + i];
+ effectiveProduction = data["ProductionAcActivePowerL" + i];
}
return effectiveProduction;
},
- color: 'rgb(' + AbstractHistoryChart.phaseColors[i - 1] + ')',
+ color: "rgb(" + AbstractHistoryChart.phaseColors[i - 1] + ")",
stack: 3,
});
}
// ProductionMeters
- const productionMeterColors: string[] = ['rgb(253,197,7)', 'rgb(202, 158, 6', 'rgb(228, 177, 6)', 'rgb(177, 138, 5)', 'rgb(152, 118, 4)'];
+ const productionMeterColors: string[] = ["rgb(253,197,7)", "rgb(202, 158, 6", "rgb(228, 177, 6)", "rgb(177, 138, 5)", "rgb(152, 118, 4)"];
for (let i = 0; i < productionMeterComponents.length; i++) {
const component = productionMeterComponents[i];
datasets.push({
name: component.alias ?? component.id,
nameSuffix: (energyResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyResponse.result.data[component.id + '/ActiveProductionEnergy'] ?? null;
+ return energyResponse.result.data[component.id + "/ActiveProductionEnergy"] ?? null;
},
converter: () => {
return data[component.id] ?? null;
@@ -138,14 +138,14 @@ export class TotalChartComponent extends AbstractHistoryChart {
});
}
- const chargerColors: string[] = ['rgb(0,223,0)', 'rgb(0,178,0)', 'rgb(0,201,0)', 'rgb(0,134,0)', 'rgb(0,156,0)'];
+ const chargerColors: string[] = ["rgb(0,223,0)", "rgb(0,178,0)", "rgb(0,201,0)", "rgb(0,134,0)", "rgb(0,156,0)"];
// ChargerComponents
for (let i = 0; i < chargerComponents.length; i++) {
const component = chargerComponents[i];
datasets.push({
name: component.alias ?? component.id,
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return energyValues.result.data[new ChannelAddress(component.id, 'ActualEnergy').toString()];
+ return energyValues.result.data[new ChannelAddress(component.id, "ActualEnergy").toString()];
},
converter: () => {
return data[component.id] ?? null;
@@ -157,17 +157,16 @@ export class TotalChartComponent extends AbstractHistoryChart {
return datasets;
},
tooltip: {
- formatNumber: '1.1-2',
- afterTitle: this.translate.instant('General.TOTAL'),
+ formatNumber: "1.1-2",
+ afterTitle: this.translate.instant("General.TOTAL"),
},
yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
+ unit: YAxisType.ENERGY,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}],
};
return chartObject;
}
-
}
diff --git a/ui/src/app/edge/history/common/production/chart/totalDcChart.ts b/ui/src/app/edge/history/common/production/chart/totalDcChart.ts
deleted file mode 100644
index 3f2c9769794..00000000000
--- a/ui/src/app/edge/history/common/production/chart/totalDcChart.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-
-import { ChannelAddress } from '../../../../../shared/shared';
-
-@Component({
- selector: 'totalDcChart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
-})
-export class TotalDcChartComponent extends AbstractHistoryChart {
-
- protected override getChartData(): HistoryUtils.ChartData {
- return {
- input:
- [
- {
- name: 'ProductionDcActual',
- powerChannel: ChannelAddress.fromString('_sum/ProductionDcActualPower'),
- energyChannel: ChannelAddress.fromString('_sum/ProductionDcActiveEnergy'),
- converter: (data) => data != null ? data : null,
- },
- ],
- output: (data: HistoryUtils.ChannelData) => {
- return [{
- name: this.translate.instant('General.production'),
- nameSuffix: (energyResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyResponse.result.data['_sum/ProductionDcActiveEnergy'];
- },
- converter: () => {
- return data['ProductionDcActual'] ?? null;
- },
- strokeThroughHiddingStyle: false,
- color: 'rgb(0,152,204)',
- }];
- },
- tooltip: {
- formatNumber: '1.1-2',
- },
- yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
- yAxisId: ChartAxis.LEFT,
- }],
- };
- }
-}
diff --git a/ui/src/app/edge/history/common/production/details/chart/channels.spec.ts b/ui/src/app/edge/history/common/production/details/chart/channels.spec.ts
new file mode 100644
index 00000000000..ec95a07e629
--- /dev/null
+++ b/ui/src/app/edge/history/common/production/details/chart/channels.spec.ts
@@ -0,0 +1,59 @@
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { QueryHistoricTimeseriesEnergyPerPeriodResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyPerPeriodResponse";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+
+
+export namespace History {
+
+ /**
+ * up to 288 datapoints (5 min aggregated values) from a
+ *
+ * {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}
+ * */
+ export const DAY: OeTester.Types.Channels = ({
+ energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
+ data: {
+ "meter0/ActiveProductionEnergy": 15930,
+ "charger0/ActualEnergy": 15930,
+ "_sum/ProductionActiveEnergy": 15930,
+ },
+ }),
+ dataChannelWithValues: new QueryHistoricTimeseriesDataResponse("0", {
+ data: {
+ "meter0/ActivePower": [124, 0, null, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePowerL1": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePowerL2": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "meter0/ActivePowerL3": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "charger0/ActualPower": [124, 0, null, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ProductionActivePower": [124, 0, null, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ProductionAcActivePowerL1": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ProductionAcActivePowerL2": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ProductionAcActivePowerL3": [41, 0, null, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 38, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 47, null, null, null, 709, 58, 59, null, 60, 60, 62, 60, null, 62, 63, 60, 60, 59, 59, 57, 58, 57, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ "_sum/ProductionDcActualPower": [24, 0, null, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 110, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 140, null, null, null, 2127, 175, 176, null, 180, 180, 185, 180, null, 185, 190, 180, 180, 176, 176, 170, 175, 170, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
+ },
+ timestamps: ["2023-07-02T22:00:00Z", "2023-07-02T22:05:00Z", "2023-07-02T22:10:00Z", "2023-07-02T22:15:00Z", "2023-07-02T22:20:00Z", "2023-07-02T22:25:00Z", "2023-07-02T22:30:00Z", "2023-07-02T22:35:00Z", "2023-07-02T22:40:00Z", "2023-07-02T22:45:00Z", "2023-07-02T22:50:00Z", "2023-07-02T22:55:00Z", "2023-07-02T23:00:00Z", "2023-07-02T23:05:00Z", "2023-07-02T23:10:00Z", "2023-07-02T23:15:00Z", "2023-07-02T23:20:00Z", "2023-07-02T23:25:00Z", "2023-07-02T23:30:00Z", "2023-07-02T23:35:00Z", "2023-07-02T23:40:00Z", "2023-07-02T23:45:00Z", "2023-07-02T23:50:00Z", "2023-07-02T23:55:00Z", "2023-07-03T00:00:00Z", "2023-07-03T00:05:00Z", "2023-07-03T00:10:00Z", "2023-07-03T00:15:00Z", "2023-07-03T00:20:00Z", "2023-07-03T00:25:00Z", "2023-07-03T00:30:00Z", "2023-07-03T00:35:00Z", "2023-07-03T00:40:00Z", "2023-07-03T00:45:00Z", "2023-07-03T00:50:00Z", "2023-07-03T00:55:00Z", "2023-07-03T01:00:00Z", "2023-07-03T01:05:00Z", "2023-07-03T01:10:00Z", "2023-07-03T01:15:00Z", "2023-07-03T01:20:00Z", "2023-07-03T01:25:00Z", "2023-07-03T01:30:00Z", "2023-07-03T01:35:00Z", "2023-07-03T01:40:00Z", "2023-07-03T01:45:00Z", "2023-07-03T01:50:00Z", "2023-07-03T01:55:00Z", "2023-07-03T02:00:00Z", "2023-07-03T02:05:00Z", "2023-07-03T02:10:00Z", "2023-07-03T02:15:00Z", "2023-07-03T02:20:00Z", "2023-07-03T02:25:00Z", "2023-07-03T02:30:00Z", "2023-07-03T02:35:00Z", "2023-07-03T02:40:00Z", "2023-07-03T02:45:00Z", "2023-07-03T02:50:00Z", "2023-07-03T02:55:00Z", "2023-07-03T03:00:00Z", "2023-07-03T03:05:00Z", "2023-07-03T03:10:00Z", "2023-07-03T03:15:00Z", "2023-07-03T03:20:00Z", "2023-07-03T03:25:00Z", "2023-07-03T03:30:00Z", "2023-07-03T03:35:00Z", "2023-07-03T03:40:00Z", "2023-07-03T03:45:00Z", "2023-07-03T03:50:00Z", "2023-07-03T03:55:00Z", "2023-07-03T04:00:00Z", "2023-07-03T04:05:00Z", "2023-07-03T04:10:00Z", "2023-07-03T04:15:00Z", "2023-07-03T04:20:00Z", "2023-07-03T04:25:00Z", "2023-07-03T04:30:00Z", "2023-07-03T04:35:00Z", "2023-07-03T04:40:00Z", "2023-07-03T04:45:00Z", "2023-07-03T04:50:00Z", "2023-07-03T04:55:00Z", "2023-07-03T05:00:00Z", "2023-07-03T05:05:00Z", "2023-07-03T05:10:00Z", "2023-07-03T05:15:00Z", "2023-07-03T05:20:00Z", "2023-07-03T05:25:00Z", "2023-07-03T05:30:00Z", "2023-07-03T05:35:00Z", "2023-07-03T05:40:00Z", "2023-07-03T05:45:00Z", "2023-07-03T05:50:00Z", "2023-07-03T05:55:00Z", "2023-07-03T06:00:00Z", "2023-07-03T06:05:00Z", "2023-07-03T06:10:00Z", "2023-07-03T06:15:00Z", "2023-07-03T06:20:00Z", "2023-07-03T06:25:00Z", "2023-07-03T06:30:00Z", "2023-07-03T06:35:00Z", "2023-07-03T06:40:00Z", "2023-07-03T06:45:00Z", "2023-07-03T06:50:00Z", "2023-07-03T06:55:00Z", "2023-07-03T07:00:00Z", "2023-07-03T07:05:00Z", "2023-07-03T07:10:00Z", "2023-07-03T07:15:00Z", "2023-07-03T07:20:00Z", "2023-07-03T07:25:00Z", "2023-07-03T07:30:00Z", "2023-07-03T07:35:00Z", "2023-07-03T07:40:00Z", "2023-07-03T07:45:00Z", "2023-07-03T07:50:00Z", "2023-07-03T07:55:00Z", "2023-07-03T08:00:00Z", "2023-07-03T08:05:00Z", "2023-07-03T08:10:00Z", "2023-07-03T08:15:00Z", "2023-07-03T08:20:00Z", "2023-07-03T08:25:00Z", "2023-07-03T08:30:00Z", "2023-07-03T08:35:00Z", "2023-07-03T08:40:00Z", "2023-07-03T08:45:00Z", "2023-07-03T08:50:00Z", "2023-07-03T08:55:00Z", "2023-07-03T09:00:00Z", "2023-07-03T09:05:00Z", "2023-07-03T09:10:00Z", "2023-07-03T09:15:00Z", "2023-07-03T09:20:00Z", "2023-07-03T09:25:00Z", "2023-07-03T09:30:00Z", "2023-07-03T09:35:00Z", "2023-07-03T09:40:00Z", "2023-07-03T09:45:00Z", "2023-07-03T09:50:00Z", "2023-07-03T09:55:00Z", "2023-07-03T10:00:00Z", "2023-07-03T10:05:00Z", "2023-07-03T10:10:00Z", "2023-07-03T10:15:00Z", "2023-07-03T10:20:00Z", "2023-07-03T10:25:00Z", "2023-07-03T10:30:00Z", "2023-07-03T10:35:00Z", "2023-07-03T10:40:00Z", "2023-07-03T10:45:00Z", "2023-07-03T10:50:00Z", "2023-07-03T10:55:00Z", "2023-07-03T11:00:00Z", "2023-07-03T11:05:00Z", "2023-07-03T11:10:00Z", "2023-07-03T11:15:00Z", "2023-07-03T11:20:00Z", "2023-07-03T11:25:00Z", "2023-07-03T11:30:00Z", "2023-07-03T11:35:00Z", "2023-07-03T11:40:00Z", "2023-07-03T11:45:00Z", "2023-07-03T11:50:00Z", "2023-07-03T11:55:00Z", "2023-07-03T12:00:00Z", "2023-07-03T12:05:00Z", "2023-07-03T12:10:00Z", "2023-07-03T12:15:00Z", "2023-07-03T12:20:00Z", "2023-07-03T12:25:00Z", "2023-07-03T12:30:00Z", "2023-07-03T12:35:00Z", "2023-07-03T12:40:00Z", "2023-07-03T12:45:00Z", "2023-07-03T12:50:00Z", "2023-07-03T12:55:00Z", "2023-07-03T13:00:00Z", "2023-07-03T13:05:00Z", "2023-07-03T13:10:00Z", "2023-07-03T13:15:00Z", "2023-07-03T13:20:00Z", "2023-07-03T13:25:00Z", "2023-07-03T13:30:00Z", "2023-07-03T13:35:00Z", "2023-07-03T13:40:00Z", "2023-07-03T13:45:00Z", "2023-07-03T13:50:00Z", "2023-07-03T13:55:00Z", "2023-07-03T14:00:00Z", "2023-07-03T14:05:00Z", "2023-07-03T14:10:00Z", "2023-07-03T14:15:00Z", "2023-07-03T14:20:00Z", "2023-07-03T14:25:00Z", "2023-07-03T14:30:00Z", "2023-07-03T14:35:00Z", "2023-07-03T14:40:00Z", "2023-07-03T14:45:00Z", "2023-07-03T14:50:00Z", "2023-07-03T14:55:00Z", "2023-07-03T15:00:00Z", "2023-07-03T15:05:00Z", "2023-07-03T15:10:00Z", "2023-07-03T15:15:00Z", "2023-07-03T15:20:00Z", "2023-07-03T15:25:00Z", "2023-07-03T15:30:00Z", "2023-07-03T15:35:00Z", "2023-07-03T15:40:00Z", "2023-07-03T15:45:00Z", "2023-07-03T15:50:00Z", "2023-07-03T15:55:00Z", "2023-07-03T16:00:00Z", "2023-07-03T16:05:00Z", "2023-07-03T16:10:00Z", "2023-07-03T16:15:00Z", "2023-07-03T16:20:00Z", "2023-07-03T16:25:00Z", "2023-07-03T16:30:00Z", "2023-07-03T16:35:00Z", "2023-07-03T16:40:00Z", "2023-07-03T16:45:00Z", "2023-07-03T16:50:00Z", "2023-07-03T16:55:00Z", "2023-07-03T17:00:00Z", "2023-07-03T17:05:00Z", "2023-07-03T17:10:00Z", "2023-07-03T17:15:00Z", "2023-07-03T17:20:00Z", "2023-07-03T17:25:00Z", "2023-07-03T17:30:00Z", "2023-07-03T17:35:00Z", "2023-07-03T17:40:00Z", "2023-07-03T17:45:00Z", "2023-07-03T17:50:00Z", "2023-07-03T17:55:00Z", "2023-07-03T18:00:00Z", "2023-07-03T18:05:00Z", "2023-07-03T18:10:00Z", "2023-07-03T18:15:00Z", "2023-07-03T18:20:00Z", "2023-07-03T18:25:00Z", "2023-07-03T18:30:00Z", "2023-07-03T18:35:00Z", "2023-07-03T18:40:00Z", "2023-07-03T18:45:00Z", "2023-07-03T18:50:00Z", "2023-07-03T18:55:00Z", "2023-07-03T19:00:00Z", "2023-07-03T19:05:00Z", "2023-07-03T19:10:00Z", "2023-07-03T19:15:00Z", "2023-07-03T19:20:00Z", "2023-07-03T19:25:00Z", "2023-07-03T19:30:00Z", "2023-07-03T19:35:00Z", "2023-07-03T19:40:00Z", "2023-07-03T19:45:00Z", "2023-07-03T19:50:00Z", "2023-07-03T19:55:00Z", "2023-07-03T20:00:00Z", "2023-07-03T20:05:00Z", "2023-07-03T20:10:00Z", "2023-07-03T20:15:00Z", "2023-07-03T20:20:00Z", "2023-07-03T20:25:00Z", "2023-07-03T20:30:00Z", "2023-07-03T20:35:00Z", "2023-07-03T20:40:00Z", "2023-07-03T20:45:00Z", "2023-07-03T20:50:00Z", "2023-07-03T20:55:00Z", "2023-07-03T21:00:00Z", "2023-07-03T21:05:00Z", "2023-07-03T21:10:00Z", "2023-07-03T21:15:00Z", "2023-07-03T21:20:00Z", "2023-07-03T21:25:00Z", "2023-07-03T21:30:00Z", "2023-07-03T21:35:00Z", "2023-07-03T21:40:00Z", "2023-07-03T21:45:00Z", "2023-07-03T21:50:00Z", "2023-07-03T21:55:00Z"],
+ }),
+ });
+
+ /**
+ * up to 31 datapoints(1 day values) from a {@link Day.energyPerPeriodChannelWithValues} and {@link Day.dataChannelWithValues}*/
+ export const MONTH: OeTester.Types.Channels = {
+ energyChannelWithValues: new QueryHistoricTimeseriesEnergyResponse("0", {
+ data: {
+ "meter0/ActiveProductionEnergy": 21649,
+ "charger0/ActualEnergy": 21649,
+ "_sum/ProductionActiveEnergy": 21649,
+ },
+ }),
+ energyPerPeriodChannelWithValues:
+ new QueryHistoricTimeseriesEnergyPerPeriodResponse("0", {
+ data: {
+ "meter0/ActiveProductionEnergy": [16, 14, 16, 15, 16, 15, 15, 15, 16, 17, 18, 14, 16, 17, 16, 15, 14, 17, 15, 16, 17, 16, 15, 16, 14, 15, 14, 16, 14, null, null],
+ "charger0/ActualEnergy": [16, 14, 16, 15, 16, 15, 15, 15, 16, 17, 18, 14, 16, 17, 16, 15, 14, 17, 15, 16, 17, 16, 15, 16, 14, 15, 14, 16, 14, null, null],
+ "_sum/ProductionActiveEnergy": [16, 14, 16, 15, 16, 15, 15, 15, 16, 17, 18, 14, 16, 17, 16, 15, 14, 17, 15, 16, 17, 16, 15, 16, 14, 15, 14, 16, 14, null, null],
+ },
+ timestamps: ["2023-05-31T22:00:00Z", "2023-06-01T22:00:00Z", "2023-06-02T22:00:00Z", "2023-06-03T22:00:00Z", "2023-06-04T22:00:00Z", "2023-06-05T22:00:00Z", "2023-06-06T22:00:00Z", "2023-06-07T22:00:00Z", "2023-06-08T22:00:00Z", "2023-06-09T22:00:00Z", "2023-06-10T22:00:00Z", "2023-06-11T22:00:00Z", "2023-06-12T22:00:00Z", "2023-06-13T22:00:00Z", "2023-06-14T22:00:00Z", "2023-06-15T22:00:00Z", "2023-06-16T22:00:00Z", "2023-06-17T22:00:00Z", "2023-06-18T22:00:00Z", "2023-06-19T22:00:00Z", "2023-06-20T22:00:00Z", "2023-06-21T22:00:00Z", "2023-06-22T22:00:00Z", "2023-06-23T22:00:00Z", "2023-06-24T22:00:00Z", "2023-06-25T22:00:00Z", "2023-06-26T22:00:00Z", "2023-06-27T22:00:00Z", "2023-06-28T22:00:00Z", "2023-06-29T22:00:00Z"],
+ }),
+ };
+}
diff --git a/ui/src/app/edge/history/common/production/details/chart/charger.spec.ts b/ui/src/app/edge/history/common/production/details/chart/charger.spec.ts
new file mode 100644
index 00000000000..08cfeb6e0b9
--- /dev/null
+++ b/ui/src/app/edge/history/common/production/details/chart/charger.spec.ts
@@ -0,0 +1,58 @@
+// @ts-strict-ignore
+import { ActivatedRoute } from "@angular/router";
+import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
+import { removeFunctions, sharedSetupWithComponentIdRoute, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
+import { EdgeConfig } from "src/app/shared/shared";
+import { DATA, LABELS } from "../../../energy/chart/chart.constants.spec";
+import { History } from "./channels.spec";
+import { ChargerChartDetailsComponent } from "./charger";
+
+describe("History Production Details - chargers", () => {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.GOODWE_CHARGER_MPPT_TWO_STRING("charger0", "MPPT 1"),
+ );
+
+ let TEST_CONTEXT: TestContext & { route: ActivatedRoute };
+ beforeEach(async () => {
+ TEST_CONTEXT = await sharedSetupWithComponentIdRoute("charger0");
+ });
+
+ it("#getChartData()", () => {
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("MPPT 1: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ ],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("MPPT 1: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+});
+
+export function expectView(config: EdgeConfig, testContext: TestContext & { route: ActivatedRoute }, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+ expect(removeFunctions(OeChartTester
+ .apply(ChargerChartDetailsComponent
+ .getChartData(
+ DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.route,
+ testContext.translate), chartType, channels, testContext, config)))
+ .toEqual(removeFunctions(view));
+}
diff --git a/ui/src/app/edge/history/common/production/details/chart/charger.ts b/ui/src/app/edge/history/common/production/details/chart/charger.ts
new file mode 100644
index 00000000000..7673bac3ffd
--- /dev/null
+++ b/ui/src/app/edge/history/common/production/details/chart/charger.ts
@@ -0,0 +1,50 @@
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "chargerChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class ChargerChartDetailsComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, route: ActivatedRoute, translate: TranslateService): HistoryUtils.ChartData {
+ const component = config.getComponent(route.snapshot.params.componentId);
+ return {
+ input: [{
+ name: component.id,
+ powerChannel: ChannelAddress.fromString(component.id + "/ActualPower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActualEnergy"),
+ }],
+ output: (data: HistoryUtils.ChannelData) => [{
+ name: component.alias,
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
+ return energyQueryResponse.result.data[component.id + "/ActualEnergy"];
+ },
+ converter: () => {
+ return data[component.id];
+ },
+ color: "rgb(0,152,204)",
+ hiddenOnInit: false,
+ stack: 2,
+ }],
+ tooltip: {
+ formatNumber: "1.1-2",
+ afterTitle: translate.instant("General.TOTAL"),
+ },
+ yAxes: [{
+ unit: YAxisType.ENERGY,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+ }
+
+ protected override getChartData(): HistoryUtils.ChartData {
+ return ChargerChartDetailsComponent.getChartData(this.config, this.route, this.translate);
+ }
+}
diff --git a/ui/src/app/edge/history/common/production/details/chart/chart.ts b/ui/src/app/edge/history/common/production/details/chart/chart.ts
deleted file mode 100644
index a8a11e836b9..00000000000
--- a/ui/src/app/edge/history/common/production/details/chart/chart.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { Phase } from 'src/app/shared/components/shared/phase';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress } from 'src/app/shared/shared';
-
-@Component({
- selector: 'meterChart',
- templateUrl: '../../../../../../shared/components/chart/abstracthistorychart.html',
-})
-export class ChartComponent extends AbstractHistoryChart {
-
-
- protected override getChartData(): HistoryUtils.ChartData {
-
- const component = this.config.getComponent(this.route.snapshot.params.componentId);
- const isProductionMeter = this.config.hasComponentNature("io.openems.edge.meter.api.ElectricityMeter", component.id) && this.config.isProducer(component);
- const isCharger = this.config.hasComponentNature("io.openems.edge.ess.dccharger.api.EssDcCharger", component.id);
-
- const channels: HistoryUtils.InputChannel[] = [];
-
- if (isCharger) {
- channels.push({
- name: component.id,
- powerChannel: ChannelAddress.fromString(component.id + '/ActualPower'),
- energyChannel: ChannelAddress.fromString(component.id + '/ActualEnergy'),
- });
- }
-
- if (isProductionMeter) {
- channels.push({
- name: component.id,
- powerChannel: ChannelAddress.fromString(component.id + '/ActivePower'),
- energyChannel: ChannelAddress.fromString(component.id + '/ActiveProductionEnergy'),
- });
-
- channels.push(...Phase.THREE_PHASE.map(phase => ({
- name: 'ProductionAcActivePower' + phase,
- powerChannel: ChannelAddress.fromString(component.id + '/ActivePower' + phase),
- })));
- }
-
- const chartObject: HistoryUtils.ChartData = {
- input: channels,
- output: (data: HistoryUtils.ChannelData) => {
- const datasets: HistoryUtils.DisplayValue[] = [];
- datasets.push({
- name: component.alias,
- nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
- return energyQueryResponse.result.data[isCharger ? component.id + '/ActualEnergy' : component.id + '/ActiveProductionEnergy'];
- },
- converter: () => {
- return data[component.id];
- },
- color: 'rgb(0,152,204)',
- hiddenOnInit: false,
- stack: 2,
- });
-
- if (!isProductionMeter) {
- return datasets;
- }
-
- datasets.push(...Phase.THREE_PHASE.map((phase, i) => ({
- name: "Phase " + phase,
- converter: () =>
- data['ProductionAcActivePower' + phase],
- color: 'rgb(' + AbstractHistoryChart.phaseColors[i] + ')',
- stack: 3,
- })));
-
- return datasets;
- },
- tooltip: {
- formatNumber: '1.1-2',
- afterTitle: this.translate.instant('General.TOTAL'),
- },
- yAxes: [{
- unit: YAxisTitle.ENERGY,
- position: 'left',
- yAxisId: ChartAxis.LEFT,
- }],
- };
-
- return chartObject;
- }
-}
diff --git a/ui/src/app/edge/history/common/production/details/chart/productionMeter.spec.ts b/ui/src/app/edge/history/common/production/details/chart/productionMeter.spec.ts
new file mode 100644
index 00000000000..d3cc8490cc1
--- /dev/null
+++ b/ui/src/app/edge/history/common/production/details/chart/productionMeter.spec.ts
@@ -0,0 +1,68 @@
+// @ts-strict-ignore
+import { ActivatedRoute } from "@angular/router";
+import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
+import { removeFunctions, sharedSetupWithComponentIdRoute, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
+import { EdgeConfig } from "src/app/shared/shared";
+import { DATA, LABELS } from "../../../energy/chart/chart.constants.spec";
+import { History } from "./channels.spec";
+import { ProductionMeterChartDetailsComponent } from "./productionMeter";
+
+describe("History Production Details - productionMeters", () => {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.SOLAR_EDGE_PV_INVERTER("meter0", "Whirlpool"),
+ );
+
+ let TEST_CONTEXT: TestContext & { route: ActivatedRoute };
+ beforeEach(async () => {
+ TEST_CONTEXT = await sharedSetupWithComponentIdRoute("meter0");
+ });
+
+ it("#getChartData()", () => {
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("Whirlpool: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L1", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L2", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L3", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ ],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("Whirlpool: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+});
+
+export function expectView(config: EdgeConfig, testContext: TestContext & { route: ActivatedRoute }, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+ sessionStorage.setItem("mapping to int", JSON.stringify(History.MONTH.energyPerPeriodChannelWithValues.result.data["meter0/ActiveProductionEnergy"].map(el => el != null ? Math.round(el) : null)));
+ sessionStorage.setItem("phase", JSON.stringify(OeChartTester
+ .apply(ProductionMeterChartDetailsComponent
+ .getChartData(
+ DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.route,
+ testContext.translate), chartType, channels, testContext, config)));
+
+ expect(removeFunctions(OeChartTester
+ .apply(ProductionMeterChartDetailsComponent
+ .getChartData(
+ DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.route,
+ testContext.translate), chartType, channels, testContext, config)))
+ .toEqual(removeFunctions(view));
+}
diff --git a/ui/src/app/edge/history/common/production/details/chart/productionMeter.ts b/ui/src/app/edge/history/common/production/details/chart/productionMeter.ts
new file mode 100644
index 00000000000..634398525b7
--- /dev/null
+++ b/ui/src/app/edge/history/common/production/details/chart/productionMeter.ts
@@ -0,0 +1,69 @@
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { Phase } from "src/app/shared/components/shared/phase";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "productionMeterChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class ProductionMeterChartDetailsComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, route: ActivatedRoute, translate: TranslateService): HistoryUtils.ChartData {
+ const component = config.getComponent(route.snapshot.params.componentId);
+ return {
+ input: [{
+ name: component.id,
+ powerChannel: ChannelAddress.fromString(component.id + "/ActivePower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ActiveProductionEnergy"),
+ },
+ ...Phase.THREE_PHASE.map(phase => ({
+ name: "ProductionAcActivePower" + phase,
+ powerChannel: ChannelAddress.fromString(component.id + "/ActivePower" + phase),
+ }))],
+
+ output: (data: HistoryUtils.ChannelData) => {
+ const datasets: HistoryUtils.DisplayValue[] = [];
+ datasets.push({
+ name: component.alias,
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => {
+ return energyQueryResponse.result.data[component.id + "/ActiveProductionEnergy"];
+ },
+ converter: () => {
+ return data[component.id];
+ },
+ color: "rgb(0,152,204)",
+ hiddenOnInit: false,
+ stack: 2,
+ });
+
+ datasets.push(...Phase.THREE_PHASE.map((phase, i) => ({
+ name: "Phase " + phase,
+ converter: () =>
+ data["ProductionAcActivePower" + phase],
+ color: "rgb(" + AbstractHistoryChart.phaseColors[i] + ")",
+ stack: 3,
+ })));
+
+ return datasets;
+ },
+ tooltip: {
+ formatNumber: "1.1-2",
+ afterTitle: translate.instant("General.TOTAL"),
+ },
+ yAxes: [{
+ unit: YAxisType.ENERGY,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+ }
+
+ protected override getChartData(): HistoryUtils.ChartData {
+ return ProductionMeterChartDetailsComponent.getChartData(this.config, this.route, this.translate);
+ }
+}
diff --git a/ui/src/app/edge/history/common/production/details/chart/sum.spec.ts b/ui/src/app/edge/history/common/production/details/chart/sum.spec.ts
new file mode 100644
index 00000000000..286910ff833
--- /dev/null
+++ b/ui/src/app/edge/history/common/production/details/chart/sum.spec.ts
@@ -0,0 +1,125 @@
+// @ts-strict-ignore
+import { ActivatedRoute } from "@angular/router";
+import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
+import { OeTester } from "src/app/shared/components/shared/testing/common";
+import { OeChartTester } from "src/app/shared/components/shared/testing/tester";
+import { removeFunctions, sharedSetupWithComponentIdRoute, TestContext } from "src/app/shared/components/shared/testing/utils.spec";
+import { EdgeConfig } from "src/app/shared/shared";
+import { DATA, LABELS } from "../../../energy/chart/chart.constants.spec";
+import { History } from "./channels.spec";
+import { SumChartDetailsComponent } from "./sum";
+
+describe("History Production Details - _sum", () => {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.SUM("_sum", "Gesamt"),
+ DummyConfig.Component.SOLAR_EDGE_PV_INVERTER("meter0"),
+ );
+
+ let TEST_CONTEXT: TestContext & { route: ActivatedRoute };
+ beforeEach(async () => {
+ TEST_CONTEXT = await sharedSetupWithComponentIdRoute("_sum");
+ });
+
+ it("#getChartData() - asymmetricMeter && no essDcCharger configured", () => {
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L1", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L2", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L3", [0.041, 0, null, 0, 0.058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.037, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.048, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.038, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.043, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.047, null, null, null, 0.709, 0.058, 0.059, null, 0.06, 0.06, 0.062, 0.06, null, 0.062, 0.063, 0.06, 0.06, 0.059, 0.059, 0.057, 0.058, 0.057, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ ],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+
+ it("#getChartData() - essDcCharger configured", () => {
+ {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.SUM("_sum", "Gesamt"),
+ DummyConfig.Component.GOODWE_CHARGER_MPPT_TWO_STRING("charger0"),
+ );
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L1", [0.049, 0, null, 0, 0.08233333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.07366666666666666, 0.07566666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.09633333333333333, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.07566666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.07566666666666666, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.08633333333333333, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.09366666666666668, null, null, null, 1.418, 0.11633333333333333, 0.11766666666666667, null, 0.12, 0.12, 0.12366666666666667, 0.12, null, 0.12366666666666667, 0.12633333333333335, 0.12, 0.12, 0.11766666666666667, 0.11766666666666667, 0.11366666666666667, 0.11633333333333333, 0.11366666666666667, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L2", [0.049, 0, null, 0, 0.08233333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.07366666666666666, 0.07566666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.09633333333333333, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.07566666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.07566666666666666, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.08633333333333333, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.09366666666666668, null, null, null, 1.418, 0.11633333333333333, 0.11766666666666667, null, 0.12, 0.12, 0.12366666666666667, 0.12, null, 0.12366666666666667, 0.12633333333333335, 0.12, 0.12, 0.11766666666666667, 0.11766666666666667, 0.11366666666666667, 0.11633333333333333, 0.11366666666666667, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]),
+ DATA("Phase L3", [0.049, 0, null, 0, 0.08233333333333334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.07366666666666666, 0.07566666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.09633333333333333, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.07566666666666666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.07566666666666666, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.08633333333333333, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.09366666666666668, null, null, null, 1.418, 0.11633333333333333, 0.11766666666666667, null, 0.12, 0.12, 0.12366666666666667, 0.12, null, 0.12366666666666667, 0.12633333333333335, 0.12, 0.12, 0.11766666666666667, 0.11766666666666667, 0.11366666666666667, 0.11633333333333333, 0.11366666666666667, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null])],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+ it("#getChartData() - no essDcCharger & no assymetric meter configured", () => {
+ {
+ const defaultEMS = DummyConfig.from(
+ DummyConfig.Component.SUM("_sum", "Gesamt"),
+ );
+ expectView(defaultEMS, TEST_CONTEXT, "line", History.DAY,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 15,9 kWh", [0.124, 0, null, 0, 0.173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0.11, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.145, 0, 0, 0, 0, 0, 0, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0.113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, null, 0.113, 0, 0, null, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, 0, 0.13, 0, 0, 0, 0, 0, null, null, null, null, 0, 0, 0, 0, 0, null, 0, null, 0.14, null, null, null, 2.127, 0.175, 0.176, null, 0.18, 0.18, 0.185, 0.18, null, 0.185, 0.19, 0.18, 0.18, 0.176, 0.176, 0.17, 0.175, 0.17, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null])],
+ labels: LABELS(History.DAY.dataChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.LINE_CHART_OPTIONS("hour", "line", { "left": { scale: { beginAtZero: true } } },
+ ),
+ },
+ });
+ }
+ {
+ expectView(defaultEMS, TEST_CONTEXT, "bar", History.MONTH,
+ {
+ datasets: {
+ data: [
+ DATA("Gesamt: 21,6 kWh", [0.016, 0.014, 0.016, 0.015, 0.016, 0.015, 0.015, 0.015, 0.016, 0.017, 0.018, 0.014, 0.016, 0.017, 0.016, 0.015, 0.014, 0.017, 0.015, 0.016, 0.017, 0.016, 0.015, 0.016, 0.014, 0.015, 0.014, 0.016, 0.014, null, null]),
+ ],
+ labels: LABELS(History.MONTH.energyPerPeriodChannelWithValues.result.timestamps),
+ options: OeTester.ChartOptions.BAR_CHART_OPTIONS("day", "bar", {}),
+ },
+ });
+ }
+ });
+});
+
+export function expectView(config: EdgeConfig, testContext: TestContext & { route: ActivatedRoute }, chartType: "line" | "bar", channels: OeTester.Types.Channels, view: OeChartTester.View): void {
+ expect(removeFunctions(OeChartTester
+ .apply(SumChartDetailsComponent
+ .getChartData(
+ DummyConfig.convertDummyEdgeConfigToRealEdgeConfig(config), testContext.route,
+ testContext.translate), chartType, channels, testContext, config)))
+ .toEqual(removeFunctions(view));
+}
diff --git a/ui/src/app/edge/history/common/production/details/chart/sum.ts b/ui/src/app/edge/history/common/production/details/chart/sum.ts
new file mode 100644
index 00000000000..6c630946ae0
--- /dev/null
+++ b/ui/src/app/edge/history/common/production/details/chart/sum.ts
@@ -0,0 +1,93 @@
+// @ts-strict-ignore
+import { Component } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { Phase } from "src/app/shared/components/shared/phase";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, EdgeConfig } from "src/app/shared/shared";
+
+@Component({
+ selector: "sumChart",
+ templateUrl: "../../../../../../shared/components/chart/abstracthistorychart.html",
+})
+export class SumChartDetailsComponent extends AbstractHistoryChart {
+
+ public static getChartData(config: EdgeConfig, route: ActivatedRoute, translate: TranslateService): HistoryUtils.ChartData {
+
+ const component = config.getComponent(route.snapshot.params.componentId);
+ const hasCharger = config.getComponentsImplementingNature("io.openems.edge.ess.dccharger.api.EssDcCharger").length > 0;
+ const hasAsymmetricMeters = config.getComponentsImplementingNature("io.openems.edge.meter.api.AsymmetricMeter").length > 0;
+
+ const input: HistoryUtils.InputChannel[] = [
+ {
+ name: component.id,
+ powerChannel: ChannelAddress.fromString(component.id + "/ProductionActivePower"),
+ energyChannel: ChannelAddress.fromString(component.id + "/ProductionActiveEnergy"),
+ },
+ ];
+ let converter: ((data: HistoryUtils.ChannelData, phase: string) => any) | null = null;
+
+ if (hasCharger) {
+ input.push({
+ name: component.id + "ActualPower",
+ powerChannel: ChannelAddress.fromString("_sum/ProductionDcActualPower"),
+ });
+
+ converter = (data: HistoryUtils.ChannelData, phase: string) => data[component.id + "ActualPower"]?.reduce((arr, el, index) => {
+ arr.push(Utils.addSafely(Utils.divideSafely(el, 3), data["ProductionAcActivePower" + phase][index]));
+ return arr;
+ }, []);
+ }
+
+ if (hasAsymmetricMeters) {
+ converter = (data, phase) => data["ProductionAcActivePower" + phase];
+ }
+
+ if (hasAsymmetricMeters || hasCharger) {
+ input.push(...Phase.THREE_PHASE.map(phase => ({
+ name: "ProductionAcActivePower" + phase,
+ powerChannel: ChannelAddress.fromString(component.id + "/ProductionAcActivePower" + phase),
+ })));
+ }
+
+ const phaseOutput: (data: HistoryUtils.ChannelData) => HistoryUtils.DisplayValue[] =
+ converter ? (data) => Phase.THREE_PHASE.map((phase, i) => ({
+ name: "Phase " + phase,
+ converter: () => converter(data, phase),
+ color: "rgb(" + AbstractHistoryChart.phaseColors[i] + ")",
+ stack: 3,
+ })) : () => [];
+
+ const chartObject: HistoryUtils.ChartData = {
+ input: input,
+ output: (data: HistoryUtils.ChannelData) => [
+ {
+ name: translate.instant("General.TOTAL"),
+ nameSuffix: (energyQueryResponse: QueryHistoricTimeseriesEnergyResponse) => energyQueryResponse.result.data["_sum/ProductionActiveEnergy"],
+ converter: () => data[component.id],
+ color: "rgb(0,152,204)",
+ hiddenOnInit: false,
+ stack: 2,
+ },
+ ...phaseOutput(data),
+ ],
+ tooltip: {
+ formatNumber: "1.1-2",
+ afterTitle: translate.instant("General.TOTAL"),
+ },
+ yAxes: [{
+ unit: YAxisType.ENERGY,
+ position: "left",
+ yAxisId: ChartAxis.LEFT,
+ }],
+ };
+
+ return chartObject;
+ }
+
+ protected override getChartData(): HistoryUtils.ChartData {
+ return SumChartDetailsComponent.getChartData(this.config, this.route, this.translate);
+ }
+}
diff --git a/ui/src/app/edge/history/common/production/details/details.overview.html b/ui/src/app/edge/history/common/production/details/details.overview.html
index a6146a1ae05..1884e99ef81 100644
--- a/ui/src/app/edge/history/common/production/details/details.overview.html
+++ b/ui/src/app/edge/history/common/production/details/details.overview.html
@@ -1,7 +1,11 @@
-
-
+
+
+
+
+
+
diff --git a/ui/src/app/edge/history/common/production/details/details.overview.ts b/ui/src/app/edge/history/common/production/details/details.overview.ts
index 2e385d74067..985d1698b2b 100644
--- a/ui/src/app/edge/history/common/production/details/details.overview.ts
+++ b/ui/src/app/edge/history/common/production/details/details.overview.ts
@@ -1,18 +1,20 @@
-import { Component } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
-import { NavigationOption } from 'src/app/shared/components/footer/subnavigation/footerNavigation';
-import { Service } from 'src/app/shared/shared';
-import { Role } from 'src/app/shared/type/role';
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
+import { NavigationOption } from "src/app/shared/components/footer/subnavigation/footerNavigation";
+import { Service } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
@Component({
- templateUrl: './details.overview.html',
+ templateUrl: "./details.overview.html",
})
export class DetailsOverviewComponent extends AbstractHistoryChartOverview {
protected navigationButtons: NavigationOption[] = [];
+ protected componentSome: { type: "sum" | "productionMeter" | "charger", displayName: string } | null = null;
+
constructor(
public override service: Service,
protected override route: ActivatedRoute,
@@ -24,10 +26,37 @@ export class DetailsOverviewComponent extends AbstractHistoryChartOverview {
}
protected override afterIsInitialized() {
+ this.componentSome = this.getComponentType();
this.service.getCurrentEdge().then(edge => {
+
+ // Hide current & voltage
+ if (this.component?.factoryId === "Core.Sum") {
+ return;
+ }
+
this.navigationButtons = [
- { id: 'currentVoltage', isEnabled: edge.roleIsAtLeast(Role.INSTALLER), alias: this.translate.instant("Edge.History.CURRENT_AND_VOLTAGE"), callback: () => { this.router.navigate(['./currentVoltage'], { relativeTo: this.route }); } }];
+ { id: "currentVoltage", isEnabled: edge.roleIsAtLeast(Role.INSTALLER), alias: this.translate.instant("Edge.History.CURRENT_AND_VOLTAGE"), callback: () => { this.router.navigate(["./currentVoltage"], { relativeTo: this.route }); } }];
});
}
+
+ private getComponentType(): typeof this.componentSome {
+ if (!this.component) {
+ return null;
+ }
+
+ if (this.config.hasComponentNature("io.openems.edge.ess.dccharger.api.EssDcCharger", this.component.id) && this.component.isEnabled) {
+ return { type: "charger", displayName: this.component.alias };
+ }
+
+ if (this.config.isProducer(this.component) && this.component.isEnabled) {
+ return { type: "productionMeter", displayName: this.component.alias };
+ }
+
+ if (this.component.factoryId === "Core.Sum") {
+ return { type: "sum", displayName: this.translate.instant("General.TOTAL") };
+ }
+
+ return null;
+ }
}
diff --git a/ui/src/app/edge/history/common/production/flat/flat.html b/ui/src/app/edge/history/common/production/flat/flat.html
index c8c23f77d06..fd0e3e63fc8 100644
--- a/ui/src/app/edge/history/common/production/flat/flat.html
+++ b/ui/src/app/edge/history/common/production/flat/flat.html
@@ -11,4 +11,4 @@
[converter]="CONVERT_TO_KILO_WATTHOURS">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/production/flat/flat.ts b/ui/src/app/edge/history/common/production/flat/flat.ts
index f399e593d02..9b61575701d 100644
--- a/ui/src/app/edge/history/common/production/flat/flat.ts
+++ b/ui/src/app/edge/history/common/production/flat/flat.ts
@@ -1,11 +1,11 @@
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
-import { ChannelAddress, EdgeConfig, Utils } from '../../../../../shared/shared';
+import { ChannelAddress, EdgeConfig, Utils } from "../../../../../shared/shared";
@Component({
- selector: 'productionWidget',
- templateUrl: './flat.html',
+ selector: "productionWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
diff --git a/ui/src/app/edge/history/common/production/overview/overview.html b/ui/src/app/edge/history/common/production/overview/overview.html
index d02fe0a1f66..d8c1d0c99cb 100644
--- a/ui/src/app/edge/history/common/production/overview/overview.html
+++ b/ui/src/app/edge/history/common/production/overview/overview.html
@@ -1,37 +1,6 @@
-
-
-
-
-
-
-
-
-
-
- 1" [chartTitle]="'General.TOTAL'| translate"
- [period]="service.historyPeriod.value" [showPhases]="showPhases" [showTotal]="showTotal">
-
-
-
-
-
-
-
-
-
- 1"
- [period]="service.historyPeriod.value" [showPhases]="showPhases" [showTotal]="showTotal">
-
-
-
-
-
-
-
-
+
+
+
diff --git a/ui/src/app/edge/history/common/production/overview/overview.ts b/ui/src/app/edge/history/common/production/overview/overview.ts
index 02b85e97ec2..e75c1e02ea0 100644
--- a/ui/src/app/edge/history/common/production/overview/overview.ts
+++ b/ui/src/app/edge/history/common/production/overview/overview.ts
@@ -1,13 +1,13 @@
-import { Component } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { NavigationOption } from 'src/app/shared/components/footer/subnavigation/footerNavigation';
-
-import { AbstractHistoryChartOverview } from '../../../../../shared/components/chart/abstractHistoryChartOverview';
-import { ChannelAddress, EdgeConfig, Service } from '../../../../../shared/shared';
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { NavigationOption } from "src/app/shared/components/footer/subnavigation/footerNavigation";
+import { AbstractHistoryChartOverview } from "../../../../../shared/components/chart/abstractHistoryChartOverview";
+import { ChannelAddress, EdgeConfig, Service } from "../../../../../shared/shared";
@Component({
- templateUrl: './overview.html',
+ templateUrl: "./overview.html",
})
export class OverviewComponent extends AbstractHistoryChartOverview {
protected chargerComponents: EdgeConfig.Component[] = [];
@@ -19,6 +19,7 @@ export class OverviewComponent extends AbstractHistoryChartOverview {
protected override route: ActivatedRoute,
public override modalCtrl: ModalController,
private router: Router,
+ private translate: TranslateService,
) {
super(service, route, modalCtrl);
}
@@ -34,8 +35,11 @@ export class OverviewComponent extends AbstractHistoryChartOverview {
this.config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter")
.filter(component => component.isEnabled && this.config.isProducer(component));
- this.navigationButtons = [...this.chargerComponents, ...this.productionMeterComponents].map(el => (
- { id: el.id, alias: el.alias, callback: () => { this.router.navigate(['./' + el.id], { relativeTo: this.route }); } }
+ const sum: EdgeConfig.Component = this.config.getComponent("_sum");
+ sum.alias = this.translate.instant("General.TOTAL");
+
+ this.navigationButtons = [sum, ...this.chargerComponents, ...this.productionMeterComponents].map(el => (
+ { id: el.id, alias: el.alias, callback: () => { this.router.navigate(["./" + el.id], { relativeTo: this.route }); } }
));
return [];
}
diff --git a/ui/src/app/edge/history/common/production/production.ts b/ui/src/app/edge/history/common/production/production.ts
index b9f4d389d6c..d4b7b9ce39c 100644
--- a/ui/src/app/edge/history/common/production/production.ts
+++ b/ui/src/app/edge/history/common/production/production.ts
@@ -1,18 +1,16 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { FooterNavigationModule } from 'src/app/shared/components/footer/subnavigation/footerNavigation.module';
-import { SharedModule } from 'src/app/shared/shared.module';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { FooterNavigationModule } from "src/app/shared/components/footer/subnavigation/footerNavigation.module";
+import { SharedModule } from "src/app/shared/shared.module";
-import { ChargerChartComponent } from './chart/chargerChart';
-import { ProductionMeterChartComponent } from './chart/productionMeterChart';
-import { TotalAcChartComponent } from './chart/totalAcChart';
-import { TotalChartComponent } from './chart/totalChart';
-import { TotalDcChartComponent } from './chart/totalDcChart';
-import { ChartComponent } from './details/chart/chart';
-import { DetailsOverviewComponent } from './details/details.overview';
-import { FlatComponent } from './flat/flat';
-import { OverviewComponent } from './overview/overview';
-import { CurrentVoltageModule } from 'src/app/shared/components/edge/meter/currentVoltage/currentVoltageModule';
+import { CurrentVoltageModule } from "src/app/shared/components/edge/meter/currentVoltage/currentVoltageModule";
+import { TotalChartComponent } from "./chart/totalChart";
+import { ChargerChartDetailsComponent } from "./details/chart/charger";
+import { ProductionMeterChartDetailsComponent } from "./details/chart/productionMeter";
+import { SumChartDetailsComponent } from "./details/chart/sum";
+import { DetailsOverviewComponent } from "./details/details.overview";
+import { FlatComponent } from "./flat/flat";
+import { OverviewComponent } from "./overview/overview";
@NgModule({
imports: [
@@ -24,22 +22,22 @@ import { CurrentVoltageModule } from 'src/app/shared/components/edge/meter/curre
declarations: [
FlatComponent,
OverviewComponent,
- ProductionMeterChartComponent,
- TotalDcChartComponent,
- TotalAcChartComponent,
TotalChartComponent,
- ChargerChartComponent,
+
+ ChargerChartDetailsComponent,
DetailsOverviewComponent,
- ChartComponent,
+ ProductionMeterChartDetailsComponent,
+ SumChartDetailsComponent,
],
exports: [
FlatComponent,
OverviewComponent,
- ProductionMeterChartComponent,
- TotalDcChartComponent,
- TotalAcChartComponent,
TotalChartComponent,
- ChargerChartComponent,
+
+ ChargerChartDetailsComponent,
+ DetailsOverviewComponent,
+ ProductionMeterChartDetailsComponent,
+ SumChartDetailsComponent,
],
})
export class Common_Production { }
diff --git a/ui/src/app/edge/history/common/selfconsumption/SelfConsumption.ts b/ui/src/app/edge/history/common/selfconsumption/SelfConsumption.ts
index e67a47ad931..ec139b091f4 100644
--- a/ui/src/app/edge/history/common/selfconsumption/SelfConsumption.ts
+++ b/ui/src/app/edge/history/common/selfconsumption/SelfConsumption.ts
@@ -1,8 +1,8 @@
+import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { SharedModule } from "src/app/shared/shared.module";
-import { FlatComponent } from "./flat/flat";
-import { NgModule } from "@angular/core";
import { ChartComponent } from "./chart/chart.component";
+import { FlatComponent } from "./flat/flat";
import { OverviewComponent } from "./overview/overview";
@NgModule({
diff --git a/ui/src/app/edge/history/common/selfconsumption/chart/chart.component.ts b/ui/src/app/edge/history/common/selfconsumption/chart/chart.component.ts
index a3854895d42..02c9e4f827f 100644
--- a/ui/src/app/edge/history/common/selfconsumption/chart/chart.component.ts
+++ b/ui/src/app/edge/history/common/selfconsumption/chart/chart.component.ts
@@ -1,52 +1,52 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { QueryHistoricTimeseriesEnergyResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChartAxis, HistoryUtils, Utils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { QueryHistoricTimeseriesEnergyResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChartAxis, HistoryUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress } from "src/app/shared/shared";
@Component({
- selector: 'selfconsumptionChart',
- templateUrl: '../../../../../shared/components/chart/abstracthistorychart.html',
+ selector: "selfconsumptionChart",
+ templateUrl: "../../../../../shared/components/chart/abstracthistorychart.html",
})
export class ChartComponent extends AbstractHistoryChart {
protected override getChartData(): HistoryUtils.ChartData {
- this.spinnerId = 'selfconsumption-chart';
+ this.spinnerId = "selfconsumption-chart";
return {
input:
[{
- name: 'GridSell',
- powerChannel: ChannelAddress.fromString('_sum/GridActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/GridSellActiveEnergy'),
- ...(this.chartType === 'line' && { converter: HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE }),
+ name: "GridSell",
+ powerChannel: ChannelAddress.fromString("_sum/GridActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/GridSellActiveEnergy"),
+ ...(this.chartType === "line" && { converter: HistoryUtils.ValueConverter.POSITIVE_AS_ZERO_AND_INVERT_NEGATIVE }),
},
{
- name: 'ProductionActivePower',
- powerChannel: ChannelAddress.fromString('_sum/ProductionActivePower'),
- energyChannel: ChannelAddress.fromString('_sum/ProductionActiveEnergy'),
+ name: "ProductionActivePower",
+ powerChannel: ChannelAddress.fromString("_sum/ProductionActivePower"),
+ energyChannel: ChannelAddress.fromString("_sum/ProductionActiveEnergy"),
}],
output: (data: HistoryUtils.ChannelData) => {
return [{
- name: this.translate.instant('General.selfConsumption'),
+ name: this.translate.instant("General.selfConsumption"),
nameSuffix: (energyValues: QueryHistoricTimeseriesEnergyResponse) => {
- return Utils.calculateSelfConsumption(energyValues?.result.data['_sum/GridSellActiveEnergy'] ?? null, energyValues?.result.data['_sum/ProductionActiveEnergy'] ?? null);
+ return Utils.calculateSelfConsumption(energyValues?.result.data["_sum/GridSellActiveEnergy"] ?? null, energyValues?.result.data["_sum/ProductionActiveEnergy"] ?? null);
},
converter: () => {
- return data['GridSell']
+ return data["GridSell"]
?.map((value, index) =>
- Utils.calculateSelfConsumption(value, data['ProductionActivePower'][index]),
+ Utils.calculateSelfConsumption(value, data["ProductionActivePower"][index]),
);
},
- color: 'rgb(253,197,7)',
+ color: "rgb(253,197,7)",
}];
},
tooltip: {
- formatNumber: '1.0-0',
+ formatNumber: "1.0-0",
},
yAxes: [{
- unit: YAxisTitle.PERCENTAGE,
- position: 'left',
+ unit: YAxisType.PERCENTAGE,
+ position: "left",
yAxisId: ChartAxis.LEFT,
}],
};
diff --git a/ui/src/app/edge/history/common/selfconsumption/flat/flat.html b/ui/src/app/edge/history/common/selfconsumption/flat/flat.html
index cafbdfaa75d..a3def18d075 100644
--- a/ui/src/app/edge/history/common/selfconsumption/flat/flat.html
+++ b/ui/src/app/edge/history/common/selfconsumption/flat/flat.html
@@ -2,4 +2,4 @@
button routerLink="/device/{{edge.id}}/history/selfconsumptionchart" *ngIf="isInitialized">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/selfconsumption/flat/flat.ts b/ui/src/app/edge/history/common/selfconsumption/flat/flat.ts
index e818fc3005f..4cc5d5fe127 100644
--- a/ui/src/app/edge/history/common/selfconsumption/flat/flat.ts
+++ b/ui/src/app/edge/history/common/selfconsumption/flat/flat.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { CurrentData, Utils, ChannelAddress } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
@Component({
- selector: 'selfconsumptionWidget',
- templateUrl: './flat.html',
+ selector: "selfconsumptionWidget",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -13,15 +13,15 @@ export class FlatComponent extends AbstractFlatWidget {
protected override onCurrentData(currentData: CurrentData) {
this.selfconsumptionValue = Utils.calculateSelfConsumption(
- currentData.allComponents['_sum/GridSellActiveEnergy'],
- currentData.allComponents['_sum/ProductionActiveEnergy'],
+ currentData.allComponents["_sum/GridSellActiveEnergy"],
+ currentData.allComponents["_sum/ProductionActiveEnergy"],
);
}
protected override getChannelAddresses(): ChannelAddress[] {
return [
- new ChannelAddress('_sum', 'GridSellActiveEnergy'),
- new ChannelAddress('_sum', 'ProductionActiveEnergy'),
+ new ChannelAddress("_sum", "GridSellActiveEnergy"),
+ new ChannelAddress("_sum", "ProductionActiveEnergy"),
];
}
}
diff --git a/ui/src/app/edge/history/common/selfconsumption/overview/overview.html b/ui/src/app/edge/history/common/selfconsumption/overview/overview.html
index 8100470a198..161f87a37fc 100644
--- a/ui/src/app/edge/history/common/selfconsumption/overview/overview.html
+++ b/ui/src/app/edge/history/common/selfconsumption/overview/overview.html
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/common/selfconsumption/overview/overview.ts b/ui/src/app/edge/history/common/selfconsumption/overview/overview.ts
index a3f812c1a88..51ed8f95a67 100644
--- a/ui/src/app/edge/history/common/selfconsumption/overview/overview.ts
+++ b/ui/src/app/edge/history/common/selfconsumption/overview/overview.ts
@@ -1,7 +1,7 @@
-import { Component } from '@angular/core';
-import { AbstractHistoryChartOverview } from 'src/app/shared/components/chart/abstractHistoryChartOverview';
+import { Component } from "@angular/core";
+import { AbstractHistoryChartOverview } from "src/app/shared/components/chart/abstractHistoryChartOverview";
@Component({
- templateUrl: './overview.html',
+ templateUrl: "./overview.html",
})
export class OverviewComponent extends AbstractHistoryChartOverview { }
diff --git a/ui/src/app/edge/history/delayedselltogrid/chart.component.ts b/ui/src/app/edge/history/delayedselltogrid/chart.component.ts
index 358aef34881..deb3efeec3c 100644
--- a/ui/src/app/edge/history/delayedselltogrid/chart.component.ts
+++ b/ui/src/app/edge/history/delayedselltogrid/chart.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { YAxisTitle } from 'src/app/shared/service/utils';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { YAxisType } from "src/app/shared/service/utils";
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'delayedselltogridgchart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "delayedselltogridgchart",
+ templateUrl: "../abstracthistorychart.html",
})
export class DelayedSellToGridChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -32,7 +32,6 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -50,9 +49,9 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
this.colors = [];
this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
this.service.getConfig().then(config => {
- const meterIdActivePower = config.getComponent(this.componentId).properties['meter.id'] + '/ActivePower';
- const sellToGridPowerLimit = this.componentId + '/_PropertySellToGridPowerLimit';
- const continuousSellToGridPower = this.componentId + '/_PropertyContinuousSellToGridPower';
+ const meterIdActivePower = config.getComponent(this.componentId).properties["meter.id"] + "/ActivePower";
+ const sellToGridPowerLimit = this.componentId + "/_PropertySellToGridPowerLimit";
+ const continuousSellToGridPower = this.componentId + "/_PropertyContinuousSellToGridPower";
const result = response.result;
// convert labels
const labels: Date[] = [];
@@ -75,13 +74,13 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
}
});
datasets.push({
- label: this.translate.instant('General.gridSell'),
+ label: this.translate.instant("General.gridSell"),
data: data,
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0.05)',
- borderColor: 'rgba(0,0,0,1)',
+ backgroundColor: "rgba(0,0,0,0.05)",
+ borderColor: "rgba(0,0,0,1)",
});
}
if (sellToGridPowerLimit in result.data) {
@@ -95,14 +94,14 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.DelayedSellToGrid.sellToGridPowerLimit'),
+ label: this.translate.instant("Edge.Index.Widgets.DelayedSellToGrid.sellToGridPowerLimit"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(0,223,0,1)",
});
}
if (continuousSellToGridPower in result.data) {
@@ -116,27 +115,27 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.DelayedSellToGrid.continuousSellToGridPower'),
+ label: this.translate.instant("Edge.Index.Widgets.DelayedSellToGrid.continuousSellToGridPower"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(200,0,0,1)",
});
}
- if ('_sum/EssActivePower' in result.data) {
+ if ("_sum/EssActivePower" in result.data) {
/*
* Storage Charge
*/
let effectivePower;
- if ('_sum/ProductionDcActualPower' in result.data && result.data['_sum/ProductionDcActualPower'].length > 0) {
- effectivePower = result.data['_sum/ProductionDcActualPower'].map((value, index) => {
- return Utils.subtractSafely(result.data['_sum/EssActivePower'][index], value);
+ if ("_sum/ProductionDcActualPower" in result.data && result.data["_sum/ProductionDcActualPower"].length > 0) {
+ effectivePower = result.data["_sum/ProductionDcActualPower"].map((value, index) => {
+ return Utils.subtractSafely(result.data["_sum/EssActivePower"][index], value);
});
} else {
- effectivePower = result.data['_sum/EssActivePower'];
+ effectivePower = result.data["_sum/EssActivePower"];
}
const chargeData = effectivePower.map(value => {
if (value == null) {
@@ -148,13 +147,13 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
}
});
datasets.push({
- label: this.translate.instant('General.chargePower'),
+ label: this.translate.instant("General.chargePower"),
data: chargeData,
borderDash: [10, 10],
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
/*
* Storage Discharge
@@ -169,13 +168,13 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
}
});
datasets.push({
- label: this.translate.instant('General.dischargePower'),
+ label: this.translate.instant("General.dischargePower"),
data: dischargeData,
borderDash: [10, 10],
});
this.colors.push({
- backgroundColor: 'rgba(200,0,0,0.05)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(200,0,0,0.05)",
+ borderColor: "rgba(200,0,0,1)",
});
}
this.datasets = datasets;
@@ -193,7 +192,7 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
this.initializeChart();
return;
}).finally(() => {
- this.unit = YAxisTitle.ENERGY;
+ this.unit = YAxisType.ENERGY;
this.setOptions(this.options);
});
}
@@ -201,11 +200,11 @@ export class DelayedSellToGridChartComponent extends AbstractHistoryChart implem
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress(this.componentId, '_PropertySellToGridPowerLimit'),
- new ChannelAddress(this.componentId, '_PropertyContinuousSellToGridPower'),
- new ChannelAddress(config.getComponent(this.componentId).properties['meter.id'], 'ActivePower'),
- new ChannelAddress('_sum', 'ProductionDcActualPower'),
- new ChannelAddress('_sum', 'EssActivePower'),
+ new ChannelAddress(this.componentId, "_PropertySellToGridPowerLimit"),
+ new ChannelAddress(this.componentId, "_PropertyContinuousSellToGridPower"),
+ new ChannelAddress(config.getComponent(this.componentId).properties["meter.id"], "ActivePower"),
+ new ChannelAddress("_sum", "ProductionDcActualPower"),
+ new ChannelAddress("_sum", "EssActivePower"),
];
resolve(result);
});
diff --git a/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.html b/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.html
index cedca95c96d..63997a1e1c5 100644
--- a/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.html
+++ b/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.html
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.ts b/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.ts
index c258d3f48df..b7b4f44eed3 100644
--- a/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.ts
+++ b/ui/src/app/edge/history/delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component.ts
@@ -1,10 +1,10 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Edge, EdgeConfig, Service } from "../../../../shared/shared";
@Component({
selector: DelayedSellToGridChartOverviewComponent.SELECTOR,
- templateUrl: './delayedselltogridchartoverview.component.html',
+ templateUrl: "./delayedselltogridchartoverview.component.html",
})
export class DelayedSellToGridChartOverviewComponent implements OnInit {
@@ -18,7 +18,7 @@ export class DelayedSellToGridChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.edge = edge;
this.component = config.getComponent(this.route.snapshot.params.componentId);
diff --git a/ui/src/app/edge/history/delayedselltogrid/widget.component.html b/ui/src/app/edge/history/delayedselltogrid/widget.component.html
index e23f900e9f0..9850fcb7ddd 100644
--- a/ui/src/app/edge/history/delayedselltogrid/widget.component.html
+++ b/ui/src/app/edge/history/delayedselltogrid/widget.component.html
@@ -13,4 +13,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/delayedselltogrid/widget.component.ts b/ui/src/app/edge/history/delayedselltogrid/widget.component.ts
index 5a537af8d69..7d618d15e6e 100644
--- a/ui/src/app/edge/history/delayedselltogrid/widget.component.ts
+++ b/ui/src/app/edge/history/delayedselltogrid/widget.component.ts
@@ -1,11 +1,11 @@
-import { ActivatedRoute } from '@angular/router';
-import { Component, Input, OnInit } from '@angular/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { Edge, Service, EdgeConfig } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { Edge, EdgeConfig, Service } from "src/app/shared/shared";
@Component({
selector: DelayedSellToGridWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class DelayedSellToGridWidgetComponent implements OnInit {
@@ -22,7 +22,7 @@ export class DelayedSellToGridWidgetComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
diff --git a/ui/src/app/edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component.html b/ui/src/app/edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component.html
deleted file mode 100644
index 887b62548da..00000000000
--- a/ui/src/app/edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
- {{ component.alias }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ui/src/app/edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component.ts b/ui/src/app/edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component.ts
deleted file mode 100644
index 59d90f56e80..00000000000
--- a/ui/src/app/edge/history/fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service, Utils } from '../../../../shared/shared';
-
-@Component({
- selector: FixDigitalOutputChartOverviewComponent.SELECTOR,
- templateUrl: './fixdigitaloutputchartoverview.component.html',
-})
-export class FixDigitalOutputChartOverviewComponent implements OnInit {
-
- private static readonly SELECTOR = "fixdigitaloutput-chart-overview";
-
- public edge: Edge | null = null;
- public component: EdgeConfig.Component | null = null;
-
- public showTotal: boolean = false;
- public fixDigitalOutputComponents: string[] = [];
-
- // reference to the Utils method to access via html
- public isLastElement = Utils.isLastElement;
-
- constructor(
- public service: Service,
- private route: ActivatedRoute,
- ) { }
-
- ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
- this.service.getConfig().then(config => {
- this.edge = edge;
- this.component = config.getComponent(this.route.snapshot.params.componentId);
- config.getComponentsByFactory('Controller.Io.FixDigitalOutput').forEach(component => {
- this.fixDigitalOutputComponents.push(component.id);
- });
- if (this.fixDigitalOutputComponents.length > 1) {
- this.showTotal = false;
- } else if (this.fixDigitalOutputComponents.length == 1) {
- this.showTotal = null;
- }
- });
- });
-
- }
-
- onNotifyTotal(showTotal: boolean): void {
- this.showTotal = showTotal;
- }
-}
diff --git a/ui/src/app/edge/history/fixdigitaloutput/singlechart.component.ts b/ui/src/app/edge/history/fixdigitaloutput/singlechart.component.ts
deleted file mode 100644
index bc55416a9c8..00000000000
--- a/ui/src/app/edge/history/fixdigitaloutput/singlechart.component.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { YAxisTitle } from 'src/app/shared/service/utils';
-
-import { QueryHistoricTimeseriesDataResponse } from '../../../shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
-
-@Component({
- selector: 'fixDigitalOutputSingleChart',
- templateUrl: '../abstracthistorychart.html',
-})
-export class FixDigitalOutputSingleChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
-
- @Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
- @Input({ required: true }) public componentId!: string;
-
-
- constructor(
- protected override service: Service,
- protected override translate: TranslateService,
- private route: ActivatedRoute,
- ) {
- super("fixdigitaloutput-single-chart", service, translate);
- }
-
- ngOnChanges() {
- this.updateChart();
- }
-
- ngOnInit() {
- this.startSpinner();
- this.service.setCurrentComponent('', this.route);
- }
-
- ngOnDestroy() {
- this.unsubscribeChartRefresh();
- }
-
- public getChartHeight(): number {
- return window.innerHeight / 1.3;
- }
-
- protected updateChart() {
- this.autoSubscribeChartRefresh();
- this.startSpinner();
- this.colors = [];
- this.loading = true;
- this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
- const result = (response as QueryHistoricTimeseriesDataResponse).result;
- // convert labels
- const labels: Date[] = [];
- for (const timestamp of result.timestamps) {
- labels.push(new Date(timestamp));
- }
- this.labels = labels;
-
- // convert datasets
- const datasets: Chart.ChartDataset[] = [];
- for (const channel in result.data) {
- const address = ChannelAddress.fromString(channel);
- const data = result.data[channel].map(value => {
- if (value == null) {
- return null;
- } else {
- return value * 100; // convert to % [0,100]
- }
- });
- datasets.push({
- label: address.channelId,
- data: data,
- });
- this.colors.push({
- backgroundColor: 'rgba(0,191,255,0.05)',
- borderColor: 'rgba(0,191,255,1)',
- });
- }
- this.datasets = datasets;
- this.loading = false;
- this.stopSpinner();
- }).catch(reason => {
- console.error(reason); // TODO error message
- this.initializeChart();
- return;
- }).finally(async () => {
- this.unit = YAxisTitle.PERCENTAGE;
- await this.setOptions(this.options);
- this.stopSpinner();
- });
- }
-
- protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
- return new Promise((resolve) => {
- const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['outputChannelAddress']);
- const channeladdresses = [outputChannel];
- resolve(channeladdresses);
- });
- }
-
- protected setLabel() {
- this.options = this.createDefaultChartOptions();
- }
-
-}
diff --git a/ui/src/app/edge/history/fixdigitaloutput/totalchart.component.ts b/ui/src/app/edge/history/fixdigitaloutput/totalchart.component.ts
deleted file mode 100644
index e675ed613c0..00000000000
--- a/ui/src/app/edge/history/fixdigitaloutput/totalchart.component.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { YAxisTitle } from 'src/app/shared/service/utils';
-
-import { QueryHistoricTimeseriesDataResponse } from '../../../shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { ChannelAddress, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
-
-@Component({
- selector: 'fixDigitalOutputTotalChart',
- templateUrl: '../abstracthistorychart.html',
-})
-export class FixDigitalOutputTotalChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
-
- @Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
-
- constructor(
- protected override service: Service,
- protected override translate: TranslateService,
- private route: ActivatedRoute,
- ) {
- super("fixdigitaloutput-total-chart", service, translate);
- }
-
- ngOnChanges() {
- this.updateChart();
- }
-
- ngOnInit() {
- this.startSpinner();
- this.service.setCurrentComponent('', this.route);
- }
-
- ngOnDestroy() {
- this.unsubscribeChartRefresh();
- }
-
- public getChartHeight(): number {
- return window.innerHeight / 1.3;
- }
- protected updateChart() {
- this.autoSubscribeChartRefresh();
- this.startSpinner();
- this.colors = [];
- this.loading = true;
- this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
- const result = (response as QueryHistoricTimeseriesDataResponse).result;
- // convert labels
- const labels: Date[] = [];
- for (const timestamp of result.timestamps) {
- labels.push(new Date(timestamp));
- }
- this.labels = labels;
-
-
- const datasets = [];
- // convert datasets
- Object.keys(result.data).forEach((channel, index) => {
- const address = ChannelAddress.fromString(channel);
- const data = result.data[channel]?.map((value) => {
- if (value == null) {
- return null;
- } else {
- return value * 100; // convert to % [0,100]
- }
- });
- switch (index % 2) {
- case 0:
- datasets.push({
- label: address.channelId,
- data: data,
- });
- this.colors.push({
- backgroundColor: 'rgba(0,191,255,0.05)',
- borderColor: 'rgba(0,191,255,1)',
- });
- break;
- case 1:
- datasets.push({
- label: address.channelId,
- data: data,
- });
- this.colors.push({
- backgroundColor: 'rgba(0,0,139,0.05)',
- borderColor: 'rgba(0,0,139,1)',
- });
- break;
- }
- this.datasets = datasets;
- this.loading = false;
- this.stopSpinner();
-
- });
- }).catch(reason => {
- console.error(reason); // TODO error message
- this.initializeChart();
- return;
- }).finally(async () => {
- this.unit = YAxisTitle.PERCENTAGE;
- this.formatNumber = '1.0-0';
- await this.setOptions(this.options);
- });
- }
-
- protected getChannelAddresses(): Promise {
- return new Promise((resolve, reject) => {
- this.service.getConfig().then(config => {
- const channeladdresses = [];
- // find all FixIoControllers
- config.getComponentsByFactory('Controller.Io.FixDigitalOutput').forEach(component => {
- const outputChannel = ChannelAddress.fromString(config.getComponentProperties(component.id)['outputChannelAddress']);
- channeladdresses.push(outputChannel);
- });
- resolve(channeladdresses);
- }).catch(reason => reject(reason));
- });
- }
-
- protected setLabel() {
- this.options = this.createDefaultChartOptions();
- }
-
-}
diff --git a/ui/src/app/edge/history/fixdigitaloutput/widget.component.html b/ui/src/app/edge/history/fixdigitaloutput/widget.component.html
deleted file mode 100644
index 6a243ca093c..00000000000
--- a/ui/src/app/edge/history/fixdigitaloutput/widget.component.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- {{ component.alias }}
-
-
-
-
-
- Edge.History.activeDuration |
-
- {{ activeSecondsOverPeriod | formatSecondsToDuration }}
- |
-
-
-
-
\ No newline at end of file
diff --git a/ui/src/app/edge/history/fixdigitaloutput/widget.component.ts b/ui/src/app/edge/history/fixdigitaloutput/widget.component.ts
deleted file mode 100644
index 7ca50fb8bf5..00000000000
--- a/ui/src/app/edge/history/fixdigitaloutput/widget.component.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryWidget } from '../abstracthistorywidget';
-import { calculateActiveTimeOverPeriod } from '../shared';
-
-@Component({
- selector: FixDigitalOutputWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
-})
-export class FixDigitalOutputWidgetComponent extends AbstractHistoryWidget implements OnInit, OnChanges, OnDestroy {
-
- private static readonly SELECTOR = "fixDigitalOutputWidget";
- @Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
- @Input({ required: true }) public componentId!: string;
-
- public component: EdgeConfig.Component | null = null;
- public activeSecondsOverPeriod: number | null = null;
- public edge: Edge | null = null;
- private config: EdgeConfig | null = null;
-
- constructor(
- public override service: Service,
- private route: ActivatedRoute,
- ) {
- super(service);
- }
-
- ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(response => {
- this.service.getConfig().then(config => {
- this.edge = response;
- this.config = config;
- this.component = config.getComponent(this.componentId);
- });
- });
- }
-
- ngOnDestroy() {
- this.unsubscribeWidgetRefresh();
- }
-
- ngOnChanges() {
- this.updateValues();
- }
-
- protected updateValues() {
- // Gather result & timestamps to calculate effective active time in %
- this.queryHistoricTimeseriesData(this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).then(response => {
- const result = (response as QueryHistoricTimeseriesDataResponse).result;
- this.service.getConfig().then(config => {
- const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['outputChannelAddress']);
- this.activeSecondsOverPeriod = calculateActiveTimeOverPeriod(outputChannel, result);
- });
- });
- }
-
- protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
- return new Promise((resolve) => {
- const outputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['outputChannelAddress']);
- const channeladdresses = [outputChannel];
- resolve(channeladdresses);
- });
- }
-}
diff --git a/ui/src/app/edge/history/heatingelement/chart.component.ts b/ui/src/app/edge/history/heatingelement/chart.component.ts
index 298858a48eb..49dd46bf02c 100644
--- a/ui/src/app/edge/history/heatingelement/chart.component.ts
+++ b/ui/src/app/edge/history/heatingelement/chart.component.ts
@@ -1,19 +1,19 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
-import type { ChartOptions } from 'chart.js';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChartAxis, YAxisTitle } from 'src/app/shared/service/utils';
+import type { ChartOptions } from "chart.js";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChartAxis, YAxisType } from "src/app/shared/service/utils";
-import { QueryHistoricTimeseriesDataResponse } from '../../../shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { QueryHistoricTimeseriesDataResponse } from "../../../shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'heatingelementChart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "heatingelementChart",
+ templateUrl: "../abstracthistorychart.html",
})
export class HeatingelementChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -34,7 +34,6 @@ export class HeatingelementChartComponent extends AbstractHistoryChart implement
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
this.setLabel();
}
@@ -63,7 +62,7 @@ export class HeatingelementChartComponent extends AbstractHistoryChart implement
// convert datasets
const datasets = [];
- const level = this.component.id + '/Level';
+ const level = this.component.id + "/Level";
if (level in result.data) {
const levelData = result.data[level].map(value => {
@@ -74,12 +73,12 @@ export class HeatingelementChartComponent extends AbstractHistoryChart implement
}
});
datasets.push({
- label: 'Level',
+ label: "Level",
data: levelData,
});
this.colors.push({
- backgroundColor: 'rgba(200,0,0,0.05)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(200,0,0,0.05)",
+ borderColor: "rgba(200,0,0,1)",
});
}
this.datasets = datasets;
@@ -97,8 +96,8 @@ export class HeatingelementChartComponent extends AbstractHistoryChart implement
this.initializeChart();
return;
}).finally(async () => {
- this.formatNumber = '1.0-1';
- this.unit = YAxisTitle.NONE;
+ this.formatNumber = "1.0-1";
+ this.unit = YAxisType.NONE;
await this.setOptions(this.options);
this.applyControllerSpecificOptions(this.options);
});
@@ -106,17 +105,17 @@ export class HeatingelementChartComponent extends AbstractHistoryChart implement
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
- const levels = new ChannelAddress(this.component.id, 'Level');
+ const levels = new ChannelAddress(this.component.id, "Level");
const channeladdresses = [levels];
resolve(channeladdresses);
});
}
protected applyControllerSpecificOptions(options: ChartOptions) {
- options.scales[ChartAxis.LEFT]['title'].text = 'Level';
- options.scales[ChartAxis.LEFT]['beginAtZero'] = true;
+ options.scales[ChartAxis.LEFT]["title"].text = "Level";
+ options.scales[ChartAxis.LEFT]["beginAtZero"] = true;
options.scales[ChartAxis.LEFT].max = 3;
- options.scales[ChartAxis.LEFT].ticks['stepSize'] = 1;
+ options.scales[ChartAxis.LEFT].ticks["stepSize"] = 1;
this.options = options;
}
diff --git a/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.html b/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.html
index bcfa40fc435..9b116e552fb 100644
--- a/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.html
+++ b/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.html
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.ts b/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.ts
index 440eeb2c38b..f615818d7c3 100644
--- a/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.ts
+++ b/ui/src/app/edge/history/heatingelement/heatingelementchartoverview/heatingelementchartoverview.component.ts
@@ -1,10 +1,10 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Edge, EdgeConfig, Service } from "../../../../shared/shared";
@Component({
selector: HeatingelementChartOverviewComponent.SELECTOR,
- templateUrl: './heatingelementchartoverview.component.html',
+ templateUrl: "./heatingelementchartoverview.component.html",
})
export class HeatingelementChartOverviewComponent implements OnInit {
@@ -18,7 +18,7 @@ export class HeatingelementChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.component = config.getComponent(this.route.snapshot.params.componentId);
this.service.getConfig().then(config => {
diff --git a/ui/src/app/edge/history/heatingelement/widget.component.html b/ui/src/app/edge/history/heatingelement/widget.component.html
index 4af8de75ce2..49b50bff319 100644
--- a/ui/src/app/edge/history/heatingelement/widget.component.html
+++ b/ui/src/app/edge/history/heatingelement/widget.component.html
@@ -34,4 +34,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/heatingelement/widget.component.ts b/ui/src/app/edge/history/heatingelement/widget.component.ts
index 5f39ae03bd0..262c025d23c 100644
--- a/ui/src/app/edge/history/heatingelement/widget.component.ts
+++ b/ui/src/app/edge/history/heatingelement/widget.component.ts
@@ -1,14 +1,14 @@
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryWidget } from '../abstracthistorywidget';
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryWidget } from "../abstracthistorywidget";
@Component({
selector: HeatingelementWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class HeatingelementWidgetComponent extends AbstractHistoryWidget implements OnInit, OnChanges, OnDestroy {
@@ -33,7 +33,7 @@ export class HeatingelementWidgetComponent extends AbstractHistoryWidget impleme
}
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
@@ -58,18 +58,18 @@ export class HeatingelementWidgetComponent extends AbstractHistoryWidget impleme
protected updateValues() {
this.queryHistoricTimeseriesData(this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).then(response => {
- this.activeTimeOverPeriodLevel1 = this.getCumulativeValue(this.componentId + '/Level1CumulatedTime', response);
- this.activeTimeOverPeriodLevel2 = this.getCumulativeValue(this.componentId + '/Level2CumulatedTime', response);
- this.activeTimeOverPeriodLevel3 = this.getCumulativeValue(this.componentId + '/Level3CumulatedTime', response);
+ this.activeTimeOverPeriodLevel1 = this.getCumulativeValue(this.componentId + "/Level1CumulatedTime", response);
+ this.activeTimeOverPeriodLevel2 = this.getCumulativeValue(this.componentId + "/Level2CumulatedTime", response);
+ this.activeTimeOverPeriodLevel3 = this.getCumulativeValue(this.componentId + "/Level3CumulatedTime", response);
});
}
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const channeladdresses = [
- new ChannelAddress(this.componentId, 'Level1CumulatedTime'),
- new ChannelAddress(this.componentId, 'Level2CumulatedTime'),
- new ChannelAddress(this.componentId, 'Level3CumulatedTime'),
+ new ChannelAddress(this.componentId, "Level1CumulatedTime"),
+ new ChannelAddress(this.componentId, "Level2CumulatedTime"),
+ new ChannelAddress(this.componentId, "Level3CumulatedTime"),
];
resolve(channeladdresses);
});
diff --git a/ui/src/app/edge/history/heatpump/chart.component.ts b/ui/src/app/edge/history/heatpump/chart.component.ts
index 3a00779b838..4e39df05a3c 100644
--- a/ui/src/app/edge/history/heatpump/chart.component.ts
+++ b/ui/src/app/edge/history/heatpump/chart.component.ts
@@ -1,17 +1,17 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChartAxis } from 'src/app/shared/service/utils';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChartAxis } from "src/app/shared/service/utils";
-import { ChannelAddress, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { ChannelAddress, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'heatpumpchart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "heatpumpchart",
+ templateUrl: "../abstracthistorychart.html",
})
export class HeatPumpChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -33,7 +33,6 @@ export class HeatPumpChartComponent extends AbstractHistoryChart implements OnIn
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -61,9 +60,9 @@ export class HeatPumpChartComponent extends AbstractHistoryChart implements OnIn
// convert datasets
const datasets = [];
- if (this.component.id + '/Status' in result.data) {
+ if (this.component.id + "/Status" in result.data) {
- const stateTimeData = result.data[this.component.id + '/Status'].map(value => {
+ const stateTimeData = result.data[this.component.id + "/Status"].map(value => {
if (value == null) {
return null;
} else {
@@ -72,13 +71,13 @@ export class HeatPumpChartComponent extends AbstractHistoryChart implements OnIn
});
datasets.push({
- label: this.translate.instant('General.state'),
+ label: this.translate.instant("General.state"),
data: stateTimeData,
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(200,0,0,0.05)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(200,0,0,0.05)",
+ borderColor: "rgba(200,0,0,1)",
});
}
this.datasets = datasets;
@@ -97,7 +96,7 @@ export class HeatPumpChartComponent extends AbstractHistoryChart implements OnIn
protected getChannelAddresses(): Promise {
return new Promise((resolve) => {
- resolve([new ChannelAddress(this.component.id, 'Status')]);
+ resolve([new ChannelAddress(this.component.id, "Status")]);
});
}
@@ -107,19 +106,19 @@ export class HeatPumpChartComponent extends AbstractHistoryChart implements OnIn
private applyControllerSpecificOptions(options: Chart.ChartOptions) {
const translate = this.translate;
- options.scales[ChartAxis.LEFT]['title'].text = this.translate.instant('General.state');
+ options.scales[ChartAxis.LEFT]["title"].text = this.translate.instant("General.state");
options.scales[ChartAxis.LEFT].ticks.callback = function (label, index, labels) {
switch (label) {
case -1:
- return translate.instant('Edge.Index.Widgets.HeatPump.undefined');
+ return translate.instant("Edge.Index.Widgets.HeatPump.undefined");
case 0:
- return translate.instant('Edge.Index.Widgets.HeatPump.lock');
+ return translate.instant("Edge.Index.Widgets.HeatPump.lock");
case 1:
- return translate.instant('Edge.Index.Widgets.HeatPump.normalOperationShort');
+ return translate.instant("Edge.Index.Widgets.HeatPump.normalOperationShort");
case 2:
- return translate.instant('Edge.Index.Widgets.HeatPump.switchOnRecShort');
+ return translate.instant("Edge.Index.Widgets.HeatPump.switchOnRecShort");
case 3:
- return translate.instant('Edge.Index.Widgets.HeatPump.switchOnComShort');
+ return translate.instant("Edge.Index.Widgets.HeatPump.switchOnComShort");
}
};
@@ -129,30 +128,30 @@ export class HeatPumpChartComponent extends AbstractHistoryChart implements OnIn
let toolTipValue;
switch (value) {
case -1:
- toolTipValue = translate.instant('Edge.Index.Widgets.HeatPump.undefined');
+ toolTipValue = translate.instant("Edge.Index.Widgets.HeatPump.undefined");
break;
case 0:
- toolTipValue = translate.instant('Edge.Index.Widgets.HeatPump.lock');
+ toolTipValue = translate.instant("Edge.Index.Widgets.HeatPump.lock");
break;
case 1:
- toolTipValue = translate.instant('Edge.Index.Widgets.HeatPump.normalOperation');
+ toolTipValue = translate.instant("Edge.Index.Widgets.HeatPump.normalOperation");
break;
case 2:
- toolTipValue = translate.instant('Edge.Index.Widgets.HeatPump.switchOnRec');
+ toolTipValue = translate.instant("Edge.Index.Widgets.HeatPump.switchOnRec");
break;
case 3:
- toolTipValue = translate.instant('Edge.Index.Widgets.HeatPump.switchOnCom');
+ toolTipValue = translate.instant("Edge.Index.Widgets.HeatPump.switchOnCom");
break;
default:
- toolTipValue = '';
+ toolTipValue = "";
break;
}
return label + ": " + toolTipValue; // TODO get locale dynamically
};
options.scales[ChartAxis.LEFT].max = 3;
- options.scales[ChartAxis.LEFT]['beginAtZero'] = true;
+ options.scales[ChartAxis.LEFT]["beginAtZero"] = true;
this.options = options;
}
diff --git a/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.html b/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.html
index a244ed42441..f8d4c9d4459 100644
--- a/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.html
+++ b/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.html
@@ -25,4 +25,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.ts b/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.ts
index 16b4085313c..e17887c4e55 100644
--- a/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.ts
+++ b/ui/src/app/edge/history/heatpump/heatpumpchartoverview/heatpumpchartoverview.component.ts
@@ -1,11 +1,11 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { Edge, EdgeConfig, Service } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { Edge, EdgeConfig, Service } from "../../../../shared/shared";
@Component({
selector: HeatPumpChartOverviewComponent.SELECTOR,
- templateUrl: './heatpumpchartoverview.component.html',
+ templateUrl: "./heatpumpchartoverview.component.html",
})
export class HeatPumpChartOverviewComponent implements OnInit {
@@ -21,7 +21,7 @@ export class HeatPumpChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.component = config.getComponent(this.route.snapshot.params.componentId);
this.service.getConfig().then(config => {
diff --git a/ui/src/app/edge/history/heatpump/widget.component.html b/ui/src/app/edge/history/heatpump/widget.component.html
index b3537ee557c..c664db8d882 100644
--- a/ui/src/app/edge/history/heatpump/widget.component.html
+++ b/ui/src/app/edge/history/heatpump/widget.component.html
@@ -35,4 +35,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/heatpump/widget.component.ts b/ui/src/app/edge/history/heatpump/widget.component.ts
index 30b91ac9062..90fc211cca5 100644
--- a/ui/src/app/edge/history/heatpump/widget.component.ts
+++ b/ui/src/app/edge/history/heatpump/widget.component.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryWidget } from '../abstracthistorywidget';
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryWidget } from "../abstracthistorywidget";
@Component({
selector: HeatpumpWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class HeatpumpWidgetComponent extends AbstractHistoryWidget implements OnInit, OnChanges, OnDestroy {
@@ -35,7 +35,7 @@ export class HeatpumpWidgetComponent extends AbstractHistoryWidget implements On
}
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
@@ -56,17 +56,17 @@ export class HeatpumpWidgetComponent extends AbstractHistoryWidget implements On
this.getChannelAddresses(this.edge, config).then(channels => {
this.service.queryEnergy(this.period.from, this.period.to, channels).then(response => {
const result = response.result;
- if (this.componentId + '/ForceOnStateTime' in result.data) {
- this.activeTimeOverPeriodForceOn = result.data[this.componentId + '/ForceOnStateTime'];
+ if (this.componentId + "/ForceOnStateTime" in result.data) {
+ this.activeTimeOverPeriodForceOn = result.data[this.componentId + "/ForceOnStateTime"];
}
- if (this.componentId + '/RegularStateTime' in result.data) {
- this.activeTimeOverPeriodRegular = result.data[this.componentId + '/RegularStateTime'];
+ if (this.componentId + "/RegularStateTime" in result.data) {
+ this.activeTimeOverPeriodRegular = result.data[this.componentId + "/RegularStateTime"];
}
- if (this.componentId + '/RecommendationStateTime' in result.data) {
- this.activeTimeOverPeriodRecommendation = result.data[this.componentId + '/RecommendationStateTime'];
+ if (this.componentId + "/RecommendationStateTime" in result.data) {
+ this.activeTimeOverPeriodRecommendation = result.data[this.componentId + "/RecommendationStateTime"];
}
- if (this.componentId + '/LockStateTime' in result.data) {
- this.activeTimeOverPeriodLock = result.data[this.componentId + '/LockStateTime'];
+ if (this.componentId + "/LockStateTime" in result.data) {
+ this.activeTimeOverPeriodLock = result.data[this.componentId + "/LockStateTime"];
}
});
});
@@ -76,10 +76,10 @@ export class HeatpumpWidgetComponent extends AbstractHistoryWidget implements On
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const channels: ChannelAddress[] = [
- new ChannelAddress(this.componentId, 'ForceOnStateTime'),
- new ChannelAddress(this.componentId, 'RegularStateTime'),
- new ChannelAddress(this.componentId, 'RecommendationStateTime'),
- new ChannelAddress(this.componentId, 'LockStateTime'),
+ new ChannelAddress(this.componentId, "ForceOnStateTime"),
+ new ChannelAddress(this.componentId, "RegularStateTime"),
+ new ChannelAddress(this.componentId, "RecommendationStateTime"),
+ new ChannelAddress(this.componentId, "LockStateTime"),
];
resolve(channels);
});
diff --git a/ui/src/app/edge/history/history.component.html b/ui/src/app/edge/history/history.component.html
index 28687881029..8774f678d1b 100644
--- a/ui/src/app/edge/history/history.component.html
+++ b/ui/src/app/edge/history/history.component.html
@@ -1,7 +1,7 @@
-
+
diff --git a/ui/src/app/edge/history/history.component.ts b/ui/src/app/edge/history/history.component.ts
index b0a4c35e4bf..719a287a158 100644
--- a/ui/src/app/edge/history/history.component.ts
+++ b/ui/src/app/edge/history/history.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, OnInit, ViewChild } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { AppService } from 'src/app/app.service';
-import { HeaderComponent } from 'src/app/shared/components/header/header.component';
-import { JsonrpcResponseError } from 'src/app/shared/jsonrpc/base';
-import { Edge, EdgeConfig, Service, Widgets } from 'src/app/shared/shared';
-import { environment } from 'src/environments';
+import { Component, OnInit, ViewChild } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { AppService } from "src/app/app.service";
+import { HeaderComponent } from "src/app/shared/components/header/header.component";
+import { JsonrpcResponseError } from "src/app/shared/jsonrpc/base";
+import { Edge, EdgeConfig, Service, Widgets } from "src/app/shared/shared";
+import { environment } from "src/environments";
@Component({
- selector: 'history',
- templateUrl: './history.component.html',
+ selector: "history",
+ templateUrl: "./history.component.html",
})
export class HistoryComponent implements OnInit {
@@ -42,7 +42,6 @@ export class HistoryComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route);
this.service.currentEdge.subscribe((edge) => {
this.edge = edge;
});
@@ -57,8 +56,8 @@ export class HistoryComponent implements OnInit {
config.hasStorage();
this.widgets = config.widgets;
// Are we connected to OpenEMS Edge and is a timedata service available?
- if (environment.backend == 'OpenEMS Edge'
- && config.getComponentsImplementingNature('io.openems.edge.timedata.api.Timedata').filter(c => c.isEnabled).length == 0) {
+ if (environment.backend == "OpenEMS Edge"
+ && config.getComponentsImplementingNature("io.openems.edge.timedata.api.Timedata").filter(c => c.isEnabled).length == 0) {
this.isTimedataAvailable = false;
}
});
diff --git a/ui/src/app/edge/history/history.module.ts b/ui/src/app/edge/history/history.module.ts
index 9642a03adbf..9d45b5ba2df 100644
--- a/ui/src/app/edge/history/history.module.ts
+++ b/ui/src/app/edge/history/history.module.ts
@@ -1,45 +1,38 @@
-import { NgModule } from '@angular/core';
-import { HistoryDataErrorModule } from 'src/app/shared/components/history-data-error/history-data-error.module';
+import { NgModule } from "@angular/core";
+import { HistoryDataErrorModule } from "src/app/shared/components/history-data-error/history-data-error.module";
-import { SharedModule } from '../../shared/shared.module';
-import { ChpSocChartComponent } from './chpsoc/chart.component';
-import { ChpSocWidgetComponent } from './chpsoc/widget.component';
-import { Common } from './common/common';
-import { Controller } from './Controller/controller.module';
-import { DelayedSellToGridChartComponent } from './delayedselltogrid/chart.component';
-import { DelayedSellToGridChartOverviewComponent } from './delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component';
-import { DelayedSellToGridWidgetComponent } from './delayedselltogrid/widget.component';
-import { FixDigitalOutputChartOverviewComponent } from './fixdigitaloutput/fixdigitaloutputchartoverview/fixdigitaloutputchartoverview.component';
-import { FixDigitalOutputSingleChartComponent } from './fixdigitaloutput/singlechart.component';
-import { FixDigitalOutputTotalChartComponent } from './fixdigitaloutput/totalchart.component';
-import { FixDigitalOutputWidgetComponent } from './fixdigitaloutput/widget.component';
-import { HeatingelementChartComponent } from './heatingelement/chart.component';
-import { HeatingelementChartOverviewComponent } from './heatingelement/heatingelementchartoverview/heatingelementchartoverview.component';
-import { HeatingelementWidgetComponent } from './heatingelement/widget.component';
-import { HeatPumpChartComponent } from './heatpump/chart.component';
-import { HeatPumpChartOverviewComponent } from './heatpump/heatpumpchartoverview/heatpumpchartoverview.component';
-import { HeatpumpWidgetComponent } from './heatpump/widget.component';
-import { HistoryComponent } from './history.component';
-import { HistoryParentComponent } from './historyparent.component';
-import { AsymmetricPeakshavingChartOverviewComponent } from './peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component';
-import { AsymmetricPeakshavingChartComponent } from './peakshaving/asymmetric/chart.component';
-import { AsymmetricPeakshavingWidgetComponent } from './peakshaving/asymmetric/widget.component';
-import { SymmetricPeakshavingChartComponent } from './peakshaving/symmetric/chart.component';
-import { SymmetricPeakshavingChartOverviewComponent } from './peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component';
-import { SymmetricPeakshavingWidgetComponent } from './peakshaving/symmetric/widget.component';
-import { TimeslotPeakshavingChartComponent } from './peakshaving/timeslot/chart.component';
-import { TimeslotPeakshavingChartOverviewComponent } from './peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component';
-import { TimeslotPeakshavingWidgetComponent } from './peakshaving/timeslot/widget.component';
-import { SinglethresholdChartComponent } from './singlethreshold/chart.component';
-import { SinglethresholdChartOverviewComponent } from './singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component';
-import { SinglethresholdWidgetComponent } from './singlethreshold/widget.component';
-import { StorageChargerChartComponent } from './storage/chargerchart.component';
-import { StorageESSChartComponent } from './storage/esschart.component';
-import { StorageSingleChartComponent } from './storage/singlechart.component';
-import { SocStorageChartComponent } from './storage/socchart.component';
-import { StorageChartOverviewComponent } from './storage/storagechartoverview/storagechartoverview.component';
-import { StorageTotalChartComponent } from './storage/totalchart.component';
-import { StorageComponent } from './storage/widget.component';
+import { SharedModule } from "../../shared/shared.module";
+import { ChpSocChartComponent } from "./chpsoc/chart.component";
+import { ChpSocWidgetComponent } from "./chpsoc/widget.component";
+import { Common } from "./common/common";
+import { Controller } from "./Controller/controller.module";
+import { DelayedSellToGridChartComponent } from "./delayedselltogrid/chart.component";
+import { DelayedSellToGridChartOverviewComponent } from "./delayedselltogrid/symmetricpeakshavingchartoverview/delayedselltogridchartoverview.component";
+import { DelayedSellToGridWidgetComponent } from "./delayedselltogrid/widget.component";
+import { HeatingelementChartComponent } from "./heatingelement/chart.component";
+import { HeatingelementChartOverviewComponent } from "./heatingelement/heatingelementchartoverview/heatingelementchartoverview.component";
+import { HeatingelementWidgetComponent } from "./heatingelement/widget.component";
+import { HeatPumpChartComponent } from "./heatpump/chart.component";
+import { HeatPumpChartOverviewComponent } from "./heatpump/heatpumpchartoverview/heatpumpchartoverview.component";
+import { HeatpumpWidgetComponent } from "./heatpump/widget.component";
+import { HistoryComponent } from "./history.component";
+import { HistoryParentComponent } from "./historyparent.component";
+import { AsymmetricPeakshavingChartOverviewComponent } from "./peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component";
+import { AsymmetricPeakshavingChartComponent } from "./peakshaving/asymmetric/chart.component";
+import { AsymmetricPeakshavingWidgetComponent } from "./peakshaving/asymmetric/widget.component";
+import { SymmetricPeakshavingChartComponent } from "./peakshaving/symmetric/chart.component";
+import { SymmetricPeakshavingChartOverviewComponent } from "./peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component";
+import { SymmetricPeakshavingWidgetComponent } from "./peakshaving/symmetric/widget.component";
+import { TimeslotPeakshavingChartComponent } from "./peakshaving/timeslot/chart.component";
+import { TimeslotPeakshavingChartOverviewComponent } from "./peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component";
+import { TimeslotPeakshavingWidgetComponent } from "./peakshaving/timeslot/widget.component";
+import { StorageChargerChartComponent } from "./storage/chargerchart.component";
+import { StorageESSChartComponent } from "./storage/esschart.component";
+import { StorageSingleChartComponent } from "./storage/singlechart.component";
+import { SocStorageChartComponent } from "./storage/socchart.component";
+import { StorageChartOverviewComponent } from "./storage/storagechartoverview/storagechartoverview.component";
+import { StorageTotalChartComponent } from "./storage/totalchart.component";
+import { StorageComponent } from "./storage/widget.component";
@NgModule({
imports: [
@@ -57,10 +50,6 @@ import { StorageComponent } from './storage/widget.component';
DelayedSellToGridChartComponent,
DelayedSellToGridChartOverviewComponent,
DelayedSellToGridWidgetComponent,
- FixDigitalOutputChartOverviewComponent,
- FixDigitalOutputSingleChartComponent,
- FixDigitalOutputTotalChartComponent,
- FixDigitalOutputWidgetComponent,
HeatingelementChartComponent,
HeatingelementChartOverviewComponent,
HeatingelementWidgetComponent,
@@ -68,9 +57,6 @@ import { StorageComponent } from './storage/widget.component';
HeatPumpChartOverviewComponent,
HeatpumpWidgetComponent,
HistoryComponent,
- SinglethresholdChartComponent,
- SinglethresholdChartOverviewComponent,
- SinglethresholdWidgetComponent,
SocStorageChartComponent,
StorageChargerChartComponent,
StorageChartOverviewComponent,
diff --git a/ui/src/app/edge/history/historydataservice.ts b/ui/src/app/edge/history/historydataservice.ts
index bf64a942674..5abba259cc0 100644
--- a/ui/src/app/edge/history/historydataservice.ts
+++ b/ui/src/app/edge/history/historydataservice.ts
@@ -1,20 +1,22 @@
// @ts-strict-ignore
import { Inject, Injectable } from "@angular/core";
+import { RefresherCustomEvent } from "@ionic/angular";
+import { ChartConstants } from "src/app/shared/components/chart/chart.constants";
+import { QueryHistoricTimeseriesEnergyRequest } from "src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyRequest";
+import { Service } from "src/app/shared/service/service";
+import { Websocket } from "src/app/shared/service/websocket";
+import { DateUtils } from "src/app/shared/utils/date/dateutils";
import { DataService } from "../../shared/components/shared/dataservice";
import { QueryHistoricTimeseriesEnergyResponse } from "../../shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
import { ChannelAddress, Edge } from "../../shared/shared";
-import { DateUtils } from "src/app/shared/utils/date/dateutils";
-import { QueryHistoricTimeseriesEnergyRequest } from "src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyRequest";
-import { Websocket } from "src/app/shared/service/websocket";
-import { Service } from "src/app/shared/service/service";
-import { RefresherCustomEvent } from "@ionic/angular";
@Injectable()
export class HistoryDataService extends DataService {
public queryChannelsTimeout: ReturnType | null = null;
protected override timestamps: string[] = [];
+ private activeQueryData: string;
private channelAddresses: { [sourceId: string]: ChannelAddress } = {};
constructor(
@@ -36,21 +38,36 @@ export class HistoryDataService extends DataService {
if (Object.entries(this.channelAddresses).length > 0) {
this.service.historyPeriod.subscribe(date => {
- edge.sendRequest(this.websocket, new QueryHistoricTimeseriesEnergyRequest(DateUtils.maxDate(date.from, edge?.firstSetupProtocol), date.to, Object.values(this.channelAddresses)))
+
+ const request = new QueryHistoricTimeseriesEnergyRequest(
+ DateUtils.maxDate(date.from, edge?.firstSetupProtocol),
+ date.to,
+ Object.values(this.channelAddresses),
+ );
+
+ this.activeQueryData = request.id;
+
+ edge.sendRequest(this.websocket, request)
.then((response) => {
- const allComponents = {};
- const result = (response as QueryHistoricTimeseriesEnergyResponse).result;
- for (const [key, value] of Object.entries(result.data)) {
- allComponents[key] = value;
+ if (this.activeQueryData === response.id) {
+ const allComponents = {};
+ const result = (response as QueryHistoricTimeseriesEnergyResponse).result;
+
+ for (const [key, value] of Object.entries(result.data)) {
+ allComponents[key] = value;
+ }
+
+ this.currentValue.next({ allComponents: allComponents });
+ this.timestamps = response.result["timestamps"] ?? [];
}
- this.currentValue.next({ allComponents: allComponents });
- this.timestamps = response.result['timestamps'] ?? [];
- }).catch(err => console.warn(err))
+ })
+ .catch(err => console.warn(err))
.finally(() => {
+ this.queryChannelsTimeout = null;
});
});
}
- }, 100);
+ }, ChartConstants.REQUEST_TIMEOUT);
}
}
diff --git a/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.html b/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.html
index 25d95ace1ac..4c6ce917658 100644
--- a/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.html
+++ b/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.html
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.ts b/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.ts
index 3cb22de5eca..0cac1b4d2f5 100644
--- a/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.ts
+++ b/ui/src/app/edge/history/peakshaving/asymmetric/asymmetricpeakshavingchartoverview/asymmetricpeakshavingchartoverview.component.ts
@@ -1,10 +1,10 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service } from '../../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Edge, EdgeConfig, Service } from "../../../../../shared/shared";
@Component({
selector: AsymmetricPeakshavingChartOverviewComponent.SELECTOR,
- templateUrl: './asymmetricpeakshavingchartoverview.component.html',
+ templateUrl: "./asymmetricpeakshavingchartoverview.component.html",
})
export class AsymmetricPeakshavingChartOverviewComponent implements OnInit {
@@ -18,7 +18,7 @@ export class AsymmetricPeakshavingChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.edge = edge;
diff --git a/ui/src/app/edge/history/peakshaving/asymmetric/chart.component.ts b/ui/src/app/edge/history/peakshaving/asymmetric/chart.component.ts
index a3ace71ad44..d9b4b4ae008 100644
--- a/ui/src/app/edge/history/peakshaving/asymmetric/chart.component.ts
+++ b/ui/src/app/edge/history/peakshaving/asymmetric/chart.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { YAxisTitle } from 'src/app/shared/service/utils';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { YAxisType } from "src/app/shared/service/utils";
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../../shared/shared';
-import { AbstractHistoryChart } from '../../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "../../../../shared/shared";
+import { AbstractHistoryChart } from "../../abstracthistorychart";
@Component({
- selector: 'asymmetricpeakshavingchart',
- templateUrl: '../../abstracthistorychart.html',
+ selector: "asymmetricpeakshavingchart",
+ templateUrl: "../../abstracthistorychart.html",
})
export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -31,7 +31,6 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -48,11 +47,11 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
this.loading = true;
this.colors = [];
this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
- const meterIdActivePowerL1 = this.component.properties['meter.id'] + '/ActivePowerL1';
- const meterIdActivePowerL2 = this.component.properties['meter.id'] + '/ActivePowerL2';
- const meterIdActivePowerL3 = this.component.properties['meter.id'] + '/ActivePowerL3';
- const peakshavingPower = this.component.id + '/_PropertyPeakShavingPower';
- const rechargePower = this.component.id + '/_PropertyRechargePower';
+ const meterIdActivePowerL1 = this.component.properties["meter.id"] + "/ActivePowerL1";
+ const meterIdActivePowerL2 = this.component.properties["meter.id"] + "/ActivePowerL2";
+ const meterIdActivePowerL3 = this.component.properties["meter.id"] + "/ActivePowerL3";
+ const peakshavingPower = this.component.id + "/_PropertyPeakShavingPower";
+ const rechargePower = this.component.id + "/_PropertyRechargePower";
const result = response.result;
// convert labels
const labels: Date[] = [];
@@ -75,7 +74,7 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
}
});
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L1',
+ label: this.translate.instant("General.phase") + " " + "L1",
data: data,
hidden: false,
});
@@ -92,7 +91,7 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
}
});
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L2',
+ label: this.translate.instant("General.phase") + " " + "L2",
data: data,
hidden: false,
});
@@ -109,7 +108,7 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
}
});
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L3',
+ label: this.translate.instant("General.phase") + " " + "L3",
data: data,
hidden: false,
});
@@ -126,14 +125,14 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.Peakshaving.rechargePower'),
+ label: this.translate.instant("Edge.Index.Widgets.Peakshaving.rechargePower"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(0,223,0,1)",
});
}
if (peakshavingPower in result.data) {
@@ -147,27 +146,27 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.Peakshaving.peakshavingPower'),
+ label: this.translate.instant("Edge.Index.Widgets.Peakshaving.peakshavingPower"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(200,0,0,1)",
});
}
- if ('_sum/EssActivePower' in result.data) {
+ if ("_sum/EssActivePower" in result.data) {
/*
* Storage Charge
*/
let effectivePower;
- if ('_sum/ProductionDcActualPower' in result.data && result.data['_sum/ProductionDcActualPower'].length > 0) {
- effectivePower = result.data['_sum/ProductionDcActualPower'].map((value, index) => {
- return Utils.subtractSafely(result.data['_sum/EssActivePower'][index], value);
+ if ("_sum/ProductionDcActualPower" in result.data && result.data["_sum/ProductionDcActualPower"].length > 0) {
+ effectivePower = result.data["_sum/ProductionDcActualPower"].map((value, index) => {
+ return Utils.subtractSafely(result.data["_sum/EssActivePower"][index], value);
});
} else {
- effectivePower = result.data['_sum/EssActivePower'];
+ effectivePower = result.data["_sum/EssActivePower"];
}
const chargeData = effectivePower.map(value => {
if (value == null) {
@@ -179,12 +178,12 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
}
});
datasets.push({
- label: this.translate.instant('General.chargePower'),
+ label: this.translate.instant("General.chargePower"),
data: chargeData,
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
/*
* Storage Discharge
@@ -199,12 +198,12 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
}
});
datasets.push({
- label: this.translate.instant('General.dischargePower'),
+ label: this.translate.instant("General.dischargePower"),
data: dischargeData,
});
this.colors.push({
- backgroundColor: 'rgba(200,0,0,0.05)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(200,0,0,0.05)",
+ borderColor: "rgba(200,0,0,1)",
});
}
this.datasets = datasets;
@@ -216,7 +215,7 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
this.initializeChart();
return;
}).finally(async () => {
- this.unit = YAxisTitle.ENERGY;
+ this.unit = YAxisType.ENERGY;
await this.setOptions(this.options);
this.stopSpinner();
});
@@ -225,13 +224,13 @@ export class AsymmetricPeakshavingChartComponent extends AbstractHistoryChart im
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress(this.component.id, '_PropertyPeakShavingPower'),
- new ChannelAddress(this.component.id, '_PropertyRechargePower'),
- new ChannelAddress(this.component.properties['meter.id'], 'ActivePowerL1'),
- new ChannelAddress(this.component.properties['meter.id'], 'ActivePowerL2'),
- new ChannelAddress(this.component.properties['meter.id'], 'ActivePowerL3'),
- new ChannelAddress('_sum', 'ProductionDcActualPower'),
- new ChannelAddress('_sum', 'EssActivePower'),
+ new ChannelAddress(this.component.id, "_PropertyPeakShavingPower"),
+ new ChannelAddress(this.component.id, "_PropertyRechargePower"),
+ new ChannelAddress(this.component.properties["meter.id"], "ActivePowerL1"),
+ new ChannelAddress(this.component.properties["meter.id"], "ActivePowerL2"),
+ new ChannelAddress(this.component.properties["meter.id"], "ActivePowerL3"),
+ new ChannelAddress("_sum", "ProductionDcActualPower"),
+ new ChannelAddress("_sum", "EssActivePower"),
];
resolve(result);
});
diff --git a/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.html b/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.html
index a2459516627..89e8082f29d 100644
--- a/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.html
+++ b/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.html
@@ -13,4 +13,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.ts b/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.ts
index 85a4b2581e2..1d58538f990 100644
--- a/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.ts
+++ b/ui/src/app/edge/history/peakshaving/asymmetric/widget.component.ts
@@ -1,11 +1,11 @@
-import { ActivatedRoute } from '@angular/router';
-import { Component, Input, OnInit } from '@angular/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { Edge, Service, EdgeConfig } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { Edge, EdgeConfig, Service } from "src/app/shared/shared";
@Component({
selector: AsymmetricPeakshavingWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class AsymmetricPeakshavingWidgetComponent implements OnInit {
@@ -13,7 +13,6 @@ export class AsymmetricPeakshavingWidgetComponent implements OnInit {
@Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
@Input({ required: true }) public componentId!: string;
-
public edge: Edge | null = null;
public component: EdgeConfig.Component | null = null;
@@ -23,7 +22,7 @@ export class AsymmetricPeakshavingWidgetComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
diff --git a/ui/src/app/edge/history/peakshaving/symmetric/chart.component.ts b/ui/src/app/edge/history/peakshaving/symmetric/chart.component.ts
index 4d9de7b5dec..4c9d97e725f 100644
--- a/ui/src/app/edge/history/peakshaving/symmetric/chart.component.ts
+++ b/ui/src/app/edge/history/peakshaving/symmetric/chart.component.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../../shared/shared';
-import { AbstractHistoryChart } from '../../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "../../../../shared/shared";
+import { AbstractHistoryChart } from "../../abstracthistorychart";
@Component({
- selector: 'symmetricpeakshavingchart',
- templateUrl: '../../abstracthistorychart.html',
+ selector: "symmetricpeakshavingchart",
+ templateUrl: "../../abstracthistorychart.html",
})
export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -30,7 +30,6 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -48,9 +47,9 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
this.colors = [];
this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
this.service.getConfig().then(config => {
- const meterIdActivePower = config.getComponent(this.componentId).properties['meter.id'] + '/ActivePower';
- const peakshavingPower = this.componentId + '/_PropertyPeakShavingPower';
- const rechargePower = this.componentId + '/_PropertyRechargePower';
+ const meterIdActivePower = config.getComponent(this.componentId).properties["meter.id"] + "/ActivePower";
+ const peakshavingPower = this.componentId + "/_PropertyPeakShavingPower";
+ const rechargePower = this.componentId + "/_PropertyRechargePower";
const result = response.result;
// convert labels
const labels: Date[] = [];
@@ -73,13 +72,13 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
}
});
datasets.push({
- label: this.translate.instant('General.measuredValue'),
+ label: this.translate.instant("General.measuredValue"),
data: data,
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0.05)',
- borderColor: 'rgba(0,0,0,1)',
+ backgroundColor: "rgba(0,0,0,0.05)",
+ borderColor: "rgba(0,0,0,1)",
});
}
if (rechargePower in result.data) {
@@ -93,14 +92,14 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.Peakshaving.rechargePower'),
+ label: this.translate.instant("Edge.Index.Widgets.Peakshaving.rechargePower"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(0,223,0,1)",
});
}
if (peakshavingPower in result.data) {
@@ -114,27 +113,27 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.Peakshaving.peakshavingPower'),
+ label: this.translate.instant("Edge.Index.Widgets.Peakshaving.peakshavingPower"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(200,0,0,1)",
});
}
- if ('_sum/EssActivePower' in result.data) {
+ if ("_sum/EssActivePower" in result.data) {
/*
* Storage Charge
*/
let effectivePower;
- if ('_sum/ProductionDcActualPower' in result.data && result.data['_sum/ProductionDcActualPower'].length > 0) {
- effectivePower = result.data['_sum/ProductionDcActualPower'].map((value, index) => {
- return Utils.subtractSafely(result.data['_sum/EssActivePower'][index], value);
+ if ("_sum/ProductionDcActualPower" in result.data && result.data["_sum/ProductionDcActualPower"].length > 0) {
+ effectivePower = result.data["_sum/ProductionDcActualPower"].map((value, index) => {
+ return Utils.subtractSafely(result.data["_sum/EssActivePower"][index], value);
});
} else {
- effectivePower = result.data['_sum/EssActivePower'];
+ effectivePower = result.data["_sum/EssActivePower"];
}
const chargeData = effectivePower.map(value => {
if (value == null) {
@@ -146,13 +145,13 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
}
});
datasets.push({
- label: this.translate.instant('General.chargePower'),
+ label: this.translate.instant("General.chargePower"),
data: chargeData,
borderDash: [10, 10],
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
/*
* Storage Discharge
@@ -167,13 +166,13 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
}
});
datasets.push({
- label: this.translate.instant('General.dischargePower'),
+ label: this.translate.instant("General.dischargePower"),
data: dischargeData,
borderDash: [10, 10],
});
this.colors.push({
- backgroundColor: 'rgba(200,0,0,0.05)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(200,0,0,0.05)",
+ borderColor: "rgba(200,0,0,1)",
});
}
this.datasets = datasets;
@@ -198,11 +197,11 @@ export class SymmetricPeakshavingChartComponent extends AbstractHistoryChart imp
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress(this.componentId, '_PropertyRechargePower'),
- new ChannelAddress(this.componentId, '_PropertyPeakShavingPower'),
- new ChannelAddress(config.getComponent(this.componentId).properties['meter.id'], 'ActivePower'),
- new ChannelAddress('_sum', 'ProductionDcActualPower'),
- new ChannelAddress('_sum', 'EssActivePower'),
+ new ChannelAddress(this.componentId, "_PropertyRechargePower"),
+ new ChannelAddress(this.componentId, "_PropertyPeakShavingPower"),
+ new ChannelAddress(config.getComponent(this.componentId).properties["meter.id"], "ActivePower"),
+ new ChannelAddress("_sum", "ProductionDcActualPower"),
+ new ChannelAddress("_sum", "EssActivePower"),
];
resolve(result);
});
diff --git a/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.html b/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.html
index 86c26ef7e42..278617c5783 100644
--- a/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.html
+++ b/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.html
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.ts b/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.ts
index 8e578e2b5fa..5734f7485cc 100644
--- a/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.ts
+++ b/ui/src/app/edge/history/peakshaving/symmetric/symmetricpeakshavingchartoverview/symmetricpeakshavingchartoverview.component.ts
@@ -1,10 +1,10 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service } from '../../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Edge, EdgeConfig, Service } from "../../../../../shared/shared";
@Component({
selector: SymmetricPeakshavingChartOverviewComponent.SELECTOR,
- templateUrl: './symmetricpeakshavingchartoverview.component.html',
+ templateUrl: "./symmetricpeakshavingchartoverview.component.html",
})
export class SymmetricPeakshavingChartOverviewComponent implements OnInit {
@@ -19,7 +19,7 @@ export class SymmetricPeakshavingChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.edge = edge;
this.component = config.getComponent(this.route.snapshot.params.componentId);
diff --git a/ui/src/app/edge/history/peakshaving/symmetric/widget.component.html b/ui/src/app/edge/history/peakshaving/symmetric/widget.component.html
index 23e49ec1b9f..dbf3842991d 100644
--- a/ui/src/app/edge/history/peakshaving/symmetric/widget.component.html
+++ b/ui/src/app/edge/history/peakshaving/symmetric/widget.component.html
@@ -13,4 +13,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/peakshaving/symmetric/widget.component.ts b/ui/src/app/edge/history/peakshaving/symmetric/widget.component.ts
index 0ae228ca9f5..62f86d76e86 100644
--- a/ui/src/app/edge/history/peakshaving/symmetric/widget.component.ts
+++ b/ui/src/app/edge/history/peakshaving/symmetric/widget.component.ts
@@ -1,11 +1,11 @@
-import { Component, Input, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { Edge, EdgeConfig, Service } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { Edge, EdgeConfig, Service } from "src/app/shared/shared";
@Component({
selector: SymmetricPeakshavingWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class SymmetricPeakshavingWidgetComponent implements OnInit {
@@ -13,7 +13,6 @@ export class SymmetricPeakshavingWidgetComponent implements OnInit {
@Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
@Input({ required: true }) public componentId!: string;
-
public edge: Edge | null = null;
public component: EdgeConfig.Component | null = null;
@@ -23,7 +22,7 @@ export class SymmetricPeakshavingWidgetComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
diff --git a/ui/src/app/edge/history/peakshaving/timeslot/chart.component.ts b/ui/src/app/edge/history/peakshaving/timeslot/chart.component.ts
index 379d9d33986..4a62f084032 100644
--- a/ui/src/app/edge/history/peakshaving/timeslot/chart.component.ts
+++ b/ui/src/app/edge/history/peakshaving/timeslot/chart.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { YAxisTitle } from 'src/app/shared/service/utils';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { YAxisType } from "src/app/shared/service/utils";
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../../shared/shared';
-import { AbstractHistoryChart } from '../../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "../../../../shared/shared";
+import { AbstractHistoryChart } from "../../abstracthistorychart";
@Component({
- selector: 'timeslotpeakshavingchart',
- templateUrl: '../../abstracthistorychart.html',
+ selector: "timeslotpeakshavingchart",
+ templateUrl: "../../abstracthistorychart.html",
})
export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -31,7 +31,6 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -49,10 +48,10 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
this.colors = [];
this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
this.service.getConfig().then(config => {
- const meterIdActivePower = config.getComponent(this.componentId).properties['meter.id'] + '/ActivePower';
- const peakshavingPower = this.componentId + '/_PropertyPeakShavingPower';
- const rechargePower = this.componentId + '/_PropertyRechargePower';
- const stateMachine = this.componentId + '/StateMachine';
+ const meterIdActivePower = config.getComponent(this.componentId).properties["meter.id"] + "/ActivePower";
+ const peakshavingPower = this.componentId + "/_PropertyPeakShavingPower";
+ const rechargePower = this.componentId + "/_PropertyRechargePower";
+ const stateMachine = this.componentId + "/StateMachine";
const result = response.result;
@@ -87,13 +86,13 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
}
});
datasets.push({
- label: this.translate.instant('General.measuredValue'),
+ label: this.translate.instant("General.measuredValue"),
data: data,
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0.05)',
- borderColor: 'rgba(0,0,0,1)',
+ backgroundColor: "rgba(0,0,0,0.05)",
+ borderColor: "rgba(0,0,0,1)",
});
}
if (rechargePower in result.data) {
@@ -107,14 +106,14 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.Peakshaving.rechargePower'),
+ label: this.translate.instant("Edge.Index.Widgets.Peakshaving.rechargePower"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(0,223,0,1)",
});
}
if (peakshavingPower in result.data) {
@@ -128,27 +127,27 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
}
});
datasets.push({
- label: this.translate.instant('Edge.Index.Widgets.Peakshaving.peakshavingPower'),
+ label: this.translate.instant("Edge.Index.Widgets.Peakshaving.peakshavingPower"),
data: data,
hidden: false,
borderDash: [3, 3],
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0,0)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(0,0,0,0)",
+ borderColor: "rgba(200,0,0,1)",
});
}
- if ('_sum/EssActivePower' in result.data) {
+ if ("_sum/EssActivePower" in result.data) {
/*
* Storage Charge
*/
let effectivePower;
- if ('_sum/ProductionDcActualPower' in result.data && result.data['_sum/ProductionDcActualPower'].length > 0) {
- effectivePower = result.data['_sum/ProductionDcActualPower'].map((value, index) => {
- return Utils.subtractSafely(result.data['_sum/EssActivePower'][index], value);
+ if ("_sum/ProductionDcActualPower" in result.data && result.data["_sum/ProductionDcActualPower"].length > 0) {
+ effectivePower = result.data["_sum/ProductionDcActualPower"].map((value, index) => {
+ return Utils.subtractSafely(result.data["_sum/EssActivePower"][index], value);
});
} else {
- effectivePower = result.data['_sum/EssActivePower'];
+ effectivePower = result.data["_sum/EssActivePower"];
}
const chargeData = effectivePower.map(value => {
if (value == null) {
@@ -160,13 +159,13 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
}
});
datasets.push({
- label: this.translate.instant('General.chargePower'),
+ label: this.translate.instant("General.chargePower"),
data: chargeData,
borderDash: [10, 10],
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
/*
* Storage Discharge
@@ -181,13 +180,13 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
}
});
datasets.push({
- label: this.translate.instant('General.dischargePower'),
+ label: this.translate.instant("General.dischargePower"),
data: dischargeData,
borderDash: [10, 10],
});
this.colors.push({
- backgroundColor: 'rgba(200,0,0,0.05)',
- borderColor: 'rgba(200,0,0,1)',
+ backgroundColor: "rgba(200,0,0,0.05)",
+ borderColor: "rgba(200,0,0,1)",
});
}
this.datasets = datasets;
@@ -205,7 +204,7 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
this.initializeChart();
return;
}).finally(async () => {
- this.unit = YAxisTitle.ENERGY;
+ this.unit = YAxisType.ENERGY;
await this.setOptions(this.options);
});
}
@@ -213,12 +212,12 @@ export class TimeslotPeakshavingChartComponent extends AbstractHistoryChart impl
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress(this.componentId, '_PropertyRechargePower'),
- new ChannelAddress(this.componentId, '_PropertyPeakShavingPower'),
- new ChannelAddress(this.componentId, 'StateMachine'),
- new ChannelAddress(config.getComponent(this.componentId).properties['meter.id'], 'ActivePower'),
- new ChannelAddress('_sum', 'ProductionDcActualPower'),
- new ChannelAddress('_sum', 'EssActivePower'),
+ new ChannelAddress(this.componentId, "_PropertyRechargePower"),
+ new ChannelAddress(this.componentId, "_PropertyPeakShavingPower"),
+ new ChannelAddress(this.componentId, "StateMachine"),
+ new ChannelAddress(config.getComponent(this.componentId).properties["meter.id"], "ActivePower"),
+ new ChannelAddress("_sum", "ProductionDcActualPower"),
+ new ChannelAddress("_sum", "EssActivePower"),
];
resolve(result);
});
diff --git a/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.html b/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.html
index 3d253a4ca80..61e67f32806 100644
--- a/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.html
+++ b/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.html
@@ -20,4 +20,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.ts b/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.ts
index 9c83adacd26..c8c2ed8e7f3 100644
--- a/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.ts
+++ b/ui/src/app/edge/history/peakshaving/timeslot/timeslotpeakshavingchartoverview/timeslotpeakshavingchartoverview.component.ts
@@ -1,10 +1,10 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service } from '../../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Edge, EdgeConfig, Service } from "../../../../../shared/shared";
@Component({
selector: TimeslotPeakshavingChartOverviewComponent.SELECTOR,
- templateUrl: './timeslotpeakshavingchartoverview.component.html',
+ templateUrl: "./timeslotpeakshavingchartoverview.component.html",
})
export class TimeslotPeakshavingChartOverviewComponent implements OnInit {
@@ -19,7 +19,7 @@ export class TimeslotPeakshavingChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.edge = edge;
this.component = config.getComponent(this.route.snapshot.params.componentId);
diff --git a/ui/src/app/edge/history/peakshaving/timeslot/widget.component.html b/ui/src/app/edge/history/peakshaving/timeslot/widget.component.html
index ea2fdd0d94a..912f7c07fc5 100644
--- a/ui/src/app/edge/history/peakshaving/timeslot/widget.component.html
+++ b/ui/src/app/edge/history/peakshaving/timeslot/widget.component.html
@@ -13,4 +13,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/peakshaving/timeslot/widget.component.ts b/ui/src/app/edge/history/peakshaving/timeslot/widget.component.ts
index 6903d838553..7b23394df53 100644
--- a/ui/src/app/edge/history/peakshaving/timeslot/widget.component.ts
+++ b/ui/src/app/edge/history/peakshaving/timeslot/widget.component.ts
@@ -1,11 +1,11 @@
-import { Component, Input, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { Edge, EdgeConfig, Service } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { Edge, EdgeConfig, Service } from "src/app/shared/shared";
@Component({
selector: TimeslotPeakshavingWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class TimeslotPeakshavingWidgetComponent implements OnInit {
@@ -13,7 +13,6 @@ export class TimeslotPeakshavingWidgetComponent implements OnInit {
@Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
@Input({ required: true }) public componentId!: string;
-
public edge: Edge | null = null;
public component: EdgeConfig.Component | null = null;
@@ -23,7 +22,7 @@ export class TimeslotPeakshavingWidgetComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
diff --git a/ui/src/app/edge/history/shared.ts b/ui/src/app/edge/history/shared.ts
index 8ff93006ca0..ac05ac3b66f 100644
--- a/ui/src/app/edge/history/shared.ts
+++ b/ui/src/app/edge/history/shared.ts
@@ -1,10 +1,10 @@
// @ts-strict-ignore
-import * as Chart from 'chart.js';
-import { differenceInDays, differenceInMinutes, startOfDay } from 'date-fns';
-import { de } from 'date-fns/locale';
-import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { ChannelAddress, Service } from 'src/app/shared/shared';
-import { DateUtils } from 'src/app/shared/utils/date/dateutils';
+import * as Chart from "chart.js";
+import { differenceInDays, differenceInMinutes, startOfDay } from "date-fns";
+import { de } from "date-fns/locale";
+import { QueryHistoricTimeseriesDataResponse } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse";
+import { ChannelAddress, Service } from "src/app/shared/shared";
+import { DateUtils } from "src/app/shared/utils/date/dateutils";
export interface Dataset {
label: string;
@@ -146,7 +146,7 @@ export type ChartOptions = {
legendCallback?(chart: Chart.Chart): string
};
-export const DEFAULT_TIME_CHART_OPTIONS: Chart.ChartOptions = {
+export const DEFAULT_TIME_CHART_OPTIONS = (): Chart.ChartOptions => ({
responsive: true,
maintainAspectRatio: false,
elements: {
@@ -168,22 +168,25 @@ export const DEFAULT_TIME_CHART_OPTIONS: Chart.ChartOptions = {
annotation: {
annotations: [],
},
+ datalabels: {
+ display: false,
+ },
colors: {
enabled: false,
},
legend: {
display: true,
- position: 'bottom',
+ position: "bottom",
labels: {
- color: getComputedStyle(document.documentElement).getPropertyValue('--ion-color-primary'),
+ color: getComputedStyle(document.documentElement).getPropertyValue("--ion-color-primary"),
generateLabels: (chart: Chart.Chart) => { return null; },
},
onClick: (event, legendItem, legend) => { },
},
tooltip: {
intersect: false,
- mode: 'index',
+ mode: "index",
filter: function (item, data, test, some) {
const value = item.dataset.data[item.dataIndex] as number;
return !isNaN(value) && value !== null;
@@ -200,10 +203,10 @@ export const DEFAULT_TIME_CHART_OPTIONS: Chart.ChartOptions = {
x: {
stacked: true,
offset: false,
- type: 'time',
+ type: "time",
ticks: {
},
- bounds: 'data',
+ bounds: "data",
adapters: {
date: {
@@ -213,23 +216,23 @@ export const DEFAULT_TIME_CHART_OPTIONS: Chart.ChartOptions = {
},
time: {
// parser: 'MM/DD/YYYY HH:mm',
- unit: 'hour',
+ unit: "hour",
displayFormats: {
- datetime: 'yyyy-MM-dd HH:mm:ss',
- millisecond: 'SSS [ms]',
- second: 'HH:mm:ss a', // 17:20:01
- minute: 'HH:mm', // 17:20
- hour: 'HH:00', // 17:20
- day: 'dd', // Sep 04 2015
- week: 'll', // Week 46, or maybe "[W]WW - YYYY" ?
- month: 'MM', // September
- quarter: '[Q]Q - YYYY', // Q3 - 2015
- year: 'yyyy', // 2015,
+ datetime: "yyyy-MM-dd HH:mm:ss",
+ millisecond: "SSS [ms]",
+ second: "HH:mm:ss a", // 17:20:01
+ minute: "HH:mm", // 17:20
+ hour: "HH:00", // 17:20
+ day: "dd", // Sep 04 2015
+ week: "ll", // Week 46, or maybe "[W]WW - YYYY" ?
+ month: "MM", // September
+ quarter: "[Q]Q - YYYY", // Q3 - 2015
+ year: "yyyy", // 2015,
},
},
},
},
-};
+});
export const DEFAULT_TIME_CHART_OPTIONS_WITHOUT_PREDEFINED_Y_AXIS: ChartOptions = {
plugins: {
@@ -241,7 +244,7 @@ export const DEFAULT_TIME_CHART_OPTIONS_WITHOUT_PREDEFINED_Y_AXIS: ChartOptions
maintainAspectRatio: false,
legend: {
labels: {},
- position: 'bottom',
+ position: "bottom",
},
elements: {
point: {
@@ -258,7 +261,7 @@ export const DEFAULT_TIME_CHART_OPTIONS_WITHOUT_PREDEFINED_Y_AXIS: ChartOptions
},
},
hover: {
- mode: 'point',
+ mode: "point",
intersect: true,
},
scales: {
@@ -266,27 +269,27 @@ export const DEFAULT_TIME_CHART_OPTIONS_WITHOUT_PREDEFINED_Y_AXIS: ChartOptions
xAxes: [{
ticks: {},
stacked: false,
- type: 'time',
+ type: "time",
time: {
- minUnit: 'hour',
+ minUnit: "hour",
displayFormats: {
- millisecond: 'SSS [ms]',
- second: 'HH:mm:ss a', // 17:20:01
- minute: 'HH:mm', // 17:20
- hour: 'HH:[00]', // 17:20
- day: 'DD', // Sep 04 2015
- week: 'll', // Week 46, or maybe "[W]WW - YYYY" ?
- month: 'MM', // September
- quarter: '[Q]Q - YYYY', // Q3 - 2015
- year: 'YYYY', // 2015,
+ millisecond: "SSS [ms]",
+ second: "HH:mm:ss a", // 17:20:01
+ minute: "HH:mm", // 17:20
+ hour: "HH:[00]", // 17:20
+ day: "DD", // Sep 04 2015
+ week: "ll", // Week 46, or maybe "[W]WW - YYYY" ?
+ month: "MM", // September
+ quarter: "[Q]Q - YYYY", // Q3 - 2015
+ year: "YYYY", // 2015,
},
},
}],
},
tooltips: {
- mode: 'index',
+ mode: "index",
intersect: false,
- axis: 'x',
+ axis: "x",
callbacks: {
title(tooltipItems: Chart.TooltipItem[], data: Data): string {
const date = DateUtils.stringToDate(tooltipItems[0]?.label);
@@ -296,7 +299,7 @@ export const DEFAULT_TIME_CHART_OPTIONS_WITHOUT_PREDEFINED_Y_AXIS: ChartOptions
},
};
-export function calculateActiveTimeOverPeriod(channel: ChannelAddress, queryResult: QueryHistoricTimeseriesDataResponse['result']) {
+export function calculateActiveTimeOverPeriod(channel: ChannelAddress, queryResult: QueryHistoricTimeseriesDataResponse["result"]) {
const startDate = startOfDay(new Date(queryResult.timestamps[0]));
const endDate = new Date(queryResult.timestamps[queryResult.timestamps.length - 1]);
let activeSum = 0;
@@ -316,61 +319,61 @@ export function calculateActiveTimeOverPeriod(channel: ChannelAddress, queryResu
* @param toDate the To-Date
* @returns resolution and timeformat
*/
-export function calculateResolution(service: Service, fromDate: Date, toDate: Date): { resolution: Resolution, timeFormat: 'day' | 'month' | 'hour' | 'year' } {
+export function calculateResolution(service: Service, fromDate: Date, toDate: Date): { resolution: Resolution, timeFormat: "day" | "month" | "hour" | "year" } {
const days = Math.abs(differenceInDays(toDate, fromDate));
- let result: { resolution: Resolution, timeFormat: 'day' | 'month' | 'hour' | 'year' };
+ let result: { resolution: Resolution, timeFormat: "day" | "month" | "hour" | "year" };
if (days <= 1) {
if (service.isSmartphoneResolution) {
- result = { resolution: { value: 15, unit: ChronoUnit.Type.MINUTES }, timeFormat: 'hour' }; // 1 Day
+ result = { resolution: { value: 15, unit: ChronoUnit.Type.MINUTES }, timeFormat: "hour" }; // 1 Day
} else {
- result = { resolution: { value: 5, unit: ChronoUnit.Type.MINUTES }, timeFormat: 'hour' }; // 5 Minutes
+ result = { resolution: { value: 5, unit: ChronoUnit.Type.MINUTES }, timeFormat: "hour" }; // 5 Minutes
}
} else if (days == 2) {
if (service.isSmartphoneResolution) {
- result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: 'hour' }; // 1 Day
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: "hour" }; // 1 Day
} else {
- result = { resolution: { value: 10, unit: ChronoUnit.Type.MINUTES }, timeFormat: 'hour' }; // 1 Hour
+ result = { resolution: { value: 10, unit: ChronoUnit.Type.MINUTES }, timeFormat: "hour" }; // 1 Hour
}
} else if (days <= 4) {
if (service.isSmartphoneResolution) {
- result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: 'day' }; // 1 Day
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: "day" }; // 1 Day
} else {
- result = { resolution: { value: 1, unit: ChronoUnit.Type.HOURS }, timeFormat: 'hour' }; // 1 Hour
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.HOURS }, timeFormat: "hour" }; // 1 Hour
}
} else if (days <= 6) {
if (service.isSmartphoneResolution) {
- result = { resolution: { value: 8, unit: ChronoUnit.Type.HOURS }, timeFormat: 'day' }; // 1 Day
+ result = { resolution: { value: 8, unit: ChronoUnit.Type.HOURS }, timeFormat: "day" }; // 1 Day
} else {
// >> show Hours
- result = { resolution: { value: 1, unit: ChronoUnit.Type.HOURS }, timeFormat: 'day' }; // 1 Day
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.HOURS }, timeFormat: "day" }; // 1 Day
}
} else if (days <= 31 && service.isSmartphoneResolution) {
// Smartphone-View: show 31 days in daily view
- result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: 'day' }; // 1 Day
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: "day" }; // 1 Day
} else if (days <= 90) {
- result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: 'day' }; // 1 Day
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: "day" }; // 1 Day
} else if (days <= 144) {
// >> show Days
if (service.isSmartphoneResolution == true) {
- result = { resolution: { value: 1, unit: ChronoUnit.Type.MONTHS }, timeFormat: 'month' }; // 1 Month
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.MONTHS }, timeFormat: "month" }; // 1 Month
} else {
- result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: 'day' }; // 1 Day
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.DAYS }, timeFormat: "day" }; // 1 Day
}
} else if (days <= 365) {
- result = { resolution: { value: 1, unit: ChronoUnit.Type.MONTHS }, timeFormat: 'month' }; // 1 Day
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.MONTHS }, timeFormat: "month" }; // 1 Day
} else {
// >> show Years
- result = { resolution: { value: 1, unit: ChronoUnit.Type.YEARS }, timeFormat: 'year' }; // 1 Month
+ result = { resolution: { value: 1, unit: ChronoUnit.Type.YEARS }, timeFormat: "year" }; // 1 Month
}
return result;
@@ -391,7 +394,7 @@ export function isLabelVisible(label: string, orElse?: boolean): boolean {
if (orElse != null && value == null) {
return orElse;
} else {
- return value !== 'false';
+ return value !== "false";
}
}
@@ -406,7 +409,7 @@ export function setLabelVisible(label: string, visible: boolean | null): void {
return;
}
const labelWithoutUnit = "LABEL_" + label.split(":")[0];
- sessionStorage.setItem(labelWithoutUnit, visible ? 'true' : 'false');
+ sessionStorage.setItem(labelWithoutUnit, visible ? "true" : "false");
}
export type Resolution = {
@@ -457,7 +460,7 @@ export type ChartData = {
}[],
tooltip: {
/** Unit to be displayed as Tooltips unit */
- unit: '%' | 'kWh' | 'kW',
+ unit: "%" | "kWh" | "kW",
/** Format of Number displayed */
formatNumber: string;
},
@@ -465,3 +468,70 @@ export type ChartData = {
yAxisTitle: string,
};
+export const DEFAULT_NUMBER_CHART_OPTIONS = (labels: (Date | string)[]): Chart.ChartOptions => ({
+ responsive: true,
+ maintainAspectRatio: false,
+ elements: {
+ point: {
+ radius: 0,
+ hitRadius: 0,
+ hoverRadius: 0,
+ },
+ line: {
+ stepped: false,
+ fill: true,
+ },
+ },
+ datasets: {
+ bar: {},
+ line: {},
+ },
+ plugins: {
+ colors: {
+ enabled: false,
+ },
+ legend: {
+ display: true,
+
+ position: "bottom",
+ labels: {
+ color: getComputedStyle(document.documentElement).getPropertyValue("--ion-color-primary"),
+ generateLabels: (chart: Chart.Chart) => { return null; },
+ },
+ onClick: (event, legendItem, legend) => { },
+ },
+ tooltip: {
+ intersect: false,
+ mode: "index",
+ filter: function (item, data, test, some) {
+ const value = item.dataset.data[item.dataIndex] as number;
+ return !isNaN(value) && value !== null;
+ },
+ callbacks: {
+ label: (item: Chart.TooltipItem) => { },
+ title: (tooltipItems: Chart.TooltipItem[]) => { },
+ afterTitle: (items: Chart.TooltipItem[]) => { },
+ labelColor: (context: Chart.TooltipItem) => { },
+ },
+ },
+ datalabels: {},
+ },
+ scales: {
+ x: {
+ stacked: true,
+ offset: false,
+ type: "category",
+ ticks: {
+ autoSkip: true,
+ callback: function (value, index, ticks) {
+ if (index >= labels.length) {
+ return "";
+ }
+
+ return labels[index].toString();
+ },
+ },
+ bounds: "data",
+ },
+ },
+});
diff --git a/ui/src/app/edge/history/singlethreshold/chart.component.ts b/ui/src/app/edge/history/singlethreshold/chart.component.ts
deleted file mode 100644
index 3165adec062..00000000000
--- a/ui/src/app/edge/history/singlethreshold/chart.component.ts
+++ /dev/null
@@ -1,276 +0,0 @@
-// @ts-strict-ignore
-import { formatNumber } from '@angular/common';
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChartAxis, YAxisTitle } from 'src/app/shared/service/utils';
-
-import { QueryHistoricTimeseriesDataResponse } from '../../../shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
-
-@Component({
- selector: 'singlethresholdChart',
- templateUrl: '../abstracthistorychart.html',
-})
-export class SinglethresholdChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
-
- @Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
- @Input({ required: true }) public componentId!: string;
- @Input({ required: true }) public inputChannelUnit!: string;
-
- constructor(
- protected override service: Service,
- protected override translate: TranslateService,
- private route: ActivatedRoute,
- ) {
- super("singlethreshold-chart", service, translate);
- }
-
- ngOnInit() {
- this.startSpinner();
- this.service.setCurrentComponent('', this.route);
- }
-
- ngOnDestroy() {
- this.unsubscribeChartRefresh();
- }
-
- ngOnChanges() {
- this.updateChart();
- }
-
- public getChartHeight(): number {
- return window.innerHeight / 1.3;
- }
-
- protected updateChart() {
- this.autoSubscribeChartRefresh();
- this.startSpinner();
- this.colors = [];
- this.loading = true;
-
- this.queryHistoricTimeseriesData(this.period.from, this.period.to).then(response => {
- this.service.getConfig().then(config => {
- const outputChannel: string | string[] = config.getComponentProperties(this.componentId)['outputChannelAddress'];
- const inputChannel = config.getComponentProperties(this.componentId)['inputChannelAddress'];
- const result = (response as QueryHistoricTimeseriesDataResponse).result;
- let yAxisID;
-
- // set yAxis for % values (if there are no other % values: use left yAxis, if there are: use right yAxis - for percent values)
- if (result.data["_sum/EssSoc"]) {
- yAxisID = "yAxis1";
- } else {
- yAxisID = "yAxis2";
- }
-
- // convert labels
- const labels: Date[] = [];
- for (const timestamp of result.timestamps) {
- labels.push(new Date(timestamp));
- }
- this.labels = labels;
- const datasets = [];
-
- // convert datasets
- for (const channel in result.data) {
- if ((typeof outputChannel === 'string' && channel == outputChannel)
- || (typeof outputChannel !== 'string' && outputChannel.includes(channel))) {
- const address = ChannelAddress.fromString(channel);
- const data = result.data[channel].map(value => {
- if (value == null) {
- return null;
- } else {
- return value * 100; // convert to % [0,100]
- }
- });
- datasets.push({
- label: address.channelId,
- data: data,
- hidden: false,
- yAxisID: yAxisID,
- position: 'right',
- });
- this.colors.push({
- backgroundColor: 'rgba(0,191,255,0.05)',
- borderColor: 'rgba(0,191,255,1)',
- });
- }
- if (channel == inputChannel) {
- let inputLabel: string | null = null;
- const address = ChannelAddress.fromString(channel);
- switch (address.channelId) {
- case 'GridActivePower':
- inputLabel = this.translate.instant('General.grid');
- break;
- case 'ProductionActivePower':
- inputLabel = this.translate.instant('General.production');
- break;
- case 'EssSoc':
- inputLabel = this.translate.instant('General.soc');
- break;
- default:
- inputLabel = this.translate.instant('Edge.Index.Widgets.Singlethreshold.other');
- break;
- }
- let data;
- if (address.channelId == 'EssSoc') {
- data = result.data[channel].map(value => {
- if (value == null) {
- return null;
- } else if (value > 100 || value < 0) {
- return null;
- } else {
- return value;
- }
- });
- } else if (address.channelId == 'ProductionActivePower' || address.channelId == 'GridActivePower') {
- data = result.data[channel].map(value => {
- if (value == null) {
- return null;
- } else {
- return value / 1000; // convert to kW
- }
- });
- } else {
- data = result.data[channel].map(value => {
- if (value == null) {
- return null;
- } else {
- return value;
- }
- });
- }
- if (address.channelId == 'EssSoc') {
- datasets.push({
- label: inputLabel,
- data: data,
- hidden: false,
- yAxisID: yAxisID,
- position: 'right',
- unit: YAxisTitle.PERCENTAGE,
- });
-
- this.colors.push({
- backgroundColor: 'rgba(189, 195, 199,0.05)',
- borderColor: 'rgba(189, 195, 199,1)',
- });
- } else {
- datasets.push({
- label: inputLabel,
- data: data,
- hidden: false,
- yAxisID: 'yAxis1',
- position: 'left',
- });
-
- this.colors.push({
- backgroundColor: 'rgba(0,0,0,0.05)',
- borderColor: 'rgba(0,0,0,1)',
- });
- }
- }
- }
- this.datasets = datasets;
- this.loading = false;
- this.stopSpinner();
-
- }).catch(reason => {
- console.error(reason); // TODO error message
- this.initializeChart();
- return;
- }).finally(async () => {
- this.unit = YAxisTitle.PERCENTAGE;
- await this.setOptions(this.options);
- this.addControllerSpecificOptions(this.options);
- });
- }).catch(reason => {
- console.error(reason); // TODO error message
- this.initializeChart();
- return;
- });
- }
-
- protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
- return new Promise((resolve) => {
- const inputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['inputChannelAddress']);
- const result: ChannelAddress[] = [inputChannel];
- const outputChannelAddress: string | string[] = config.getComponentProperties(this.componentId)['outputChannelAddress'];
- if (typeof outputChannelAddress === 'string') {
- result.push(ChannelAddress.fromString(outputChannelAddress));
- } else {
- outputChannelAddress.forEach(c => result.push(ChannelAddress.fromString(c)));
- }
- resolve(result);
- });
- }
-
- protected setLabel(config: EdgeConfig) {
- this.options = this.createDefaultChartOptions();
- }
-
- protected addControllerSpecificOptions(options: Chart.ChartOptions) {
-
- this.service.getConfig().then(config => {
-
- const inputChannel = ChannelAddress.fromString(config.getComponentProperties(this.componentId)['inputChannelAddress']);
- const outputChannelAddress: string | string[] = config.getComponentProperties(this.componentId)['outputChannelAddress'];
- let outputChannel: ChannelAddress;
- if (typeof outputChannelAddress === 'string') {
- outputChannel = ChannelAddress.fromString(outputChannelAddress);
- } else {
- outputChannel = ChannelAddress.fromString(outputChannelAddress[0]);
- }
-
- let labelString;
-
- if (inputChannel.channelId == 'EssSoc') {
- labelString = '%';
- this.unit = YAxisTitle.PERCENTAGE;
- options.scales[ChartAxis.LEFT]['title'].text = labelString;
- } else if (inputChannel.channelId == 'GridActivePower' || inputChannel.channelId == 'ProductionActivePower') {
- labelString = 'kW';
- this.unit = YAxisTitle.ENERGY;
- options.scales[ChartAxis.LEFT]['title'].text = labelString;
- } else {
- labelString = this.inputChannelUnit;
- options.scales[ChartAxis.LEFT]['title'].text = labelString;
- }
-
- if (inputChannel.channelId != 'EssSoc') {
- // adds second y-axis to chart
- options.scales[ChartAxis.RIGHT] = {
- max: 100,
- position: 'right',
- title: {
- text: '%',
- display: true,
- },
- ticks: {
- padding: -5,
- stepSize: 20,
- },
- };
- }
-
- const translate = this.translate;
- options.plugins.tooltip.callbacks.label = function (item: Chart.TooltipItem) {
- const label = item.dataset.label;
- const value = item.dataset.data[item.dataIndex];
- if (label == outputChannel.channelId || label == translate.instant('General.soc')) {
- return label + ": " + formatNumber(value, 'de', '1.0-0') + " %";
- } else if (label == translate.instant('General.grid') || label == translate.instant('General.production')) {
- return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW";
- } else {
- return label + ": " + formatNumber(value, 'de', '1.0-2') + " " + labelString;
- }
- };
-
- this.options = options;
- });
-
- }
-
-}
diff --git a/ui/src/app/edge/history/singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component.html b/ui/src/app/edge/history/singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component.html
deleted file mode 100644
index ebd9b564647..00000000000
--- a/ui/src/app/edge/history/singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
- {{ component.alias }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Edge.Index.Widgets.twoWayInfoGrid
-
-
-
-
-
-
-
-
diff --git a/ui/src/app/edge/history/singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component.ts b/ui/src/app/edge/history/singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component.ts
deleted file mode 100644
index 752aafb63ea..00000000000
--- a/ui/src/app/edge/history/singlethreshold/singlethresholdchartoverview/singlethresholdchartoverview.component.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils, Websocket } from '../../../../shared/shared';
-
-@Component({
- selector: SinglethresholdChartOverviewComponent.SELECTOR,
- templateUrl: './singlethresholdchartoverview.component.html',
-})
-export class SinglethresholdChartOverviewComponent implements OnInit {
-
- private static readonly SELECTOR = "channelthreshold-chart-overview";
-
- public edge: Edge | null = null;
-
- public component: EdgeConfig.Component | null = null;
- public inputChannel: string;
-
- // reference to the Utils method to access via html
- public isLastElement = Utils.isLastElement;
-
- protected inputChannelUnit: string;
- protected readonly spinnerid = SinglethresholdChartOverviewComponent.SELECTOR;
-
-
- constructor(
- public service: Service,
- private route: ActivatedRoute,
- private websocket: Websocket,
- ) { }
-
- ngOnInit() {
- this.service.startSpinner(this.spinnerid);
- this.service.setCurrentComponent('', this.route).then(edge => {
- this.service.getConfig().then(config => {
- this.edge = edge;
- this.component = config.getComponent(this.route.snapshot.params.componentId);
- this.inputChannel = config.getComponentProperties(this.component.id)['inputChannelAddress'];
-
- this.edge.getChannel(this.websocket, ChannelAddress.fromString(this.inputChannel)).then(c => {
- this.inputChannelUnit = c.unit;
- }).catch(e => {
- console.error(e);
- this.inputChannelUnit = '';
- }).finally(() => {
- this.service.stopSpinner(this.spinnerid);
- });
- });
- });
- }
-}
diff --git a/ui/src/app/edge/history/singlethreshold/widget.component.html b/ui/src/app/edge/history/singlethreshold/widget.component.html
deleted file mode 100644
index 53e0a2d3687..00000000000
--- a/ui/src/app/edge/history/singlethreshold/widget.component.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- {{ component.alias }}
-
-
-
-
-
- Edge.History.activeDuration |
-
- {{ activeSecondsOverPeriod | formatSecondsToDuration }}
- |
-
-
-
-
\ No newline at end of file
diff --git a/ui/src/app/edge/history/singlethreshold/widget.component.ts b/ui/src/app/edge/history/singlethreshold/widget.component.ts
deleted file mode 100644
index c0ba1844e78..00000000000
--- a/ui/src/app/edge/history/singlethreshold/widget.component.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { QueryHistoricTimeseriesDataResponse } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesDataResponse';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryWidget } from '../abstracthistorywidget';
-import { calculateActiveTimeOverPeriod } from '../shared';
-
-@Component({
- selector: SinglethresholdWidgetComponent.SELECTOR,
- templateUrl: './widget.component.html',
-})
-export class SinglethresholdWidgetComponent extends AbstractHistoryWidget implements OnInit, OnChanges, OnDestroy {
-
- private static readonly SELECTOR = "singlethresholdWidget";
-
- @Input({ required: true }) public period!: DefaultTypes.HistoryPeriod;
- @Input({ required: true }) public componentId!: string;
-
- public activeSecondsOverPeriod: number | null = null;
- public edge: Edge | null = null;
- public component: EdgeConfig.Component | null = null;
-
- constructor(
- public override service: Service,
- private route: ActivatedRoute,
- ) {
- super(service);
- }
-
- ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(response => {
- this.edge = response;
- this.service.getConfig().then(config => {
- this.component = config.getComponent(this.componentId);
- });
- });
- }
-
- ngOnDestroy() {
- this.unsubscribeWidgetRefresh();
- }
-
- ngOnChanges() {
- this.updateValues();
- }
-
- // Gather result & timestamps to calculate effective active time in %
- protected updateValues() {
- this.queryHistoricTimeseriesData(this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).then(response => {
- this.service.getConfig().then(config => {
- const result = (response as QueryHistoricTimeseriesDataResponse).result;
- let outputChannelAddress: string | string[] = config.getComponentProperties(this.componentId)['outputChannelAddress'];
- if (typeof outputChannelAddress !== 'string') {
- // Takes only the first output for simplicity reasons
- outputChannelAddress = outputChannelAddress[0];
- }
- this.activeSecondsOverPeriod = calculateActiveTimeOverPeriod(ChannelAddress.fromString(outputChannelAddress), result);
- });
- });
- }
-
- protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
- return new Promise((resolve) => {
- const outputChannelAddress: string | string[] = config.getComponentProperties(this.componentId)['outputChannelAddress'];
- if (typeof outputChannelAddress === 'string') {
- resolve([ChannelAddress.fromString(outputChannelAddress)]);
- } else {
- resolve(outputChannelAddress.map(c => ChannelAddress.fromString(c)));
- }
- });
- }
-}
diff --git a/ui/src/app/edge/history/storage/chargerchart.component.ts b/ui/src/app/edge/history/storage/chargerchart.component.ts
index 60c1ddedb19..44395de3842 100644
--- a/ui/src/app/edge/history/storage/chargerchart.component.ts
+++ b/ui/src/app/edge/history/storage/chargerchart.component.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'storageChargerChart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "storageChargerChart",
+ templateUrl: "../abstracthistorychart.html",
})
export class StorageChargerChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -32,7 +32,6 @@ export class StorageChargerChartComponent extends AbstractHistoryChart implement
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -71,13 +70,13 @@ export class StorageChargerChartComponent extends AbstractHistoryChart implement
});
if (address.channelId == "ActualPower") {
datasets.push({
- label: this.translate.instant('General.chargePower'),
+ label: this.translate.instant("General.chargePower"),
data: chargerData,
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
}
});
@@ -97,7 +96,7 @@ export class StorageChargerChartComponent extends AbstractHistoryChart implement
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress(this.componentId, 'ActualPower'),
+ new ChannelAddress(this.componentId, "ActualPower"),
];
resolve(result);
});
diff --git a/ui/src/app/edge/history/storage/esschart.component.ts b/ui/src/app/edge/history/storage/esschart.component.ts
index 45071d138f8..cd83e95a11f 100644
--- a/ui/src/app/edge/history/storage/esschart.component.ts
+++ b/ui/src/app/edge/history/storage/esschart.component.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'storageESSChart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "storageESSChart",
+ templateUrl: "../abstracthistorychart.html",
})
export class StorageESSChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -34,7 +34,6 @@ export class StorageESSChartComponent extends AbstractHistoryChart implements On
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
this.setLabel();
}
@@ -78,33 +77,33 @@ export class StorageESSChartComponent extends AbstractHistoryChart implements On
} else {
if (channelAddress.channelId == "ActivePower") {
datasets.push({
- label: this.translate.instant('General.chargeDischarge'),
+ label: this.translate.instant("General.chargeDischarge"),
data: data,
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
}
- if (this.componentId + '/ActivePowerL1' && this.componentId + '/ActivePowerL2' && this.componentId + '/ActivePowerL3' in result.data && this.showPhases == true) {
- if (channelAddress.channelId == 'ActivePowerL1') {
+ if (this.componentId + "/ActivePowerL1" && this.componentId + "/ActivePowerL2" && this.componentId + "/ActivePowerL3" in result.data && this.showPhases == true) {
+ if (channelAddress.channelId == "ActivePowerL1") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L1',
+ label: this.translate.instant("General.phase") + " " + "L1",
data: data,
});
this.colors.push(this.phase1Color);
}
- if (channelAddress.channelId == 'ActivePowerL2') {
+ if (channelAddress.channelId == "ActivePowerL2") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L2',
+ label: this.translate.instant("General.phase") + " " + "L2",
data: data,
});
this.colors.push(this.phase2Color);
}
- if (channelAddress.channelId == 'ActivePowerL3') {
+ if (channelAddress.channelId == "ActivePowerL3") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L3',
+ label: this.translate.instant("General.phase") + " " + "L3",
data: data,
});
this.colors.push(this.phase3Color);
@@ -143,13 +142,13 @@ export class StorageESSChartComponent extends AbstractHistoryChart implements On
const factory = config.factories[factoryID];
return new Promise((resolve, reject) => {
const result: ChannelAddress[] = [
- new ChannelAddress(this.componentId, 'ActivePower'),
+ new ChannelAddress(this.componentId, "ActivePower"),
];
if ((factory.natureIds.includes("io.openems.edge.ess.api.AsymmetricEss"))) {
result.push(
- new ChannelAddress(component.id, 'ActivePowerL1'),
- new ChannelAddress(component.id, 'ActivePowerL2'),
- new ChannelAddress(component.id, 'ActivePowerL3'),
+ new ChannelAddress(component.id, "ActivePowerL1"),
+ new ChannelAddress(component.id, "ActivePowerL2"),
+ new ChannelAddress(component.id, "ActivePowerL3"),
);
}
resolve(result);
diff --git a/ui/src/app/edge/history/storage/singlechart.component.ts b/ui/src/app/edge/history/storage/singlechart.component.ts
index 3f670d816ee..4d987a4b2ee 100644
--- a/ui/src/app/edge/history/storage/singlechart.component.ts
+++ b/ui/src/app/edge/history/storage/singlechart.component.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { formatNumber } from '@angular/common';
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChartAxis, YAxisTitle } from 'src/app/shared/service/utils';
+import { formatNumber } from "@angular/common";
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChartAxis, YAxisType } from "src/app/shared/service/utils";
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'storageSingleChart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "storageSingleChart",
+ templateUrl: "../abstracthistorychart.html",
})
export class StorageSingleChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -33,7 +33,6 @@ export class StorageSingleChartComponent extends AbstractHistoryChart implements
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -47,11 +46,11 @@ export class StorageSingleChartComponent extends AbstractHistoryChart implements
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress('_sum', 'EssActivePower'),
- new ChannelAddress('_sum', 'ProductionDcActualPower'),
- new ChannelAddress('_sum', 'EssActivePowerL1'),
- new ChannelAddress('_sum', 'EssActivePowerL2'),
- new ChannelAddress('_sum', 'EssActivePowerL3'),
+ new ChannelAddress("_sum", "EssActivePower"),
+ new ChannelAddress("_sum", "ProductionDcActualPower"),
+ new ChannelAddress("_sum", "EssActivePowerL1"),
+ new ChannelAddress("_sum", "EssActivePowerL2"),
+ new ChannelAddress("_sum", "EssActivePowerL3"),
];
resolve(result);
});
@@ -86,20 +85,20 @@ export class StorageSingleChartComponent extends AbstractHistoryChart implements
let effectivePowerL2 = [];
let effectivePowerL3 = [];
- if (config.getComponentsImplementingNature('io.openems.edge.ess.dccharger.api.EssDcCharger').length > 0) {
- result.data['_sum/ProductionDcActualPower'].forEach((value, index) => {
- if (result.data['_sum/ProductionDcActualPower'][index] != null) {
- effectivePower[index] = Utils.subtractSafely(result.data['_sum/EssActivePower'][index], value);
- effectivePowerL1[index] = Utils.subtractSafely(result.data['_sum/EssActivePowerL1'][index], value / 3);
- effectivePowerL2[index] = Utils.subtractSafely(result.data['_sum/EssActivePowerL2'][index], value / 3);
- effectivePowerL3[index] = Utils.subtractSafely(result.data['_sum/EssActivePowerL3'][index], value / 3);
+ if (config.getComponentsImplementingNature("io.openems.edge.ess.dccharger.api.EssDcCharger").length > 0) {
+ result.data["_sum/ProductionDcActualPower"].forEach((value, index) => {
+ if (result.data["_sum/ProductionDcActualPower"][index] != null) {
+ effectivePower[index] = Utils.subtractSafely(result.data["_sum/EssActivePower"][index], value);
+ effectivePowerL1[index] = Utils.subtractSafely(result.data["_sum/EssActivePowerL1"][index], value / 3);
+ effectivePowerL2[index] = Utils.subtractSafely(result.data["_sum/EssActivePowerL2"][index], value / 3);
+ effectivePowerL3[index] = Utils.subtractSafely(result.data["_sum/EssActivePowerL3"][index], value / 3);
}
});
} else {
- effectivePower = result.data['_sum/EssActivePower'];
- effectivePowerL1 = result.data['_sum/EssActivePowerL1'];
- effectivePowerL2 = result.data['_sum/EssActivePowerL2'];
- effectivePowerL3 = result.data['_sum/EssActivePowerL3'];
+ effectivePower = result.data["_sum/EssActivePower"];
+ effectivePowerL1 = result.data["_sum/EssActivePowerL1"];
+ effectivePowerL2 = result.data["_sum/EssActivePowerL2"];
+ effectivePowerL3 = result.data["_sum/EssActivePowerL3"];
}
const totalData = effectivePower.map(value => {
@@ -148,30 +147,30 @@ export class StorageSingleChartComponent extends AbstractHistoryChart implements
} else {
if (channelAddress.channelId == "EssActivePower") {
datasets.push({
- label: this.translate.instant('General.chargeDischarge'),
+ label: this.translate.instant("General.chargeDischarge"),
data: totalData,
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
}
- if ('_sum/EssActivePowerL1' && '_sum/EssActivePowerL2' && '_sum/EssActivePowerL3' in result.data && this.showPhases == true) {
- if (channelAddress.channelId == 'EssActivePowerL1') {
+ if ("_sum/EssActivePowerL1" && "_sum/EssActivePowerL2" && "_sum/EssActivePowerL3" in result.data && this.showPhases == true) {
+ if (channelAddress.channelId == "EssActivePowerL1") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L1',
+ label: this.translate.instant("General.phase") + " " + "L1",
data: totalDataL1,
});
this.colors.push(this.phase1Color);
- } if (channelAddress.channelId == 'EssActivePowerL2') {
+ } if (channelAddress.channelId == "EssActivePowerL2") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L2',
+ label: this.translate.instant("General.phase") + " " + "L2",
data: totalDataL2,
});
this.colors.push(this.phase2Color);
- } if (channelAddress.channelId == 'EssActivePowerL3') {
+ } if (channelAddress.channelId == "EssActivePowerL3") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L3',
+ label: this.translate.instant("General.phase") + " " + "L3",
data: totalDataL3,
});
this.colors.push(this.phase3Color);
@@ -198,7 +197,7 @@ export class StorageSingleChartComponent extends AbstractHistoryChart implements
this.initializeChart();
return;
}).finally(async () => {
- this.unit = YAxisTitle.ENERGY;
+ this.unit = YAxisType.ENERGY;
await this.setOptions(this.options);
this.applyControllerSpecificChartOptions(this.options);
this.loading = false;
@@ -216,24 +215,24 @@ export class StorageSingleChartComponent extends AbstractHistoryChart implements
const value = tooltipItem.dataset.data[tooltipItem.dataIndex];
// 0.005 to prevent showing Charge or Discharge if value is e.g. 0.00232138
if (value < -0.005) {
- if (label.includes(translate.instant('General.phase'))) {
- label += ' ' + translate.instant('General.chargePower');
+ if (label.includes(translate.instant("General.phase"))) {
+ label += " " + translate.instant("General.chargePower");
} else {
- label = translate.instant('General.chargePower');
+ label = translate.instant("General.chargePower");
}
} else if (value > 0.005) {
- if (label.includes(translate.instant('General.phase'))) {
- label += ' ' + translate.instant('General.dischargePower');
+ if (label.includes(translate.instant("General.phase"))) {
+ label += " " + translate.instant("General.dischargePower");
} else {
- label = translate.instant('General.dischargePower');
+ label = translate.instant("General.dischargePower");
}
}
- return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW";
+ return label + ": " + formatNumber(value, "de", "1.0-2") + " kW";
};
// Data doesnt have all datapoints for period
// original logic has not been touched
- options.scales.x.ticks['source'] = 'auto';
+ options.scales.x.ticks["source"] = "auto";
this.options = options;
}
diff --git a/ui/src/app/edge/history/storage/socchart.component.ts b/ui/src/app/edge/history/storage/socchart.component.ts
index 6e76644f311..bf127df1811 100644
--- a/ui/src/app/edge/history/storage/socchart.component.ts
+++ b/ui/src/app/edge/history/storage/socchart.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { YAxisTitle } from 'src/app/shared/service/utils';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { YAxisType } from "src/app/shared/service/utils";
-import { ChannelAddress, Edge, EdgeConfig, Service } from '../../../shared/shared';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { ChannelAddress, Edge, EdgeConfig, Service } from "../../../shared/shared";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'socStorageChart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "socStorageChart",
+ templateUrl: "../abstracthistorychart.html",
})
export class SocStorageChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -35,7 +35,6 @@ export class SocStorageChartComponent extends AbstractHistoryChart implements On
public ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
public ngOnDestroy() {
@@ -77,28 +76,28 @@ export class SocStorageChartComponent extends AbstractHistoryChart implements On
if (!data) {
return;
} else {
- if (channelAddress.channelId === 'EssSoc') {
+ if (channelAddress.channelId === "EssSoc") {
datasets.push({
- label: (moreThanOneESS ? this.translate.instant('General.TOTAL') : this.translate.instant('General.soc')),
+ label: (moreThanOneESS ? this.translate.instant("General.TOTAL") : this.translate.instant("General.soc")),
data: data,
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
}
- if (channelAddress.channelId === 'Soc' && moreThanOneESS) {
+ if (channelAddress.channelId === "Soc" && moreThanOneESS) {
datasets.push({
label: (channelAddress.componentId == component.alias ? component.id : component.alias),
data: data,
});
this.colors.push({
- backgroundColor: 'rgba(128,128,128,0.05)',
- borderColor: 'rgba(128,128,128,1)',
+ backgroundColor: "rgba(128,128,128,0.05)",
+ borderColor: "rgba(128,128,128,1)",
});
}
}
- if (channelAddress.channelId === 'ActualReserveSoc') {
+ if (channelAddress.channelId === "ActualReserveSoc") {
datasets.push({
label:
this.emergencyCapacityReserveComponents.length > 1 ? component.alias : this.translate.instant("Edge.Index.EmergencyReserve.EMERGENCY_RESERVE"),
@@ -107,8 +106,8 @@ export class SocStorageChartComponent extends AbstractHistoryChart implements On
});
this.colors.push({
- backgroundColor: 'rgba(1, 1, 1,0)',
- borderColor: 'rgba(1, 1, 1,1)',
+ backgroundColor: "rgba(1, 1, 1,0)",
+ borderColor: "rgba(1, 1, 1,1)",
});
}
});
@@ -117,8 +116,8 @@ export class SocStorageChartComponent extends AbstractHistoryChart implements On
this.loading = false;
this.stopSpinner();
}).finally(async () => {
- this.unit = YAxisTitle.PERCENTAGE;
- this.formatNumber = '1.0-0';
+ this.unit = YAxisType.PERCENTAGE;
+ this.formatNumber = "1.0-0";
await this.setOptions(this.options);
});
@@ -144,20 +143,20 @@ export class SocStorageChartComponent extends AbstractHistoryChart implements On
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const channeladdresses: ChannelAddress[] = [];
- channeladdresses.push(new ChannelAddress('_sum', 'EssSoc'));
+ channeladdresses.push(new ChannelAddress("_sum", "EssSoc"));
- this.emergencyCapacityReserveComponents = config.getComponentsByFactory('Controller.Ess.EmergencyCapacityReserve')
+ this.emergencyCapacityReserveComponents = config.getComponentsByFactory("Controller.Ess.EmergencyCapacityReserve")
.filter(component => component.isEnabled);
this.emergencyCapacityReserveComponents
.forEach(component =>
- channeladdresses.push(new ChannelAddress(component.id, 'ActualReserveSoc')),
+ channeladdresses.push(new ChannelAddress(component.id, "ActualReserveSoc")),
);
const ess = config.getComponentsImplementingNature("io.openems.edge.ess.api.SymmetricEss");
if (ess.length > 1) {
- ess.filter(component => !(component.factoryId === 'Ess.Cluster')).forEach(component => {
- channeladdresses.push(new ChannelAddress(component.id, 'Soc'));
+ ess.filter(component => !(component.factoryId === "Ess.Cluster")).forEach(component => {
+ channeladdresses.push(new ChannelAddress(component.id, "Soc"));
});
}
resolve(channeladdresses);
diff --git a/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.html b/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.html
index 801f94f1d4b..749335aba84 100644
--- a/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.html
+++ b/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.html
@@ -150,4 +150,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.ts b/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.ts
index 84f1c456a1a..9562ad8825a 100644
--- a/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.ts
+++ b/ui/src/app/edge/history/storage/storagechartoverview/storagechartoverview.component.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Edge, EdgeConfig, Service, Utils } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Edge, EdgeConfig, Service, Utils } from "../../../../shared/shared";
@Component({
selector: StorageChartOverviewComponent.SELECTOR,
- templateUrl: './storagechartoverview.component.html',
+ templateUrl: "./storagechartoverview.component.html",
})
export class StorageChartOverviewComponent implements OnInit {
@@ -29,7 +29,7 @@ export class StorageChartOverviewComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
this.edge = edge;
this.essComponents = config.getComponentsImplementingNature("io.openems.edge.ess.api.SymmetricEss").filter(component => !component.factoryId.includes("Ess.Cluster"));
diff --git a/ui/src/app/edge/history/storage/totalchart.component.ts b/ui/src/app/edge/history/storage/totalchart.component.ts
index fa75aaac305..13375ae97db 100644
--- a/ui/src/app/edge/history/storage/totalchart.component.ts
+++ b/ui/src/app/edge/history/storage/totalchart.component.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChartAxis, Utils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, Edge, EdgeConfig, Service } from 'src/app/shared/shared';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChartAxis, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, Edge, EdgeConfig, Service } from "src/app/shared/shared";
-import { formatNumber } from '@angular/common';
-import { AbstractHistoryChart } from '../abstracthistorychart';
+import { formatNumber } from "@angular/common";
+import { AbstractHistoryChart } from "../abstracthistorychart";
@Component({
- selector: 'storageTotalChart',
- templateUrl: '../abstracthistorychart.html',
+ selector: "storageTotalChart",
+ templateUrl: "../abstracthistorychart.html",
})
export class StorageTotalChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -33,7 +33,6 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
ngOnInit() {
this.startSpinner();
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -63,12 +62,12 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
// calculate total charge and discharge
let effectivePower;
- if (config.getComponentsImplementingNature('io.openems.edge.ess.dccharger.api.EssDcCharger').length > 0) {
- effectivePower = result.data['_sum/ProductionDcActualPower'].map((value, index) => {
- return Utils.subtractSafely(result.data['_sum/EssActivePower'][index], value);
+ if (config.getComponentsImplementingNature("io.openems.edge.ess.dccharger.api.EssDcCharger").length > 0) {
+ effectivePower = result.data["_sum/ProductionDcActualPower"].map((value, index) => {
+ return Utils.subtractSafely(result.data["_sum/EssActivePower"][index], value);
});
} else {
- effectivePower = result.data['_sum/EssActivePower'];
+ effectivePower = result.data["_sum/EssActivePower"];
}
const totalData = effectivePower.map(value => {
if (value == null) {
@@ -104,29 +103,29 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
if (channelAddress.channelId == "EssActivePower") {
datasets.push({
- label: this.translate.instant('General.TOTAL'),
+ label: this.translate.instant("General.TOTAL"),
data: totalData,
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0,0.05)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0.05)",
+ borderColor: "rgba(0,223,0,1)",
});
- } if ('_sum/EssActivePowerL1' && '_sum/EssActivePowerL2' && '_sum/EssActivePowerL3' in result.data && this.showPhases == true) {
- if (channelAddress.channelId == 'EssActivePowerL1') {
+ } if ("_sum/EssActivePowerL1" && "_sum/EssActivePowerL2" && "_sum/EssActivePowerL3" in result.data && this.showPhases == true) {
+ if (channelAddress.channelId == "EssActivePowerL1") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L1',
+ label: this.translate.instant("General.phase") + " " + "L1",
data: data,
});
this.colors.push(this.phase1Color);
- } if (channelAddress.channelId == 'EssActivePowerL2') {
+ } if (channelAddress.channelId == "EssActivePowerL2") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L2',
+ label: this.translate.instant("General.phase") + " " + "L2",
data: data,
});
this.colors.push(this.phase2Color);
- } if (channelAddress.channelId == 'EssActivePowerL3') {
+ } if (channelAddress.channelId == "EssActivePowerL3") {
datasets.push({
- label: this.translate.instant('General.phase') + ' ' + 'L3',
+ label: this.translate.instant("General.phase") + " " + "L3",
data: data,
});
this.colors.push(this.phase3Color);
@@ -139,28 +138,28 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(45,143,171,0.05)',
- borderColor: 'rgba(45,143,171,1)',
+ backgroundColor: "rgba(45,143,171,0.05)",
+ borderColor: "rgba(45,143,171,1)",
});
}
- if (component.id + '/ActivePowerL1' && component.id + '/ActivePowerL2' && component.id + '/ActivePowerL3' in result.data && this.showPhases == true) {
- if (channelAddress.channelId == 'ActivePowerL1') {
+ if (component.id + "/ActivePowerL1" && component.id + "/ActivePowerL2" && component.id + "/ActivePowerL3" in result.data && this.showPhases == true) {
+ if (channelAddress.channelId == "ActivePowerL1") {
datasets.push({
- label: (channelAddress.componentId == component.alias ? ' (' + component.id + ')' : ' (' + component.alias + ')') + ' ' + this.translate.instant('General.phase') + ' ' + 'L1',
+ label: (channelAddress.componentId == component.alias ? " (" + component.id + ")" : " (" + component.alias + ")") + " " + this.translate.instant("General.phase") + " " + "L1",
data: data,
});
this.colors.push(this.phase1Color);
}
- if (channelAddress.channelId == 'ActivePowerL2') {
+ if (channelAddress.channelId == "ActivePowerL2") {
datasets.push({
- label: (channelAddress.componentId == component.alias ? ' (' + component.id + ')' : ' (' + component.alias + ')') + ' ' + this.translate.instant('General.phase') + ' ' + 'L2',
+ label: (channelAddress.componentId == component.alias ? " (" + component.id + ")" : " (" + component.alias + ")") + " " + this.translate.instant("General.phase") + " " + "L2",
data: data,
});
this.colors.push(this.phase2Color);
}
- if (channelAddress.channelId == 'ActivePowerL3') {
+ if (channelAddress.channelId == "ActivePowerL3") {
datasets.push({
- label: (channelAddress.componentId == component.alias ? ' (' + component.id + ')' : ' (' + component.alias + ')') + ' ' + this.translate.instant('General.phase') + ' ' + 'L3',
+ label: (channelAddress.componentId == component.alias ? " (" + component.id + ")" : " (" + component.alias + ")") + " " + this.translate.instant("General.phase") + " " + "L3",
data: data,
});
this.colors.push(this.phase3Color);
@@ -173,14 +172,14 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
hidden: false,
});
this.colors.push({
- backgroundColor: 'rgba(255,215,0,0.05)',
- borderColor: 'rgba(255,215,0,1)',
+ backgroundColor: "rgba(255,215,0,0.05)",
+ borderColor: "rgba(255,215,0,1)",
});
}
});
}).finally(async () => {
this.datasets = datasets;
- this.unit = YAxisTitle.ENERGY;
+ this.unit = YAxisType.ENERGY;
await this.setOptions(this.options);
this.applyControllerSpecificChartOptions(this.options);
this.stopSpinner();
@@ -209,23 +208,23 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
protected getChannelAddresses(edge: Edge, config: EdgeConfig): Promise {
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress('_sum', 'EssActivePower'),
- new ChannelAddress('_sum', 'ProductionDcActualPower'),
- new ChannelAddress('_sum', 'EssActivePowerL1'),
- new ChannelAddress('_sum', 'EssActivePowerL2'),
- new ChannelAddress('_sum', 'EssActivePowerL3'),
+ new ChannelAddress("_sum", "EssActivePower"),
+ new ChannelAddress("_sum", "ProductionDcActualPower"),
+ new ChannelAddress("_sum", "EssActivePowerL1"),
+ new ChannelAddress("_sum", "EssActivePowerL2"),
+ new ChannelAddress("_sum", "EssActivePowerL3"),
];
config.getComponentsImplementingNature("io.openems.edge.ess.api.SymmetricEss")
.filter(component => !component.factoryId.includes("Ess.Cluster"))
.forEach(component => {
const factoryID = component.factoryId;
const factory = config.factories[factoryID];
- result.push(new ChannelAddress(component.id, 'ActivePower'));
+ result.push(new ChannelAddress(component.id, "ActivePower"));
if ((factory.natureIds.includes("io.openems.edge.ess.api.AsymmetricEss"))) {
result.push(
- new ChannelAddress(component.id, 'ActivePowerL1'),
- new ChannelAddress(component.id, 'ActivePowerL2'),
- new ChannelAddress(component.id, 'ActivePowerL3'),
+ new ChannelAddress(component.id, "ActivePowerL1"),
+ new ChannelAddress(component.id, "ActivePowerL2"),
+ new ChannelAddress(component.id, "ActivePowerL3"),
);
}
});
@@ -233,7 +232,7 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
if (config.getComponentsImplementingNature("io.openems.edge.ess.api.SymmetricEss")
.filter(component => !component.factoryId.includes("Ess.Cluster")).length != 1 && charger.length > 0) {
charger.forEach(component => {
- result.push(new ChannelAddress(component.id, 'ActualPower'));
+ result.push(new ChannelAddress(component.id, "ActualPower"));
});
}
resolve(result);
@@ -253,11 +252,11 @@ export class StorageTotalChartComponent extends AbstractHistoryChart implements
const value = tooltipItem.dataset.data[tooltipItem.dataIndex];
// 0.005 to prevent showing Charge or Discharge if value is e.g. 0.00232138
if (value < -0.005) {
- label += ' ' + translate.instant('General.chargePower');
+ label += " " + translate.instant("General.chargePower");
} else if (value > 0.005) {
- label += ' ' + translate.instant('General.dischargePower');
+ label += " " + translate.instant("General.dischargePower");
}
- return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW";
+ return label + ": " + formatNumber(value, "de", "1.0-2") + " kW";
};
}
}
diff --git a/ui/src/app/edge/history/storage/widget.component.html b/ui/src/app/edge/history/storage/widget.component.html
index fe64475d93c..79f3aaac4ce 100644
--- a/ui/src/app/edge/history/storage/widget.component.html
+++ b/ui/src/app/edge/history/storage/widget.component.html
@@ -29,4 +29,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/history/storage/widget.component.ts b/ui/src/app/edge/history/storage/widget.component.ts
index 57987a5ca63..9e4b95790f8 100644
--- a/ui/src/app/edge/history/storage/widget.component.ts
+++ b/ui/src/app/edge/history/storage/widget.component.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { Cumulated } from 'src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../shared/shared';
-import { AbstractHistoryWidget } from '../abstracthistorywidget';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { Cumulated } from "src/app/shared/jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "../../../shared/shared";
+import { AbstractHistoryWidget } from "../abstracthistorywidget";
@Component({
selector: StorageComponent.SELECTOR,
- templateUrl: './widget.component.html',
+ templateUrl: "./widget.component.html",
})
export class StorageComponent extends AbstractHistoryWidget implements OnInit, OnChanges, OnDestroy {
@@ -31,7 +31,7 @@ export class StorageComponent extends AbstractHistoryWidget implements OnInit, O
}
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(response => {
+ this.service.getCurrentEdge().then(response => {
this.edge = response;
});
}
@@ -60,8 +60,8 @@ export class StorageComponent extends AbstractHistoryWidget implements OnInit, O
return new Promise((resolve) => {
const channels: ChannelAddress[] = [];
channels.push(
- new ChannelAddress('_sum', 'EssDcChargeEnergy'),
- new ChannelAddress('_sum', 'EssDcDischargeEnergy'),
+ new ChannelAddress("_sum", "EssDcChargeEnergy"),
+ new ChannelAddress("_sum", "EssDcDischargeEnergy"),
);
resolve(channels);
});
diff --git a/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.html b/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.html
index 677d4630fab..8cb74e66409 100644
--- a/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.html
+++ b/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.html
@@ -5,4 +5,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.ts b/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.ts
index f4e1909afe6..e33b705a5a7 100644
--- a/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.ts
+++ b/ui/src/app/edge/live/Controller/Channelthreshold/Channelthreshold.ts
@@ -1,26 +1,26 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { Icon } from 'src/app/shared/type/widget';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { Icon } from "src/app/shared/type/widget";
-import { ChannelAddress, CurrentData } from '../../../../shared/shared';
+import { ChannelAddress, CurrentData } from "../../../../shared/shared";
@Component({
- selector: 'Controller_Channelthreshold',
- templateUrl: './Channelthreshold.html',
+ selector: "Controller_Channelthreshold",
+ templateUrl: "./Channelthreshold.html",
})
export class Controller_ChannelthresholdComponent extends AbstractFlatWidget {
public outputChannel: ChannelAddress;
public icon: Icon = {
- name: '',
- size: 'large',
- color: 'dark',
+ name: "",
+ size: "large",
+ color: "dark",
};
- public state: string = '?';
+ public state: string = "?";
protected override getChannelAddresses() {
- this.outputChannel = ChannelAddress.fromString(this.component.properties['outputChannelAddress']);
+ this.outputChannel = ChannelAddress.fromString(this.component.properties["outputChannelAddress"]);
return [this.outputChannel];
}
protected override onCurrentData(currentData: CurrentData) {
@@ -28,13 +28,13 @@ export class Controller_ChannelthresholdComponent extends AbstractFlatWidget {
if (channel != null) {
if (channel == 1) {
this.icon.name = "radio-button-on-outline";
- this.state = this.translate.instant('General.on');
+ this.state = this.translate.instant("General.on");
} else if (channel == 0) {
- this.icon.name = 'radio-button-off-outline';
- this.state = this.translate.instant('General.off');
+ this.icon.name = "radio-button-off-outline";
+ this.state = this.translate.instant("General.off");
}
} else {
- this.icon.name = 'help-outline';
+ this.icon.name = "help-outline";
}
}
}
diff --git a/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.html b/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.html
index 751a66c868e..8dc374e330e 100644
--- a/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.html
+++ b/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.html
@@ -27,4 +27,4 @@
height="16" style="fill:blue" />
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.ts b/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.ts
index 9a56102cea6..48adf7600d5 100644
--- a/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.ts
+++ b/ui/src/app/edge/live/Controller/ChpSoc/ChpSoc.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { Icon } from 'src/app/shared/type/widget';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { Icon } from "src/app/shared/type/widget";
-import { ChannelAddress, CurrentData } from '../../../../shared/shared';
-import { Controller_ChpSocModalComponent } from './modal/modal.component';
+import { ChannelAddress, CurrentData } from "../../../../shared/shared";
+import { Controller_ChpSocModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Controller_ChpSocComponent',
- templateUrl: './ChpSoc.html',
+ selector: "Controller_ChpSocComponent",
+ templateUrl: "./ChpSoc.html",
})
export class Controller_ChpSocComponent extends AbstractFlatWidget {
- private static PROPERTY_MODE: string = '_PropertyMode';
+ private static PROPERTY_MODE: string = "_PropertyMode";
public inputChannel: ChannelAddress | null = null;
public outputChannel: ChannelAddress | null = null;
public propertyModeChannel: ChannelAddress | null = null;
@@ -23,9 +23,9 @@ export class Controller_ChpSocComponent extends AbstractFlatWidget {
public modeChannelValue: string;
public inputChannelValue: number;
public icon: Icon = {
- name: '',
- size: 'large',
- color: 'primary',
+ name: "",
+ size: "large",
+ color: "primary",
};
async presentModal() {
@@ -43,16 +43,16 @@ export class Controller_ChpSocComponent extends AbstractFlatWidget {
protected override getChannelAddresses() {
this.outputChannel = ChannelAddress.fromString(
- this.component.properties['outputChannelAddress']);
+ this.component.properties["outputChannelAddress"]);
this.inputChannel = ChannelAddress.fromString(
- this.component.properties['inputChannelAddress']);
+ this.component.properties["inputChannelAddress"]);
this.propertyModeChannel = new ChannelAddress(this.component.id, Controller_ChpSocComponent.PROPERTY_MODE);
return [
this.outputChannel,
this.inputChannel,
this.propertyModeChannel,
- new ChannelAddress(this.component.id, '_PropertyHighThreshold'),
- new ChannelAddress(this.component.id, '_PropertyLowThreshold'),
+ new ChannelAddress(this.component.id, "_PropertyHighThreshold"),
+ new ChannelAddress(this.component.id, "_PropertyLowThreshold"),
];
}
@@ -61,31 +61,31 @@ export class Controller_ChpSocComponent extends AbstractFlatWidget {
// Mode
this.modeChannelValue = currentData.allComponents[this.propertyModeChannel.toString()];
switch (this.modeChannelValue) {
- case 'ON':
- this.mode = this.translate.instant('General.on');
+ case "ON":
+ this.mode = this.translate.instant("General.on");
break;
- case 'OFF':
- this.mode = this.translate.instant('General.off');
+ case "OFF":
+ this.mode = this.translate.instant("General.off");
break;
- case 'AUTOMATIC':
- this.mode = this.translate.instant('General.automatic');
+ case "AUTOMATIC":
+ this.mode = this.translate.instant("General.automatic");
}
const outputChannelValue = currentData.allComponents[this.outputChannel.toString()];
switch (outputChannelValue) {
case 0:
- this.state = this.translate.instant('General.inactive');
- this.icon.name == 'help-outline';
+ this.state = this.translate.instant("General.inactive");
+ this.icon.name == "help-outline";
break;
case 1:
- this.state = this.translate.instant('General.active');
+ this.state = this.translate.instant("General.active");
break;
}
this.inputChannelValue = currentData.allComponents[this.inputChannel.toString()];
- this.highThresholdValue = currentData.allComponents[this.component.id + '/_PropertyHighThreshold'];
- this.lowThresholdValue = currentData.allComponents[this.component.id + '/_PropertyLowThreshold'];
+ this.highThresholdValue = currentData.allComponents[this.component.id + "/_PropertyHighThreshold"];
+ this.lowThresholdValue = currentData.allComponents[this.component.id + "/_PropertyLowThreshold"];
}
}
diff --git a/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.html b/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.html
index a1a9d050f1c..531dec7234d 100644
--- a/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.html
+++ b/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.html
@@ -103,4 +103,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.ts b/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.ts
index 636e1265b75..0c557361d5a 100644
--- a/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Controller/ChpSoc/modal/modal.component.ts
@@ -1,17 +1,17 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { RangeValue } from '@ionic/core';
-import { TranslateService } from '@ngx-translate/core';
-import { ChannelAddress, Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { RangeValue } from "@ionic/core";
+import { TranslateService } from "@ngx-translate/core";
+import { ChannelAddress, Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
-type mode = 'MANUAL_ON' | 'MANUAL_OFF' | 'AUTOMATIC';
+type mode = "MANUAL_ON" | "MANUAL_OFF" | "AUTOMATIC";
@Component({
selector: Controller_ChpSocModalComponent.SELECTOR,
- templateUrl: './modal.component.html',
+ templateUrl: "./modal.component.html",
})
export class Controller_ChpSocModalComponent implements OnInit {
@@ -36,8 +36,8 @@ export class Controller_ChpSocModalComponent implements OnInit {
) { }
ngOnInit() {
- this.thresholds['lower'] = this.component.properties['lowThreshold'];
- this.thresholds['upper'] = this.component.properties['highThreshold'];
+ this.thresholds["lower"] = this.component.properties["lowThreshold"];
+ this.thresholds["upper"] = this.component.properties["highThreshold"];
}
/**
@@ -50,26 +50,26 @@ export class Controller_ChpSocModalComponent implements OnInit {
let newMode: mode;
switch (event.detail.value) {
- case 'MANUAL_ON':
- newMode = 'MANUAL_ON';
+ case "MANUAL_ON":
+ newMode = "MANUAL_ON";
break;
- case 'MANUAL_OFF':
- newMode = 'MANUAL_OFF';
+ case "MANUAL_OFF":
+ newMode = "MANUAL_OFF";
break;
- case 'AUTOMATIC':
- newMode = 'AUTOMATIC';
+ case "AUTOMATIC":
+ newMode = "AUTOMATIC";
break;
}
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, this.component.id, [
- { name: 'mode', value: newMode },
+ { name: "mode", value: newMode },
]).then(() => {
this.component.properties.mode = newMode;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.component.properties.mode = oldMode;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -81,25 +81,25 @@ export class Controller_ChpSocModalComponent implements OnInit {
* @param event
*/
updateThresholds() {
- const oldLowerThreshold = this.component.properties['lowThreshold'];
- const oldUpperThreshold = this.component.properties['highThreshold'];
+ const oldLowerThreshold = this.component.properties["lowThreshold"];
+ const oldUpperThreshold = this.component.properties["highThreshold"];
- const newLowerThreshold = this.thresholds['lower'];
- const newUpperThreshold = this.thresholds['upper'];
+ const newLowerThreshold = this.thresholds["lower"];
+ const newUpperThreshold = this.thresholds["upper"];
// prevents automatic update when no values have changed
if (this.edge != null && (oldLowerThreshold != newLowerThreshold || oldUpperThreshold != newUpperThreshold)) {
this.edge.updateComponentConfig(this.websocket, this.component.id, [
- { name: 'lowThreshold', value: newLowerThreshold },
- { name: 'highThreshold', value: newUpperThreshold },
+ { name: "lowThreshold", value: newLowerThreshold },
+ { name: "highThreshold", value: newUpperThreshold },
]).then(() => {
- this.component.properties['lowThreshold'] = newLowerThreshold;
- this.component.properties['highThreshold'] = newUpperThreshold;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.component.properties["lowThreshold"] = newLowerThreshold;
+ this.component.properties["highThreshold"] = newUpperThreshold;
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
- this.component.properties['lowThreshold'] = oldLowerThreshold;
- this.component.properties['highThreshold'] = oldUpperThreshold;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.component.properties["lowThreshold"] = oldLowerThreshold;
+ this.component.properties["highThreshold"] = oldUpperThreshold;
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
diff --git a/ui/src/app/edge/live/Controller/Ess/FixActivePower/Ess_FixActivePower.ts b/ui/src/app/edge/live/Controller/Ess/FixActivePower/Ess_FixActivePower.ts
index 471d2ee863d..b22ff209e54 100644
--- a/ui/src/app/edge/live/Controller/Ess/FixActivePower/Ess_FixActivePower.ts
+++ b/ui/src/app/edge/live/Controller/Ess/FixActivePower/Ess_FixActivePower.ts
@@ -1,8 +1,8 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.html b/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.html
index 55b1aa87dc2..61ce74a5bd8 100644
--- a/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.html
+++ b/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.html
@@ -10,4 +10,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.ts b/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.ts
index fd80147f88a..73429cc8694 100644
--- a/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.ts
+++ b/ui/src/app/edge/live/Controller/Ess/FixActivePower/flat/flat.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChannelAddress, CurrentData, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
-import { ModalComponent } from '../modal/modal';
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'Controller_Ess_FixActivePower',
- templateUrl: './flat.html',
+ selector: "Controller_Ess_FixActivePower",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -39,8 +39,8 @@ export class FlatComponent extends AbstractFlatWidget {
}
protected override onCurrentData(currentData: CurrentData) {
- this.chargeDischargePower = Utils.convertChargeDischargePower(this.translate, currentData.allComponents[this.component.id + '/_PropertyPower']);
- this.propertyMode = currentData.allComponents[this.component.id + '/_PropertyMode'];
+ this.chargeDischargePower = Utils.convertChargeDischargePower(this.translate, currentData.allComponents[this.component.id + "/_PropertyPower"]);
+ this.propertyMode = currentData.allComponents[this.component.id + "/_PropertyMode"];
}
}
diff --git a/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.html b/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.html
index 98c41b705c5..78d026f8af5 100644
--- a/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.html
+++ b/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.html
@@ -31,4 +31,4 @@
[info]="('Edge.Index.Widgets.InfoStorageForCharge' | translate) + '. ' + ('Edge.Index.Widgets.InfoStorageForDischarge' | translate)">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.ts b/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.ts
index 9653441e6e6..8e1c941963a 100644
--- a/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.ts
+++ b/ui/src/app/edge/live/Controller/Ess/FixActivePower/modal/modal.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { FormControl, FormGroup } from '@angular/forms';
-import { AbstractModal } from 'src/app/shared/components/modal/abstractModal';
-import { ChannelAddress, CurrentData, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { FormControl, FormGroup } from "@angular/forms";
+import { AbstractModal } from "src/app/shared/components/modal/abstractModal";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
@Component({
- templateUrl: './modal.html',
+ templateUrl: "./modal.html",
})
export class ModalComponent extends AbstractModal {
@@ -21,7 +21,7 @@ export class ModalComponent extends AbstractModal {
}
protected override onCurrentData(currentData: CurrentData) {
- this.chargeDischargePower = Utils.convertChargeDischargePower(this.translate, currentData.allComponents[this.component.id + '/_PropertyPower']);
+ this.chargeDischargePower = Utils.convertChargeDischargePower(this.translate, currentData.allComponents[this.component.id + "/_PropertyPower"]);
}
protected override getFormGroup(): FormGroup {
diff --git a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/Ess_GridOptimizedCharge.ts b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/Ess_GridOptimizedCharge.ts
index 90c1bb531b7..71b80fdeab9 100644
--- a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/Ess_GridOptimizedCharge.ts
+++ b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/Ess_GridOptimizedCharge.ts
@@ -1,9 +1,9 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
-import { PredictionChartComponent } from './modal/predictionChart';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
+import { PredictionChartComponent } from "./modal/predictionChart";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.html b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.html
index d20fff09d10..3acb6e36570 100644
--- a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.html
+++ b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.html
@@ -33,4 +33,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.ts b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.ts
index 27f56312580..6ba344dd692 100644
--- a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.ts
+++ b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/flat/flat.ts
@@ -1,19 +1,19 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, EdgeConfig, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, EdgeConfig, Utils } from "src/app/shared/shared";
-import { ModalComponent } from '../modal/modal';
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'Controller_Ess_GridOptimizedCharge',
- templateUrl: './flat.html',
+ selector: "Controller_Ess_GridOptimizedCharge",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
public override component: EdgeConfig.Component | null = null;
- public mode: string = '-';
- public state: string = '-';
+ public mode: string = "-";
+ public state: string = "-";
public isSellToGridLimitAvoided: boolean = false;
public sellToGridLimitMinimumChargeLimit: boolean = false;
public delayChargeMaximumChargeLimit: number | null = null;
@@ -40,46 +40,46 @@ export class FlatComponent extends AbstractFlatWidget {
];
}
protected override onCurrentData(currentData: CurrentData) {
- this.mode = currentData.allComponents[this.component.id + '/_PropertyMode'];
+ this.mode = currentData.allComponents[this.component.id + "/_PropertyMode"];
// Check if Grid feed in limitation is avoided
- if (currentData.allComponents[this.component.id + '/SellToGridLimitState'] == 0 ||
- (currentData.allComponents[this.component.id + '/SellToGridLimitState'] == 3
- && currentData.allComponents[this.component.id + '/DelayChargeState'] != 0
- && currentData.allComponents[this.component.id + '/SellToGridLimitMinimumChargeLimit'] > 0)) {
+ if (currentData.allComponents[this.component.id + "/SellToGridLimitState"] == 0 ||
+ (currentData.allComponents[this.component.id + "/SellToGridLimitState"] == 3
+ && currentData.allComponents[this.component.id + "/DelayChargeState"] != 0
+ && currentData.allComponents[this.component.id + "/SellToGridLimitMinimumChargeLimit"] > 0)) {
this.isSellToGridLimitAvoided = true;
}
- this.sellToGridLimitMinimumChargeLimit = currentData.allComponents[this.component.id + '/SellToGridLimitMinimumChargeLimit'];
+ this.sellToGridLimitMinimumChargeLimit = currentData.allComponents[this.component.id + "/SellToGridLimitMinimumChargeLimit"];
- switch (currentData.allComponents[this.component.id + '/DelayChargeState']) {
+ switch (currentData.allComponents[this.component.id + "/DelayChargeState"]) {
case -1:
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.notDefined');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.notDefined");
break;
case 0:
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.chargeLimitActive');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.chargeLimitActive");
break;
case 1:
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.passedEndTime');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.passedEndTime");
break;
case 2:
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.storageAlreadyFull');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.storageAlreadyFull");
break;
case 3:
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.endTimeNotCalculated');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.endTimeNotCalculated");
break;
case 4:
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.noLimitPossible');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.noLimitPossible");
break;
case 5:
case 7:
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.noLimitActive');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.noLimitActive");
break;
- case 8: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.chargingDelayed');
+ case 8: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.chargingDelayed");
break;
}
- this.delayChargeMaximumChargeLimit = currentData.allComponents[this.component.id + '/DelayChargeMaximumChargeLimit'];
+ this.delayChargeMaximumChargeLimit = currentData.allComponents[this.component.id + "/DelayChargeMaximumChargeLimit"];
}
}
diff --git a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/modal.ts b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/modal.ts
index 07343c6befa..c13073bbc2a 100644
--- a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/modal.ts
+++ b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/modal.ts
@@ -1,12 +1,12 @@
// @ts-strict-ignore
-import { ChangeDetectionStrategy, Component } from '@angular/core';
-import { FormControl, FormGroup, Validators } from '@angular/forms';
-import { AbstractModal } from 'src/app/shared/components/modal/abstractModal';
-import { ChannelAddress, CurrentData, Utils } from 'src/app/shared/shared';
-import { Role } from 'src/app/shared/type/role';
+import { ChangeDetectionStrategy, Component } from "@angular/core";
+import { FormControl, FormGroup, Validators } from "@angular/forms";
+import { AbstractModal } from "src/app/shared/components/modal/abstractModal";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
@Component({
- templateUrl: './modal.html',
+ templateUrl: "./modal.html",
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ModalComponent extends AbstractModal {
@@ -19,7 +19,7 @@ export class ModalComponent extends AbstractModal {
public readonly CONVERT_MINUTE_TO_TIME_OF_DAY = Utils.CONVERT_MINUTE_TO_TIME_OF_DAY(this.translate);
public readonly CONVERT_TO_WATTHOURS = Utils.CONVERT_TO_WATTHOURS;
public readonly DelayChargeState = DelayChargeState;
- public state: string = '';
+ public state: string = "";
public chargeLimit: { name: string, value: number };
public delayChargeState: number | null = null;
public maximumSellToGridPower: number | null = null;
@@ -33,9 +33,9 @@ export class ModalComponent extends AbstractModal {
const channels: ChannelAddress[] = [];
if (this.edge.roleIsAtLeast(Role.ADMIN)) {
this.isAtLeastAdmin = true;
- if ('ess.id' in this.component.properties) {
+ if ("ess.id" in this.component.properties) {
channels.push(
- new ChannelAddress(this.component.properties['ess.id'], "Capacity"),
+ new ChannelAddress(this.component.properties["ess.id"], "Capacity"),
);
}
}
@@ -56,60 +56,60 @@ export class ModalComponent extends AbstractModal {
protected override onCurrentData(currentData: CurrentData) {
// If the gridfeed in Limit is avoided
- if (currentData.allComponents[this.component.id + '/SellToGridLimitState'] == SellToGridLimitState.ACTIVE_LIMIT_FIXED ||
- (currentData.allComponents[this.component.id + '/SellToGridLimitState'] == SellToGridLimitState.ACTIVE_LIMIT_CONSTRAINT &&
- currentData.allComponents[this.component.id + '/DelayChargeState'] != DelayChargeState.ACTIVE_LIMIT &&
- currentData.allComponents[this.component.id + '/SellToGridLimitMinimumChargeLimit'] > 0)) {
+ if (currentData.allComponents[this.component.id + "/SellToGridLimitState"] == SellToGridLimitState.ACTIVE_LIMIT_FIXED ||
+ (currentData.allComponents[this.component.id + "/SellToGridLimitState"] == SellToGridLimitState.ACTIVE_LIMIT_CONSTRAINT &&
+ currentData.allComponents[this.component.id + "/DelayChargeState"] != DelayChargeState.ACTIVE_LIMIT &&
+ currentData.allComponents[this.component.id + "/SellToGridLimitMinimumChargeLimit"] > 0)) {
this.chargeLimit = {
- name: this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.minimumCharge'),
- value: currentData.allComponents[this.component.id + '/SellToGridLimitMinimumChargeLimit'],
+ name: this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.minimumCharge"),
+ value: currentData.allComponents[this.component.id + "/SellToGridLimitMinimumChargeLimit"],
};
- this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.gridFeedInLimitationIsAvoided');
+ this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.gridFeedInLimitationIsAvoided");
} else {
// DelayCharge State
- switch (currentData.allComponents[this.component.id + '/DelayChargeState']) {
- case -1: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.notDefined');
+ switch (currentData.allComponents[this.component.id + "/DelayChargeState"]) {
+ case -1: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.notDefined");
break;
- case 0: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.chargeLimitActive');
+ case 0: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.chargeLimitActive");
break;
- case 1: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.passedEndTime');
+ case 1: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.passedEndTime");
break;
- case 2: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.storageAlreadyFull');
+ case 2: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.storageAlreadyFull");
break;
- case 3: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.endTimeNotCalculated');
+ case 3: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.endTimeNotCalculated");
break;
- case 4: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.noLimitPossible');
+ case 4: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.noLimitPossible");
break;
case 5: // Case 6: 'DISABLED' hides 'state-line', so no Message needed
- case 7: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.State.noLimitActive');
+ case 7: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.State.noLimitActive");
break;
- case 8: this.state = this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.chargingDelayed');
+ case 8: this.state = this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.chargingDelayed");
break;
}
// DelayCharge Maximum Charge Limit
- if (currentData.allComponents[this.component.id + '/DelayChargeMaximumChargeLimit'] != null) {
+ if (currentData.allComponents[this.component.id + "/DelayChargeMaximumChargeLimit"] != null) {
this.chargeLimit = {
- name: this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.maximumCharge'),
- value: currentData.allComponents[this.component.id + '/DelayChargeMaximumChargeLimit'],
+ name: this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.maximumCharge"),
+ value: currentData.allComponents[this.component.id + "/DelayChargeMaximumChargeLimit"],
};
}
}
- this.delayChargeState = currentData.allComponents[this.component.id + '/DelayChargeState'];
+ this.delayChargeState = currentData.allComponents[this.component.id + "/DelayChargeState"];
// Capacity (visible for admin only)
- if (this.edge.roleIsAtLeast(Role.ADMIN) && 'ess.id' in this.component.properties) {
- this.channelCapacity = currentData.allComponents[this.component.properties['ess.id'] + '/Capacity'];
+ if (this.edge.roleIsAtLeast(Role.ADMIN) && "ess.id" in this.component.properties) {
+ this.channelCapacity = currentData.allComponents[this.component.properties["ess.id"] + "/Capacity"];
}
- this.maximumSellToGridPower = currentData.allComponents[this.component.id + '/_PropertyMaximumSellToGridPower'];
- this.targetMinute = currentData.allComponents[this.component.id + '/TargetMinute'];
- this.delayChargeMaximumChargeLimit = currentData.allComponents[this.component.id + '/DelayChargeMaximumChargeLimit'];
- this.targetEpochSeconds = currentData.allComponents[this.component.id + '/TargetEpochSeconds'];
- this.chargeStartEpochSeconds = currentData.allComponents[this.component.id + '/PredictedChargeStartEpochSeconds'];
+ this.maximumSellToGridPower = currentData.allComponents[this.component.id + "/_PropertyMaximumSellToGridPower"];
+ this.targetMinute = currentData.allComponents[this.component.id + "/TargetMinute"];
+ this.delayChargeMaximumChargeLimit = currentData.allComponents[this.component.id + "/DelayChargeMaximumChargeLimit"];
+ this.targetEpochSeconds = currentData.allComponents[this.component.id + "/TargetEpochSeconds"];
+ this.chargeStartEpochSeconds = currentData.allComponents[this.component.id + "/PredictedChargeStartEpochSeconds"];
}
protected override getFormGroup(): FormGroup {
@@ -117,7 +117,7 @@ export class ModalComponent extends AbstractModal {
mode: new FormControl(this.component.properties.mode),
sellToGridLimitEnabled: new FormControl(this.component.properties.sellToGridLimitEnabled),
maximumSellToGridPower: new FormControl(this.component.properties.maximumSellToGridPower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
delayChargeRiskLevel: new FormControl(this.component.properties.delayChargeRiskLevel),
diff --git a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/predictionChart.ts b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/predictionChart.ts
index f058c8b2480..15ff02bd65f 100644
--- a/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/predictionChart.ts
+++ b/ui/src/app/edge/live/Controller/Ess/GridOptimizedCharge/modal/predictionChart.ts
@@ -1,17 +1,17 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { AbstractHistoryChart } from 'src/app/edge/history/abstracthistorychart';
-import { ChronoUnit, DEFAULT_TIME_CHART_OPTIONS } from 'src/app/edge/history/shared';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChartAxis, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from 'src/app/shared/shared';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { AbstractHistoryChart } from "src/app/edge/history/abstracthistorychart";
+import { ChronoUnit, DEFAULT_TIME_CHART_OPTIONS } from "src/app/edge/history/shared";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChartAxis, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "src/app/shared/shared";
@Component({
- selector: 'predictionChart',
- templateUrl: '../../../../../history/abstracthistorychart.html',
+ selector: "predictionChart",
+ templateUrl: "../../../../../history/abstracthistorychart.html",
})
export class PredictionChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -37,7 +37,6 @@ export class PredictionChartComponent extends AbstractHistoryChart implements On
ngOnInit() {
this.service.startSpinner(this.spinnerId);
- this.service.setCurrentComponent('', this.route);
}
ngOnDestroy() {
@@ -69,9 +68,9 @@ export class PredictionChartComponent extends AbstractHistoryChart implements On
startIndex = startIndex < 0 ? 0 : startIndex;
// Calculate soc and predicted soc data
- if ('_sum/EssSoc' in result.data) {
+ if ("_sum/EssSoc" in result.data) {
- const socData = result.data['_sum/EssSoc'].map(value => {
+ const socData = result.data["_sum/EssSoc"].map(value => {
if (value == null) {
return null;
} else if (value > 100 || value < 0) {
@@ -152,7 +151,7 @@ export class PredictionChartComponent extends AbstractHistoryChart implements On
const chartEndIndex = targetIndex + 12;
// Remove unimportant values that are after the end index
- if (chartEndIndex < result.data['_sum/EssSoc'].length - 1) {
+ if (chartEndIndex < result.data["_sum/EssSoc"].length - 1) {
socData.splice(chartEndIndex + 1, socData.length);
predictedSocData.splice(chartEndIndex + 1, predictedSocData.length);
result.timestamps.splice(chartEndIndex + 1, result.timestamps.length);
@@ -175,12 +174,12 @@ export class PredictionChartComponent extends AbstractHistoryChart implements On
// Push the prepared data into the datasets
datasets.push({
- label: this.translate.instant('General.soc'),
+ label: this.translate.instant("General.soc"),
data: socData,
hidden: false,
yAxisID: ChartAxis.RIGHT,
}, {
- label: this.translate.instant('Edge.Index.Widgets.GridOptimizedCharge.expectedSoc'),
+ label: this.translate.instant("Edge.Index.Widgets.GridOptimizedCharge.expectedSoc"),
data: predictedSocData,
hidden: false,
yAxisID: ChartAxis.RIGHT,
@@ -188,19 +187,19 @@ export class PredictionChartComponent extends AbstractHistoryChart implements On
// Push the depending colors
this.colors.push({
- backgroundColor: 'rgba(189, 195, 199,0.05)',
- borderColor: 'rgba(189, 195, 199,1)',
+ backgroundColor: "rgba(189, 195, 199,0.05)",
+ borderColor: "rgba(189, 195, 199,1)",
}, {
- backgroundColor: 'rgba(0,223,0,0)',
- borderColor: 'rgba(0,223,0,1)',
+ backgroundColor: "rgba(0,223,0,0)",
+ borderColor: "rgba(0,223,0,1)",
});
}
this.datasets = datasets;
this.loading = false;
this.service.stopSpinner(this.spinnerId);
- this.unit = YAxisTitle.PERCENTAGE;
- this.formatNumber = '1.0-0';
+ this.unit = YAxisType.PERCENTAGE;
+ this.formatNumber = "1.0-0";
await this.setOptions(this.options);
this.applyControllerSpecificOptions();
@@ -219,22 +218,22 @@ export class PredictionChartComponent extends AbstractHistoryChart implements On
return new Promise((resolve) => {
const result: ChannelAddress[] = [
- new ChannelAddress('_sum', 'EssSoc'),
+ new ChannelAddress("_sum", "EssSoc"),
];
if (this.component != null && this.component.id) {
- result.push(new ChannelAddress(this.component.id, 'DelayChargeMaximumChargeLimit'));
+ result.push(new ChannelAddress(this.component.id, "DelayChargeMaximumChargeLimit"));
}
resolve(result);
});
}
private applyControllerSpecificOptions() {
- this.options.scales[ChartAxis.LEFT]['position'] = 'right';
+ this.options.scales[ChartAxis.LEFT]["position"] = "right";
this.options.scales.x.ticks.callback = function (value, index, values) {
const date = new Date(value);
// Display the label only if the minutes are zero (full hour)
- return date.getMinutes() === 0 ? date.getHours() + ':00' : '';
+ return date.getMinutes() === 0 ? date.getHours() + ":00" : "";
};
}
diff --git a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/Ess_TimeOfUseTariff.ts b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/Ess_TimeOfUseTariff.ts
index bb6eda0caa8..6757a7d7489 100644
--- a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/Ess_TimeOfUseTariff.ts
+++ b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/Ess_TimeOfUseTariff.ts
@@ -26,7 +26,20 @@ import { ScheduleStateAndPriceChartComponent } from "./modal/statePriceChart";
FlatComponent,
],
})
-export class Controller_Ess_TimeOfUseTariff {
+export class Controller_Ess_TimeOfUseTariff { }
+
+export namespace Controller_Ess_TimeOfUseTariff {
+
+ export type ScheduleChartData = {
+ datasets: ChartDataset[],
+ colors: any[],
+ labels: Date[]
+ };
+
+ export enum ControlMode {
+ CHARGE_CONSUMPTION = "CHARGE_CONSUMPTION",
+ DELAY_DISCHARGE = "DELAY_DISCHARGE",
+ }
/**
* Gets the schedule chart data containing datasets, colors and labels.
@@ -41,7 +54,7 @@ export class Controller_Ess_TimeOfUseTariff {
* @param controlMode The Control mode of the controller.
* @returns The ScheduleChartData.
*/
- public static getScheduleChartData(size: number, prices: number[], states: number[], timestamps: string[],
+ export function getScheduleChartData(size: number, prices: number[], states: number[], timestamps: string[],
gridBuy: number[], socArray: number[], translate: TranslateService,
controlMode: Controller_Ess_TimeOfUseTariff.ControlMode): Controller_Ess_TimeOfUseTariff.ScheduleChartData {
@@ -76,49 +89,49 @@ export class Controller_Ess_TimeOfUseTariff {
// Set datasets
datasets.push({
- type: 'bar',
- label: translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING'),
+ type: "bar",
+ label: translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING"),
data: barBalancing,
order: 1,
});
colors.push({
// Dark Green
- backgroundColor: 'rgba(51,102,0,0.8)',
- borderColor: 'rgba(51,102,0,1)',
+ backgroundColor: "rgba(51,102,0,0.8)",
+ borderColor: "rgba(51,102,0,1)",
});
// Set dataset for ChargeGrid.
if (!barChargeGrid.every(v => v === null) || controlMode == Controller_Ess_TimeOfUseTariff.ControlMode.CHARGE_CONSUMPTION) {
datasets.push({
- type: 'bar',
- label: translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID'),
+ type: "bar",
+ label: translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID"),
data: barChargeGrid,
order: 1,
});
colors.push({
// Sky blue
- backgroundColor: 'rgba(0, 204, 204,0.5)',
- borderColor: 'rgba(0, 204, 204,0.7)',
+ backgroundColor: "rgba(0, 204, 204,0.5)",
+ borderColor: "rgba(0, 204, 204,0.7)",
});
}
// Set dataset for buy from grid
datasets.push({
- type: 'bar',
- label: translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE'),
+ type: "bar",
+ label: translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE"),
data: barDelayDischarge,
order: 1,
});
colors.push({
// Black
- backgroundColor: 'rgba(0,0,0,0.8)',
- borderColor: 'rgba(0,0,0,0.9)',
+ backgroundColor: "rgba(0,0,0,0.8)",
+ borderColor: "rgba(0,0,0,0.9)",
});
// State of charge data
datasets.push({
- type: 'line',
- label: translate.instant('General.soc'),
+ type: "line",
+ label: translate.instant("General.soc"),
data: socArray,
hidden: false,
yAxisID: ChartAxis.RIGHT,
@@ -126,21 +139,21 @@ export class Controller_Ess_TimeOfUseTariff {
order: 0,
});
colors.push({
- backgroundColor: 'rgba(189, 195, 199,0.2)',
- borderColor: 'rgba(189, 195, 199,1)',
+ backgroundColor: "rgba(189, 195, 199,0.2)",
+ borderColor: "rgba(189, 195, 199,1)",
});
datasets.push({
- type: 'line',
- label: translate.instant('General.gridBuy'),
+ type: "line",
+ label: translate.instant("General.gridBuy"),
data: gridBuy.map(v => Utils.divideSafely(v, 1000)), // [W] to [kW]
hidden: true,
yAxisID: ChartAxis.RIGHT_2,
order: 2,
});
colors.push({
- backgroundColor: 'rgba(0,0,0, 0.2)',
- borderColor: 'rgba(0,0,0, 1)',
+ backgroundColor: "rgba(0,0,0, 0.2)",
+ borderColor: "rgba(0,0,0, 1)",
});
const scheduleChartData: Controller_Ess_TimeOfUseTariff.ScheduleChartData = {
@@ -152,16 +165,3 @@ export class Controller_Ess_TimeOfUseTariff {
return scheduleChartData;
}
}
-
-export namespace Controller_Ess_TimeOfUseTariff {
- export type ScheduleChartData = {
- datasets: ChartDataset[],
- colors: any[],
- labels: Date[]
- };
-
- export enum ControlMode {
- CHARGE_CONSUMPTION = 'CHARGE_CONSUMPTION',
- DELAY_DISCHARGE = 'DELAY_DISCHARGE',
- }
-}
diff --git a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.html b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.html
index 4c9a749c8f7..25962cb6b4a 100644
--- a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.html
+++ b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.html
@@ -7,4 +7,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.ts b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.ts
index fc6f09c6b4b..66bbb03f543 100644
--- a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.ts
+++ b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/flat/flat.ts
@@ -1,12 +1,12 @@
-import { Component, OnInit } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, Currency, CurrentData, Utils } from 'src/app/shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, Currency, CurrentData, Utils } from "src/app/shared/shared";
-import { ModalComponent } from '../modal/modal';
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'Controller_Ess_TimeOfUseTariff',
- templateUrl: './flat.html',
+ selector: "Controller_Ess_TimeOfUseTariff",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget implements OnInit {
@@ -27,12 +27,12 @@ export class FlatComponent extends AbstractFlatWidget implements OnInit {
protected override getChannelAddresses(): ChannelAddress[] {
return [
- new ChannelAddress(this.component.id, 'QuarterlyPrices'),
+ new ChannelAddress(this.component.id, "QuarterlyPrices"),
];
}
protected override onCurrentData(currentData: CurrentData): void {
- const quarterlyPrice = currentData.allComponents[this.component.id + '/QuarterlyPrices'];
+ const quarterlyPrice = currentData.allComponents[this.component.id + "/QuarterlyPrices"];
const currencyLabel: string = Currency.getCurrencyLabelByEdgeId(this.edge.id);
this.priceWithCurrency = Utils.CONVERT_PRICE_TO_CENT_PER_KWH(2, currencyLabel)(quarterlyPrice);
}
diff --git a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/modal.ts b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/modal.ts
index b4a182fd769..54ccfba47cb 100644
--- a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/modal.ts
+++ b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/modal.ts
@@ -1,12 +1,12 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { FormControl, FormGroup } from '@angular/forms';
-import { AbstractModal } from 'src/app/shared/components/modal/abstractModal';
-import { ChannelAddress, Currency, CurrentData } from 'src/app/shared/shared';
-import { Controller_Ess_TimeOfUseTariff } from '../Ess_TimeOfUseTariff';
+import { Component } from "@angular/core";
+import { FormControl, FormGroup } from "@angular/forms";
+import { AbstractModal } from "src/app/shared/components/modal/abstractModal";
+import { ChannelAddress, Currency, CurrentData } from "src/app/shared/shared";
+import { Controller_Ess_TimeOfUseTariff } from "../Ess_TimeOfUseTariff";
@Component({
- templateUrl: './modal.html',
+ templateUrl: "./modal.html",
})
export class ModalComponent extends AbstractModal {
@@ -23,25 +23,25 @@ export class ModalComponent extends AbstractModal {
protected override getChannelAddresses(): ChannelAddress[] {
return [
- new ChannelAddress(this.component.id, 'QuarterlyPrices'),
+ new ChannelAddress(this.component.id, "QuarterlyPrices"),
];
}
protected override onIsInitialized(): void {
this.subscription.add(
- this.formGroup?.get('chargeConsumptionIsActive')
+ this.formGroup?.get("chargeConsumptionIsActive")
.valueChanges
.subscribe(isActive => {
const controlMode: Controller_Ess_TimeOfUseTariff.ControlMode = isActive
? Controller_Ess_TimeOfUseTariff.ControlMode.CHARGE_CONSUMPTION
: Controller_Ess_TimeOfUseTariff.ControlMode.DELAY_DISCHARGE;
- this.formGroup.controls['controlMode'].setValue(controlMode);
- this.formGroup.controls['controlMode'].markAsDirty();
+ this.formGroup.controls["controlMode"].setValue(controlMode);
+ this.formGroup.controls["controlMode"].markAsDirty();
}));
}
protected override onCurrentData(currentData: CurrentData): void {
- const quarterlyPrice = currentData.allComponents[this.component.id + '/QuarterlyPrices'];
+ const quarterlyPrice = currentData.allComponents[this.component.id + "/QuarterlyPrices"];
const currencyLabel: string = Currency.getCurrencyLabelByEdgeId(this.edge?.id);
this.priceWithCurrency = this.Utils.CONVERT_PRICE_TO_CENT_PER_KWH(2, currencyLabel)(quarterlyPrice);
}
diff --git a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/powerSocChart.ts b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/powerSocChart.ts
index 1c646bf9601..61e457c6d86 100644
--- a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/powerSocChart.ts
+++ b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/powerSocChart.ts
@@ -1,21 +1,20 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { AbstractHistoryChart } from 'src/app/edge/history/abstracthistorychart';
-import { AbstractHistoryChart as NewAbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { ChartAxis, HistoryUtils, TimeOfUseTariffUtils, Utils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
-
-import { ChartConstants } from 'src/app/shared/components/chart/chart.constants';
-import { GetScheduleRequest } from '../../../../../../shared/jsonrpc/request/getScheduleRequest';
-import { GetScheduleResponse } from '../../../../../../shared/jsonrpc/response/getScheduleResponse';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { AbstractHistoryChart } from "src/app/edge/history/abstracthistorychart";
+import { AbstractHistoryChart as NewAbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { ChartConstants } from "src/app/shared/components/chart/chart.constants";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { ChartAxis, HistoryUtils, TimeOfUseTariffUtils, Utils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
+import { GetScheduleRequest } from "../../../../../../shared/jsonrpc/request/getScheduleRequest";
+import { GetScheduleResponse } from "../../../../../../shared/jsonrpc/response/getScheduleResponse";
@Component({
- selector: 'powerSocChart',
- templateUrl: '../../../../../history/abstracthistorychart.html',
+ selector: "powerSocChart",
+ templateUrl: "../../../../../history/abstracthistorychart.html",
})
export class SchedulePowerAndSocChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -39,7 +38,6 @@ export class SchedulePowerAndSocChartComponent extends AbstractHistoryChart impl
public ngOnInit() {
this.service.startSpinner(this.spinnerId);
- this.service.setCurrentComponent('', this.route);
}
public ngOnDestroy() {
@@ -53,12 +51,18 @@ export class SchedulePowerAndSocChartComponent extends AbstractHistoryChart impl
protected setLabel() {
this.options = this.createDefaultChartOptions();
const translate = this.translate;
- this.options.plugins.tooltip.callbacks.label = function (item: Chart.TooltipItem) {
-
- const label = item.dataset.label;
- const value = item.dataset.data[item.dataIndex];
-
- return TimeOfUseTariffUtils.getLabel(value, label, translate);
+ this.options.plugins = {
+ tooltip: {
+ callbacks: {
+ label: function (item: Chart.TooltipItem) {
+
+ const label = item.dataset.label;
+ const value = item.dataset.data[item.dataIndex];
+
+ return TimeOfUseTariffUtils.getLabel(value, label, translate);
+ },
+ },
+ },
};
}
@@ -93,93 +97,93 @@ export class SchedulePowerAndSocChartComponent extends AbstractHistoryChart impl
};
datasets.push({
- type: 'line',
- label: this.translate.instant('General.gridBuy'),
+ type: "line",
+ label: this.translate.instant("General.gridBuy"),
data: gridBuyArray.map(v => Utils.divideSafely(v, 1000)), // [W] to [kW]
hidden: true,
order: 1,
});
this.colors.push({
- backgroundColor: 'rgba(0,0,0, 0.2)',
- borderColor: 'rgba(0,0,0, 1)',
+ backgroundColor: "rgba(0,0,0, 0.2)",
+ borderColor: "rgba(0,0,0, 1)",
});
datasets.push({
- type: 'line',
- label: this.translate.instant('General.gridSell'),
+ type: "line",
+ label: this.translate.instant("General.gridSell"),
data: gridSellArray.map(v => Utils.divideSafely(v, 1000)), // [W] to [kW]
hidden: true,
order: 1,
});
this.colors.push({
- backgroundColor: 'rgba(0,0,200, 0.2)',
- borderColor: 'rgba(0,0,200, 1)',
+ backgroundColor: "rgba(0,0,200, 0.2)",
+ borderColor: "rgba(0,0,200, 1)",
});
datasets.push({
- type: 'line',
- label: this.translate.instant('General.production'),
+ type: "line",
+ label: this.translate.instant("General.production"),
data: productionArray.map(v => Utils.divideSafely(v, 1000)), // [W] to [kW]
hidden: false,
order: 1,
});
this.colors.push({
- backgroundColor: 'rgba(45,143,171, 0.2)',
- borderColor: 'rgba(45,143,171, 1)',
+ backgroundColor: "rgba(45,143,171, 0.2)",
+ borderColor: "rgba(45,143,171, 1)",
});
datasets.push({
- type: 'line',
- label: this.translate.instant('General.consumption'),
+ type: "line",
+ label: this.translate.instant("General.consumption"),
data: consumptionArray.map(v => Utils.divideSafely(v, 1000)), // [W] to [kW]
hidden: false,
order: 1,
});
this.colors.push({
- backgroundColor: 'rgba(253,197,7,0.2)',
- borderColor: 'rgba(253,197,7,1)',
+ backgroundColor: "rgba(253,197,7,0.2)",
+ borderColor: "rgba(253,197,7,1)",
});
datasets.push({
- type: 'line',
- label: this.translate.instant('General.chargePower'),
+ type: "line",
+ label: this.translate.instant("General.chargePower"),
data: essChargeArray.map(v => Utils.divideSafely(v, 1000)), // [W] to [kW]
hidden: true,
order: 1,
- unit: YAxisTitle.POWER,
+ unit: YAxisType.POWER,
});
this.colors.push({
- backgroundColor: 'rgba(0,223,0, 0.2)',
- borderColor: 'rgba(0,223,0, 1)',
+ backgroundColor: "rgba(0,223,0, 0.2)",
+ borderColor: "rgba(0,223,0, 1)",
});
datasets.push({
- type: 'line',
- label: this.translate.instant('General.dischargePower'),
+ type: "line",
+ label: this.translate.instant("General.dischargePower"),
data: essDischargeArray.map(v => Utils.divideSafely(v, 1000)), // [W] to [kW]
hidden: true,
order: 1,
- unit: YAxisTitle.POWER,
+ unit: YAxisType.POWER,
});
this.colors.push({
- backgroundColor: 'rgba(200,0,0, 0.2)',
- borderColor: 'rgba(200,0,0, 1)',
+ backgroundColor: "rgba(200,0,0, 0.2)",
+ borderColor: "rgba(200,0,0, 1)",
});
// State of charge data
datasets.push({
- type: 'line',
- label: this.translate.instant('General.soc'),
+ type: "line",
+ label: this.translate.instant("General.soc"),
data: socArray,
hidden: false,
yAxisID: ChartAxis.RIGHT,
borderDash: [10, 10],
order: 1,
- unit: YAxisTitle.PERCENTAGE,
+ unit: YAxisType.PERCENTAGE,
});
this.colors.push({
- backgroundColor: 'rgba(189, 195, 199,0.2)',
- borderColor: 'rgba(189, 195, 199,1)',
+ backgroundColor: "rgba(189, 195, 199,0.2)",
+ borderColor: "rgba(189, 195, 199,1)",
});
this.datasets = datasets;
@@ -198,28 +202,28 @@ export class SchedulePowerAndSocChartComponent extends AbstractHistoryChart impl
}
private applyControllerSpecificOptions() {
- const rightYAxis: HistoryUtils.yAxes = { position: 'right', unit: YAxisTitle.PERCENTAGE, yAxisId: ChartAxis.RIGHT };
- const leftYAxis: HistoryUtils.yAxes = { position: 'left', unit: YAxisTitle.POWER, yAxisId: ChartAxis.LEFT };
+ const rightYAxis: HistoryUtils.yAxes = { position: "right", unit: YAxisType.PERCENTAGE, yAxisId: ChartAxis.RIGHT };
+ const leftYAxis: HistoryUtils.yAxes = { position: "left", unit: YAxisType.POWER, yAxisId: ChartAxis.LEFT };
const locale = this.service.translate.currentLang;
- this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, rightYAxis, this.translate, 'line', locale, ChartConstants.EMPTY_DATASETS, true);
- this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, leftYAxis, this.translate, 'line', locale, ChartConstants.EMPTY_DATASETS, true);
+ this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, rightYAxis, this.translate, "line", locale, ChartConstants.EMPTY_DATASETS, true);
+ this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, leftYAxis, this.translate, "line", locale, ChartConstants.EMPTY_DATASETS, true);
this.datasets = this.datasets.map((el: Chart.ChartDataset) => {
// align particular dataset element to right yAxis
- if (el.label === this.translate.instant('General.soc')) {
- el['yAxisID'] = ChartAxis.RIGHT;
+ if (el.label === this.translate.instant("General.soc")) {
+ el["yAxisID"] = ChartAxis.RIGHT;
}
return el;
});
- this.options.scales.x['ticks'] = { source: 'auto', autoSkip: false };
+ this.options.scales.x["ticks"] = { source: "auto", autoSkip: false };
this.options.scales.x.ticks.callback = function (value, index, values) {
const date = new Date(value);
// Display the label only if the minutes are zero (full hour)
- return date.getMinutes() === 0 ? date.getHours() + ':00' : '';
+ return date.getMinutes() === 0 ? date.getHours() + ":00" : "";
};
this.options.scales[ChartAxis.RIGHT].grid.display = false;
diff --git a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/statePriceChart.ts b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/statePriceChart.ts
index 51737b33769..3e690c5828f 100644
--- a/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/statePriceChart.ts
+++ b/ui/src/app/edge/live/Controller/Ess/TimeOfUseTariff/modal/statePriceChart.ts
@@ -1,24 +1,24 @@
// @ts-strict-ignore
-import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import * as Chart from 'chart.js';
-import { AbstractHistoryChart } from 'src/app/edge/history/abstracthistorychart';
-import { AbstractHistoryChart as NewAbstractHistoryChart } from 'src/app/shared/components/chart/abstracthistorychart';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { ChartAxis, HistoryUtils, TimeOfUseTariffUtils, YAxisTitle } from 'src/app/shared/service/utils';
-import { ChannelAddress, Currency, Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
-
-import { calculateResolution } from 'src/app/edge/history/shared';
-import { ColorUtils } from 'src/app/shared/utils/color/color.utils';
-import { GetScheduleRequest } from '../../../../../../shared/jsonrpc/request/getScheduleRequest';
-import { GetScheduleResponse } from '../../../../../../shared/jsonrpc/response/getScheduleResponse';
-import { Controller_Ess_TimeOfUseTariff } from '../Ess_TimeOfUseTariff';
-import { ChartConstants } from 'src/app/shared/components/chart/chart.constants';
+import { Component, Input, OnChanges, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { AbstractHistoryChart } from "src/app/edge/history/abstracthistorychart";
+import { AbstractHistoryChart as NewAbstractHistoryChart } from "src/app/shared/components/chart/abstracthistorychart";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { ChartAxis, HistoryUtils, TimeOfUseTariffUtils, YAxisType } from "src/app/shared/service/utils";
+import { ChannelAddress, Currency, Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
+
+import { calculateResolution } from "src/app/edge/history/shared";
+import { ChartConstants } from "src/app/shared/components/chart/chart.constants";
+import { ColorUtils } from "src/app/shared/utils/color/color.utils";
+import { GetScheduleRequest } from "../../../../../../shared/jsonrpc/request/getScheduleRequest";
+import { GetScheduleResponse } from "../../../../../../shared/jsonrpc/response/getScheduleResponse";
+import { Controller_Ess_TimeOfUseTariff } from "../Ess_TimeOfUseTariff";
@Component({
- selector: 'statePriceChart',
- templateUrl: '../../../../../history/abstracthistorychart.html',
+ selector: "statePriceChart",
+ templateUrl: "../../../../../history/abstracthistorychart.html",
})
export class ScheduleStateAndPriceChartComponent extends AbstractHistoryChart implements OnInit, OnChanges, OnDestroy {
@@ -48,7 +48,6 @@ export class ScheduleStateAndPriceChartComponent extends AbstractHistoryChart im
public ngOnInit() {
this.service.startSpinner(this.spinnerId);
- this.service.setCurrentComponent('', this.route);
}
public ngOnDestroy() {
@@ -93,7 +92,7 @@ export class ScheduleStateAndPriceChartComponent extends AbstractHistoryChart im
return;
}).finally(async () => {
- this.unit = YAxisTitle.CURRENCY;
+ this.unit = YAxisType.CURRENCY;
await this.setOptions(this.options);
this.applyControllerSpecificOptions();
});
@@ -109,25 +108,25 @@ export class ScheduleStateAndPriceChartComponent extends AbstractHistoryChart im
private applyControllerSpecificOptions() {
const locale = this.service.translate.currentLang;
- const rightYaxisSoc: HistoryUtils.yAxes = { position: 'right', unit: YAxisTitle.PERCENTAGE, yAxisId: ChartAxis.RIGHT };
- this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, rightYaxisSoc, this.translate, 'line', locale, ChartConstants.EMPTY_DATASETS);
+ const rightYaxisSoc: HistoryUtils.yAxes = { position: "right", unit: YAxisType.PERCENTAGE, yAxisId: ChartAxis.RIGHT };
+ this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, rightYaxisSoc, this.translate, "line", locale, ChartConstants.EMPTY_DATASETS);
- const rightYAxisPower: HistoryUtils.yAxes = { position: 'right', unit: YAxisTitle.POWER, yAxisId: ChartAxis.RIGHT_2 };
- this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, rightYAxisPower, this.translate, 'line', locale, ChartConstants.EMPTY_DATASETS);
+ const rightYAxisPower: HistoryUtils.yAxes = { position: "right", unit: YAxisType.POWER, yAxisId: ChartAxis.RIGHT_2 };
+ this.options = NewAbstractHistoryChart.getYAxisOptions(this.options, rightYAxisPower, this.translate, "line", locale, ChartConstants.EMPTY_DATASETS);
- this.options.scales.x['time'].unit = calculateResolution(this.service, this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).timeFormat;
- this.options.scales.x['ticks'] = { source: 'auto', autoSkip: false };
+ this.options.scales.x["time"].unit = calculateResolution(this.service, this.service.historyPeriod.value.from, this.service.historyPeriod.value.to).timeFormat;
+ this.options.scales.x["ticks"] = { source: "auto", autoSkip: false };
this.options.scales.x.ticks.maxTicksLimit = 30;
- this.options.scales.x['offset'] = false;
+ this.options.scales.x["offset"] = false;
this.options.scales.x.ticks.callback = function (value) {
const date = new Date(value);
// Display the label only if the minutes are zero (full hour)
- return date.getMinutes() === 0 ? date.getHours() + ':00' : '';
+ return date.getMinutes() === 0 ? date.getHours() + ":00" : "";
};
// options.plugins.
- this.options.plugins.tooltip.mode = 'index';
+ this.options.plugins.tooltip.mode = "index";
this.options.plugins.tooltip.callbacks.labelColor = (item: Chart.TooltipItem) => {
if (!item) {
return;
@@ -147,7 +146,7 @@ export class ScheduleStateAndPriceChartComponent extends AbstractHistoryChart im
};
this.datasets = this.datasets.map((el) => {
- const opacity = el.type === 'line' ? 0.2 : 0.5;
+ const opacity = el.type === "line" ? 0.2 : 0.5;
if (el.backgroundColor && el.borderColor) {
el.backgroundColor = ColorUtils.changeOpacityFromRGBA(el.backgroundColor.toString(), opacity);
@@ -159,21 +158,21 @@ export class ScheduleStateAndPriceChartComponent extends AbstractHistoryChart im
this.datasets = this.datasets.map((el: Chart.ChartDataset) => {
// align particular dataset element to right yAxis
- if (el.label == this.translate.instant('General.gridBuy')) {
- el['yAxisID'] = ChartAxis.RIGHT_2;
- } else if (el.label == this.translate.instant('General.soc')) {
- el['yAxisID'] = ChartAxis.RIGHT;
+ if (el.label == this.translate.instant("General.gridBuy")) {
+ el["yAxisID"] = ChartAxis.RIGHT_2;
+ } else if (el.label == this.translate.instant("General.soc")) {
+ el["yAxisID"] = ChartAxis.RIGHT;
}
return el;
});
- this.options.scales[ChartAxis.LEFT]['title'].text = this.currencyLabel;
+ this.options.scales[ChartAxis.LEFT]["title"].text = this.currencyLabel;
this.options.scales[ChartAxis.RIGHT].grid.display = false;
this.options.scales[ChartAxis.RIGHT_2].suggestedMin = 0;
this.options.scales[ChartAxis.RIGHT_2].suggestedMax = 1;
this.options.scales[ChartAxis.RIGHT_2].grid.display = false;
- this.options['animation'] = false;
+ this.options["animation"] = false;
}
}
diff --git a/ui/src/app/edge/live/Controller/Evcs/Evcs.ts b/ui/src/app/edge/live/Controller/Evcs/Evcs.ts
index 6a2568a03c5..89fd473682e 100644
--- a/ui/src/app/edge/live/Controller/Evcs/Evcs.ts
+++ b/ui/src/app/edge/live/Controller/Evcs/Evcs.ts
@@ -1,9 +1,9 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
-import { PopoverComponent } from './popover/popover';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
+import { PopoverComponent } from "./popover/popover";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.html b/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.html
index ac292531413..6d2c10d1903 100644
--- a/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.html
+++ b/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.html
@@ -32,4 +32,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.ts b/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.ts
index 9b2d74b6c55..3e38be561f1 100644
--- a/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.ts
+++ b/ui/src/app/edge/live/Controller/Evcs/administration/administration.component.ts
@@ -1,12 +1,12 @@
-import { Component, Input, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from '../../../../../shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "../../../../../shared/shared";
@Component({
selector: AdministrationComponent.SELECTOR,
- templateUrl: './administration.component.html',
+ templateUrl: "./administration.component.html",
})
export class AdministrationComponent implements OnInit {
@@ -27,16 +27,16 @@ export class AdministrationComponent implements OnInit {
) { }
ngOnInit() {
- if (this.evcsComponent.properties['minHwCurrent'] == 6000) {
+ if (this.evcsComponent.properties["minHwCurrent"] == 6000) {
this.isCheckedZoe = false;
- } else if (this.evcsComponent.properties['minHwCurrent'] == 10000) {
+ } else if (this.evcsComponent.properties["minHwCurrent"] == 10000) {
this.isCheckedZoe = true;
}
}
updateZoeMode(event: CustomEvent) {
- let newValue = this.evcsComponent.properties['minHwCurrent'];
- const oldValue = this.evcsComponent.properties['minHwCurrent'];
+ let newValue = this.evcsComponent.properties["minHwCurrent"];
+ const oldValue = this.evcsComponent.properties["minHwCurrent"];
if (event.detail.checked == true) {
newValue = 10000;
@@ -46,13 +46,13 @@ export class AdministrationComponent implements OnInit {
if (this.edge != null && oldValue != newValue) {
this.edge.updateComponentConfig(this.websocket, this.evcsComponent.id, [
- { name: 'minHwCurrent', value: newValue },
+ { name: "minHwCurrent", value: newValue },
]).then(() => {
this.evcsComponent.properties.minHwCurrent = newValue;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.evcsComponent.properties.minHwCurrent = oldValue;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason, "danger");
console.warn(reason);
});
}
diff --git a/ui/src/app/edge/live/Controller/Evcs/flat/flat.ts b/ui/src/app/edge/live/Controller/Evcs/flat/flat.ts
index f4d3d8a38e9..ea589527b23 100644
--- a/ui/src/app/edge/live/Controller/Evcs/flat/flat.ts
+++ b/ui/src/app/edge/live/Controller/Evcs/flat/flat.ts
@@ -1,17 +1,17 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { ChannelAddress, CurrentData, EdgeConfig, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { ChannelAddress, CurrentData, EdgeConfig, Utils } from "src/app/shared/shared";
-import { ModalComponent } from '../modal/modal';
+import { ModalComponent } from "../modal/modal";
-type ChargeMode = 'FORCE_CHARGE' | 'EXCESS_POWER' | 'OFF';
+type ChargeMode = "FORCE_CHARGE" | "EXCESS_POWER" | "OFF";
@Component({
- selector: 'Controller_Evcs',
- templateUrl: './flat.html',
+ selector: "Controller_Evcs",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -29,7 +29,7 @@ export class FlatComponent extends AbstractFlatWidget {
protected phases: number;
protected maxChargingValue: number;
protected energySessionLimit: number;
- protected state: string = '';
+ protected state: string = "";
protected minChargePower: number;
protected maxChargePower: number;
protected forceChargeMinPower: string;
@@ -61,16 +61,16 @@ export class FlatComponent extends AbstractFlatWidget {
protected override getChannelAddresses(): ChannelAddress[] {
const result = [
- new ChannelAddress(this.component.id, 'ChargePower'),
- new ChannelAddress(this.component.id, 'Phases'),
- new ChannelAddress(this.component.id, 'Plug'),
- new ChannelAddress(this.component.id, 'Status'),
- new ChannelAddress(this.component.id, 'State'),
- new ChannelAddress(this.component.id, 'EnergySession'),
+ new ChannelAddress(this.component.id, "ChargePower"),
+ new ChannelAddress(this.component.id, "Phases"),
+ new ChannelAddress(this.component.id, "Plug"),
+ new ChannelAddress(this.component.id, "Status"),
+ new ChannelAddress(this.component.id, "State"),
+ new ChannelAddress(this.component.id, "EnergySession"),
// channels for modal component, subscribe here for better UX
- new ChannelAddress(this.component.id, 'MinimumHardwarePower'),
- new ChannelAddress(this.component.id, 'MaximumHardwarePower'),
- new ChannelAddress(this.component.id, 'SetChargePowerLimit'),
+ new ChannelAddress(this.component.id, "MinimumHardwarePower"),
+ new ChannelAddress(this.component.id, "MaximumHardwarePower"),
+ new ChannelAddress(this.component.id, "SetChargePowerLimit"),
];
const controllers = this.config.getComponentsByFactory("Controller.Evcs");
@@ -78,7 +78,7 @@ export class FlatComponent extends AbstractFlatWidget {
const properties = controller.properties;
if ("evcs.id" in properties && properties["evcs.id"] === this.componentId) {
this.controller = controller;
- result.push(new ChannelAddress(controller.id, '_PropertyEnabledCharging'));
+ result.push(new ChannelAddress(controller.id, "_PropertyEnabledCharging"));
}
}
return result;
@@ -87,20 +87,20 @@ export class FlatComponent extends AbstractFlatWidget {
protected override onCurrentData(currentData: CurrentData) {
this.evcsComponent = this.config.getComponent(this.component.id);
- this.isConnectionSuccessful = currentData.allComponents[this.component.id + '/State'] != 3 ? true : false;
- this.status = this.getState(this.controller ? currentData.allComponents[this.controller.id + '/_PropertyEnabledCharging'] === 1 : null, currentData.allComponents[this.component.id + "/Status"], currentData.allComponents[this.component.id + "/Plug"]);
+ this.isConnectionSuccessful = currentData.allComponents[this.component.id + "/State"] != 3 ? true : false;
+ this.status = this.getState(this.controller ? currentData.allComponents[this.controller.id + "/_PropertyEnabledCharging"] === 1 : null, currentData.allComponents[this.component.id + "/Status"], currentData.allComponents[this.component.id + "/Plug"]);
// Check if Energy since beginning is allowed
- if (currentData.allComponents[this.component.id + '/ChargePower'] > 0 || currentData.allComponents[this.component.id + '/Status'] == 2 || currentData.allComponents[this.component.id + '/Status'] == 7) {
+ if (currentData.allComponents[this.component.id + "/ChargePower"] > 0 || currentData.allComponents[this.component.id + "/Status"] == 2 || currentData.allComponents[this.component.id + "/Status"] == 7) {
this.isEnergySinceBeginningAllowed = true;
}
// Mode
if (this.isChargingEnabled) {
- if (this.chargeMode == 'FORCE_CHARGE') {
- this.mode = this.translate.instant('General.manually');
- } else if (this.chargeMode == 'EXCESS_POWER') {
- this.mode = this.translate.instant('Edge.Index.Widgets.EVCS.OptimizedChargeMode.shortName');
+ if (this.chargeMode == "FORCE_CHARGE") {
+ this.mode = this.translate.instant("General.manually");
+ } else if (this.chargeMode == "EXCESS_POWER") {
+ this.mode = this.translate.instant("Edge.Index.Widgets.EVCS.OptimizedChargeMode.shortName");
}
}
@@ -108,35 +108,35 @@ export class FlatComponent extends AbstractFlatWidget {
if (this.controller) {
// ChargeMode
- this.chargeMode = this.controller.properties['chargeMode'];
+ this.chargeMode = this.controller.properties["chargeMode"];
// Check if Charging is enabled
- this.isChargingEnabled = currentData.allComponents[this.controller.id + '/_PropertyEnabledCharging'] === 1 ? true : false;
+ this.isChargingEnabled = currentData.allComponents[this.controller.id + "/_PropertyEnabledCharging"] === 1 ? true : false;
// DefaultChargeMinPower
- this.defaultChargeMinPower = this.controller.properties['defaultChargeMinPower'];
+ this.defaultChargeMinPower = this.controller.properties["defaultChargeMinPower"];
// Prioritization
this.prioritization =
- this.controller.properties['priority'] in Prioritization
- ? 'Edge.Index.Widgets.EVCS.OptimizedChargeMode.ChargingPriority.' + this.controller.properties['priority'].toLowerCase()
- : '';
+ this.controller.properties["priority"] in Prioritization
+ ? "Edge.Index.Widgets.EVCS.OptimizedChargeMode.ChargingPriority." + this.controller.properties["priority"].toLowerCase()
+ : "";
// MaxChargingValue
if (this.phases) {
- this.maxChargingValue = Utils.multiplySafely(this.controller.properties['forceChargeMinPower'], this.phases);
+ this.maxChargingValue = Utils.multiplySafely(this.controller.properties["forceChargeMinPower"], this.phases);
} else {
- this.maxChargingValue = Utils.multiplySafely(this.controller.properties['forceChargeMinPower'], 3);
+ this.maxChargingValue = Utils.multiplySafely(this.controller.properties["forceChargeMinPower"], 3);
}
// EnergySessionLimit
- this.energySessionLimit = this.controller.properties['energySessionLimit'];
+ this.energySessionLimit = this.controller.properties["energySessionLimit"];
}
// Phases
- this.phases = currentData.allComponents[this.componentId + '/Phases'];
+ this.phases = currentData.allComponents[this.componentId + "/Phases"];
this.chargeDischargePower = Utils.convertChargeDischargePower(this.translate, currentData.allComponents[this.component.id + "/ChargePower"]);
this.chargeTarget = Utils.CONVERT_TO_WATT(this.formatNumber(currentData.allComponents[this.component.id + "/SetChargePowerLimit"]));
this.energySession = Utils.CONVERT_TO_WATT(currentData.allComponents[this.component.id + "/EnergySession"]);
- this.minChargePower = this.formatNumber(currentData.allComponents[this.component.id + '/MinimumHardwarePower']);
- this.maxChargePower = this.formatNumber(currentData.allComponents[this.component.id + '/MaximumHardwarePower']);
+ this.minChargePower = this.formatNumber(currentData.allComponents[this.component.id + "/MinimumHardwarePower"]);
+ this.maxChargePower = this.formatNumber(currentData.allComponents[this.component.id + "/MaximumHardwarePower"]);
this.state = currentData.allComponents[this.component.id + "/Status"];
}
@@ -149,34 +149,34 @@ export class FlatComponent extends AbstractFlatWidget {
private getState(enabledCharging: boolean, state: number, plug: number): string {
if (enabledCharging === false) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.chargingStationDeactivated');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.chargingStationDeactivated");
}
if (plug == null) {
if (state == null) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.notCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notCharging");
}
} else if (plug != ChargePlug.PLUGGED_ON_EVCS_AND_ON_EV_AND_LOCKED) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.cableNotConnected');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.cableNotConnected");
}
switch (state) {
case ChargeState.STARTING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.starting');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.starting");
case ChargeState.UNDEFINED:
case ChargeState.ERROR:
- return this.translate.instant('Edge.Index.Widgets.EVCS.error');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.error");
case ChargeState.READY_FOR_CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.readyForCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.readyForCharging");
case ChargeState.NOT_READY_FOR_CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.notReadyForCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notReadyForCharging");
case ChargeState.AUTHORIZATION_REJECTED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.notCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notCharging");
case ChargeState.CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.charging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.charging");
case ChargeState.ENERGY_LIMIT_REACHED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.chargeLimitReached');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.chargeLimitReached");
case ChargeState.CHARGING_FINISHED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.carFull');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.carFull");
}
}
diff --git a/ui/src/app/edge/live/Controller/Evcs/modal/modal.html b/ui/src/app/edge/live/Controller/Evcs/modal/modal.html
index 8c8c836f943..da7866b9130 100644
--- a/ui/src/app/edge/live/Controller/Evcs/modal/modal.html
+++ b/ui/src/app/edge/live/Controller/Evcs/modal/modal.html
@@ -154,4 +154,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Evcs/modal/modal.ts b/ui/src/app/edge/live/Controller/Evcs/modal/modal.ts
index 461ab9bdba5..0e92bbc6eda 100644
--- a/ui/src/app/edge/live/Controller/Evcs/modal/modal.ts
+++ b/ui/src/app/edge/live/Controller/Evcs/modal/modal.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { ChangeDetectorRef, Component, Inject } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
-import { ActivatedRoute } from '@angular/router';
-import { ModalController, PopoverController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractModal } from 'src/app/shared/components/modal/abstractModal';
-import { ChannelAddress, CurrentData, EdgeConfig, Service, Utils, Websocket } from 'src/app/shared/shared';
+import { ChangeDetectorRef, Component, Inject } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { ModalController, PopoverController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractModal } from "src/app/shared/components/modal/abstractModal";
+import { ChannelAddress, CurrentData, EdgeConfig, Service, Utils, Websocket } from "src/app/shared/shared";
-import { AdministrationComponent } from '../administration/administration.component';
-import { PopoverComponent } from '../popover/popover';
+import { AdministrationComponent } from "../administration/administration.component";
+import { PopoverComponent } from "../popover/popover";
-type ChargeMode = 'FORCE_CHARGE' | 'EXCESS_POWER';
+type ChargeMode = "FORCE_CHARGE" | "EXCESS_POWER";
@Component({
- templateUrl: './modal.html',
+ templateUrl: "./modal.html",
})
export class ModalComponent extends AbstractModal {
@@ -21,11 +21,11 @@ export class ModalComponent extends AbstractModal {
protected controller: EdgeConfig.Component;
protected evcsComponent: EdgeConfig.Component;
protected isConnectionSuccessful: boolean = false;
- protected readonly emptyValue: string = '-';
+ protected readonly emptyValue: string = "-";
protected status: string;
protected chargePowerLimit: string;
protected chargePower: { name: string; value: number; };
- protected state: string = '';
+ protected state: string = "";
protected energySession: string;
protected minChargePower: number;
protected maxChargePower: number;
@@ -59,12 +59,12 @@ export class ModalComponent extends AbstractModal {
public static getHelpKey(factoryId: string): string {
switch (factoryId) {
- case 'Evcs.Keba.KeContact':
- return 'EVCS_KEBA_KECONTACT';
- case 'Evcs.HardyBarth':
- return 'EVCS_KEBA_KECONTACT';
- case 'Evcs.IesKeywattSingle':
- return 'EVCS_OCPP_IESKEYWATTSINGLE';
+ case "Evcs.Keba.KeContact":
+ return "EVCS_KEBA_KECONTACT";
+ case "Evcs.HardyBarth":
+ return "EVCS_KEBA_KECONTACT";
+ case "Evcs.IesKeywattSingle":
+ return "EVCS_OCPP_IESKEYWATTSINGLE";
default:
return null;
}
@@ -74,7 +74,7 @@ export class ModalComponent extends AbstractModal {
const popover = await this.popoverctrl.create({
component: PopoverComponent,
componentProps: {
- chargeMode: this.formGroup.controls['chargeMode'].value,
+ chargeMode: this.formGroup.controls["chargeMode"].value,
},
});
return await popover.present();
@@ -104,23 +104,23 @@ export class ModalComponent extends AbstractModal {
return [
// channels for modal component, subscribe here for better UX
- new ChannelAddress(this.component.id, 'ChargePower'),
- new ChannelAddress(this.component.id, 'Phases'),
- new ChannelAddress(this.component.id, 'Plug'),
- new ChannelAddress(this.component.id, 'Status'),
- new ChannelAddress(this.component.id, 'State'),
- new ChannelAddress(this.component.id, 'EnergySession'),
- new ChannelAddress(this.component.id, 'MinimumHardwarePower'),
- new ChannelAddress(this.component.id, 'MaximumHardwarePower'),
- new ChannelAddress(this.component.id, 'SetChargePowerLimit'),
- new ChannelAddress(this.controller?.id, '_PropertyChargeMode'),
- new ChannelAddress(this.controller?.id, '_PropertyEnabledCharging'),
- new ChannelAddress(this.controller?.id, '_PropertyDefaultChargeMinPower'),
+ new ChannelAddress(this.component.id, "ChargePower"),
+ new ChannelAddress(this.component.id, "Phases"),
+ new ChannelAddress(this.component.id, "Plug"),
+ new ChannelAddress(this.component.id, "Status"),
+ new ChannelAddress(this.component.id, "State"),
+ new ChannelAddress(this.component.id, "EnergySession"),
+ new ChannelAddress(this.component.id, "MinimumHardwarePower"),
+ new ChannelAddress(this.component.id, "MaximumHardwarePower"),
+ new ChannelAddress(this.component.id, "SetChargePowerLimit"),
+ new ChannelAddress(this.controller?.id, "_PropertyChargeMode"),
+ new ChannelAddress(this.controller?.id, "_PropertyEnabledCharging"),
+ new ChannelAddress(this.controller?.id, "_PropertyDefaultChargeMinPower"),
];
}
protected override onCurrentData(currentData: CurrentData) {
- this.isConnectionSuccessful = currentData.allComponents[this.component.id + '/State'] !== 3 ? true : false;
+ this.isConnectionSuccessful = currentData.allComponents[this.component.id + "/State"] !== 3 ? true : false;
// Do not change values after touching formControls
if (this.formGroup?.pristine) {
this.status = this.getState(this.controller ? currentData.allComponents[this.controller.id + "/_PropertyEnabledCharging"] === 1 : null, currentData.allComponents[this.component.id + "/Status"], currentData.allComponents[this.component.id + "/Plug"]);
@@ -128,58 +128,58 @@ export class ModalComponent extends AbstractModal {
this.chargePowerLimit = Utils.CONVERT_TO_WATT(this.formatNumber(currentData.allComponents[this.component.id + "/SetChargePowerLimit"]));
this.state = currentData.allComponents[this.component.id + "/Status"];
this.energySession = Utils.CONVERT_TO_WATTHOURS(currentData.allComponents[this.component.id + "/EnergySession"]);
- this.minChargePower = this.formatNumber(currentData.allComponents[this.component.id + '/MinimumHardwarePower']);
- this.maxChargePower = this.formatNumber(currentData.allComponents[this.component.id + '/MaximumHardwarePower']);
- this.numberOfPhases = currentData.allComponents[this.component.id + '/Phases'] ? currentData.allComponents[this.component.id + '/Phases'] : 3;
- this.defaultChargeMinPower = currentData.allComponents[this.controller?.id + '/_PropertyDefaultChargeMinPower'];
+ this.minChargePower = this.formatNumber(currentData.allComponents[this.component.id + "/MinimumHardwarePower"]);
+ this.maxChargePower = this.formatNumber(currentData.allComponents[this.component.id + "/MaximumHardwarePower"]);
+ this.numberOfPhases = currentData.allComponents[this.component.id + "/Phases"] ? currentData.allComponents[this.component.id + "/Phases"] : 3;
+ this.defaultChargeMinPower = currentData.allComponents[this.controller?.id + "/_PropertyDefaultChargeMinPower"];
}
}
protected override onIsInitialized(): void {
- this.subscription.add(this.formGroup?.controls['energyLimit']?.valueChanges.subscribe(isEnergyLimit => {
+ this.subscription.add(this.formGroup?.controls["energyLimit"]?.valueChanges.subscribe(isEnergyLimit => {
if (isEnergyLimit) {
- if (this.formGroup.controls['energySessionLimit']?.value === 0) {
- this.formGroup.controls['energySessionLimit'].setValue(20000);
- this.formGroup.controls['energySessionLimit'].markAsDirty();
+ if (this.formGroup.controls["energySessionLimit"]?.value === 0) {
+ this.formGroup.controls["energySessionLimit"].setValue(20000);
+ this.formGroup.controls["energySessionLimit"].markAsDirty();
} else {
// energySessionLimit is already valid -> do nothing
}
} else {
- this.formGroup.controls['energySessionLimit'].setValue(0);
- this.formGroup.controls['energySessionLimit'].markAsDirty();
+ this.formGroup.controls["energySessionLimit"].setValue(0);
+ this.formGroup.controls["energySessionLimit"].markAsDirty();
}
}));
- this.subscription.add(this.formGroup?.get('chargeMode').valueChanges.subscribe(chargeMode => {
- if (chargeMode === 'OFF') {
- this.formGroup.get('enabledCharging').setValue(false);
- this.formGroup.get('chargeMode').markAsPristine(); // do not send chargeMode=OFF to Edge
+ this.subscription.add(this.formGroup?.get("chargeMode").valueChanges.subscribe(chargeMode => {
+ if (chargeMode === "OFF") {
+ this.formGroup.get("enabledCharging").setValue(false);
+ this.formGroup.get("chargeMode").markAsPristine(); // do not send chargeMode=OFF to Edge
} else {
- this.formGroup.get('enabledCharging').setValue(true);
+ this.formGroup.get("enabledCharging").setValue(true);
}
- this.formGroup.get('enabledCharging').markAsDirty();
+ this.formGroup.get("enabledCharging").markAsDirty();
}));
- this.subscription.add(this.formGroup?.get('minGuarantee').valueChanges.subscribe(minGuarantee => {
+ this.subscription.add(this.formGroup?.get("minGuarantee").valueChanges.subscribe(minGuarantee => {
if (minGuarantee) {
- this.formGroup.controls['defaultChargeMinPower'].setValue(1400 /* approx min power per phase */ * this.numberOfPhases);
+ this.formGroup.controls["defaultChargeMinPower"].setValue(1400 /* approx min power per phase */ * this.numberOfPhases);
} else {
- this.formGroup.controls['defaultChargeMinPower'].setValue(0);
+ this.formGroup.controls["defaultChargeMinPower"].setValue(0);
}
- this.formGroup.controls['defaultChargeMinPower'].markAsDirty();
+ this.formGroup.controls["defaultChargeMinPower"].markAsDirty();
}));
// Convert FormGroup value in kWh to Wh for Component config
- this.subscription.add(this.formGroup?.get('energySessionLimitKwh').valueChanges.subscribe((newValue) => {
- this.formGroup.controls['energySessionLimit'].setValue(newValue * 1000);
- this.formGroup.controls['energySessionLimit'].markAsDirty();
- this.formGroup.controls['energySessionLimitKwh'].markAsPristine();
+ this.subscription.add(this.formGroup?.get("energySessionLimitKwh").valueChanges.subscribe((newValue) => {
+ this.formGroup.controls["energySessionLimit"].setValue(newValue * 1000);
+ this.formGroup.controls["energySessionLimit"].markAsDirty();
+ this.formGroup.controls["energySessionLimitKwh"].markAsPristine();
}));
}
protected override getFormGroup(): FormGroup {
return this.formBuilder.group({
- chargeMode: new FormControl(this.controller?.properties.enabledCharging == false ? 'OFF' : this.controller?.properties.chargeMode),
+ chargeMode: new FormControl(this.controller?.properties.enabledCharging == false ? "OFF" : this.controller?.properties.chargeMode),
energyLimit: new FormControl(this.controller?.properties.energySessionLimit > 0),
minGuarantee: new FormControl(this.controller?.properties.defaultChargeMinPower > 0),
defaultChargeMinPower: new FormControl(this.controller?.properties.defaultChargeMinPower),
@@ -201,15 +201,15 @@ export class ModalComponent extends AbstractModal {
protected updateForceMinPower(event: CustomEvent, currentController: EdgeConfig.Component, numberOfPhases: number) {
const newMinChargePower = event.detail.value / numberOfPhases;
- this.formGroup.controls['forceChargeMinPower'].markAsDirty();
- this.formGroup.controls['forceChargeMinPower'].setValue(newMinChargePower);
+ this.formGroup.controls["forceChargeMinPower"].markAsDirty();
+ this.formGroup.controls["forceChargeMinPower"].setValue(newMinChargePower);
}
/**
* Updates the MinChargePower for Renault Zoe Charging Mode if activated in administration component
*/
protected updateRenaultZoeConfig() {
- if (this.controller && this.evcsComponent.properties['minHwCurrent'] == 10000) {
+ if (this.controller && this.evcsComponent.properties["minHwCurrent"] == 10000) {
const oldMinChargePower = this.controller.properties.forceChargeMinPower;
const maxAllowedChargePower = 10 /* Ampere */ * 230; /* Volt */
@@ -218,7 +218,7 @@ export class ModalComponent extends AbstractModal {
if (this.edge != null) {
const newMinChargePower = maxAllowedChargePower;
this.edge.updateComponentConfig(this.websocket, this.controller.id, [
- { name: 'forceChargeMinPower', value: newMinChargePower },
+ { name: "forceChargeMinPower", value: newMinChargePower },
]).then(() => {
this.controller.properties.forceChargeMinPower = newMinChargePower;
}).catch(reason => {
@@ -245,34 +245,34 @@ export class ModalComponent extends AbstractModal {
private getState(enabledCharging: boolean, state: number, plug: number): string {
if (enabledCharging === false) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.chargingStationDeactivated');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.chargingStationDeactivated");
}
if (plug == null) {
if (state == null) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.notCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notCharging");
}
} else if (plug != ChargePlug.PLUGGED_ON_EVCS_AND_ON_EV_AND_LOCKED) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.cableNotConnected');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.cableNotConnected");
}
switch (state) {
case ChargeState.STARTING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.starting');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.starting");
case ChargeState.UNDEFINED:
case ChargeState.ERROR:
- return this.translate.instant('Edge.Index.Widgets.EVCS.error');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.error");
case ChargeState.READY_FOR_CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.readyForCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.readyForCharging");
case ChargeState.NOT_READY_FOR_CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.notReadyForCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notReadyForCharging");
case ChargeState.AUTHORIZATION_REJECTED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.notCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notCharging");
case ChargeState.CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.charging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.charging");
case ChargeState.ENERGY_LIMIT_REACHED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.chargeLimitReached');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.chargeLimitReached");
case ChargeState.CHARGING_FINISHED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.carFull');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.carFull");
}
}
diff --git a/ui/src/app/edge/live/Controller/Evcs/popover/popover.html b/ui/src/app/edge/live/Controller/Evcs/popover/popover.html
index 3e284d228be..428cef4b69a 100644
--- a/ui/src/app/edge/live/Controller/Evcs/popover/popover.html
+++ b/ui/src/app/edge/live/Controller/Evcs/popover/popover.html
@@ -26,4 +26,4 @@
style="text-align: center">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Evcs/popover/popover.ts b/ui/src/app/edge/live/Controller/Evcs/popover/popover.ts
index 1d53c249443..718bdb5d868 100644
--- a/ui/src/app/edge/live/Controller/Evcs/popover/popover.ts
+++ b/ui/src/app/edge/live/Controller/Evcs/popover/popover.ts
@@ -1,10 +1,10 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractModal } from 'src/app/shared/components/modal/abstractModal';
+import { Component } from "@angular/core";
+import { AbstractModal } from "src/app/shared/components/modal/abstractModal";
-type ChargeMode = 'FORCE_CHARGE' | 'EXCESS_POWER' | 'OFF';
+type ChargeMode = "FORCE_CHARGE" | "EXCESS_POWER" | "OFF";
@Component({
- templateUrl: './popover.html',
+ templateUrl: "./popover.html",
})
export class PopoverComponent extends AbstractModal {
diff --git a/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/Io_ChannelSingleThreshold.ts b/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/Io_ChannelSingleThreshold.ts
index 452e7643dec..bbed2715a18 100644
--- a/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/Io_ChannelSingleThreshold.ts
+++ b/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/Io_ChannelSingleThreshold.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, Utils } from 'src/app/shared/shared';
-import { Icon } from 'src/app/shared/type/widget';
-import { Controller_Io_ChannelSingleThresholdModalComponent } from './modal/modal.component';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
+import { Icon } from "src/app/shared/type/widget";
+import { Controller_Io_ChannelSingleThresholdModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Controller_Io_ChannelSingleThresholdComponent',
- templateUrl: './Io_ChannelSingleThreshold.html',
+ selector: "Controller_Io_ChannelSingleThresholdComponent",
+ templateUrl: "./Io_ChannelSingleThreshold.html",
})
export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatWidget {
@@ -17,9 +17,9 @@ export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatW
public mode: string;
public modeValue: string;
public icon: Icon = {
- name: '',
- color: '',
- size: '',
+ name: "",
+ color: "",
+ size: "",
};
public dependendOn: string;
public dependendOnValue: any;
@@ -47,7 +47,7 @@ export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatW
protected override afterIsInitialized(): void {
this.inputChannel = ChannelAddress.fromString(
- this.component.properties['inputChannelAddress']);
+ this.component.properties["inputChannelAddress"]);
this.edge.getChannel(this.websocket, this.inputChannel)
.then(channel => {
@@ -56,8 +56,8 @@ export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatW
}
protected override getChannelAddresses() {
- const outputChannelAddress: string | string[] = this.component.properties['outputChannelAddress'];
- if (typeof outputChannelAddress === 'string') {
+ const outputChannelAddress: string | string[] = this.component.properties["outputChannelAddress"];
+ if (typeof outputChannelAddress === "string") {
this.outputChannel = ChannelAddress.fromString(outputChannelAddress);
} else {
// Takes only the first output for simplicity reasons
@@ -66,37 +66,37 @@ export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatW
return [
this.outputChannel,
this.inputChannel,
- ChannelAddress.fromString(this.component.id + '/_PropertyMode')];
+ ChannelAddress.fromString(this.component.id + "/_PropertyMode")];
}
protected override onCurrentData(currentData: CurrentData) {
- this.switchValue = this.component.properties['threshold'];
+ this.switchValue = this.component.properties["threshold"];
// Icon, State
this.outputChannelValue = currentData.allComponents[this.outputChannel.toString()];
switch (this.outputChannelValue) {
case 0:
- this.icon.name = 'radio-button-off-outline';
- this.state = this.translate.instant('General.off');
+ this.icon.name = "radio-button-off-outline";
+ this.state = this.translate.instant("General.off");
break;
case 1:
- this.icon.name = 'aperture-outline';
- this.state = this.translate.instant('General.on');
+ this.icon.name = "aperture-outline";
+ this.state = this.translate.instant("General.on");
break;
}
// Mode
- this.modeValue = currentData.allComponents[this.component.id + '/_PropertyMode'];
+ this.modeValue = currentData.allComponents[this.component.id + "/_PropertyMode"];
switch (this.modeValue) {
- case 'ON':
- this.mode = this.translate.instant('General.on');
+ case "ON":
+ this.mode = this.translate.instant("General.on");
break;
- case 'OFF':
- this.mode = this.translate.instant('General.off');
+ case "OFF":
+ this.mode = this.translate.instant("General.off");
break;
- case 'AUTOMATIC':
- this.mode = this.translate.instant('General.automatic');
+ case "AUTOMATIC":
+ this.mode = this.translate.instant("General.automatic");
}
@@ -105,45 +105,45 @@ export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatW
// Set dependendOn Value for different inputChannel && Set the switchConverter and switchValue
switch (this.inputChannel.toString()) {
- case '_sum/EssSoc':
- this.dependendOn = this.translate.instant('General.soc');
+ case "_sum/EssSoc":
+ this.dependendOn = this.translate.instant("General.soc");
this.switchConverter = Utils.CONVERT_TO_PERCENT;
break;
- case '_sum/ProductionActivePower':
- this.dependendOn = this.translate.instant('General.production');
+ case "_sum/ProductionActivePower":
+ this.dependendOn = this.translate.instant("General.production");
break;
- case '_sum/GridActivePower':
+ case "_sum/GridActivePower":
if (this.component.properties.threshold < 0) {
if (this.outputChannelValue == 0) {
- this.switchValue = this.component.properties['threshold'] * -1;
+ this.switchValue = this.component.properties["threshold"] * -1;
} else if (this.outputChannelValue == 1) {
- this.switchValue = this.component.properties['threshold'] * -1 - this.component.properties['switchedLoadPower'];
+ this.switchValue = this.component.properties["threshold"] * -1 - this.component.properties["switchedLoadPower"];
}
- this.dependendOn = this.translate.instant('General.gridSell');
+ this.dependendOn = this.translate.instant("General.gridSell");
} else if (this.component.properties.threshold > 0) {
if (this.outputChannelValue == 1) {
- this.switchValue = this.component.properties['threshold'] - this.component.properties['switchedLoadPower'];
+ this.switchValue = this.component.properties["threshold"] - this.component.properties["switchedLoadPower"];
}
- this.dependendOn = this.translate.instant('General.gridBuy');
+ this.dependendOn = this.translate.instant("General.gridBuy");
}
break;
default:
if (this.component.properties.threshold < 0) {
- this.switchValue = Utils.multiplySafely(this.component.properties['threshold'], -1)
- + this.unitOfInputChannel !== '' ? this.unitOfInputChannel : '';
+ this.switchValue = Utils.multiplySafely(this.component.properties["threshold"], -1)
+ + this.unitOfInputChannel !== "" ? this.unitOfInputChannel : "";
} else if (this.component.properties.threshold > 0) {
- this.switchValue += this.unitOfInputChannel !== '' ? this.unitOfInputChannel : '';
+ this.switchValue += this.unitOfInputChannel !== "" ? this.unitOfInputChannel : "";
}
- this.dependendOn = this.translate.instant('Edge.Index.Widgets.Singlethreshold.other')
- + ' (' + this.component.properties.inputChannelAddress + ')';
+ this.dependendOn = this.translate.instant("Edge.Index.Widgets.Singlethreshold.other")
+ + " (" + this.component.properties.inputChannelAddress + ")";
break;
}
// True when InputAddress doesnt match any of the following channelIds
- this.isOtherInputAddress = this.inputChannel.toString() != (null && '_sum/EssSoc' && '_sum/GridActivePower' && '_sum/ProductionActivePower') ? false : true;
+ this.isOtherInputAddress = this.inputChannel.toString() != (null && "_sum/EssSoc" && "_sum/GridActivePower" && "_sum/ProductionActivePower") ? false : true;
// Switch ON / OFF && BELOW / ABOVE
// Threshold greater 0
@@ -152,17 +152,17 @@ export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatW
// Check if invert is false
if (!this.component.properties.invert) {
if (this.outputChannelValue == 0) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOnAbove');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOnAbove");
} else if (this.outputChannelValue == 1) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOffBelow');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOffBelow");
}
// Check if invert is true
} else if (this.component.properties.invert) {
if (this.outputChannelValue == 0) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOnBelow');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOnBelow");
} else if (this.outputChannelValue == 1) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOffAbove');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOffAbove");
}
}
@@ -171,17 +171,17 @@ export class Controller_Io_ChannelSingleThresholdComponent extends AbstractFlatW
// Check if invert is false
if (!this.component.properties.invert) {
if (this.outputChannelValue == 0) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOnBelow');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOnBelow");
} else if (this.outputChannelValue == 1) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOffAbove');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOffAbove");
}
// Check if invert is true
} else if (this.component.properties.invert) {
if (this.outputChannelValue == 0) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOnAbove');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOnAbove");
} else if (this.outputChannelValue == 1) {
- this.switchState = this.translate.instant('Edge.Index.Widgets.Singlethreshold.switchOffBelow');
+ this.switchState = this.translate.instant("Edge.Index.Widgets.Singlethreshold.switchOffBelow");
}
}
}
diff --git a/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/modal/modal.component.ts b/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/modal/modal.component.ts
index a17e536b72a..738b4c396bc 100644
--- a/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Controller/Io/ChannelSingleThreshold/modal/modal.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { ChannelAddress, Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { ChannelAddress, Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
-type mode = 'ON' | 'AUTOMATIC' | 'OFF';
-type inputMode = 'SOC' | 'GRIDSELL' | 'GRIDBUY' | 'PRODUCTION' | 'OTHER';
+type mode = "ON" | "AUTOMATIC" | "OFF";
+type inputMode = "SOC" | "GRIDSELL" | "GRIDBUY" | "PRODUCTION" | "OTHER";
@Component({
- selector: 'Io_ChannelSingleThresholdModalComponent',
- templateUrl: './modal.component.html',
+ selector: "Io_ChannelSingleThresholdModalComponent",
+ templateUrl: "./modal.component.html",
})
export class Controller_Io_ChannelSingleThresholdModalComponent implements OnInit {
@@ -44,26 +44,26 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
this.formGroup = this.formBuilder.group({
minimumSwitchingTime: new FormControl(this.component.properties.minimumSwitchingTime, Validators.compose([
Validators.min(5),
- Validators.pattern('^[1-9][0-9]*$'),
+ Validators.pattern("^[1-9][0-9]*$"),
Validators.required,
])),
switchedLoadPower: new FormControl(this.component.properties.switchedLoadPower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
- threshold: new FormControl(this.getInputMode() == 'GRIDSELL' ? this.component.properties.threshold * -1 : this.component.properties.threshold, Validators.compose([
+ threshold: new FormControl(this.getInputMode() == "GRIDSELL" ? this.component.properties.threshold * -1 : this.component.properties.threshold, Validators.compose([
Validators.min(1),
- Validators.pattern('^[1-9][0-9]*$'),
+ Validators.pattern("^[1-9][0-9]*$"),
Validators.required,
])),
inputMode: new FormControl(this.getInputMode()),
invert: new FormControl(this.component.properties.invert, Validators.requiredTrue),
});
- this.minimumSwitchingTime = this.formGroup.controls['minimumSwitchingTime'];
- this.threshold = this.formGroup.controls['threshold'];
- this.switchedLoadPower = this.formGroup.controls['switchedLoadPower'];
- this.inputMode = this.formGroup.controls['inputMode'];
- this.invert = this.formGroup.controls['invert'];
+ this.minimumSwitchingTime = this.formGroup.controls["minimumSwitchingTime"];
+ this.threshold = this.formGroup.controls["threshold"];
+ this.switchedLoadPower = this.formGroup.controls["switchedLoadPower"];
+ this.inputMode = this.formGroup.controls["inputMode"];
+ this.invert = this.formGroup.controls["invert"];
}
public updateInputMode(event: CustomEvent) {
@@ -71,7 +71,7 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
switch (event.detail.value) {
case "SOC":
- this.inputMode.setValue('SOC');
+ this.inputMode.setValue("SOC");
this.switchedLoadPower.setValue(0);
this.switchedLoadPower.markAsDirty();
if (Math.abs(this.component.properties.threshold) < 0 || Math.abs(this.component.properties.threshold) > 100) {
@@ -84,12 +84,12 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
}
break;
case "GRIDSELL":
- this.inputMode.setValue('GRIDSELL');
+ this.inputMode.setValue("GRIDSELL");
this.threshold.markAsDirty();
this.switchedLoadPower.markAsDirty();
break;
case "GRIDBUY":
- this.inputMode.setValue('GRIDBUY');
+ this.inputMode.setValue("GRIDBUY");
this.switchedLoadPower.markAsDirty();
if (this.component.properties.threshold < 0) {
newThreshold = this.formGroup.value.threshold;
@@ -98,7 +98,7 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
}
break;
case "PRODUCTION":
- this.inputMode.setValue('PRODUCTION');
+ this.inputMode.setValue("PRODUCTION");
this.switchedLoadPower.setValue(0);
this.switchedLoadPower.markAsDirty();
if (this.component.properties.threshold < 0) {
@@ -115,26 +115,26 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
let newMode: mode;
switch (event.detail.value) {
- case 'ON':
- newMode = 'ON';
+ case "ON":
+ newMode = "ON";
break;
- case 'OFF':
- newMode = 'OFF';
+ case "OFF":
+ newMode = "OFF";
break;
- case 'AUTOMATIC':
- newMode = 'AUTOMATIC';
+ case "AUTOMATIC":
+ newMode = "AUTOMATIC";
break;
}
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, this.component.id, [
- { name: 'mode', value: newMode },
+ { name: "mode", value: newMode },
]).then(() => {
this.component.properties.mode = newMode;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.component.properties.mode = oldMode;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -142,16 +142,16 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
public applyChanges(): void {
if (this.edge != null) {
- if (this.edge.roleIsAtLeast('owner')) {
+ if (this.edge.roleIsAtLeast("owner")) {
if (this.minimumSwitchingTime.valid && this.threshold.valid && this.switchedLoadPower.valid) {
if (this.threshold.value > this.switchedLoadPower.value) {
const updateComponentArray = [];
Object.keys(this.formGroup.controls).forEach((element, index) => {
if (this.formGroup.controls[element].dirty) {
// catch inputMode and convert it to inputChannelAddress
- if (Object.keys(this.formGroup.controls)[index] == 'inputMode') {
- updateComponentArray.push({ name: 'inputChannelAddress', value: this.convertToChannelAddress(this.formGroup.controls[element].value) });
- } else if (this.inputMode.value == 'GRIDSELL' && Object.keys(this.formGroup.controls)[index] == 'threshold') {
+ if (Object.keys(this.formGroup.controls)[index] == "inputMode") {
+ updateComponentArray.push({ name: "inputChannelAddress", value: this.convertToChannelAddress(this.formGroup.controls[element].value) });
+ } else if (this.inputMode.value == "GRIDSELL" && Object.keys(this.formGroup.controls)[index] == "threshold") {
this.formGroup.controls[element].setValue(this.formGroup.controls[element].value * -1);
updateComponentArray.push({ name: Object.keys(this.formGroup.controls)[index], value: this.formGroup.controls[element].value });
} else {
@@ -162,12 +162,12 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
this.loading = true;
this.edge.updateComponentConfig(this.websocket, this.component.id, updateComponentArray).then(() => {
this.component.properties.minimumSwitchingTime = this.minimumSwitchingTime.value;
- this.component.properties.threshold = this.inputMode.value == 'GRIDSELL' ? this.threshold.value * -1 : this.threshold.value;
+ this.component.properties.threshold = this.inputMode.value == "GRIDSELL" ? this.threshold.value * -1 : this.threshold.value;
this.component.properties.switchedLoadPower = this.switchedLoadPower.value;
this.component.properties.inputChannelAddress = this.convertToChannelAddress(this.inputMode.value) != this.component.properties.inputChannelAddress ? this.convertToChannelAddress(this.inputMode.value) : this.component.properties.inputChannelAddress;
this.component.properties.invert = this.invert.value;
this.loading = false;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.loading = false;
this.minimumSwitchingTime.setValue(this.component.properties.minimumSwitchingTime);
@@ -176,65 +176,67 @@ export class Controller_Io_ChannelSingleThresholdModalComponent implements OnIni
this.inputMode.setValue(this.convertToInputMode(this.component.properties.inputChannelAddress, this.component.properties.threshold));
this.invert.setValue(this.component.properties.invert);
this.loading = false;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
- if (this.inputMode.value == 'GRIDSELL') {
+ if (this.inputMode.value == "GRIDSELL") {
if (this.inputMode.dirty || this.threshold.dirty) {
this.threshold.setValue(this.threshold.value * -1);
}
}
this.formGroup.markAsPristine();
} else {
- this.service.toast(this.translate.instant('Edge.Index.Widgets.Singlethreshold.relationError'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Index.Widgets.Singlethreshold.relationError"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.inputNotValid'), 'danger');
+ this.service.toast(this.translate.instant("General.inputNotValid"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.insufficientRights'), 'danger');
+ this.service.toast(this.translate.instant("General.insufficientRights"), "danger");
}
}
}
private getInputMode(): inputMode {
- if (this.component.properties.inputChannelAddress == '_sum/GridActivePower' && this.component.properties.threshold < 0) {
- return 'GRIDSELL';
- } else if (this.component.properties.inputChannelAddress == '_sum/GridActivePower' && this.component.properties.threshold > 0) {
- return 'GRIDBUY';
- } else if (this.component.properties.inputChannelAddress == '_sum/ProductionActivePower') {
- return 'PRODUCTION';
- } else if (this.component.properties.inputChannelAddress == '_sum/EssSoc') {
- return 'SOC';
+ if (this.component.properties.inputChannelAddress == "_sum/GridActivePower" && this.component.properties.threshold < 0) {
+ return "GRIDSELL";
+ } else if (this.component.properties.inputChannelAddress == "_sum/GridActivePower" && this.component.properties.threshold > 0) {
+ return "GRIDBUY";
+ } else if (this.component.properties.inputChannelAddress == "_sum/ProductionActivePower") {
+ return "PRODUCTION";
+ } else if (this.component.properties.inputChannelAddress == "_sum/EssSoc") {
+ return "SOC";
} else if (this.component.properties.inputChannelAddress != null) {
- return 'OTHER';
+ return "OTHER";
}
}
- private convertToChannelAddress(inputMode: inputMode): string {
+ private convertToChannelAddress(inputMode: inputMode): string | null {
switch (inputMode) {
- case 'SOC':
- return '_sum/EssSoc';
- case 'GRIDBUY':
- return '_sum/GridActivePower';
- case 'GRIDSELL':
- return '_sum/GridActivePower';
- case 'PRODUCTION':
- return '_sum/ProductionActivePower';
+ case "SOC":
+ return "_sum/EssSoc";
+ case "GRIDBUY":
+ return "_sum/GridActivePower";
+ case "GRIDSELL":
+ return "_sum/GridActivePower";
+ case "PRODUCTION":
+ return "_sum/ProductionActivePower";
+ default:
+ return null;
}
}
private convertToInputMode(inputChannelAddress: string, threshold: number): inputMode {
switch (inputChannelAddress) {
- case '_sum/EssSoc':
- return 'SOC';
- case '_sum/ProductionActivePower':
- return 'PRODUCTION';
- case '_sum/GridActivePower':
+ case "_sum/EssSoc":
+ return "SOC";
+ case "_sum/ProductionActivePower":
+ return "PRODUCTION";
+ case "_sum/GridActivePower":
if (threshold > 0) {
- return 'GRIDBUY';
+ return "GRIDBUY";
} else if (threshold < 0) {
- return 'GRIDSELL';
+ return "GRIDSELL";
}
}
}
diff --git a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.html b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.html
index b11e04690a6..6a40da4eee7 100644
--- a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.html
+++ b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.html
@@ -2,4 +2,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.ts b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.ts
index 82f0d1ef04c..b45630af970 100644
--- a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.ts
+++ b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/Io_FixDigitalOutput.ts
@@ -1,17 +1,17 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData } from "src/app/shared/shared";
-import { Controller_Io_FixDigitalOutputModalComponent } from './modal/modal.component';
+import { Controller_Io_FixDigitalOutputModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Controller_Io_FixDigitalOutput',
- templateUrl: './Io_FixDigitalOutput.html',
+ selector: "Controller_Io_FixDigitalOutput",
+ templateUrl: "./Io_FixDigitalOutput.html",
})
export class Controller_Io_FixDigitalOutputComponent extends AbstractFlatWidget {
- public state: string = '-';
+ public state: string = "-";
public outputChannel: string;
async presentModal() {
@@ -29,7 +29,7 @@ export class Controller_Io_FixDigitalOutputComponent extends AbstractFlatWidget
}
protected override getChannelAddresses(): ChannelAddress[] {
- this.outputChannel = this.component.properties['outputChannelAddress'];
+ this.outputChannel = this.component.properties["outputChannelAddress"];
return [ChannelAddress.fromString(this.outputChannel)];
}
@@ -37,9 +37,9 @@ export class Controller_Io_FixDigitalOutputComponent extends AbstractFlatWidget
const channel = currentData.allComponents[this.outputChannel];
if (channel != null) {
if (channel == 1) {
- this.state = this.translate.instant('General.on');
+ this.state = this.translate.instant("General.on");
} else if (channel == 0) {
- this.state = this.translate.instant('General.off');
+ this.state = this.translate.instant("General.off");
}
}
}
diff --git a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.html b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.html
index edbd3cb1964..2fd0e5ba02f 100644
--- a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.html
+++ b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.html
@@ -36,4 +36,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.ts b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.ts
index b1564acb6da..ccc9dafd2b2 100644
--- a/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Controller/Io/FixDigitalOutput/modal/modal.component.ts
@@ -1,12 +1,12 @@
-import { Component, Input } from '@angular/core';
-import { Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
+import { Component, Input } from "@angular/core";
+import { Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
@Component({
- selector: 'fixdigitaloutput-modal',
- templateUrl: './modal.component.html',
+ selector: "fixdigitaloutput-modal",
+ templateUrl: "./modal.component.html",
})
export class Controller_Io_FixDigitalOutputModalComponent {
@@ -32,16 +32,16 @@ export class Controller_Io_FixDigitalOutputModalComponent {
// ion-segment button only supports string as type
// https://ionicframework.com/docs/v4/api/segment-button
- const newMode = (event.detail.value.toLowerCase() === 'true');
+ const newMode = (event.detail.value.toLowerCase() === "true");
this.edge.updateComponentConfig(this.websocket, this.component.id, [
- { name: 'isOn', value: newMode },
+ { name: "isOn", value: newMode },
]).then(() => {
this.component.properties.isOn = newMode;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.component.properties.isOn = oldMode;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
diff --git a/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.html b/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.html
index 3f6ebad1873..f2440c4a5d5 100644
--- a/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.html
+++ b/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.html
@@ -13,4 +13,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.ts b/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.ts
index 1ae49e1b903..732c697cb1a 100644
--- a/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.ts
+++ b/ui/src/app/edge/live/Controller/Io/HeatingElement/flat/flat.ts
@@ -1,19 +1,19 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { BehaviorSubject } from 'rxjs';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, Utils } from 'src/app/shared/shared';
-import { WorkMode } from 'src/app/shared/type/general';
+import { Component } from "@angular/core";
+import { BehaviorSubject } from "rxjs";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
+import { WorkMode } from "src/app/shared/type/general";
-import { ModalComponent } from '../modal/modal';
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'Controller_Io_HeatingElement',
- templateUrl: './flat.html',
+ selector: "Controller_Io_HeatingElement",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
- private static PROPERTY_MODE: string = '_PropertyMode';
+ private static PROPERTY_MODE: string = "_PropertyMode";
protected activePhases: BehaviorSubject = new BehaviorSubject(0);
protected mode: string;
@@ -38,39 +38,39 @@ export class FlatComponent extends AbstractFlatWidget {
this.outputChannelArray.push(
ChannelAddress.fromString(
- this.component.properties['outputChannelPhaseL1']),
+ this.component.properties["outputChannelPhaseL1"]),
ChannelAddress.fromString(
- this.component.properties['outputChannelPhaseL2']),
+ this.component.properties["outputChannelPhaseL2"]),
ChannelAddress.fromString(
- this.component.properties['outputChannelPhaseL3']),
+ this.component.properties["outputChannelPhaseL3"]),
);
const channelAddresses: ChannelAddress[] = [
- new ChannelAddress(this.component.id, 'ForceStartAtSecondsOfDay'),
+ new ChannelAddress(this.component.id, "ForceStartAtSecondsOfDay"),
...this.outputChannelArray,
- new ChannelAddress(this.component.id, 'Status'),
+ new ChannelAddress(this.component.id, "Status"),
new ChannelAddress(this.component.id, FlatComponent.PROPERTY_MODE),
- new ChannelAddress(this.component.id, '_PropertyWorkMode'),
+ new ChannelAddress(this.component.id, "_PropertyWorkMode"),
];
return channelAddresses;
}
protected override onCurrentData(currentData: CurrentData) {
- this.workMode = currentData.allComponents[this.component.id + '/' + '_PropertyWorkMode'];
+ this.workMode = currentData.allComponents[this.component.id + "/" + "_PropertyWorkMode"];
// get current mode
- switch (currentData.allComponents[this.component.id + '/' + FlatComponent.PROPERTY_MODE]) {
- case 'MANUAL_ON': {
- this.mode = 'General.on';
+ switch (currentData.allComponents[this.component.id + "/" + FlatComponent.PROPERTY_MODE]) {
+ case "MANUAL_ON": {
+ this.mode = "General.on";
break;
}
- case 'MANUAL_OFF': {
- this.mode = 'General.off';
+ case "MANUAL_OFF": {
+ this.mode = "General.off";
break;
}
- case 'AUTOMATIC': {
- this.mode = 'General.automatic';
+ case "AUTOMATIC": {
+ this.mode = "General.automatic";
break;
}
}
@@ -86,17 +86,17 @@ export class FlatComponent extends AbstractFlatWidget {
// Get current state
this.activePhases.next(value);
if (this.activePhases.value > 0) {
- this.state = 'General.active';
+ this.state = "General.active";
// Check forced heat
// TODO: Use only Status if edge version is latest [2022.8]
- this.runState = currentData.allComponents[this.component.id + '/' + 'Status'];
+ this.runState = currentData.allComponents[this.component.id + "/" + "Status"];
if (this.runState == Status.ActiveForced) {
- this.state = 'Edge.Index.Widgets.Heatingelement.activeForced';
+ this.state = "Edge.Index.Widgets.Heatingelement.activeForced";
}
} else if (this.activePhases.value == 0) {
- this.state = 'General.inactive';
+ this.state = "General.inactive";
}
}
diff --git a/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.html b/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.html
index f83d0dc6aef..3a8e729979e 100644
--- a/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.html
+++ b/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.html
@@ -75,4 +75,4 @@
[formGroup]="formGroup">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.ts b/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.ts
index 193a683bf9b..8a9bd6ad535 100644
--- a/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.ts
+++ b/ui/src/app/edge/live/Controller/Io/HeatingElement/modal/modal.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { FormControl, FormGroup } from '@angular/forms';
-import { BehaviorSubject } from 'rxjs';
-import { AbstractModal } from 'src/app/shared/components/modal/abstractModal';
-import { ChannelAddress, CurrentData } from 'src/app/shared/shared';
-import { Mode, WorkMode } from 'src/app/shared/type/general';
+import { Component, OnInit } from "@angular/core";
+import { FormControl, FormGroup } from "@angular/forms";
+import { BehaviorSubject } from "rxjs";
+import { AbstractModal } from "src/app/shared/components/modal/abstractModal";
+import { ChannelAddress, CurrentData } from "src/app/shared/shared";
+import { Mode, WorkMode } from "src/app/shared/type/general";
@Component({
- selector: 'heatingelement-modal',
- templateUrl: './modal.html',
+ selector: "heatingelement-modal",
+ templateUrl: "./modal.html",
})
export class ModalComponent extends AbstractModal implements OnInit {
- private static PROPERTY_MODE: string = '_PropertyMode';
+ private static PROPERTY_MODE: string = "_PropertyMode";
protected activePhases: BehaviorSubject = new BehaviorSubject(0);
protected mode: string;
protected state: string;
@@ -25,30 +25,30 @@ export class ModalComponent extends AbstractModal implements OnInit {
// TODO remove when outputting of event is errorless possible
switchAllowMinimumHeating(event: CustomEvent) {
if (event.detail.checked == true) {
- this.formGroup.controls['workMode'].setValue('TIME');
- this.formGroup.controls['workMode'].markAsDirty();
+ this.formGroup.controls["workMode"].setValue("TIME");
+ this.formGroup.controls["workMode"].markAsDirty();
} else if (event.detail.checked == false) {
- this.formGroup.controls['workMode'].setValue('NONE');
- this.formGroup.controls['workMode'].markAsDirty();
+ this.formGroup.controls["workMode"].setValue("NONE");
+ this.formGroup.controls["workMode"].markAsDirty();
}
}
protected override getChannelAddresses(): ChannelAddress[] {
const outputChannelPhaseOne = ChannelAddress.fromString(
- this.component.properties['outputChannelPhaseL1']);
+ this.component.properties["outputChannelPhaseL1"]);
const outputChannelPhaseTwo = ChannelAddress.fromString(
- this.component.properties['outputChannelPhaseL2']);
+ this.component.properties["outputChannelPhaseL2"]);
const outputChannelPhaseThree = ChannelAddress.fromString(
- this.component.properties['outputChannelPhaseL3']);
+ this.component.properties["outputChannelPhaseL3"]);
this.outputChannelArray = [outputChannelPhaseOne, outputChannelPhaseTwo, outputChannelPhaseThree];
const channelAddresses: ChannelAddress[] = [
- new ChannelAddress(this.component.id, 'ForceStartAtSecondsOfDay'),
+ new ChannelAddress(this.component.id, "ForceStartAtSecondsOfDay"),
outputChannelPhaseOne,
outputChannelPhaseTwo,
outputChannelPhaseThree,
new ChannelAddress(this.component.id, ModalComponent.PROPERTY_MODE),
- new ChannelAddress(this.component.id, '_PropertyWorkMode'),
+ new ChannelAddress(this.component.id, "_PropertyWorkMode"),
];
return channelAddresses;
}
@@ -56,7 +56,7 @@ export class ModalComponent extends AbstractModal implements OnInit {
protected override onCurrentData(currentData: CurrentData) {
// get current mode
- this.mode = currentData.allComponents[this.component.id + '/' + ModalComponent.PROPERTY_MODE];
+ this.mode = currentData.allComponents[this.component.id + "/" + ModalComponent.PROPERTY_MODE];
let value = 0;
this.outputChannelArray.forEach(element => {
@@ -68,9 +68,9 @@ export class ModalComponent extends AbstractModal implements OnInit {
// Get current state
this.activePhases.next(value);
if (this.activePhases.value > 0) {
- this.state = this.translate.instant('General.active');
+ this.state = this.translate.instant("General.active");
} else if (this.activePhases.value == 0) {
- this.state = this.translate.instant('General.inactive');
+ this.state = this.translate.instant("General.inactive");
}
}
diff --git a/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.html b/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.html
index 95f97d5a51c..c0ade929d82 100644
--- a/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.html
+++ b/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.html
@@ -10,4 +10,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.ts b/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.ts
index 2d8ec32c161..3962850c043 100644
--- a/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.ts
+++ b/ui/src/app/edge/live/Controller/Io/Heatpump/Io_Heatpump.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { BehaviorSubject } from 'rxjs';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, EdgeConfig } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { BehaviorSubject } from "rxjs";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, EdgeConfig } from "src/app/shared/shared";
-import { Controller_Io_HeatpumpModalComponent } from './modal/modal.component';
+import { Controller_Io_HeatpumpModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Controller_Io_Heatpump',
- templateUrl: './Io_Heatpump.html',
+ selector: "Controller_Io_Heatpump",
+ templateUrl: "./Io_Heatpump.html",
})
export class Controller_Io_HeatpumpComponent extends AbstractFlatWidget {
- private static PROPERTY_MODE: string = '_PropertyMode';
+ private static PROPERTY_MODE: string = "_PropertyMode";
public override component: EdgeConfig.Component | null = null;
public status: BehaviorSubject<{ name: string }> = new BehaviorSubject(null);
@@ -39,42 +39,42 @@ export class Controller_Io_HeatpumpComponent extends AbstractFlatWidget {
protected override getChannelAddresses() {
return [
- new ChannelAddress(this.component.id, 'Status'),
- new ChannelAddress(this.component.id, 'State'),
+ new ChannelAddress(this.component.id, "Status"),
+ new ChannelAddress(this.component.id, "State"),
new ChannelAddress(this.component.id, Controller_Io_HeatpumpComponent.PROPERTY_MODE),
];
}
protected override onCurrentData(currentData: CurrentData) {
- this.isConnectionSuccessful = currentData.allComponents[this.componentId + '/State'] != 3 ? true : false;
+ this.isConnectionSuccessful = currentData.allComponents[this.componentId + "/State"] != 3 ? true : false;
// Status
- switch (currentData.allComponents[this.componentId + '/Status']) {
+ switch (currentData.allComponents[this.componentId + "/Status"]) {
case -1:
- this.statusValue = this.translate.instant('Edge.Index.Widgets.HeatPump.undefined');
+ this.statusValue = this.translate.instant("Edge.Index.Widgets.HeatPump.undefined");
break;
case 0:
- this.statusValue = this.translate.instant('Edge.Index.Widgets.HeatPump.lock');
+ this.statusValue = this.translate.instant("Edge.Index.Widgets.HeatPump.lock");
break;
case 1:
- this.statusValue = this.translate.instant('Edge.Index.Widgets.HeatPump.normalOperation');
+ this.statusValue = this.translate.instant("Edge.Index.Widgets.HeatPump.normalOperation");
break;
case 2:
- this.statusValue = this.translate.instant('Edge.Index.Widgets.HeatPump.switchOnRec');
+ this.statusValue = this.translate.instant("Edge.Index.Widgets.HeatPump.switchOnRec");
break;
case 3:
- this.statusValue = this.translate.instant('Edge.Index.Widgets.HeatPump.switchOnCom');
+ this.statusValue = this.translate.instant("Edge.Index.Widgets.HeatPump.switchOnCom");
break;
}
// Mode
- switch (currentData.allComponents[this.component.id + '/' + Controller_Io_HeatpumpComponent.PROPERTY_MODE]) {
- case 'AUTOMATIC': {
- this.mode = this.translate.instant('General.automatic');
+ switch (currentData.allComponents[this.component.id + "/" + Controller_Io_HeatpumpComponent.PROPERTY_MODE]) {
+ case "AUTOMATIC": {
+ this.mode = this.translate.instant("General.automatic");
break;
}
- case 'MANUAL': {
- this.mode = this.translate.instant('General.manually');
+ case "MANUAL": {
+ this.mode = this.translate.instant("General.manually");
break;
}
}
diff --git a/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.html b/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.html
index eb3859cf803..59063fd023e 100644
--- a/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.html
+++ b/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.html
@@ -278,4 +278,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.ts b/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.ts
index 0970982b294..d12d02ab21b 100644
--- a/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Controller/Io/Heatpump/modal/modal.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
-type ManualMode = 'FORCE_ON' | 'RECOMMENDATION' | 'REGULAR' | 'LOCK';
-type AutomaticEnableMode = 'automaticRecommendationCtrlEnabled' | 'automaticForceOnCtrlEnabled' | 'automaticLockCtrlEnabled';
+type ManualMode = "FORCE_ON" | "RECOMMENDATION" | "REGULAR" | "LOCK";
+type AutomaticEnableMode = "automaticRecommendationCtrlEnabled" | "automaticForceOnCtrlEnabled" | "automaticLockCtrlEnabled";
@Component({
- selector: 'heatpump-modal',
- templateUrl: './modal.component.html',
+ selector: "heatpump-modal",
+ templateUrl: "./modal.component.html",
})
export class Controller_Io_HeatpumpModalComponent implements OnInit {
@@ -46,19 +46,19 @@ export class Controller_Io_HeatpumpModalComponent implements OnInit {
}
public updateControllerMode(event: CustomEvent) {
- const oldMode = this.component.properties['mode'];
+ const oldMode = this.component.properties["mode"];
const newMode = event.detail.value;
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, this.component.id, [
- { name: 'mode', value: newMode },
+ { name: "mode", value: newMode },
]).then(() => {
this.component.properties.mode = newMode;
this.formGroup.markAsPristine();
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.component.properties.mode = oldMode;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -70,14 +70,14 @@ export class Controller_Io_HeatpumpModalComponent implements OnInit {
}
public updateManualMode(state: ManualMode) {
- this.formGroup.controls['manualState'].setValue(state);
- this.formGroup.controls['manualState'].markAsDirty();
+ this.formGroup.controls["manualState"].setValue(state);
+ this.formGroup.controls["manualState"].markAsDirty();
}
public applyChanges() {
if (this.edge != null) {
- if (this.edge.roleIsAtLeast('owner')) {
- if (this.formGroup.controls['automaticRecommendationSurplusPower'].value < this.formGroup.controls['automaticForceOnSurplusPower'].value) {
+ if (this.edge.roleIsAtLeast("owner")) {
+ if (this.formGroup.controls["automaticRecommendationSurplusPower"].value < this.formGroup.controls["automaticForceOnSurplusPower"].value) {
const updateComponentArray = [];
Object.keys(this.formGroup.controls).forEach((element, index) => {
if (this.formGroup.controls[element].dirty) {
@@ -87,20 +87,20 @@ export class Controller_Io_HeatpumpModalComponent implements OnInit {
this.loading = true;
this.edge.updateComponentConfig(this.websocket, this.component.id, updateComponentArray).then(() => {
this.component.properties.manualState = this.formGroup.value.manualState;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
this.loading = false;
}).catch(reason => {
- this.formGroup.controls['minTime'].setValue(this.component.properties.manualState);
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason, 'danger');
+ this.formGroup.controls["minTime"].setValue(this.component.properties.manualState);
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason, "danger");
this.loading = false;
console.warn(reason);
});
this.formGroup.markAsPristine();
} else {
- this.service.toast(this.translate.instant('Edge.Index.Widgets.HeatPump.relationError'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Index.Widgets.HeatPump.relationError"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.insufficientRights'), 'danger');
+ this.service.toast(this.translate.instant("General.insufficientRights"), "danger");
}
}
}
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.html b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.html
index c6780f64a77..9f457005bed 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.html
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.html
@@ -9,4 +9,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.ts b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.ts
index 59bf0a579b8..569e45069ed 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.ts
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/Asymmetric.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { BehaviorSubject } from 'rxjs';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
+import { Component } from "@angular/core";
+import { BehaviorSubject } from "rxjs";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
-import { ChannelAddress, CurrentData, Utils } from '../../../../../shared/shared';
-import { Controller_Asymmetric_PeakShavingModalComponent } from './modal/modal.component';
+import { ChannelAddress, CurrentData, Utils } from "../../../../../shared/shared";
+import { Controller_Asymmetric_PeakShavingModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Controller_Asymmetric_PeakShaving',
- templateUrl: './Asymmetric.html',
+ selector: "Controller_Asymmetric_PeakShaving",
+ templateUrl: "./Asymmetric.html",
})
export class Controller_Asymmetric_PeakShavingComponent extends AbstractFlatWidget {
@@ -31,24 +31,24 @@ export class Controller_Asymmetric_PeakShavingComponent extends AbstractFlatWidg
}
protected override getChannelAddresses() {
- this.meterId = this.component.properties['meter.id'];
+ this.meterId = this.component.properties["meter.id"];
return [
- new ChannelAddress(this.meterId, 'ActivePower'),
- new ChannelAddress(this.meterId, 'ActivePowerL1'),
- new ChannelAddress(this.meterId, 'ActivePowerL2'),
- new ChannelAddress(this.meterId, 'ActivePowerL3'),
+ new ChannelAddress(this.meterId, "ActivePower"),
+ new ChannelAddress(this.meterId, "ActivePowerL1"),
+ new ChannelAddress(this.meterId, "ActivePowerL2"),
+ new ChannelAddress(this.meterId, "ActivePowerL3"),
];
}
protected override onCurrentData(currentData: CurrentData) {
const activePowerArray: number[] = [
- currentData.allComponents[this.meterId + '/ActivePowerL1'],
- currentData.allComponents[this.meterId + '/ActivePowerL2'],
- currentData.allComponents[this.meterId + '/ActivePowerL3'],
+ currentData.allComponents[this.meterId + "/ActivePowerL1"],
+ currentData.allComponents[this.meterId + "/ActivePowerL2"],
+ currentData.allComponents[this.meterId + "/ActivePowerL3"],
];
- const name: string[] = ['L1', 'L2', 'L3'];
+ const name: string[] = ["L1", "L2", "L3"];
this.mostStressedPhase.next({
@@ -57,8 +57,8 @@ export class Controller_Asymmetric_PeakShavingComponent extends AbstractFlatWidg
value: Math.max(...activePowerArray, 0),
});
- this.peakShavingPower = this.component.properties['peakShavingPower'];
- this.rechargePower = this.component.properties['rechargePower'];
+ this.peakShavingPower = this.component.properties["peakShavingPower"];
+ this.rechargePower = this.component.properties["rechargePower"];
}
}
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.html b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.html
index a25fdfa4fce..ebcb86c320f 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.html
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.html
@@ -121,4 +121,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.ts b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.ts
index 327a63386d6..d00c47f25d5 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Asymmetric/modal/modal.component.ts
@@ -1,20 +1,20 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Subject } from 'rxjs';
-import { Edge, EdgeConfig, Service, Websocket } from '../../../../../../shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Subject } from "rxjs";
+import { Edge, EdgeConfig, Service, Websocket } from "../../../../../../shared/shared";
@Component({
- selector: 'asymmetricpeakshaving-modal',
- templateUrl: './modal.component.html',
+ selector: "asymmetricpeakshaving-modal",
+ templateUrl: "./modal.component.html",
})
export class Controller_Asymmetric_PeakShavingModalComponent implements OnInit {
@Input({ required: true }) protected component!: EdgeConfig.Component;
@Input({ required: true }) protected edge!: Edge;
- @Input({ required: true }) protected mostStressedPhase!: Subject<{ name: 'L1' | 'L2' | 'L3' | '', value: number }>;
+ @Input({ required: true }) protected mostStressedPhase!: Subject<{ name: "L1" | "L2" | "L3" | "", value: number }>;
public formGroup: FormGroup;
public loading: boolean = false;
@@ -30,11 +30,11 @@ export class Controller_Asymmetric_PeakShavingModalComponent implements OnInit {
ngOnInit() {
this.formGroup = this.formBuilder.group({
peakShavingPower: new FormControl(this.component.properties.peakShavingPower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
rechargePower: new FormControl(this.component.properties.rechargePower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
});
@@ -42,9 +42,9 @@ export class Controller_Asymmetric_PeakShavingModalComponent implements OnInit {
applyChanges() {
if (this.edge != null) {
- if (this.edge.roleIsAtLeast('owner')) {
- if (this.formGroup.controls['peakShavingPower'].valid && this.formGroup.controls['rechargePower'].valid) {
- if (this.formGroup.controls['peakShavingPower'].value >= this.formGroup.controls['rechargePower'].value) {
+ if (this.edge.roleIsAtLeast("owner")) {
+ if (this.formGroup.controls["peakShavingPower"].valid && this.formGroup.controls["rechargePower"].valid) {
+ if (this.formGroup.controls["peakShavingPower"].value >= this.formGroup.controls["rechargePower"].value) {
const updateComponentArray = [];
Object.keys(this.formGroup.controls).forEach((element, index) => {
if (this.formGroup.controls[element].dirty) {
@@ -56,23 +56,23 @@ export class Controller_Asymmetric_PeakShavingModalComponent implements OnInit {
this.component.properties.peakShavingPower = this.formGroup.value.peakShavingPower;
this.component.properties.rechargePower = this.formGroup.value.rechargePower;
this.loading = false;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
- this.formGroup.controls['peakShavingPower'].setValue(this.component.properties.peakShavingPower);
- this.formGroup.controls['rechargePower'].setValue(this.component.properties.rechargePower);
+ this.formGroup.controls["peakShavingPower"].setValue(this.component.properties.peakShavingPower);
+ this.formGroup.controls["rechargePower"].setValue(this.component.properties.rechargePower);
this.loading = false;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
this.formGroup.markAsPristine();
} else {
- this.service.toast(this.translate.instant('Edge.Index.Widgets.Peakshaving.relationError'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Index.Widgets.Peakshaving.relationError"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.inputNotValid'), 'danger');
+ this.service.toast(this.translate.instant("General.inputNotValid"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.insufficientRights'), 'danger');
+ this.service.toast(this.translate.instant("General.insufficientRights"), "danger");
}
}
}
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.html b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.html
index f5b77fe7087..1ae94833bb1 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.html
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.html
@@ -7,4 +7,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.ts b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.ts
index 3700366d4ad..330b0ed6a28 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.ts
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/Symmetric.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
-import { ChannelAddress, CurrentData, Utils } from '../../../../../shared/shared';
-import { Controller_Symmetric_PeakShavingModalComponent } from './modal/modal.component';
+import { ChannelAddress, CurrentData, Utils } from "../../../../../shared/shared";
+import { Controller_Symmetric_PeakShavingModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Controller_Symmetric_PeakShaving',
- templateUrl: './Symmetric.html',
+ selector: "Controller_Symmetric_PeakShaving",
+ templateUrl: "./Symmetric.html",
})
export class Controller_Symmetric_PeakShavingComponent extends AbstractFlatWidget {
@@ -29,19 +29,19 @@ export class Controller_Symmetric_PeakShavingComponent extends AbstractFlatWidge
protected override getChannelAddresses() {
return [
- new ChannelAddress(this.component.properties['meter.id'], 'ActivePower'),
- new ChannelAddress(this.componentId, '_PropertyPeakShavingPower'),
- new ChannelAddress(this.componentId, '_PropertyRechargePower'),
+ new ChannelAddress(this.component.properties["meter.id"], "ActivePower"),
+ new ChannelAddress(this.componentId, "_PropertyPeakShavingPower"),
+ new ChannelAddress(this.componentId, "_PropertyRechargePower"),
];
}
protected override onCurrentData(currentData: CurrentData) {
// Show 0 for negative activePower
- this.activePower = currentData.allComponents[this.component.properties['meter.id'] + '/ActivePower'] >= 0
- ? currentData.allComponents[this.component.properties['meter.id'] + '/ActivePower'] : 0;
- this.peakShavingPower = this.component.properties['peakShavingPower'];
- this.rechargePower = this.component.properties['rechargePower'];
+ this.activePower = currentData.allComponents[this.component.properties["meter.id"] + "/ActivePower"] >= 0
+ ? currentData.allComponents[this.component.properties["meter.id"] + "/ActivePower"] : 0;
+ this.peakShavingPower = this.component.properties["peakShavingPower"];
+ this.rechargePower = this.component.properties["rechargePower"];
}
}
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.html b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.html
index 4597da00889..fabeafa884e 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.html
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.html
@@ -71,4 +71,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.ts b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.ts
index b733e98f5b9..aa2f498dc60 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric/modal/modal.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from '../../../../../../shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "../../../../../../shared/shared";
@Component({
- selector: 'symmetricpeakshaving-modal',
- templateUrl: './modal.component.html',
+ selector: "symmetricpeakshaving-modal",
+ templateUrl: "./modal.component.html",
})
export class Controller_Symmetric_PeakShavingModalComponent implements OnInit {
@@ -29,11 +29,11 @@ export class Controller_Symmetric_PeakShavingModalComponent implements OnInit {
ngOnInit() {
this.formGroup = this.formBuilder.group({
peakShavingPower: new FormControl(this.component.properties.peakShavingPower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
rechargePower: new FormControl(this.component.properties.rechargePower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
});
@@ -41,9 +41,9 @@ export class Controller_Symmetric_PeakShavingModalComponent implements OnInit {
applyChanges() {
if (this.edge != null) {
- if (this.edge.roleIsAtLeast('owner')) {
- const peakShavingPower = this.formGroup.controls['peakShavingPower'];
- const rechargePower = this.formGroup.controls['rechargePower'];
+ if (this.edge.roleIsAtLeast("owner")) {
+ const peakShavingPower = this.formGroup.controls["peakShavingPower"];
+ const rechargePower = this.formGroup.controls["rechargePower"];
if (peakShavingPower.valid && rechargePower.valid) {
if (peakShavingPower.value >= rechargePower.value) {
const updateComponentArray = [];
@@ -57,23 +57,23 @@ export class Controller_Symmetric_PeakShavingModalComponent implements OnInit {
this.component.properties.peakShavingPower = peakShavingPower.value;
this.component.properties.rechargePower = rechargePower.value;
this.loading = false;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
peakShavingPower.setValue(this.component.properties.peakShavingPower);
rechargePower.setValue(this.component.properties.rechargePower);
this.loading = false;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
this.formGroup.markAsPristine();
} else {
- this.service.toast(this.translate.instant('Edge.Index.Widgets.Peakshaving.relationError'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Index.Widgets.Peakshaving.relationError"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.inputNotValid'), 'danger');
+ this.service.toast(this.translate.instant("General.inputNotValid"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.insufficientRights'), 'danger');
+ this.service.toast(this.translate.instant("General.insufficientRights"), "danger");
}
}
}
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.html b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.html
index 59ae34dcc6a..20ba62c9fe4 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.html
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.html
@@ -5,4 +5,4 @@
[converter]="CONVERT_WATT_TO_KILOWATT" [value]="peakShavingPower">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.ts b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.ts
index 6d8ed6784c2..22c4eb19193 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.ts
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
-import { ChannelAddress, CurrentData, Utils } from '../../../../../shared/shared';
-import { Controller_Symmetric_TimeSlot_PeakShavingModalComponent } from './modal/modal.component';
+import { ChannelAddress, CurrentData, Utils } from "../../../../../shared/shared";
+import { Controller_Symmetric_TimeSlot_PeakShavingModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Controller_Symmetric_TimeSlot_PeakShaving',
- templateUrl: './Symmetric_TimeSlot.html',
+ selector: "Controller_Symmetric_TimeSlot_PeakShaving",
+ templateUrl: "./Symmetric_TimeSlot.html",
})
export class Controller_Symmetric_TimeSlot_PeakShavingComponent extends AbstractFlatWidget {
@@ -34,18 +34,18 @@ export class Controller_Symmetric_TimeSlot_PeakShavingComponent extends Abstract
protected override getChannelAddresses() {
return [
- new ChannelAddress(this.component.properties['meter.id'], 'ActivePower'),
- new ChannelAddress(this.componentId, '_PropertyPeakShavingPower'),
- new ChannelAddress(this.componentId, '_PropertyRechargePower'),
+ new ChannelAddress(this.component.properties["meter.id"], "ActivePower"),
+ new ChannelAddress(this.componentId, "_PropertyPeakShavingPower"),
+ new ChannelAddress(this.componentId, "_PropertyRechargePower"),
];
}
protected override onCurrentData(currentData: CurrentData) {
// activePower is 0 for negative Values
- this.activePower = currentData.allComponents[this.component.properties['meter.id'] + '/ActivePower'] >= 0
- ? currentData.allComponents[this.component.properties['meter.id'] + '/ActivePower'] : 0;
- this.peakShavingPower = this.component.properties['peakShavingPower'];
- this.rechargePower = this.component.properties['rechargePower'];
+ this.activePower = currentData.allComponents[this.component.properties["meter.id"] + "/ActivePower"] >= 0
+ ? currentData.allComponents[this.component.properties["meter.id"] + "/ActivePower"] : 0;
+ this.peakShavingPower = this.component.properties["peakShavingPower"];
+ this.rechargePower = this.component.properties["rechargePower"];
}
}
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.html b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.html
index 53301087624..a143c88db41 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.html
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.html
@@ -207,4 +207,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.ts b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.ts
index 3655790047f..21f16820d4b 100644
--- a/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from '../../../../../../shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "../../../../../../shared/shared";
@Component({
- selector: 'timeslotpeakshaving-modal',
- templateUrl: './modal.component.html',
+ selector: "timeslotpeakshaving-modal",
+ templateUrl: "./modal.component.html",
})
export class Controller_Symmetric_TimeSlot_PeakShavingModalComponent implements OnInit {
@@ -30,29 +30,29 @@ export class Controller_Symmetric_TimeSlot_PeakShavingModalComponent implements
ngOnInit() {
this.formGroup = this.formBuilder.group({
peakShavingPower: new FormControl(this.component.properties.peakShavingPower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
rechargePower: new FormControl(this.component.properties.rechargePower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
slowChargePower: new FormControl((this.component.properties.slowChargePower) * -1),
slowChargeStartTime: new FormControl(this.component.properties.slowChargeStartTime, Validators.compose([
- Validators.pattern('^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$'),
+ Validators.pattern("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$"),
Validators.required,
])),
startDate: new FormControl(this.component.properties.startDate, Validators.compose([
- Validators.pattern('^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)[0-9]{2}$'),
+ Validators.pattern("^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)[0-9]{2}$"),
Validators.required,
])),
startTime: new FormControl(this.component.properties.startTime, Validators.compose([
- Validators.pattern('^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$'),
+ Validators.pattern("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$"),
Validators.required,
])),
endDate: new FormControl(this.component.properties.endDate),
endTime: new FormControl(this.component.properties.endTime, Validators.compose([
- Validators.pattern('^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$'),
+ Validators.pattern("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$"),
Validators.required,
])),
monday: new FormControl(this.component.properties.monday),
@@ -67,15 +67,15 @@ export class Controller_Symmetric_TimeSlot_PeakShavingModalComponent implements
applyChanges() {
if (this.edge != null) {
- if (this.edge.roleIsAtLeast('owner')) {
- const peakShavingPower = this.formGroup.controls['peakShavingPower'];
- const rechargePower = this.formGroup.controls['rechargePower'];
+ if (this.edge.roleIsAtLeast("owner")) {
+ const peakShavingPower = this.formGroup.controls["peakShavingPower"];
+ const rechargePower = this.formGroup.controls["rechargePower"];
if (peakShavingPower.valid && rechargePower.valid) {
if (peakShavingPower.value >= rechargePower.value) {
const updateComponentArray = [];
Object.keys(this.formGroup.controls).forEach((element, index) => {
if (this.formGroup.controls[element].dirty) {
- if (Object.keys(this.formGroup.controls)[index] == 'slowChargePower') {
+ if (Object.keys(this.formGroup.controls)[index] == "slowChargePower") {
updateComponentArray.push({ name: Object.keys(this.formGroup.controls)[index], value: (this.formGroup.controls[element].value) * -1 });
} else {
updateComponentArray.push({ name: Object.keys(this.formGroup.controls)[index], value: this.formGroup.controls[element].value });
@@ -87,23 +87,23 @@ export class Controller_Symmetric_TimeSlot_PeakShavingModalComponent implements
this.component.properties.peakShavingPower = peakShavingPower.value;
this.component.properties.rechargePower = rechargePower.value;
this.loading = false;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
peakShavingPower.setValue(this.component.properties.peakShavingPower);
rechargePower.setValue(this.component.properties.rechargePower);
this.loading = false;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
this.formGroup.markAsPristine();
} else {
- this.service.toast(this.translate.instant('Edge.Index.Widgets.Peakshaving.relationError'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Index.Widgets.Peakshaving.relationError"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.inputNotValid'), 'danger');
+ this.service.toast(this.translate.instant("General.inputNotValid"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.insufficientRights'), 'danger');
+ this.service.toast(this.translate.instant("General.insufficientRights"), "danger");
}
}
}
diff --git a/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.html b/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.html
index bad2fcee243..b3c997ef533 100644
--- a/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.html
+++ b/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.html
@@ -2,4 +2,4 @@
[icon]="{name: 'radio-button-off-outline', color: 'dark'}">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.ts b/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.ts
index 0c64f49d90c..091f47eff6c 100644
--- a/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.ts
+++ b/ui/src/app/edge/live/Io/Api_DigitalInput/Io_Api_DigitalInput.ts
@@ -1,12 +1,12 @@
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { EdgeConfig } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { EdgeConfig } from "src/app/shared/shared";
-import { Io_Api_DigitalInput_ModalComponent } from './modal/modal.component';
+import { Io_Api_DigitalInput_ModalComponent } from "./modal/modal.component";
@Component({
- selector: 'Io_Api_DigitalInput',
- templateUrl: './Io_Api_DigitalInput.html',
+ selector: "Io_Api_DigitalInput",
+ templateUrl: "./Io_Api_DigitalInput.html",
})
export class Io_Api_DigitalInputComponent extends AbstractFlatWidget {
diff --git a/ui/src/app/edge/live/Io/Api_DigitalInput/modal/modal.component.ts b/ui/src/app/edge/live/Io/Api_DigitalInput/modal/modal.component.ts
index 5169a6f4ae5..199010f1217 100644
--- a/ui/src/app/edge/live/Io/Api_DigitalInput/modal/modal.component.ts
+++ b/ui/src/app/edge/live/Io/Api_DigitalInput/modal/modal.component.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { Edge, Service, EdgeConfig, Websocket, ChannelAddress, EdgePermission } from '../../../../../shared/shared';
-import { ModalController } from '@ionic/angular';
-import { Channel } from 'src/app/shared/jsonrpc/response/getChannelsOfComponentResponse';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { JsonrpcRequest, JsonrpcResponseSuccess } from 'src/app/shared/jsonrpc/base';
+import { Component, Input, OnDestroy, OnInit } from "@angular/core";
+import { ModalController } from "@ionic/angular";
+import { JsonrpcRequest, JsonrpcResponseSuccess } from "src/app/shared/jsonrpc/base";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { Channel } from "src/app/shared/jsonrpc/response/getChannelsOfComponentResponse";
+import { ChannelAddress, Edge, EdgeConfig, EdgePermission, Service, Websocket } from "../../../../../shared/shared";
@Component({
- selector: 'Io_Api_DigitalInputModal',
- templateUrl: './modal.component.html',
+ selector: "Io_Api_DigitalInputModal",
+ templateUrl: "./modal.component.html",
})
export class Io_Api_DigitalInput_ModalComponent implements OnInit, OnDestroy {
private static readonly SELECTOR = "Io_Api_DigitalInput_ModalComponent";
@@ -46,13 +46,13 @@ export class Io_Api_DigitalInput_ModalComponent implements OnInit, OnDestroy {
componentAlias: e.alias,
channels: Object.entries(e.channels)
.filter(([key, value]) => {
- if (value.accessMode !== 'RO') {
+ if (value.accessMode !== "RO") {
return false;
}
- if (value.type !== 'BOOLEAN') {
+ if (value.type !== "BOOLEAN") {
return false;
}
- if (key === '_PropertyEnabled') {
+ if (key === "_PropertyEnabled") {
return false;
}
return true;
@@ -65,7 +65,7 @@ export class Io_Api_DigitalInput_ModalComponent implements OnInit, OnDestroy {
}
const response = await this.edge.sendRequest(this.websocket, new ComponentJsonApiRequest({
- componentId: '_componentManager',
+ componentId: "_componentManager",
payload: new GetDigitalInputChannelsOfComponentsRequest({ componentIds: this.ioComponents.map(e => e.id) }),
}));
return response.result.channelsPerComponent.map(e => {
diff --git a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.html b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.html
index da1d7b2a74a..7743c265a65 100644
--- a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.html
+++ b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.html
@@ -13,4 +13,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.ts b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.ts
index 830159e6d27..0fa1fbf2ea2 100644
--- a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.ts
+++ b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
-import { ChannelAddress, CurrentData, EdgeConfig, Utils } from '../../../../shared/shared';
-import { Evcs_Api_ClusterModalComponent } from './modal/evcsCluster-modal.page';
+import { ChannelAddress, CurrentData, EdgeConfig, Utils } from "../../../../shared/shared";
+import { Evcs_Api_ClusterModalComponent } from "./modal/evcsCluster-modal.page";
@Component({
- selector: 'Evcs_Api_Cluster',
- templateUrl: './Evcs_Api_Cluster.html',
+ selector: "Evcs_Api_Cluster",
+ templateUrl: "./Evcs_Api_Cluster.html",
})
export class Evcs_Api_ClusterComponent extends AbstractFlatWidget {
@@ -36,7 +36,7 @@ export class Evcs_Api_ClusterComponent extends AbstractFlatWidget {
protected override getChannelAddresses() {
this.evcsIdsInCluster = this.config.components[this.componentId].properties["evcs.ids"];
- const nature = 'io.openems.edge.evcs.api.Evcs';
+ const nature = "io.openems.edge.evcs.api.Evcs";
for (const component of this.config.getComponentsImplementingNature(nature)) {
if (this.evcsIdsInCluster.includes(component.id)) {
@@ -45,14 +45,14 @@ export class Evcs_Api_ClusterComponent extends AbstractFlatWidget {
}
}
this.channelAddresses.push(
- new ChannelAddress(this.componentId, 'ChargePower'),
- new ChannelAddress(this.componentId, 'Phases'),
- new ChannelAddress(this.componentId, 'Plug'),
- new ChannelAddress(this.componentId, 'Status'),
- new ChannelAddress(this.componentId, 'State'),
- new ChannelAddress(this.componentId, 'EnergySession'),
- new ChannelAddress(this.componentId, 'MinimumHardwarePower'),
- new ChannelAddress(this.componentId, 'MaximumHardwarePower'),
+ new ChannelAddress(this.componentId, "ChargePower"),
+ new ChannelAddress(this.componentId, "Phases"),
+ new ChannelAddress(this.componentId, "Plug"),
+ new ChannelAddress(this.componentId, "Status"),
+ new ChannelAddress(this.componentId, "State"),
+ new ChannelAddress(this.componentId, "EnergySession"),
+ new ChannelAddress(this.componentId, "MinimumHardwarePower"),
+ new ChannelAddress(this.componentId, "MaximumHardwarePower"),
);
return this.channelAddresses;
}
@@ -60,8 +60,8 @@ export class Evcs_Api_ClusterComponent extends AbstractFlatWidget {
protected override onCurrentData(currentData: CurrentData) {
this.evcsComponent = this.config.getComponent(this.componentId);
- this.alias = this.config.components[this.componentId].properties.alias ?? 'Edge.Index.Widgets.EVCS.chargingStationCluster';
- this.isConnectionSuccessful = currentData.allComponents[this.componentId + '/State'] != 3 ? true : false;
+ this.alias = this.config.components[this.componentId].properties.alias ?? "Edge.Index.Widgets.EVCS.chargingStationCluster";
+ this.isConnectionSuccessful = currentData.allComponents[this.componentId + "/State"] != 3 ? true : false;
// Initialise the Map with all evcss
this.evcssInCluster.forEach(evcs => {
@@ -72,8 +72,8 @@ export class Evcs_Api_ClusterComponent extends AbstractFlatWidget {
// Adds the controllers to the each charging stations
controllers.forEach(controller => {
- if (this.evcsIdsInCluster.includes(controller.properties['evcs.id'])) {
- this.evcsMap[controller.properties['evcs.id']] = controller;
+ if (this.evcsIdsInCluster.includes(controller.properties["evcs.id"])) {
+ this.evcsMap[controller.properties["evcs.id"]] = controller;
}
});
@@ -81,16 +81,16 @@ export class Evcs_Api_ClusterComponent extends AbstractFlatWidget {
private fillChannelAddresses(componentId: string, channelAddresses: ChannelAddress[]) {
channelAddresses.push(
- new ChannelAddress(componentId, 'ChargePower'),
- new ChannelAddress(componentId, 'MaximumHardwarePower'),
- new ChannelAddress(componentId, 'MinimumHardwarePower'),
- new ChannelAddress(componentId, 'MaximumPower'),
- new ChannelAddress(componentId, 'Phases'),
- new ChannelAddress(componentId, 'Plug'),
- new ChannelAddress(componentId, 'Status'),
- new ChannelAddress(componentId, 'State'),
- new ChannelAddress(componentId, 'EnergySession'),
- new ChannelAddress(componentId, 'Alias'),
+ new ChannelAddress(componentId, "ChargePower"),
+ new ChannelAddress(componentId, "MaximumHardwarePower"),
+ new ChannelAddress(componentId, "MinimumHardwarePower"),
+ new ChannelAddress(componentId, "MaximumPower"),
+ new ChannelAddress(componentId, "Phases"),
+ new ChannelAddress(componentId, "Plug"),
+ new ChannelAddress(componentId, "Status"),
+ new ChannelAddress(componentId, "State"),
+ new ChannelAddress(componentId, "EnergySession"),
+ new ChannelAddress(componentId, "Alias"),
);
}
diff --git a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.html b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.html
index 7c11c16ed1a..dea298a6b67 100644
--- a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.html
+++ b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.html
@@ -4,4 +4,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.ts b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.ts
index fec7d8e1ebb..f58fe7b24a2 100644
--- a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.ts
+++ b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import * as Chart from 'chart.js';
-import { Component, Input, OnInit, OnChanges } from '@angular/core';
-import { CurrentData } from 'src/app/shared/components/edge/currentdata';
-import { Data } from 'src/app/edge/history/shared';
-import { EdgeConfig, Edge } from 'src/app/shared/shared';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
+import { Component, Input, OnChanges, OnInit } from "@angular/core";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import * as Chart from "chart.js";
+import { Data } from "src/app/edge/history/shared";
+import { CurrentData } from "src/app/shared/components/edge/currentdata";
+import { Edge, EdgeConfig } from "src/app/shared/shared";
@Component({
selector: EvcsChartComponent.SELECTOR,
- templateUrl: './evcs.chart.html',
+ templateUrl: "./evcs.chart.html",
})
export class EvcsChartComponent implements OnInit, OnChanges {
@@ -34,8 +34,8 @@ export class EvcsChartComponent implements OnInit, OnChanges {
getMaxPower() {
const minPower = 22;
- let maxHW = this.currentData[this.componentId + '/MaximumHardwarePower'];
- let chargePower = this.currentData[this.componentId + '/ChargePower'];
+ let maxHW = this.currentData[this.componentId + "/MaximumHardwarePower"];
+ let chargePower = this.currentData[this.componentId + "/ChargePower"];
maxHW = maxHW == null ? minPower : maxHW / 1000;
chargePower = chargePower == null ? 0 : chargePower / 1000;
@@ -47,9 +47,9 @@ export class EvcsChartComponent implements OnInit, OnChanges {
this.options = DEFAULT_BAR_CHART_OPTIONS;
this.options.scales.yAxes[0].ticks.max = this.getMaxPower();
- this.labels = ['Ladeleistung'];
+ this.labels = ["Ladeleistung"];
this.datasets = [
- { data: [], label: '' },
+ { data: [], label: "" },
];
}
@@ -67,7 +67,7 @@ export class EvcsChartComponent implements OnInit, OnChanges {
this.loading = true;
let index = 0;
for (const evcsId in this.evcsMap) {
- const chargePower = this.edge.currentData.value.channel[evcsId + '/ChargePower'];
+ const chargePower = this.edge.currentData.value.channel[evcsId + "/ChargePower"];
const chargePowerKW = chargePower / 1000.0;
const alias = this.evcsConfigMap[evcsId].properties.alias;
if (this.datasets[index] == null) {
@@ -91,7 +91,7 @@ export class EvcsChartComponent implements OnInit, OnChanges {
export const DEFAULT_BAR_CHART_OPTIONS: BarChartOptions = {
maintainAspectRatio: false,
legend: {
- position: 'bottom',
+ position: "bottom",
},
elements: {
point: {
@@ -105,7 +105,7 @@ export const DEFAULT_BAR_CHART_OPTIONS: BarChartOptions = {
},
},
hover: {
- mode: 'point',
+ mode: "point",
intersect: true,
},
scales: {
@@ -125,30 +125,30 @@ export const DEFAULT_BAR_CHART_OPTIONS: BarChartOptions = {
}],
},
tooltips: {
- mode: 'index',
+ mode: "index",
intersect: false,
- axis: 'x',
+ axis: "x",
title: "Ladeleistung",
callbacks: {
label(tooltipItems: BarChartTooltipItem, data: Data): string {
let value: number = tooltipItems.yLabel; //.toFixed(2);
value = parseFloat(value.toFixed(2));
const label = data.datasets[tooltipItems.datasetIndex].label;
- return label + ": " + value.toLocaleString('de-DE') + " kW";
+ return label + ": " + value.toLocaleString("de-DE") + " kW";
},
},
},
annotation: {
annotations: [{
- type: 'line',
- mode: 'horizontal',
- yScaleID: 'y-axis-0',
+ type: "line",
+ mode: "horizontal",
+ yScaleID: "y-axis-0",
value: 33,
- borderColor: 'green',
+ borderColor: "green",
borderWidth: 4,
label: {
enabled: true,
- content: 'Test label',
+ content: "Test label",
},
}],
},
diff --git a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.html b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.html
index 4d5e81a8835..e73fe3f8906 100644
--- a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.html
+++ b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.html
@@ -327,4 +327,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.ts b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.ts
index 13b2dfaeb2d..3fbac0a50c9 100644
--- a/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.ts
+++ b/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { ActivatedRoute, Router } from '@angular/router';
-import { Component, Input, OnInit, ViewChild } from '@angular/core';
-import { Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
-import { IonReorderGroup, ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
+import { Component, Input, OnInit, ViewChild } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { IonReorderGroup, ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
-type ChargeMode = 'FORCE_CHARGE' | 'EXCESS_POWER';
-type Priority = 'CAR' | 'STORAGE';
+type ChargeMode = "FORCE_CHARGE" | "EXCESS_POWER";
+type Priority = "CAR" | "STORAGE";
@Component({
- selector: 'Evcs_Api_Cluster-modal',
- templateUrl: './evcsCluster-modal.page.html',
+ selector: "Evcs_Api_Cluster-modal",
+ templateUrl: "./evcsCluster-modal.page.html",
})
export class Evcs_Api_ClusterModalComponent implements OnInit {
@@ -25,7 +25,7 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
public swiperIndex: number = 0;
public slideOpts = {
noSwiping: true,
- noSwipingClass: 'swiper-no-swiping',
+ noSwipingClass: "swiper-no-swiping",
//noSwipingSelector: 'ion-range, ion-toggle',
initialSlide: 0,
speed: 1000,
@@ -71,13 +71,13 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, this.config.id, [
- { name: 'evcs.ids', value: newListOrder },
+ { name: "evcs.ids", value: newListOrder },
]).then(response => {
this.config.properties.chargeMode = newListOrder;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.config.properties.chargeMode = oldListOrder;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -97,23 +97,23 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
let newChargeMode: ChargeMode;
switch (event.detail.value) {
- case 'FORCE_CHARGE':
- newChargeMode = 'FORCE_CHARGE';
+ case "FORCE_CHARGE":
+ newChargeMode = "FORCE_CHARGE";
break;
- case 'EXCESS_POWER':
- newChargeMode = 'EXCESS_POWER';
+ case "EXCESS_POWER":
+ newChargeMode = "EXCESS_POWER";
break;
}
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, currentController.id, [
- { name: 'chargeMode', value: newChargeMode },
+ { name: "chargeMode", value: newChargeMode },
]).then(response => {
currentController.properties.chargeMode = newChargeMode;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
currentController.properties.chargeMode = oldChargeMode;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -126,23 +126,23 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
let newPriority: Priority;
switch (event.detail.value) {
- case 'CAR':
- newPriority = 'CAR';
+ case "CAR":
+ newPriority = "CAR";
break;
- case 'STORAGE':
- newPriority = 'STORAGE';
+ case "STORAGE":
+ newPriority = "STORAGE";
break;
}
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, currentController.id, [
- { name: 'priority', value: newPriority },
+ { name: "priority", value: newPriority },
]).then(response => {
currentController.properties.priority = newPriority;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
currentController.properties.priority = oldPriority;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -160,13 +160,13 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, currentController.id, [
- { name: 'forceChargeMinPower', value: newMinChargePower },
+ { name: "forceChargeMinPower", value: newMinChargePower },
]).then(response => {
currentController.properties.forceChargeMinPower = newMinChargePower;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
currentController.properties.forceChargeMinPower = oldMinChargePower;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -183,13 +183,13 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, currentController.id, [
- { name: 'defaultChargeMinPower', value: newMinChargePower },
+ { name: "defaultChargeMinPower", value: newMinChargePower },
]).then(response => {
currentController.properties.defaultChargeMinPower = newMinChargePower;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
currentController.properties.defaultChargeMinPower = oldMinChargePower;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -215,13 +215,13 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
}
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, currentController.id, [
- { name: 'defaultChargeMinPower', value: newMinChargePower },
+ { name: "defaultChargeMinPower", value: newMinChargePower },
]).then(response => {
currentController.properties.defaultChargeMinPower = newMinChargePower;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
currentController.properties.defaultChargeMinPower = oldMinChargePower;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -238,13 +238,13 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
const newChargingState = !oldChargingState;
if (this.edge != null) {
this.edge.updateComponentConfig(this.websocket, currentController.id, [
- { name: 'enabledCharging', value: newChargingState },
+ { name: "enabledCharging", value: newChargingState },
]).then(response => {
currentController.properties.enabledCharging = newChargingState;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
currentController.properties.enabledCharging = oldChargingState;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
@@ -259,7 +259,7 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
getState(power: number, state: number, plug: number, currentController: EdgeConfig.Component) {
if (currentController != null) {
if (currentController.properties.enabledCharging != null && currentController.properties.enabledCharging == false) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.chargingStationDeactivated');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.chargingStationDeactivated");
}
}
if (power == null || power == 0) {
@@ -269,31 +269,33 @@ export class Evcs_Api_ClusterModalComponent implements OnInit {
if (this.chargePlug == null) {
if (this.chargeState == null) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.notCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notCharging");
}
} else if (this.chargePlug != ChargePlug.PLUGGED_ON_EVCS_AND_ON_EV_AND_LOCKED) {
- return this.translate.instant('Edge.Index.Widgets.EVCS.cableNotConnected');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.cableNotConnected");
}
switch (this.chargeState) {
case ChargeState.STARTING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.starting');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.starting");
case ChargeState.UNDEFINED:
case ChargeState.ERROR:
- return this.translate.instant('Edge.Index.Widgets.EVCS.error');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.error");
case ChargeState.READY_FOR_CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.readyForCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.readyForCharging");
case ChargeState.NOT_READY_FOR_CHARGING:
- return this.translate.instant('Edge.Index.Widgets.EVCS.notReadyForCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notReadyForCharging");
case ChargeState.AUTHORIZATION_REJECTED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.notCharging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.notCharging");
case ChargeState.ENERGY_LIMIT_REACHED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.chargeLimitReached');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.chargeLimitReached");
case ChargeState.CHARGING_FINISHED:
- return this.translate.instant('Edge.Index.Widgets.EVCS.carFull');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.carFull");
+ default:
+ return this.translate.instant("Edge.Index.Widgets.EVCS.charging");
}
}
- return this.translate.instant('Edge.Index.Widgets.EVCS.charging');
+ return this.translate.instant("Edge.Index.Widgets.EVCS.charging");
}
/**
diff --git a/ui/src/app/edge/live/common/autarchy/Common_Autarchy.ts b/ui/src/app/edge/live/common/autarchy/Common_Autarchy.ts
index 8aa0d3022b4..e76088f26bf 100644
--- a/ui/src/app/edge/live/common/autarchy/Common_Autarchy.ts
+++ b/ui/src/app/edge/live/common/autarchy/Common_Autarchy.ts
@@ -1,8 +1,8 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/common/autarchy/flat/flat.html b/ui/src/app/edge/live/common/autarchy/flat/flat.html
index 6ad3ab9290a..1b425accf5e 100644
--- a/ui/src/app/edge/live/common/autarchy/flat/flat.html
+++ b/ui/src/app/edge/live/common/autarchy/flat/flat.html
@@ -4,4 +4,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/common/autarchy/flat/flat.ts b/ui/src/app/edge/live/common/autarchy/flat/flat.ts
index 085e4388119..e9620384f0e 100644
--- a/ui/src/app/edge/live/common/autarchy/flat/flat.ts
+++ b/ui/src/app/edge/live/common/autarchy/flat/flat.ts
@@ -1,12 +1,12 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, Utils } from 'src/app/shared/shared';
-import { ModalComponent } from '../modal/modal';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'Common_Autarchy',
- templateUrl: './flat.html',
+ selector: "Common_Autarchy",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -21,15 +21,15 @@ export class FlatComponent extends AbstractFlatWidget {
protected override getChannelAddresses(): ChannelAddress[] {
return [
- new ChannelAddress('_sum', 'GridActivePower'),
- new ChannelAddress('_sum', 'ConsumptionActivePower'),
+ new ChannelAddress("_sum", "GridActivePower"),
+ new ChannelAddress("_sum", "ConsumptionActivePower"),
];
}
protected override onCurrentData(currentData: CurrentData) {
this.percentageValue = Utils.calculateAutarchy(
- currentData.allComponents['_sum/GridActivePower'],
- currentData.allComponents['_sum/ConsumptionActivePower'],
+ currentData.allComponents["_sum/GridActivePower"],
+ currentData.allComponents["_sum/ConsumptionActivePower"],
);
}
diff --git a/ui/src/app/edge/live/common/autarchy/modal/modal.spec.ts b/ui/src/app/edge/live/common/autarchy/modal/modal.spec.ts
index 4c8b585b195..d35e4c7ea81 100644
--- a/ui/src/app/edge/live/common/autarchy/modal/modal.spec.ts
+++ b/ui/src/app/edge/live/common/autarchy/modal/modal.spec.ts
@@ -12,11 +12,11 @@ export function expectView(testContext: TestContext, viewContext: OeFormlyViewTe
expect(generatedView).toEqual(view);
}
-describe('Autarchy - Modal', () => {
+describe("Autarchy - Modal", () => {
let TEST_CONTEXT: TestContext;
beforeEach(async () => TEST_CONTEXT = await sharedSetup());
- it('generateView()', () => {
+ it("generateView()", () => {
{
expectView(TEST_CONTEXT, VIEW_CONTEXT, {
title: "Autarkie",
diff --git a/ui/src/app/edge/live/common/autarchy/modal/modal.ts b/ui/src/app/edge/live/common/autarchy/modal/modal.ts
index 8f9fa5aa219..15ed4d35841 100644
--- a/ui/src/app/edge/live/common/autarchy/modal/modal.ts
+++ b/ui/src/app/edge/live/common/autarchy/modal/modal.ts
@@ -1,19 +1,19 @@
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractFormlyComponent, OeFormlyView } from 'src/app/shared/components/shared/oe-formly-component';
-import { EdgeConfig } from 'src/app/shared/shared';
-import { Role } from 'src/app/shared/type/role';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractFormlyComponent, OeFormlyView } from "src/app/shared/components/shared/oe-formly-component";
+import { EdgeConfig } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
@Component({
- templateUrl: '../../../../../shared/components/formly/formly-field-modal/template.html',
+ templateUrl: "../../../../../shared/components/formly/formly-field-modal/template.html",
})
export class ModalComponent extends AbstractFormlyComponent {
public static generateView(translate: TranslateService): OeFormlyView {
return {
- title: translate.instant('General.autarchy'),
+ title: translate.instant("General.autarchy"),
lines: [{
- type: 'info-line',
+ type: "info-line",
name: translate.instant("Edge.Index.Widgets.autarchyInfo"),
}],
};
diff --git a/ui/src/app/edge/live/common/consumption/Common_Consumption.ts b/ui/src/app/edge/live/common/consumption/Common_Consumption.ts
index f685ef859cf..9b1b800de3e 100644
--- a/ui/src/app/edge/live/common/consumption/Common_Consumption.ts
+++ b/ui/src/app/edge/live/common/consumption/Common_Consumption.ts
@@ -1,8 +1,8 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/common/consumption/flat/flat.html b/ui/src/app/edge/live/common/consumption/flat/flat.html
index 4ac5da6b99d..761302becfe 100644
--- a/ui/src/app/edge/live/common/consumption/flat/flat.html
+++ b/ui/src/app/edge/live/common/consumption/flat/flat.html
@@ -35,4 +35,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/common/consumption/flat/flat.ts b/ui/src/app/edge/live/common/consumption/flat/flat.ts
index bcc6602c7f0..85b0069083f 100644
--- a/ui/src/app/edge/live/common/consumption/flat/flat.ts
+++ b/ui/src/app/edge/live/common/consumption/flat/flat.ts
@@ -1,12 +1,12 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, EdgeConfig, Utils } from 'src/app/shared/shared';
-import { ModalComponent } from '../modal/modal';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, EdgeConfig, Utils } from "src/app/shared/shared";
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'consumption',
- templateUrl: './flat.html',
+ selector: "consumption",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -27,12 +27,12 @@ export class FlatComponent extends AbstractFlatWidget {
protected override getChannelAddresses() {
const channelAddresses: ChannelAddress[] = [
- new ChannelAddress('_sum', 'ConsumptionActivePower'),
+ new ChannelAddress("_sum", "ConsumptionActivePower"),
// TODO should be moved to Modal
- new ChannelAddress('_sum', 'ConsumptionActivePowerL1'),
- new ChannelAddress('_sum', 'ConsumptionActivePowerL2'),
- new ChannelAddress('_sum', 'ConsumptionActivePowerL3'),
+ new ChannelAddress("_sum", "ConsumptionActivePowerL1"),
+ new ChannelAddress("_sum", "ConsumptionActivePowerL2"),
+ new ChannelAddress("_sum", "ConsumptionActivePowerL3"),
];
// Get consumptionMeterComponents
@@ -41,21 +41,21 @@ export class FlatComponent extends AbstractFlatWidget {
for (const component of this.consumptionMeters) {
channelAddresses.push(
- new ChannelAddress(component.id, 'ActivePower'),
- new ChannelAddress(component.id, 'ActivePowerL1'),
- new ChannelAddress(component.id, 'ActivePowerL2'),
- new ChannelAddress(component.id, 'ActivePowerL3'),
+ new ChannelAddress(component.id, "ActivePower"),
+ new ChannelAddress(component.id, "ActivePowerL1"),
+ new ChannelAddress(component.id, "ActivePowerL2"),
+ new ChannelAddress(component.id, "ActivePowerL3"),
);
}
// Get EVCSs
this.evcss = this.config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs")
- .filter(component => !(component.factoryId == 'Evcs.Cluster.SelfConsumption') &&
- !(component.factoryId == 'Evcs.Cluster.PeakShaving') && !component.isEnabled == false);
+ .filter(component => !(component.factoryId == "Evcs.Cluster.SelfConsumption") &&
+ !(component.factoryId == "Evcs.Cluster.PeakShaving") && !component.isEnabled == false);
for (const component of this.evcss) {
channelAddresses.push(
- new ChannelAddress(component.id, 'ChargePower'),
+ new ChannelAddress(component.id, "ChargePower"),
);
}
return channelAddresses;
@@ -65,20 +65,20 @@ export class FlatComponent extends AbstractFlatWidget {
this.evcsSumOfChargePower = 0;
let consumptionMetersSumOfActivePower: number = 0;
- this.sumActivePower = currentData.allComponents['_sum/ConsumptionActivePower'];
+ this.sumActivePower = currentData.allComponents["_sum/ConsumptionActivePower"];
// TODO move sums to Model
// Iterate over evcsComponents to get ChargePower for every component
for (const component of this.evcss) {
- if (currentData.allComponents[component.id + '/ChargePower']) {
- this.evcsSumOfChargePower += currentData.allComponents[component.id + '/ChargePower'];
+ if (currentData.allComponents[component.id + "/ChargePower"]) {
+ this.evcsSumOfChargePower += currentData.allComponents[component.id + "/ChargePower"];
}
}
// Iterate over evcsComponents to get ChargePower for every component
for (const component of this.consumptionMeters) {
- if (currentData.allComponents[component.id + '/ActivePower']) {
- consumptionMetersSumOfActivePower += currentData.allComponents[component.id + '/ActivePower'];
+ if (currentData.allComponents[component.id + "/ActivePower"]) {
+ consumptionMetersSumOfActivePower += currentData.allComponents[component.id + "/ActivePower"];
}
}
diff --git a/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts b/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts
index a0daa57a406..d81a191bf67 100644
--- a/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts
+++ b/ui/src/app/edge/live/common/consumption/modal/modal.spec.ts
@@ -6,19 +6,19 @@ import { sharedSetup } from "src/app/shared/components/shared/testing/utils.spec
import { expectView } from "./modal.constants.spec";
-describe('Consumption - Modal', () => {
+describe("Consumption - Modal", () => {
let TEST_CONTEXT;
beforeEach(async () => TEST_CONTEXT = await sharedSetup());
- it('generateView()', () => {
+ it("generateView()", () => {
// No evcs and consumptionMeters and negative ConsumptionActivePower
{
const VIEW_CONTEXT: OeFormlyViewTester.Context = {
- '_sum/ConsumptionActivePower': -1000,
- '_sum/ConsumptionActivePowerL1': -1000,
- '_sum/ConsumptionActivePowerL2': 1000,
- '_sum/ConsumptionActivePowerL3': -1000,
+ "_sum/ConsumptionActivePower": -1000,
+ "_sum/ConsumptionActivePowerL1": -1000,
+ "_sum/ConsumptionActivePowerL2": 1000,
+ "_sum/ConsumptionActivePowerL3": -1000,
};
const EMS = DummyConfig.from();
@@ -46,21 +46,21 @@ describe('Consumption - Modal', () => {
DummyConfig.Component.EVCS_KEBA_KECONTACT("evcs2", "Evcs 3"),
);
const VIEW_CONTEXT: OeFormlyViewTester.Context = {
- '_sum/ConsumptionActivePower': 1000,
- '_sum/ConsumptionActivePowerL1': 300,
- '_sum/ConsumptionActivePowerL2': 350,
- '_sum/ConsumptionActivePowerL3': 350,
- 'meter0/ActivePower': 1000,
- 'meter0/ActivePowerL1': 1000,
- 'meter0/ActivePowerL2': -1000,
- 'meter0/ActivePowerL3': 1000,
- 'meter1/ActivePower': null,
- 'meter1/ActivePowerL1': null,
- 'meter1/ActivePowerL2': null,
- 'meter1/ActivePowerL3': null,
- 'evcs0/ChargePower': 1000,
- 'evcs1/ChargePower': -1000,
- 'evcs2/ChargePower': null,
+ "_sum/ConsumptionActivePower": 1000,
+ "_sum/ConsumptionActivePowerL1": 300,
+ "_sum/ConsumptionActivePowerL2": 350,
+ "_sum/ConsumptionActivePowerL3": 350,
+ "meter0/ActivePower": 1000,
+ "meter0/ActivePowerL1": 1000,
+ "meter0/ActivePowerL2": -1000,
+ "meter0/ActivePowerL3": 1000,
+ "meter1/ActivePower": null,
+ "meter1/ActivePowerL1": null,
+ "meter1/ActivePowerL2": null,
+ "meter1/ActivePowerL3": null,
+ "evcs0/ChargePower": 1000,
+ "evcs1/ChargePower": -1000,
+ "evcs2/ChargePower": null,
};
expectView(EMS, VIEW_CONTEXT, TEST_CONTEXT, {
@@ -99,11 +99,11 @@ describe('Consumption - Modal', () => {
DummyConfig.Component.EVCS_KEBA_KECONTACT("evcs0", "Evcs"),
);
const VIEW_CONTEXT: OeFormlyViewTester.Context = {
- '_sum/ConsumptionActivePower': 1000,
- '_sum/ConsumptionActivePowerL1': 300,
- '_sum/ConsumptionActivePowerL2': 350,
- '_sum/ConsumptionActivePowerL3': 350,
- 'evcs0/ChargePower': 1000,
+ "_sum/ConsumptionActivePower": 1000,
+ "_sum/ConsumptionActivePowerL1": 300,
+ "_sum/ConsumptionActivePowerL2": 350,
+ "_sum/ConsumptionActivePowerL3": 350,
+ "evcs0/ChargePower": 1000,
};
expectView(EMS, VIEW_CONTEXT, TEST_CONTEXT, {
@@ -128,14 +128,14 @@ describe('Consumption - Modal', () => {
DummyConfig.Component.SOCOMEC_CONSUMPTION_METER("meter0", "Waermepumpe"),
);
const VIEW_CONTEXT: OeFormlyViewTester.Context = {
- '_sum/ConsumptionActivePower': 1000,
- '_sum/ConsumptionActivePowerL1': 300,
- '_sum/ConsumptionActivePowerL2': 350,
- '_sum/ConsumptionActivePowerL3': 350,
- 'meter0/ActivePower': 1000,
- 'meter0/ActivePowerL1': 1000,
- 'meter0/ActivePowerL2': -1000,
- 'meter0/ActivePowerL3': 1000,
+ "_sum/ConsumptionActivePower": 1000,
+ "_sum/ConsumptionActivePowerL1": 300,
+ "_sum/ConsumptionActivePowerL2": 350,
+ "_sum/ConsumptionActivePowerL3": 350,
+ "meter0/ActivePower": 1000,
+ "meter0/ActivePowerL1": 1000,
+ "meter0/ActivePowerL2": -1000,
+ "meter0/ActivePowerL3": 1000,
};
expectView(EMS, VIEW_CONTEXT, TEST_CONTEXT, {
diff --git a/ui/src/app/edge/live/common/consumption/modal/modal.ts b/ui/src/app/edge/live/common/consumption/modal/modal.ts
index 3ed6bfdbded..ccdcd9af819 100644
--- a/ui/src/app/edge/live/common/consumption/modal/modal.ts
+++ b/ui/src/app/edge/live/common/consumption/modal/modal.ts
@@ -1,23 +1,23 @@
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { TextIndentation } from 'src/app/shared/components/modal/modal-line/modal-line';
-import { Converter } from 'src/app/shared/components/shared/converter';
-import { Name } from 'src/app/shared/components/shared/name';
-import { AbstractFormlyComponent, OeFormlyField, OeFormlyView } from 'src/app/shared/components/shared/oe-formly-component';
-import { Phase } from 'src/app/shared/components/shared/phase';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { TextIndentation } from "src/app/shared/components/modal/modal-line/modal-line";
+import { Converter } from "src/app/shared/components/shared/converter";
+import { Name } from "src/app/shared/components/shared/name";
+import { AbstractFormlyComponent, OeFormlyField, OeFormlyView } from "src/app/shared/components/shared/oe-formly-component";
+import { Phase } from "src/app/shared/components/shared/phase";
-import { ChannelAddress, CurrentData, EdgeConfig } from '../../../../../shared/shared';
+import { ChannelAddress, CurrentData, EdgeConfig } from "../../../../../shared/shared";
@Component({
- templateUrl: '../../../../../shared/components/formly/formly-field-modal/template.html',
+ templateUrl: "../../../../../shared/components/formly/formly-field-modal/template.html",
})
export class ModalComponent extends AbstractFormlyComponent {
public static generateView(config: EdgeConfig, translate: TranslateService): OeFormlyView {
const evcss: EdgeConfig.Component[] | null = config.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs")
- .filter(component => !(component.factoryId == 'Evcs.Cluster.SelfConsumption') &&
- !(component.factoryId == 'Evcs.Cluster.PeakShaving') && !component.isEnabled == false);
+ .filter(component => !(component.factoryId == "Evcs.Cluster.SelfConsumption") &&
+ !(component.factoryId == "Evcs.Cluster.PeakShaving") && !component.isEnabled == false);
const consumptionMeters: EdgeConfig.Component[] | null = config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter")
.filter(component => component.isEnabled && config.isTypeConsumptionMetered(component));
@@ -26,59 +26,59 @@ export class ModalComponent extends AbstractFormlyComponent {
// Total
lines.push({
- type: 'channel-line',
- name: translate.instant('General.TOTAL'),
- channel: '_sum/ConsumptionActivePower',
+ type: "channel-line",
+ name: translate.instant("General.TOTAL"),
+ channel: "_sum/ConsumptionActivePower",
converter: Converter.ONLY_POSITIVE_POWER_AND_NEGATIVE_AS_ZERO,
});
Phase.THREE_PHASE.forEach(phase => {
lines.push({
- type: 'channel-line',
- name: translate.instant('General.phase') + ' ' + phase,
+ type: "channel-line",
+ name: translate.instant("General.phase") + " " + phase,
indentation: TextIndentation.SINGLE,
- channel: '_sum/ConsumptionActivePower' + phase,
+ channel: "_sum/ConsumptionActivePower" + phase,
converter: Converter.ONLY_POSITIVE_POWER_AND_NEGATIVE_AS_ZERO,
});
});
if (evcss.length > 0) {
lines.push({
- type: 'horizontal-line',
+ type: "horizontal-line",
});
}
// Evcss
evcss.forEach((evcs, index) => {
lines.push({
- type: 'channel-line',
+ type: "channel-line",
name: Name.METER_ALIAS_OR_ID(evcs),
- channel: evcs.id + '/ChargePower',
+ channel: evcs.id + "/ChargePower",
converter: Converter.ONLY_POSITIVE_POWER_AND_NEGATIVE_AS_ZERO,
});
if (index < (evcss.length - 1)) {
- lines.push({ type: 'horizontal-line' });
+ lines.push({ type: "horizontal-line" });
}
});
if (consumptionMeters.length > 0) {
- lines.push({ type: 'horizontal-line' });
+ lines.push({ type: "horizontal-line" });
}
// Consumptionmeters
consumptionMeters.forEach((meter, index) => {
lines.push({
- type: 'channel-line',
+ type: "channel-line",
name: Name.METER_ALIAS_OR_ID(meter),
- channel: meter.id + '/ActivePower',
+ channel: meter.id + "/ActivePower",
converter: Converter.ONLY_POSITIVE_POWER_AND_NEGATIVE_AS_ZERO,
});
Phase.THREE_PHASE.forEach(phase => {
lines.push({
- type: 'channel-line',
- name: 'Phase ' + phase,
- channel: meter.id + '/ActivePower' + phase,
+ type: "channel-line",
+ name: "Phase " + phase,
+ channel: meter.id + "/ActivePower" + phase,
indentation: TextIndentation.SINGLE,
converter: Converter.ONLY_POSITIVE_POWER_AND_NEGATIVE_AS_ZERO,
});
@@ -86,35 +86,35 @@ export class ModalComponent extends AbstractFormlyComponent {
if (index < (consumptionMeters.length - 1)) {
lines.push({
- type: 'horizontal-line',
+ type: "horizontal-line",
});
}
});
- lines.push({ type: 'horizontal-line' });
+ lines.push({ type: "horizontal-line" });
// OtherPower
- const channelsToSubscribe: ChannelAddress[] = [new ChannelAddress('_sum', 'ConsumptionActivePower')];
+ const channelsToSubscribe: ChannelAddress[] = [new ChannelAddress("_sum", "ConsumptionActivePower")];
- evcss.forEach(evcs => channelsToSubscribe.push(new ChannelAddress(evcs.id, 'ChargePower')));
+ evcss.forEach(evcs => channelsToSubscribe.push(new ChannelAddress(evcs.id, "ChargePower")));
consumptionMeters.forEach(meter => {
- channelsToSubscribe.push(...[new ChannelAddress(meter.id, 'ActivePower')]);
+ channelsToSubscribe.push(...[new ChannelAddress(meter.id, "ActivePower")]);
});
lines.push({
- type: 'value-from-channels-line',
- name: translate.instant('General.otherConsumption'),
+ type: "value-from-channels-line",
+ name: translate.instant("General.otherConsumption"),
value: (currentData: CurrentData) => Converter.ONLY_POSITIVE_POWER_AND_NEGATIVE_AS_ZERO(Converter.CALCULATE_CONSUMPTION_OTHER_POWER(evcss, consumptionMeters, currentData)),
channelsToSubscribe: channelsToSubscribe,
});
lines.push({
- type: 'info-line',
- name: translate.instant('Edge.Index.Widgets.phasesInfo'),
+ type: "info-line",
+ name: translate.instant("Edge.Index.Widgets.phasesInfo"),
});
return {
- title: translate.instant('General.consumption'),
+ title: translate.instant("General.consumption"),
lines: lines,
};
}
diff --git a/ui/src/app/edge/live/common/grid/Common_Grid.ts b/ui/src/app/edge/live/common/grid/Common_Grid.ts
index b560e4725d4..f0383f18ff1 100644
--- a/ui/src/app/edge/live/common/grid/Common_Grid.ts
+++ b/ui/src/app/edge/live/common/grid/Common_Grid.ts
@@ -1,8 +1,8 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/common/grid/flat/flat.html b/ui/src/app/edge/live/common/grid/flat/flat.html
index 9c330d1db35..0005f51617a 100644
--- a/ui/src/app/edge/live/common/grid/flat/flat.html
+++ b/ui/src/app/edge/live/common/grid/flat/flat.html
@@ -12,4 +12,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/common/grid/flat/flat.ts b/ui/src/app/edge/live/common/grid/flat/flat.ts
index f89da9ed307..64bc50f0ff6 100644
--- a/ui/src/app/edge/live/common/grid/flat/flat.ts
+++ b/ui/src/app/edge/live/common/grid/flat/flat.ts
@@ -1,21 +1,21 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { Converter } from 'src/app/shared/components/shared/converter';
-import { ChannelAddress, CurrentData, GridMode, Utils } from 'src/app/shared/shared';
-import { Icon } from 'src/app/shared/type/widget';
-import { GridSectionComponent } from '../../../energymonitor/chart/section/grid.component';
-import { ModalComponent } from '../modal/modal';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { Converter } from "src/app/shared/components/shared/converter";
+import { ChannelAddress, CurrentData, GridMode, Utils } from "src/app/shared/shared";
+import { Icon } from "src/app/shared/type/widget";
+import { GridSectionComponent } from "../../../energymonitor/chart/section/grid.component";
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'grid',
- templateUrl: './flat.html',
+ selector: "grid",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
- private static readonly RESTRICTION_MODE: ChannelAddress = new ChannelAddress('ctrlEssLimiter14a0', 'RestrictionMode');
- private static readonly GRID_ACTIVE_POWER: ChannelAddress = new ChannelAddress('_sum', 'GridActivePower');
- private static readonly GRID_MODE: ChannelAddress = new ChannelAddress('_sum', 'GridMode');
+ private static readonly RESTRICTION_MODE: ChannelAddress = new ChannelAddress("ctrlEssLimiter14a0", "RestrictionMode");
+ private static readonly GRID_ACTIVE_POWER: ChannelAddress = new ChannelAddress("_sum", "GridActivePower");
+ private static readonly GRID_MODE: ChannelAddress = new ChannelAddress("_sum", "GridMode");
public readonly CONVERT_WATT_TO_KILOWATT = Utils.CONVERT_WATT_TO_KILOWATT;
public readonly GridMode = GridMode;
@@ -43,9 +43,9 @@ export class FlatComponent extends AbstractFlatWidget {
FlatComponent.GRID_ACTIVE_POWER, FlatComponent.GRID_MODE,
// TODO should be moved to Modal
- new ChannelAddress('_sum', 'GridActivePowerL1'),
- new ChannelAddress('_sum', 'GridActivePowerL2'),
- new ChannelAddress('_sum', 'GridActivePowerL3'),
+ new ChannelAddress("_sum", "GridActivePowerL1"),
+ new ChannelAddress("_sum", "GridActivePowerL2"),
+ new ChannelAddress("_sum", "GridActivePowerL3"),
];
if (GridSectionComponent.isControllerEnabled(this.config, "Controller.Ess.Limiter14a")) {
diff --git a/ui/src/app/edge/live/common/grid/modal/modal.spec.ts b/ui/src/app/edge/live/common/grid/modal/modal.spec.ts
index e78fcf03a69..f886559ec80 100644
--- a/ui/src/app/edge/live/common/grid/modal/modal.spec.ts
+++ b/ui/src/app/edge/live/common/grid/modal/modal.spec.ts
@@ -17,11 +17,11 @@ const VIEW_CONTEXT = (properties?: {}): OeFormlyViewTester.Context => ({
...properties,
});
-describe('Grid - Modal', () => {
+describe("Grid - Modal", () => {
let TEST_CONTEXT: TestContext;
beforeEach(async () => TEST_CONTEXT = await sharedSetup());
- it('generateView()', () => {
+ it("generateView()", () => {
{
// No Meters
const EMS = DummyConfig.from();
@@ -71,7 +71,7 @@ describe('Grid - Modal', () => {
});
// Offgrid
- expectView(EMS, Role.ADMIN, VIEW_CONTEXT({ '_sum/GridMode': GridMode.OFF_GRID }), TEST_CONTEXT, {
+ expectView(EMS, Role.ADMIN, VIEW_CONTEXT({ "_sum/GridMode": GridMode.OFF_GRID }), TEST_CONTEXT, {
title: "Netz",
lines: [
{
diff --git a/ui/src/app/edge/live/common/grid/modal/modal.ts b/ui/src/app/edge/live/common/grid/modal/modal.ts
index 1087a3a69f4..899d9f6642a 100644
--- a/ui/src/app/edge/live/common/grid/modal/modal.ts
+++ b/ui/src/app/edge/live/common/grid/modal/modal.ts
@@ -1,27 +1,27 @@
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { TextIndentation } from 'src/app/shared/components/modal/modal-line/modal-line';
-import { Converter } from 'src/app/shared/components/shared/converter';
-import { Filter } from 'src/app/shared/components/shared/filter';
-import { Name } from 'src/app/shared/components/shared/name';
-import { AbstractFormlyComponent, OeFormlyField, OeFormlyView } from 'src/app/shared/components/shared/oe-formly-component';
-import { ChannelAddress, CurrentData, EdgeConfig } from 'src/app/shared/shared';
-import { Role } from 'src/app/shared/type/role';
-import { GridSectionComponent } from '../../../energymonitor/chart/section/grid.component';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { TextIndentation } from "src/app/shared/components/modal/modal-line/modal-line";
+import { Converter } from "src/app/shared/components/shared/converter";
+import { Filter } from "src/app/shared/components/shared/filter";
+import { Name } from "src/app/shared/components/shared/name";
+import { AbstractFormlyComponent, OeFormlyField, OeFormlyView } from "src/app/shared/components/shared/oe-formly-component";
+import { ChannelAddress, CurrentData, EdgeConfig } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
+import { GridSectionComponent } from "../../../energymonitor/chart/section/grid.component";
@Component({
- templateUrl: '../../../../../shared/components/formly/formly-field-modal/template.html',
+ templateUrl: "../../../../../shared/components/formly/formly-field-modal/template.html",
})
export class ModalComponent extends AbstractFormlyComponent {
public static generateView(config: EdgeConfig, role: Role, translate: TranslateService): OeFormlyView {
- const isActivated = GridSectionComponent.isControllerEnabled(config, 'Controller.Ess.Limiter14a');
+ const isActivated = GridSectionComponent.isControllerEnabled(config, "Controller.Ess.Limiter14a");
// Grid-Mode
const lines: OeFormlyField[] = [{
- type: 'channel-line',
+ type: "channel-line",
name: translate.instant("General.offGrid"),
- channel: '_sum/GridMode',
+ channel: "_sum/GridMode",
filter: Filter.GRID_MODE_IS_OFF_GRID,
converter: Converter.HIDE_VALUE,
}];
@@ -32,7 +32,7 @@ export class ModalComponent extends AbstractFormlyComponent {
if (gridMeters.length > 1) {
if (isActivated) {
lines.push({
- type: 'value-from-channels-line',
+ type: "value-from-channels-line",
name: translate.instant("General.state"),
value: (currentData: CurrentData) => Converter.GRID_STATE_TO_MESSAGE(translate, currentData),
channelsToSubscribe: [
@@ -44,19 +44,19 @@ export class ModalComponent extends AbstractFormlyComponent {
lines.push(
{
- type: 'channel-line',
+ type: "channel-line",
name: translate.instant("General.gridSellAdvanced"),
- channel: '_sum/GridActivePower',
+ channel: "_sum/GridActivePower",
converter: Converter.GRID_SELL_POWER_OR_ZERO,
},
{
- type: 'channel-line',
+ type: "channel-line",
name: translate.instant("General.gridBuyAdvanced"),
- channel: '_sum/GridActivePower',
+ channel: "_sum/GridActivePower",
converter: Converter.GRID_BUY_POWER_OR_ZERO,
},
{
- type: 'horizontal-line',
+ type: "horizontal-line",
},
);
}
@@ -68,7 +68,7 @@ export class ModalComponent extends AbstractFormlyComponent {
// Two lines if there is only one meter (= same visualization as with Sum Channels)
if (isActivated) {
lines.push({
- type: 'value-from-channels-line',
+ type: "value-from-channels-line",
name: translate.instant("General.state"),
value: (currentData: CurrentData) => Converter.GRID_STATE_TO_MESSAGE(translate, currentData),
channelsToSubscribe: [
@@ -80,15 +80,15 @@ export class ModalComponent extends AbstractFormlyComponent {
lines.push(
{
- type: 'channel-line',
+ type: "channel-line",
name: translate.instant("General.gridSellAdvanced"),
- channel: meter.id + '/ActivePower',
+ channel: meter.id + "/ActivePower",
converter: Converter.GRID_SELL_POWER_OR_ZERO,
},
{
- type: 'channel-line',
+ type: "channel-line",
name: translate.instant("General.gridBuyAdvanced"),
- channel: meter.id + '/ActivePower',
+ channel: meter.id + "/ActivePower",
converter: Converter.GRID_BUY_POWER_OR_ZERO,
},
);
@@ -96,9 +96,9 @@ export class ModalComponent extends AbstractFormlyComponent {
} else {
// More than one meter? Show only one line per meter.
lines.push({
- type: 'channel-line',
+ type: "channel-line",
name: Name.SUFFIX_FOR_GRID_SELL_OR_GRID_BUY(translate, meter.alias),
- channel: meter.id + '/ActivePower',
+ channel: meter.id + "/ActivePower",
converter: Converter.POWER_IN_WATT,
});
}
@@ -108,7 +108,7 @@ export class ModalComponent extends AbstractFormlyComponent {
...ModalComponent.generatePhasesView(meter, translate, role),
{
// Line separator
- type: 'horizontal-line',
+ type: "horizontal-line",
},
);
}
@@ -116,24 +116,24 @@ export class ModalComponent extends AbstractFormlyComponent {
if (gridMeters.length > 0) {
// Technical info
lines.push({
- type: 'info-line',
+ type: "info-line",
name: translate.instant("Edge.Index.Widgets.phasesInfo"),
});
}
return {
- title: translate.instant('General.grid'),
+ title: translate.instant("General.grid"),
lines: lines,
};
}
private static generatePhasesView(component: EdgeConfig.Component, translate: TranslateService, role: Role): OeFormlyField[] {
- return ['L1', 'L2', 'L3']
+ return ["L1", "L2", "L3"]
.map(phase => {
- type: 'children-line',
+ type: "children-line",
name: {
- channel: ChannelAddress.fromString(component.id + '/ActivePower' + phase),
- converter: Name.SUFFIX_FOR_GRID_SELL_OR_GRID_BUY(translate, translate.instant('General.phase') + " " + phase),
+ channel: ChannelAddress.fromString(component.id + "/ActivePower" + phase),
+ converter: Name.SUFFIX_FOR_GRID_SELL_OR_GRID_BUY(translate, translate.instant("General.phase") + " " + phase),
},
indentation: TextIndentation.SINGLE,
children: ModalComponent.generatePhasesLineItems(role, phase, component),
@@ -144,19 +144,19 @@ export class ModalComponent extends AbstractFormlyComponent {
const children: OeFormlyField[] = [];
if (Role.isAtLeast(role, Role.INSTALLER)) {
children.push({
- type: 'item',
- channel: component.id + '/Voltage' + phase,
+ type: "item",
+ channel: component.id + "/Voltage" + phase,
converter: Converter.VOLTAGE_IN_MILLIVOLT_TO_VOLT,
}, {
- type: 'item',
- channel: component.id + '/Current' + phase,
+ type: "item",
+ channel: component.id + "/Current" + phase,
converter: Converter.CURRENT_IN_MILLIAMPERE_TO_AMPERE,
});
}
children.push({
- type: 'item',
- channel: component.id + '/ActivePower' + phase,
+ type: "item",
+ channel: component.id + "/ActivePower" + phase,
converter: Converter.POSITIVE_POWER,
});
diff --git a/ui/src/app/edge/live/common/production/Common_Production.ts b/ui/src/app/edge/live/common/production/Common_Production.ts
index ab5942cf712..6ca75abadc7 100644
--- a/ui/src/app/edge/live/common/production/Common_Production.ts
+++ b/ui/src/app/edge/live/common/production/Common_Production.ts
@@ -1,8 +1,8 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/common/production/flat/flat.html b/ui/src/app/edge/live/common/production/flat/flat.html
index 3f5ed5d187b..77b660e2749 100644
--- a/ui/src/app/edge/live/common/production/flat/flat.html
+++ b/ui/src/app/edge/live/common/production/flat/flat.html
@@ -10,4 +10,4 @@
[converter]="CONVERT_WATT_TO_KILOWATT">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/common/production/flat/flat.ts b/ui/src/app/edge/live/common/production/flat/flat.ts
index c0459210a0c..678ef3f8c87 100644
--- a/ui/src/app/edge/live/common/production/flat/flat.ts
+++ b/ui/src/app/edge/live/common/production/flat/flat.ts
@@ -1,11 +1,11 @@
-import { EdgeConfig, Utils } from 'src/app/shared/shared';
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ModalComponent } from '../modal/modal';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { EdgeConfig, Utils } from "src/app/shared/shared";
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'Common_Production',
- templateUrl: './flat.html',
+ selector: "Common_Production",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
diff --git a/ui/src/app/edge/live/common/production/modal/modal.html b/ui/src/app/edge/live/common/production/modal/modal.html
index e48c4cf52f6..81848b9b156 100644
--- a/ui/src/app/edge/live/common/production/modal/modal.html
+++ b/ui/src/app/edge/live/common/production/modal/modal.html
@@ -47,4 +47,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/common/production/modal/modal.ts b/ui/src/app/edge/live/common/production/modal/modal.ts
index a631d288bef..013ab5b5307 100644
--- a/ui/src/app/edge/live/common/production/modal/modal.ts
+++ b/ui/src/app/edge/live/common/production/modal/modal.ts
@@ -1,9 +1,9 @@
-import { Component } from '@angular/core';
-import { AbstractModal } from 'src/app/shared/components/modal/abstractModal';
-import { ChannelAddress, EdgeConfig, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractModal } from "src/app/shared/components/modal/abstractModal";
+import { ChannelAddress, EdgeConfig, Utils } from "src/app/shared/shared";
@Component({
- templateUrl: './modal.html',
+ templateUrl: "./modal.html",
})
export class ModalComponent extends AbstractModal {
@@ -27,10 +27,10 @@ export class ModalComponent extends AbstractModal {
this.config.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter")
.filter(component => component.isEnabled && this.config.isProducer(component))
.forEach(component => {
- channelAddresses.push(new ChannelAddress(component.id, 'ActivePower'));
- channelAddresses.push(new ChannelAddress(component.id, 'ActivePowerL1'));
- channelAddresses.push(new ChannelAddress(component.id, 'ActivePowerL2'));
- channelAddresses.push(new ChannelAddress(component.id, 'ActivePowerL3'));
+ channelAddresses.push(new ChannelAddress(component.id, "ActivePower"));
+ channelAddresses.push(new ChannelAddress(component.id, "ActivePowerL1"));
+ channelAddresses.push(new ChannelAddress(component.id, "ActivePowerL2"));
+ channelAddresses.push(new ChannelAddress(component.id, "ActivePowerL3"));
this.productionMeters.push(component);
});
diff --git a/ui/src/app/edge/live/common/selfconsumption/Common_Selfconsumption.ts b/ui/src/app/edge/live/common/selfconsumption/Common_Selfconsumption.ts
index 6c49f7603a4..af8b2b70f3b 100644
--- a/ui/src/app/edge/live/common/selfconsumption/Common_Selfconsumption.ts
+++ b/ui/src/app/edge/live/common/selfconsumption/Common_Selfconsumption.ts
@@ -1,8 +1,8 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { FlatComponent } from './flat/flat';
-import { ModalComponent } from './modal/modal';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FlatComponent } from "./flat/flat";
+import { ModalComponent } from "./modal/modal";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/common/selfconsumption/flat/flat.html b/ui/src/app/edge/live/common/selfconsumption/flat/flat.html
index d013066fd28..87d7e770b3e 100644
--- a/ui/src/app/edge/live/common/selfconsumption/flat/flat.html
+++ b/ui/src/app/edge/live/common/selfconsumption/flat/flat.html
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/common/selfconsumption/flat/flat.ts b/ui/src/app/edge/live/common/selfconsumption/flat/flat.ts
index 60c4c13b999..f1bf518f2b2 100644
--- a/ui/src/app/edge/live/common/selfconsumption/flat/flat.ts
+++ b/ui/src/app/edge/live/common/selfconsumption/flat/flat.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { ChannelAddress, CurrentData, Utils } from 'src/app/shared/shared';
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { ChannelAddress, CurrentData, Utils } from "src/app/shared/shared";
-import { ModalComponent } from '../modal/modal';
+import { ModalComponent } from "../modal/modal";
@Component({
- selector: 'Common_Selfconsumption',
- templateUrl: './flat.html',
+ selector: "Common_Selfconsumption",
+ templateUrl: "./flat.html",
})
export class FlatComponent extends AbstractFlatWidget {
@@ -22,18 +22,18 @@ export class FlatComponent extends AbstractFlatWidget {
protected override getChannelAddresses() {
return [
- new ChannelAddress('_sum', 'GridActivePower'),
- new ChannelAddress('_sum', 'ProductionActivePower'),
+ new ChannelAddress("_sum", "GridActivePower"),
+ new ChannelAddress("_sum", "ProductionActivePower"),
];
}
protected override onCurrentData(currentData: CurrentData) {
this.calculatedSelfConsumption = Utils.calculateSelfConsumption(
Utils.multiplySafely(
- currentData.allComponents['_sum/GridActivePower'],
+ currentData.allComponents["_sum/GridActivePower"],
-1,
),
- currentData.allComponents['_sum/ProductionActivePower'],
+ currentData.allComponents["_sum/ProductionActivePower"],
);
}
diff --git a/ui/src/app/edge/live/common/selfconsumption/modal/modal.spec.ts b/ui/src/app/edge/live/common/selfconsumption/modal/modal.spec.ts
index f640f899548..9571d751120 100644
--- a/ui/src/app/edge/live/common/selfconsumption/modal/modal.spec.ts
+++ b/ui/src/app/edge/live/common/selfconsumption/modal/modal.spec.ts
@@ -13,11 +13,11 @@ export function expectView(testContext: TestContext, viewContext: OeFormlyViewTe
expect(generatedView).toEqual(view);
}
-describe('SelfConsumption - Modal', () => {
+describe("SelfConsumption - Modal", () => {
let TEST_CONTEXT: TestContext;
beforeEach(async () => TEST_CONTEXT = await sharedSetup());
- it('generateView()', () => {
+ it("generateView()", () => {
{
expectView(TEST_CONTEXT, VIEW_CONTEXT, {
title: "Eigenverbrauch",
diff --git a/ui/src/app/edge/live/common/selfconsumption/modal/modal.ts b/ui/src/app/edge/live/common/selfconsumption/modal/modal.ts
index 531b1b41123..81894e904dd 100644
--- a/ui/src/app/edge/live/common/selfconsumption/modal/modal.ts
+++ b/ui/src/app/edge/live/common/selfconsumption/modal/modal.ts
@@ -1,19 +1,19 @@
-import { Component } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { AbstractFormlyComponent, OeFormlyView } from 'src/app/shared/components/shared/oe-formly-component';
-import { EdgeConfig } from 'src/app/shared/shared';
-import { Role } from 'src/app/shared/type/role';
+import { Component } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { AbstractFormlyComponent, OeFormlyView } from "src/app/shared/components/shared/oe-formly-component";
+import { EdgeConfig } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
@Component({
- templateUrl: '../../../../../shared/components/formly/formly-field-modal/template.html',
+ templateUrl: "../../../../../shared/components/formly/formly-field-modal/template.html",
})
export class ModalComponent extends AbstractFormlyComponent {
public static generateView(translate: TranslateService): OeFormlyView {
return {
- title: translate.instant('General.selfConsumption'),
+ title: translate.instant("General.selfConsumption"),
lines: [{
- type: 'info-line',
+ type: "info-line",
name: translate.instant("Edge.Index.Widgets.selfconsumptionInfo"),
}],
};
diff --git a/ui/src/app/edge/live/common/storage/modal/modal.component.ts b/ui/src/app/edge/live/common/storage/modal/modal.component.ts
index e64da36eb1b..6ce266a1401 100644
--- a/ui/src/app/edge/live/common/storage/modal/modal.component.ts
+++ b/ui/src/app/edge/live/common/storage/modal/modal.component.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { isBefore } from 'date-fns';
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils, Websocket } from 'src/app/shared/shared';
-import { Role } from 'src/app/shared/type/role';
+import { Component, Input, OnDestroy, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { isBefore } from "date-fns";
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils, Websocket } from "src/app/shared/shared";
+import { Role } from "src/app/shared/type/role";
@Component({
- selector: 'storage-modal',
- templateUrl: './modal.component.html',
+ selector: "storage-modal",
+ templateUrl: "./modal.component.html",
})
export class StorageModalComponent implements OnInit, OnDestroy {
@@ -40,13 +40,13 @@ export class StorageModalComponent implements OnInit, OnDestroy {
ngOnInit() {
// Future Work: Remove when all ems are at least at this version
- this.controllerIsRequiredEdgeVersion = this.edge.isVersionAtLeast('2023.2.5');
+ this.controllerIsRequiredEdgeVersion = this.edge.isVersionAtLeast("2023.2.5");
this.isAtLeastInstaller = this.edge.roleIsAtLeast(Role.INSTALLER);
- const emergencyReserveCtrl = this.config.getComponentsByFactory('Controller.Ess.EmergencyCapacityReserve');
+ const emergencyReserveCtrl = this.config.getComponentsByFactory("Controller.Ess.EmergencyCapacityReserve");
const prepareBatteryExtensionCtrl = this.config.getComponentsByFactory("Controller.Ess.PrepareBatteryExtension");
const components = [...prepareBatteryExtensionCtrl, ...emergencyReserveCtrl].filter(component => component.isEnabled).reduce((result, component) => {
- const essId = component.properties['ess.id'];
+ const essId = component.properties["ess.id"];
if (result[essId] == null) {
result[essId] = [];
}
@@ -78,18 +78,18 @@ export class StorageModalComponent implements OnInit, OnDestroy {
const controllerFrmGrp: FormGroup = new FormGroup({});
for (const controller of (controllers as EdgeConfig.Component[])) {
- if (controller.factoryId == 'Controller.Ess.EmergencyCapacityReserve') {
+ if (controller.factoryId == "Controller.Ess.EmergencyCapacityReserve") {
const reserveSoc = currentData.channel[controller.id + "/_PropertyReserveSoc"] ?? 20 /* default Reserve-Soc */;
const isReserveSocEnabled = currentData.channel[controller.id + "/_PropertyIsReserveSocEnabled"] == 1;
- controllerFrmGrp.addControl('emergencyReserveController',
+ controllerFrmGrp.addControl("emergencyReserveController",
this.formBuilder.group({
- controllerId: new FormControl(controller['id']),
+ controllerId: new FormControl(controller["id"]),
isReserveSocEnabled: new FormControl(isReserveSocEnabled),
reserveSoc: new FormControl(reserveSoc),
}),
);
- } else if (controller.factoryId == 'Controller.Ess.PrepareBatteryExtension') {
+ } else if (controller.factoryId == "Controller.Ess.PrepareBatteryExtension") {
const isRunning = currentData.channel[controller.id + "/_PropertyIsRunning"] == 1;
@@ -124,7 +124,7 @@ export class StorageModalComponent implements OnInit, OnDestroy {
this.isTargetTimeInValid.set(essId, false);
}
- controllerFrmGrp.addControl('prepareBatteryExtensionController',
+ controllerFrmGrp.addControl("prepareBatteryExtensionController",
this.formBuilder.group({
controllerId: new FormControl(controller.id),
isRunning: new FormControl(isRunning),
@@ -155,26 +155,26 @@ export class StorageModalComponent implements OnInit, OnDestroy {
for (const essId in this.formGroup.controls) {
const essGroups = this.formGroup.controls[essId];
- const emergencyReserveController = (essGroups.get('emergencyReserveController') as FormGroup)?.controls ?? {};
+ const emergencyReserveController = (essGroups.get("emergencyReserveController") as FormGroup)?.controls ?? {};
for (const essGroup of Object.keys(emergencyReserveController)) {
if (emergencyReserveController[essGroup].dirty) {
- if (updateArray.get(emergencyReserveController['controllerId'].value)) {
- updateArray.get(emergencyReserveController['controllerId'].value).push(new Map().set(essGroup, emergencyReserveController[essGroup].value));
+ if (updateArray.get(emergencyReserveController["controllerId"].value)) {
+ updateArray.get(emergencyReserveController["controllerId"].value).push(new Map().set(essGroup, emergencyReserveController[essGroup].value));
} else {
- updateArray.set(emergencyReserveController['controllerId'].value, [new Map().set(essGroup, emergencyReserveController[essGroup].value)]);
+ updateArray.set(emergencyReserveController["controllerId"].value, [new Map().set(essGroup, emergencyReserveController[essGroup].value)]);
}
}
}
- const prepareBatteryExtensionController = (essGroups.get('prepareBatteryExtensionController') as FormGroup)?.controls ?? {};
+ const prepareBatteryExtensionController = (essGroups.get("prepareBatteryExtensionController") as FormGroup)?.controls ?? {};
for (const essGroup of Object.keys(prepareBatteryExtensionController)) {
if (prepareBatteryExtensionController[essGroup].dirty) {
// For simplicity, split targetTimeSpecified in 2 for template formControlName
- if (updateArray.get(prepareBatteryExtensionController['controllerId'].value)) {
- updateArray.get(prepareBatteryExtensionController['controllerId'].value).push(new Map().set(essGroup, prepareBatteryExtensionController[essGroup].value));
+ if (updateArray.get(prepareBatteryExtensionController["controllerId"].value)) {
+ updateArray.get(prepareBatteryExtensionController["controllerId"].value).push(new Map().set(essGroup, prepareBatteryExtensionController[essGroup].value));
} else {
- updateArray.set(prepareBatteryExtensionController['controllerId'].value, [new Map().set(essGroup, prepareBatteryExtensionController[essGroup].value)]);
+ updateArray.set(prepareBatteryExtensionController["controllerId"].value, [new Map().set(essGroup, prepareBatteryExtensionController[essGroup].value)]);
}
}
}
@@ -193,10 +193,10 @@ export class StorageModalComponent implements OnInit, OnDestroy {
});
this.edge.updateComponentConfig(this.websocket, controllerId, properties).then(() => {
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
this.formGroup.markAsPristine();
}).catch(reason => {
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason, "danger");
});
}
}
diff --git a/ui/src/app/edge/live/common/storage/storage.component.html b/ui/src/app/edge/live/common/storage/storage.component.html
index 13715f5e0ca..d7ffcb21081 100644
--- a/ui/src/app/edge/live/common/storage/storage.component.html
+++ b/ui/src/app/edge/live/common/storage/storage.component.html
@@ -16,9 +16,9 @@
@@ -60,4 +60,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/common/storage/storage.component.ts b/ui/src/app/edge/live/common/storage/storage.component.ts
index 98549f34bff..ca1846f220f 100644
--- a/ui/src/app/edge/live/common/storage/storage.component.ts
+++ b/ui/src/app/edge/live/common/storage/storage.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { formatNumber } from '@angular/common';
-import { Component } from '@angular/core';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
+import { formatNumber } from "@angular/common";
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
import { CurrentData } from "src/app/shared/shared";
-import { DateUtils } from 'src/app/shared/utils/date/dateutils';
+import { DateUtils } from "src/app/shared/utils/date/dateutils";
-import { ChannelAddress, EdgeConfig, Utils } from '../../../../shared/shared';
-import { StorageModalComponent } from './modal/modal.component';
+import { ChannelAddress, EdgeConfig, Utils } from "../../../../shared/shared";
+import { StorageModalComponent } from "./modal/modal.component";
@Component({
- selector: 'storage',
- templateUrl: './storage.component.html',
+ selector: "storage",
+ templateUrl: "./storage.component.html",
})
export class StorageComponent extends AbstractFlatWidget {
@@ -52,21 +52,21 @@ export class StorageComponent extends AbstractFlatWidget {
*/
public convertPower(value: number, isCharge?: boolean) {
if (value == null) {
- return '-';
+ return "-";
}
const thisValue: number = (value / 1000);
// Round thisValue to Integer when decimal place equals 0
if (thisValue > 0) {
- return formatNumber(thisValue, 'de', '1.0-1') + " kW"; // TODO get locale dynamically
+ return formatNumber(thisValue, "de", "1.0-1") + " kW"; // TODO get locale dynamically
} else if (thisValue == 0 && isCharge) {
// if thisValue is 0, then show only when charge and not discharge
- return '0 kW';
+ return "0 kW";
} else {
- return '-';
+ return "-";
}
}
@@ -88,12 +88,12 @@ export class StorageComponent extends AbstractFlatWidget {
protected override getChannelAddresses() {
const channelAddresses: ChannelAddress[] = [
- new ChannelAddress('_sum', 'EssSoc'),
+ new ChannelAddress("_sum", "EssSoc"),
// TODO should be moved to Modal
- new ChannelAddress('_sum', 'EssActivePowerL1'),
- new ChannelAddress('_sum', 'EssActivePowerL2'),
- new ChannelAddress('_sum', 'EssActivePowerL3'),
+ new ChannelAddress("_sum", "EssActivePowerL1"),
+ new ChannelAddress("_sum", "EssActivePowerL2"),
+ new ChannelAddress("_sum", "EssActivePowerL3"),
];
this.prepareBatteryExtensionCtrl = this.config.getComponentsByFactory("Controller.Ess.PrepareBatteryExtension")
@@ -101,7 +101,7 @@ export class StorageComponent extends AbstractFlatWidget {
.reduce((result, component) => {
return {
...result,
- [component.properties['ess.id']]: component,
+ [component.properties["ess.id"]]: component,
};
}, {});
@@ -113,26 +113,26 @@ export class StorageComponent extends AbstractFlatWidget {
new ChannelAddress(controller.id, "CtrlIsChargingEss"),
new ChannelAddress(controller.id, "CtrlIsDischargingEss"),
new ChannelAddress(controller.id, "_PropertyIsRunning"),
- new ChannelAddress(controller.id, '_PropertyTargetTimeSpecified'),
- new ChannelAddress(controller.id, '_PropertyTargetTime'),
+ new ChannelAddress(controller.id, "_PropertyTargetTimeSpecified"),
+ new ChannelAddress(controller.id, "_PropertyTargetTime"),
);
}
// Get emergencyReserves
this.emergencyReserveComponents = this.config
- .getComponentsByFactory('Controller.Ess.EmergencyCapacityReserve')
+ .getComponentsByFactory("Controller.Ess.EmergencyCapacityReserve")
.filter(component => component.isEnabled)
.reduce((result, component) => {
return {
...result,
- [component.properties['ess.id']]: component,
+ [component.properties["ess.id"]]: component,
};
}, {});
for (const component of Object.values(this.emergencyReserveComponents)) {
channelAddresses.push(
- new ChannelAddress(component.id, '_PropertyReserveSoc'),
- new ChannelAddress(component.id, '_PropertyIsReserveSocEnabled'),
+ new ChannelAddress(component.id, "_PropertyReserveSoc"),
+ new ChannelAddress(component.id, "_PropertyIsReserveSocEnabled"),
);
}
// Get Chargers
@@ -142,7 +142,7 @@ export class StorageComponent extends AbstractFlatWidget {
.filter(component => component.isEnabled);
for (const component of this.chargerComponents) {
channelAddresses.push(
- new ChannelAddress(component.id, 'ActualPower'),
+ new ChannelAddress(component.id, "ActualPower"),
);
}
@@ -165,14 +165,14 @@ export class StorageComponent extends AbstractFlatWidget {
.includes("io.openems.edge.ess.api.HybridEss");
channelAddresses.push(
- new ChannelAddress(component.id, 'Soc'),
- new ChannelAddress(component.id, 'Capacity'),
+ new ChannelAddress(component.id, "Soc"),
+ new ChannelAddress(component.id, "Capacity"),
);
if (this.config.factories[component.factoryId].natureIds.includes("io.openems.edge.ess.api.AsymmetricEss")) {
channelAddresses.push(
- new ChannelAddress(component.id, 'ActivePowerL1'),
- new ChannelAddress(component.id, 'ActivePowerL2'),
- new ChannelAddress(component.id, 'ActivePowerL3'),
+ new ChannelAddress(component.id, "ActivePowerL1"),
+ new ChannelAddress(component.id, "ActivePowerL2"),
+ new ChannelAddress(component.id, "ActivePowerL3"),
);
}
}
@@ -187,22 +187,22 @@ export class StorageComponent extends AbstractFlatWidget {
this.possibleBatteryExtensionMessage.set(
essId,
this.getBatteryCapacityExtensionStatus(
- currentData.allComponents[controller.id + '/_PropertyIsRunning'] == 1,
- currentData.allComponents[controller.id + '/CtrlIsBlockingEss'],
- currentData.allComponents[controller.id + '/CtrlIsChargingEss'],
- currentData.allComponents[controller.id + '/CtrlIsDischargingEss'],
- currentData.allComponents[controller.id + '/_PropertyTargetTimeSpecified'],
- currentData.allComponents[controller.id + '/_PropertyTargetTime'],
+ currentData.allComponents[controller.id + "/_PropertyIsRunning"] == 1,
+ currentData.allComponents[controller.id + "/CtrlIsBlockingEss"],
+ currentData.allComponents[controller.id + "/CtrlIsChargingEss"],
+ currentData.allComponents[controller.id + "/CtrlIsDischargingEss"],
+ currentData.allComponents[controller.id + "/_PropertyTargetTimeSpecified"],
+ currentData.allComponents[controller.id + "/_PropertyTargetTime"],
));
}
// Check total State_of_Charge for dynamical icon in widget-header
- const soc = currentData.allComponents['_sum/EssSoc'];
- this.storageIconStyle = 'storage-' + Utils.getStorageSocSegment(soc);
+ const soc = currentData.allComponents["_sum/EssSoc"];
+ this.storageIconStyle = "storage-" + Utils.getStorageSocSegment(soc);
for (const essId in this.emergencyReserveComponents) {
const controller = this.emergencyReserveComponents[essId];
- controller['currentReserveSoc'] = currentData.allComponents[controller.id + '/_PropertyReserveSoc'];
+ controller["currentReserveSoc"] = currentData.allComponents[controller.id + "/_PropertyReserveSoc"];
this.isEmergencyReserveEnabled[essId] = currentData.allComponents[controller.id + "/_PropertyIsReserveSocEnabled"] == 1 ? true : false;
}
}
@@ -217,7 +217,7 @@ export class StorageComponent extends AbstractFlatWidget {
const date = DateUtils.stringToDate(targetDate.toString());
return {
- color: 'green', text: this.translate.instant('Edge.Index.RETROFITTING.TARGET_TIME_SPECIFIED', {
+ color: "green", text: this.translate.instant("Edge.Index.RETROFITTING.TARGET_TIME_SPECIFIED", {
targetDate: DateUtils.toLocaleDateString(date),
targetTime: date.toLocaleTimeString(),
}),
@@ -226,12 +226,12 @@ export class StorageComponent extends AbstractFlatWidget {
if (essIsBlocking != null && essIsBlocking == 1) {
// If ess reached targetSoc
- return { color: 'green', text: this.translate.instant('Edge.Index.RETROFITTING.REACHED_TARGET_SOC') };
+ return { color: "green", text: this.translate.instant("Edge.Index.RETROFITTING.REACHED_TARGET_SOC") };
} else if ((essIsCharging != null && essIsCharging == 1) || (essIsDischarging != null && essIsDischarging == 1)) {
// If Ess is charging to or discharging to the targetSoc
- return { color: 'orange', text: this.translate.instant('Edge.Index.RETROFITTING.PREPARING') };
+ return { color: "orange", text: this.translate.instant("Edge.Index.RETROFITTING.PREPARING") };
} else {
return null;
}
diff --git a/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.html b/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.html
index 10874fd1d55..352d15d1357 100644
--- a/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.html
+++ b/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.html
@@ -25,4 +25,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.ts b/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.ts
index 13e4c3dd1b9..89febc1abd0 100644
--- a/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.ts
+++ b/ui/src/app/edge/live/delayedselltogrid/delayedselltogrid.component.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from '../../../shared/shared';
-import { DelayedSellToGridModalComponent } from './modal/modal.component';
+import { Component, Input, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "../../../shared/shared";
+import { DelayedSellToGridModalComponent } from "./modal/modal.component";
@Component({
selector: DelayedSellToGridComponent.SELECTOR,
- templateUrl: './delayedselltogrid.component.html',
+ templateUrl: "./delayedselltogrid.component.html",
})
export class DelayedSellToGridComponent implements OnInit, OnDestroy {
@@ -29,7 +29,7 @@ export class DelayedSellToGridComponent implements OnInit, OnDestroy {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.component = config.getComponent(this.componentId);
diff --git a/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.html b/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.html
index a439486f2c1..0327fd96b05 100644
--- a/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.html
+++ b/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.html
@@ -57,4 +57,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.ts b/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.ts
index ef45722f679..b688531b982 100644
--- a/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.ts
+++ b/ui/src/app/edge/live/delayedselltogrid/modal/modal.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
-import { ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from '../../../../shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "../../../../shared/shared";
@Component({
selector: DelayedSellToGridModalComponent.SELECTOR,
- templateUrl: './modal.component.html',
+ templateUrl: "./modal.component.html",
})
export class DelayedSellToGridModalComponent implements OnInit {
@@ -30,11 +30,11 @@ export class DelayedSellToGridModalComponent implements OnInit {
ngOnInit() {
this.formGroup = this.formBuilder.group({
continuousSellToGridPower: new FormControl(this.component.properties.continuousSellToGridPower, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
sellToGridPowerLimit: new FormControl(this.component.properties.sellToGridPowerLimit, Validators.compose([
- Validators.pattern('^(?:[1-9][0-9]*|0)$'),
+ Validators.pattern("^(?:[1-9][0-9]*|0)$"),
Validators.required,
])),
});
@@ -42,9 +42,9 @@ export class DelayedSellToGridModalComponent implements OnInit {
applyChanges() {
if (this.edge != null) {
- if (this.edge.roleIsAtLeast('owner')) {
- const continuousSellToGridPower = this.formGroup.controls['continuousSellToGridPower'];
- const sellToGridPowerLimit = this.formGroup.controls['sellToGridPowerLimit'];
+ if (this.edge.roleIsAtLeast("owner")) {
+ const continuousSellToGridPower = this.formGroup.controls["continuousSellToGridPower"];
+ const sellToGridPowerLimit = this.formGroup.controls["sellToGridPowerLimit"];
if (continuousSellToGridPower.valid && sellToGridPowerLimit.valid) {
if (sellToGridPowerLimit.value > continuousSellToGridPower.value) {
const updateComponentArray = [];
@@ -58,23 +58,23 @@ export class DelayedSellToGridModalComponent implements OnInit {
this.component.properties.continuousSellToGridPower = continuousSellToGridPower.value;
this.component.properties.sellToGridPowerLimit = sellToGridPowerLimit.value;
this.loading = false;
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
continuousSellToGridPower.setValue(this.component.properties.continuousSellToGridPower);
sellToGridPowerLimit.setValue(this.component.properties.sellToGridPowerLimit);
this.loading = false;
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
this.formGroup.markAsPristine();
} else {
- this.service.toast(this.translate.instant('Edge.Index.Widgets.DelayedSellToGrid.relationError'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Index.Widgets.DelayedSellToGrid.relationError"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.inputNotValid'), 'danger');
+ this.service.toast(this.translate.instant("General.inputNotValid"), "danger");
}
} else {
- this.service.toast(this.translate.instant('General.insufficientRights'), 'danger');
+ this.service.toast(this.translate.instant("General.insufficientRights"), "danger");
}
}
}
diff --git a/ui/src/app/edge/live/energymonitor/chart/chart.component.html b/ui/src/app/edge/live/energymonitor/chart/chart.component.html
index f1a4f537a10..c2eddea61c8 100644
--- a/ui/src/app/edge/live/energymonitor/chart/chart.component.html
+++ b/ui/src/app/edge/live/energymonitor/chart/chart.component.html
@@ -10,4 +10,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/energymonitor/chart/chart.component.ts b/ui/src/app/edge/live/energymonitor/chart/chart.component.ts
index 042fb641643..f0852e5d2f4 100644
--- a/ui/src/app/edge/live/energymonitor/chart/chart.component.ts
+++ b/ui/src/app/edge/live/energymonitor/chart/chart.component.ts
@@ -1,17 +1,17 @@
// @ts-strict-ignore
-import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
-import { fromEvent, Subject } from 'rxjs';
-import { debounceTime, delay, takeUntil } from 'rxjs/operators';
-import { Service } from 'src/app/shared/shared';
-import { CurrentData } from '../../../../shared/components/edge/currentdata';
-import { ConsumptionSectionComponent } from './section/consumption.component';
-import { GridSectionComponent } from './section/grid.component';
-import { ProductionSectionComponent } from './section/production.component';
-import { StorageSectionComponent } from './section/storage.component';
+import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from "@angular/core";
+import { Subject, fromEvent } from "rxjs";
+import { debounceTime, delay, takeUntil } from "rxjs/operators";
+import { Service } from "src/app/shared/shared";
+import { CurrentData } from "../../../../shared/components/edge/currentdata";
+import { ConsumptionSectionComponent } from "./section/consumption.component";
+import { GridSectionComponent } from "./section/grid.component";
+import { ProductionSectionComponent } from "./section/production.component";
+import { StorageSectionComponent } from "./section/storage.component";
@Component({
- selector: 'energymonitor-chart',
- templateUrl: './chart.component.html',
+ selector: "energymonitor-chart",
+ templateUrl: "./chart.component.html",
})
export class EnergymonitorChartComponent implements OnInit, OnDestroy {
@@ -27,7 +27,7 @@ export class EnergymonitorChartComponent implements OnInit, OnDestroy {
@ViewChild(StorageSectionComponent, { static: true })
public storageSection: StorageSectionComponent;
- @ViewChild('energymonitorChart', { static: true })
+ @ViewChild("energymonitorChart", { static: true })
private chartDiv: ElementRef;
public translation: string;
@@ -39,8 +39,6 @@ export class EnergymonitorChartComponent implements OnInit, OnDestroy {
private ngUnsubscribe: Subject = new Subject();
-
-
constructor(
private service: Service,
) { }
@@ -54,7 +52,7 @@ export class EnergymonitorChartComponent implements OnInit, OnDestroy {
this.service.startSpinner(this.spinnerId);
// make sure chart is redrawn in the beginning and on window resize
setTimeout(() => this.updateOnWindowResize(), 500);
- const source = fromEvent(window, 'resize', null, null);
+ const source = fromEvent(window, "resize", null, null);
source.pipe(takeUntil(this.ngUnsubscribe), debounceTime(200), delay(100)).subscribe(e => {
this.updateOnWindowResize();
});
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/abstractsection.component.ts b/ui/src/app/edge/live/energymonitor/chart/section/abstractsection.component.ts
index 869a8d30bf9..e254768d5ca 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/abstractsection.component.ts
+++ b/ui/src/app/edge/live/energymonitor/chart/section/abstractsection.component.ts
@@ -1,10 +1,10 @@
// @ts-strict-ignore
-import { DefaultTypes } from '../../../../../shared/service/defaulttypes';
-import { GridMode, Service } from 'src/app/shared/shared';
-import { TranslateService } from '@ngx-translate/core';
-import * as d3 from 'd3';
+import { TranslateService } from "@ngx-translate/core";
+import * as d3 from "d3";
+import { GridMode, Service } from "src/app/shared/shared";
+import { DefaultTypes } from "../../../../../shared/service/defaulttypes";
-export type Ratio = 'Only Positive [0,1]' | 'Negative and Positive [-1,1]';
+export type Ratio = "Only Positive [0,1]" | "Negative and Positive [-1,1]";
export class SectionValue {
public absolute: number;
@@ -101,17 +101,17 @@ export class EnergyFlow {
}
public switchState() {
- if (this.state == 'one') {
- this.state = 'two';
- } else if (this.state == 'two') {
- this.state = 'one';
+ if (this.state == "one") {
+ this.state = "two";
+ } else if (this.state == "two") {
+ this.state = "one";
} else {
- this.state = 'one';
+ this.state = "one";
}
}
public hide() {
- this.state = 'three';
+ this.state = "three";
}
}
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.html b/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.html
index 3d3d27d3451..fdef929c624 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.html
+++ b/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.html
@@ -23,4 +23,4 @@
[attr.width]="square.image.length" [attr.height]="square.image.length"
[attr.href]="square.image.image + '#root'">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.ts b/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.ts
index 642f1725a2d..440054a0768 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.ts
+++ b/ui/src/app/edge/live/energymonitor/chart/section/consumption.component.ts
@@ -1,27 +1,27 @@
// @ts-strict-ignore
-import { animate, state, style, transition, trigger } from '@angular/animations';
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { UnitvaluePipe } from 'src/app/shared/pipe/unitvalue/unitvalue.pipe';
-import { DefaultTypes } from '../../../../../shared/service/defaulttypes';
-import { Service, Utils } from '../../../../../shared/shared';
-import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from './abstractsection.component';
+import { animate, state, style, transition, trigger } from "@angular/animations";
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { UnitvaluePipe } from "src/app/shared/pipe/unitvalue/unitvalue.pipe";
+import { DefaultTypes } from "../../../../../shared/service/defaulttypes";
+import { Service, Utils } from "../../../../../shared/shared";
+import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from "./abstractsection.component";
@Component({
- selector: '[consumptionsection]',
- templateUrl: './consumption.component.html',
+ selector: "[consumptionsection]",
+ templateUrl: "./consumption.component.html",
animations: [
- trigger('Consumption', [
- state('show', style({
+ trigger("Consumption", [
+ state("show", style({
opacity: 0.1,
- transform: 'translateX(0%)',
+ transform: "translateX(0%)",
})),
- state('hide', style({
+ state("hide", style({
opacity: 0.6,
- transform: 'translateX(17%)',
+ transform: "translateX(17%)",
})),
- transition('show => hide', animate('650ms ease-out')),
- transition('hide => show', animate('0ms ease-in')),
+ transition("show => hide", animate("650ms ease-out")),
+ transition("hide => show", animate("0ms ease-in")),
]),
],
})
@@ -38,12 +38,12 @@ export class ConsumptionSectionComponent extends AbstractSection implements OnIn
translate: TranslateService,
service: Service,
) {
- super('General.consumption', "right", "#FDC507", translate, service, "Consumption");
+ super("General.consumption", "right", "#FDC507", translate, service, "Consumption");
this.unitpipe = unitpipe;
}
get stateName() {
- return this.showAnimation ? 'show' : 'hide';
+ return this.showAnimation ? "show" : "hide";
}
ngOnInit() {
@@ -70,7 +70,7 @@ export class ConsumptionSectionComponent extends AbstractSection implements OnIn
}
protected getRatioType(): Ratio {
- return 'Only Positive [0,1]';
+ return "Only Positive [0,1]";
}
protected _updateCurrentData(sum: DefaultTypes.Summary): void {
@@ -103,7 +103,7 @@ export class ConsumptionSectionComponent extends AbstractSection implements OnIn
if (value == null || Number.isNaN(value)) {
return "";
}
- return this.unitpipe.transform(value, 'kW');
+ return this.unitpipe.transform(value, "kW");
}
protected initEnergyFlow(radius: number): EnergyFlow {
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/grid.component.html b/ui/src/app/edge/live/energymonitor/chart/section/grid.component.html
index 3d84fdbbdb2..d35a089e698 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/grid.component.html
+++ b/ui/src/app/edge/live/energymonitor/chart/section/grid.component.html
@@ -29,4 +29,4 @@
[attr.width]="square.image.length" [attr.height]="square.image.length"
[attr.href]="square.image.image + '#root'">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/grid.component.ts b/ui/src/app/edge/live/energymonitor/chart/section/grid.component.ts
index e5183e215c4..c0c61013161 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/grid.component.ts
+++ b/ui/src/app/edge/live/energymonitor/chart/section/grid.component.ts
@@ -1,40 +1,40 @@
// @ts-strict-ignore
-import { animate, state, style, transition, trigger } from '@angular/animations';
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { UnitvaluePipe } from 'src/app/shared/pipe/unitvalue/unitvalue.pipe';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { Icon } from 'src/app/shared/type/widget';
-import { CurrentData, EdgeConfig, GridMode, Service, Utils } from '../../../../../shared/shared';
-import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from './abstractsection.component';
+import { animate, state, style, transition, trigger } from "@angular/animations";
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { UnitvaluePipe } from "src/app/shared/pipe/unitvalue/unitvalue.pipe";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { Icon } from "src/app/shared/type/widget";
+import { CurrentData, EdgeConfig, GridMode, Service, Utils } from "../../../../../shared/shared";
+import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from "./abstractsection.component";
@Component({
- selector: '[gridsection]',
- templateUrl: './grid.component.html',
+ selector: "[gridsection]",
+ templateUrl: "./grid.component.html",
animations: [
- trigger('GridBuy', [
- state('show', style({
+ trigger("GridBuy", [
+ state("show", style({
opacity: 0.4,
- transform: 'translateX(0%)',
+ transform: "translateX(0%)",
})),
- state('hide', style({
+ state("hide", style({
opacity: 0.1,
- transform: 'translateX(17%)',
+ transform: "translateX(17%)",
})),
- transition('show => hide', animate('650ms')),
- transition('hide => show', animate('0ms')),
+ transition("show => hide", animate("650ms")),
+ transition("hide => show", animate("0ms")),
]),
- trigger('GridSell', [
- state('show', style({
+ trigger("GridSell", [
+ state("show", style({
opacity: 0.1,
- transform: 'translateX(0%)',
+ transform: "translateX(0%)",
})),
- state('hide', style({
+ state("hide", style({
opacity: 0.4,
- transform: 'translateX(-17%)',
+ transform: "translateX(-17%)",
})),
- transition('show => hide', animate('650ms ease-out')),
- transition('hide => show', animate('0ms ease-in')),
+ transition("show => hide", animate("650ms ease-out")),
+ transition("hide => show", animate("0ms ease-in")),
]),
],
})
@@ -54,39 +54,39 @@ export class GridSectionComponent extends AbstractSection implements OnInit, OnD
service: Service,
unitpipe: UnitvaluePipe,
) {
- super('General.grid', "left", "#1d1d1d", translate, service, "Grid");
+ super("General.grid", "left", "#1d1d1d", translate, service, "Grid");
this.unitpipe = unitpipe;
}
get stateNameBuy() {
- return this.showBuyAnimation ? 'show' : 'hide';
+ return this.showBuyAnimation ? "show" : "hide";
}
get stateNameSell() {
- return this.showSellAnimation ? 'show' : 'hide';
+ return this.showSellAnimation ? "show" : "hide";
}
public static getCurrentGridIcon(currentData: CurrentData): Icon {
- const gridMode = currentData.allComponents['_sum/GridMode'];
- const restrictionMode = currentData.allComponents['ctrlEssLimiter14a0/RestrictionMode'];
+ const gridMode = currentData.allComponents["_sum/GridMode"];
+ const restrictionMode = currentData.allComponents["ctrlEssLimiter14a0/RestrictionMode"];
if (gridMode === GridMode.OFF_GRID) {
return {
- color: 'dark',
- name: 'oe-offgrid',
- size: '',
+ color: "dark",
+ name: "oe-offgrid",
+ size: "",
};
}
if (restrictionMode === 1) {
return {
- color: 'dark',
- name: 'oe-grid-restriction',
- size: '',
+ color: "dark",
+ name: "oe-grid-restriction",
+ size: "",
};
}
return {
- color: 'dark',
- name: 'oe-grid',
- size: '',
+ color: "dark",
+ name: "oe-grid",
+ size: "",
};
}
@@ -131,7 +131,7 @@ export class GridSectionComponent extends AbstractSection implements OnInit, OnD
} else {
arrowIndicate = 0;
}
- this.name = this.translate.instant('General.gridBuy');
+ this.name = this.translate.instant("General.gridBuy");
super.updateSectionData(
sum.grid.buyActivePower,
sum.grid.powerRatio,
@@ -147,13 +147,13 @@ export class GridSectionComponent extends AbstractSection implements OnInit, OnD
} else {
arrowIndicate = 0;
}
- this.name = this.translate.instant('General.gridSell');
+ this.name = this.translate.instant("General.gridSell");
super.updateSectionData(
sum.grid.sellActivePower,
sum.grid.powerRatio,
arrowIndicate);
} else {
- this.name = this.translate.instant('General.grid');
+ this.name = this.translate.instant("General.grid");
super.updateSectionData(0, null, null);
}
@@ -173,7 +173,7 @@ export class GridSectionComponent extends AbstractSection implements OnInit, OnD
}
protected getRatioType(): Ratio {
- return 'Negative and Positive [-1,1]';
+ return "Negative and Positive [-1,1]";
}
protected getSquarePosition(square: SvgSquare, innerRadius: number): SvgSquarePosition {
@@ -195,7 +195,7 @@ export class GridSectionComponent extends AbstractSection implements OnInit, OnD
if (value == null || Number.isNaN(value)) {
return "";
}
- return this.unitpipe.transform(value, 'kW');
+ return this.unitpipe.transform(value, "kW");
}
protected initEnergyFlow(radius: number): EnergyFlow {
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/production.component.html b/ui/src/app/edge/live/energymonitor/chart/section/production.component.html
index 28d77c53120..520a36472ff 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/production.component.html
+++ b/ui/src/app/edge/live/energymonitor/chart/section/production.component.html
@@ -23,4 +23,4 @@
[attr.width]="square.image.length" [attr.height]="square.image.length"
[attr.href]="square.image.image + '#root'">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/production.component.ts b/ui/src/app/edge/live/energymonitor/chart/section/production.component.ts
index e3615983827..a5efc3de02e 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/production.component.ts
+++ b/ui/src/app/edge/live/energymonitor/chart/section/production.component.ts
@@ -1,27 +1,27 @@
// @ts-strict-ignore
-import { animate, state, style, transition, trigger } from '@angular/animations';
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { UnitvaluePipe } from 'src/app/shared/pipe/unitvalue/unitvalue.pipe';
-import { DefaultTypes } from '../../../../../shared/service/defaulttypes';
-import { Service, Utils } from '../../../../../shared/shared';
-import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from './abstractsection.component';
+import { animate, state, style, transition, trigger } from "@angular/animations";
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { UnitvaluePipe } from "src/app/shared/pipe/unitvalue/unitvalue.pipe";
+import { DefaultTypes } from "../../../../../shared/service/defaulttypes";
+import { Service, Utils } from "../../../../../shared/shared";
+import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from "./abstractsection.component";
@Component({
- selector: '[productionsection]',
- templateUrl: './production.component.html',
+ selector: "[productionsection]",
+ templateUrl: "./production.component.html",
animations: [
- trigger('Production', [
- state('show', style({
+ trigger("Production", [
+ state("show", style({
opacity: 0.4,
- transform: 'translateY(0)',
+ transform: "translateY(0)",
})),
- state('hide', style({
+ state("hide", style({
opacity: 0.1,
- transform: 'translateY(17%)',
+ transform: "translateY(17%)",
})),
- transition('show => hide', animate('650ms ease-out')),
- transition('hide => show', animate('0ms ease-in')),
+ transition("show => hide", animate("650ms ease-out")),
+ transition("hide => show", animate("0ms ease-in")),
]),
],
})
@@ -38,12 +38,12 @@ export class ProductionSectionComponent extends AbstractSection implements OnIni
service: Service,
unitpipe: UnitvaluePipe,
) {
- super('General.production', "up", "#36aed1", translate, service, "Common_Production");
+ super("General.production", "up", "#36aed1", translate, service, "Common_Production");
this.unitpipe = unitpipe;
}
get stateName() {
- return this.showAnimation ? 'show' : 'hide';
+ return this.showAnimation ? "show" : "hide";
}
ngOnInit() {
@@ -70,7 +70,7 @@ export class ProductionSectionComponent extends AbstractSection implements OnIni
}
protected getRatioType(): Ratio {
- return 'Only Positive [0,1]';
+ return "Only Positive [0,1]";
}
protected _updateCurrentData(sum: DefaultTypes.Summary): void {
@@ -105,7 +105,7 @@ export class ProductionSectionComponent extends AbstractSection implements OnIni
return "";
}
- return this.unitpipe.transform(value, 'kW');
+ return this.unitpipe.transform(value, "kW");
}
protected initEnergyFlow(radius: number): EnergyFlow {
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/storage.component.html b/ui/src/app/edge/live/energymonitor/chart/section/storage.component.html
index 9fd35bf0f26..266ac898342 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/storage.component.html
+++ b/ui/src/app/edge/live/energymonitor/chart/section/storage.component.html
@@ -29,4 +29,4 @@
[attr.y]="square.image.y" [attr.width]="square.image.length" [attr.height]="square.image.length"
[attr.href]="square.image.image + '#root'">
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/energymonitor/chart/section/storage.component.ts b/ui/src/app/edge/live/energymonitor/chart/section/storage.component.ts
index 62f95103b1a..e98c6d563cf 100644
--- a/ui/src/app/edge/live/energymonitor/chart/section/storage.component.ts
+++ b/ui/src/app/edge/live/energymonitor/chart/section/storage.component.ts
@@ -1,40 +1,40 @@
// @ts-strict-ignore
-import { animate, state, style, transition, trigger } from '@angular/animations';
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { CurrentData } from 'src/app/shared/components/edge/currentdata';
-import { UnitvaluePipe } from 'src/app/shared/pipe/unitvalue/unitvalue.pipe';
-import { DefaultTypes } from '../../../../../shared/service/defaulttypes';
-import { Service, Utils } from '../../../../../shared/shared';
-import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from './abstractsection.component';
+import { animate, state, style, transition, trigger } from "@angular/animations";
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { CurrentData } from "src/app/shared/components/edge/currentdata";
+import { UnitvaluePipe } from "src/app/shared/pipe/unitvalue/unitvalue.pipe";
+import { DefaultTypes } from "../../../../../shared/service/defaulttypes";
+import { Service, Utils } from "../../../../../shared/shared";
+import { AbstractSection, EnergyFlow, Ratio, SvgEnergyFlow, SvgSquare, SvgSquarePosition } from "./abstractsection.component";
@Component({
- selector: '[storagesection]',
- templateUrl: './storage.component.html',
+ selector: "[storagesection]",
+ templateUrl: "./storage.component.html",
animations: [
- trigger('Discharge', [
- state('show', style({
+ trigger("Discharge", [
+ state("show", style({
opacity: 0.4,
- transform: 'translateY(0)',
+ transform: "translateY(0)",
})),
- state('hide', style({
+ state("hide", style({
opacity: 0.1,
- transform: 'translateY(-17%)',
+ transform: "translateY(-17%)",
})),
- transition('show => hide', animate('650ms ease-out')),
- transition('hide => show', animate('0ms ease-in')),
+ transition("show => hide", animate("650ms ease-out")),
+ transition("hide => show", animate("0ms ease-in")),
]),
- trigger('Charge', [
- state('show', style({
+ trigger("Charge", [
+ state("show", style({
opacity: 0.1,
- transform: 'translateY(0)',
+ transform: "translateY(0)",
})),
- state('hide', style({
+ state("hide", style({
opacity: 0.4,
- transform: 'translateY(17%)',
+ transform: "translateY(17%)",
})),
- transition('show => hide', animate('650ms ease-out')),
- transition('hide => show', animate('0ms ease-out')),
+ transition("show => hide", animate("650ms ease-out")),
+ transition("hide => show", animate("0ms ease-out")),
]),
],
})
@@ -55,16 +55,16 @@ export class StorageSectionComponent extends AbstractSection implements OnInit,
protected override service: Service,
unitpipe: UnitvaluePipe,
) {
- super('Edge.Index.Energymonitor.storage', "down", "#009846", translate, service, "Storage");
+ super("Edge.Index.Energymonitor.storage", "down", "#009846", translate, service, "Storage");
this.unitpipe = unitpipe;
}
get stateNameCharge() {
- return this.showChargeAnimation ? 'show' : 'hide';
+ return this.showChargeAnimation ? "show" : "hide";
}
get stateNameDischarge() {
- return this.showDischargeAnimation ? 'show' : 'hide';
+ return this.showDischargeAnimation ? "show" : "hide";
}
ngOnInit() {
@@ -96,12 +96,12 @@ export class StorageSectionComponent extends AbstractSection implements OnInit,
this.service.getCurrentEdge()
.then(async edge => {
edge.currentData.subscribe(curr => {
- const maxApparentPower = edge.isVersionAtLeast('2024.2.2')
- ? curr.channel['_sum/EssMaxDischargePower']
- : curr.channel['_sum/EssMaxApparentPower'];
- const minDischargePower = edge.isVersionAtLeast('2024.2.2')
- ? curr.channel['_sum/EssMinDischargePower']
- : curr.channel['_sum/EssMaxApparentPower'];
+ const maxApparentPower = edge.isVersionAtLeast("2024.2.2")
+ ? curr.channel["_sum/EssMaxDischargePower"]
+ : curr.channel["_sum/EssMaxApparentPower"];
+ const minDischargePower = edge.isVersionAtLeast("2024.2.2")
+ ? curr.channel["_sum/EssMinDischargePower"]
+ : curr.channel["_sum/EssMaxApparentPower"];
sum.storage.powerRatio = CurrentData.getEssPowerRatio(maxApparentPower, minDischargePower, sum.storage.effectivePower);
@@ -117,7 +117,7 @@ export class StorageSectionComponent extends AbstractSection implements OnInit,
arrowIndicate = 0;
}
- this.name = this.translate.instant('Edge.Index.Energymonitor.storageCharge');
+ this.name = this.translate.instant("Edge.Index.Energymonitor.storageCharge");
super.updateSectionData(
sum.storage.effectiveChargePower,
sum.storage.powerRatio,
@@ -133,20 +133,20 @@ export class StorageSectionComponent extends AbstractSection implements OnInit,
} else {
arrowIndicate = 0;
}
- this.name = this.translate.instant('Edge.Index.Energymonitor.storageDischarge');
+ this.name = this.translate.instant("Edge.Index.Energymonitor.storageDischarge");
super.updateSectionData(
sum.storage.effectiveDischargePower,
sum.storage.powerRatio,
arrowIndicate);
} else {
- this.name = this.translate.instant('Edge.Index.Energymonitor.storage');
+ this.name = this.translate.instant("Edge.Index.Energymonitor.storage");
super.updateSectionData(null, null, null);
}
this.socValue = sum.storage.soc;
if (this.square) {
this.square.image.image = "assets/img/" + this.getImagePath();
- this.svgStyle = 'storage-' + Utils.getStorageSocSegment(this.socValue);
+ this.svgStyle = "storage-" + Utils.getStorageSocSegment(this.socValue);
}
});
});
@@ -161,7 +161,7 @@ export class StorageSectionComponent extends AbstractSection implements OnInit,
}
protected getRatioType(): Ratio {
- return 'Negative and Positive [-1,1]';
+ return "Negative and Positive [-1,1]";
}
protected getSquarePosition(square: SvgSquare, innerRadius: number): SvgSquarePosition {
@@ -178,7 +178,7 @@ export class StorageSectionComponent extends AbstractSection implements OnInit,
if (value == null || Number.isNaN(value)) {
return "";
}
- return this.unitpipe.transform(value, 'kW');
+ return this.unitpipe.transform(value, "kW");
}
protected initEnergyFlow(radius: number): EnergyFlow {
diff --git a/ui/src/app/edge/live/energymonitor/energymonitor.component.html b/ui/src/app/edge/live/energymonitor/energymonitor.component.html
index f7c1e05e63a..779a8c37cc4 100644
--- a/ui/src/app/edge/live/energymonitor/energymonitor.component.html
+++ b/ui/src/app/edge/live/energymonitor/energymonitor.component.html
@@ -8,4 +8,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/energymonitor/energymonitor.component.ts b/ui/src/app/edge/live/energymonitor/energymonitor.component.ts
index d696a7497ba..8e07bbd2b83 100644
--- a/ui/src/app/edge/live/energymonitor/energymonitor.component.ts
+++ b/ui/src/app/edge/live/energymonitor/energymonitor.component.ts
@@ -1,10 +1,10 @@
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { ChannelAddress, Edge, Service, Websocket } from '../../../shared/shared';
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { ChannelAddress, Edge, Service, Websocket } from "../../../shared/shared";
@Component({
selector: EnergymonitorComponent.SELECTOR,
- templateUrl: './energymonitor.component.html',
+ templateUrl: "./energymonitor.component.html",
})
export class EnergymonitorComponent implements OnInit, OnDestroy {
@@ -18,23 +18,23 @@ export class EnergymonitorComponent implements OnInit, OnDestroy {
) { }
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
- const essMinMaxChannels = this.edge.isVersionAtLeast('2024.2.2')
- ? [new ChannelAddress('_sum', 'EssMinDischargePower'), new ChannelAddress('_sum', 'EssMaxDischargePower')]
- : [new ChannelAddress('_sum', 'EssMaxApparentPower')];
+ const essMinMaxChannels = this.edge.isVersionAtLeast("2024.2.2")
+ ? [new ChannelAddress("_sum", "EssMinDischargePower"), new ChannelAddress("_sum", "EssMaxDischargePower")]
+ : [new ChannelAddress("_sum", "EssMaxApparentPower")];
edge.subscribeChannels(this.websocket, EnergymonitorComponent.SELECTOR, [
// Ess
- new ChannelAddress('_sum', 'EssSoc'), new ChannelAddress('_sum', 'EssActivePower'),
+ new ChannelAddress("_sum", "EssSoc"), new ChannelAddress("_sum", "EssActivePower"),
...essMinMaxChannels,
// Grid
- new ChannelAddress('_sum', 'GridActivePower'), new ChannelAddress('_sum', 'GridMinActivePower'), new ChannelAddress('_sum', 'GridMaxActivePower'), new ChannelAddress('_sum', 'GridMode'),
+ new ChannelAddress("_sum", "GridActivePower"), new ChannelAddress("_sum", "GridMinActivePower"), new ChannelAddress("_sum", "GridMaxActivePower"), new ChannelAddress("_sum", "GridMode"),
// Production
- new ChannelAddress('_sum', 'ProductionActivePower'), new ChannelAddress('_sum', 'ProductionDcActualPower'), new ChannelAddress('_sum', 'ProductionAcActivePower'), new ChannelAddress('_sum', 'ProductionMaxActivePower'),
+ new ChannelAddress("_sum", "ProductionActivePower"), new ChannelAddress("_sum", "ProductionDcActualPower"), new ChannelAddress("_sum", "ProductionAcActivePower"), new ChannelAddress("_sum", "ProductionMaxActivePower"),
// Consumption
- new ChannelAddress('_sum', 'ConsumptionActivePower'), new ChannelAddress('_sum', 'ConsumptionMaxActivePower'),
+ new ChannelAddress("_sum", "ConsumptionActivePower"), new ChannelAddress("_sum", "ConsumptionMaxActivePower"),
]);
});
}
diff --git a/ui/src/app/edge/live/energymonitor/energymonitor.module.ts b/ui/src/app/edge/live/energymonitor/energymonitor.module.ts
index ac7eb9461f4..9da9e75aa96 100644
--- a/ui/src/app/edge/live/energymonitor/energymonitor.module.ts
+++ b/ui/src/app/edge/live/energymonitor/energymonitor.module.ts
@@ -1,14 +1,13 @@
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { BrowserModule } from '@angular/platform-browser';
-import { NgModule } from '@angular/core';
-import { SharedModule } from './../../../shared/shared.module';
-
-import { ConsumptionSectionComponent } from './chart/section/consumption.component';
-import { EnergymonitorChartComponent } from './chart/chart.component';
-import { EnergymonitorComponent } from './energymonitor.component';
-import { GridSectionComponent } from './chart/section/grid.component';
-import { ProductionSectionComponent } from './chart/section/production.component';
-import { StorageSectionComponent } from './chart/section/storage.component';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
+import { SharedModule } from "./../../../shared/shared.module";
+import { EnergymonitorChartComponent } from "./chart/chart.component";
+import { ConsumptionSectionComponent } from "./chart/section/consumption.component";
+import { GridSectionComponent } from "./chart/section/grid.component";
+import { ProductionSectionComponent } from "./chart/section/production.component";
+import { StorageSectionComponent } from "./chart/section/storage.component";
+import { EnergymonitorComponent } from "./energymonitor.component";
@NgModule({
imports: [
@@ -29,6 +28,3 @@ import { StorageSectionComponent } from './chart/section/storage.component';
],
})
export class EnergymonitorModule { }
-
-
-
diff --git a/ui/src/app/edge/live/info/info.component.html b/ui/src/app/edge/live/info/info.component.html
index 2e49a4083b3..47687b987ab 100644
--- a/ui/src/app/edge/live/info/info.component.html
+++ b/ui/src/app/edge/live/info/info.component.html
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/info/info.component.ts b/ui/src/app/edge/live/info/info.component.ts
index bc48bcc65e9..92da7235422 100644
--- a/ui/src/app/edge/live/info/info.component.ts
+++ b/ui/src/app/edge/live/info/info.component.ts
@@ -1,7 +1,7 @@
-import { Component } from '@angular/core';
+import { Component } from "@angular/core";
@Component({
- selector: 'info',
- templateUrl: './info.component.html',
+ selector: "info",
+ templateUrl: "./info.component.html",
})
export class InfoComponent { }
diff --git a/ui/src/app/edge/live/live.component.html b/ui/src/app/edge/live/live.component.html
index e771887a085..edf538ba7ab 100644
--- a/ui/src/app/edge/live/live.component.html
+++ b/ui/src/app/edge/live/live.component.html
@@ -1,7 +1,7 @@
-
+
@@ -44,7 +44,6 @@
-
@@ -57,7 +56,6 @@
*ngIf="factoryId !== 'Evcs.Cluster.PeakShaving' && factoryId !== 'Evcs.Cluster.SelfConsumption'">
-
@@ -159,4 +157,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/live.component.ts b/ui/src/app/edge/live/live.component.ts
index 07ef40f7c93..e3e022542c6 100644
--- a/ui/src/app/edge/live/live.component.ts
+++ b/ui/src/app/edge/live/live.component.ts
@@ -1,13 +1,13 @@
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { RefresherCustomEvent } from '@ionic/angular';
-import { Subject } from 'rxjs';
-import { DataService } from 'src/app/shared/components/shared/dataservice';
-import { Edge, EdgeConfig, Service, Utils, Websocket, Widgets } from 'src/app/shared/shared';
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { RefresherCustomEvent } from "@ionic/angular";
+import { Subject } from "rxjs";
+import { DataService } from "src/app/shared/components/shared/dataservice";
+import { Edge, EdgeConfig, Service, Utils, Websocket, Widgets } from "src/app/shared/shared";
@Component({
- selector: 'live',
- templateUrl: './live.component.html',
+ selector: "live",
+ templateUrl: "./live.component.html",
})
export class LiveComponent implements OnInit, OnDestroy {
@@ -25,7 +25,6 @@ export class LiveComponent implements OnInit, OnDestroy {
) { }
public ngOnInit() {
- this.service.setCurrentComponent('', this.route);
this.service.currentEdge.subscribe((edge) => {
this.edge = edge;
});
diff --git a/ui/src/app/edge/live/live.module.ts b/ui/src/app/edge/live/live.module.ts
index 62c2a8b672e..e3d7bbc0de3 100644
--- a/ui/src/app/edge/live/live.module.ts
+++ b/ui/src/app/edge/live/live.module.ts
@@ -1,46 +1,46 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { SharedModule } from './../../shared/shared.module';
-import { Common_Autarchy } from './common/autarchy/Common_Autarchy';
-import { Common_Consumption } from './common/consumption/Common_Consumption';
-import { Common_Grid } from './common/grid/Common_Grid';
-import { Common_Production } from './common/production/Common_Production';
-import { Common_Selfconsumption } from './common/selfconsumption/Common_Selfconsumption';
-import { StorageModalComponent } from './common/storage/modal/modal.component';
-import { StorageComponent } from './common/storage/storage.component';
-import { Controller_ChannelthresholdComponent } from './Controller/Channelthreshold/Channelthreshold';
-import { Controller_ChpSocComponent } from './Controller/ChpSoc/ChpSoc';
-import { Controller_ChpSocModalComponent } from './Controller/ChpSoc/modal/modal.component';
-import { Controller_Ess_FixActivePower } from './Controller/Ess/FixActivePower/Ess_FixActivePower';
-import { Controller_Ess_GridOptimizedCharge } from './Controller/Ess/GridOptimizedCharge/Ess_GridOptimizedCharge';
-import { Controller_Ess_TimeOfUseTariff } from './Controller/Ess/TimeOfUseTariff/Ess_TimeOfUseTariff';
-import { AdministrationComponent } from './Controller/Evcs/administration/administration.component';
-import { Controller_Io_ChannelSingleThresholdComponent } from './Controller/Io/ChannelSingleThreshold/Io_ChannelSingleThreshold';
-import { Controller_Io_ChannelSingleThresholdModalComponent } from './Controller/Io/ChannelSingleThreshold/modal/modal.component';
-import { Controller_Io_FixDigitalOutputComponent } from './Controller/Io/FixDigitalOutput/Io_FixDigitalOutput';
-import { Controller_Io_FixDigitalOutputModalComponent } from './Controller/Io/FixDigitalOutput/modal/modal.component';
-import { Controller_Io_HeatingElement } from './Controller/Io/HeatingElement/Io_HeatingElement';
-import { Controller_Io_HeatpumpComponent } from './Controller/Io/Heatpump/Io_Heatpump';
-import { Controller_Io_HeatpumpModalComponent } from './Controller/Io/Heatpump/modal/modal.component';
-import { Controller_Asymmetric_PeakShavingComponent } from './Controller/PeakShaving/Asymmetric/Asymmetric';
-import { Controller_Asymmetric_PeakShavingModalComponent } from './Controller/PeakShaving/Asymmetric/modal/modal.component';
-import { Controller_Symmetric_PeakShavingModalComponent } from './Controller/PeakShaving/Symmetric/modal/modal.component';
-import { Controller_Symmetric_PeakShavingComponent } from './Controller/PeakShaving/Symmetric/Symmetric';
-import { Controller_Symmetric_TimeSlot_PeakShavingModalComponent } from './Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component';
-import { Controller_Symmetric_TimeSlot_PeakShavingComponent } from './Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot';
-import { DelayedSellToGridComponent } from './delayedselltogrid/delayedselltogrid.component';
-import { DelayedSellToGridModalComponent } from './delayedselltogrid/modal/modal.component';
-import { EnergymonitorModule } from './energymonitor/energymonitor.module';
-import { InfoComponent } from './info/info.component';
-import { Io_Api_DigitalInputComponent } from './Io/Api_DigitalInput/Io_Api_DigitalInput';
-import { Io_Api_DigitalInput_ModalComponent } from './Io/Api_DigitalInput/modal/modal.component';
-import { LiveComponent } from './live.component';
-import { Evcs_Api_ClusterComponent } from './Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster';
-import { EvcsChartComponent } from './Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart';
-import { Evcs_Api_ClusterModalComponent } from './Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page';
-import { OfflineComponent } from './offline/offline.component';
-import { Controller_Evcs } from './Controller/Evcs/Evcs';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
+import { SharedModule } from "./../../shared/shared.module";
+import { Common_Autarchy } from "./common/autarchy/Common_Autarchy";
+import { Common_Consumption } from "./common/consumption/Common_Consumption";
+import { Common_Grid } from "./common/grid/Common_Grid";
+import { Common_Production } from "./common/production/Common_Production";
+import { Common_Selfconsumption } from "./common/selfconsumption/Common_Selfconsumption";
+import { StorageModalComponent } from "./common/storage/modal/modal.component";
+import { StorageComponent } from "./common/storage/storage.component";
+import { Controller_ChannelthresholdComponent } from "./Controller/Channelthreshold/Channelthreshold";
+import { Controller_ChpSocComponent } from "./Controller/ChpSoc/ChpSoc";
+import { Controller_ChpSocModalComponent } from "./Controller/ChpSoc/modal/modal.component";
+import { Controller_Ess_FixActivePower } from "./Controller/Ess/FixActivePower/Ess_FixActivePower";
+import { Controller_Ess_GridOptimizedCharge } from "./Controller/Ess/GridOptimizedCharge/Ess_GridOptimizedCharge";
+import { Controller_Ess_TimeOfUseTariff } from "./Controller/Ess/TimeOfUseTariff/Ess_TimeOfUseTariff";
+import { AdministrationComponent } from "./Controller/Evcs/administration/administration.component";
+import { Controller_Evcs } from "./Controller/Evcs/Evcs";
+import { Controller_Io_ChannelSingleThresholdComponent } from "./Controller/Io/ChannelSingleThreshold/Io_ChannelSingleThreshold";
+import { Controller_Io_ChannelSingleThresholdModalComponent } from "./Controller/Io/ChannelSingleThreshold/modal/modal.component";
+import { Controller_Io_FixDigitalOutputComponent } from "./Controller/Io/FixDigitalOutput/Io_FixDigitalOutput";
+import { Controller_Io_FixDigitalOutputModalComponent } from "./Controller/Io/FixDigitalOutput/modal/modal.component";
+import { Controller_Io_HeatingElement } from "./Controller/Io/HeatingElement/Io_HeatingElement";
+import { Controller_Io_HeatpumpComponent } from "./Controller/Io/Heatpump/Io_Heatpump";
+import { Controller_Io_HeatpumpModalComponent } from "./Controller/Io/Heatpump/modal/modal.component";
+import { Controller_Asymmetric_PeakShavingComponent } from "./Controller/PeakShaving/Asymmetric/Asymmetric";
+import { Controller_Asymmetric_PeakShavingModalComponent } from "./Controller/PeakShaving/Asymmetric/modal/modal.component";
+import { Controller_Symmetric_PeakShavingModalComponent } from "./Controller/PeakShaving/Symmetric/modal/modal.component";
+import { Controller_Symmetric_PeakShavingComponent } from "./Controller/PeakShaving/Symmetric/Symmetric";
+import { Controller_Symmetric_TimeSlot_PeakShavingModalComponent } from "./Controller/PeakShaving/Symmetric_TimeSlot/modal/modal.component";
+import { Controller_Symmetric_TimeSlot_PeakShavingComponent } from "./Controller/PeakShaving/Symmetric_TimeSlot/Symmetric_TimeSlot";
+import { DelayedSellToGridComponent } from "./delayedselltogrid/delayedselltogrid.component";
+import { DelayedSellToGridModalComponent } from "./delayedselltogrid/modal/modal.component";
+import { EnergymonitorModule } from "./energymonitor/energymonitor.module";
+import { InfoComponent } from "./info/info.component";
+import { Io_Api_DigitalInputComponent } from "./Io/Api_DigitalInput/Io_Api_DigitalInput";
+import { Io_Api_DigitalInput_ModalComponent } from "./Io/Api_DigitalInput/modal/modal.component";
+import { LiveComponent } from "./live.component";
+import { Evcs_Api_ClusterComponent } from "./Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster";
+import { EvcsChartComponent } from "./Multiple/Evcs_Api_Cluster/modal/evcs-chart/evcs.chart";
+import { Evcs_Api_ClusterModalComponent } from "./Multiple/Evcs_Api_Cluster/modal/evcsCluster-modal.page";
+import { OfflineComponent } from "./offline/offline.component";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/live/livedataservice.ts b/ui/src/app/edge/live/livedataservice.ts
index 268b392bf72..e4eda4ab642 100644
--- a/ui/src/app/edge/live/livedataservice.ts
+++ b/ui/src/app/edge/live/livedataservice.ts
@@ -1,11 +1,10 @@
// @ts-strict-ignore
import { Directive, Inject, OnDestroy } from "@angular/core";
+import { RefresherCustomEvent } from "@ionic/angular";
import { takeUntil } from "rxjs/operators";
-import { v4 as uuidv4 } from 'uuid';
-
+import { v4 as uuidv4 } from "uuid";
import { DataService } from "../../shared/components/shared/dataservice";
import { ChannelAddress, Edge, Service, Websocket } from "../../shared/shared";
-import { RefresherCustomEvent } from "@ionic/angular";
@Directive()
export class LiveDataService extends DataService implements OnDestroy {
diff --git a/ui/src/app/edge/live/offline/offline.component.html b/ui/src/app/edge/live/offline/offline.component.html
index dc4b68b4b11..d9fb11a00c5 100644
--- a/ui/src/app/edge/live/offline/offline.component.html
+++ b/ui/src/app/edge/live/offline/offline.component.html
@@ -1,6 +1,6 @@
- OpenEMS is offline
+ OpenEMS is offline since {{timeSinceOffline}}
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/live/offline/offline.component.ts b/ui/src/app/edge/live/offline/offline.component.ts
index 6122b2b0af7..5af0358d185 100644
--- a/ui/src/app/edge/live/offline/offline.component.ts
+++ b/ui/src/app/edge/live/offline/offline.component.ts
@@ -1,21 +1,51 @@
-import { Component, OnInit } from '@angular/core';
-import { Edge, Service } from 'src/app/shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { Edge, Service, Utils } from "src/app/shared/shared";
+import { DateUtils } from "src/app/shared/utils/date/dateutils";
+// TODO add translations when refactoring offline.component.html
@Component({
- selector: 'offline',
- templateUrl: './offline.component.html',
+ selector: "offline",
+ templateUrl: "./offline.component.html",
})
export class OfflineComponent implements OnInit {
- public edge: Edge | null = null;
+ protected edge: Edge | null = null;
+ protected timeSinceOffline: string | null = null;
constructor(
public service: Service,
) { }
+ private static formatSecondsToFullMinutes(date: string): null | string {
+
+ const _date: Date | null = DateUtils.stringToDate(date);
+ if (!_date) {
+ return null;
+ }
+
+ const milliSeconds: number = _date.getTime();
+ const _diff: number | null = Utils.subtractSafely(new Date().getTime(), milliSeconds);
+
+ if (_diff === null) {
+ return null;
+ }
+
+ if (_diff > 2 * 24 * 60 * 60 * 1000) {
+ return Utils.floorSafely(Utils.divideSafely(_diff, 24 * 60 * 60 * 1000)) + " Tagen";
+ }
+
+ if (_diff > 2 * 60 * 60 * 1000) {
+ return Utils.floorSafely(Utils.divideSafely(_diff, 60 * 60 * 1000)) + " Stunden";
+ }
+
+ const minutes: number | null = Utils.floorSafely(Utils.divideSafely(_diff, 60 * 1000));
+ return Utils.floorSafely(Utils.divideSafely(_diff, 60 * 1000)) + " " + (minutes === 1 ? "Minute" : "Minuten");
+ }
+
ngOnInit() {
this.service.getCurrentEdge().then(edge => {
this.edge = edge;
+ this.timeSinceOffline = OfflineComponent.formatSecondsToFullMinutes(edge.lastmessage.toString());
});
}
}
diff --git a/ui/src/app/edge/settings/alerting/alerting.component.ts b/ui/src/app/edge/settings/alerting/alerting.component.ts
index a9d378aa220..865420ec5bc 100644
--- a/ui/src/app/edge/settings/alerting/alerting.component.ts
+++ b/ui/src/app/edge/settings/alerting/alerting.component.ts
@@ -1,12 +1,12 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { GetUserAlertingConfigsRequest } from 'src/app/shared/jsonrpc/request/getUserAlertingConfigsRequest';
-import { SetUserAlertingConfigsRequest, UserSettingRequest } from 'src/app/shared/jsonrpc/request/setUserAlertingConfigsRequest';
-import { AlertingSettingResponse, GetUserAlertingConfigsResponse } from 'src/app/shared/jsonrpc/response/getUserAlertingConfigsResponse';
-import { Edge, Service, Utils, Websocket } from 'src/app/shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { GetUserAlertingConfigsRequest } from "src/app/shared/jsonrpc/request/getUserAlertingConfigsRequest";
+import { SetUserAlertingConfigsRequest, UserSettingRequest } from "src/app/shared/jsonrpc/request/setUserAlertingConfigsRequest";
+import { AlertingSettingResponse, GetUserAlertingConfigsResponse } from "src/app/shared/jsonrpc/response/getUserAlertingConfigsResponse";
+import { Edge, Service, Utils, Websocket } from "src/app/shared/shared";
export enum AlertingType {
offline = 0,
@@ -21,7 +21,7 @@ type DetailedAlertingSetting = AlertingSetting & { isOfflineActive: boolean, isF
@Component({
selector: AlertingComponent.SELECTOR,
- templateUrl: './alerting.component.html',
+ templateUrl: "./alerting.component.html",
})
export class AlertingComponent implements OnInit {
@@ -55,7 +55,7 @@ export class AlertingComponent implements OnInit {
}
public ngOnInit(): void {
- this.service.setCurrentComponent({ languageKey: 'Edge.Config.Index.alerting' }, this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
const request = new GetUserAlertingConfigsRequest({ edgeId: this.edge.id });
@@ -94,16 +94,16 @@ export class AlertingComponent implements OnInit {
}
if (delay >= 1440) {
delay = delay / 1440;
- return delay + ' ' + (delay == 1
+ return delay + " " + (delay == 1
? this.translate.instant("General.TIME.DAY")
: this.translate.instant("General.TIME.DAYS"));
} else if (delay >= 60) {
delay = delay / 60;
- return delay + ' ' + (delay == 1
+ return delay + " " + (delay == 1
? this.translate.instant("General.TIME.HOUR")
: this.translate.instant("General.TIME.HOURS"));
} else {
- return delay + ' ' + (delay == 1
+ return delay + " " + (delay == 1
? this.translate.instant("General.TIME.MINUTE")
: this.translate.instant("General.TIME.MINUTES"));
}
@@ -142,9 +142,9 @@ export class AlertingComponent implements OnInit {
for (const user of this.otherUserInformation) {
const control = this.otherUserForm.controls[user.userLogin];
if (control.dirty) {
- const offlineEdgeDelay = control.value['offlineEdgeDelay'];
- const faultEdgeDelay = control.value['faultEdgeDelay'];
- const warningEdgeDelay = control.value['warningEdgeDelay'];
+ const offlineEdgeDelay = control.value["offlineEdgeDelay"];
+ const faultEdgeDelay = control.value["faultEdgeDelay"];
+ const warningEdgeDelay = control.value["warningEdgeDelay"];
//let isActivated = control.value['isActivated'];
changedUserSettings.push({
userLogin: user.userLogin,
@@ -228,8 +228,6 @@ export class AlertingComponent implements OnInit {
return setting.faultEdgeDelay;
case AlertingType.warning:
return setting.warningEdgeDelay;
- default:
- return 0;
}
}
@@ -252,7 +250,7 @@ export class AlertingComponent implements OnInit {
private sortedAlphabetically(userSettings: AlertingSettingResponse[]): AlertingSettingResponse[] {
return userSettings.sort((userA, userB) => {
- return userA.userLogin.localeCompare(userB.userLogin, undefined, { sensitivity: 'accent' });
+ return userA.userLogin.localeCompare(userB.userLogin, undefined, { sensitivity: "accent" });
});
}
@@ -273,14 +271,14 @@ export class AlertingComponent implements OnInit {
private sendRequestAndUpdate(request: GetUserAlertingConfigsRequest | SetUserAlertingConfigsRequest, formGroup: FormGroup[]) {
this.sendRequest(request)
.then(() => {
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
for (const group of formGroup.values()) {
group.markAsPristine();
}
})
.catch((response) => {
const error = response.error;
- this.errorToast(this.translate.instant('General.changeFailed'), error.message);
+ this.errorToast(this.translate.instant("General.changeFailed"), error.message);
});
}
@@ -297,7 +295,7 @@ export class AlertingComponent implements OnInit {
}).catch(reason => {
const error = reason.error;
console.error(error);
- this.errorToast(this.translate.instant('Edge.Config.ALERTING.TOAST.ERROR'), error.message);
+ this.errorToast(this.translate.instant("Edge.Config.ALERTING.TOAST.ERROR"), error.message);
reject(reason);
}).finally(() => {
this.service.stopSpinner(this.spinnerId);
@@ -306,6 +304,6 @@ export class AlertingComponent implements OnInit {
}
private errorToast(errorType: string, errorMsg: string) {
- this.service.toast('[ ' + errorType + ' ]
' + errorMsg, 'danger');
+ this.service.toast("[ " + errorType + " ]
" + errorMsg, "danger");
}
}
diff --git a/ui/src/app/edge/settings/app/app.module.ts b/ui/src/app/edge/settings/app/app.module.ts
index 3b12184a7ed..80554dac42b 100644
--- a/ui/src/app/edge/settings/app/app.module.ts
+++ b/ui/src/app/edge/settings/app/app.module.ts
@@ -1,32 +1,32 @@
// @ts-strict-ignore
-import { NgModule } from '@angular/core';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { InstallAppComponent } from './install.component';
-import { IndexComponent } from './index.component';
-import { SingleAppComponent } from './single.component';
-import { UpdateAppComponent } from './update.component';
-import { KeyModalComponent } from './keypopup/modal.component';
-import { FormControl, ValidationErrors } from '@angular/forms';
-import { FormlyModule, FORMLY_CONFIG } from '@ngx-formly/core';
-import { TranslateService } from '@ngx-translate/core';
-import { FormlySafeInputModalComponent } from './formly/safe-input/formly-safe-input-modal.component';
-import { FormlySafeInputWrapperComponent } from './formly/safe-input/formly-safe-input.extended';
-import { FormlyTextComponent } from './formly/formly-text';
-import { FormlyInputWithUnitComponent } from './formly/input-with-unit';
-import { FormlyOptionGroupPickerComponent } from './formly/option-group-picker/formly-option-group-picker.component';
-import { FormlyReorderArrayComponent } from './formly/reorder-select/formly-reorder-array.component';
+import { NgModule } from "@angular/core";
+import { FormControl, ValidationErrors } from "@angular/forms";
+import { FORMLY_CONFIG, FormlyModule } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
+import { SharedModule } from "src/app/shared/shared.module";
+import { FormlyTextComponent } from "./formly/formly-text";
+import { FormlyInputWithUnitComponent } from "./formly/input-with-unit";
+import { FormlyOptionGroupPickerComponent } from "./formly/option-group-picker/formly-option-group-picker.component";
+import { FormlyReorderArrayComponent } from "./formly/reorder-select/formly-reorder-array.component";
+import { FormlySafeInputModalComponent } from "./formly/safe-input/formly-safe-input-modal.component";
+import { FormlySafeInputWrapperComponent } from "./formly/safe-input/formly-safe-input.extended";
+import { IndexComponent } from "./index.component";
+import { InstallAppComponent } from "./install.component";
+import { KeyModalComponent } from "./keypopup/modal.component";
+import { SingleAppComponent } from "./single.component";
+import { UpdateAppComponent } from "./update.component";
export function KeyValidator(control: FormControl): ValidationErrors {
- return /^(.{4}-){3}.{4}$/.test(control.value) ? null : { 'key': true };
+ return /^(.{4}-){3}.{4}$/.test(control.value) ? null : { "key": true };
}
export function registerTranslateExtension(translate: TranslateService) {
return {
validationMessages: [
{
- name: 'key',
+ name: "key",
message() {
- return translate.stream('Edge.Config.App.Key.invalidPattern');
+ return translate.stream("Edge.Config.App.Key.invalidPattern");
},
},
],
@@ -47,10 +47,10 @@ export function registerTranslateExtension(translate: TranslateService) {
{ name: "reorder-array", component: FormlyReorderArrayComponent },
],
validators: [
- { name: 'key', validation: KeyValidator },
+ { name: "key", validation: KeyValidator },
],
validationMessages: [
- { name: 'key', message: "The key doesnt match the pattern!" },
+ { name: "key", message: "The key doesnt match the pattern!" },
],
}),
],
diff --git a/ui/src/app/edge/settings/app/formly/formly-text.ts b/ui/src/app/edge/settings/app/formly/formly-text.ts
index 6e206169d13..d8fe8a1c681 100644
--- a/ui/src/app/edge/settings/app/formly/formly-text.ts
+++ b/ui/src/app/edge/settings/app/formly/formly-text.ts
@@ -2,8 +2,8 @@ import { Component, ViewEncapsulation } from "@angular/core";
import { FieldType, FieldTypeConfig } from "@ngx-formly/core";
@Component({
- selector: 'formly-text',
- styles: ['.warning {color: red}'],
+ selector: "formly-text",
+ styles: [".warning {color: red}"],
template: `
@@ -11,7 +11,7 @@ import { FieldType, FieldTypeConfig } from "@ngx-formly/core";
`,
encapsulation: ViewEncapsulation.None,
})
-export class FormlyTextComponent extends FieldType {
+export class FormlyTextComponent extends FieldType {
constructor(
) {
diff --git a/ui/src/app/edge/settings/app/formly/input-with-unit.ts b/ui/src/app/edge/settings/app/formly/input-with-unit.ts
index f36cdd12bdd..12852b9c35a 100644
--- a/ui/src/app/edge/settings/app/formly/input-with-unit.ts
+++ b/ui/src/app/edge/settings/app/formly/input-with-unit.ts
@@ -1,8 +1,8 @@
-import { Component } from '@angular/core';
-import { FieldWrapper } from '@ngx-formly/core';
+import { Component } from "@angular/core";
+import { FieldWrapper } from "@ngx-formly/core";
@Component({
- selector: 'formly-input-with-unit',
+ selector: "formly-input-with-unit",
template: `
diff --git a/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.html b/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.html
index 4b291de45e1..3919cd33ff9 100644
--- a/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.html
+++ b/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.html
@@ -39,4 +39,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.ts b/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.ts
index b707644d911..0e0ec8e1f60 100644
--- a/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.ts
+++ b/ui/src/app/edge/settings/app/formly/option-group-picker/formly-option-group-picker.component.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
import { Component, OnInit } from "@angular/core";
import { FieldType, FieldTypeConfig, FormlyFieldConfig } from "@ngx-formly/core";
-import { OptionGroup, OptionGroupConfig, Option, getTitleFromOptionConfig } from "./optionGroupPickerConfiguration";
+import { Option, OptionGroup, OptionGroupConfig, getTitleFromOptionConfig } from "./optionGroupPickerConfiguration";
@Component({
- selector: 'formly-option-group-picker',
- templateUrl: './formly-option-group-picker.component.html',
+ selector: "formly-option-group-picker",
+ templateUrl: "./formly-option-group-picker.component.html",
})
export class FormlyOptionGroupPickerComponent extends FieldType implements OnInit {
diff --git a/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.html b/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.html
index 61f3a2ecd8c..16c3d0ff194 100644
--- a/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.html
+++ b/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.html
@@ -41,4 +41,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.ts b/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.ts
index f9923d3a31b..808171892bb 100644
--- a/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.ts
+++ b/ui/src/app/edge/settings/app/formly/reorder-select/formly-reorder-array.component.ts
@@ -4,8 +4,8 @@ import { ItemReorderEventDetail } from "@ionic/angular";
import { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyFieldProps } from "@ngx-formly/core";
@Component({
- selector: 'reorder-array',
- templateUrl: './formly-reorder-array.component.html',
+ selector: "reorder-array",
+ templateUrl: "./formly-reorder-array.component.html",
})
export class FormlyReorderArrayComponent extends FieldType
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input-modal.component.ts b/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input-modal.component.ts
index 87110962d05..09429469287 100644
--- a/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input-modal.component.ts
+++ b/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input-modal.component.ts
@@ -5,8 +5,8 @@ import { ModalController } from "@ionic/angular";
import { FormlyFieldConfig } from "@ngx-formly/core";
@Component({
- selector: 'formly-safe-input-modal',
- templateUrl: './formly-safe-input-modal.component.html',
+ selector: "formly-safe-input-modal",
+ templateUrl: "./formly-safe-input-modal.component.html",
})
export class FormlySafeInputModalComponent implements OnInit {
diff --git a/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.html b/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.html
index 58d5124f8b3..08481c07142 100644
--- a/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.html
+++ b/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.html
@@ -22,4 +22,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.ts b/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.ts
index 32aae50bfda..cf4d9ebbf40 100644
--- a/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.ts
+++ b/ui/src/app/edge/settings/app/formly/safe-input/formly-safe-input.extended.ts
@@ -2,18 +2,18 @@
import { Component, OnInit } from "@angular/core";
import { ModalController } from "@ionic/angular";
import { FieldWrapper, FormlyFieldConfig } from "@ngx-formly/core";
-import { FormlySafeInputModalComponent } from "./formly-safe-input-modal.component";
import { GetAppAssistant } from "../../jsonrpc/getAppAssistant";
import { OptionGroupConfig, getTitleFromOptionConfig } from "../option-group-picker/optionGroupPickerConfiguration";
+import { FormlySafeInputModalComponent } from "./formly-safe-input-modal.component";
@Component({
- selector: 'formly-safe-input-wrapper',
- templateUrl: './formly-safe-input.extended.html',
+ selector: "formly-safe-input-wrapper",
+ templateUrl: "./formly-safe-input.extended.html",
})
export class FormlySafeInputWrapperComponent extends FieldWrapper implements OnInit {
protected pathToDisplayValue: string;
- protected displayType: 'string' | 'boolean' | 'number' | 'optionGroup';
+ protected displayType: "string" | "boolean" | "number" | "optionGroup";
constructor(
private modalController: ModalController,
@@ -23,17 +23,17 @@ export class FormlySafeInputWrapperComponent extends FieldWrapper implements OnI
ngOnInit(): void {
this.pathToDisplayValue = this.props["pathToDisplayValue"];
- this.displayType = this.props["displayType"] ?? 'string';
+ this.displayType = this.props["displayType"] ?? "string";
}
public getValue() {
- if (this.displayType === 'boolean'
- || this.displayType === 'number'
- || this.displayType === 'string') {
+ if (this.displayType === "boolean"
+ || this.displayType === "number"
+ || this.displayType === "string") {
return this.model[this.pathToDisplayValue];
}
- if (this.displayType === 'optionGroup') {
+ if (this.displayType === "optionGroup") {
const value = this.getValueOfOptionGroup();
if (value) {
return value;
@@ -60,7 +60,7 @@ export class FormlySafeInputWrapperComponent extends FieldWrapper implements OnI
fields: this.getFields(),
model: this.model,
},
- cssClass: ['auto-height'],
+ cssClass: ["auto-height"],
});
modal.onDidDismiss().then(event => {
if (!event.data) {
@@ -102,7 +102,7 @@ export class FormlySafeInputWrapperComponent extends FieldWrapper implements OnI
}
private getValueOfOptionGroup(): string {
- const field = GetAppAssistant.findField(this.getFields(), this.pathToDisplayValue.split('.'));
+ const field = GetAppAssistant.findField(this.getFields(), this.pathToDisplayValue.split("."));
if (!field) {
return null;
}
@@ -112,7 +112,7 @@ export class FormlySafeInputWrapperComponent extends FieldWrapper implements OnI
if (Array.isArray(value)) {
return (value as []).map(e => options.find(option => option.value === e))
.map(option => getTitleFromOptionConfig(option, this.field))
- .join(', ');
+ .join(", ");
} else {
const option = options.find(option => option.value === value);
if (!option) {
diff --git a/ui/src/app/edge/settings/app/index.component.ts b/ui/src/app/edge/settings/app/index.component.ts
index 02051b79b30..e0b1966f563 100644
--- a/ui/src/app/edge/settings/app/index.component.ts
+++ b/ui/src/app/edge/settings/app/index.component.ts
@@ -1,52 +1,52 @@
// @ts-strict-ignore
-import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
-import { IonPopover, ModalController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Subject } from 'rxjs';
-import { takeUntil } from 'rxjs/operators';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { Role } from 'src/app/shared/type/role';
-import { Environment, environment } from 'src/environments';
-import { Edge, Service, Websocket } from '../../../shared/shared';
-import { ExecuteSystemUpdate } from '../system/executeSystemUpdate';
-import { GetApps } from './jsonrpc/getApps';
-import { AppCenter } from './keypopup/appCenter';
-import { AppCenterGetPossibleApps } from './keypopup/appCenterGetPossibleApps';
-import { Key } from './keypopup/key';
-import { KeyModalComponent, KeyValidationBehaviour } from './keypopup/modal.component';
-import { canEnterKey } from './permissions';
-import { Flags } from './jsonrpc/flag/flags';
-import { App } from './keypopup/app';
-import { InstallAppComponent } from './install.component';
-import { AppCenterGetRegisteredKeys } from './keypopup/appCenterGetRegisteredKeys';
+import { Component, OnDestroy, OnInit, ViewChild } from "@angular/core";
+import { ActivatedRoute, NavigationEnd, NavigationExtras, Router } from "@angular/router";
+import { IonPopover, ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Subject } from "rxjs";
+import { filter, switchMap, takeUntil } from "rxjs/operators";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { Role } from "src/app/shared/type/role";
+import { Environment, environment } from "src/environments";
+import { Edge, Service, Websocket } from "../../../shared/shared";
+import { ExecuteSystemUpdate } from "../system/executeSystemUpdate";
+import { InstallAppComponent } from "./install.component";
+import { Flags } from "./jsonrpc/flag/flags";
+import { GetApps } from "./jsonrpc/getApps";
+import { App } from "./keypopup/app";
+import { AppCenter } from "./keypopup/appCenter";
+import { AppCenterGetPossibleApps } from "./keypopup/appCenterGetPossibleApps";
+import { AppCenterGetRegisteredKeys } from "./keypopup/appCenterGetRegisteredKeys";
+import { Key } from "./keypopup/key";
+import { KeyModalComponent, KeyValidationBehaviour } from "./keypopup/modal.component";
+import { canEnterKey } from "./permissions";
@Component({
selector: IndexComponent.SELECTOR,
- templateUrl: './index.component.html',
+ templateUrl: "./index.component.html",
})
export class IndexComponent implements OnInit, OnDestroy {
- private static readonly SELECTOR = 'app-index';
+ private static readonly SELECTOR = "app-index";
/**
* e. g. if more than 4 apps are in a list the apps are displayed in their categories
*/
private static readonly MAX_APPS_IN_LIST: number = 4;
- @ViewChild('hasKeyPopover') private hasKeyPopover: IonPopover;
+ @ViewChild("hasKeyPopover") private hasKeyPopover: IonPopover;
public readonly spinnerId: string = IndexComponent.SELECTOR;
public apps: GetApps.App[] = [];
public installedApps: AppList = {
- name: 'Edge.Config.App.installed', appCategories: []
+ name: "Edge.Config.App.installed", appCategories: []
, shouldBeShown: () => this.key === null, // only show installed apps when the user is not currently selecting an app from a key
};
public availableApps: AppList = {
- name: 'Edge.Config.App.available', appCategories: []
+ name: "Edge.Config.App.available", appCategories: []
, shouldBeShown: () => true, // always show available apps
};
public incompatibleApps: AppList = {
- name: 'Edge.Config.App.incompatible', appCategories: []
+ name: "Edge.Config.App.incompatible", appCategories: []
, shouldBeShown: () => this.edge.roleIsAtLeast(Role.ADMIN), // only show incompatible apps for admins
};
@@ -76,6 +76,17 @@ export class IndexComponent implements OnInit, OnDestroy {
public ngOnInit() {
this.init();
+ this.router.events.pipe(
+ filter(event => event instanceof NavigationEnd),
+ switchMap(() => this.route.url),
+ takeUntil(this.stopOnDestroy),
+ ).subscribe(() => {
+ const navigationExtras = this.router.getCurrentNavigation()?.extras as NavigationExtras;
+ const appInstanceChange = navigationExtras?.state?.appInstanceChange;
+ if (appInstanceChange != null && appInstanceChange) {
+ this.init();
+ }
+ });
}
public ngOnDestroy(): void {
@@ -120,11 +131,11 @@ export class IndexComponent implements OnInit, OnDestroy {
sortedApps.forEach(a => {
if (a.instanceIds.length > 0) {
this.pushIntoCategory(a, this.installedApps);
- if (a.cardinality === 'MULTIPLE' && a.status.name !== 'INCOMPATIBLE') {
+ if (a.cardinality === "MULTIPLE" && a.status.name !== "INCOMPATIBLE") {
this.pushIntoCategory(a, this.availableApps);
}
} else {
- if (a.status.name === 'INCOMPATIBLE') {
+ if (a.status.name === "INCOMPATIBLE") {
this.pushIntoCategory(a, this.incompatibleApps);
} else {
this.pushIntoCategory(a, this.availableApps);
@@ -152,7 +163,7 @@ export class IndexComponent implements OnInit, OnDestroy {
behaviour: KeyValidationBehaviour.SELECT,
knownApps: this.apps,
},
- cssClass: 'auto-height',
+ cssClass: "auto-height",
});
modal.onDidDismiss().then(data => {
if (!data.data) {
@@ -200,10 +211,10 @@ export class IndexComponent implements OnInit, OnDestroy {
protected onAppClicked(app: GetApps.App): void {
// navigate
if (this.key != null || this.useMasterKey) {
- this.router.navigate(['device/' + (this.edge.id) + '/settings/app/single/' + app.appId]
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/app/single/" + app.appId]
, { queryParams: { name: app.name }, state: { app: app, appKey: this.key.keyId, useMasterKey: this.useMasterKey } });
} else {
- this.router.navigate(['device/' + (this.edge.id) + '/settings/app/single/' + app.appId], { queryParams: { name: app.name }, state: app });
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/app/single/" + app.appId], { queryParams: { name: app.name }, state: app });
}
// reset keys
this.key = null;
@@ -220,7 +231,7 @@ export class IndexComponent implements OnInit, OnDestroy {
edge: this.edge,
behaviour: KeyValidationBehaviour.REGISTER,
},
- cssClass: 'auto-height',
+ cssClass: "auto-height",
});
return await modal.present();
@@ -240,8 +251,8 @@ export class IndexComponent implements OnInit, OnDestroy {
this.hasSeenPopover = true;
this.hasKeyPopover.event = {
- type: 'willPresent',
- target: document.querySelector('#redeemKeyCard'),
+ type: "willPresent",
+ target: document.querySelector("#redeemKeyCard"),
};
this.showPopover = true;
}
@@ -271,7 +282,7 @@ export class IndexComponent implements OnInit, OnDestroy {
});
this.service.setCurrentComponent({
- languageKey: 'Edge.Config.App.NAME_WITH_EDGE_NAME',
+ languageKey: "Edge.Config.App.NAME_WITH_EDGE_NAME",
interpolateParams: { edgeShortName: environment.edgeShortName },
}, this.route).then(edge => {
this.edge = edge;
@@ -284,7 +295,7 @@ export class IndexComponent implements OnInit, OnDestroy {
});
edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new GetApps.Request(),
})).then(response => {
@@ -313,7 +324,7 @@ export class IndexComponent implements OnInit, OnDestroy {
this.numberOfUnusedRegisteredKeys = result.keys.length;
this.updateHasUnusedKeysPopover();
}).catch(this.service.handleError);
- }).catch(InstallAppComponent.errorToast(this.service, error => 'Error while receiving available apps: ' + error));
+ }).catch(InstallAppComponent.errorToast(this.service, error => "Error while receiving available apps: " + error));
const systemUpdate = new ExecuteSystemUpdate(edge, this.websocket);
systemUpdate.systemUpdateStateChange = (updateState) => {
diff --git a/ui/src/app/edge/settings/app/install.component.html b/ui/src/app/edge/settings/app/install.component.html
index 92b8960b12f..2418d652e3a 100644
--- a/ui/src/app/edge/settings/app/install.component.html
+++ b/ui/src/app/edge/settings/app/install.component.html
@@ -27,4 +27,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/app/install.component.ts b/ui/src/app/edge/settings/app/install.component.ts
index 18468365653..d41cb72f035 100644
--- a/ui/src/app/edge/settings/app/install.component.ts
+++ b/ui/src/app/edge/settings/app/install.component.ts
@@ -1,30 +1,30 @@
// @ts-strict-ignore
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { FormlyFieldConfig } from '@ngx-formly/core';
-import { TranslateService } from '@ngx-translate/core';
-import { Subject } from 'rxjs';
-import { takeUntil } from 'rxjs/operators';
-import { JsonrpcRequest } from 'src/app/shared/jsonrpc/base';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { Edge, Service, Utils, Websocket } from '../../../shared/shared';
-import { AddAppInstance } from './jsonrpc/addAppInstance';
-import { GetAppAssistant } from './jsonrpc/getAppAssistant';
-import { AppCenter } from './keypopup/appCenter';
-import { AppCenterInstallAppWithSuppliedKeyRequest } from './keypopup/appCenterInstallAppWithSuppliedKey';
-import { AppCenterIsAppFree } from './keypopup/appCenterIsAppFree';
-import { KeyModalComponent, KeyValidationBehaviour } from './keypopup/modal.component';
-import { hasPredefinedKey } from './permissions';
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { FormlyFieldConfig } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
+import { Subject } from "rxjs";
+import { takeUntil } from "rxjs/operators";
+import { JsonrpcRequest } from "src/app/shared/jsonrpc/base";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { Edge, Service, Utils, Websocket } from "../../../shared/shared";
+import { AddAppInstance } from "./jsonrpc/addAppInstance";
+import { GetAppAssistant } from "./jsonrpc/getAppAssistant";
+import { AppCenter } from "./keypopup/appCenter";
+import { AppCenterInstallAppWithSuppliedKeyRequest } from "./keypopup/appCenterInstallAppWithSuppliedKey";
+import { AppCenterIsAppFree } from "./keypopup/appCenterIsAppFree";
+import { KeyModalComponent, KeyValidationBehaviour } from "./keypopup/modal.component";
+import { hasPredefinedKey } from "./permissions";
@Component({
selector: InstallAppComponent.SELECTOR,
- templateUrl: './install.component.html',
+ templateUrl: "./install.component.html",
})
export class InstallAppComponent implements OnInit, OnDestroy {
- private static readonly SELECTOR = 'app-install';
+ private static readonly SELECTOR = "app-install";
public readonly spinnerId: string = InstallAppComponent.SELECTOR;
protected form: FormGroup | null = null;
@@ -68,7 +68,7 @@ export class InstallAppComponent implements OnInit, OnDestroy {
}
}
console.error(reason);
- service.toast(messageBuilder(reason), 'danger');
+ service.toast(messageBuilder(reason), "danger");
};
}
@@ -76,15 +76,15 @@ export class InstallAppComponent implements OnInit, OnDestroy {
this.service.startSpinner(this.spinnerId);
const state = history?.state;
if (state) {
- if ('appKey' in state) {
- this.key = state['appKey'];
+ if ("appKey" in state) {
+ this.key = state["appKey"];
}
- if ('useMasterKey' in state) {
- this.useMasterKey = state['useMasterKey'];
+ if ("useMasterKey" in state) {
+ this.useMasterKey = state["useMasterKey"];
}
}
- const appId = this.route.snapshot.params['appId'];
- const appName = this.route.snapshot.queryParams['name'];
+ const appId = this.route.snapshot.params["appId"];
+ const appName = this.route.snapshot.queryParams["name"];
this.appId = appId;
this.service.setCurrentComponent(appName, this.route).then(edge => {
this.edge = edge;
@@ -109,7 +109,7 @@ export class InstallAppComponent implements OnInit, OnDestroy {
});
edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new GetAppAssistant.Request({ appId: appId }),
})).then(response => {
const appAssistant = GetAppAssistant.postprocess((response as GetAppAssistant.Response).result);
@@ -139,16 +139,16 @@ export class InstallAppComponent implements OnInit, OnDestroy {
this.obtainKey().then(key => {
this.service.startSpinnerTransparentBackground(this.appId);
// remove alias field from properties
- const alias = this.form.value['ALIAS'];
+ const alias = this.form.value["ALIAS"];
const clonedFields = {};
for (const item in this.form.value) {
- if (item !== 'ALIAS') {
+ if (item !== "ALIAS") {
clonedFields[item] = this.form.value[item];
}
}
let request: JsonrpcRequest = new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new AddAppInstance.Request({
appId: this.appId,
alias: alias,
@@ -174,15 +174,16 @@ export class InstallAppComponent implements OnInit, OnDestroy {
this.model = result.instance.properties;
}
if (result.warnings && result.warnings.length > 0) {
- this.service.toast(result.warnings.join(';'), 'warning');
+ this.service.toast(result.warnings.join(";"), "warning");
} else {
- this.service.toast(this.translate.instant('Edge.Config.App.successInstall'), 'success');
+ this.service.toast(this.translate.instant("Edge.Config.App.successInstall"), "success");
}
this.form.markAsPristine();
- this.router.navigate(['device/' + (this.edge.id) + '/settings/app/']);
+ const navigationExtras = { state: { appInstanceChange: true } };
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/app/"], navigationExtras);
})
- .catch(InstallAppComponent.errorToast(this.service, error => this.translate.instant('Edge.Config.App.failInstall', { error: error })))
+ .catch(InstallAppComponent.errorToast(this.service, error => this.translate.instant("Edge.Config.App.failInstall", { error: error })))
.finally(() => {
this.isInstalling = false;
this.service.stopSpinner(this.appId);
@@ -227,7 +228,7 @@ export class InstallAppComponent implements OnInit, OnDestroy {
behaviour: KeyValidationBehaviour.SELECT,
appName: this.appName,
},
- cssClass: 'auto-height',
+ cssClass: "auto-height",
});
const selectKeyPromise = new Promise((resolve, reject) => {
diff --git a/ui/src/app/edge/settings/app/jsonrpc/flag/flags.ts b/ui/src/app/edge/settings/app/jsonrpc/flag/flags.ts
index e3041790b9e..99d62ac7742 100644
--- a/ui/src/app/edge/settings/app/jsonrpc/flag/flags.ts
+++ b/ui/src/app/edge/settings/app/jsonrpc/flag/flags.ts
@@ -3,7 +3,7 @@ import { FlagType } from "./flagType";
export namespace Flags {
- export const SHOW_AFTER_KEY_REDEEM: FlagType = { name: 'showAfterKeyRedeem' };
+ export const SHOW_AFTER_KEY_REDEEM: FlagType = { name: "showAfterKeyRedeem" };
/**
* Gets a flag by its type from an array of flags.
diff --git a/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.spec.ts b/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.spec.ts
index d6cb07561a0..588aa68cc5e 100644
--- a/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.spec.ts
+++ b/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.spec.ts
@@ -1,58 +1,58 @@
// @ts-strict-ignore
-import { GetAppAssistant } from "./getAppAssistant";
import { FormlyFieldConfig } from "@ngx-formly/core";
+import { GetAppAssistant } from "./getAppAssistant";
-describe('GetAppAssistant', () => {
+describe("GetAppAssistant", () => {
let fields: FormlyFieldConfig[];
beforeEach(() => {
fields = [
{
- key: 'a',
- type: 'input',
+ key: "a",
+ type: "input",
props: {
- type: 'text',
+ type: "text",
},
fieldGroup: [
{
- key: 'b',
- type: 'input',
+ key: "b",
+ type: "input",
props: {
- type: 'number',
+ type: "number",
},
},
],
},
{
- key: 'c',
- type: 'input',
+ key: "c",
+ type: "input",
props: {
- type: 'number',
+ type: "number",
},
},
];
});
- it('#findField should find a field by a path', () => {
- expect(GetAppAssistant.findField(fields, ['a'])).toBeDefined();
- expect(GetAppAssistant.findField(fields, ['a', 'b'])).toBeDefined();
- expect(GetAppAssistant.findField(fields, ['c'])).toBeDefined();
+ it("#findField should find a field by a path", () => {
+ expect(GetAppAssistant.findField(fields, ["a"])).toBeDefined();
+ expect(GetAppAssistant.findField(fields, ["a", "b"])).toBeDefined();
+ expect(GetAppAssistant.findField(fields, ["c"])).toBeDefined();
});
- it('#setInitialModel should set the initial model on every field', () => {
- expect(GetAppAssistant.findField(fields, ['a'])['initialModel']).toBeUndefined();
- expect(GetAppAssistant.findField(fields, ['a', 'b'])['initialModel']).toBeUndefined();
- expect(GetAppAssistant.findField(fields, ['c'])['initialModel']).toBeUndefined();
+ it("#setInitialModel should set the initial model on every field", () => {
+ expect(GetAppAssistant.findField(fields, ["a"])["initialModel"]).toBeUndefined();
+ expect(GetAppAssistant.findField(fields, ["a", "b"])["initialModel"]).toBeUndefined();
+ expect(GetAppAssistant.findField(fields, ["c"])["initialModel"]).toBeUndefined();
GetAppAssistant.setInitialModel(fields, {});
- expect(GetAppAssistant.findField(fields, ['a'])['initialModel']).toBeDefined();
- expect(GetAppAssistant.findField(fields, ['a', 'b'])['initialModel']).toBeDefined();
- expect(GetAppAssistant.findField(fields, ['c'])['initialModel']).toBeDefined();
+ expect(GetAppAssistant.findField(fields, ["a"])["initialModel"]).toBeDefined();
+ expect(GetAppAssistant.findField(fields, ["a", "b"])["initialModel"]).toBeDefined();
+ expect(GetAppAssistant.findField(fields, ["c"])["initialModel"]).toBeDefined();
});
- it('#convertStringExpressions should parse number inputs to numbers', () => {
- const expression = 'model.a < 1 || model.a.b < 1 && [1,2].every(i => i < initialModel.c)';
+ it("#convertStringExpressions should parse number inputs to numbers", () => {
+ const expression = "model.a < 1 || model.a.b < 1 && [1,2].every(i => i < initialModel.c)";
const converted = GetAppAssistant.convertStringExpressions(fields, fields[0], expression);
- expect(converted).toBe('model.a < 1 || +model.a.b < 1 && [1,2].every(i => i < +initialModel.c)');
+ expect(converted).toBe("model.a < 1 || +model.a.b < 1 && [1,2].every(i => i < +initialModel.c)");
});
});
diff --git a/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.ts b/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.ts
index a9d1bc58355..571b7c34205 100644
--- a/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.ts
+++ b/ui/src/app/edge/settings/app/jsonrpc/getAppAssistant.ts
@@ -75,7 +75,7 @@ export namespace GetAppAssistant {
}
if (!hasAliasField) {
// insert alias field into appAssistant fields
- const aliasField = { key: 'ALIAS', type: 'input', templateOptions: { label: 'Alias' }, defaultValue: appAssistant.alias };
+ const aliasField = { key: "ALIAS", type: "input", templateOptions: { label: "Alias" }, defaultValue: appAssistant.alias };
appAssistant.fields.splice(0, 0, aliasField);
}
return appAssistant;
@@ -87,7 +87,7 @@ export namespace GetAppAssistant {
if (!field) {
return;
}
- field['initialModel'] = structuredClone(model);
+ field["initialModel"] = structuredClone(model);
[field.fieldGroup, field.templateOptions?.fields ?? field.props?.fields].forEach(fieldGroup => {
if (!fieldGroup) {
return;
@@ -103,7 +103,7 @@ export namespace GetAppAssistant {
}
export function convertStringExpressions(rootFields: FormlyFieldConfig[], field: FormlyFieldConfig, expression: string): string {
- return ['model.', 'initialModel.', 'control.value.'].reduce((p, c) => convertStringExpression(rootFields, field, p, c), expression);
+ return ["model.", "initialModel.", "control.value."].reduce((p, c) => convertStringExpression(rootFields, field, p, c), expression);
}
/**
@@ -127,7 +127,7 @@ export namespace GetAppAssistant {
return finalExpression;
}
- const smallestIndex = [' ', ')'].reduce((previous, current) => {
+ const smallestIndex = [" ", ")"].reduce((previous, current) => {
const index = part.indexOf(current);
if (index === -1) {
return previous;
@@ -148,14 +148,14 @@ export namespace GetAppAssistant {
propertyName = part;
}
- const propertyPathNames = propertyName.split('.')
- .map(i => ['(', ')'].reduce((p, c) => p.replace(c, ''), i));
+ const propertyPathNames = propertyName.split(".")
+ .map(i => ["(", ")"].reduce((p, c) => p.replace(c, ""), i));
const f = GetAppAssistant.findField(rootFields, propertyPathNames);
- const isNumericInput = !!f && (f.templateOptions?.type === 'number' || f.props?.type === 'number');
+ const isNumericInput = !!f && (f.templateOptions?.type === "number" || f.props?.type === "number");
if (isNumericInput) {
// parses the value to a number
- finalExpression = finalExpression.concat('+');
+ finalExpression = finalExpression.concat("+");
}
finalExpression = finalExpression.concat(prefix, propertyName);
if (smallestIndex != -1) {
@@ -207,14 +207,14 @@ export namespace GetAppAssistant {
*/
function eachFieldRecursive(rootFields: FormlyFieldConfig[], field: FormlyFieldConfig) {
// 'defaultValue' false for checkboxes
- if (field.type === 'checkbox' && !('defaultValue' in field)) {
- field['defaultValue'] = false;
+ if (field.type === "checkbox" && !("defaultValue" in field)) {
+ field["defaultValue"] = false;
}
// this is needed to still show the input as the default style defined by us
- if (field.wrappers?.includes('formly-wrapper-default-of-cases')
- || field.wrappers?.includes('formly-safe-input-wrapper')
- || field.wrappers?.includes('input-with-unit')) {
- field.wrappers?.push('form-field');
+ if (field.wrappers?.includes("formly-wrapper-default-of-cases")
+ || field.wrappers?.includes("formly-safe-input-wrapper")
+ || field.wrappers?.includes("input-with-unit")) {
+ field.wrappers?.push("form-field");
}
if (field.validators) {
@@ -222,15 +222,15 @@ function eachFieldRecursive(rootFields: FormlyFieldConfig[], field: FormlyFieldC
let expressionString: string = value["expressionString"];
if (expressionString) {
expressionString = GetAppAssistant.convertStringExpressions(rootFields, field, expressionString);
- const func = Function('model', 'formState', 'field', 'control', 'initialModel', `return ${expressionString};`);
+ const func = Function("model", "formState", "field", "control", "initialModel", `return ${expressionString};`);
field.validators[key]["expression"] = (control: AbstractControl, f: FormlyFieldConfigWithInitialModel) => {
return func(f.model, f.options.formState, f, control, f.initialModel);
};
}
- let messageExpressionString: string = value['messageString'];
+ let messageExpressionString: string = value["messageString"];
if (messageExpressionString) {
messageExpressionString = GetAppAssistant.convertStringExpressions(rootFields, field, messageExpressionString);
- const func = Function('model', 'formState', 'field', 'control', 'initialModel', `return ${messageExpressionString};`);
+ const func = Function("model", "formState", "field", "control", "initialModel", `return ${messageExpressionString};`);
field.validators[key]["message"] = (error: any, f: FormlyFieldConfigWithInitialModel) => {
return func(f.model, f.options.formState, f, f.formControl, f.initialModel);
};
@@ -252,7 +252,7 @@ function eachFieldRecursive(rootFields: FormlyFieldConfig[], field: FormlyFieldC
}
}
});
- if (field.key == 'ALIAS') {
+ if (field.key == "ALIAS") {
return true;
}
return childHasAlias;
@@ -290,14 +290,14 @@ function eachFieldRecursive(rootFields: FormlyFieldConfig[], field: FormlyFieldC
* @param field the current field
*/
function convertFormlyOptionGroupPicker(rootFields: FormlyFieldConfig[], field: FormlyFieldConfig) {
- if (field.type !== 'formly-option-group-picker') {
+ if (field.type !== "formly-option-group-picker") {
return;
}
(field.templateOptions ?? field.props).options?.forEach((optionGroup) => {
if (!optionGroup) {
return;
}
- (optionGroup['options'] as any[]).forEach((option) => {
+ (optionGroup["options"] as any[]).forEach((option) => {
for (const [key, value] of Object.entries(option?.expressions ?? {})) {
if (!key.endsWith("String")) {
continue;
@@ -306,8 +306,8 @@ function convertFormlyOptionGroupPicker(rootFields: FormlyFieldConfig[], field:
const expressionString: string = value as string;
if (expressionString) {
const convertedExpression = GetAppAssistant.convertStringExpressions(rootFields, field, expressionString);
- const func = Function('model', 'formState', 'field', 'control', 'initialModel', `return ${convertedExpression};`);
- option['expressions'][key.substring(0, key.indexOf("String"))] = (f: FormlyFieldConfigWithInitialModel) => {
+ const func = Function("model", "formState", "field", "control", "initialModel", `return ${convertedExpression};`);
+ option["expressions"][key.substring(0, key.indexOf("String"))] = (f: FormlyFieldConfigWithInitialModel) => {
return func(f.model, f.options.formState, f, f.formControl, f.initialModel);
};
}
@@ -317,7 +317,7 @@ function convertFormlyOptionGroupPicker(rootFields: FormlyFieldConfig[], field:
}
function convertFormlyReorderArray(rootFields: FormlyFieldConfig[], field: FormlyFieldConfig) {
- if (field.type !== 'reorder-array') {
+ if (field.type !== "reorder-array") {
return;
}
(field.templateOptions ?? field.props).selectOptions?.forEach((selectOption) => {
@@ -333,8 +333,8 @@ function convertFormlyReorderArray(rootFields: FormlyFieldConfig[], field: Forml
const expressionString: string = value as string;
if (expressionString) {
const convertedExpression = GetAppAssistant.convertStringExpressions(rootFields, field, expressionString);
- const func = Function('model', 'formState', 'field', 'control', 'initialModel', `return ${convertedExpression};`);
- selectOption['expressions'][key.substring(0, key.indexOf("String"))] = (f: FormlyFieldConfigWithInitialModel) => {
+ const func = Function("model", "formState", "field", "control", "initialModel", `return ${convertedExpression};`);
+ selectOption["expressions"][key.substring(0, key.indexOf("String"))] = (f: FormlyFieldConfigWithInitialModel) => {
return func(f.model, f.options.formState, f, f.formControl, f.initialModel);
};
}
diff --git a/ui/src/app/edge/settings/app/jsonrpc/getApps.ts b/ui/src/app/edge/settings/app/jsonrpc/getApps.ts
index 5c90982b190..a95aa6ea12d 100644
--- a/ui/src/app/edge/settings/app/jsonrpc/getApps.ts
+++ b/ui/src/app/edge/settings/app/jsonrpc/getApps.ts
@@ -66,7 +66,7 @@ export namespace GetApps {
export interface App {
categorys: Category[],
- cardinality: 'SINGLE' | 'SINGLE_IN_CATEGORY' | 'MULTIPLE',
+ cardinality: "SINGLE" | "SINGLE_IN_CATEGORY" | "MULTIPLE",
appId: string,
name: string,
shortName?: string,
@@ -78,7 +78,7 @@ export namespace GetApps {
}
export interface Status {
- name: 'INCOMPATIBLE' | 'COMPATIBLE' | 'INSTALLABLE',
+ name: "INCOMPATIBLE" | "COMPATIBLE" | "INSTALLABLE",
errorCompatibleMessages: string[],
errorInstallableMessages: string[]
}
diff --git a/ui/src/app/edge/settings/app/keypopup/modal.component.html b/ui/src/app/edge/settings/app/keypopup/modal.component.html
index 9e2ede39af0..ea56ffdf288 100644
--- a/ui/src/app/edge/settings/app/keypopup/modal.component.html
+++ b/ui/src/app/edge/settings/app/keypopup/modal.component.html
@@ -50,4 +50,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/app/keypopup/modal.component.ts b/ui/src/app/edge/settings/app/keypopup/modal.component.ts
index 211f1f1a1b1..be5889a230d 100644
--- a/ui/src/app/edge/settings/app/keypopup/modal.component.ts
+++ b/ui/src/app/edge/settings/app/keypopup/modal.component.ts
@@ -1,28 +1,28 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, Service, Websocket } from 'src/app/shared/shared';
-import { environment } from 'src/environments';
-import { GetApps } from '../jsonrpc/getApps';
-import { AppCenter } from './appCenter';
-import { AppCenterAddRegisterKeyHistory } from './appCenterAddRegisterKeyHistory';
-import { AppCenterGetRegisteredKeys } from './appCenterGetRegisteredKeys';
-import { AppCenterIsKeyApplicable } from './appCenterIsKeyApplicable';
-import { Key } from './key';
-import { Flags } from '../jsonrpc/flag/flags';
-import { hasPredefinedKey } from '../permissions';
+import { Component, Input, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { FormlyFieldConfig, FormlyFormOptions } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, Service, Websocket } from "src/app/shared/shared";
+import { environment } from "src/environments";
+import { Flags } from "../jsonrpc/flag/flags";
+import { GetApps } from "../jsonrpc/getApps";
+import { hasPredefinedKey } from "../permissions";
+import { AppCenter } from "./appCenter";
+import { AppCenterAddRegisterKeyHistory } from "./appCenterAddRegisterKeyHistory";
+import { AppCenterGetRegisteredKeys } from "./appCenterGetRegisteredKeys";
+import { AppCenterIsKeyApplicable } from "./appCenterIsKeyApplicable";
+import { Key } from "./key";
@Component({
selector: KeyModalComponent.SELECTOR,
- templateUrl: './modal.component.html',
+ templateUrl: "./modal.component.html",
})
export class KeyModalComponent implements OnInit {
- private static readonly SELECTOR = 'key-modal';
+ private static readonly SELECTOR = "key-modal";
@Input({ required: true }) public edge!: Edge;
@Input() public appId: string | null = null;
@@ -63,7 +63,7 @@ export class KeyModalComponent implements OnInit {
*/
private static transformInput(value: string): string {
// remove spaces
- let trimmed = value.replace(/\s+/g, '');
+ let trimmed = value.replace(/\s+/g, "");
// trimm max length of input
if (trimmed.length > 19) {
@@ -72,29 +72,29 @@ export class KeyModalComponent implements OnInit {
// remove last dash
const hasDashAsLastChar = trimmed.substring(trimmed.length - 1, trimmed.length) == "-";
- trimmed = trimmed.replace(/-/g, '');
+ trimmed = trimmed.replace(/-/g, "");
const numbers = [];
// push single parts into array
numbers.push(trimmed.substring(0, 4));
- if (trimmed.substring(4, 8) !== '') {
+ if (trimmed.substring(4, 8) !== "") {
numbers.push(trimmed.substring(4, 8));
}
- if (trimmed.substring(8, 12) != '') {
+ if (trimmed.substring(8, 12) != "") {
numbers.push(trimmed.substring(8, 12));
}
- if (trimmed.substring(12, 16) != '') {
+ if (trimmed.substring(12, 16) != "") {
numbers.push(trimmed.substring(12, 16));
}
// join parts so it matches 'XXXX-XXXX-XXXX-XXXX'
- let modifiedValue = numbers.join('-');
+ let modifiedValue = numbers.join("-");
// readd last
if (hasDashAsLastChar) {
- modifiedValue += '-';
+ modifiedValue += "-";
}
// if there was no change to the original value return null
@@ -113,8 +113,8 @@ export class KeyModalComponent implements OnInit {
};
this.model = {
useRegisteredKeys: false,
- registeredKey: '',
- key: '',
+ registeredKey: "",
+ key: "",
};
if (this.behaviour === KeyValidationBehaviour.REGISTER) {
@@ -134,7 +134,7 @@ export class KeyModalComponent implements OnInit {
this.model.useRegisteredKeys = true;
this.model.registeredKey = this.registeredKeys[0].keyId;
}
- const selectRegisteredKey = this.fields.find(f => f.key === 'registeredKey');
+ const selectRegisteredKey = this.fields.find(f => f.key === "registeredKey");
this.registeredKeys.forEach(key => {
const desc = this.getDescription(key);
(selectRegisteredKey.props.options as any[]).push({
@@ -145,7 +145,7 @@ export class KeyModalComponent implements OnInit {
});
}).catch(reason => {
this.fields = this.getFields();
- this.service.toast(this.translate.instant('Edge.Config.App.Key.failedLoadingRegisterKey'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.failedLoadingRegisterKey"), "danger");
}).finally(() => {
this.service.stopSpinner(this.spinnerId);
});
@@ -169,7 +169,7 @@ export class KeyModalComponent implements OnInit {
this.service.startSpinner(this.spinnerId);
this.modalCtrl.dismiss({ key: this.getSelectedKey(), useMasterKey: this.model.useMasterKey });
// navigate to App install view and pass valid key
- this.router.navigate(['device/' + (this.edge.id) + '/settings/app/install/' + this.appId]
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/app/install/" + this.appId]
, { queryParams: { name: this.appName }, state: { appKey: this.getRawAppKey(), useMasterKey: this.model.useMasterKey } });
this.service.stopSpinner(this.spinnerId);
break;
@@ -178,9 +178,9 @@ export class KeyModalComponent implements OnInit {
// only register key for this app
this.registerKey().then(() => {
this.modalCtrl.dismiss({ key: this.getSelectedKey() });
- this.service.toast(this.translate.instant('Edge.Config.App.Key.successRegisterKey'), 'success');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.successRegisterKey"), "success");
}).catch(() => {
- this.service.toast(this.translate.instant('Edge.Config.App.Key.failedRegisterKey'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.failedRegisterKey"), "danger");
}).finally(() => {
this.service.stopSpinner(this.spinnerId);
});
@@ -219,28 +219,28 @@ export class KeyModalComponent implements OnInit {
return registration.edgeId !== this.edge.id;
});
if (differentEdge) {
- this.service.toast(this.translate.instant('Edge.Config.App.Key.alreadyRegisteredDifferentSystem'), 'warning');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.alreadyRegisteredDifferentSystem"), "warning");
return;
}
const sameApp = result.additionalInfo.registrations.some(registration => {
return registration.appId === this.appId && registration.edgeId === this.edge.id;
});
if (!sameApp) {
- this.service.toast(this.translate.instant('Edge.Config.App.Key.alreadyRegisteredDifferentApp'), 'warning');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.alreadyRegisteredDifferentApp"), "warning");
return;
}
}
- this.service.toast(this.translate.instant('Edge.Config.App.Key.valid'), 'success');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.valid"), "success");
} else {
- this.service.toast(this.translate.instant('Edge.Config.App.Key.invalid'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.invalid"), "danger");
}
}).catch(reason => {
// this may happen if the key is not stored in the database
- this.service.toast(this.translate.instant('Edge.Config.App.Key.invalid'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Config.App.Key.invalid"), "danger");
this.options.formState.gotInvalidKeyResponse = true;
if (environment.debugMode) {
- console.log('Failed to validate Key', reason);
+ console.log("Failed to validate Key", reason);
}
}).finally(() => {
this.service.stopSpinner(this.spinnerId);
@@ -272,7 +272,7 @@ export class KeyModalComponent implements OnInit {
return null;
}
- const appPrefix = environment.edgeShortName + ' App';
+ const appPrefix = environment.edgeShortName + " App";
// map to multiple description fields
const descriptionFields = [];
for (const bundle of bundles) {
@@ -305,7 +305,7 @@ export class KeyModalComponent implements OnInit {
descriptionFields.push(app.name);
}
}
- return descriptionFields.length === 0 ? null : descriptionFields.map(e => appPrefix + ' ' + e).join(", ");
+ return descriptionFields.length === 0 ? null : descriptionFields.map(e => appPrefix + " " + e).join(", ");
}
private getAppsByCategory(): { [key: string]: GetApps.App[]; } {
@@ -333,45 +333,45 @@ export class KeyModalComponent implements OnInit {
private getFields(): FormlyFieldConfig[] {
const fields: FormlyFieldConfig[] = [];
fields.push({
- key: 'useRegisteredKeys',
- type: 'checkbox',
+ key: "useRegisteredKeys",
+ type: "checkbox",
props: {
- label: this.translate.instant('Edge.Config.App.Key.useRegisteredKey'),
+ label: this.translate.instant("Edge.Config.App.Key.useRegisteredKey"),
},
hide: this.registeredKeys.length === 0,
expressions: {
- 'props.disabled': field => field.model.useMasterKey,
+ "props.disabled": field => field.model.useMasterKey,
},
});
fields.push({
- key: 'registeredKey',
- type: 'select',
+ key: "registeredKey",
+ type: "select",
props: {
- label: this.translate.instant('Edge.Config.App.Key.registeredKey'),
+ label: this.translate.instant("Edge.Config.App.Key.registeredKey"),
required: true,
options: [],
},
expressions: {
- 'hide': () => this.registeredKeys.length === 0,
- 'props.disabled': field => !field.model.useRegisteredKeys || field.model.useMasterKey,
+ "hide": () => this.registeredKeys.length === 0,
+ "props.disabled": field => !field.model.useRegisteredKeys || field.model.useMasterKey,
},
- wrappers: ['formly-select-extended-wrapper'],
+ wrappers: ["formly-select-extended-wrapper"],
});
fields.push({
- key: 'key',
- type: 'input',
+ key: "key",
+ type: "input",
props: {
- label: this.translate.instant('Edge.Config.App.Key.key'),
+ label: this.translate.instant("Edge.Config.App.Key.key"),
required: true,
- placeholder: 'XXXX-XXXX-XXXX-XXXX',
+ placeholder: "XXXX-XXXX-XXXX-XXXX",
},
expressions: {
- 'props.disabled': field => field.model.useRegisteredKeys || field.model.useMasterKey,
+ "props.disabled": field => field.model.useRegisteredKeys || field.model.useMasterKey,
},
validators: {
- validation: ['key'],
+ validation: ["key"],
},
hooks: {
onInit: (field) => {
@@ -391,30 +391,30 @@ export class KeyModalComponent implements OnInit {
this.model.useMasterKey = true;
fields.push(
{
- key: 'useMasterKey',
- type: 'checkbox',
+ key: "useMasterKey",
+ type: "checkbox",
props: {
- label: this.translate.instant('Edge.Config.App.Key.useMasterKey'),
+ label: this.translate.instant("Edge.Config.App.Key.useMasterKey"),
},
},
{
- type: 'text',
+ type: "text",
props: {
- description: this.translate.instant('Edge.Config.App.Key.MASTER_KEY_HINT'),
+ description: this.translate.instant("Edge.Config.App.Key.MASTER_KEY_HINT"),
},
expressions: {
- hide: '!model.useMasterKey',
+ hide: "!model.useMasterKey",
},
},
);
}
fields.push({
- type: 'text',
+ type: "text",
props: {
- description: this.translate.instant('Edge.Config.App.Key.KEY_TYPO_MESSAGE_HINT'),
+ description: this.translate.instant("Edge.Config.App.Key.KEY_TYPO_MESSAGE_HINT"),
},
- hideExpression: '!formState.gotInvalidKeyResponse',
+ hideExpression: "!formState.gotInvalidKeyResponse",
});
return fields;
diff --git a/ui/src/app/edge/settings/app/permissions.ts b/ui/src/app/edge/settings/app/permissions.ts
index 2c107a5c673..0fe3b58071b 100644
--- a/ui/src/app/edge/settings/app/permissions.ts
+++ b/ui/src/app/edge/settings/app/permissions.ts
@@ -29,5 +29,5 @@ export function hasPredefinedKey(edge: Edge, user: User): boolean {
}
export function hasKeyModel(edge: Edge): boolean {
- return edge.isVersionAtLeast('2023.1.2');
+ return edge.isVersionAtLeast("2023.1.2");
}
diff --git a/ui/src/app/edge/settings/app/single.component.html b/ui/src/app/edge/settings/app/single.component.html
index 5234280d784..465413bd056 100644
--- a/ui/src/app/edge/settings/app/single.component.html
+++ b/ui/src/app/edge/settings/app/single.component.html
@@ -55,4 +55,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/app/single.component.ts b/ui/src/app/edge/settings/app/single.component.ts
index df22cb61b85..0051a69d016 100644
--- a/ui/src/app/edge/settings/app/single.component.ts
+++ b/ui/src/app/edge/settings/app/single.component.ts
@@ -1,32 +1,32 @@
// @ts-strict-ignore
-import { Component, HostListener, OnDestroy, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { DomSanitizer } from '@angular/platform-browser';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ModalController } from '@ionic/angular';
-import { Subject } from 'rxjs';
-import { filter, takeUntil } from 'rxjs/operators';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { Edge, Service, Utils, Websocket } from '../../../shared/shared';
-import { GetApp } from './jsonrpc/getApp';
-import { GetAppDescriptor } from './jsonrpc/getAppDescriptor';
-import { GetApps } from './jsonrpc/getApps';
-import { AppCenter } from './keypopup/appCenter';
-import { AppCenterGetPossibleApps } from './keypopup/appCenterGetPossibleApps';
-import { AppCenterIsAppFree } from './keypopup/appCenterIsAppFree';
-import { KeyModalComponent, KeyValidationBehaviour } from './keypopup/modal.component';
-import { canEnterKey, hasKeyModel, hasPredefinedKey } from './permissions';
-import { InstallAppComponent } from './install.component';
-import { TranslateService } from '@ngx-translate/core';
-import { environment } from 'src/environments';
+import { Component, HostListener, OnDestroy, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { DomSanitizer } from "@angular/platform-browser";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ModalController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Subject } from "rxjs";
+import { filter, takeUntil } from "rxjs/operators";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { environment } from "src/environments";
+import { Edge, Service, Utils, Websocket } from "../../../shared/shared";
+import { InstallAppComponent } from "./install.component";
+import { GetApp } from "./jsonrpc/getApp";
+import { GetAppDescriptor } from "./jsonrpc/getAppDescriptor";
+import { GetApps } from "./jsonrpc/getApps";
+import { AppCenter } from "./keypopup/appCenter";
+import { AppCenterGetPossibleApps } from "./keypopup/appCenterGetPossibleApps";
+import { AppCenterIsAppFree } from "./keypopup/appCenterIsAppFree";
+import { KeyModalComponent, KeyValidationBehaviour } from "./keypopup/modal.component";
+import { canEnterKey, hasKeyModel, hasPredefinedKey } from "./permissions";
@Component({
selector: SingleAppComponent.SELECTOR,
- templateUrl: './single.component.html',
+ templateUrl: "./single.component.html",
})
export class SingleAppComponent implements OnInit, OnDestroy {
- private static readonly SELECTOR = 'app-single';
+ private static readonly SELECTOR = "app-single";
public readonly spinnerId: string = SingleAppComponent.SELECTOR;
public form: FormGroup | null = null;
@@ -63,7 +63,7 @@ export class SingleAppComponent implements OnInit, OnDestroy {
) {
}
- @HostListener('window:resize', ['$event'])
+ @HostListener("window:resize", ["$event"])
private onResize(event) {
this.updateIsXL();
}
@@ -72,8 +72,8 @@ export class SingleAppComponent implements OnInit, OnDestroy {
this.service.startSpinner(this.spinnerId);
this.updateIsXL();
- this.appId = this.route.snapshot.params['appId'];
- this.appName = this.route.snapshot.queryParams['name'];
+ this.appId = this.route.snapshot.params["appId"];
+ this.appName = this.route.snapshot.queryParams["name"];
const appId = this.appId;
this.service.setCurrentComponent(this.appName, this.route).then(edge => {
this.edge = edge;
@@ -137,20 +137,20 @@ export class SingleAppComponent implements OnInit, OnDestroy {
// set appname, image ...
const state = history?.state;
- if (state && 'app' in history.state) {
- if ('app' in history.state) {
+ if (state && "app" in history.state) {
+ if ("app" in history.state) {
this.setApp(history.state.app);
}
- if ('appKey' in history.state) {
+ if ("appKey" in history.state) {
this.key = history.state.appKey;
}
- if ('useMasterKey' in history.state) {
+ if ("useMasterKey" in history.state) {
this.useMasterKey = history.state.useMasterKey;
}
} else {
edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new GetApp.Request({ appId: appId }),
})).then(response => {
const app = (response as GetApp.Response).result.app;
@@ -158,19 +158,19 @@ export class SingleAppComponent implements OnInit, OnDestroy {
this.setApp(app);
}).catch(reason => {
console.error(reason.error);
- this.service.toast('Error while receiving App[' + appId + ']: ' + reason.error.message, 'danger');
+ this.service.toast("Error while receiving App[" + appId + "]: " + reason.error.message, "danger");
});
}
// set app descriptor
edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new GetAppDescriptor.Request({ appId: appId }),
})).then(response => {
const descriptor = (response as GetAppDescriptor.Response).result;
this.descriptor = GetAppDescriptor.postprocess(descriptor, this.sanitizer);
})
- .catch(InstallAppComponent.errorToast(this.service, error => 'Error while receiving AppDescriptor for App[' + appId + ']: ' + error))
+ .catch(InstallAppComponent.errorToast(this.service, error => "Error while receiving AppDescriptor for App[" + appId + "]: " + error))
.finally(() => {
this.increaseReceivedResponse();
});
@@ -184,7 +184,7 @@ export class SingleAppComponent implements OnInit, OnDestroy {
protected iFrameStyle() {
const styles = {
- 'height': (this.isXL) ? '100%' : window.innerHeight + 'px',
+ "height": (this.isXL) ? "100%" : window.innerHeight + "px",
};
return styles;
}
@@ -193,13 +193,13 @@ export class SingleAppComponent implements OnInit, OnDestroy {
if (this.key || this.useMasterKey) {
// if key already set navigate directly to installation view
const state = this.useMasterKey ? { useMasterKey: true } : { appKey: this.key };
- this.router.navigate(['device/' + (this.edge.id) + '/settings/app/install/' + this.appId]
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/app/install/" + this.appId]
, { queryParams: { name: this.appName }, state: state });
return;
}
// if the version is not high enough and the edge doesnt support installing apps via keys directly navigate to installation
if (!hasKeyModel(this.edge) || this.isFreeApp) {
- this.router.navigate(['device/' + (this.edge.id) + '/settings/app/install/' + this.appId]
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/app/install/" + this.appId]
, { queryParams: { name: this.appName } });
return;
}
@@ -239,7 +239,7 @@ export class SingleAppComponent implements OnInit, OnDestroy {
behaviour: behaviour,
appName: this.appName,
},
- cssClass: 'auto-height',
+ cssClass: "auto-height",
});
return await modal.present();
}
diff --git a/ui/src/app/edge/settings/app/update.component.html b/ui/src/app/edge/settings/app/update.component.html
index b773512c8e0..039d79b1826 100644
--- a/ui/src/app/edge/settings/app/update.component.html
+++ b/ui/src/app/edge/settings/app/update.component.html
@@ -17,7 +17,8 @@
[disabled]="(!((!varinstance.form.pristine) && (varinstance.form.valid))) || varinstance.isDeleting || varinstance.isUpdating"
translate> Edge.Config.App.updateApp
-
+
Edge.Config.App.deleteApp
diff --git a/ui/src/app/edge/settings/app/update.component.ts b/ui/src/app/edge/settings/app/update.component.ts
index 26bf353a98f..94c049bbcfb 100644
--- a/ui/src/app/edge/settings/app/update.component.ts
+++ b/ui/src/app/edge/settings/app/update.component.ts
@@ -1,16 +1,16 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { ActivatedRoute, Router } from '@angular/router';
-import { FormlyFieldConfig } from '@ngx-formly/core';
-import { TranslateService } from '@ngx-translate/core';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { Edge, Service, Utils, Websocket } from '../../../shared/shared';
-import { DeleteAppInstance } from './jsonrpc/deleteAppInstance';
-import { GetAppAssistant } from './jsonrpc/getAppAssistant';
-import { GetAppInstances } from './jsonrpc/getAppInstances';
-import { UpdateAppInstance } from './jsonrpc/updateAppInstance';
-import { InstallAppComponent } from './install.component';
+import { Component, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { ActivatedRoute, Router } from "@angular/router";
+import { FormlyFieldConfig } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { Edge, Service, Utils, Websocket } from "../../../shared/shared";
+import { InstallAppComponent } from "./install.component";
+import { DeleteAppInstance } from "./jsonrpc/deleteAppInstance";
+import { GetAppAssistant } from "./jsonrpc/getAppAssistant";
+import { GetAppInstances } from "./jsonrpc/getAppInstances";
+import { UpdateAppInstance } from "./jsonrpc/updateAppInstance";
interface MyInstance {
instanceId: string, // uuid
@@ -23,11 +23,11 @@ interface MyInstance {
@Component({
selector: UpdateAppComponent.SELECTOR,
- templateUrl: './update.component.html',
+ templateUrl: "./update.component.html",
})
export class UpdateAppComponent implements OnInit {
- private static readonly SELECTOR = 'app-update';
+ private static readonly SELECTOR = "app-update";
public readonly spinnerId: string = UpdateAppComponent.SELECTOR;
protected instances: MyInstance[] = [];
@@ -48,19 +48,19 @@ export class UpdateAppComponent implements OnInit {
public ngOnInit() {
this.service.startSpinner(this.spinnerId);
const appId = this.route.snapshot.params["appId"];
- const appName = this.route.snapshot.queryParams['name'];
+ const appName = this.route.snapshot.queryParams["name"];
this.service.setCurrentComponent(appName, this.route).then(edge => {
this.edge = edge;
edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new GetAppInstances.Request({ appId: appId }),
})).then(getInstancesResponse => {
const recInstances = (getInstancesResponse as GetAppInstances.Response).result.instances;
edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new GetAppAssistant.Request({ appId: appId }),
})).then(getAppAssistantResponse => {
const appAssistant = (getAppAssistantResponse as GetAppAssistant.Response).result;
@@ -69,7 +69,7 @@ export class UpdateAppComponent implements OnInit {
for (const instance of recInstances) {
const form = new FormGroup({});
const model = {
- 'ALIAS': instance.alias,
+ "ALIAS": instance.alias,
...instance.properties,
};
this.instances.push({
@@ -83,8 +83,8 @@ export class UpdateAppComponent implements OnInit {
}
this.service.stopSpinner(this.spinnerId);
- }).catch(InstallAppComponent.errorToast(this.service, error => 'Error while receiving App Assistant for [' + appId + ']: ' + error));
- }).catch(InstallAppComponent.errorToast(this.service, error => 'Error while receiving App-Instances for [' + appId + ']: ' + error));
+ }).catch(InstallAppComponent.errorToast(this.service, error => "Error while receiving App Assistant for [" + appId + "]: " + error));
+ }).catch(InstallAppComponent.errorToast(this.service, error => "Error while receiving App-Instances for [" + appId + "]: " + error));
});
}
@@ -92,17 +92,17 @@ export class UpdateAppComponent implements OnInit {
this.service.startSpinnerTransparentBackground(instance.instanceId);
instance.isUpdating = true;
// remove alias field from properties
- const alias = instance.form.value['ALIAS'];
+ const alias = instance.form.value["ALIAS"];
const clonedFields = {};
for (const item in instance.form.value) {
- if (item != 'ALIAS') {
+ if (item != "ALIAS") {
clonedFields[item] = instance.form.value[item];
}
}
instance.form.markAsPristine();
this.edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new UpdateAppInstance.Request({
instanceId: instance.instanceId,
alias: alias,
@@ -112,14 +112,14 @@ export class UpdateAppComponent implements OnInit {
const result = (response as UpdateAppInstance.Response).result;
if (result.warnings && result.warnings.length > 0) {
- this.service.toast(result.warnings.join(';'), 'warning');
+ this.service.toast(result.warnings.join(";"), "warning");
} else {
- this.service.toast(this.translate.instant('Edge.Config.App.successUpdate'), 'success');
+ this.service.toast(this.translate.instant("Edge.Config.App.successUpdate"), "success");
}
instance.properties = result.instance.properties;
- instance.properties['ALIAS'] = result.instance.alias;
+ instance.properties["ALIAS"] = result.instance.alias;
})
- .catch(InstallAppComponent.errorToast(this.service, error => this.translate.instant('Edge.Config.App.failUpdate', { error: error })))
+ .catch(InstallAppComponent.errorToast(this.service, error => this.translate.instant("Edge.Config.App.failUpdate", { error: error })))
.finally(() => {
instance.isUpdating = false;
this.service.stopSpinner(instance.instanceId);
@@ -131,16 +131,17 @@ export class UpdateAppComponent implements OnInit {
instance.isDeleting = true;
this.edge.sendRequest(this.websocket,
new ComponentJsonApiRequest({
- componentId: '_appManager',
+ componentId: "_appManager",
payload: new DeleteAppInstance.Request({
instanceId: instance.instanceId,
}),
})).then(response => {
this.instances.splice(this.instances.indexOf(instance), 1);
- this.service.toast(this.translate.instant('Edge.Config.App.successDelete'), 'success');
- this.router.navigate(['device/' + (this.edge.id) + '/settings/app/']);
+ this.service.toast(this.translate.instant("Edge.Config.App.successDelete"), "success");
+ const navigationExtras = { state: { appInstanceChange: true } };
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/app/"], navigationExtras);
})
- .catch(InstallAppComponent.errorToast(this.service, error => this.translate.instant('Edge.Config.App.failDelete', { error: error })))
+ .catch(InstallAppComponent.errorToast(this.service, error => this.translate.instant("Edge.Config.App.failDelete", { error: error })))
.finally(() => {
instance.isDeleting = false;
this.service.stopSpinner(instance.instanceId);
diff --git a/ui/src/app/edge/settings/channels/channels.component.html b/ui/src/app/edge/settings/channels/channels.component.html
index 90d4834506c..ecef95c38f1 100644
--- a/ui/src/app/edge/settings/channels/channels.component.html
+++ b/ui/src/app/edge/settings/channels/channels.component.html
@@ -24,8 +24,7 @@
+ [disabled]="!selectedComponentId?.value" [placeholder]="'CHANNELS.CHANNEL'| translate">
-
+
@@ -180,5 +179,22 @@
+
+
+
+
+
+
+
+
+
+ A component couldn't be found!
+
+
+
+
+
+
+
diff --git a/ui/src/app/edge/settings/channels/channels.component.ts b/ui/src/app/edge/settings/channels/channels.component.ts
index 2cf0ec77779..36ea1f7911c 100644
--- a/ui/src/app/edge/settings/channels/channels.component.ts
+++ b/ui/src/app/edge/settings/channels/channels.component.ts
@@ -1,27 +1,29 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { PersistencePriority } from 'src/app/shared/components/edge/edgeconfig';
-import { SetChannelValueRequest } from 'src/app/shared/jsonrpc/request/setChannelValueRequest';
-import { environment } from 'src/environments';
-
-import { ChannelAddress, Edge, EdgeConfig, EdgePermission, Service, Websocket } from '../../../shared/shared';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { Channel, GetChannelsOfComponentResponse } from 'src/app/shared/jsonrpc/response/getChannelsOfComponentResponse';
-import { GetChannelsOfComponentRequest } from 'src/app/shared/jsonrpc/request/getChannelsOfComponentRequest';
+import { Component } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { PersistencePriority } from "src/app/shared/components/edge/edgeconfig";
+import { SetChannelValueRequest } from "src/app/shared/jsonrpc/request/setChannelValueRequest";
+import { environment } from "src/environments";
+
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { GetChannelsOfComponentRequest } from "src/app/shared/jsonrpc/request/getChannelsOfComponentRequest";
+import { Channel, GetChannelsOfComponentResponse } from "src/app/shared/jsonrpc/response/getChannelsOfComponentResponse";
+import { ChannelAddress, Edge, EdgeConfig, EdgePermission, Service, Websocket } from "../../../shared/shared";
@Component({
selector: ChannelsComponent.SELECTOR,
- templateUrl: './channels.component.html',
+ templateUrl: "./channels.component.html",
})
export class ChannelsComponent {
private static readonly SELECTOR = "channels";
private static readonly URL_PREFIX = "channels";
public customAlertOptions: any = {
- cssClass: 'wide-alert',
+ cssClass: "wide-alert",
};
+
+ protected isAtLeastOneChannelExistingInEdgeConfig: boolean = false;
protected readonly spinnerId = ChannelsComponent.SELECTOR;
protected readonly environment = environment;
protected edge: Edge | null = null;
@@ -40,20 +42,24 @@ export class ChannelsComponent {
protected translate: TranslateService,
) { }
+ private static readonly ERROR_COMPONENT_COULD_NOT_BE_FOUND = (componentId: string) => `[ComponentId] ${componentId} doesn't exist on this edge`;
+
ionViewWillEnter() {
- this.service.setCurrentComponent("Channels", this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
});
this.service.getConfig().then(config => {
this.config = config;
- this.persistencePriority = this.config.getComponentsByFactory("Controller.Api.Backend")?.[0]?.properties['persistencePriority'] ?? PersistencePriority.DEFAULT_GLOBAL_PRIORITY;
+ this.persistencePriority = this.config.getComponentsByFactory("Controller.Api.Backend")?.[0]?.properties["persistencePriority"] ?? PersistencePriority.DEFAULT_GLOBAL_PRIORITY;
this.service.startSpinner(this.spinnerId);
this.loadSavedChannels().then(message => {
if (message) {
- this.service.toast(message, 'success');
+ this.service.toast(message, "success");
}
}).catch(reason => {
- this.service.toast(reason, 'danger');
+ this.service.toast(reason, "danger");
+ this.selectedComponentChannels = new Map();
+ this.isAtLeastOneChannelExistingInEdgeConfig = true;
}).finally(() => {
this.service.stopSpinner(this.spinnerId);
});
@@ -85,7 +91,7 @@ export class ChannelsComponent {
const channelData = await this.getChannel(componentId, channelId);
channelEntry.showPersistencePriority = PersistencePriority.isLessThan(channelData.persistencePriority, this.persistencePriority);
- if (channelData.accessMode != 'WO') {
+ if (channelData.accessMode != "WO") {
const channelAddress = new ChannelAddress(componentId, channelId);
this.subscribedChannels.set(channelAddress.toString(), channelAddress);
if (this.edge) {
@@ -130,7 +136,7 @@ export class ChannelsComponent {
).then(() => {
this.service.toast("Successfully set " + componentId + "/" + channelId + " to [" + channelValue + "]", "success");
}).catch(() => {
- this.service.toast("Error setting " + componentId + "/" + channelId + " to [" + channelValue + "]", 'danger');
+ this.service.toast("Error setting " + componentId + "/" + channelId + " to [" + channelValue + "]", "danger");
});
}
}
@@ -155,16 +161,17 @@ export class ChannelsComponent {
this.loadChannelsAndStore(componentId).then(() => {
// ignore
}).catch(reason => {
- this.service.toast('Unable to load channels for ' + componentId + ': ' + reason, 'danger');
+ this.service.toast("Unable to load channels for " + componentId + ": " + reason, "danger");
});
}
private saveChannelsInUrl(): void {
const selectedChannels = this.getSelectedChannelStrings();
if (selectedChannels && selectedChannels.length > 0) {
- this.router.navigate(['device/' + (this.edge.id) + '/settings/channels/'], { queryParams: { save: selectedChannels.toString() } });
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/channels/"], { queryParams: { save: selectedChannels.toString() } });
+ this.isAtLeastOneChannelExistingInEdgeConfig = false;
} else {
- this.router.navigate(['device/' + (this.edge.id) + '/settings/channels/']);
+ this.router.navigate(["device/" + (this.edge.id) + "/settings/channels/"]);
}
}
@@ -183,14 +190,21 @@ export class ChannelsComponent {
}
private async loadSavedChannels(): Promise {
- const address = this.route.snapshot.queryParamMap.get('save');
+ const address = this.route.snapshot.queryParamMap.get("save");
if (address) {
- const channels = address.split(',')?.map(element => ChannelAddress.fromString(element));
+ const channels = address.split(",")?.map(element => ChannelAddress.fromString(element));
try {
+ const existingComponents = channels.filter(el => el.componentId in this.config.components);
+
+ if (existingComponents.length > 1) {
+ this.isAtLeastOneChannelExistingInEdgeConfig = true;
+ return "No component matches this edges components";
+ }
+
await Promise.all(channels.map(el => this.subscribeChannel(el.componentId, el.channelId)));
- return 'Successfully loaded saved channels from url';
+ return "Successfully loaded saved channels from url";
} catch (reason) {
- throw 'Some channels may not have been loaded from url: ' + reason;
+ throw "Some channels may not have been loaded from url: " + reason;
}
}
@@ -199,14 +213,13 @@ export class ChannelsComponent {
const savedData: ChannelAddress[] = JSON.parse(storedValue);
try {
await Promise.all(savedData.map(el => this.subscribeChannel(el.componentId, el.channelId)));
- return 'Successfully loaded saved channels from session';
+ return "Successfully loaded saved channels from session";
} catch (reason) {
- throw 'Some channels may not have been loaded from session: ' + reason;
+ throw "Some channels may not have been loaded from session: " + reason;
}
}
}
-
private getChannel(componentId: string, channelId: string): Promise {
return new Promise((resolve, reject) => {
// check if channels of component are already loaded
@@ -216,7 +229,7 @@ export class ChannelsComponent {
if (channel) {
resolve(channel);
} else {
- reject(channelId + ' is not defined by component ' + componentId);
+ reject(channelId + " is not defined by component " + componentId);
}
return;
}
@@ -226,7 +239,7 @@ export class ChannelsComponent {
if (channel) {
resolve(channel);
} else {
- reject(channelId + ' is not defined by component ' + componentId);
+ reject(channelId + " is not defined by component " + componentId);
}
}).catch(reject);
});
@@ -251,8 +264,15 @@ export class ChannelsComponent {
return;
}
+ if (!(componentId in this.config.components)) {
+ console.warn(ChannelsComponent.ERROR_COMPONENT_COULD_NOT_BE_FOUND(componentId));
+ this.isAtLeastOneChannelExistingInEdgeConfig = true;
+ reject();
+ return;
+ }
+
this.edge.sendRequest(this.websocket, new ComponentJsonApiRequest({
- componentId: '_componentManager',
+ componentId: "_componentManager",
payload: new GetChannelsOfComponentRequest({ componentId: componentId }),
})).then((response: GetChannelsOfComponentResponse) => {
resolve(response.result.channels);
diff --git a/ui/src/app/edge/settings/component/install/index.component.html b/ui/src/app/edge/settings/component/install/index.component.html
index 4515acc6a17..c918b508485 100644
--- a/ui/src/app/edge/settings/component/install/index.component.html
+++ b/ui/src/app/edge/settings/component/install/index.component.html
@@ -24,4 +24,4 @@ {{ item.name }}
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/component/install/index.component.ts b/ui/src/app/edge/settings/component/install/index.component.ts
index 05950505890..a31df0b6bf0 100644
--- a/ui/src/app/edge/settings/component/install/index.component.ts
+++ b/ui/src/app/edge/settings/component/install/index.component.ts
@@ -1,9 +1,9 @@
// @ts-strict-ignore
-import { CategorizedFactories } from 'src/app/shared/components/edge/edgeconfig';
-import { Component, OnInit } from '@angular/core';
-import { Service, Utils, EdgeConfig, Websocket, Edge, EdgePermission } from '../../../../shared/shared';
-import { JsonrpcRequest, JsonrpcResponseSuccess } from 'src/app/shared/jsonrpc/base';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
+import { Component, OnInit } from "@angular/core";
+import { CategorizedFactories } from "src/app/shared/components/edge/edgeconfig";
+import { JsonrpcRequest, JsonrpcResponseSuccess } from "src/app/shared/jsonrpc/base";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { Edge, EdgeConfig, EdgePermission, Service, Utils, Websocket } from "../../../../shared/shared";
interface MyCategorizedFactories extends CategorizedFactories {
isClicked?: boolean,
@@ -12,7 +12,7 @@ interface MyCategorizedFactories extends CategorizedFactories {
@Component({
selector: IndexComponent.SELECTOR,
- templateUrl: './index.component.html',
+ templateUrl: "./index.component.html",
})
export class IndexComponent implements OnInit {
@@ -41,7 +41,7 @@ export class IndexComponent implements OnInit {
updateFilter(completeFilter: string) {
// take each space-separated string as an individual and-combined filter
- const filters = completeFilter.toLowerCase().split(' ');
+ const filters = completeFilter.toLowerCase().split(" ");
let countFilteredEntries = 0;
for (const entry of this.list) {
entry.filteredFactories = entry.factories.filter(entry =>
@@ -65,7 +65,7 @@ export class IndexComponent implements OnInit {
private async getCategorizedFactories(): Promise {
if (EdgePermission.hasReducedFactories(this.edge)) {
const response = await this.edge.sendRequest(this.websocket, new ComponentJsonApiRequest({
- componentId: '_componentManager',
+ componentId: "_componentManager",
payload: new GetAllComponentFactoriesRequest(),
}));
for (const [factoryId, factory] of Object.entries(response.result.factories)) {
diff --git a/ui/src/app/edge/settings/component/install/install.component.html b/ui/src/app/edge/settings/component/install/install.component.html
index f93712cddf2..ae3916b1def 100644
--- a/ui/src/app/edge/settings/component/install/install.component.html
+++ b/ui/src/app/edge/settings/component/install/install.component.html
@@ -24,4 +24,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/component/install/install.component.ts b/ui/src/app/edge/settings/component/install/install.component.ts
index 360f2895de0..965ac7d874e 100644
--- a/ui/src/app/edge/settings/component/install/install.component.ts
+++ b/ui/src/app/edge/settings/component/install/install.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { ActivatedRoute } from '@angular/router';
-import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { FormlyFieldConfig } from '@ngx-formly/core';
-import { Service, Utils, Websocket, EdgeConfig, Edge } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { FormlyFieldConfig } from "@ngx-formly/core";
+import { Edge, EdgeConfig, Service, Utils, Websocket } from "../../../../shared/shared";
@Component({
selector: ComponentInstallComponent.SELECTOR,
- templateUrl: './install.component.html',
+ templateUrl: "./install.component.html",
})
export class ComponentInstallComponent implements OnInit {
@@ -39,15 +39,15 @@ export class ComponentInstallComponent implements OnInit {
const fields: FormlyFieldConfig[] = [];
const model = {};
for (const property of properties) {
- const property_id = property.id.replace('.', '_');
+ const property_id = property.id.replace(".", "_");
let defaultValue = property.defaultValue;
// if the type is an array and there is no defaultValue then set the defaultValue to an empty array
- if (property.schema["type"] === 'repeat' && defaultValue === null) {
+ if (property.schema["type"] === "repeat" && defaultValue === null) {
defaultValue = [];
}
const field: FormlyFieldConfig = {
key: property_id,
- type: 'input',
+ type: "input",
templateOptions: {
label: property.name,
required: defaultValue === null,
@@ -61,7 +61,7 @@ export class ComponentInstallComponent implements OnInit {
model[property_id] = defaultValue;
// Set the next free Component-ID as defaultValue
- if (property_id == 'id' && property.schema["type"] !== 'repeat') {
+ if (property_id == "id" && property.schema["type"] !== "repeat") {
const thisMatch = defaultValue.match(/^(.*)(\d+)$/);
if (thisMatch) {
const thisPrefix = thisMatch[1];
@@ -98,15 +98,15 @@ export class ComponentInstallComponent implements OnInit {
// ignore 'null' values
continue;
}
- const property_id = controlKey.replace('_', '.');
+ const property_id = controlKey.replace("_", ".");
properties.push({ name: property_id, value: control.value });
}
this.edge.createComponentConfig(this.websocket, this.factoryId, properties).then(response => {
this.form.markAsPristine();
- this.service.toast("Successfully created in instance of " + this.factoryId + ".", 'success');
+ this.service.toast("Successfully created in instance of " + this.factoryId + ".", "success");
}).catch(reason => {
- this.service.toast("Error creating an instance of " + this.factoryId + ":" + reason.error.message, 'danger');
+ this.service.toast("Error creating an instance of " + this.factoryId + ":" + reason.error.message, "danger");
});
}
diff --git a/ui/src/app/edge/settings/component/update/index.component.html b/ui/src/app/edge/settings/component/update/index.component.html
index c4ebd8a90c5..30373db23e2 100644
--- a/ui/src/app/edge/settings/component/update/index.component.html
+++ b/ui/src/app/edge/settings/component/update/index.component.html
@@ -27,4 +27,4 @@ {{ item.alias }}
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/component/update/index.component.ts b/ui/src/app/edge/settings/component/update/index.component.ts
index 05e6efe2b3f..d35810ed057 100644
--- a/ui/src/app/edge/settings/component/update/index.component.ts
+++ b/ui/src/app/edge/settings/component/update/index.component.ts
@@ -1,7 +1,7 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { CategorizedComponents } from 'src/app/shared/components/edge/edgeconfig';
-import { EdgeConfig, Service, Utils } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { CategorizedComponents } from "src/app/shared/components/edge/edgeconfig";
+import { EdgeConfig, Service, Utils } from "../../../../shared/shared";
interface MyCategorizedComponents extends CategorizedComponents {
isNatureClicked?: boolean,
@@ -10,7 +10,7 @@ interface MyCategorizedComponents extends CategorizedComponents {
@Component({
selector: IndexComponent.SELECTOR,
- templateUrl: './index.component.html',
+ templateUrl: "./index.component.html",
})
export class IndexComponent implements OnInit {
@@ -41,7 +41,7 @@ export class IndexComponent implements OnInit {
updateFilter(completeFilter: string) {
// take each space-separated string as an individual and-combined filter
- const filters = completeFilter.toLowerCase().split(' ');
+ const filters = completeFilter.toLowerCase().split(" ");
let countFilteredEntries = 0;
for (const entry of this.list) {
entry.filteredComponents = entry.components.filter(entry =>
diff --git a/ui/src/app/edge/settings/component/update/update.component.html b/ui/src/app/edge/settings/component/update/update.component.html
index 38297852e60..aeaee6f0114 100644
--- a/ui/src/app/edge/settings/component/update/update.component.html
+++ b/ui/src/app/edge/settings/component/update/update.component.html
@@ -31,4 +31,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/component/update/update.component.ts b/ui/src/app/edge/settings/component/update/update.component.ts
index ff1f9201fcd..3c882e05473 100644
--- a/ui/src/app/edge/settings/component/update/update.component.ts
+++ b/ui/src/app/edge/settings/component/update/update.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { ActivatedRoute } from '@angular/router';
-import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { FormlyFieldConfig } from '@ngx-formly/core';
-import { Service, Utils, Websocket, EdgeConfig, Edge } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { FormlyFieldConfig } from "@ngx-formly/core";
+import { Edge, EdgeConfig, Service, Utils, Websocket } from "../../../../shared/shared";
@Component({
selector: ComponentUpdateComponent.SELECTOR,
- templateUrl: './update.component.html',
+ templateUrl: "./update.component.html",
})
export class ComponentUpdateComponent implements OnInit {
@@ -44,13 +44,13 @@ export class ComponentUpdateComponent implements OnInit {
this.factory = factory;
for (const property of properties) {
- if (property.id === 'id') {
+ if (property.id === "id") {
continue; // ignore Component-ID
}
- const property_id = property.id.replace('.', '_');
+ const property_id = property.id.replace(".", "_");
const field: FormlyFieldConfig = {
key: property_id,
- type: 'input',
+ type: "input",
templateOptions: {
label: property.name,
description: property.description,
@@ -63,7 +63,7 @@ export class ComponentUpdateComponent implements OnInit {
if (component.properties[property.id]) {
// filter arrays with nested objects
- if (Array.isArray(component.properties[property.id]) && component.properties[property.id]?.length > 0 && component.properties[property.id]?.every(element => typeof element === 'object')) {
+ if (Array.isArray(component.properties[property.id]) && component.properties[property.id]?.length > 0 && component.properties[property.id]?.every(element => typeof element === "object")) {
// Stringify json for objects nested inside an array
model[property_id] = JSON.stringify(component.properties[property.id]);
@@ -82,24 +82,24 @@ export class ComponentUpdateComponent implements OnInit {
for (const controlKey in this.form.controls) {
const control = this.form.controls[controlKey];
if (control.dirty) {
- const property_id = controlKey.replace('_', '.');
+ const property_id = controlKey.replace("_", ".");
properties.push({ name: property_id, value: control.value });
}
}
this.edge.updateComponentConfig(this.websocket, this.componentId, properties).then(() => {
this.form.markAsPristine();
- this.service.toast("Successfully updated " + this.componentId + ".", 'success');
+ this.service.toast("Successfully updated " + this.componentId + ".", "success");
}).catch(reason => {
- this.service.toast("Error updating " + this.componentId + ":" + reason.error.message, 'danger');
+ this.service.toast("Error updating " + this.componentId + ":" + reason.error.message, "danger");
});
}
public delete() {
this.edge.deleteComponentConfig(this.websocket, this.componentId).then(() => {
this.form.markAsPristine();
- this.service.toast("Successfully deleted " + this.componentId + ".", 'success');
+ this.service.toast("Successfully deleted " + this.componentId + ".", "success");
}).catch(reason => {
- this.service.toast("Error deleting " + this.componentId + ":" + reason.error.message, 'danger');
+ this.service.toast("Error deleting " + this.componentId + ":" + reason.error.message, "danger");
});
}
diff --git a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.html b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.html
index d10ae978751..0468ec0c4d5 100644
--- a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.html
+++ b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.html
@@ -13,7 +13,7 @@
"{{item.key}}":
,
-
+
@@ -25,7 +25,7 @@
+ [ngTemplateOutletContext]="{value: value.elementType, indentation: indentation + 4}">
[]
diff --git a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.module.ts b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.module.ts
index f5d2946018f..863a01664e4 100644
--- a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.module.ts
+++ b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.module.ts
@@ -1,6 +1,6 @@
-import { NgModule } from '@angular/core';
-import { SharedModule } from 'src/app/shared/shared.module';
-import { JsonrpcTestComponent } from './jsonrpctest';
+import { NgModule } from "@angular/core";
+import { SharedModule } from "src/app/shared/shared.module";
+import { JsonrpcTestComponent } from "./jsonrpctest";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.permission.ts b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.permission.ts
index 789e472d542..67edc0ee8a0 100644
--- a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.permission.ts
+++ b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.permission.ts
@@ -5,7 +5,7 @@ import { User } from "src/app/shared/jsonrpc/shared";
export namespace JsonrpcTestPermission {
export function canSee(user: User, edge: Edge): boolean {
- return true;
+ return true;
}
}
diff --git a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.ts b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.ts
index b604b231d24..8bab188a03f 100644
--- a/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.ts
+++ b/ui/src/app/edge/settings/jsonrpctest/jsonrpctest.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { ActivatedRoute } from '@angular/router';
-import { JsonrpcRequest } from 'src/app/shared/jsonrpc/base';
-import { Edge, Service, Websocket } from 'src/app/shared/shared';
-import { environment } from 'src/environments';
+import { Component, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { JsonrpcRequest } from "src/app/shared/jsonrpc/base";
+import { Edge, Service, Websocket } from "src/app/shared/shared";
+import { environment } from "src/environments";
@Component({
selector: JsonrpcTestComponent.SELECTOR,
- templateUrl: './jsonrpctest.html',
+ templateUrl: "./jsonrpctest.html",
})
export class JsonrpcTestComponent implements OnInit {
@@ -26,19 +26,19 @@ export class JsonrpcTestComponent implements OnInit {
}
public ngOnInit(): void {
- this.service.setCurrentComponent('Jsonrpc Test', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
edge.sendRequest(this.websocket, new JsonrpcRequest("routes", {})).then(response => {
- this.endpoints = (response.result['endpoints'] as EndpointResponse[]).map(endpoint => {
+ this.endpoints = (response.result["endpoints"] as EndpointResponse[]).map(endpoint => {
return {
method: endpoint.method,
- description: endpoint.description ? endpoint.description.replace('\n', '
') : null,
+ description: endpoint.description ? endpoint.description.replace("\n", "
") : null,
tags: endpoint.tags,
guards: endpoint.guards,
request: endpoint.request, // JSON.stringify(endpoint.request.json, null, 2),
response: endpoint.response,
parent: endpoint.parent,
- requestMethod: 'raw',
+ requestMethod: "raw",
form: new FormGroup({}),
model: {},
modelRaw: JSON.stringify(createDummyRequest(endpoint.request.json), null, 2),
@@ -46,7 +46,7 @@ export class JsonrpcTestComponent implements OnInit {
});
});
}).catch(e => {
- this.service.toast(e, 'danger');
+ this.service.toast(e, "danger");
});
}
@@ -64,8 +64,8 @@ export class JsonrpcTestComponent implements OnInit {
);
for (let i = endpoint.parent.length - 1; i >= 0; i--) {
const parent = endpoint.parent[i];
- if (environment.backend === 'OpenEMS Backend') {
- if (parent.method === 'authenticatedRpc') {
+ if (environment.backend === "OpenEMS Backend") {
+ if (parent.method === "authenticatedRpc") {
break;
}
}
@@ -88,7 +88,7 @@ export class JsonrpcTestComponent implements OnInit {
}
- (environment.backend === 'OpenEMS Edge'
+ (environment.backend === "OpenEMS Edge"
? this.websocket.sendRequest(request)
: this.edge.sendRequest(this.websocket, request))
.then(response => {
@@ -108,15 +108,15 @@ function createDummyRequest(endpointType?: EndpointType) {
return undefined;
}
switch (endpointType.type) {
- case 'object': {
+ case "object": {
const obj = {};
for (const [key, value] of Object.entries(endpointType.properties)) {
obj[key] = createDummyRequest(value);
}
return obj;
}
- case 'string': {
- return 'string';
+ case "string": {
+ return "string";
}
}
}
@@ -153,11 +153,11 @@ type RequestExample = {
type EndpointType =
{
- type: 'object',
+ type: "object",
properties: { [key: string]: EndpointType }
}
| {
- type: 'string',
+ type: "string",
constraints: string[]
};
diff --git a/ui/src/app/edge/settings/network/network.component.ts b/ui/src/app/edge/settings/network/network.component.ts
index 1d94213534d..99b9af92671 100644
--- a/ui/src/app/edge/settings/network/network.component.ts
+++ b/ui/src/app/edge/settings/network/network.component.ts
@@ -1,25 +1,25 @@
-import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { FormlyFieldConfig, FormlyForm } from '@ngx-formly/core';
-import { TranslateService } from '@ngx-translate/core';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { Role } from 'src/app/shared/type/role';
-import { Edge, Service, Websocket } from '../../../shared/shared';
-import { GetNetworkConfigRequest } from './getNetworkConfigRequest';
-import { GetNetworkConfigResponse } from './getNetworkConfigResponse';
-import { SetNetworkConfigRequest } from './setNetworkConfigRequest';
-import { InterfaceForm, InterfaceModel, IpAddress, NetworkConfig, NetworkInterface, NetworkUtils } from './shared';
+import { Component, OnInit } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { FormlyFieldConfig, FormlyForm } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { Role } from "src/app/shared/type/role";
+import { Edge, Service, Websocket } from "../../../shared/shared";
+import { GetNetworkConfigRequest } from "./getNetworkConfigRequest";
+import { GetNetworkConfigResponse } from "./getNetworkConfigResponse";
+import { SetNetworkConfigRequest } from "./setNetworkConfigRequest";
+import { InterfaceForm, InterfaceModel, IpAddress, NetworkConfig, NetworkInterface, NetworkUtils } from "./shared";
@Component({
selector: NetworkComponent.SELECTOR,
- templateUrl: './network.component.html',
+ templateUrl: "./network.component.html",
})
export class NetworkComponent implements OnInit {
- private static readonly SELECTOR: string = 'network';
- private static readonly ETH_0: string = 'eth0';
- private static readonly STATIC_LABEL: string = 'static';
- private static readonly NO_LABEL: string = '';
+ private static readonly SELECTOR: string = "network";
+ private static readonly ETH_0: string = "eth0";
+ private static readonly STATIC_LABEL: string = "static";
+ private static readonly NO_LABEL: string = "";
public edge: Edge | null = null;
protected forms: InterfaceForm[] = [];
@@ -37,7 +37,7 @@ export class NetworkComponent implements OnInit {
public submit(iface: InterfaceForm): void {
if (!iface.formGroup.valid) {
- this.service.toast(this.translate.instant('Edge.Network.mandatoryFields'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Network.mandatoryFields"), "danger");
return;
}
@@ -57,9 +57,9 @@ export class NetworkComponent implements OnInit {
*/
protected hideOrShowFields(form: FormlyForm): void {
- const addressField: FormlyFieldConfig | undefined = form.fields.find(element => element.key == 'addressesList');
- const linkLocalAddressField: FormlyFieldConfig | undefined = form.fields.find(element => element.key == 'linkLocalAddressing');
- const metric: FormlyFieldConfig | undefined = form.fields.find(element => element.key == 'metric');
+ const addressField: FormlyFieldConfig | undefined = form.fields.find(element => element.key == "addressesList");
+ const linkLocalAddressField: FormlyFieldConfig | undefined = form.fields.find(element => element.key == "linkLocalAddressing");
+ const metric: FormlyFieldConfig | undefined = form.fields.find(element => element.key == "metric");
const advancedMode: boolean = form.model.advancedMode;
if (addressField) { addressField.hide = !advancedMode; }
@@ -71,11 +71,11 @@ export class NetworkComponent implements OnInit {
try {
this.edge = await this.service.getCurrentEdge();
if (this.edge) {
- const response: GetNetworkConfigResponse = await this.edge.sendRequest(this.websocket, new ComponentJsonApiRequest({ componentId: '_host', payload: new GetNetworkConfigRequest() })) as GetNetworkConfigResponse;
+ const response: GetNetworkConfigResponse = await this.edge.sendRequest(this.websocket, new ComponentJsonApiRequest({ componentId: "_host", payload: new GetNetworkConfigRequest() })) as GetNetworkConfigResponse;
this.handleNetworkConfigResponse(response);
}
} catch (reason: any) {
- this.service.toast(this.translate.instant('Edge.Network.errorReading') + reason?.error?.message ?? 'Unknown error', 'danger');
+ this.service.toast(this.translate.instant("Edge.Network.errorReading") + reason?.error?.message ?? "Unknown error", "danger");
}
}
@@ -119,10 +119,10 @@ export class NetworkComponent implements OnInit {
if (iface.model.addressesList) {
for (const addr of iface.model.addressesList) {
if (!this.ipRegex.test(addr)) {
- this.service.toast(this.translate.instant('Edge.Network.validAddressWarning'), 'danger');
+ this.service.toast(this.translate.instant("Edge.Network.validAddressWarning"), "danger");
return [];
}
- const [address, subnet] = addr.split('/');
+ const [address, subnet] = addr.split("/");
const subnetmask = NetworkUtils.getSubnetmaskAsString(Number.parseInt(subnet));
addressJson.push({
@@ -182,12 +182,12 @@ export class NetworkComponent implements OnInit {
private async sendRequest(interfaceName: string, request: NetworkConfig): Promise
{
try {
await this.edge?.sendRequest(this.websocket, new ComponentJsonApiRequest({
- componentId: '_host',
+ componentId: "_host",
payload: new SetNetworkConfigRequest(request),
}));
- this.service.toast(this.translate.instant('Edge.Network.successUpdate') + `[${interfaceName}].`, 'success');
+ this.service.toast(this.translate.instant("Edge.Network.successUpdate") + `[${interfaceName}].`, "success");
} catch (reason: any) {
- this.service.toast(this.translate.instant('Edge.Network.errorUpdating') + `[${interfaceName}].` + reason?.error?.message ?? 'Unknown error', 'danger');
+ this.service.toast(this.translate.instant("Edge.Network.errorUpdating") + `[${interfaceName}].` + reason?.error?.message ?? "Unknown error", "danger");
}
}
@@ -211,7 +211,7 @@ export class NetworkComponent implements OnInit {
} else {
// Converts ip:"192.168.1.50" and subnetmask:"255.255.255.0" -> ["192.168.1.50/24"]
const cidr: number = NetworkUtils.getCidrFromSubnetmask(address.subnetmask);
- const ip: string = address.address.concat('/' + cidr.toString());
+ const ip: string = address.address.concat("/" + cidr.toString());
addressArray.push(ip);
}
}
@@ -238,100 +238,100 @@ export class NetworkComponent implements OnInit {
private fillFields(addressArray: string[]): FormlyFieldConfig[] {
const fields: FormlyFieldConfig[] = [
{
- key: 'dhcp',
- type: 'checkbox',
+ key: "dhcp",
+ type: "checkbox",
defaultValue: true,
templateOptions: {
- label: 'DHCP',
+ label: "DHCP",
},
},
{
- hideExpression: 'model.dhcp',
- key: 'ip',
- type: 'input',
+ hideExpression: "model.dhcp",
+ key: "ip",
+ type: "input",
resetOnHide: false,
templateOptions: {
- label: this.translate.instant('Edge.Network.ipAddress'),
- placeholder: 'z.B. 192.168.0.50',
+ label: this.translate.instant("Edge.Network.ipAddress"),
+ placeholder: "z.B. 192.168.0.50",
required: true,
},
validators: {
- validation: ['ip'],
+ validation: ["ip"],
},
},
{
- hideExpression: 'model.dhcp',
- key: 'subnetmask',
- type: 'input',
+ hideExpression: "model.dhcp",
+ key: "subnetmask",
+ type: "input",
resetOnHide: false,
templateOptions: {
- label: this.translate.instant('Edge.Network.subnetmask'),
- placeholder: 'z.B. 255.255.255.0',
+ label: this.translate.instant("Edge.Network.subnetmask"),
+ placeholder: "z.B. 255.255.255.0",
required: true,
},
validators: {
- validation: ['subnetmask'],
+ validation: ["subnetmask"],
},
},
{
- hideExpression: 'model.dhcp',
- key: 'gateway',
- type: 'input',
+ hideExpression: "model.dhcp",
+ key: "gateway",
+ type: "input",
resetOnHide: false,
templateOptions: {
- label: 'Gateway',
- placeholder: 'z.B. 192.168.0.1',
+ label: "Gateway",
+ placeholder: "z.B. 192.168.0.1",
required: true,
},
validators: {
- validation: ['ip'],
+ validation: ["ip"],
},
},
{
- hideExpression: 'model.dhcp',
- key: 'dns',
- type: 'input',
+ hideExpression: "model.dhcp",
+ key: "dns",
+ type: "input",
resetOnHide: false,
templateOptions: {
- label: 'DNS-Server',
- placeholder: 'z.B. 192.168.0.1',
+ label: "DNS-Server",
+ placeholder: "z.B. 192.168.0.1",
required: true,
},
validators: {
- validation: ['ip'],
+ validation: ["ip"],
},
},
{
- key: 'linkLocalAddressing',
- type: 'checkbox',
+ key: "linkLocalAddressing",
+ type: "checkbox",
resetOnHide: false,
templateOptions: {
- label: 'Link-Local Address (z. B. 169.254.XXX.XXX)',
+ label: "Link-Local Address (z. B. 169.254.XXX.XXX)",
},
hide: true,
},
{
hide: true,
- key: 'addressesList',
- type: 'repeat',
+ key: "addressesList",
+ type: "repeat",
resetOnHide: false,
defaultValue: addressArray,
templateOptions: {
- label: this.translate.instant('Edge.Network.addIP'),
+ label: this.translate.instant("Edge.Network.addIP"),
},
fieldArray: {
- type: 'input',
+ type: "input",
resetOnHide: false,
},
},
{
hide: true,
- key: 'metric',
- type: 'input',
+ key: "metric",
+ type: "input",
resetOnHide: false,
templateOptions: {
- label: 'Metric',
- placeholder: 'z.B. 512, 1024 ...',
+ label: "Metric",
+ placeholder: "z.B. 512, 1024 ...",
},
defaultValue: 1024,
parsers: [Number],
diff --git a/ui/src/app/edge/settings/network/setNetworkConfigRequest.ts b/ui/src/app/edge/settings/network/setNetworkConfigRequest.ts
index 71d4d613978..1d8f361de36 100644
--- a/ui/src/app/edge/settings/network/setNetworkConfigRequest.ts
+++ b/ui/src/app/edge/settings/network/setNetworkConfigRequest.ts
@@ -1,5 +1,5 @@
import { JsonrpcRequest } from "../../../shared/jsonrpc/base";
-import { NetworkConfig } from './shared';
+import { NetworkConfig } from "./shared";
/**
* Represents a JSON-RPC Request for 'setNetworkConfig': Updates the current network configuration.
diff --git a/ui/src/app/edge/settings/network/shared.ts b/ui/src/app/edge/settings/network/shared.ts
index 911c82bc03b..059514e8ebc 100644
--- a/ui/src/app/edge/settings/network/shared.ts
+++ b/ui/src/app/edge/settings/network/shared.ts
@@ -56,7 +56,7 @@ export namespace NetworkUtils {
octets.push(256 - Math.pow(2, 8 - bits));
cidr -= bits;
}
- return octets.join('.');
+ return octets.join(".");
}
/**
@@ -73,12 +73,12 @@ export namespace NetworkUtils {
export function getCidrFromSubnetmask(subnetmask: string): number {
// Split the subnet mask into its octets, convert them to binary, and join the binary strings
const binaryString = subnetmask
- .split('.')
+ .split(".")
.map(Number)
- .map(part => (part >>> 0).toString(2).padStart(8, '0')) // Ensure each part is represented as 8 bits
- .join('');
+ .map(part => (part >>> 0).toString(2).padStart(8, "0")) // Ensure each part is represented as 8 bits
+ .join("");
// return the number of '1's in the binary string to get the CIDR notation
- return binaryString.split('1').length - 1;
+ return binaryString.split("1").length - 1;
}
}
diff --git a/ui/src/app/edge/settings/powerassistant/powerassistant.ts b/ui/src/app/edge/settings/powerassistant/powerassistant.ts
index 1cdedeeefe6..4dcc5708141 100644
--- a/ui/src/app/edge/settings/powerassistant/powerassistant.ts
+++ b/ui/src/app/edge/settings/powerassistant/powerassistant.ts
@@ -1,11 +1,10 @@
// @ts-strict-ignore
-import { Component } from '@angular/core';
-
-import { formatNumber } from '@angular/common';
-import { ChannelAddress, CurrentData, EdgeConfig, Utils } from '../../../shared/shared';
-import { LiveDataService } from '../../live/livedataservice';
-import { AbstractFlatWidget } from 'src/app/shared/components/flat/abstract-flat-widget';
-import { DataService } from 'src/app/shared/components/shared/dataservice';
+import { formatNumber } from "@angular/common";
+import { Component } from "@angular/core";
+import { AbstractFlatWidget } from "src/app/shared/components/flat/abstract-flat-widget";
+import { DataService } from "src/app/shared/components/shared/dataservice";
+import { ChannelAddress, CurrentData, EdgeConfig, Utils } from "../../../shared/shared";
+import { LiveDataService } from "../../live/livedataservice";
type Channel = {
title: string,
@@ -29,8 +28,8 @@ type Entry = {
};
@Component({
- selector: 'powerassistant',
- templateUrl: './powerassistant.html',
+ selector: "powerassistant",
+ templateUrl: "./powerassistant.html",
providers: [{
useClass: LiveDataService,
provide: DataService,
@@ -98,7 +97,7 @@ export class PowerAssistantComponent extends AbstractFlatWidget {
if (ess.factoryId === "Ess.Generic.ManagedSymmetric") {
// Create optional Battery Component
const battery = this.config.components[ess.properties["battery.id"]];
- result['battery'] = {
+ result["battery"] = {
id: battery.id,
alias: battery.alias,
factoryId: battery.factoryId,
@@ -129,7 +128,7 @@ export class PowerAssistantComponent extends AbstractFlatWidget {
};
// Create optional Battery-Inverter Component
const batteryInverter = this.config.components[ess.properties["batteryInverter.id"]];
- result['batteryInverter'] = {
+ result["batteryInverter"] = {
id: batteryInverter.id,
alias: batteryInverter.alias,
factoryId: batteryInverter.factoryId,
@@ -223,9 +222,9 @@ export namespace Converter {
export function unit(unit: string): (value: any) => string {
return function (value: any): string {
if (value == null) {
- return '-';
+ return "-";
} else if (value >= 0) {
- return formatNumber(value, 'de', '1.0-0') + ' ' + unit;
+ return formatNumber(value, "de", "1.0-0") + " " + unit;
}
};
}
@@ -233,7 +232,7 @@ export namespace Converter {
export function enabled(): (value: any) => string {
return function (value: any): string {
if (value == null) {
- return '-';
+ return "-";
} else if (value == 1) {
return "Enabled";
} else {
diff --git a/ui/src/app/edge/settings/profile/aliasupdate.component.html b/ui/src/app/edge/settings/profile/aliasupdate.component.html
index 9daf445a05b..1e63df550f6 100644
--- a/ui/src/app/edge/settings/profile/aliasupdate.component.html
+++ b/ui/src/app/edge/settings/profile/aliasupdate.component.html
@@ -37,4 +37,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/profile/aliasupdate.component.ts b/ui/src/app/edge/settings/profile/aliasupdate.component.ts
index 528d653b9da..d0b91e080ca 100644
--- a/ui/src/app/edge/settings/profile/aliasupdate.component.ts
+++ b/ui/src/app/edge/settings/profile/aliasupdate.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, EdgeConfig, Service, Websocket } from 'src/app/shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, EdgeConfig, Service, Websocket } from "src/app/shared/shared";
@Component({
- selector: 'aliasupdate',
- templateUrl: './aliasupdate.component.html',
+ selector: "aliasupdate",
+ templateUrl: "./aliasupdate.component.html",
})
export class AliasUpdateComponent implements OnInit {
@@ -28,7 +28,7 @@ export class AliasUpdateComponent implements OnInit {
) { }
ngOnInit() {
- this.service.setCurrentComponent({ languageKey: 'Edge.Config.Index.renameComponents' }, this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
});
this.service.getConfig().then(config => {
@@ -46,16 +46,16 @@ export class AliasUpdateComponent implements OnInit {
const newAlias = alias;
if (this.edge != null) {
if (this.component.id == newAlias) {
- this.service.toast(this.translate.instant('General.inputNotValid'), 'danger');
+ this.service.toast(this.translate.instant("General.inputNotValid"), "danger");
} else {
this.edge.updateComponentConfig(this.websocket, this.component.id, [
- { name: 'alias', value: newAlias },
+ { name: "alias", value: newAlias },
]).then(() => {
this.formGroup.markAsPristine();
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
this.formGroup.markAsPristine();
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
console.warn(reason);
});
}
diff --git a/ui/src/app/edge/settings/profile/channelexport/channelExportXlsxRequest.ts b/ui/src/app/edge/settings/profile/channelexport/channelExportXlsxRequest.ts
index 215dfa96925..90475f77f87 100644
--- a/ui/src/app/edge/settings/profile/channelexport/channelExportXlsxRequest.ts
+++ b/ui/src/app/edge/settings/profile/channelexport/channelExportXlsxRequest.ts
@@ -1,4 +1,4 @@
-import { JsonrpcRequest } from '../../../../shared/jsonrpc/base';
+import { JsonrpcRequest } from "../../../../shared/jsonrpc/base";
/**
* Exports Channels with current value and metadata to an Excel (xlsx) file.
diff --git a/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolExportXlsxRequest.ts b/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolExportXlsxRequest.ts
index c67d1cafc52..3c691621f86 100644
--- a/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolExportXlsxRequest.ts
+++ b/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolExportXlsxRequest.ts
@@ -1,4 +1,4 @@
-import { JsonrpcRequest } from '../../../../shared/jsonrpc/base';
+import { JsonrpcRequest } from "../../../../shared/jsonrpc/base";
/**
* Wraps a JSON-RPC Request to query the Modbus Protocol from Modbus/TCP
diff --git a/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolRequest.ts b/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolRequest.ts
index b0dbbcc8cdf..bab6ea90dc1 100644
--- a/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolRequest.ts
+++ b/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolRequest.ts
@@ -1,4 +1,4 @@
-import { JsonrpcRequest } from '../../../../shared/jsonrpc/base';
+import { JsonrpcRequest } from "../../../../shared/jsonrpc/base";
/**
* Wraps a JSON-RPC Request to query the Modbus Protocol from Modbus/TCP
diff --git a/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolResponse.ts b/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolResponse.ts
index cc25ca0bbb9..56cea28bb6b 100644
--- a/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolResponse.ts
+++ b/ui/src/app/edge/settings/profile/modbusapi/getModbusProtocolResponse.ts
@@ -1,4 +1,4 @@
-import { JsonrpcResponseSuccess } from '../../../../shared/jsonrpc/base';
+import { JsonrpcResponseSuccess } from "../../../../shared/jsonrpc/base";
/**
* Wraps a JSON-RPC Response to "getModbusProtocol" Request
diff --git a/ui/src/app/edge/settings/profile/profile.component.ts b/ui/src/app/edge/settings/profile/profile.component.ts
index a6ca6b3a0f5..f33d018f26a 100644
--- a/ui/src/app/edge/settings/profile/profile.component.ts
+++ b/ui/src/app/edge/settings/profile/profile.component.ts
@@ -1,19 +1,19 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { PopoverController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { CategorizedComponents } from 'src/app/shared/components/edge/edgeconfig';
-import { JsonrpcResponseError } from 'src/app/shared/jsonrpc/base';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { Base64PayloadResponse } from 'src/app/shared/jsonrpc/response/base64PayloadResponse';
-import { environment } from '../../../../environments';
-import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from '../../../shared/shared';
-import { ChannelExportXlsxRequest } from './channelexport/channelExportXlsxRequest';
-import { GetModbusProtocolExportXlsxRequest } from './modbusapi/getModbusProtocolExportXlsxRequest';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { PopoverController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { CategorizedComponents } from "src/app/shared/components/edge/edgeconfig";
+import { JsonrpcResponseError } from "src/app/shared/jsonrpc/base";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { Base64PayloadResponse } from "src/app/shared/jsonrpc/response/base64PayloadResponse";
+import { environment } from "../../../../environments";
+import { ChannelAddress, Edge, EdgeConfig, Service, Utils } from "../../../shared/shared";
+import { ChannelExportXlsxRequest } from "./channelexport/channelExportXlsxRequest";
+import { GetModbusProtocolExportXlsxRequest } from "./modbusapi/getModbusProtocolExportXlsxRequest";
@Component({
selector: ProfileComponent.SELECTOR,
- templateUrl: './profile.component.html',
+ templateUrl: "./profile.component.html",
})
export class ProfileComponent implements OnInit {
@@ -35,7 +35,7 @@ export class ProfileComponent implements OnInit {
) { }
public ngOnInit() {
- this.service.setCurrentComponent({ languageKey: 'Edge.Config.Index.systemProfile' }, this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
this.service.getConfig().then(config => {
this.config = config;
@@ -51,14 +51,14 @@ export class ProfileComponent implements OnInit {
edge.sendRequest(this.service.websocket, request).then(response => {
Utils.downloadXlsx(response as Base64PayloadResponse, "Modbus-TCP-" + edge.id);
}).catch(reason => {
- this.service.toast(this.translate.instant('Edge.Config.PROFILE.ERROR_DOWNLOADING_MODBUS_PROTOCOL') + ": " + (reason as JsonrpcResponseError).error.message, 'danger');
+ this.service.toast(this.translate.instant("Edge.Config.PROFILE.ERROR_DOWNLOADING_MODBUS_PROTOCOL") + ": " + (reason as JsonrpcResponseError).error.message, "danger");
});
});
}
public getChannelExport(componentId: string) {
this.service.getCurrentEdge().then(edge => {
- const request = new ComponentJsonApiRequest({ componentId: '_componentManager', payload: new ChannelExportXlsxRequest({ componentId: componentId }) });
+ const request = new ComponentJsonApiRequest({ componentId: "_componentManager", payload: new ChannelExportXlsxRequest({ componentId: componentId }) });
edge.sendRequest(this.service.websocket, request).then(response => {
Utils.downloadXlsx(response as Base64PayloadResponse, "ChannelExport-" + edge.id + "-" + componentId);
}).catch(reason => {
diff --git a/ui/src/app/edge/settings/settings.component.html b/ui/src/app/edge/settings/settings.component.html
index a08457cce91..abfdf9a2a04 100644
--- a/ui/src/app/edge/settings/settings.component.html
+++ b/ui/src/app/edge/settings/settings.component.html
@@ -103,7 +103,8 @@
Edge.Config.Index.adjustComponents
-
+
@@ -117,7 +118,8 @@
Edge.Config.Index.addComponents
-
+
@@ -146,7 +148,8 @@
Power Assistant
-
+
diff --git a/ui/src/app/edge/settings/settings.component.ts b/ui/src/app/edge/settings/settings.component.ts
index 3caf8138939..8c667833490 100644
--- a/ui/src/app/edge/settings/settings.component.ts
+++ b/ui/src/app/edge/settings/settings.component.ts
@@ -1,12 +1,13 @@
-import { Component, OnInit } from '@angular/core';
-import { Role } from 'src/app/shared/type/role';
-import { environment } from 'src/environments';
-import { Edge, Service, Utils } from '../../shared/shared';
-import { JsonrpcTestPermission } from './jsonrpctest/jsonrpctest.permission';
+import { Component, OnInit } from "@angular/core";
+import { TranslateService } from "@ngx-translate/core";
+import { Role } from "src/app/shared/type/role";
+import { environment } from "src/environments";
+import { Edge, Service, Utils } from "../../shared/shared";
+import { JsonrpcTestPermission } from "./jsonrpctest/jsonrpctest.permission";
@Component({
- selector: 'settings',
- templateUrl: './settings.component.html',
+ selector: "settings",
+ templateUrl: "./settings.component.html",
})
export class SettingsComponent implements OnInit {
@@ -18,11 +19,12 @@ export class SettingsComponent implements OnInit {
public isAtLeastAdmin: boolean = false;
public canSeeJsonrpcTest: boolean = false;
- protected isEdgeBackend: boolean = environment.backend === 'OpenEMS Edge';
+ protected isEdgeBackend: boolean = environment.backend === "OpenEMS Edge";
constructor(
protected utils: Utils,
private service: Service,
+ private translate: TranslateService,
) {
}
diff --git a/ui/src/app/edge/settings/settings.module.ts b/ui/src/app/edge/settings/settings.module.ts
index a04474e871e..3e12f05e109 100644
--- a/ui/src/app/edge/settings/settings.module.ts
+++ b/ui/src/app/edge/settings/settings.module.ts
@@ -1,24 +1,24 @@
-import { NgModule } from '@angular/core';
-import { ChangelogModule } from 'src/app/changelog/changelog.module';
+import { NgModule } from "@angular/core";
+import { ChangelogModule } from "src/app/changelog/changelog.module";
-import { SharedModule } from './../../shared/shared.module';
-import { AlertingComponent } from './alerting/alerting.component';
-import { AppModule } from './app/app.module';
-import { ChannelsComponent } from './channels/channels.component';
-import { IndexComponent as ComponentInstallIndexComponent } from './component/install/index.component';
-import { ComponentInstallComponent } from './component/install/install.component';
-import { IndexComponent as ComponentUpdateIndexComponent } from './component/update/index.component';
-import { ComponentUpdateComponent } from './component/update/update.component';
-import { JsonrpcTestComponent } from './jsonrpctest/jsonrpctest';
-import { NetworkComponent } from './network/network.component';
-import { PowerAssistantModule } from './powerassistant/powerassistant.module';
-import { AliasUpdateComponent } from './profile/aliasupdate.component';
-import { ProfileComponent } from './profile/profile.component';
-import { SettingsComponent } from './settings.component';
-import { MaintenanceComponent } from './system/maintenance/maintenance';
-import { OeSystemUpdateComponent } from './system/oe-system-update.component';
-import { SystemComponent } from './system/system.component';
-import { SystemExecuteComponent } from './systemexecute/systemexecute.component';
+import { SharedModule } from "./../../shared/shared.module";
+import { AlertingComponent } from "./alerting/alerting.component";
+import { AppModule } from "./app/app.module";
+import { ChannelsComponent } from "./channels/channels.component";
+import { IndexComponent as ComponentInstallIndexComponent } from "./component/install/index.component";
+import { ComponentInstallComponent } from "./component/install/install.component";
+import { IndexComponent as ComponentUpdateIndexComponent } from "./component/update/index.component";
+import { ComponentUpdateComponent } from "./component/update/update.component";
+import { JsonrpcTestComponent } from "./jsonrpctest/jsonrpctest";
+import { NetworkComponent } from "./network/network.component";
+import { PowerAssistantModule } from "./powerassistant/powerassistant.module";
+import { AliasUpdateComponent } from "./profile/aliasupdate.component";
+import { ProfileComponent } from "./profile/profile.component";
+import { SettingsComponent } from "./settings.component";
+import { MaintenanceComponent } from "./system/maintenance/maintenance";
+import { OeSystemUpdateComponent } from "./system/oe-system-update.component";
+import { SystemComponent } from "./system/system.component";
+import { SystemExecuteComponent } from "./systemexecute/systemexecute.component";
@NgModule({
imports: [
diff --git a/ui/src/app/edge/settings/settings.spec.ts b/ui/src/app/edge/settings/settings.spec.ts
index da8089ca1c9..e53b68e6ec4 100644
--- a/ui/src/app/edge/settings/settings.spec.ts
+++ b/ui/src/app/edge/settings/settings.spec.ts
@@ -1,32 +1,51 @@
// @ts-strict-ignore
+import { registerLocaleData } from "@angular/common";
+import localDE from "@angular/common/locales/de";
+import localeDeExtra from "@angular/common/locales/extra/de";
+import { LOCALE_ID } from "@angular/core";
import { TestBed } from "@angular/core/testing";
+import { FORMLY_CONFIG } from "@ngx-formly/core";
+import { TranslateLoader, TranslateModule, TranslateService } from "@ngx-translate/core";
+import { BehaviorSubject } from "rxjs";
import { DummyConfig } from "src/app/shared/components/edge/edgeconfig.spec";
import { Service, Utils } from "src/app/shared/shared";
-import { Language } from "src/app/shared/type/language";
+import { Language, MyTranslateLoader } from "src/app/shared/type/language";
import { Role } from "src/app/shared/type/role";
+import { registerTranslateExtension } from "./app/app.module";
import { SettingsComponent } from "./settings.component";
-import { BehaviorSubject } from "rxjs";
-
-describe('Edge', () => {
- const serviceSypObject = jasmine.createSpyObj('Service', ['getCurrentEdge'], {
+describe("Edge", () => {
+ const serviceSypObject = jasmine.createSpyObj("Service", ["getCurrentEdge"], {
metadata: new BehaviorSubject({
edges: null,
- user: { globalRole: 'admin', hasMultipleEdges: true, id: '', language: Language.DE.key, name: 'test.user', settings: {} },
+ user: { globalRole: "admin", hasMultipleEdges: true, id: "", language: Language.DE.key, name: "test.user", settings: {} },
}),
});
- beforeEach(() => {
- TestBed.configureTestingModule({
+ let settingsComponent: SettingsComponent;
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [
+ TranslateModule.forRoot({ loader: { provide: TranslateLoader, useClass: MyTranslateLoader }, defaultLanguage: Language.DEFAULT.key, useDefaultLang: false }),
+ ],
providers: [
+ TranslateService,
+ { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
+ { provide: LOCALE_ID, useValue: Language.DEFAULT.key },
{ provide: Service, useValue: serviceSypObject },
Utils,
],
+ }).compileComponents().then(() => {
+ const translateService = TestBed.inject(TranslateService);
+ translateService.addLangs(["de"]);
+ translateService.use("de");
+ registerLocaleData(localDE, "de", localeDeExtra);
+ settingsComponent = new SettingsComponent(Utils, serviceSypObject, translateService);
});
+
});
- const settingsComponent = new SettingsComponent(Utils, serviceSypObject);
- it('+ngOnInit - Role.ADMIN', async () => {
+ it("+ngOnInit - Role.ADMIN", async () => {
const result = await expectNgOnInit(serviceSypObject, Role.ADMIN, settingsComponent);
expect(result).toEqual({
isAtLeastOwner: true,
@@ -34,7 +53,7 @@ describe('Edge', () => {
isAtLeastAdmin: true,
});
});
- it('+ngOnInit - Role.INSTALLER', async () => {
+ it("+ngOnInit - Role.INSTALLER", async () => {
const result = await expectNgOnInit(serviceSypObject, Role.INSTALLER, settingsComponent);
expect(result).toEqual({
isAtLeastOwner: true,
@@ -42,7 +61,7 @@ describe('Edge', () => {
isAtLeastAdmin: false,
});
});
- it('+ngOnInit - Role.OWNER', async () => {
+ it("+ngOnInit - Role.OWNER", async () => {
const result = await expectNgOnInit(serviceSypObject, Role.OWNER, settingsComponent);
expect(result).toEqual({
isAtLeastOwner: true,
@@ -50,16 +69,14 @@ describe('Edge', () => {
isAtLeastAdmin: false,
});
});
-
});
-
export async function expectNgOnInit(serviceSypObject: jasmine.SpyObj, edgeRole: Role, settingsComponent: SettingsComponent): Promise<{ isAtLeastOwner: boolean; isAtLeastInstaller: boolean; isAtLeastAdmin: boolean; }> {
const edge = DummyConfig.dummyEdge({ role: edgeRole });
serviceSypObject.getCurrentEdge.and.resolveTo(edge);
serviceSypObject.metadata.next({
edges: { [edge.id]: edge },
- user: { globalRole: 'admin', hasMultipleEdges: true, id: '', language: Language.DE.key, name: 'test.user', settings: {} },
+ user: { globalRole: "admin", hasMultipleEdges: true, id: "", language: Language.DE.key, name: "test.user", settings: {} },
});
await settingsComponent.ngOnInit();
return {
diff --git a/ui/src/app/edge/settings/system/executeSystemUpdate.ts b/ui/src/app/edge/settings/system/executeSystemUpdate.ts
index 6bb7f6b8c2e..8ad1732c5bd 100644
--- a/ui/src/app/edge/settings/system/executeSystemUpdate.ts
+++ b/ui/src/app/edge/settings/system/executeSystemUpdate.ts
@@ -5,8 +5,8 @@ import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componen
import { Edge, Websocket } from "src/app/shared/shared";
import { environment } from "src/environments";
import { ExecuteSystemUpdateRequest } from "./executeSystemUpdateRequest";
-import { GetSystemUpdateStateResponse, SystemUpdateState } from "./getSystemUpdateStateResponse";
import { GetSystemUpdateStateRequest } from "./getSystemUpdateStateRequest";
+import { GetSystemUpdateStateResponse, SystemUpdateState } from "./getSystemUpdateStateResponse";
export class ExecuteSystemUpdate {
diff --git a/ui/src/app/edge/settings/system/executesystemupdate.component.html b/ui/src/app/edge/settings/system/executesystemupdate.component.html
index a2e0205fe5d..53281fa214c 100644
--- a/ui/src/app/edge/settings/system/executesystemupdate.component.html
+++ b/ui/src/app/edge/settings/system/executesystemupdate.component.html
@@ -118,4 +118,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/system/executesystemupdate.component.ts b/ui/src/app/edge/settings/system/executesystemupdate.component.ts
index 7aed9eef8b7..badb135f909 100644
--- a/ui/src/app/edge/settings/system/executesystemupdate.component.ts
+++ b/ui/src/app/edge/settings/system/executesystemupdate.component.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
-import { Edge, Service, Websocket } from 'src/app/shared/shared';
-import { environment } from 'src/environments';
-import { ExecuteSystemUpdate } from './executeSystemUpdate';
-import { SystemUpdateState } from './getSystemUpdateStateResponse';
+import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from "@angular/core";
+import { Edge, Service, Websocket } from "src/app/shared/shared";
+import { environment } from "src/environments";
+import { ExecuteSystemUpdate } from "./executeSystemUpdate";
+import { SystemUpdateState } from "./getSystemUpdateStateResponse";
@Component({
selector: ExecuteSystemUpdateComponent.SELECTOR,
- templateUrl: './executesystemupdate.component.html',
+ templateUrl: "./executesystemupdate.component.html",
})
export class ExecuteSystemUpdateComponent implements OnInit, OnDestroy {
diff --git a/ui/src/app/edge/settings/system/maintenance/maintenance.ts b/ui/src/app/edge/settings/system/maintenance/maintenance.ts
index 6964d2461ec..cda8f1e81d6 100644
--- a/ui/src/app/edge/settings/system/maintenance/maintenance.ts
+++ b/ui/src/app/edge/settings/system/maintenance/maintenance.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { AlertController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { BehaviorSubject, Subscription } from 'rxjs';
-import { skip } from 'rxjs/operators';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { ExecuteSystemRestartRequest, Type } from 'src/app/shared/jsonrpc/request/executeSystemRestartRequest';
-import { Role } from 'src/app/shared/type/role';
-import { environment } from 'src/environments';
-
-import { Edge, presentAlert, Service, Utils, Websocket } from '../../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { AlertController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { BehaviorSubject, Subscription } from "rxjs";
+import { skip } from "rxjs/operators";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { ExecuteSystemRestartRequest, Type } from "src/app/shared/jsonrpc/request/executeSystemRestartRequest";
+import { Role } from "src/app/shared/type/role";
+import { environment } from "src/environments";
+
+import { Edge, presentAlert, Service, Utils, Websocket } from "../../../../shared/shared";
enum SystemRestartState {
INITIAL, // No restart
@@ -20,10 +20,10 @@ enum SystemRestartState {
@Component({
selector: MaintenanceComponent.SELECTOR,
- templateUrl: './maintenance.html',
+ templateUrl: "./maintenance.html",
styles: [`
:host {
- ion-card: {
+ :is(ion-card) {
cursor: auto !important;;
}
}
@@ -31,16 +31,16 @@ enum SystemRestartState {
})
export class MaintenanceComponent implements OnInit {
- private static readonly SELECTOR: string = 'oe-maintenance';
+ private static readonly SELECTOR: string = "oe-maintenance";
private static readonly TIMEOUT: number = 3000;
protected readonly environment = environment;
protected edge: Edge | null = null;
- protected options: { key: string, message: string, color: 'success' | 'warning' | null, info: string, roleIsAtLeast: Role, button: { disabled: boolean, label: string, callback: () => void } }[] = [
+ protected options: { key: string, message: string, color: "success" | "warning" | null, info: string, roleIsAtLeast: Role, button: { disabled: boolean, label: string, callback: () => void } }[] = [
{
- key: Type.HARD, message: null, color: null, info: this.translate.instant('SETTINGS.SYSTEM_UPDATE.RESTART_WARNING', { system: environment.edgeShortName }), roleIsAtLeast: Role.OWNER, button: {
- callback: () => this.confirmationAlert(Type.HARD), disabled: false, label: this.translate.instant('SETTINGS.SYSTEM_UPDATE.EMS_RESTARTING', { edgeShortName: environment.edgeShortName }),
+ key: Type.HARD, message: null, color: null, info: this.translate.instant("SETTINGS.SYSTEM_UPDATE.RESTART_WARNING", { system: environment.edgeShortName }), roleIsAtLeast: Role.OWNER, button: {
+ callback: () => this.confirmationAlert(Type.HARD), disabled: false, label: this.translate.instant("SETTINGS.SYSTEM_UPDATE.EMS_RESTARTING", { edgeShortName: environment.edgeShortName }),
},
},
];
@@ -62,19 +62,19 @@ export class MaintenanceComponent implements OnInit {
*/
async presentAlert(type: Type) {
const translate = this.translate;
- const system = type === Type.HARD ? environment.edgeShortName : 'OpenEMS';
+ const system = type === Type.HARD ? environment.edgeShortName : "OpenEMS";
const alert = this.alertCtrl.create({
- subHeader: translate.instant('SETTINGS.SYSTEM_UPDATE.RESTART_CONFIRMATION', { system: system }),
- message: translate.instant('SETTINGS.SYSTEM_UPDATE.RESTART_WARNING', { system: system }),
+ subHeader: translate.instant("SETTINGS.SYSTEM_UPDATE.RESTART_CONFIRMATION", { system: system }),
+ message: translate.instant("SETTINGS.SYSTEM_UPDATE.RESTART_WARNING", { system: system }),
buttons: [{
- text: translate.instant('General.cancel'),
- role: 'cancel',
+ text: translate.instant("General.cancel"),
+ role: "cancel",
},
{
- text: translate.instant('General.RESTART'),
+ text: translate.instant("General.RESTART"),
handler: () => this.execRestart(type),
}],
- cssClass: 'alertController',
+ cssClass: "alertController",
});
(await alert).present();
}
@@ -98,10 +98,10 @@ export class MaintenanceComponent implements OnInit {
}
protected confirmationAlert: (type: Type) => void = (type: Type) => presentAlert(this.alertCtrl, this.translate, {
- message: this.translate.instant('SETTINGS.SYSTEM_UPDATE.RESTART_WARNING', { system: environment.edgeShortName }),
- subHeader: this.translate.instant('SETTINGS.SYSTEM_UPDATE.RESTART_CONFIRMATION', { system: environment.edgeShortName }),
+ message: this.translate.instant("SETTINGS.SYSTEM_UPDATE.RESTART_WARNING", { system: environment.edgeShortName }),
+ subHeader: this.translate.instant("SETTINGS.SYSTEM_UPDATE.RESTART_CONFIRMATION", { system: environment.edgeShortName }),
buttons: [{
- text: this.translate.instant('General.RESTART'),
+ text: this.translate.instant("General.RESTART"),
handler: () => this.execRestart(type),
}],
});
@@ -115,13 +115,13 @@ export class MaintenanceComponent implements OnInit {
let message: string | null = null;
let disableButtons: boolean = false;
let showInfo: boolean = false;
- let color: 'warning' | 'success' | null = null;
- const system = type === Type.HARD ? environment.edgeShortName : this.translate.instant('General.SYSTEM');
+ let color: "warning" | "success" | null = null;
+ const system = type === Type.HARD ? environment.edgeShortName : this.translate.instant("General.SYSTEM");
switch (this.systemRestartState?.value?.state) {
case SystemRestartState.FAILED:
message = this.translate.instant("SETTINGS.SYSTEM_UPDATE.RESTART_FAILED", { system: system });
- color = 'warning';
+ color = "warning";
disableButtons = false;
showInfo = true;
break;
@@ -134,10 +134,13 @@ export class MaintenanceComponent implements OnInit {
case SystemRestartState.RESTARTED:
this.service.stopSpinner(this.spinnerId + type);
disableButtons = false;
- color = 'success';
+ color = "success";
message = this.translate.instant("SETTINGS.SYSTEM_UPDATE.RESTARTED", { system: system });
showInfo = true;
break;
+ default:
+ break;
+
}
if (!message) {
@@ -151,7 +154,7 @@ export class MaintenanceComponent implements OnInit {
// Hide and show buttons
option.button.disabled = disableButtons ? disableButtons : !this.edge.roleIsAtLeast(option.roleIsAtLeast);
option.color = color;
- option.info = showInfo ? this.translate.instant('SETTINGS.SYSTEM_UPDATE.RESTART_WARNING', { system: environment.edgeShortName }) : null;
+ option.info = showInfo ? this.translate.instant("SETTINGS.SYSTEM_UPDATE.RESTART_WARNING", { system: environment.edgeShortName }) : null;
return option;
});
}
@@ -163,7 +166,7 @@ export class MaintenanceComponent implements OnInit {
*/
private execRestart(type: Type) {
- const request = new ComponentJsonApiRequest({ componentId: '_host', payload: new ExecuteSystemRestartRequest({ type: type }) });
+ const request = new ComponentJsonApiRequest({ componentId: "_host", payload: new ExecuteSystemRestartRequest({ type: type }) });
// Workaround, there could be no response
this.edge.sendRequest(this.websocket, request).catch(() => {
diff --git a/ui/src/app/edge/settings/system/oe-system-update.component.ts b/ui/src/app/edge/settings/system/oe-system-update.component.ts
index 2e547e5a9a2..b721f60aa44 100644
--- a/ui/src/app/edge/settings/system/oe-system-update.component.ts
+++ b/ui/src/app/edge/settings/system/oe-system-update.component.ts
@@ -1,15 +1,15 @@
// @ts-strict-ignore
-import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
-import { AlertController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Edge, presentAlert, Service, Websocket } from 'src/app/shared/shared';
-import { environment } from 'src/environments';
-import { ExecuteSystemUpdate } from './executeSystemUpdate';
-import { SystemUpdateState } from './getSystemUpdateStateResponse';
+import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from "@angular/core";
+import { AlertController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Edge, presentAlert, Service, Websocket } from "src/app/shared/shared";
+import { environment } from "src/environments";
+import { ExecuteSystemUpdate } from "./executeSystemUpdate";
+import { SystemUpdateState } from "./getSystemUpdateStateResponse";
@Component({
selector: OeSystemUpdateComponent.SELECTOR,
- templateUrl: './oe-system-update.component.html',
+ templateUrl: "./oe-system-update.component.html",
})
export class OeSystemUpdateComponent implements OnInit, OnDestroy {
@@ -67,10 +67,10 @@ export class OeSystemUpdateComponent implements OnInit, OnDestroy {
}
protected confirmationAlert: () => void = () => presentAlert(this.alertCtrl, this.translate, {
- message: this.translate.instant('SETTINGS.SYSTEM_UPDATE.WARNING', { system: environment.edgeShortName }),
- subHeader: this.translate.instant('SETTINGS.SYSTEM_UPDATE.SUB_HEADER'),
+ message: this.translate.instant("SETTINGS.SYSTEM_UPDATE.WARNING", { system: environment.edgeShortName }),
+ subHeader: this.translate.instant("SETTINGS.SYSTEM_UPDATE.SUB_HEADER"),
buttons: [{
- text: this.translate.instant('SETTINGS.SYSTEM_UPDATE.UPDATE_EXECUTE'),
+ text: this.translate.instant("SETTINGS.SYSTEM_UPDATE.UPDATE_EXECUTE"),
handler: () => this.executeSystemUpdate(),
}],
});
diff --git a/ui/src/app/edge/settings/system/system.component.ts b/ui/src/app/edge/settings/system/system.component.ts
index 11c23429957..e6398f41b90 100644
--- a/ui/src/app/edge/settings/system/system.component.ts
+++ b/ui/src/app/edge/settings/system/system.component.ts
@@ -1,12 +1,12 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { environment } from 'src/environments';
-import { Edge, Service, UserPermission, Utils } from '../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { environment } from "src/environments";
+import { Edge, Service, UserPermission, Utils } from "../../../shared/shared";
@Component({
selector: SystemComponent.SELECTOR,
- templateUrl: './system.component.html',
+ templateUrl: "./system.component.html",
})
export class SystemComponent implements OnInit {
diff --git a/ui/src/app/edge/settings/systemexecute/systemexecute.component.html b/ui/src/app/edge/settings/systemexecute/systemexecute.component.html
index 11216d1262f..c22504d89c5 100644
--- a/ui/src/app/edge/settings/systemexecute/systemexecute.component.html
+++ b/ui/src/app/edge/settings/systemexecute/systemexecute.component.html
@@ -130,4 +130,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/edge/settings/systemexecute/systemexecute.component.ts b/ui/src/app/edge/settings/systemexecute/systemexecute.component.ts
index 46f635743a7..174de06b640 100644
--- a/ui/src/app/edge/settings/systemexecute/systemexecute.component.ts
+++ b/ui/src/app/edge/settings/systemexecute/systemexecute.component.ts
@@ -1,24 +1,24 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
-import { ActivatedRoute } from '@angular/router';
-import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';
-import { TranslateService } from '@ngx-translate/core';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { ExecuteSystemCommandRequest } from 'src/app/shared/jsonrpc/request/executeCommandRequest';
-import { ExecuteSystemCommandResponse } from 'src/app/shared/jsonrpc/response/executeSystemCommandResponse';
-import { Service, Utils, Websocket } from '../../../shared/shared';
+import { Component, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { FormlyFieldConfig, FormlyFormOptions } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { ExecuteSystemCommandRequest } from "src/app/shared/jsonrpc/request/executeCommandRequest";
+import { ExecuteSystemCommandResponse } from "src/app/shared/jsonrpc/response/executeSystemCommandResponse";
+import { Service, Utils, Websocket } from "../../../shared/shared";
type CommandFunction = (...args: (string | boolean | number)[]) => string;
const COMMANDS: { [key: string]: CommandFunction; } = {
- 'ping': (ip: string) => `ping -c4 ${ip}`,
- 'openems-restart': () => "which at || DEBIAN_FRONTEND=noninteractive apt-get -y install at; echo 'systemctl restart openems' | at now",
+ "ping": (ip: string) => `ping -c4 ${ip}`,
+ "openems-restart": () => "which at || DEBIAN_FRONTEND=noninteractive apt-get -y install at; echo 'systemctl restart openems' | at now",
};
@Component({
selector: SystemExecuteComponent.SELECTOR,
- templateUrl: './systemexecute.component.html',
+ templateUrl: "./systemexecute.component.html",
})
export class SystemExecuteComponent implements OnInit {
@@ -34,17 +34,17 @@ export class SystemExecuteComponent implements OnInit {
public model: any = {};
public options: FormlyFormOptions = {};
public fields: FormlyFieldConfig[] = [{
- key: 'predefined',
- type: 'radio',
- templateOptions: { options: [{ value: 'ping', label: 'Ping device in network' }] },
+ key: "predefined",
+ type: "radio",
+ templateOptions: { options: [{ value: "ping", label: "Ping device in network" }] },
}, {
- key: 'ping',
- hideExpression: (model: any, formState: any) => this.model['predefined'] !== 'ping',
+ key: "ping",
+ hideExpression: (model: any, formState: any) => this.model["predefined"] !== "ping",
fieldGroup: [{
- key: 'ip',
- type: 'input',
+ key: "ip",
+ type: "input",
templateOptions: {
- label: 'IP-Address', placeholder: "192.168.0.1", required: true, pattern: /(\d{1,3}\.){3}\d{1,3}/,
+ label: "IP-Address", placeholder: "192.168.0.1", required: true, pattern: /(\d{1,3}\.){3}\d{1,3}/,
},
validation: {
messages: {
@@ -53,11 +53,11 @@ export class SystemExecuteComponent implements OnInit {
},
}],
}, {
- key: 'predefined',
- type: 'radio',
+ key: "predefined",
+ type: "radio",
templateOptions: {
options: [
- { value: 'openems-restart', label: 'Restart OpenEMS Edge service' },
+ { value: "openems-restart", label: "Restart OpenEMS Edge service" },
],
},
}];
@@ -73,7 +73,6 @@ export class SystemExecuteComponent implements OnInit {
}
ngOnInit() {
- this.service.setCurrentComponent({ languageKey: 'Edge.Config.Index.systemExecute' }, this.route);
this.form = this.formBuilder.group({
username: new FormControl("root"),
password: new FormControl(""),
@@ -99,15 +98,15 @@ export class SystemExecuteComponent implements OnInit {
command = cmd();
}
}
- this.form.controls['command'].setValue(command);
+ this.form.controls["command"].setValue(command);
}
public submit() {
- const username = this.form.controls['username'];
- const password = this.form.controls['password'];
- const timeoutSeconds = this.form.controls['timeoutSeconds'];
- const runInBackground = this.form.controls['runInBackground'];
- const command = this.form.controls['command'];
+ const username = this.form.controls["username"];
+ const password = this.form.controls["password"];
+ const timeoutSeconds = this.form.controls["timeoutSeconds"];
+ const runInBackground = this.form.controls["runInBackground"];
+ const command = this.form.controls["command"];
this.service.getCurrentEdge().then(edge => {
this.loading = true;
diff --git a/ui/src/app/edge/settings/systemlog/systemlog.component.ts b/ui/src/app/edge/settings/systemlog/systemlog.component.ts
index b460c3c7710..8b2776a41a9 100644
--- a/ui/src/app/edge/settings/systemlog/systemlog.component.ts
+++ b/ui/src/app/edge/settings/systemlog/systemlog.component.ts
@@ -1,28 +1,27 @@
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { TranslateService } from '@ngx-translate/core';
-import { Subject } from 'rxjs';
-import { filter, take, takeUntil } from 'rxjs/operators';
-import { Filter } from 'src/app/index/filter/filter.component';
-
-import { Service, Utils, Websocket } from '../../../shared/shared';
-import { Role } from 'src/app/shared/type/role';
-import { parse } from 'date-fns';
-import { SelectCustomEvent } from '@ionic/angular';
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { SelectCustomEvent } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { parse } from "date-fns";
+import { Subject } from "rxjs";
+import { filter, take, takeUntil } from "rxjs/operators";
+import { Filter } from "src/app/index/filter/filter.component";
+import { Role } from "src/app/shared/type/role";
+import { Service, Utils, Websocket } from "../../../shared/shared";
export const LOG_LEVEL_FILTER = (translate: TranslateService): Filter => ({
placeholder: translate.instant("Edge.Config.Log.level"),
category: "level",
options: [
{
- name: 'Debug',
+ name: "Debug",
value: "DEBUG",
},
{
- name: translate.instant('General.info'),
+ name: translate.instant("General.info"),
value: "INFO",
},
{
- name: translate.instant('General.warning'),
+ name: translate.instant("General.warning"),
value: "WARN",
},
{
@@ -34,12 +33,12 @@ export const LOG_LEVEL_FILTER = (translate: TranslateService): Filter => ({
@Component({
selector: SystemLogComponent.SELECTOR,
- templateUrl: './systemlog.component.html',
+ templateUrl: "./systemlog.component.html",
})
export class SystemLogComponent implements OnInit, OnDestroy {
private static readonly SELECTOR = "systemLog";
- private static readonly DEBUG_LOG_CONTROLLER_ID = 'ctrlDebugLog0';
+ private static readonly DEBUG_LOG_CONTROLLER_ID = "ctrlDebugLog0";
public isSubscribed: boolean = false;
@@ -140,7 +139,7 @@ export class SystemLogComponent implements OnInit, OnDestroy {
}
public toggleSubscribe(event: CustomEvent) {
- if (event.detail['checked']) {
+ if (event.detail["checked"]) {
this.subscribe();
} else {
this.unsubscribe();
@@ -160,11 +159,11 @@ export class SystemLogComponent implements OnInit, OnDestroy {
this.service.currentEdge.pipe(filter(edge => !!edge), take(1))
.subscribe(edge =>
edge.updateComponentConfig(this.websocket, SystemLogComponent.DEBUG_LOG_CONTROLLER_ID, [{
- name: 'condensedOutput', value: event.detail['checked'],
+ name: "condensedOutput", value: event.detail["checked"],
}]).then(() => {
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch((reason) => {
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
}));
}
@@ -182,18 +181,16 @@ export class SystemLogComponent implements OnInit, OnDestroy {
this.filterLogs();
}
- private getColor(level: 'INFO' | 'WARN' | 'DEBUG' | 'ERROR'): string {
+ private getColor(level: "INFO" | "WARN" | "DEBUG" | "ERROR"): string {
switch (level) {
- case 'INFO':
- return 'green';
- case 'WARN':
- return 'orange';
- case 'DEBUG':
- return 'gray';
- case 'ERROR':
- return 'red';
- default:
- return 'black';
+ case "INFO":
+ return "green";
+ case "WARN":
+ return "orange";
+ case "DEBUG":
+ return "gray";
+ case "ERROR":
+ return "red";
}
}
@@ -217,7 +214,7 @@ export class SystemLogComponent implements OnInit, OnDestroy {
return this._logLines;
}
- const message = el.message.split('').filter(el => el.toLowerCase().includes(this.query!.toLowerCase())).join('');
+ const message = el.message.split("").filter(el => el.toLowerCase().includes(this.query!.toLowerCase())).join("");
if (message?.length > 0) {
el.message = message;
diff --git a/ui/src/app/index/filter/filter.component.html b/ui/src/app/index/filter/filter.component.html
index 5d4b4593d89..aa8c62bc3e6 100644
--- a/ui/src/app/index/filter/filter.component.html
+++ b/ui/src/app/index/filter/filter.component.html
@@ -15,4 +15,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/index/filter/filter.component.ts b/ui/src/app/index/filter/filter.component.ts
index c1019a9afd9..336008c0ca3 100644
--- a/ui/src/app/index/filter/filter.component.ts
+++ b/ui/src/app/index/filter/filter.component.ts
@@ -2,19 +2,19 @@
import { Component, EventEmitter, Output } from "@angular/core";
import { TranslateService } from "@ngx-translate/core";
import { TKeyValue } from "src/app/shared/service/defaulttypes";
+import { Utils } from "src/app/shared/shared";
import { environment } from "src/environments";
import { SUM_STATES } from "../shared/sumState";
-import { Utils } from "src/app/shared/shared";
@Component({
- selector: 'oe-filter',
- templateUrl: './filter.component.html',
+ selector: "oe-filter",
+ templateUrl: "./filter.component.html",
})
export class FilterComponent {
- @Output() protected setSearchParams: EventEmitter
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/formly/formly-select-field-modal.component.ts b/ui/src/app/shared/components/formly/formly-select-field-modal.component.ts
index 2ef2314fced..35bef389fd0 100644
--- a/ui/src/app/shared/components/formly/formly-select-field-modal.component.ts
+++ b/ui/src/app/shared/components/formly/formly-select-field-modal.component.ts
@@ -2,8 +2,8 @@ import { Component, Input, OnInit } from "@angular/core";
import { ModalController } from "@ionic/angular";
@Component({
- selector: 'formly-select-modal',
- templateUrl: './formly-select-field-modal.component.html',
+ selector: "formly-select-modal",
+ templateUrl: "./formly-select-field-modal.component.html",
})
export class FormlySelectFieldModalComponent implements OnInit {
diff --git a/ui/src/app/shared/components/formly/formly-select-field.extended.html b/ui/src/app/shared/components/formly/formly-select-field.extended.html
index 1409c0b07f6..1313a64eb0c 100644
--- a/ui/src/app/shared/components/formly/formly-select-field.extended.html
+++ b/ui/src/app/shared/components/formly/formly-select-field.extended.html
@@ -8,4 +8,4 @@
{{ formControl.value }}
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/formly/formly-select-field.extended.ts b/ui/src/app/shared/components/formly/formly-select-field.extended.ts
index dec0c0037e6..ffcdb6ada79 100644
--- a/ui/src/app/shared/components/formly/formly-select-field.extended.ts
+++ b/ui/src/app/shared/components/formly/formly-select-field.extended.ts
@@ -4,8 +4,8 @@ import { FieldWrapper } from "@ngx-formly/core";
import { FormlySelectFieldModalComponent } from "./formly-select-field-modal.component";
@Component({
- selector: 'formly-select-extended-wrapper',
- templateUrl: './formly-select-field.extended.html',
+ selector: "formly-select-extended-wrapper",
+ templateUrl: "./formly-select-field.extended.html",
})
export class FormlySelectFieldExtendedWrapperComponent extends FieldWrapper {
@@ -33,7 +33,7 @@ export class FormlySelectFieldExtendedWrapperComponent extends FieldWrapper {
options: this.props.options,
initialSelectedValue: this.formControl.value,
},
- cssClass: ['auto-height', 'full-width'],
+ cssClass: ["auto-height", "full-width"],
});
modal.onDidDismiss().then(event => {
if (!event.data) {
diff --git a/ui/src/app/shared/components/formly/formly-skeleton-wrapper.ts b/ui/src/app/shared/components/formly/formly-skeleton-wrapper.ts
index f0c2bb276dd..8dc332dcf29 100644
--- a/ui/src/app/shared/components/formly/formly-skeleton-wrapper.ts
+++ b/ui/src/app/shared/components/formly/formly-skeleton-wrapper.ts
@@ -1,6 +1,6 @@
-import { Component, Input } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { FormlyFieldConfig } from '@ngx-formly/core';
+import { Component, Input } from "@angular/core";
+import { FormGroup } from "@angular/forms";
+import { FormlyFieldConfig } from "@ngx-formly/core";
/** This wrapper is used to display a loading animation for a line until the async call is finished, the @input show is true, respectively.
@@ -10,7 +10,7 @@ import { FormlyFieldConfig } from '@ngx-formly/core';
* @input model the model
*/
@Component({
- selector: 'formly-skeleton-wrapper',
+ selector: "formly-skeleton-wrapper",
template: `
diff --git a/ui/src/app/shared/components/formly/input-serial-number-wrapper.html b/ui/src/app/shared/components/formly/input-serial-number-wrapper.html
index e2401c3aec9..169d30f12e8 100644
--- a/ui/src/app/shared/components/formly/input-serial-number-wrapper.html
+++ b/ui/src/app/shared/components/formly/input-serial-number-wrapper.html
@@ -29,4 +29,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/formly/input-serial-number-wrapper.ts b/ui/src/app/shared/components/formly/input-serial-number-wrapper.ts
index 80d9142a7c7..0df1760de05 100644
--- a/ui/src/app/shared/components/formly/input-serial-number-wrapper.ts
+++ b/ui/src/app/shared/components/formly/input-serial-number-wrapper.ts
@@ -1,8 +1,8 @@
-import { Component } from '@angular/core';
-import { FieldWrapper } from '@ngx-formly/core';
+import { Component } from "@angular/core";
+import { FieldWrapper } from "@ngx-formly/core";
@Component({
- selector: 'formly-input-serial-number',
- templateUrl: './input-serial-number-wrapper.html',
+ selector: "formly-input-serial-number",
+ templateUrl: "./input-serial-number-wrapper.html",
})
export class FormlyInputSerialNumberWrapperComponent extends FieldWrapper { }
diff --git a/ui/src/app/shared/components/formly/input.html b/ui/src/app/shared/components/formly/input.html
index abc8b4b0ea0..f85472cc915 100644
--- a/ui/src/app/shared/components/formly/input.html
+++ b/ui/src/app/shared/components/formly/input.html
@@ -1,6 +1,5 @@
diff --git a/ui/src/app/shared/components/formly/input.ts b/ui/src/app/shared/components/formly/input.ts
index a6e218d99d6..3e547670e94 100644
--- a/ui/src/app/shared/components/formly/input.ts
+++ b/ui/src/app/shared/components/formly/input.ts
@@ -1,8 +1,8 @@
-import { Component } from '@angular/core';
-import { FieldType } from '@ngx-formly/core';
+import { Component } from "@angular/core";
+import { FieldType } from "@ngx-formly/core";
@Component({
- selector: 'formly-input-section',
- templateUrl: './input.html',
+ selector: "formly-input-section",
+ templateUrl: "./input.html",
})
export class InputTypeComponent extends FieldType { }
diff --git a/ui/src/app/shared/components/formly/panel-wrapper.component.ts b/ui/src/app/shared/components/formly/panel-wrapper.component.ts
index 170d9465cfe..5af73ea9d87 100644
--- a/ui/src/app/shared/components/formly/panel-wrapper.component.ts
+++ b/ui/src/app/shared/components/formly/panel-wrapper.component.ts
@@ -2,7 +2,7 @@ import { Component } from "@angular/core";
import { FieldWrapper } from "@ngx-formly/core";
@Component({
- selector: 'formly-wrapper-panel',
+ selector: "formly-wrapper-panel",
template: `
diff --git a/ui/src/app/shared/components/formly/repeat.html b/ui/src/app/shared/components/formly/repeat.html
index 09aaee84302..ec9a8f1a311 100644
--- a/ui/src/app/shared/components/formly/repeat.html
+++ b/ui/src/app/shared/components/formly/repeat.html
@@ -26,4 +26,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/formly/repeat.ts b/ui/src/app/shared/components/formly/repeat.ts
index 5810421a7e3..5ec40c593a7 100644
--- a/ui/src/app/shared/components/formly/repeat.ts
+++ b/ui/src/app/shared/components/formly/repeat.ts
@@ -1,9 +1,9 @@
-import { Component } from '@angular/core';
-import { FieldArrayType } from '@ngx-formly/core';
+import { Component } from "@angular/core";
+import { FieldArrayType } from "@ngx-formly/core";
@Component({
- selector: 'formly-repeat-section',
- templateUrl: './repeat.html',
+ selector: "formly-repeat-section",
+ templateUrl: "./repeat.html",
})
export class RepeatTypeComponent extends FieldArrayType {
// TODO: add explicit constructor
diff --git a/ui/src/app/shared/components/header/header.component.html b/ui/src/app/shared/components/header/header.component.html
index 875067f79e3..b1e4714c831 100644
--- a/ui/src/app/shared/components/header/header.component.html
+++ b/ui/src/app/shared/components/header/header.component.html
@@ -68,4 +68,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/header/header.component.ts b/ui/src/app/shared/components/header/header.component.ts
index e76040f3175..0c192f21047 100644
--- a/ui/src/app/shared/components/header/header.component.ts
+++ b/ui/src/app/shared/components/header/header.component.ts
@@ -1,27 +1,27 @@
// @ts-strict-ignore
-import { AfterViewChecked, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
-import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
-import { MenuController, ModalController } from '@ionic/angular';
-import { Subject } from 'rxjs';
-import { filter, takeUntil } from 'rxjs/operators';
-import { environment } from 'src/environments';
+import { AfterViewChecked, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from "@angular/core";
+import { ActivatedRoute, NavigationEnd, Router } from "@angular/router";
+import { MenuController, ModalController } from "@ionic/angular";
+import { Subject } from "rxjs";
+import { filter, takeUntil } from "rxjs/operators";
+import { environment } from "src/environments";
-import { Edge, Service, Websocket } from '../../shared';
-import { PickDateComponent } from '../pickdate/pickdate.component';
-import { StatusSingleComponent } from '../status/single/status.component';
+import { Edge, Service, Websocket } from "../../shared";
+import { PickDateComponent } from "../pickdate/pickdate.component";
+import { StatusSingleComponent } from "../status/single/status.component";
@Component({
- selector: 'header',
- templateUrl: './header.component.html',
+ selector: "header",
+ templateUrl: "./header.component.html",
})
export class HeaderComponent implements OnInit, OnDestroy, AfterViewChecked {
@ViewChild(PickDateComponent, { static: false }) public PickDateComponent: PickDateComponent;
public environment = environment;
- public backUrl: string | boolean = '/';
+ public backUrl: string | boolean = "/";
public enableSideMenu: boolean;
- public currentPage: 'EdgeSettings' | 'Other' | 'IndexLive' | 'IndexHistory' = 'Other';
+ public currentPage: "EdgeSettings" | "Other" | "IndexLive" | "IndexHistory" = "Other";
public isSystemLogEnabled: boolean = false;
private ngUnsubscribe: Subject = new Subject();
@@ -60,10 +60,10 @@ export class HeaderComponent implements OnInit, OnDestroy, AfterViewChecked {
}
updateEnableSideMenu(url: string) {
- const urlArray = url.split('/');
+ const urlArray = url.split("/");
const file = urlArray.pop();
- if (file == 'user' || file == 'settings' || file == 'changelog' || file == 'login' || urlArray.length > 3) {
+ if (file == "user" || file == "settings" || file == "changelog" || file == "login" || urlArray.length > 3) {
// disable side-menu; show back-button instead
this.enableSideMenu = false;
} else {
@@ -75,7 +75,7 @@ export class HeaderComponent implements OnInit, OnDestroy, AfterViewChecked {
updateBackUrl(url: string) {
// disable backUrl & Segment Navigation on initial 'login' page
- if (url === '/login' || url === '/overview') {
+ if (url === "/login" || url === "/overview") {
this.backUrl = false;
return;
}
@@ -83,77 +83,77 @@ export class HeaderComponent implements OnInit, OnDestroy, AfterViewChecked {
// set backUrl for user when an Edge had been selected before
const currentEdge: Edge = this.service.currentEdge.value;
- if (url === '/user' && currentEdge != null) {
- this.backUrl = '/device/' + currentEdge.id + "/live";
+ if (url === "/user" && currentEdge != null) {
+ this.backUrl = "/device/" + currentEdge.id + "/live";
return;
}
// set backUrl for user if no edge had been selected
- if (url === '/user') {
- this.backUrl = '/overview';
+ if (url === "/user") {
+ this.backUrl = "/overview";
return;
}
- if (url === '/changelog' && currentEdge != null) {
+ if (url === "/changelog" && currentEdge != null) {
// TODO this does not work if Changelog was opened from /user
- this.backUrl = '/device/' + currentEdge.id + "/settings/profile";
+ this.backUrl = "/device/" + currentEdge.id + "/settings/profile";
return;
}
- const urlArray = url.split('/');
- let backUrl: string | boolean = '/';
+ const urlArray = url.split("/");
+ let backUrl: string | boolean = "/";
const file = urlArray.pop();
// disable backUrl for History & EdgeIndex Component ++ Enable Segment Navigation
- if ((file == 'history' || file == 'live') && urlArray.length == 3) {
+ if ((file == "history" || file == "live") && urlArray.length == 3) {
this.backUrl = false;
return;
}
// disable backUrl to first 'index' page from Edge index if there is only one Edge in the system
- if (file === 'live' && urlArray.length == 3 && this.environment.backend === "OpenEMS Edge") {
+ if (file === "live" && urlArray.length == 3 && this.environment.backend === "OpenEMS Edge") {
this.backUrl = false;
return;
}
// remove one part of the url for 'index'
- if (file === 'live') {
+ if (file === "live") {
urlArray.pop();
}
// fix url for App "settings/app/install" and "settings/app/update"
- if (urlArray.slice(-3, -1).join('/') === "settings/app") {
+ if (urlArray.slice(-3, -1).join("/") === "settings/app") {
urlArray.pop();
}
// re-join the url
- backUrl = urlArray.join('/') || '/';
+ backUrl = urlArray.join("/") || "/";
// correct path for '/device/[edgeId]/index'
- if (backUrl === '/device') {
- backUrl = '/';
+ if (backUrl === "/device") {
+ backUrl = "/";
}
this.backUrl = backUrl;
}
updateCurrentPage(url: string) {
- const urlArray = url.split('/');
+ const urlArray = url.split("/");
let file = urlArray.pop();
if (urlArray.length >= 4) {
file = urlArray[3];
}
// Enable Segment Navigation for Edge-Index-Page
- if ((file == 'history' || file == 'live') && urlArray.length == 3) {
- if (file == 'history') {
- this.currentPage = 'IndexHistory';
+ if ((file == "history" || file == "live") && urlArray.length == 3) {
+ if (file == "history") {
+ this.currentPage = "IndexHistory";
} else {
- this.currentPage = 'IndexLive';
+ this.currentPage = "IndexLive";
}
- } else if (file == 'settings' && urlArray.length > 1) {
- this.currentPage = 'EdgeSettings';
+ } else if (file == "settings" && urlArray.length > 1) {
+ this.currentPage = "EdgeSettings";
}
else {
- this.currentPage = 'Other';
+ this.currentPage = "Other";
}
}
@@ -165,7 +165,7 @@ export class HeaderComponent implements OnInit, OnDestroy, AfterViewChecked {
if (event.detail.value == "IndexHistory") {
/** Creates bug of being infinite forwarded betweeen live and history, if not relatively routed */
- this.router.navigate(['../history'], { relativeTo: this.route });
+ this.router.navigate(["../history"], { relativeTo: this.route });
this.cdRef.detectChanges();
}
}
diff --git a/ui/src/app/shared/components/history-data-error/history-data-error.component.ts b/ui/src/app/shared/components/history-data-error/history-data-error.component.ts
index 74df053ac50..de600575ce7 100644
--- a/ui/src/app/shared/components/history-data-error/history-data-error.component.ts
+++ b/ui/src/app/shared/components/history-data-error/history-data-error.component.ts
@@ -3,7 +3,7 @@ import { Component, Input } from "@angular/core";
import { JsonrpcResponseError } from "src/app/shared/jsonrpc/base";
@Component({
- selector: 'oe-history-data-error',
+ selector: "oe-history-data-error",
template: `
@@ -25,7 +25,7 @@ export class HistoryDataErrorComponent {
}
}
-type ErrorType = 'TEMPORARY' | 'TOO_LONG' | null;
+type ErrorType = "TEMPORARY" | "TOO_LONG" | null;
function toType(response: JsonrpcResponseError | null): ErrorType {
const message = response?.error?.message;
@@ -34,8 +34,8 @@ function toType(response: JsonrpcResponseError | null): ErrorType {
}
switch (message) {
case "Die Anzeige und der Export von Daten über einen längeren Zeitraum ist derzeit leider nicht möglich":
- return 'TOO_LONG';
+ return "TOO_LONG";
default:
- return 'TEMPORARY';
+ return "TEMPORARY";
}
}
diff --git a/ui/src/app/shared/components/modal/abstract-modal-line.ts b/ui/src/app/shared/components/modal/abstract-modal-line.ts
index 625dac513e5..f16f75a48f8 100644
--- a/ui/src/app/shared/components/modal/abstract-modal-line.ts
+++ b/ui/src/app/shared/components/modal/abstract-modal-line.ts
@@ -7,7 +7,7 @@ import { TranslateService } from "@ngx-translate/core";
import { Subject } from "rxjs";
import { takeUntil } from "rxjs/operators";
import { ChannelAddress, CurrentData, Edge, EdgeConfig, Service, Utils, Websocket } from "src/app/shared/shared";
-import { v4 as uuidv4 } from 'uuid';
+import { v4 as uuidv4 } from "uuid";
import { Role } from "../../type/role";
import { Converter } from "../shared/converter";
@@ -83,7 +83,7 @@ export abstract class AbstractModalLine implements OnInit, OnDestroy, OnChanges
/** Name for parameter, displayed on the left side*/
@Input() set name(value: string | { channel: ChannelAddress, converter: (value: any) => string }) {
- if (typeof value === 'object') {
+ if (typeof value === "object") {
this.subscribe(value.channel);
this._name = value.converter;
} else {
@@ -104,7 +104,7 @@ export abstract class AbstractModalLine implements OnInit, OnDestroy, OnChanges
}
ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
// store important variables publically
this.edge = edge;
@@ -113,7 +113,7 @@ export abstract class AbstractModalLine implements OnInit, OnDestroy, OnChanges
// get the channel addresses that should be subscribed
const channelAddresses: ChannelAddress[] = [...this.getChannelAddresses()];
- if (typeof this.name == 'object') {
+ if (typeof this.name == "object") {
channelAddresses.push(this.name.channel);
}
@@ -159,7 +159,7 @@ export abstract class AbstractModalLine implements OnInit, OnDestroy, OnChanges
this.show = this.filter(value);
}
- if (typeof this._name == 'function') {
+ if (typeof this._name == "function") {
this.displayName = this._name(value);
} else {
@@ -172,7 +172,7 @@ export abstract class AbstractModalLine implements OnInit, OnDestroy, OnChanges
/** Subscribe on HTML passed Channels */
protected subscribe(channelAddress: ChannelAddress) {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.edge = edge;
// Check if user is allowed to see these channel-values
diff --git a/ui/src/app/shared/components/modal/abstractModal.ts b/ui/src/app/shared/components/modal/abstractModal.ts
index 5c5ca8f55aa..225cf314e76 100644
--- a/ui/src/app/shared/components/modal/abstractModal.ts
+++ b/ui/src/app/shared/components/modal/abstractModal.ts
@@ -7,11 +7,11 @@ import { TranslateService } from "@ngx-translate/core";
import { Subject, Subscription } from "rxjs";
import { takeUntil } from "rxjs/operators";
import { ChannelAddress, CurrentData, Edge, EdgeConfig, Service, Utils, Websocket } from "src/app/shared/shared";
-import { v4 as uuidv4 } from 'uuid';
+import { v4 as uuidv4 } from "uuid";
import { Role } from "../../type/role";
-import { TextIndentation } from "./modal-line/modal-line";
import { Converter } from "../shared/converter";
+import { TextIndentation } from "./modal-line/modal-line";
@Directive()
export abstract class AbstractModal implements OnInit, OnDestroy {
@@ -64,7 +64,7 @@ export abstract class AbstractModal implements OnInit, OnDestroy {
}
public ngOnInit() {
- this.service.setCurrentComponent('', this.route).then(edge => {
+ this.service.getCurrentEdge().then(edge => {
this.service.getConfig().then(config => {
// store important variables publically
diff --git a/ui/src/app/shared/components/modal/help-button/help-button.html b/ui/src/app/shared/components/modal/help-button/help-button.html
index b0e195c58ba..203148b44fe 100644
--- a/ui/src/app/shared/components/modal/help-button/help-button.html
+++ b/ui/src/app/shared/components/modal/help-button/help-button.html
@@ -3,4 +3,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/modal/help-button/help-button.ts b/ui/src/app/shared/components/modal/help-button/help-button.ts
index 38d4a5025e6..86faa04d87f 100644
--- a/ui/src/app/shared/components/modal/help-button/help-button.ts
+++ b/ui/src/app/shared/components/modal/help-button/help-button.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
import { Component, Input } from "@angular/core";
import { Service } from "src/app/shared/shared";
-import { environment } from 'src/environments';
+import { environment } from "src/environments";
@Component({
- selector: 'oe-help-button',
- templateUrl: './help-button.html',
+ selector: "oe-help-button",
+ templateUrl: "./help-button.html",
})
export class HelpButtonComponent {
diff --git a/ui/src/app/shared/components/modal/modal-button/modal-button.html b/ui/src/app/shared/components/modal/modal-button/modal-button.html
index cfe065fc432..77f3b1a88b4 100644
--- a/ui/src/app/shared/components/modal/modal-button/modal-button.html
+++ b/ui/src/app/shared/components/modal/modal-button/modal-button.html
@@ -9,4 +9,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/modal/modal-button/modal-button.ts b/ui/src/app/shared/components/modal/modal-button/modal-button.ts
index ffa19945c66..9b72038989c 100644
--- a/ui/src/app/shared/components/modal/modal-button/modal-button.ts
+++ b/ui/src/app/shared/components/modal/modal-button/modal-button.ts
@@ -3,8 +3,8 @@ import { Icon } from "src/app/shared/type/widget";
import { AbstractModalLine } from "../abstract-modal-line";
@Component({
- selector: 'oe-modal-buttons',
- templateUrl: './modal-button.html',
+ selector: "oe-modal-buttons",
+ templateUrl: "./modal-button.html",
})
export class ModalButtonsComponent extends AbstractModalLine {
diff --git a/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.html b/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.html
index 6f66261a711..208186bbb6a 100644
--- a/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.html
+++ b/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.html
@@ -18,4 +18,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.ts b/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.ts
index 985d9c6e693..d19b17030fe 100644
--- a/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.ts
+++ b/ui/src/app/shared/components/modal/modal-info-line/modal-info-line.ts
@@ -2,8 +2,8 @@ import { Component, Input } from "@angular/core";
import { Icon } from "src/app/shared/type/widget";
@Component({
- selector: 'oe-modal-info-line',
- templateUrl: './modal-info-line.html',
+ selector: "oe-modal-info-line",
+ templateUrl: "./modal-info-line.html",
})
export class ModalInfoLineComponent {
diff --git a/ui/src/app/shared/components/modal/modal-line/modal-line-item/modal-line-item.html b/ui/src/app/shared/components/modal/modal-line/modal-line-item/modal-line-item.html
index 1d44987f67e..85028091b7a 100644
--- a/ui/src/app/shared/components/modal/modal-line/modal-line-item/modal-line-item.html
+++ b/ui/src/app/shared/components/modal/modal-line/modal-line-item/modal-line-item.html
@@ -2,4 +2,4 @@
*ngIf="isAllowedToBeSeen && show && displayValue">
{{ displayValue }}
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/modal/modal-line/modal-line.html b/ui/src/app/shared/components/modal/modal-line/modal-line.html
index 2f795565950..c75997960ec 100644
--- a/ui/src/app/shared/components/modal/modal-line/modal-line.html
+++ b/ui/src/app/shared/components/modal/modal-line/modal-line.html
@@ -30,7 +30,7 @@
-
+
diff --git a/ui/src/app/shared/components/modal/modal-line/modal-line.ts b/ui/src/app/shared/components/modal/modal-line/modal-line.ts
index 552cf0e0a10..76e9e187946 100644
--- a/ui/src/app/shared/components/modal/modal-line/modal-line.ts
+++ b/ui/src/app/shared/components/modal/modal-line/modal-line.ts
@@ -3,8 +3,8 @@ import { AbstractModalLine } from "../abstract-modal-line";
import { ButtonLabel } from "../modal-button/modal-button";
@Component({
- selector: 'oe-modal-line',
- templateUrl: './modal-line.html',
+ selector: "oe-modal-line",
+ templateUrl: "./modal-line.html",
})
export class ModalLineComponent extends AbstractModalLine {
@@ -17,19 +17,19 @@ export class ModalLineComponent extends AbstractModalLine {
@Input() protected button: ButtonLabel | null = null;
/** ControlName for Toggle Button */
@Input({ required: true }) protected control!:
- { type: 'TOGGLE' } |
- { type: 'INPUT', properties?: { unit: 'W' } } |
+ { type: "TOGGLE" } |
+ { type: "INPUT", properties?: { unit: "W" } } |
/* the available select options*/
- { type: 'SELECT', options: { value: string, name: string }[] } |
+ { type: "SELECT", options: { value: string, name: string }[] } |
/* the properties for range slider*/
- { type: 'RANGE', properties: { min: number, max: number, unit: 'H', step?: number } };
+ { type: "RANGE", properties: { min: number, max: number, unit: "H", step?: number } };
/** Fixed indentation of the modal-line */
@Input() protected textIndent: TextIndentation = TextIndentation.NONE;
}
export enum TextIndentation {
- NONE = '0%',
- SINGLE = '5%',
- DOUBLE = '10%',
+ NONE = "0%",
+ SINGLE = "5%",
+ DOUBLE = "10%",
}
diff --git a/ui/src/app/shared/components/modal/modal-phases/modal-phases.html b/ui/src/app/shared/components/modal/modal-phases/modal-phases.html
index d368f4813cf..49679489ecf 100644
--- a/ui/src/app/shared/components/modal/modal-phases/modal-phases.html
+++ b/ui/src/app/shared/components/modal/modal-phases/modal-phases.html
@@ -10,4 +10,4 @@
[converter]="CONVERT_TO_POSITIVE_WATT">
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/modal/modal-phases/modal-phases.ts b/ui/src/app/shared/components/modal/modal-phases/modal-phases.ts
index 805b9b4ec0e..8dfdd170ea4 100644
--- a/ui/src/app/shared/components/modal/modal-phases/modal-phases.ts
+++ b/ui/src/app/shared/components/modal/modal-phases/modal-phases.ts
@@ -26,7 +26,7 @@ export class ModalPhasesComponent extends AbstractModalLine {
for (const phase of this.phases) {
channelAddresses.push(
- ChannelAddress.fromString(this.component.id + '/ActivePower' + phase.key),
+ ChannelAddress.fromString(this.component.id + "/ActivePower" + phase.key),
);
}
return channelAddresses;
@@ -34,8 +34,8 @@ export class ModalPhasesComponent extends AbstractModalLine {
protected override onCurrentData(currentData: CurrentData): void {
for (const phase of this.phases) {
- const powerPerPhase = currentData.allComponents[this.component.id + '/ActivePower' + phase.key];
- phase.name = this.translate.instant('General.phase') + " " + phase.key + this.setTranslatedName(powerPerPhase);
+ const powerPerPhase = currentData.allComponents[this.component.id + "/ActivePower" + phase.key];
+ phase.name = this.translate.instant("General.phase") + " " + phase.key + this.setTranslatedName(powerPerPhase);
}
}
@@ -48,6 +48,6 @@ export class ModalPhasesComponent extends AbstractModalLine {
protected CONVERT_TO_POSITIVE_WATT = (value: number | null): string => {
value = Utils.absSafely(value) ?? 0;
- return formatNumber(value, 'de', '1.0-0') + ' W';
+ return formatNumber(value, "de", "1.0-0") + " W";
};
}
diff --git a/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.html b/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.html
index 311cd8e2246..b8a6d8478f0 100644
--- a/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.html
+++ b/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.html
@@ -12,4 +12,4 @@
{{ displayValue }}
|
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.ts b/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.ts
index 16edba720ae..992dd9261de 100644
--- a/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.ts
+++ b/ui/src/app/shared/components/modal/modal-value-line/modal-value-line.ts
@@ -5,8 +5,8 @@ import { ChannelAddress, CurrentData } from "src/app/shared/shared";
import { AbstractModalLine } from "../abstract-modal-line";
@Component({
- selector: 'oe-modal-value-line',
- templateUrl: './modal-value-line.html',
+ selector: "oe-modal-value-line",
+ templateUrl: "./modal-value-line.html",
})
export class ModalValueLineComponent extends AbstractModalLine {
@@ -34,7 +34,7 @@ export class ModalValueLineComponent extends AbstractModalLine {
}
export enum TextIndentation {
- NONE = '0%',
- SINGLE = '5%',
- DOUBLE = '10%',
+ NONE = "0%",
+ SINGLE = "5%",
+ DOUBLE = "10%",
}
diff --git a/ui/src/app/shared/components/modal/modal.module.ts b/ui/src/app/shared/components/modal/modal.module.ts
index cebaef4736e..57ecf5e89e0 100644
--- a/ui/src/app/shared/components/modal/modal.module.ts
+++ b/ui/src/app/shared/components/modal/modal.module.ts
@@ -1,20 +1,20 @@
-import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
-import { ReactiveFormsModule } from '@angular/forms';
-import { BrowserModule } from '@angular/platform-browser';
-import { RouterModule } from '@angular/router';
-import { IonicModule } from '@ionic/angular';
-import { TranslateModule } from '@ngx-translate/core';
+import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
+import { ReactiveFormsModule } from "@angular/forms";
+import { BrowserModule } from "@angular/platform-browser";
+import { RouterModule } from "@angular/router";
+import { IonicModule } from "@ionic/angular";
+import { TranslateModule } from "@ngx-translate/core";
-import { PipeModule } from '../../pipe/pipe';
-import { HelpButtonComponent } from './help-button/help-button';
-import { ModalComponent } from './modal';
-import { ModalButtonsComponent } from './modal-button/modal-button';
-import { ModalInfoLineComponent } from './modal-info-line/modal-info-line';
-import { ModalLineComponent } from './modal-line/modal-line';
-import { ModalLineItemComponent } from './modal-line/modal-line-item/modal-line-item';
-import { ModalPhasesComponent } from './modal-phases/modal-phases';
-import { ModalValueLineComponent } from './modal-value-line/modal-value-line';
-import { ModalHorizontalLineComponent } from './model-horizontal-line/modal-horizontal-line';
+import { PipeModule } from "../../pipe/pipe";
+import { HelpButtonComponent } from "./help-button/help-button";
+import { ModalComponent } from "./modal";
+import { ModalButtonsComponent } from "./modal-button/modal-button";
+import { ModalInfoLineComponent } from "./modal-info-line/modal-info-line";
+import { ModalLineComponent } from "./modal-line/modal-line";
+import { ModalLineItemComponent } from "./modal-line/modal-line-item/modal-line-item";
+import { ModalPhasesComponent } from "./modal-phases/modal-phases";
+import { ModalValueLineComponent } from "./modal-value-line/modal-value-line";
+import { ModalHorizontalLineComponent } from "./model-horizontal-line/modal-horizontal-line";
@NgModule({
imports: [
diff --git a/ui/src/app/shared/components/modal/modal.ts b/ui/src/app/shared/components/modal/modal.ts
index d2365497540..601283c75df 100644
--- a/ui/src/app/shared/components/modal/modal.ts
+++ b/ui/src/app/shared/components/modal/modal.ts
@@ -14,8 +14,8 @@ export enum Status {
}
@Component({
- selector: 'oe-modal',
- templateUrl: './modal.html',
+ selector: "oe-modal",
+ templateUrl: "./modal.html",
styles: [`
:host {
height: 100%;
@@ -53,7 +53,7 @@ export class ModalComponent {
// Changes applied together
public applyChanges() {
const updateComponentArray: { name: string, value: any }[] = [];
- this.service.startSpinner('spinner');
+ this.service.startSpinner("spinner");
for (const key in this.formGroup.controls) {
const control = this.formGroup.controls[key];
this.formGroup.controls[key];
@@ -72,10 +72,10 @@ export class ModalComponent {
if (this.edge) {
this.edge.updateComponentConfig(this.websocket, this.component.id, updateComponentArray)
.then(() => {
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch(reason => {
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
- }).finally(() => this.service.stopSpinner('spinner'));
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
+ }).finally(() => this.service.stopSpinner("spinner"));
}
this.formGroup.markAsPristine();
}
diff --git a/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.html b/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.html
index 2af26b6ecc4..2a2f2922aaf 100644
--- a/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.html
+++ b/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.html
@@ -11,4 +11,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.ts b/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.ts
index b6971de84de..98664ae0144 100644
--- a/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.ts
+++ b/ui/src/app/shared/components/modal/model-horizontal-line/modal-horizontal-line.ts
@@ -4,8 +4,8 @@ import { Component, Input } from "@angular/core";
* Shows a Horizontal Line for every but the last component or a simple Line.
*/
@Component({
- selector: 'oe-modal-horizontal-line',
- templateUrl: './modal-horizontal-line.html',
+ selector: "oe-modal-horizontal-line",
+ templateUrl: "./modal-horizontal-line.html",
})
export class ModalHorizontalLineComponent {
diff --git a/ui/src/app/shared/components/percentagebar/percentagebar.component.html b/ui/src/app/shared/components/percentagebar/percentagebar.component.html
index 1c7ce71728c..c06ff0ba341 100644
--- a/ui/src/app/shared/components/percentagebar/percentagebar.component.html
+++ b/ui/src/app/shared/components/percentagebar/percentagebar.component.html
@@ -4,4 +4,4 @@
{{ value |
unitvalue:'%' }}
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/percentagebar/percentagebar.component.ts b/ui/src/app/shared/components/percentagebar/percentagebar.component.ts
index 221c1a837ad..0f636a02eba 100644
--- a/ui/src/app/shared/components/percentagebar/percentagebar.component.ts
+++ b/ui/src/app/shared/components/percentagebar/percentagebar.component.ts
@@ -1,8 +1,8 @@
-import { Component, Input } from '@angular/core';
+import { Component, Input } from "@angular/core";
@Component({
- selector: 'percentagebar',
- templateUrl: './percentagebar.component.html',
+ selector: "percentagebar",
+ templateUrl: "./percentagebar.component.html",
})
export class PercentageBarComponent {
diff --git a/ui/src/app/shared/components/pickdate/pickdate.component.html b/ui/src/app/shared/components/pickdate/pickdate.component.html
index ea2c96f7009..a3987add648 100644
--- a/ui/src/app/shared/components/pickdate/pickdate.component.html
+++ b/ui/src/app/shared/components/pickdate/pickdate.component.html
@@ -8,4 +8,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/components/pickdate/pickdate.component.spec.ts b/ui/src/app/shared/components/pickdate/pickdate.component.spec.ts
index 4e1201fd647..b2f9e4dec6f 100644
--- a/ui/src/app/shared/components/pickdate/pickdate.component.spec.ts
+++ b/ui/src/app/shared/components/pickdate/pickdate.component.spec.ts
@@ -12,38 +12,38 @@ export function expectNextPeriod(testContext: TestContext, expectToBe: boolean):
expect(PickDateComponent.isNextPeriodAllowed(testContext.service)).toBe(expectToBe);
}
-describe('Pickdate', () => {
+describe("Pickdate", () => {
let TEST_CONTEXT: TestContext;
beforeEach(async () =>
TEST_CONTEXT = await sharedSetup(),
);
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Day-View: firstSetupProtocol = today', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Day-View: firstSetupProtocol = today", () => {
const firstSetupProtocol = new Date();
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, false);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Day-View: firstSetupProtocol = yesterday', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Day-View: firstSetupProtocol = yesterday", () => {
const firstSetupProtocol = startOfDay(subDays(new Date(), 1));
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, true);
expectNextPeriod(TEST_CONTEXT, false);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = current week', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = current week", () => {
const firstSetupProtocol = new Date();
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, false);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = Start of previous week, current period = current week', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = Start of previous week, current period = current week", () => {
const firstSetupProtocol = startOfWeek(subWeeks(new Date(), 1), { weekStartsOn: 1 });
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, true);
expectNextPeriod(TEST_CONTEXT, false);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = Today, current period = previous week', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = Today, current period = previous week", () => {
const firstSetupProtocol = new Date();
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, false);
@@ -52,14 +52,14 @@ describe('Pickdate', () => {
const previousWeekPeriod = new DefaultTypes.HistoryPeriod(startOfWeek(subWeeks(new Date(), 1), { weekStartsOn: 1 }), endOfWeek(subWeeks(new Date(), 1), { weekStartsOn: 1 }));
const currentWeekPeriod = new DefaultTypes.HistoryPeriod(startOfWeek(new Date(), { weekStartsOn: 1 }), endOfWeek(new Date(), { weekStartsOn: 1 }));
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = previous week, current period = previous week', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = previous week, current period = previous week", () => {
TEST_CONTEXT.service.historyPeriod.next(previousWeekPeriod);
const firstSetupProtocol = startOfWeek(subWeeks(new Date(), 1), { weekStartsOn: 1 });
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, true);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = 2 weeks ago, current period = previous week', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = 2 weeks ago, current period = previous week", () => {
TEST_CONTEXT.service.historyPeriod.next(previousWeekPeriod);
const firstSetupProtocol = startOfWeek(subWeeks(new Date(), 2), { weekStartsOn: 1 });
@@ -67,7 +67,7 @@ describe('Pickdate', () => {
expectNextPeriod(TEST_CONTEXT, true);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = 2 weeks ago, current period = current week', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Week-View: firstSetupProtocol = 2 weeks ago, current period = current week", () => {
TEST_CONTEXT.service.historyPeriod.next(currentWeekPeriod);
const firstSetupProtocol = startOfWeek(subWeeks(new Date(), 2), { weekStartsOn: 1 });
@@ -78,20 +78,20 @@ describe('Pickdate', () => {
const previousMonthPeriod = new DefaultTypes.HistoryPeriod(startOfMonth(subMonths(new Date(), 1)), endOfMonth(subMonths(new Date(), 1)));
const currentMonthPeriod = new DefaultTypes.HistoryPeriod(startOfMonth(new Date()), endOfMonth(new Date()));
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Month-View: firstSetupProtocol = today, current period = current month', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Month-View: firstSetupProtocol = today, current period = current month", () => {
const firstSetupProtocol = new Date();
TEST_CONTEXT.service.historyPeriod.next(currentMonthPeriod);
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, false);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Month-View: firstSetupProtocol = start of current month, current period = previous month', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Month-View: firstSetupProtocol = start of current month, current period = previous month", () => {
TEST_CONTEXT.service.historyPeriod.next(previousMonthPeriod);
const firstSetupProtocol = startOfMonth(subMonths(new Date(), 1));
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, true);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Month-View: firstSetupProtocol = 2 months ago, current period = previous month', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Month-View: firstSetupProtocol = 2 months ago, current period = previous month", () => {
TEST_CONTEXT.service.historyPeriod.next(previousMonthPeriod);
const firstSetupProtocol = startOfMonth(subMonths(new Date(), 2));
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, true);
@@ -101,21 +101,21 @@ describe('Pickdate', () => {
const previousYearPeriod = new DefaultTypes.HistoryPeriod(startOfYear(subYears(new Date(), 1)), endOfYear(subYears(new Date(), 1)));
const currentYearPeriod = new DefaultTypes.HistoryPeriod(startOfYear(new Date()), endOfYear(new Date()));
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = today, current period = current year', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = today, current period = current year", () => {
const firstSetupProtocol = new Date();
TEST_CONTEXT.service.historyPeriod.next(currentYearPeriod);
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, false);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = previous year, current period = previous year', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = previous year, current period = previous year", () => {
TEST_CONTEXT.service.historyPeriod.next(previousYearPeriod);
const firstSetupProtocol = startOfYear(subYears(new Date(), 1));
expectPreviousPeriod(TEST_CONTEXT, firstSetupProtocol, false);
expectNextPeriod(TEST_CONTEXT, true);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = 2 years ago, current period = previous year', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = 2 years ago, current period = previous year", () => {
TEST_CONTEXT.service.historyPeriod.next(previousYearPeriod);
const firstSetupProtocol = startOfYear(subYears(new Date(), 2));
@@ -123,7 +123,7 @@ describe('Pickdate', () => {
expectNextPeriod(TEST_CONTEXT, true);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = 2 years ago, current period = this year', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Year-View: firstSetupProtocol = 2 years ago, current period = this year", () => {
TEST_CONTEXT.service.historyPeriod.next(currentYearPeriod);
const firstSetupProtocol = startOfYear(subYears(new Date(), 2));
@@ -131,7 +131,7 @@ describe('Pickdate', () => {
expectNextPeriod(TEST_CONTEXT, false);
});
- it('#isPreviousPeriodAllowed && #isNextPeriodAllowed - Total-View', () => {
+ it("#isPreviousPeriodAllowed && #isNextPeriodAllowed - Total-View", () => {
const firstSetupProtocol = startOfYear(subYears(new Date(), 2));
TEST_CONTEXT.service.historyPeriod.next(new DefaultTypes.HistoryPeriod(firstSetupProtocol, new Date()));
TEST_CONTEXT.service.periodString = DefaultTypes.PeriodString.TOTAL;
diff --git a/ui/src/app/shared/components/pickdate/pickdate.component.ts b/ui/src/app/shared/components/pickdate/pickdate.component.ts
index 885544f107a..9d2e83fd813 100644
--- a/ui/src/app/shared/components/pickdate/pickdate.component.ts
+++ b/ui/src/app/shared/components/pickdate/pickdate.component.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { PopoverController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { addMonths, addYears, differenceInDays, differenceInMilliseconds, endOfDay, endOfMonth, endOfYear, isAfter, isBefore, startOfDay, startOfMonth, startOfWeek, startOfYear, subMonths, subYears } from 'date-fns';
-import { addDays, addWeeks, endOfWeek, isFuture, subDays, subWeeks } from 'date-fns/esm';
+import { Component, Input, OnDestroy, OnInit } from "@angular/core";
+import { PopoverController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { addMonths, addYears, differenceInDays, differenceInMilliseconds, endOfDay, endOfMonth, endOfYear, isAfter, isBefore, startOfDay, startOfMonth, startOfWeek, startOfYear, subMonths, subYears } from "date-fns";
+import { addDays, addWeeks, endOfWeek, isFuture, subDays, subWeeks } from "date-fns/esm";
-import { DefaultTypes } from '../../service/defaulttypes';
-import { Edge, Service } from '../../shared';
-import { DateUtils } from '../../utils/date/dateutils';
-import { PickDatePopoverComponent } from './popover/popover.component';
+import { DefaultTypes } from "../../service/defaulttypes";
+import { Edge, Service } from "../../shared";
+import { DateUtils } from "../../utils/date/dateutils";
+import { PickDatePopoverComponent } from "./popover/popover.component";
@Component({
- selector: 'pickdate',
- templateUrl: './pickdate.component.html',
+ selector: "pickdate",
+ templateUrl: "./pickdate.component.html",
})
export class PickDateComponent implements OnInit, OnDestroy {
@@ -266,7 +266,7 @@ export class PickDateComponent implements OnInit, OnDestroy {
}
case DefaultTypes.PeriodString.TOTAL: {
- this.setDateRange(new DefaultTypes.HistoryPeriod(this.edge?.firstSetupProtocol ?? DateUtils.stringToDate('03.11.2022 16:04:37'), endOfYear(addYears(this.service.historyPeriod.value.to, 1))));
+ this.setDateRange(new DefaultTypes.HistoryPeriod(this.edge?.firstSetupProtocol ?? DateUtils.stringToDate("03.11.2022 16:04:37"), endOfYear(addYears(this.service.historyPeriod.value.to, 1))));
this.disableArrow = true;
break;
}
@@ -329,6 +329,9 @@ export class PickDateComponent implements OnInit, OnDestroy {
this.setDateRange(new DefaultTypes.HistoryPeriod(subDays(this.service.historyPeriod.value.from, dateDistance), subDays(this.service.historyPeriod.value.to, dateDistance)));
break;
}
+ default:
+ break;
+
}
}
@@ -337,7 +340,7 @@ export class PickDateComponent implements OnInit, OnDestroy {
component: PickDatePopoverComponent,
event: ev,
translucent: false,
- cssClass: 'pickdate-popover',
+ cssClass: "pickdate-popover",
componentProps: {
setDateRange: this.setDateRange,
edge: this.edge,
@@ -399,7 +402,7 @@ export class PickDateComponent implements OnInit, OnDestroy {
* calculates the milliseconds until next period (Day|Week) will occour
* is used to change date period
*/
- private millisecondsUntilnextPeriod(): number {
+ private millisecondsUntilnextPeriod(): number | null {
// + 1000 to reach the next day
switch (this.service.periodString) {
case DefaultTypes.PeriodString.DAY: {
@@ -422,6 +425,8 @@ export class PickDateComponent implements OnInit, OnDestroy {
const endOfYearTime = endOfYear(currentDayTime);
return differenceInMilliseconds(endOfYearTime, currentDayTime) + 1000;
}
+ default:
+ return null;
}
}
diff --git a/ui/src/app/shared/components/pickdate/pickdate.module.ts b/ui/src/app/shared/components/pickdate/pickdate.module.ts
index 4cf6632c20b..a094850a04c 100644
--- a/ui/src/app/shared/components/pickdate/pickdate.module.ts
+++ b/ui/src/app/shared/components/pickdate/pickdate.module.ts
@@ -1,12 +1,11 @@
-import { NgModule } from '@angular/core';
-import { ReactiveFormsModule } from '@angular/forms';
-import { BrowserModule } from '@angular/platform-browser';
-import { IonicModule } from '@ionic/angular';
-import { TranslateModule } from '@ngx-translate/core';
-
-import { PickDateComponent } from './pickdate.component';
-import { PickDatePopoverComponent } from './popover/popover.component';
-import { AngularMyDatePickerModule } from '@nodro7/angular-mydatepicker';
+import { NgModule } from "@angular/core";
+import { ReactiveFormsModule } from "@angular/forms";
+import { BrowserModule } from "@angular/platform-browser";
+import { IonicModule } from "@ionic/angular";
+import { TranslateModule } from "@ngx-translate/core";
+import { AngularMyDatePickerModule } from "@nodro7/angular-mydatepicker";
+import { PickDateComponent } from "./pickdate.component";
+import { PickDatePopoverComponent } from "./popover/popover.component";
@NgModule({
imports: [
@@ -23,6 +22,5 @@ import { AngularMyDatePickerModule } from '@nodro7/angular-mydatepicker';
exports: [
PickDateComponent,
],
-
})
export class PickdateModule { }
diff --git a/ui/src/app/shared/components/pickdate/popover/popover.component.ts b/ui/src/app/shared/components/pickdate/popover/popover.component.ts
index e13cf8bc139..a4586947d2f 100644
--- a/ui/src/app/shared/components/pickdate/popover/popover.component.ts
+++ b/ui/src/app/shared/components/pickdate/popover/popover.component.ts
@@ -1,18 +1,18 @@
// @ts-strict-ignore
-import { Component, Input, OnInit } from '@angular/core';
-import { PopoverController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { CalAnimation, IAngularMyDpOptions, IMyDate, IMyDateRangeModel } from '@nodro7/angular-mydatepicker';
-import { endOfMonth, startOfMonth } from 'date-fns';
-import { addDays, endOfWeek, endOfYear, getDate, getMonth, getYear, startOfWeek, startOfYear } from 'date-fns/esm';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-import { EdgePermission, Service, Utils } from 'src/app/shared/shared';
+import { Component, Input, OnInit } from "@angular/core";
+import { PopoverController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { CalAnimation, IAngularMyDpOptions, IMyDate, IMyDateRangeModel } from "@nodro7/angular-mydatepicker";
+import { endOfMonth, startOfMonth } from "date-fns";
+import { addDays, endOfWeek, endOfYear, getDate, getMonth, getYear, startOfWeek, startOfYear } from "date-fns/esm";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+import { EdgePermission, Service, Utils } from "src/app/shared/shared";
-import { Edge } from '../../edge/edge';
+import { Edge } from "../../edge/edge";
@Component({
- selector: 'pickdatepopover',
- templateUrl: './popover.component.html',
+ selector: "pickdatepopover",
+ templateUrl: "./popover.component.html",
})
export class PickDatePopoverComponent implements OnInit {
@@ -20,14 +20,14 @@ export class PickDatePopoverComponent implements OnInit {
@Input() public edge: Edge | null = null;
@Input() public historyPeriods: DefaultTypes.PeriodStringValues[] = [];
- public locale: string = 'de';
+ public locale: string = "de";
public showCustomDate: boolean = false;
protected periods: string[] = [];
protected readonly TOMORROW = addDays(new Date(), 1);
protected myDpOptions: IAngularMyDpOptions = {
stylesData: {
- selector: 'dp1',
+ selector: "dp1",
styles: `
.dp1 .myDpMarkCurrDay,
.dp1 .myDpMarkCurrMonth,
@@ -38,13 +38,13 @@ export class PickDatePopoverComponent implements OnInit {
`,
},
calendarAnimation: { in: CalAnimation.FlipDiagonal, out: CalAnimation.ScaleCenter },
- dateFormat: 'dd.mm.yyyy',
+ dateFormat: "dd.mm.yyyy",
dateRange: true,
disableSince: this.toIMyDate(this.TOMORROW),
disableUntil: { day: 1, month: 1, year: 2013 }, // TODO start with date since the edge is available
inline: true,
- selectorHeight: '225px',
- selectorWidth: '251px',
+ selectorHeight: "225px",
+ selectorWidth: "251px",
showWeekNumbers: true,
};
protected readonly DefaultTypes = DefaultTypes;
@@ -111,6 +111,8 @@ export class PickDatePopoverComponent implements OnInit {
this.popoverCtrl.dismiss();
break;
}
+ default:
+ break;
}
}
diff --git a/ui/src/app/shared/components/pickdate/popover/popover.spec.ts b/ui/src/app/shared/components/pickdate/popover/popover.spec.ts
index 05806ec3b2f..fd6a8f9463c 100644
--- a/ui/src/app/shared/components/pickdate/popover/popover.spec.ts
+++ b/ui/src/app/shared/components/pickdate/popover/popover.spec.ts
@@ -10,7 +10,7 @@ import { Language, MyTranslateLoader } from "src/app/shared/type/language";
import { PickdateModule } from "../pickdate.module";
import { PickDatePopoverComponent } from "./popover.component";
-describe('PickdatePopover', () => {
+describe("PickdatePopover", () => {
let fixture: ComponentFixture;
let component: PickDatePopoverComponent;
@@ -38,12 +38,12 @@ describe('PickdatePopover', () => {
});
});
- it('is AngularMyDatePickerModule calendar opening on "other period" button', () => {
+ it("is AngularMyDatePickerModule calendar opening on \"other period\" button", () => {
const { debugElement } = fixture;
- const popoverBtn = debugElement.query(By.css('[testId="popover-button"]'));
- popoverBtn.triggerEventHandler('click', null);
+ const popoverBtn = debugElement.query(By.css("[testId=\"popover-button\"]"));
+ popoverBtn.triggerEventHandler("click", null);
fixture.detectChanges();
expect(component).toBeDefined();
- expect((debugElement?.nativeNode?.children as HTMLCollection)?.item(2)?.localName).toEqual('lib-angular-mydatepicker-calendar');
+ expect((debugElement?.nativeNode?.children as HTMLCollection)?.item(2)?.localName).toEqual("lib-angular-mydatepicker-calendar");
});
});
diff --git a/ui/src/app/shared/components/shared/converter.ts b/ui/src/app/shared/components/shared/converter.ts
index d1b8a12d21b..136ecff555b 100644
--- a/ui/src/app/shared/components/shared/converter.ts
+++ b/ui/src/app/shared/components/shared/converter.ts
@@ -1,7 +1,5 @@
// @ts-strict-ignore
-
import { TranslateService } from "@ngx-translate/core";
-
import { CurrentData, EdgeConfig, GridMode, Utils } from "../../shared";
import { TimeUtils } from "../../utils/time/timeutils";
import { Formatter } from "./formatter";
@@ -24,18 +22,26 @@ export namespace Converter {
};
export const IF_NUMBER = (value: number | string | null, callback: (number: number) => string) => {
- if (typeof value === 'number') {
+ if (typeof value === "number") {
return callback(value);
}
return "-"; // null or string
};
export const IF_STRING = (value: number | string | null, callback: (text: string) => string) => {
- if (typeof value === 'string') {
+ if (typeof value === "string") {
return callback(value);
}
return "-"; // null or number
};
+
+ export const IF_NUMBER_OR_STRING = (value: number | string | null, callback: (value: number | string) => string) => {
+ if (typeof value === "number" || typeof value === "string") {
+ return callback(value);
+ }
+ return "-"; // null or string
+ };
+
/**
* Converter for Grid-Buy-Power.
*
@@ -147,13 +153,13 @@ export namespace Converter {
const limitation = () => {
switch (value) {
case 1:
- return '0';
+ return "0";
case 2:
- return '30';
+ return "30";
case 4:
- return '60';
+ return "60";
case 8:
- return '100';
+ return "100";
default:
return null;
}
@@ -174,7 +180,7 @@ export namespace Converter {
* @returns always ""
*/
export const HIDE_VALUE: Converter = (ignore): string => {
- return '';
+ return "";
};
/**
@@ -186,29 +192,29 @@ export namespace Converter {
* @returns the otherPower
*/
export const CALCULATE_CONSUMPTION_OTHER_POWER = (evcss: EdgeConfig.Component[], consumptionMeters: EdgeConfig.Component[], currentData: CurrentData): number => {
- const activePowerTotal = currentData.allComponents['_sum/ConsumptionActivePower'] ?? null;
- const evcsChargePowerTotal = evcss?.map(evcs => currentData.allComponents[evcs.id + '/ChargePower'])?.reduce((prev, curr) => Utils.addSafely(prev, curr), 0) ?? null;
- const consumptionMeterActivePowerTotal = consumptionMeters?.map(meter => currentData.allComponents[meter.id + '/ActivePower'])?.reduce((prev, curr) => Utils.addSafely(prev, curr), 0) ?? null;
+ const activePowerTotal = currentData.allComponents["_sum/ConsumptionActivePower"] ?? null;
+ const evcsChargePowerTotal = evcss?.map(evcs => currentData.allComponents[evcs.id + "/ChargePower"])?.reduce((prev, curr) => Utils.addSafely(prev, curr), 0) ?? null;
+ const consumptionMeterActivePowerTotal = consumptionMeters?.map(meter => currentData.allComponents[meter.id + "/ActivePower"])?.reduce((prev, curr) => Utils.addSafely(prev, curr), 0) ?? null;
return Utils.subtractSafely(activePowerTotal,
Utils.addSafely(evcsChargePowerTotal, consumptionMeterActivePowerTotal));
};
export const GRID_STATE_TO_MESSAGE = (translate: TranslateService, currentData: CurrentData): string => {
- const gridMode = currentData.allComponents['_sum/GridMode'];
- const restrictionMode = currentData.allComponents['ctrlEssLimiter14a0/RestrictionMode'];
+ const gridMode = currentData.allComponents["_sum/GridMode"];
+ const restrictionMode = currentData.allComponents["ctrlEssLimiter14a0/RestrictionMode"];
if (gridMode === GridMode.OFF_GRID) {
return translate.instant("GRID_STATES.OFF_GRID");
}
if (restrictionMode === 1) {
- return translate.instant('GRID_STATES.RESTRICTION');
+ return translate.instant("GRID_STATES.RESTRICTION");
}
return translate.instant("GRID_STATES.NO_EXTERNAL_LIMITATION");
};
export const ON_OFF = (translate: TranslateService) => {
return (raw): string => {
- return translate.instant(raw == 1 ? 'General.on' : 'General.off');
+ return translate.instant(raw == 1 ? "General.on" : "General.off");
};
};
diff --git a/ui/src/app/shared/components/shared/dataservice.ts b/ui/src/app/shared/components/shared/dataservice.ts
index 15b1b79600d..b1d7a835af2 100644
--- a/ui/src/app/shared/components/shared/dataservice.ts
+++ b/ui/src/app/shared/components/shared/dataservice.ts
@@ -1,9 +1,8 @@
// @ts-strict-ignore
import { Injectable } from "@angular/core";
+import { RefresherCustomEvent } from "@ionic/angular";
import { BehaviorSubject, Subject } from "rxjs";
-
import { ChannelAddress, Edge } from "../../shared";
-import { RefresherCustomEvent } from "@ionic/angular";
@Injectable()
export abstract class DataService {
diff --git a/ui/src/app/shared/components/shared/formatter.ts b/ui/src/app/shared/components/shared/formatter.ts
index bb2e8002a2f..8f2d5df2c8d 100644
--- a/ui/src/app/shared/components/shared/formatter.ts
+++ b/ui/src/app/shared/components/shared/formatter.ts
@@ -1,28 +1,34 @@
import { formatNumber } from "@angular/common";
+import { Currency } from "../../shared";
export namespace Formatter {
export const FORMAT_WATT = (value: number) => {
// TODO apply correct locale
- return formatNumber(value, 'de', '1.0-0') + " W";
+ return formatNumber(value, "de", "1.0-0") + " W";
};
export const FORMAT_VOLT = (value: number) => {
// TODO apply correct locale
- return formatNumber(value, 'de', '1.0-0') + " V";
+ return formatNumber(value, "de", "1.0-0") + " V";
};
export const FORMAT_AMPERE = (value: number) => {
// TODO apply correct locale
- return formatNumber(value, 'de', '1.1-1') + " A";
+ return formatNumber(value, "de", "1.1-1") + " A";
};
export const FORMAT_CELSIUS = (value: number) => {
// TODO apply correct locale
- return formatNumber(value, 'de', '1.0-0') + " °C";
+ return formatNumber(value, "de", "1.0-0") + " °C";
};
export const FORMAT_PERCENT = (value: number) => {
// TODO apply correct locale
- return formatNumber(value, 'de', '1.0-0') + " %";
+ return formatNumber(value, "de", "1.0-0") + " %";
+ };
+
+ export const FORMAT_CURRENCY_PER_KWH = (value: number | string, currency: string = Currency.Unit.CENT) => {
+ // TODO apply correct locale
+ return formatNumber(parseInt(value.toString()), "de", "1.0-2") + " " + Currency.getCurrencyLabelByCurrency(currency);
};
}
diff --git a/ui/src/app/shared/components/shared/name.ts b/ui/src/app/shared/components/shared/name.ts
index 036f798d66f..f998a1fbf17 100644
--- a/ui/src/app/shared/components/shared/name.ts
+++ b/ui/src/app/shared/components/shared/name.ts
@@ -9,9 +9,9 @@ export namespace Name {
(value): string => {
if (typeof value === "number") {
if (value < 0) {
- return name + " " + translate.instant('General.gridSellAdvanced');
+ return name + " " + translate.instant("General.gridSellAdvanced");
} else {
- return name + " " + translate.instant('General.gridBuyAdvanced');
+ return name + " " + translate.instant("General.gridBuyAdvanced");
}
}
return name;
diff --git a/ui/src/app/shared/components/shared/notification/notification.ts b/ui/src/app/shared/components/shared/notification/notification.ts
index 2c6c420f073..682dd9d33b4 100644
--- a/ui/src/app/shared/components/shared/notification/notification.ts
+++ b/ui/src/app/shared/components/shared/notification/notification.ts
@@ -2,12 +2,12 @@ import { Component, Input, OnChanges, OnInit } from "@angular/core";
import { ToastController } from "@ionic/angular";
@Component({
- selector: 'oe-notification',
- template: '',
+ selector: "oe-notification",
+ template: "",
})
export class NotificationComponent implements OnInit, OnChanges {
- private static readonly PREFIX = 'hide-notification-';
+ private static readonly PREFIX = "hide-notification-";
@Input() private text: string | null = null;
@Input() private id: string | number | null = null;
@@ -18,7 +18,7 @@ export class NotificationComponent implements OnInit, OnChanges {
ngOnInit() {
const note = localStorage.getItem(NotificationComponent.PREFIX + this.id);
- this.hideMessage = note != null ? note === 'true' : false;
+ this.hideMessage = note != null ? note === "true" : false;
this.createToast();
}
@@ -47,16 +47,16 @@ export class NotificationComponent implements OnInit, OnChanges {
const popover = await this.toastie.create({
translucent: false,
message: this.text,
- position: 'bottom',
+ position: "bottom",
buttons: [
- { icon: 'close-outline', role: 'cancel' },
+ { icon: "close-outline", role: "cancel" },
],
});
popover.present();
await popover.onDidDismiss().then(() => {
- localStorage.setItem(NotificationComponent.PREFIX + this.id, 'true');
+ localStorage.setItem(NotificationComponent.PREFIX + this.id, "true");
});
}
}
diff --git a/ui/src/app/shared/components/shared/oe-formly-component.ts b/ui/src/app/shared/components/shared/oe-formly-component.ts
index 50516a057d5..c300ea59c69 100644
--- a/ui/src/app/shared/components/shared/oe-formly-component.ts
+++ b/ui/src/app/shared/components/shared/oe-formly-component.ts
@@ -1,10 +1,8 @@
import { FormGroup } from "@angular/forms";
-import { ActivatedRoute } from "@angular/router";
import { FormlyFieldConfig } from "@ngx-formly/core";
import { TranslateService } from "@ngx-translate/core";
import { filter } from "rxjs/operators";
-
-import { CurrentData, ChannelAddress, EdgeConfig, Service } from "../../shared";
+import { ChannelAddress, CurrentData, EdgeConfig, Service } from "../../shared";
import { SharedModule } from "../../shared.module";
import { Role } from "../../type/role";
import { TextIndentation } from "../modal/modal-line/modal-line";
@@ -18,10 +16,9 @@ export abstract class AbstractFormlyComponent {
constructor() {
const service = SharedModule.injector.get(Service);
- const route = SharedModule.injector.get(ActivatedRoute);
this.translate = SharedModule.injector.get(TranslateService);
- service.setCurrentComponent('', route).then(edge => {
+ service.getCurrentEdge().then(edge => {
edge.getConfig(service.websocket)
.pipe(filter(config => !!config))
.subscribe((config) => {
@@ -37,7 +34,7 @@ export abstract class AbstractFormlyComponent {
required: true,
options: [{ lines: view.lines }],
},
- wrappers: ['formly-field-modal'],
+ wrappers: ["formly-field-modal"],
}];
});
});
@@ -69,26 +66,26 @@ export type OeFormlyField =
export namespace OeFormlyField {
export type InfoLine = {
- type: 'info-line',
+ type: "info-line",
name: string
};
export type Item = {
- type: 'item',
+ type: "item",
channel: string,
filter?: (value: number | null) => boolean,
converter?: (value: number | null) => string
};
export type ChildrenLine = {
- type: 'children-line',
+ type: "children-line",
name: /* actual name string */ string | /* name string derived from channel value */ { channel: ChannelAddress, converter: Converter },
indentation?: TextIndentation,
children: Item[],
};
export type ChannelLine = {
- type: 'channel-line',
+ type: "channel-line",
name: /* actual name string */ string | /* name string derived from channel value */ Converter,
channel: string,
filter?: (value: number | null) => boolean,
@@ -97,7 +94,7 @@ export namespace OeFormlyField {
};
export type ValueFromChannelsLine = {
- type: 'value-from-channels-line',
+ type: "value-from-channels-line",
name: string,
value: (data: CurrentData) => string,
channelsToSubscribe: ChannelAddress[],
@@ -106,6 +103,6 @@ export namespace OeFormlyField {
};
export type HorizontalLine = {
- type: 'horizontal-line',
+ type: "horizontal-line",
};
}
diff --git a/ui/src/app/shared/components/shared/phase.ts b/ui/src/app/shared/components/shared/phase.ts
index b1c13e10994..6667a67627c 100644
--- a/ui/src/app/shared/components/shared/phase.ts
+++ b/ui/src/app/shared/components/shared/phase.ts
@@ -1,3 +1,3 @@
export namespace Phase {
- export const THREE_PHASE: string[] = ['L1', 'L2', 'L3'];
+ export const THREE_PHASE: string[] = ["L1", "L2", "L3"];
}
diff --git a/ui/src/app/shared/components/shared/testing/common.ts b/ui/src/app/shared/components/shared/testing/common.ts
index 858718645b9..62f21fe345a 100644
--- a/ui/src/app/shared/components/shared/testing/common.ts
+++ b/ui/src/app/shared/components/shared/testing/common.ts
@@ -22,16 +22,19 @@ export namespace OeTester {
}
export namespace ChartOptions {
- export const LINE_CHART_OPTIONS = (period: string, chartType: 'line' | 'bar', options: { [key: string]: { scale: { min?: number, max?: number; beginAtZero?: boolean; }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
- type: 'option',
+ export const LINE_CHART_OPTIONS = (period: string, chartType: "line" | "bar", options: { [key: string]: { scale: { min?: number, max?: number, beginAtZero?: boolean }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
+ type: "option",
options: {
- "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": {}, "line": {} }, "plugins": { "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": '' } }, "tooltip": { "intersect": false, "mode": "index", "callbacks": {} }, "annotation": { "annotations": {} } }, "scales": {
- "x": { "stacked": true, "offset": false, "type": "time", "ticks": { "source": "auto", "maxTicksLimit": 31 }, "bounds": "ticks", "adapters": { "date": { "locale": { "code": "de", "formatLong": {}, "localize": {}, "match": {}, "options": { "weekStartsOn": 1, "firstWeekContainsDate": 4 } } } }, "time": { "unit": period as TimeUnit, "displayFormats": { "datetime": "yyyy-MM-dd HH:mm:ss", "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:00", "day": "dd", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "yyyy" } } },
- "left": {
- ...options["left"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": options["left"]?.scale.beginAtZero ?? false, "title": { "text": "kW", "display": false, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
+ "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": {}, "line": {} }, "plugins": {
+ "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": "" } }, "tooltip": { "intersect": false, "mode": "index", "callbacks": {} }, "annotation": { "annotations": {} }, "datalabels": {
+ display: false,
+ },
+ }, "scales": {
+ "x": { "stacked": true, "offset": false, "type": "time", "ticks": { "source": "auto", "maxTicksLimit": 31 }, "bounds": "ticks", "adapters": { "date": { "locale": { "code": "de", "formatLong": {}, "localize": {}, "match": {}, "options": { "weekStartsOn": 1, "firstWeekContainsDate": 4 } } } }, "time": { "unit": period as TimeUnit, "displayFormats": { "datetime": "yyyy-MM-dd HH:mm:ss", "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:00", "day": "dd", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "yyyy" } } }, "left": {
+ "beginAtZero": false, ...options["left"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "title": { "text": "kW", "display": false, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
"ticks": {
...options["left"]?.ticks,
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
@@ -39,16 +42,20 @@ export namespace OeTester {
},
},
});
- export const BAR_CHART_OPTIONS = (period: string, chartType: 'line' | 'bar', options: { [key: string]: { scale: { min: number, max: number; }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
- type: 'option',
+ export const BAR_CHART_OPTIONS = (period: string, chartType: "line" | "bar", options: { [key: string]: { scale: { min: number, max: number; }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
+ type: "option",
options: {
- "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": { "barPercentage": 1 }, "line": {} }, "plugins": { "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": '' } }, "tooltip": { "intersect": false, "mode": "x", "callbacks": {} }, "annotation": { "annotations": {} } }, "scales": {
+ "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": { "barPercentage": 1 }, "line": {} }, "plugins": {
+ "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": "" } }, "tooltip": { "intersect": false, "mode": "x", "callbacks": {} }, "annotation": { "annotations": {} }, "datalabels": {
+ display: false,
+ },
+ }, "scales": {
"x": { "stacked": true, "offset": true, "type": "time", "ticks": { "source": "auto", "maxTicksLimit": 31 }, "bounds": "ticks", "adapters": { "date": { "locale": { "code": "de", "formatLong": {}, "localize": {}, "match": {}, "options": { "weekStartsOn": 1, "firstWeekContainsDate": 4 } } } }, "time": { "unit": period as TimeUnit, "displayFormats": { "datetime": "yyyy-MM-dd HH:mm:ss", "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:00", "day": "dd", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "yyyy" } } },
"left": {
- ...options["left"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kWh", "display": false, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
+ ...options["left"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kWh", "display": false, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
"ticks": {
...options["left"]?.ticks,
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
@@ -56,28 +63,44 @@ export namespace OeTester {
},
},
});
- export const MULTI_LINE_OPTIONS = (period: string, chartType: 'line' | 'bar', options: { [key: string]: { scale: { min: number, max: number; }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
- type: 'option',
+ export const MULTI_LINE_OPTIONS = (period: string, chartType: "line" | "bar", options: { [key: string]: { scale: { min: number, max: number; }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
+ type: "option",
options: {
- "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": {}, "line": {} }, "plugins": { "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": '' } }, "tooltip": { "intersect": false, "mode": "index", "callbacks": {} }, "annotation": { "annotations": {} } }, "scales": {
+ "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": {}, "line": {} },
+ "plugins": {
+ "colors": {
+ "enabled": false,
+ },
+ "legend": {
+ "display": true, "position": "bottom", "labels": { "color": "" },
+ }, "tooltip": {
+ "intersect": false, "mode": "index", "callbacks": {},
+ },
+ "annotation": {
+ "annotations": {},
+ },
+ "datalabels": {
+ display: false,
+ },
+ }, "scales": {
"x": { "stacked": true, "offset": false, "type": "time", "ticks": { "source": "auto", "maxTicksLimit": 31 }, "bounds": "ticks", "adapters": { "date": { "locale": { "code": "de", "formatLong": {}, "localize": {}, "match": {}, "options": { "weekStartsOn": 1, "firstWeekContainsDate": 4 } } } }, "time": { "unit": period as TimeUnit, "displayFormats": { "datetime": "yyyy-MM-dd HH:mm:ss", "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:00", "day": "dd", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "yyyy" } } }, "left": {
- ...options["left"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": true,
+ ...options["left"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "beginAtZero": true,
"title": { "text": "kW", "display": true, "padding": 5, "font": { "size": 11 } },
"position": "left", "grid": { "display": true },
"ticks": {
...options["left"]?.ticks,
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
},
"right": {
- ...options["right"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": true,
+ ...options["right"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "beginAtZero": true,
"title": { "text": "Zustand", "display": true, "padding": 5, "font": { "size": 11 } },
"position": "right", "grid": { "display": false },
"ticks": {
...options["right"]?.ticks,
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
@@ -85,26 +108,30 @@ export namespace OeTester {
},
},
});
- export const MULTI_BAR_OPTIONS = (period: string, chartType: 'line' | 'bar', options: { [key: string]: { scale: { min?: number, max?: number; }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
- type: 'option',
+ export const MULTI_BAR_OPTIONS = (period: string, chartType: "line" | "bar", options: { [key: string]: { scale: { min?: number, max?: number; }, ticks?: { stepSize: number; }; }; }, title?: string): OeChartTester.Dataset.Option => ({
+ type: "option",
options: {
- "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": { "barPercentage": 1 }, "line": {} }, "plugins": { "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": '' } }, "tooltip": { "intersect": false, "mode": "x", "callbacks": {} }, "annotation": { "annotations": {} } }, "scales": {
+ "responsive": true, "maintainAspectRatio": false, "elements": { "point": { "radius": 0, "hitRadius": 0, "hoverRadius": 0 }, "line": { "stepped": false, "fill": true } }, "datasets": { "bar": { "barPercentage": 1 }, "line": {} }, "plugins": {
+ "colors": { "enabled": false }, "legend": { "display": true, "position": "bottom", "labels": { "color": "" } }, "tooltip": { "intersect": false, "mode": "x", "callbacks": {} }, "annotation": { "annotations": {} }, "datalabels": {
+ display: false,
+ },
+ }, "scales": {
"x": { "stacked": true, "offset": true, "type": "time", "ticks": { "source": "auto", "maxTicksLimit": 31 }, "bounds": "ticks", "adapters": { "date": { "locale": { "code": "de", "formatLong": {}, "localize": {}, "match": {}, "options": { "weekStartsOn": 1, "firstWeekContainsDate": 4 } } } }, "time": { "unit": period as TimeUnit, "displayFormats": { "datetime": "yyyy-MM-dd HH:mm:ss", "millisecond": "SSS [ms]", "second": "HH:mm:ss a", "minute": "HH:mm", "hour": "HH:00", "day": "dd", "week": "ll", "month": "MM", "quarter": "[Q]Q - YYYY", "year": "yyyy" } } },
"left": {
- ...options["left"]?.scale, ...(chartType === 'line' ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kWh", "display": true, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
+ ...options["left"]?.scale, ...(chartType === "line" ? { stacked: false } : {}), "beginAtZero": true, "title": { "text": "kWh", "display": true, "padding": 5, "font": { "size": 11 } }, "position": "left", "grid": { "display": true },
"ticks": {
...options["left"]?.ticks,
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
},
"right": {
- ...options["right"]?.scale, ...(chartType === 'line' ? { stacked: false } : { min: 0 }), "beginAtZero": true,
+ ...options["right"]?.scale, ...(chartType === "line" ? { stacked: false } : { min: 0 }), "beginAtZero": true,
"title": { "text": "Aktive Zeit", "display": true, "padding": 5, "font": { "size": 11 } },
"position": "right", "grid": { "display": false },
"ticks": {
- "color": '',
+ "color": "",
"padding": 5,
"maxTicksLimit": ChartConstants.NUMBER_OF_Y_AXIS_TICKS,
},
diff --git a/ui/src/app/shared/components/shared/testing/tester.ts b/ui/src/app/shared/components/shared/testing/tester.ts
index 2414dccd364..2e30117a4fa 100644
--- a/ui/src/app/shared/components/shared/testing/tester.ts
+++ b/ui/src/app/shared/components/shared/testing/tester.ts
@@ -7,6 +7,7 @@ import { HistoryUtils } from "src/app/shared/service/utils";
import { CurrentData, EdgeConfig } from "src/app/shared/shared";
import { AbstractHistoryChart } from "../../chart/abstracthistorychart";
+import { XAxisType } from "../../chart/chart.constants";
import { TextIndentation } from "../../modal/modal-line/modal-line";
import { Converter } from "../converter";
import { OeFormlyField, OeFormlyView } from "../oe-formly-component";
@@ -29,7 +30,7 @@ export class OeFormlyViewTester {
/**
* OeFormlyField.Line
*/
- case 'children-line': {
+ case "children-line": {
const tmp = OeFormlyViewTester.applyLineWithChildren(field, context);
// Prepare result
@@ -60,7 +61,7 @@ export class OeFormlyViewTester {
// Read or generate name
let name: string;
- if (typeof (field.name) === 'function') {
+ if (typeof (field.name) === "function") {
name = field.name(tmp.rawValue);
} else {
name = field.name;
@@ -205,17 +206,17 @@ export namespace OeChartTester {
export namespace Dataset {
export type Data = {
- type: 'data',
+ type: "data",
label: string | Converter,
value: (number | null)[]
};
export type LegendLabel = {
- type: 'label',
+ type: "label",
timestamps: Date[]
};
export type Option = {
- type: 'option',
+ type: "option",
options: Chart.ChartOptions
};
}
@@ -223,7 +224,7 @@ export namespace OeChartTester {
export class OeChartTester {
- public static apply(chartData: HistoryUtils.ChartData, chartType: 'line' | 'bar', channels: OeTester.Types.Channels, testContext: TestContext, config: EdgeConfig): OeChartTester.View {
+ public static apply(chartData: HistoryUtils.ChartData, chartType: "line" | "bar", channels: OeTester.Types.Channels, testContext: TestContext, config: EdgeConfig, xAxisScalingType: XAxisType = XAxisType.TIMESERIES): OeChartTester.View {
const channelData = OeChartTester.getChannelDataByCharttype(chartType, channels);
@@ -238,7 +239,7 @@ export class OeChartTester {
const configuration = AbstractHistoryChart.fillChart(chartType, chartData, channelData, channels.energyChannelWithValues);
const data: OeChartTester.Dataset.Data[] = OeChartTester.convertChartDatasetsToDatasets(configuration.datasets);
const labels: OeChartTester.Dataset.LegendLabel = OeChartTester.convertChartLabelsToLegendLabels(configuration.labels);
- const options: OeChartTester.Dataset.Option = OeChartTester.convertChartDataToOptions(chartData, chartType, testContext, channels, testContext.translate.currentLang, config, configuration.datasets);
+ const options: OeChartTester.Dataset.Option = OeChartTester.convertChartDataToOptions(chartData, chartType, testContext, channels, testContext.translate.currentLang, config, configuration.datasets, xAxisScalingType, configuration.labels);
return {
datasets: {
@@ -257,7 +258,7 @@ export class OeChartTester {
*/
public static convertChartLabelsToLegendLabels(labels: Date[]): OeChartTester.Dataset.LegendLabel {
return {
- type: 'label',
+ type: "label",
timestamps: labels,
};
}
@@ -274,7 +275,7 @@ export class OeChartTester {
for (const dataset of datasets) {
fields.push(
{
- type: 'data',
+ type: "data",
label: dataset.label,
value: dataset.data as number[],
});
@@ -292,29 +293,30 @@ export class OeChartTester {
* @param channels the channels
* @returns dataset options
*/
- public static convertChartDataToOptions(chartData: HistoryUtils.ChartData, chartType: 'line' | 'bar', testContext: TestContext, channels: OeTester.Types.Channels, locale: string, config: EdgeConfig, datasets: Chart.ChartDataset[]): OeChartTester.Dataset.Option {
+ public static convertChartDataToOptions(chartData: HistoryUtils.ChartData, chartType: "line" | "bar", testContext: TestContext, channels: OeTester.Types.Channels, locale: string, config: EdgeConfig, datasets: Chart.ChartDataset[], xAxisType: XAxisType = XAxisType.TIMESERIES, labels: (Date | string)[] = []): OeChartTester.Dataset.Option {
const channelData: QueryHistoricTimeseriesDataResponse | QueryHistoricTimeseriesEnergyPerPeriodResponse = OeChartTester.getChannelDataByCharttype(chartType, channels);
+
const displayValues = chartData.output(channelData.result.data);
const legendOptions: any[] = [];
displayValues.forEach(displayValue => {
const yAxis = chartData.yAxes.find(yaxis => yaxis?.yAxisId == (displayValue?.yAxisId ?? chartData.yAxes[0].yAxisId));
- const label = AbstractHistoryChart.getTooltipsLabelName(displayValue.name, yAxis?.unit, typeof displayValue.nameSuffix == 'function' ? displayValue.nameSuffix(channels.energyChannelWithValues) : null);
+ const label = AbstractHistoryChart.getTooltipsLabelName(displayValue.name, yAxis?.unit, typeof displayValue.nameSuffix == "function" ? displayValue.nameSuffix(channels.energyChannelWithValues) : null);
legendOptions.push(AbstractHistoryChart.getLegendOptions(label, displayValue));
});
return {
- type: 'option',
- options: AbstractHistoryChart.getOptions(chartData, chartType, testContext.service, testContext.translate, null, legendOptions, channelData.result, locale, config, datasets),
+ type: "option",
+ options: AbstractHistoryChart.getOptions(chartData, chartType, testContext.service, testContext.translate, legendOptions, channelData.result, locale, config, datasets, xAxisType, labels),
};
}
- private static getChannelDataByCharttype(chartType: 'line' | 'bar', channels: OeTester.Types.Channels): QueryHistoricTimeseriesEnergyPerPeriodResponse | QueryHistoricTimeseriesDataResponse {
+ private static getChannelDataByCharttype(chartType: "line" | "bar", channels: OeTester.Types.Channels): QueryHistoricTimeseriesEnergyPerPeriodResponse | QueryHistoricTimeseriesDataResponse {
switch (chartType) {
- case 'line':
+ case "line":
return channels.dataChannelWithValues;
- case 'bar':
+ case "bar":
return channels.energyPerPeriodChannelWithValues;
}
}
@@ -340,38 +342,38 @@ export namespace OeFormlyViewTester {
export namespace Field {
export type InfoLine = {
- type: 'info-line',
+ type: "info-line",
name: string
};
export type Item = {
- type: 'item',
+ type: "item",
value: string
};
export type ChannelLine = {
- type: 'channel-line',
+ type: "channel-line",
name: string,
value?: string,
indentation?: TextIndentation,
};
export type ValueLine = {
- type: 'value-from-channels-line',
+ type: "value-from-channels-line",
name: string,
value?: string,
indentation?: TextIndentation,
};
export type ChildrenLine = {
- type: 'children-line',
+ type: "children-line",
name: string,
indentation?: TextIndentation,
children?: Field[]
};
export type HorizontalLine = {
- type: 'horizontal-line',
+ type: "horizontal-line",
};
}
@@ -381,12 +383,12 @@ export namespace OeFormlyViewTester {
let value: string | null = null;
let rawValue: number | null = null;
- if (typeof field.name == 'object') {
- rawValue = typeof field.name == 'object' ? (field.name.channel.toString() in context ? context[field.name.channel.toString()] : null) : null;
+ if (typeof field.name == "object") {
+ rawValue = typeof field.name == "object" ? (field.name.channel.toString() in context ? context[field.name.channel.toString()] : null) : null;
value = field.name.converter(rawValue);
}
- if (typeof (field.name) === 'string') {
+ if (typeof (field.name) === "string") {
value = field.name;
}
diff --git a/ui/src/app/shared/components/shared/testing/utils.spec.ts b/ui/src/app/shared/components/shared/testing/utils.spec.ts
index b08627e0468..641d93f57cd 100644
--- a/ui/src/app/shared/components/shared/testing/utils.spec.ts
+++ b/ui/src/app/shared/components/shared/testing/utils.spec.ts
@@ -1,33 +1,43 @@
+
import { registerLocaleData } from "@angular/common";
-import localDE from '@angular/common/locales/de';
-import localeDeExtra from '@angular/common/locales/extra/de';
+import localDE from "@angular/common/locales/de";
+import localeDeExtra from "@angular/common/locales/extra/de";
import { LOCALE_ID } from "@angular/core";
-import { TestBed } from "@angular/core/testing";
+import { TestBed, TestModuleMetadata } from "@angular/core/testing";
+import { ActivatedRoute, RouterModule } from "@angular/router";
+import { RouterTestingModule } from "@angular/router/testing";
import { FORMLY_CONFIG } from "@ngx-formly/core";
import { TranslateLoader, TranslateModule, TranslateService } from "@ngx-translate/core";
+import { routes } from "src/app/app-routing.module";
import { Service } from "src/app/shared/shared";
import { registerTranslateExtension } from "src/app/shared/translate.extension";
import { Language, MyTranslateLoader } from "src/app/shared/type/language";
export type TestContext = { translate: TranslateService, service: Service };
+export const BASE_TEST_BED: TestModuleMetadata = {
+ imports: [
+ TranslateModule.forRoot({ loader: { provide: TranslateLoader, useClass: MyTranslateLoader }, defaultLanguage: Language.DEFAULT.key, useDefaultLang: false }),
+ ],
+ providers: [
+ TranslateService,
+ { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
+ { provide: LOCALE_ID, useValue: Language.DEFAULT.key },
+ Service,
+ ],
+};
+
+export function setTranslateParams(): void {
+ const translateService = TestBed.inject(TranslateService);
+ translateService.addLangs(["de"]);
+ translateService.use("de");
+ registerLocaleData(localDE, "de", localeDeExtra);
+}
+
export async function sharedSetup(): Promise {
- await TestBed.configureTestingModule({
- imports: [
- TranslateModule.forRoot({ loader: { provide: TranslateLoader, useClass: MyTranslateLoader }, defaultLanguage: Language.DEFAULT.key, useDefaultLang: false }),
- ],
- providers: [
- TranslateService,
- { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
- { provide: LOCALE_ID, useValue: Language.DEFAULT.key },
- Service,
- ],
- }).compileComponents().then(() => {
- const translateService = TestBed.inject(TranslateService);
- translateService.addLangs(['de']);
- translateService.use('de');
- registerLocaleData(localDE, 'de', localeDeExtra);
- });
+ await TestBed.configureTestingModule(BASE_TEST_BED)
+ .compileComponents()
+ .then(() => setTranslateParams());
return {
translate: TestBed.inject(TranslateService),
@@ -36,15 +46,44 @@ export async function sharedSetup(): Promise {
}
export function removeFunctions(obj: any): any {
- if (typeof obj !== 'object' || obj === null) {
+ if (typeof obj !== "object" || obj === null) {
return obj;
}
const result: any = {};
for (const key in obj) {
- if (typeof obj[key] !== 'function') {
+ if (typeof obj[key] !== "function") {
result[key] = removeFunctions(obj[key]);
}
}
return result;
}
+
+export async function sharedSetupWithComponentIdRoute(componentId: string): Promise {
+ await TestBed.configureTestingModule({
+ imports: [
+ ...(BASE_TEST_BED.imports as any[]),
+ RouterTestingModule.withRoutes(routes),
+ RouterModule.forRoot([]),
+ ],
+ providers: [
+ ...(BASE_TEST_BED.providers as any[]),
+ {
+ provide: ActivatedRoute,
+ useValue: {
+ snapshot: {
+ params: { componentId: componentId },
+ },
+ },
+ },
+ ],
+ })
+ .compileComponents()
+ .then(() => setTranslateParams());
+
+ return {
+ translate: TestBed.inject(TranslateService),
+ service: TestBed.inject(Service),
+ route: TestBed.inject(ActivatedRoute),
+ };
+}
diff --git a/ui/src/app/shared/components/status/single/status.component.spec.ts b/ui/src/app/shared/components/status/single/status.component.spec.ts
index 6f4c1868bbc..b6d83233d1b 100644
--- a/ui/src/app/shared/components/status/single/status.component.spec.ts
+++ b/ui/src/app/shared/components/status/single/status.component.spec.ts
@@ -1,15 +1,14 @@
import { TestBed } from "@angular/core/testing";
import { ModalController } from "@ionic/angular";
-
-import { EdgeConfig, PersistencePriority } from "../../edge/edgeconfig";
-import { StatusSingleComponent } from "./status.component";
import { BehaviorSubject } from "rxjs";
import { DummyWebsocket } from "src/app/shared/service/test/dummywebsocket";
-import { Service, Websocket, ChannelAddress } from "src/app/shared/shared";
+import { ChannelAddress, Service, Websocket } from "src/app/shared/shared";
import { Edge } from "../../edge/edge";
+import { EdgeConfig, PersistencePriority } from "../../edge/edgeconfig";
import { DummyModalController } from "../../shared/testing/DummyModalController";
+import { StatusSingleComponent } from "./status.component";
-describe('StatusComponent', () => {
+describe("StatusComponent", () => {
const testComponent = new EdgeConfig.Component("test", {}, {
"testChannel": {
accessMode: "RO",
@@ -21,12 +20,12 @@ describe('StatusComponent', () => {
text: "",
},
});
- testComponent.id = 'test0';
+ testComponent.id = "test0";
let statusComponent: StatusSingleComponent;
- const serviceSpy = jasmine.createSpyObj('Service', ['getConfig'], ['currentEdge']);
- const edgeSpy = jasmine.createSpyObj('Edge', ['subscribeChannels', 'isVersionAtLeast', 'unsubscribeChannels']);
- const edgeConfigSpy = jasmine.createSpyObj('EdgeConfig', ['listActiveComponents'], ['components']);
+ const serviceSpy = jasmine.createSpyObj("Service", ["getConfig"], ["currentEdge"]);
+ const edgeSpy = jasmine.createSpyObj("Edge", ["subscribeChannels", "isVersionAtLeast", "unsubscribeChannels"]);
+ const edgeConfigSpy = jasmine.createSpyObj("EdgeConfig", ["listActiveComponents"], ["components"]);
// initialize variables only in beforeEach, beforeAll
beforeEach((() => {
TestBed.configureTestingModule({
@@ -45,22 +44,22 @@ describe('StatusComponent', () => {
valueEdgeSpy.unsubscribeChannels.and.callThrough();
const valueServiceSpy = TestBed.inject(Service) as jasmine.SpyObj;
- spyPropertyGetter(valueServiceSpy, 'currentEdge').and.returnValue(new BehaviorSubject(TestBed.inject(Edge)));
+ spyPropertyGetter(valueServiceSpy, "currentEdge").and.returnValue(new BehaviorSubject(TestBed.inject(Edge)));
const valueEdgeConfigSpy = TestBed.inject(EdgeConfig) as jasmine.SpyObj;
- valueEdgeConfigSpy.listActiveComponents.and.returnValue([{ category: { icon: '', title: 'title' }, components: [testComponent] }]);
- spyPropertyGetter(valueEdgeConfigSpy, 'components').and.returnValue({ [testComponent.id]: testComponent });
+ valueEdgeConfigSpy.listActiveComponents.and.returnValue([{ category: { icon: "", title: "title" }, components: [testComponent] }]);
+ spyPropertyGetter(valueEdgeConfigSpy, "components").and.returnValue({ [testComponent.id]: testComponent });
valueServiceSpy.getConfig.and.resolveTo(TestBed.inject(EdgeConfig));
statusComponent = TestBed.inject(StatusSingleComponent);
}));
- it('Test add Channels for subscription', async () => {
+ it("Test add Channels for subscription", async () => {
await statusComponent.ngOnInit();
await statusComponent.subscribeInfoChannels(testComponent);
expect(statusComponent.subscribedInfoChannels).toHaveSize(2);
- expect(statusComponent.subscribedInfoChannels).toContain(new ChannelAddress(testComponent.id, 'State'));
- expect(statusComponent.subscribedInfoChannels).toContain(new ChannelAddress(testComponent.id, 'testChannel'));
+ expect(statusComponent.subscribedInfoChannels).toContain(new ChannelAddress(testComponent.id, "State"));
+ expect(statusComponent.subscribedInfoChannels).toContain(new ChannelAddress(testComponent.id, "testChannel"));
});
});
diff --git a/ui/src/app/shared/components/status/single/status.component.ts b/ui/src/app/shared/components/status/single/status.component.ts
index 6f3343cb5d3..9d269b1ce59 100644
--- a/ui/src/app/shared/components/status/single/status.component.ts
+++ b/ui/src/app/shared/components/status/single/status.component.ts
@@ -1,19 +1,19 @@
// @ts-strict-ignore
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { ModalController } from '@ionic/angular';
-import { Subject } from 'rxjs';
-import { takeUntil } from 'rxjs/operators';
-import { ComponentJsonApiRequest } from 'src/app/shared/jsonrpc/request/componentJsonApiRequest';
-import { GetStateChannelsOfComponentRequest } from 'src/app/shared/jsonrpc/request/getStateChannelsOfComponentRequest';
-import { GetChannelsOfComponentResponse } from 'src/app/shared/jsonrpc/response/getChannelsOfComponentResponse';
-import { ChannelAddress, EdgePermission, Service, Websocket } from 'src/app/shared/shared';
+import { Component, OnDestroy, OnInit } from "@angular/core";
+import { ModalController } from "@ionic/angular";
+import { Subject } from "rxjs";
+import { takeUntil } from "rxjs/operators";
+import { ComponentJsonApiRequest } from "src/app/shared/jsonrpc/request/componentJsonApiRequest";
+import { GetStateChannelsOfComponentRequest } from "src/app/shared/jsonrpc/request/getStateChannelsOfComponentRequest";
+import { GetChannelsOfComponentResponse } from "src/app/shared/jsonrpc/response/getChannelsOfComponentResponse";
+import { ChannelAddress, EdgePermission, Service, Websocket } from "src/app/shared/shared";
-import { Edge } from '../../edge/edge';
-import { CategorizedComponents, EdgeConfig } from '../../edge/edgeconfig';
+import { Edge } from "../../edge/edge";
+import { CategorizedComponents, EdgeConfig } from "../../edge/edgeconfig";
@Component({
selector: StatusSingleComponent.SELECTOR,
- templateUrl: './status.component.html',
+ templateUrl: "./status.component.html",
})
export class StatusSingleComponent implements OnInit, OnDestroy {
private static readonly SELECTOR = "statussingle";
@@ -45,9 +45,9 @@ export class StatusSingleComponent implements OnInit, OnDestroy {
this.components.forEach(categorizedComponent => {
categorizedComponent.components.forEach(component => {
// sets all arrow buttons to standard position (folded)
- component['showProperties'] = false;
+ component["showProperties"] = false;
this.subscribedInfoChannels.push(
- new ChannelAddress(component.id, 'State'),
+ new ChannelAddress(component.id, "State"),
);
});
});
@@ -84,10 +84,10 @@ export class StatusSingleComponent implements OnInit, OnDestroy {
this.edge?.subscribeChannels(this.websocket, StatusSingleComponent.SELECTOR, this.subscribedInfoChannels);
}
- private getStateChannels(componentId: string): Promise {
+ private getStateChannels(componentId: string): Promise {
return new Promise((resolve, reject) => {
if (EdgePermission.hasChannelsInEdgeConfig(this.edge)) {
- const channels: typeof this.channels['componentId'] = {};
+ const channels: typeof this.channels["componentId"] = {};
for (const [key, value] of Object.entries(this.config.components[componentId].channels)) {
// show only state channels
@@ -102,10 +102,10 @@ export class StatusSingleComponent implements OnInit, OnDestroy {
}
this.edge.sendRequest(this.websocket, new ComponentJsonApiRequest({
- componentId: '_componentManager',
+ componentId: "_componentManager",
payload: new GetStateChannelsOfComponentRequest({ componentId: componentId }),
})).then((response: GetChannelsOfComponentResponse) => {
- const channels: typeof this.channels['componentId'] = {};
+ const channels: typeof this.channels["componentId"] = {};
for (const item of response.result.channels) {
channels[item.id] = { text: item.text, level: item.level };
}
diff --git a/ui/src/app/shared/directive/autofill.ts b/ui/src/app/shared/directive/autofill.ts
index 8665630df5b..ef1dfc539f4 100644
--- a/ui/src/app/shared/directive/autofill.ts
+++ b/ui/src/app/shared/directive/autofill.ts
@@ -1,20 +1,20 @@
// @ts-strict-ignore
-import { Directive, ElementRef, OnInit } from '@angular/core';
-import { Capacitor } from '@capacitor/core';
-import { Logger } from '../shared';
+import { Directive, ElementRef, OnInit } from "@angular/core";
+import { Capacitor } from "@capacitor/core";
+import { Logger } from "../shared";
@Directive({
- selector: '[appAutofill]',
+ selector: "[appAutofill]",
})
export class AutofillDirective implements OnInit {
constructor(private el: ElementRef, private logger: Logger) { }
ngOnInit(): void {
- if (Capacitor.getPlatform() !== 'ios') { return; }
+ if (Capacitor.getPlatform() !== "ios") { return; }
setTimeout(() => {
try {
- this.el.nativeElement.children[0].addEventListener('change', (e) => {
+ this.el.nativeElement.children[0].addEventListener("change", (e) => {
this.el.nativeElement.value = (e.target as any).value;
});
} catch {
diff --git a/ui/src/app/shared/directive/directive.ts b/ui/src/app/shared/directive/directive.ts
index 619719018a9..5dfbcd6368c 100644
--- a/ui/src/app/shared/directive/directive.ts
+++ b/ui/src/app/shared/directive/directive.ts
@@ -1,7 +1,7 @@
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { VarDirective } from './ngvar';
-import { AutofillDirective } from './autofill';
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { AutofillDirective } from "./autofill";
+import { VarDirective } from "./ngvar";
@NgModule({
imports: [
diff --git a/ui/src/app/shared/directive/ngvar.ts b/ui/src/app/shared/directive/ngvar.ts
index a4655449422..01923e9870a 100644
--- a/ui/src/app/shared/directive/ngvar.ts
+++ b/ui/src/app/shared/directive/ngvar.ts
@@ -1,7 +1,7 @@
-import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
+import { Directive, Input, TemplateRef, ViewContainerRef } from "@angular/core";
@Directive({
- selector: '[ngVar]',
+ selector: "[ngVar]",
})
export class VarDirective {
private context: {
diff --git a/ui/src/app/shared/guards/functional-guards.ts b/ui/src/app/shared/guards/functional-guards.ts
new file mode 100644
index 00000000000..ac3db77136f
--- /dev/null
+++ b/ui/src/app/shared/guards/functional-guards.ts
@@ -0,0 +1,35 @@
+// @ts-strict-ignore
+import { Location } from "@angular/common";
+import { inject } from "@angular/core";
+import { ActivatedRouteSnapshot, RouterStateSnapshot } from "@angular/router";
+import { filter, take } from "rxjs/operators";
+import { Service } from "../shared";
+import { Role } from "../type/role";
+
+/**
+ * Determines if user is allowed to navigate to route, dependent on edge role
+ *
+ * @param route the route snapshot
+ * @param state the routerStateSnapshot
+ * @returns true, if edge.role equals requiredTole (provided in {@link Route.data} )
+ */
+export const hasEdgeRole = (role: Role) => {
+ return (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
+ const location = inject(Location);
+ const service = inject(Service);
+ service.currentEdge.pipe(filter(edge => !!edge), take(1)).subscribe((edge) => {
+ if (edge) {
+ const roleIsAtLeast = Role.isAtLeast(edge.role, role);
+
+ if (!roleIsAtLeast) {
+ console.warn(`Routing Failed. Reason: User not allowed to access [component:${route?.component["SELECTOR"] ?? state.url}]`);
+ location.back();
+ }
+ return roleIsAtLeast;
+ }
+ return false;
+ });
+
+ return true;
+ };
+};
diff --git a/ui/src/app/shared/jsonrpc/base.ts b/ui/src/app/shared/jsonrpc/base.ts
index 8fd40a1af96..709ade30497 100644
--- a/ui/src/app/shared/jsonrpc/base.ts
+++ b/ui/src/app/shared/jsonrpc/base.ts
@@ -1,4 +1,4 @@
-import { v4 as uuidv4 } from 'uuid';
+import { v4 as uuidv4 } from "uuid";
export abstract class JsonrpcMessage {
public readonly jsonrpc: string = "2.0";
diff --git a/ui/src/app/shared/jsonrpc/notification/edgeConfigNotification.ts b/ui/src/app/shared/jsonrpc/notification/edgeConfigNotification.ts
index 5fd4a0da61c..6e86011ebc2 100644
--- a/ui/src/app/shared/jsonrpc/notification/edgeConfigNotification.ts
+++ b/ui/src/app/shared/jsonrpc/notification/edgeConfigNotification.ts
@@ -1,4 +1,4 @@
-import { EdgeConfig } from '../../components/edge/edgeconfig';
+import { EdgeConfig } from "../../components/edge/edgeconfig";
import { JsonrpcNotification } from "../base";
/**
diff --git a/ui/src/app/shared/jsonrpc/notification/systemLogNotification.ts b/ui/src/app/shared/jsonrpc/notification/systemLogNotification.ts
index 0c233a75fdd..d7ebcab68be 100644
--- a/ui/src/app/shared/jsonrpc/notification/systemLogNotification.ts
+++ b/ui/src/app/shared/jsonrpc/notification/systemLogNotification.ts
@@ -1,5 +1,5 @@
-import { JsonrpcNotification } from "../base";
import { SystemLog } from "../../type/systemlog";
+import { JsonrpcNotification } from "../base";
/**
* Represents a JSON-RPC Notification for sending the current system log.
diff --git a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesDataRequest.ts b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesDataRequest.ts
index 77146413230..c96f00e5752 100644
--- a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesDataRequest.ts
+++ b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesDataRequest.ts
@@ -1,9 +1,9 @@
// @ts-strict-ignore
+import { format } from "date-fns";
+import { Resolution } from "src/app/edge/history/shared";
import { ChannelAddress } from "../../../shared/type/channeladdress";
-import { format } from 'date-fns';
import { JsonrpcRequest } from "../base";
import { JsonRpcUtils } from "../jsonrpcutils";
-import { Resolution } from "src/app/edge/history/shared";
/**
* Represents a JSON-RPC Request to query Historic Timeseries Data.
@@ -34,8 +34,8 @@ export class QueryHistoricTimeseriesDataRequest extends JsonrpcRequest {
) {
super(QueryHistoricTimeseriesDataRequest.METHOD, {
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
- fromDate: format(fromDate, 'yyyy-MM-dd'),
- toDate: format(toDate, 'yyyy-MM-dd'),
+ fromDate: format(fromDate, "yyyy-MM-dd"),
+ toDate: format(toDate, "yyyy-MM-dd"),
channels: JsonRpcUtils.channelsToStringArray(channels),
resolution: resolution,
});
diff --git a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyPerPeriodRequest.ts b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyPerPeriodRequest.ts
index c81fd430687..3c5bbde6911 100644
--- a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyPerPeriodRequest.ts
+++ b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyPerPeriodRequest.ts
@@ -1,9 +1,9 @@
// @ts-strict-ignore
+import { format } from "date-fns";
+import { Resolution } from "src/app/edge/history/shared";
import { ChannelAddress } from "../../type/channeladdress";
-import { format } from 'date-fns';
import { JsonrpcRequest } from "../base";
import { JsonRpcUtils } from "../jsonrpcutils";
-import { Resolution } from "src/app/edge/history/shared";
/**
* Represents a JSON-RPC Request to query Timeseries Energy data.
@@ -36,8 +36,8 @@ export class QueryHistoricTimeseriesEnergyPerPeriodRequest extends JsonrpcReques
) {
super(QueryHistoricTimeseriesEnergyPerPeriodRequest.METHOD, {
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
- fromDate: format(fromDate, 'yyyy-MM-dd'),
- toDate: format(toDate, 'yyyy-MM-dd'),
+ fromDate: format(fromDate, "yyyy-MM-dd"),
+ toDate: format(toDate, "yyyy-MM-dd"),
channels: JsonRpcUtils.channelsToStringArray(channels),
resolution: resolution,
});
diff --git a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyRequest.ts b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyRequest.ts
index cd44298b563..b96874be72a 100644
--- a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyRequest.ts
+++ b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesEnergyRequest.ts
@@ -1,6 +1,6 @@
// @ts-strict-ignore
+import { format } from "date-fns";
import { ChannelAddress } from "../../type/channeladdress";
-import { format } from 'date-fns';
import { JsonrpcRequest } from "../base";
import { JsonRpcUtils } from "../jsonrpcutils";
@@ -32,8 +32,8 @@ export class QueryHistoricTimeseriesEnergyRequest extends JsonrpcRequest {
) {
super(QueryHistoricTimeseriesEnergyRequest.METHOD, {
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
- fromDate: format(fromDate, 'yyyy-MM-dd'),
- toDate: format(toDate, 'yyyy-MM-dd'),
+ fromDate: format(fromDate, "yyyy-MM-dd"),
+ toDate: format(toDate, "yyyy-MM-dd"),
channels: JsonRpcUtils.channelsToStringArray(channels),
});
// delete local fields, otherwise they are sent with the JSON-RPC Request
diff --git a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesExportXlxs.ts b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesExportXlxs.ts
index eb67e868a7a..5aed2202ec7 100644
--- a/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesExportXlxs.ts
+++ b/ui/src/app/shared/jsonrpc/request/queryHistoricTimeseriesExportXlxs.ts
@@ -1,6 +1,6 @@
// @ts-strict-ignore
-import { format } from 'date-fns';
-import { JsonrpcRequest } from '../base';
+import { format } from "date-fns";
+import { JsonrpcRequest } from "../base";
/**
* Queries historic timeseries data; exports to Xlsx (Excel) file.
@@ -28,8 +28,8 @@ export class QueryHistoricTimeseriesExportXlxsRequest extends JsonrpcRequest {
) {
super(QueryHistoricTimeseriesExportXlxsRequest.METHOD, {
timezone: new Date().getTimezoneOffset() * 60,
- fromDate: format(fromDate, 'yyyy-MM-dd'),
- toDate: format(toDate, 'yyyy-MM-dd'),
+ fromDate: format(fromDate, "yyyy-MM-dd"),
+ toDate: format(toDate, "yyyy-MM-dd"),
});
// delete local fields, otherwise they are sent with the JSON-RPC Request
delete this.fromDate;
diff --git a/ui/src/app/shared/legacy/chartoptions/chartoptions.component.html b/ui/src/app/shared/legacy/chartoptions/chartoptions.component.html
index 33dd2721bb4..02980ba1e0d 100644
--- a/ui/src/app/shared/legacy/chartoptions/chartoptions.component.html
+++ b/ui/src/app/shared/legacy/chartoptions/chartoptions.component.html
@@ -1,3 +1,3 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/legacy/chartoptions/chartoptions.component.ts b/ui/src/app/shared/legacy/chartoptions/chartoptions.component.ts
index b1042ea46e2..bb5399a749b 100644
--- a/ui/src/app/shared/legacy/chartoptions/chartoptions.component.ts
+++ b/ui/src/app/shared/legacy/chartoptions/chartoptions.component.ts
@@ -1,14 +1,14 @@
-import { Component, EventEmitter, Input, Output } from '@angular/core';
-import { PopoverController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
+import { Component, EventEmitter, Input, Output } from "@angular/core";
+import { PopoverController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
-import { Service } from '../../shared';
+import { Service } from "../../shared";
// @ts-strict-ignore
-import { ChartOptionsPopoverComponent } from './popover/popover.component';
+import { ChartOptionsPopoverComponent } from "./popover/popover.component";
@Component({
- selector: 'chartOptions',
- templateUrl: './chartoptions.component.html',
+ selector: "chartOptions",
+ templateUrl: "./chartoptions.component.html",
})
export class ChartOptionsComponent {
@@ -26,10 +26,10 @@ export class ChartOptionsComponent {
async presentPopover(ev: any) {
const componentProps = {};
if (this.showPhases !== null) {
- componentProps['showPhases'] = this.showPhases;
+ componentProps["showPhases"] = this.showPhases;
}
if (this.showTotal !== null) {
- componentProps['showTotal'] = this.showTotal;
+ componentProps["showTotal"] = this.showTotal;
}
const popover = await this.popoverCtrl.create({
component: ChartOptionsPopoverComponent,
@@ -39,14 +39,14 @@ export class ChartOptionsComponent {
});
await popover.present();
popover.onDidDismiss().then((data) => {
- if (data['role'] == "Phases" && data['data'] == true) {
+ if (data["role"] == "Phases" && data["data"] == true) {
this.setShowPhases.emit(true);
- } else if (data['role'] == "Phases" && data['data'] == false) {
+ } else if (data["role"] == "Phases" && data["data"] == false) {
this.setShowPhases.emit(false);
}
- if (data['role'] == "Total" && data['data'] == true) {
+ if (data["role"] == "Total" && data["data"] == true) {
this.setShowTotal.emit(true);
- } else if (data['role'] == "Total" && data['data'] == false) {
+ } else if (data["role"] == "Total" && data["data"] == false) {
this.setShowTotal.emit(false);
}
});
diff --git a/ui/src/app/shared/legacy/chartoptions/popover/popover.component.html b/ui/src/app/shared/legacy/chartoptions/popover/popover.component.html
index 82bd75f8572..94793aee035 100644
--- a/ui/src/app/shared/legacy/chartoptions/popover/popover.component.html
+++ b/ui/src/app/shared/legacy/chartoptions/popover/popover.component.html
@@ -13,4 +13,4 @@
-
\ No newline at end of file
+
diff --git a/ui/src/app/shared/legacy/chartoptions/popover/popover.component.ts b/ui/src/app/shared/legacy/chartoptions/popover/popover.component.ts
index deb9d9c2e4d..5cddb86fbc6 100644
--- a/ui/src/app/shared/legacy/chartoptions/popover/popover.component.ts
+++ b/ui/src/app/shared/legacy/chartoptions/popover/popover.component.ts
@@ -1,11 +1,11 @@
-import { Component, Input } from '@angular/core';
-import { PopoverController } from '@ionic/angular';
-import { TranslateService } from '@ngx-translate/core';
-import { Service } from 'src/app/shared/shared';
+import { Component, Input } from "@angular/core";
+import { PopoverController } from "@ionic/angular";
+import { TranslateService } from "@ngx-translate/core";
+import { Service } from "src/app/shared/shared";
@Component({
- selector: 'chartoptionspopover',
- templateUrl: './popover.component.html',
+ selector: "chartoptionspopover",
+ templateUrl: "./popover.component.html",
})
export class ChartOptionsPopoverComponent {
@@ -24,7 +24,7 @@ export class ChartOptionsPopoverComponent {
} else if (this.showPhases == false) {
this.showPhases = true;
}
- this.popoverCtrl.dismiss(this.showPhases, 'Phases');
+ this.popoverCtrl.dismiss(this.showPhases, "Phases");
}
public setTotal() {
@@ -33,7 +33,7 @@ export class ChartOptionsPopoverComponent {
} else if (this.showTotal == false) {
this.showTotal = true;
}
- this.popoverCtrl.dismiss(this.showTotal, 'Total');
+ this.popoverCtrl.dismiss(this.showTotal, "Total");
}
}
diff --git a/ui/src/app/shared/pipe/classname/classname.pipe.ts b/ui/src/app/shared/pipe/classname/classname.pipe.ts
index 7b966b8add5..dbc78248e44 100644
--- a/ui/src/app/shared/pipe/classname/classname.pipe.ts
+++ b/ui/src/app/shared/pipe/classname/classname.pipe.ts
@@ -1,8 +1,8 @@
// @ts-strict-ignore
-import { Pipe, PipeTransform } from '@angular/core';
+import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
- name: 'classname',
+ name: "classname",
})
export class ClassnamePipe implements PipeTransform {
transform(value, args: string[]): any {
diff --git a/ui/src/app/shared/pipe/formatSecondsToDuration/formatSecondsToDuration.pipe.ts b/ui/src/app/shared/pipe/formatSecondsToDuration/formatSecondsToDuration.pipe.ts
index 2e0b760fa81..85dcbb36b85 100644
--- a/ui/src/app/shared/pipe/formatSecondsToDuration/formatSecondsToDuration.pipe.ts
+++ b/ui/src/app/shared/pipe/formatSecondsToDuration/formatSecondsToDuration.pipe.ts
@@ -1,10 +1,10 @@
-import { DecimalPipe } from '@angular/common';
-import { Pipe, PipeTransform } from '@angular/core';
+import { DecimalPipe } from "@angular/common";
+import { Pipe, PipeTransform } from "@angular/core";
-import { Converter } from '../../components/shared/converter';
+import { Converter } from "../../components/shared/converter";
@Pipe({
- name: 'formatSecondsToDuration',
+ name: "formatSecondsToDuration",
})
export class FormatSecondsToDurationPipe implements PipeTransform {
@@ -17,9 +17,9 @@ export class FormatSecondsToDurationPipe implements PipeTransform {
const hours = Math.floor(minutes / 60);
minutes -= hours * 60;
if (hours <= 23) {
- return this.decimalPipe.transform(hours, '1.0-0') + 'h' + " " + this.decimalPipe.transform(minutes, '1.0-0') + 'm';
+ return this.decimalPipe.transform(hours, "1.0-0") + "h" + " " + this.decimalPipe.transform(minutes, "1.0-0") + "m";
} else {
- return this.decimalPipe.transform(hours, '1.0-0') + 'h';
+ return this.decimalPipe.transform(hours, "1.0-0") + "h";
}
});
}
diff --git a/ui/src/app/shared/pipe/isclass/isclass.pipe.ts b/ui/src/app/shared/pipe/isclass/isclass.pipe.ts
index 03e6012ae38..878c61e1d53 100644
--- a/ui/src/app/shared/pipe/isclass/isclass.pipe.ts
+++ b/ui/src/app/shared/pipe/isclass/isclass.pipe.ts
@@ -1,15 +1,15 @@
-import { Pipe, PipeTransform } from '@angular/core';
+import { Pipe, PipeTransform } from "@angular/core";
/**
* Checks if an object has a property "class" and this property has the value of the given parameter.
* Use like: *ngIf="bridge | isclass:'io.openems.impl.protocol.simulator.SimulatorBridge'"
*/
@Pipe({
- name: 'isclass',
+ name: "isclass",
})
export class IsclassPipe implements PipeTransform {
transform(object: any, classname: string): boolean {
- if (object !== null && typeof object === 'object' && object["class"] && object.class == classname) {
+ if (object !== null && typeof object === "object" && object["class"] && object.class == classname) {
return true;
} else {
return false;
diff --git a/ui/src/app/shared/pipe/keys/keys.pipe.ts b/ui/src/app/shared/pipe/keys/keys.pipe.ts
index 3d4eb68073d..41d220c89af 100644
--- a/ui/src/app/shared/pipe/keys/keys.pipe.ts
+++ b/ui/src/app/shared/pipe/keys/keys.pipe.ts
@@ -1,8 +1,8 @@
// @ts-strict-ignore
-import { Pipe, PipeTransform } from '@angular/core';
+import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
- name: 'keys',
+ name: "keys",
})
export class KeysPipe implements PipeTransform {
transform(value, args: string[]): any {
diff --git a/ui/src/app/shared/pipe/pipe.ts b/ui/src/app/shared/pipe/pipe.ts
index e2fef054ecf..ff8f05002e8 100644
--- a/ui/src/app/shared/pipe/pipe.ts
+++ b/ui/src/app/shared/pipe/pipe.ts
@@ -1,14 +1,14 @@
-import { DecimalPipe } from '@angular/common';
-import { NgModule } from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { ClassnamePipe } from './classname/classname.pipe';
-import { FormatSecondsToDurationPipe } from './formatSecondsToDuration/formatSecondsToDuration.pipe';
-import { IsclassPipe } from './isclass/isclass.pipe';
-import { KeysPipe } from './keys/keys.pipe';
-import { SignPipe } from './sign/sign.pipe';
-import { TypeofPipe } from './typeof/typeof.pipe';
-import { UnitvaluePipe } from './unitvalue/unitvalue.pipe';
-import { VersionPipe } from './version/version.pipe';
+import { DecimalPipe } from "@angular/common";
+import { NgModule } from "@angular/core";
+import { BrowserModule } from "@angular/platform-browser";
+import { ClassnamePipe } from "./classname/classname.pipe";
+import { FormatSecondsToDurationPipe } from "./formatSecondsToDuration/formatSecondsToDuration.pipe";
+import { IsclassPipe } from "./isclass/isclass.pipe";
+import { KeysPipe } from "./keys/keys.pipe";
+import { SignPipe } from "./sign/sign.pipe";
+import { TypeofPipe } from "./typeof/typeof.pipe";
+import { UnitvaluePipe } from "./unitvalue/unitvalue.pipe";
+import { VersionPipe } from "./version/version.pipe";
@NgModule({
imports: [
diff --git a/ui/src/app/shared/pipe/sign/sign.pipe.ts b/ui/src/app/shared/pipe/sign/sign.pipe.ts
index 614ff7c928b..3929ad4997c 100644
--- a/ui/src/app/shared/pipe/sign/sign.pipe.ts
+++ b/ui/src/app/shared/pipe/sign/sign.pipe.ts
@@ -1,8 +1,8 @@
// @ts-strict-ignore
-import { Pipe, PipeTransform } from '@angular/core';
+import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
- name: 'sign',
+ name: "sign",
})
export class SignPipe implements PipeTransform {
transform(value, args: string[]): any {
diff --git a/ui/src/app/shared/pipe/typeof/typeof.pipe.ts b/ui/src/app/shared/pipe/typeof/typeof.pipe.ts
index 7b5c74d4901..288d771169c 100644
--- a/ui/src/app/shared/pipe/typeof/typeof.pipe.ts
+++ b/ui/src/app/shared/pipe/typeof/typeof.pipe.ts
@@ -1,7 +1,7 @@
-import { Pipe, PipeTransform } from '@angular/core';
+import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
- name: 'typeof',
+ name: "typeof",
})
export class TypeofPipe implements PipeTransform {
diff --git a/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.spec.ts b/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.spec.ts
index bba039ef456..5feee1061e0 100644
--- a/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.spec.ts
+++ b/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.spec.ts
@@ -1,36 +1,36 @@
import { DecimalPipe, registerLocaleData } from "@angular/common";
-import localDE from '@angular/common/locales/de';
-import { UnitvaluePipe } from "./unitvalue.pipe";
+import localDE from "@angular/common/locales/de";
import { Language } from "../../type/language";
+import { UnitvaluePipe } from "./unitvalue.pipe";
-describe('UnitvaluePipe', () => {
+describe("UnitvaluePipe", () => {
registerLocaleData(localDE);
const pipe = new UnitvaluePipe(new DecimalPipe(Language.EN.key));
// TODO test for more i18n-locales
// Note: "locale" value in DecimalPipe sets itself to default locale ('en-US') even though we specify our own locales.
- it('transforms "1000 W" to "1.000 W"', () => {
- expect(pipe.transform(1000, 'W')).toBe('1.000' + '\u00A0' + 'W');
+ it("transforms \"1000 W\" to \"1.000 W\"", () => {
+ expect(pipe.transform(1000, "W")).toBe("1.000" + "\u00A0" + "W");
});
- it('transforms "null W" to "- "', () => {
- expect(pipe.transform(null, 'W')).toBe('-' + '\u00A0');
+ it("transforms \"null W\" to \"- \"", () => {
+ expect(pipe.transform(null, "W")).toBe("-" + "\u00A0");
});
- it('transforms "undefined W" to "- "', () => {
- expect(pipe.transform(undefined, 'W')).toBe('-' + '\u00A0');
+ it("transforms \"undefined W\" to \"- \"", () => {
+ expect(pipe.transform(undefined, "W")).toBe("-" + "\u00A0");
});
- it('transforms "abc W" to "- "', () => {
- expect(pipe.transform("abc", 'W')).toBe('-' + '\u00A0');
+ it("transforms \"abc W\" to \"- \"", () => {
+ expect(pipe.transform("abc", "W")).toBe("-" + "\u00A0");
});
- it('transforms non number to "-"', () => {
- expect(pipe.transform(pipe, 'W')).toBe('-' + '\u00A0');
+ it("transforms non number to \"-\"", () => {
+ expect(pipe.transform(pipe, "W")).toBe("-" + "\u00A0");
});
- it('transforms "100 a" to "100 a"', () => {
- expect(pipe.transform(100, 'a')).toBe('100' + '\u00A0' + 'a');
+ it("transforms \"100 a\" to \"100 a\"", () => {
+ expect(pipe.transform(100, "a")).toBe("100" + "\u00A0" + "a");
});
});
diff --git a/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.ts b/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.ts
index dbe9bf0bd64..994ae841eaf 100644
--- a/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.ts
+++ b/ui/src/app/shared/pipe/unitvalue/unitvalue.pipe.ts
@@ -1,10 +1,10 @@
-import { DecimalPipe } from '@angular/common';
-import { Pipe, PipeTransform } from '@angular/core';
+import { DecimalPipe } from "@angular/common";
+import { Pipe, PipeTransform } from "@angular/core";
-import { Language } from '../../type/language';
+import { Language } from "../../type/language";
@Pipe({
- name: 'unitvalue',
+ name: "unitvalue",
})
export class UnitvaluePipe implements PipeTransform {
@@ -12,17 +12,17 @@ export class UnitvaluePipe implements PipeTransform {
transform(value: any, unit: string): any {
if (value == null || value == undefined
- || (typeof value === 'string' && value.trim() === "")
- || typeof value === 'boolean' || isNaN(value)) {
- return '-' + '\u00A0';
+ || (typeof value === "string" && value.trim() === "")
+ || typeof value === "boolean" || isNaN(value)) {
+ return "-" + "\u00A0";
} else {
// Changes the number format based on the language selected.
const locale: string = (Language.getByKey(localStorage.LANGUAGE) ?? Language.DEFAULT).i18nLocaleKey;
- if (unit == 'kWh' || unit == 'kW') {
- return this.decimalPipe.transform(value / 1000, '1.0-1', locale) + '\u00A0' + unit;
+ if (unit == "kWh" || unit == "kW") {
+ return this.decimalPipe.transform(value / 1000, "1.0-1", locale) + "\u00A0" + unit;
} else {
- return this.decimalPipe.transform(value, '1.0-0', locale) + '\u00A0' + unit;
+ return this.decimalPipe.transform(value, "1.0-0", locale) + "\u00A0" + unit;
}
}
}
diff --git a/ui/src/app/shared/pipe/version/version.pipe.spec.ts b/ui/src/app/shared/pipe/version/version.pipe.spec.ts
index 42f5132b22f..af37851c466 100644
--- a/ui/src/app/shared/pipe/version/version.pipe.spec.ts
+++ b/ui/src/app/shared/pipe/version/version.pipe.spec.ts
@@ -1,23 +1,23 @@
import { Role } from "../../type/role";
import { VersionPipe } from "./version.pipe";
-describe('VersionPipe', () => {
+describe("VersionPipe", () => {
const pipe = new VersionPipe();
- it('transforms "2020.1.2-SNAPSHOT" to "2020.1.2" for guest Role', () => {
+ it("transforms \"2020.1.2-SNAPSHOT\" to \"2020.1.2\" for guest Role", () => {
expect(pipe.transform("2020.1.2-SNAPSHOT", Role.GUEST)).toBe("2020.1.2");
});
- it('transforms "2020.1.2-SNAPSHOT" to "2020.1.2" for owner Role', () => {
+ it("transforms \"2020.1.2-SNAPSHOT\" to \"2020.1.2\" for owner Role", () => {
expect(pipe.transform("2020.1.2-SNAPSHOT", "owner")).toBe("2020.1.2");
});
- it('keeps "2020.1.2-SNAPSHOT" for admin Role', () => {
+ it("keeps \"2020.1.2-SNAPSHOT\" for admin Role", () => {
expect(pipe.transform("2020.1.2-SNAPSHOT", Role.ADMIN)).toBe("2020.1.2-SNAPSHOT");
});
- it('keeps "2020.1.2" for any Role', () => {
+ it("keeps \"2020.1.2\" for any Role", () => {
expect(pipe.transform("2020.1.2", Role.GUEST)).toBe("2020.1.2");
expect(pipe.transform("2020.1.2", Role.ADMIN)).toBe("2020.1.2");
});
diff --git a/ui/src/app/shared/pipe/version/version.pipe.ts b/ui/src/app/shared/pipe/version/version.pipe.ts
index 43d07019e82..01a7a757398 100644
--- a/ui/src/app/shared/pipe/version/version.pipe.ts
+++ b/ui/src/app/shared/pipe/version/version.pipe.ts
@@ -1,16 +1,16 @@
-import { Pipe, PipeTransform } from '@angular/core';
+import { Pipe, PipeTransform } from "@angular/core";
-import { Role } from '../../type/role';
+import { Role } from "../../type/role";
@Pipe({
- name: 'version',
+ name: "version",
})
export class VersionPipe implements PipeTransform {
constructor() { }
transform(version: string, role: Role | string): string {
- if (typeof role === 'string') {
+ if (typeof role === "string") {
role = Role.getRole(role);
}
switch (role) {
@@ -18,7 +18,7 @@ export class VersionPipe implements PipeTransform {
case Role.GUEST:
case Role.INSTALLER:
if (version.includes("-")) {
- return version.replace(/^(.*)-.*$/, '$1');
+ return version.replace(/^(.*)-.*$/, "$1");
}
return version;
case Role.ADMIN:
diff --git a/ui/src/app/shared/service/abstractservice.ts b/ui/src/app/shared/service/abstractservice.ts
index 7deaebac604..0db82c0fb92 100644
--- a/ui/src/app/shared/service/abstractservice.ts
+++ b/ui/src/app/shared/service/abstractservice.ts
@@ -1,13 +1,13 @@
// @ts-strict-ignore
-import { ErrorHandler } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { BehaviorSubject } from 'rxjs';
-import { Edge } from '../components/edge/edge';
-import { EdgeConfig } from '../components/edge/edgeconfig';
-import { QueryHistoricTimeseriesEnergyResponse } from '../jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChannelAddress } from '../shared';
-import { Language } from '../type/language';
-import { DefaultTypes } from './defaulttypes';
+import { ErrorHandler } from "@angular/core";
+import { ActivatedRoute } from "@angular/router";
+import { BehaviorSubject } from "rxjs";
+import { Edge } from "../components/edge/edge";
+import { EdgeConfig } from "../components/edge/edgeconfig";
+import { QueryHistoricTimeseriesEnergyResponse } from "../jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChannelAddress } from "../shared";
+import { Language } from "../type/language";
+import { DefaultTypes } from "./defaulttypes";
export abstract class AbstractService extends ErrorHandler {
@@ -33,6 +33,8 @@ export abstract class AbstractService extends ErrorHandler {
/**
* Parses the route params and sets the current edge
+ *
+ * @deprecated use the angular routing module to set page title, getCurrentEdge for retrieving the edge
*/
abstract setCurrentComponent(currentPageTitle: string, activatedRoute: ActivatedRoute): Promise;
@@ -98,6 +100,6 @@ export abstract class AbstractService extends ErrorHandler {
*/
abstract stopSpinner(selector: string);
- abstract toast(message: string, level: 'success' | 'warning' | 'danger');
+ abstract toast(message: string, level: "success" | "warning" | "danger");
}
diff --git a/ui/src/app/shared/service/arrayutils.ts b/ui/src/app/shared/service/arrayutils.ts
index f2bb14e9df2..5fc4e31b654 100644
--- a/ui/src/app/shared/service/arrayutils.ts
+++ b/ui/src/app/shared/service/arrayutils.ts
@@ -21,7 +21,7 @@ export namespace ArrayUtils {
} else if (!bVal) {
return -1;
}
- return aVal.localeCompare(bVal, undefined, { sensitivity: 'accent' });
+ return aVal.localeCompare(bVal, undefined, { sensitivity: "accent" });
});
}
}
diff --git a/ui/src/app/shared/service/defaulttypes.ts b/ui/src/app/shared/service/defaulttypes.ts
index 0236ae8f309..c2551ff2e0b 100644
--- a/ui/src/app/shared/service/defaulttypes.ts
+++ b/ui/src/app/shared/service/defaulttypes.ts
@@ -1,9 +1,9 @@
// @ts-strict-ignore
-import { TranslateService } from '@ngx-translate/core';
-import { endOfMonth, endOfYear, format, getDay, getMonth, getYear, isSameDay, isSameMonth, isSameYear, startOfMonth, startOfYear, subDays } from 'date-fns';
+import { TranslateService } from "@ngx-translate/core";
+import { endOfMonth, endOfYear, format, getDay, getMonth, getYear, isSameDay, isSameMonth, isSameYear, startOfMonth, startOfYear, subDays } from "date-fns";
-import { QueryHistoricTimeseriesEnergyResponse } from '../jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChannelAddress, Service } from '../shared';
+import { QueryHistoricTimeseriesEnergyResponse } from "../jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChannelAddress, Service } from "../shared";
export module DefaultTypes {
@@ -13,7 +13,7 @@ export module DefaultTypes {
[componentId: string]: string[];
}
- export type ManualOnOff = 'MANUAL_ON' | 'MANUAL_OFF';
+ export type ManualOnOff = "MANUAL_ON" | "MANUAL_OFF";
/**
* CurrentData Summary
@@ -94,14 +94,14 @@ export module DefaultTypes {
params?: string[]
}
- export enum PeriodString { DAY = 'day', WEEK = 'week', MONTH = 'month', YEAR = 'year', TOTAL = 'total', CUSTOM = 'custom' }
+ export enum PeriodString { DAY = "day", WEEK = "week", MONTH = "month", YEAR = "year", TOTAL = "total", CUSTOM = "custom" }
/** Values of {@link DefaultTypes.PeriodString} */
export type PeriodStringValues = Exclude<`${DefaultTypes.PeriodString}`, "custom">;
export namespace History {
- export enum YAxisTitle {
+ export enum YAxisType {
PERCENTAGE,
ENERGY,
}
@@ -146,7 +146,7 @@ export module DefaultTypes {
afterTitle?: string
},
/** Name to be displayed on the left y-axis, also the unit to be displayed in tooltips and legend */
- unit: YAxisTitle,
+ unit: YAxisType,
};
}
@@ -165,13 +165,13 @@ export module DefaultTypes {
*/
private static getTranslatedDayString(translate: TranslateService, date: Date): string {
switch (getDay(date)) {
- case 0: return translate.instant('General.Week.sunday');
- case 1: return translate.instant('General.Week.monday');
- case 2: return translate.instant('General.Week.tuesday');
- case 3: return translate.instant('General.Week.wednesday');
- case 4: return translate.instant('General.Week.thursday');
- case 5: return translate.instant('General.Week.friday');
- case 6: return translate.instant('General.Week.saturday');
+ case 0: return translate.instant("General.Week.sunday");
+ case 1: return translate.instant("General.Week.monday");
+ case 2: return translate.instant("General.Week.tuesday");
+ case 3: return translate.instant("General.Week.wednesday");
+ case 4: return translate.instant("General.Week.thursday");
+ case 5: return translate.instant("General.Week.friday");
+ case 6: return translate.instant("General.Week.saturday");
}
}
@@ -183,40 +183,40 @@ export module DefaultTypes {
*/
private static getTranslatedMonthString(translate: TranslateService, date: Date): string {
switch (getMonth(date) + 1) {
- case 1: return translate.instant('General.Month.january');
- case 2: return translate.instant('General.Month.february');
- case 3: return translate.instant('General.Month.march');
- case 4: return translate.instant('General.Month.april');
- case 5: return translate.instant('General.Month.may');
- case 6: return translate.instant('General.Month.june');
- case 7: return translate.instant('General.Month.july');
- case 8: return translate.instant('General.Month.august');
- case 9: return translate.instant('General.Month.september');
- case 10: return translate.instant('General.Month.october');
- case 11: return translate.instant('General.Month.november');
- case 12: return translate.instant('General.Month.december');
+ case 1: return translate.instant("General.Month.january");
+ case 2: return translate.instant("General.Month.february");
+ case 3: return translate.instant("General.Month.march");
+ case 4: return translate.instant("General.Month.april");
+ case 5: return translate.instant("General.Month.may");
+ case 6: return translate.instant("General.Month.june");
+ case 7: return translate.instant("General.Month.july");
+ case 8: return translate.instant("General.Month.august");
+ case 9: return translate.instant("General.Month.september");
+ case 10: return translate.instant("General.Month.october");
+ case 11: return translate.instant("General.Month.november");
+ case 12: return translate.instant("General.Month.december");
}
}
public getText(translate: TranslateService, service: Service): string {
if (service.periodString === DefaultTypes.PeriodString.TOTAL) {
- return translate.instant('Edge.History.TOTAL');
+ return translate.instant("Edge.History.TOTAL");
}
if (isSameDay(this.from, this.to)) {
if (isSameDay(this.from, new Date())) {
// Selected TODAY
- return translate.instant('Edge.History.today') + ", " + format(new Date(), translate.instant('General.dateFormat'));
+ return translate.instant("Edge.History.today") + ", " + format(new Date(), translate.instant("General.dateFormat"));
} else if (isSameDay(this.from, subDays(new Date(), 1))) {
// Selected YESTERDAY
- return translate.instant('Edge.History.yesterday') + ", " + format(this.from, translate.instant('General.dateFormat'));
+ return translate.instant("Edge.History.yesterday") + ", " + format(this.from, translate.instant("General.dateFormat"));
} else {
// Selected one single day
- return HistoryPeriod.getTranslatedDayString(translate, this.from) + ", " + translate.instant('Edge.History.selectedDay', {
- value: format(this.from, translate.instant('General.dateFormat')),
+ return HistoryPeriod.getTranslatedDayString(translate, this.from) + ", " + translate.instant("Edge.History.selectedDay", {
+ value: format(this.from, translate.instant("General.dateFormat")),
});
}
} else if (isSameMonth(this.from, this.to) && isSameDay(this.from, startOfMonth(this.from)) && isSameDay(this.to, endOfMonth(this.to))) {
@@ -230,9 +230,9 @@ export module DefaultTypes {
else {
return translate.instant(
- 'General.periodFromTo', {
- value1: format(this.from, translate.instant('General.dateFormat')),
- value2: format(this.to, translate.instant('General.dateFormat')),
+ "General.periodFromTo", {
+ value1: format(this.from, translate.instant("General.dateFormat")),
+ value2: format(this.to, translate.instant("General.dateFormat")),
});
}
}
@@ -244,3 +244,5 @@ export type TKeyValue = {
key: string,
value: T
};
+/** */
+export type PropType = TObj[TProp];
diff --git a/ui/src/app/shared/service/globalRouteChangeHandler.ts b/ui/src/app/shared/service/globalRouteChangeHandler.ts
index af6db888e34..17d628c4fa7 100644
--- a/ui/src/app/shared/service/globalRouteChangeHandler.ts
+++ b/ui/src/app/shared/service/globalRouteChangeHandler.ts
@@ -2,12 +2,12 @@
import { Injectable } from "@angular/core";
import { Router, RoutesRecognized } from "@angular/router";
import { TranslateService } from "@ngx-translate/core";
-import { filter, map } from 'rxjs/operators';
+import { filter, map } from "rxjs/operators";
import { Service } from "./service";
@Injectable({
- providedIn: 'root',
+ providedIn: "root",
})
export class GlobalRouteChangeHandler {
@@ -21,19 +21,18 @@ export class GlobalRouteChangeHandler {
filter(event => event instanceof RoutesRecognized),
map(event => {
let data = null;
- let route = event['state'].root;
+ let route = event["state"].root;
while (route) {
data = route.data || data;
route = route.firstChild;
}
-
return data;
}),
).subscribe(e => {
if (e.navbarTitle != null && e.navbarTitleToBeTranslated != null) {
- throw new Error('Either use navbarTitle or navbarTitleToBeTranslated');
+ throw new Error("Either use navbarTitle or navbarTitleToBeTranslated");
}
this.service.currentPageTitle = e.navbarTitle ?? (e.navbarTitleToBeTranslated ? translate.instant(e.navbarTitleToBeTranslated) : null) ?? this.service.currentPageTitle;
diff --git a/ui/src/app/shared/service/pagination.ts b/ui/src/app/shared/service/pagination.ts
index 61d1f1aea1c..ed549837116 100644
--- a/ui/src/app/shared/service/pagination.ts
+++ b/ui/src/app/shared/service/pagination.ts
@@ -1,9 +1,9 @@
// @ts-strict-ignore
-import { Directive } from '@angular/core';
-import { Router } from '@angular/router';
-import { SubscribeEdgesRequest } from '../jsonrpc/request/subscribeEdgesRequest';
-import { ChannelAddress, Edge } from '../shared';
-import { Service } from './service';
+import { Directive } from "@angular/core";
+import { Router } from "@angular/router";
+import { SubscribeEdgesRequest } from "../jsonrpc/request/subscribeEdgesRequest";
+import { ChannelAddress, Edge } from "../shared";
+import { Service } from "./service";
@Directive()
export class Pagination {
@@ -22,13 +22,13 @@ export class Pagination {
this.edge = edge;
this.service.websocket.sendRequest(new SubscribeEdgesRequest({ edges: [edge.id] }));
}).then(() => {
- this.edge.subscribeChannels(this.service.websocket, '', [
- new ChannelAddress('_sum', 'State'),
+ this.edge.subscribeChannels(this.service.websocket, "", [
+ new ChannelAddress("_sum", "State"),
]);
})
.finally(resolve)
.catch(() => {
- this.router.navigate(['index']);
+ this.router.navigate(["index"]);
});
});
}
diff --git a/ui/src/app/shared/service/service.ts b/ui/src/app/shared/service/service.ts
index a0efd655628..67ce8b1a64f 100644
--- a/ui/src/app/shared/service/service.ts
+++ b/ui/src/app/shared/service/service.ts
@@ -1,32 +1,32 @@
// @ts-strict-ignore
-import { registerLocaleData } from '@angular/common';
-import { Injectable } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ToastController } from '@ionic/angular';
-import { LangChangeEvent, TranslateService } from '@ngx-translate/core';
-import { NgxSpinnerService } from 'ngx-spinner';
-import { BehaviorSubject, Subject } from 'rxjs';
-import { filter, first, take } from 'rxjs/operators';
-import { ChosenFilter } from 'src/app/index/filter/filter.component';
-import { environment } from 'src/environments';
-
-import { Edge } from '../components/edge/edge';
-import { EdgeConfig } from '../components/edge/edgeconfig';
-import { JsonrpcResponseError } from '../jsonrpc/base';
-import { GetEdgeRequest } from '../jsonrpc/request/getEdgeRequest';
-import { GetEdgesRequest } from '../jsonrpc/request/getEdgesRequest';
-import { QueryHistoricTimeseriesEnergyRequest } from '../jsonrpc/request/queryHistoricTimeseriesEnergyRequest';
-import { GetEdgeResponse } from '../jsonrpc/response/getEdgeResponse';
-import { GetEdgesResponse } from '../jsonrpc/response/getEdgesResponse';
-import { QueryHistoricTimeseriesEnergyResponse } from '../jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { User } from '../jsonrpc/shared';
-import { ChannelAddress } from '../shared';
-import { Language } from '../type/language';
-import { Role } from '../type/role';
-import { DateUtils } from '../utils/date/dateutils';
-import { AbstractService } from './abstractservice';
-import { DefaultTypes } from './defaulttypes';
-import { Websocket } from './websocket';
+import { registerLocaleData } from "@angular/common";
+import { Injectable } from "@angular/core";
+import { ActivatedRoute, Router } from "@angular/router";
+import { ToastController } from "@ionic/angular";
+import { LangChangeEvent, TranslateService } from "@ngx-translate/core";
+import { NgxSpinnerService } from "ngx-spinner";
+import { BehaviorSubject, Subject } from "rxjs";
+import { filter, first, take } from "rxjs/operators";
+import { ChosenFilter } from "src/app/index/filter/filter.component";
+import { environment } from "src/environments";
+import { ChartConstants } from "../components/chart/chart.constants";
+import { Edge } from "../components/edge/edge";
+import { EdgeConfig } from "../components/edge/edgeconfig";
+import { JsonrpcResponseError } from "../jsonrpc/base";
+import { GetEdgeRequest } from "../jsonrpc/request/getEdgeRequest";
+import { GetEdgesRequest } from "../jsonrpc/request/getEdgesRequest";
+import { QueryHistoricTimeseriesEnergyRequest } from "../jsonrpc/request/queryHistoricTimeseriesEnergyRequest";
+import { GetEdgeResponse } from "../jsonrpc/response/getEdgeResponse";
+import { GetEdgesResponse } from "../jsonrpc/response/getEdgesResponse";
+import { QueryHistoricTimeseriesEnergyResponse } from "../jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { User } from "../jsonrpc/shared";
+import { ChannelAddress } from "../shared";
+import { Language } from "../type/language";
+import { Role } from "../type/role";
+import { DateUtils } from "../utils/date/dateutils";
+import { AbstractService } from "./abstractservice";
+import { DefaultTypes } from "./defaulttypes";
+import { Websocket } from "./websocket";
@Injectable()
export class Service extends AbstractService {
@@ -55,6 +55,7 @@ export class Service extends AbstractService {
public deviceWidth: number = 0;
public isSmartphoneResolution: boolean = false;
public isSmartphoneResolutionSubject: Subject = new Subject();
+ public activeQueryData: string;
/**
* Holds the currenty selected Page Title.
@@ -148,9 +149,9 @@ export class Service extends AbstractService {
return new Promise((resolve, reject) => {
// Set the currentPageTitle only once per ActivatedRoute
if (this.currentActivatedRoute != activatedRoute) {
- if (typeof currentPageTitle === 'string') {
+ if (typeof currentPageTitle === "string") {
// Use given page title directly
- if (currentPageTitle == null || currentPageTitle.trim() === '') {
+ if (currentPageTitle == null || currentPageTitle.trim() === "") {
this.currentPageTitle = environment.uiTitle;
} else {
this.currentPageTitle = currentPageTitle;
@@ -197,7 +198,7 @@ export class Service extends AbstractService {
public onLogout() {
this.currentEdge.next(null);
this.metadata.next(null);
- this.router.navigate(['/login']);
+ this.router.navigate(["/login"]);
}
public getChannelAddresses(edge: Edge, channels: ChannelAddress[]): Promise {
@@ -215,22 +216,27 @@ export class Service extends AbstractService {
promise.resolve = resolve;
promise.reject = reject;
});
- this.queryEnergyQueue.push(
- { fromDate: fromDate, toDate: toDate, channels: channels, promises: [promise] },
- );
- // try to merge requests within 100 ms
+ this.queryEnergyQueue.push({
+ fromDate: fromDate,
+ toDate: toDate,
+ channels: channels,
+ promises: [promise],
+ });
+
if (this.queryEnergyTimeout == null) {
this.queryEnergyTimeout = setTimeout(() => {
-
this.queryEnergyTimeout = null;
- // merge requests
const mergedRequests: {
- fromDate: Date, toDate: Date, channels: ChannelAddress[], promises: { resolve, reject }[];
+ fromDate: Date,
+ toDate: Date,
+ channels: ChannelAddress[],
+ promises: { resolve, reject }[];
}[] = [];
+
let request;
while ((request = this.queryEnergyQueue.pop())) {
- if (mergedRequests.length == 0) {
+ if (mergedRequests.length === 0) {
mergedRequests.push(request);
} else {
let merged = false;
@@ -240,14 +246,9 @@ export class Service extends AbstractService {
// same date -> merge
mergedRequest.promises = mergedRequest.promises.concat(request.promises);
for (const newChannel of request.channels) {
- let isAlreadyThere = false;
- for (const existingChannel of mergedRequest.channels) {
- if (existingChannel.channelId == newChannel.channelId && existingChannel.componentId == newChannel.componentId) {
- isAlreadyThere = true;
- break;
- }
- }
- if (!isAlreadyThere) {
+ if (!mergedRequest.channels.some(existingChannel =>
+ existingChannel.channelId === newChannel.channelId &&
+ existingChannel.componentId === newChannel.componentId)) {
mergedRequest.channels.push(newChannel);
}
}
@@ -265,30 +266,44 @@ export class Service extends AbstractService {
for (const source of mergedRequests) {
// Jump to next request for empty channelAddresses
- if (source.channels.length == 0) {
+ if (source.channels.length === 0) {
continue;
}
- const request = new QueryHistoricTimeseriesEnergyRequest(DateUtils.maxDate(source.fromDate, edge?.firstSetupProtocol), source.toDate, source.channels);
- edge.sendRequest(this.websocket, request).then(response => {
- const result = (response as QueryHistoricTimeseriesEnergyResponse).result;
- if (Object.keys(result.data).length != 0) {
+ const request = new QueryHistoricTimeseriesEnergyRequest(
+ DateUtils.maxDate(source.fromDate, edge?.firstSetupProtocol),
+ source.toDate,
+ source.channels,
+ );
+
+ this.activeQueryData = request.id;
+ edge.sendRequest(this.websocket, request)
+ .then(response => {
+ if (this.activeQueryData !== response.id) {
+ return;
+ }
+
+ const result = (response as QueryHistoricTimeseriesEnergyResponse).result;
+
+ if (Object.keys(result.data).length === 0) {
+ for (const promise of source.promises) {
+ promise.reject(new JsonrpcResponseError(response.id, { code: 0, message: "Result was empty" }));
+ }
+ return;
+ }
+
for (const promise of source.promises) {
promise.resolve(response as QueryHistoricTimeseriesEnergyResponse);
}
- } else {
+ })
+ .catch(async reason => {
for (const promise of source.promises) {
- promise.reject(new JsonrpcResponseError(response.id, { code: 0, message: "Result was empty" }));
+ promise.reject(new JsonrpcResponseError((await response).id, { code: 0, message: "Result was empty" }));
}
- }
- }).catch(reason => {
- for (const promise of source.promises) {
- promise.reject(reason);
- }
- });
+ });
}
});
- }, 100);
+ }, ChartConstants.REQUEST_TIMEOUT);
}
return response;
}
@@ -301,7 +316,7 @@ export class Service extends AbstractService {
* @param limit the number of edges to be retrieved
* @returns a Promise
*/
- public getEdges(page: number, query?: string, limit?: number, searchParamsObj?: { [id: string]: ChosenFilter['value'] }): Promise {
+ public getEdges(page: number, query?: string, limit?: number, searchParamsObj?: { [id: string]: ChosenFilter["value"] }): Promise {
return new Promise((resolve, reject) => {
this.websocket.sendSafeRequest(
new GetEdgesRequest({
@@ -399,12 +414,12 @@ export class Service extends AbstractService {
this.spinner.hide(selector);
}
- public async toast(message: string, level: 'success' | 'warning' | 'danger', duration?: number) {
+ public async toast(message: string, level: "success" | "warning" | "danger", duration?: number) {
const toast = await this.toaster.create({
message: message,
color: level,
duration: duration ?? 2000,
- cssClass: 'container',
+ cssClass: "container",
});
toast.present();
}
diff --git a/ui/src/app/shared/service/test/dummyservice.ts b/ui/src/app/shared/service/test/dummyservice.ts
index e8b9cdc102f..58101b949a1 100644
--- a/ui/src/app/shared/service/test/dummyservice.ts
+++ b/ui/src/app/shared/service/test/dummyservice.ts
@@ -1,7 +1,6 @@
import { ActivatedRoute } from "@angular/router";
import { BehaviorSubject } from "rxjs";
import { SumState } from "src/app/index/shared/sumState";
-
import { QueryHistoricTimeseriesEnergyResponse } from "../../jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
import { ChannelAddress, Edge, EdgeConfig } from "../../shared";
import { Language } from "../../type/language";
@@ -62,8 +61,8 @@ export class DummyService extends AbstractService {
isPartnerAllowed(edge: Edge): boolean {
throw new Error("Method not implemented.");
}
- // https://v16.angular.io/api/core/ErrorHandler#errorhandler
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ // https://v16.angular.io/api/core/ErrorHandler#errorhandler
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
override handleError(error: any): void {
throw new Error("Method not implemented.");
}
diff --git a/ui/src/app/shared/service/test/dummywebsocket.ts b/ui/src/app/shared/service/test/dummywebsocket.ts
index 04f579818f3..56d91ec80f1 100644
--- a/ui/src/app/shared/service/test/dummywebsocket.ts
+++ b/ui/src/app/shared/service/test/dummywebsocket.ts
@@ -1,4 +1,4 @@
-import { JsonrpcRequest, JsonrpcResponseSuccess, JsonrpcNotification } from "../../jsonrpc/base";
+import { JsonrpcNotification, JsonrpcRequest, JsonrpcResponseSuccess } from "../../jsonrpc/base";
import { AuthenticateWithPasswordRequest } from "../../jsonrpc/request/authenticateWithPasswordRequest";
import { AuthenticateWithTokenRequest } from "../../jsonrpc/request/authenticateWithTokenRequest";
import { WebsocketInterface } from "../websocketInterface";
diff --git a/ui/src/app/shared/service/utils.spec.ts b/ui/src/app/shared/service/utils.spec.ts
index c42d551b244..3034ab95019 100644
--- a/ui/src/app/shared/service/utils.spec.ts
+++ b/ui/src/app/shared/service/utils.spec.ts
@@ -3,9 +3,9 @@ import { DummyConfig } from "../components/edge/edgeconfig.spec";
import { EdgeConfig } from "../shared";
import { HistoryUtils, Utils } from "./utils";
-describe('Utils', () => {
+describe("Utils", () => {
- it('#subtractSafely', () => {
+ it("#subtractSafely", () => {
expect(Utils.subtractSafely(null, null)).toEqual(null);
expect(Utils.subtractSafely(null, undefined)).toEqual(null);
expect(Utils.subtractSafely(0, null)).toEqual(0);
@@ -22,35 +22,35 @@ describe('Utils', () => {
);
const channelData: HistoryUtils.ChannelData = {
- 'ConsumptionActivePower': [null, null, null, 565, 560, 561, 573],
- 'evcs0/ChargePower': [null, null, null, 0, 0, 0, 100],
- 'evcs1/ChargePower': [null, null, null, 0, 0, 0, 0],
- 'meter0/ActivePower': [124, 0, null, 0, 173, 0, 100],
- 'meter1/ActivePower': [124, 0, null, 0, 173, 0, 0],
+ "ConsumptionActivePower": [null, null, null, 565, 560, 561, 573],
+ "evcs0/ChargePower": [null, null, null, 0, 0, 0, 100],
+ "evcs1/ChargePower": [null, null, null, 0, 0, 0, 0],
+ "meter0/ActivePower": [124, 0, null, 0, 173, 0, 100],
+ "meter1/ActivePower": [124, 0, null, 0, 173, 0, 0],
};
const evcsComponents: EdgeConfig.Component[] = dummyConfig.getComponentsImplementingNature("io.openems.edge.evcs.api.Evcs")
.filter(component => !(
- component.factoryId == 'Evcs.Cluster' ||
- component.factoryId == 'Evcs.Cluster.PeakShaving' ||
- component.factoryId == 'Evcs.Cluster.SelfConsumption'));
+ component.factoryId == "Evcs.Cluster" ||
+ component.factoryId == "Evcs.Cluster.PeakShaving" ||
+ component.factoryId == "Evcs.Cluster.SelfConsumption"));
const consumptionMeterComponents: EdgeConfig.Component[] = dummyConfig.getComponentsImplementingNature("io.openems.edge.meter.api.ElectricityMeter")
.filter(component => component.isEnabled && dummyConfig.isTypeConsumptionMetered(component));
- it('+calculateOtherConsumption - evcs + consumptionMeters', () => {
+ it("+calculateOtherConsumption - evcs + consumptionMeters", () => {
const expectedResult = [null, null, null, 565, 214, 561, 373];
expect(Utils.calculateOtherConsumption(channelData, evcsComponents, consumptionMeterComponents)).toEqual(expectedResult);
});
- it('+calculateOtherConsumption - only consumptionMeters', () => {
+ it("+calculateOtherConsumption - only consumptionMeters", () => {
const expectedResult2 = [null, null, null, 565, 214, 561, 473];
expect(Utils.calculateOtherConsumption(channelData, [], consumptionMeterComponents)).toEqual(expectedResult2);
});
- it('+calculateOtherConsumption - only evcs', () => {
+ it("+calculateOtherConsumption - only evcs", () => {
const expectedResult3 = [null, null, null, 565, 560, 561, 473];
expect(Utils.calculateOtherConsumption(channelData, evcsComponents, [])).toEqual(expectedResult3);
});
- it('+calculateOtherConsumption - no evcs + no consumptionMeters', () => {
+ it("+calculateOtherConsumption - no evcs + no consumptionMeters", () => {
const expectedResult4 = [null, null, null, 565, 560, 561, 573];
expect(Utils.calculateOtherConsumption(channelData, [], [])).toEqual(expectedResult4);
});
diff --git a/ui/src/app/shared/service/utils.ts b/ui/src/app/shared/service/utils.ts
index 67a0376141f..36f44a37d47 100644
--- a/ui/src/app/shared/service/utils.ts
+++ b/ui/src/app/shared/service/utils.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
-import { formatNumber } from '@angular/common';
-import { TranslateService } from '@ngx-translate/core';
-import { ChartDataset } from 'chart.js';
-import { saveAs } from 'file-saver-es';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
+import { formatNumber } from "@angular/common";
+import { TranslateService } from "@ngx-translate/core";
+import { ChartDataset } from "chart.js";
+import { saveAs } from "file-saver-es";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
-import { JsonrpcResponseSuccess } from '../jsonrpc/base';
-import { Base64PayloadResponse } from '../jsonrpc/response/base64PayloadResponse';
-import { QueryHistoricTimeseriesEnergyResponse } from '../jsonrpc/response/queryHistoricTimeseriesEnergyResponse';
-import { ChannelAddress, Currency, EdgeConfig } from '../shared';
+import { JsonrpcResponseSuccess } from "../jsonrpc/base";
+import { Base64PayloadResponse } from "../jsonrpc/response/base64PayloadResponse";
+import { QueryHistoricTimeseriesEnergyResponse } from "../jsonrpc/response/queryHistoricTimeseriesEnergyResponse";
+import { ChannelAddress, Currency, EdgeConfig } from "../shared";
export class Utils {
@@ -111,7 +111,7 @@ export class Utils {
* @param values the values
* @returns a number, if at least one value is not null, else null
*/
- public static subtractSafely(...values: (number | null)[]): number {
+ public static subtractSafely(...values: (number | null)[]): number | null {
return values
.filter(value => value !== null && value !== undefined)
.reduce((sum, curr) => {
@@ -131,7 +131,7 @@ export class Utils {
* @param v1
* @param v2
*/
- public static divideSafely(v1: number, v2: number): number | null {
+ public static divideSafely(v1: number | null, v2: number | null): number | null {
if (v1 == null || v2 == null) {
return null;
} else if (v2 == 0) {
@@ -184,15 +184,30 @@ export class Utils {
* Safely rounds a - possibly 'null' - value: Math.round(v)
*
* @param v
+ * @returns the rounded value, null if value is invalid
*/
- public static roundSafely(v: number): number {
+ public static roundSafely(v: number | null): number | null {
if (v == null) {
- return v;
+ return null;
} else {
return Math.round(v);
}
}
+ /**
+ * Safely floors a - possibly 'null' - value: Math.floor(v)
+ *
+ * @param v
+ * @returns the floored value, null if value is invalid
+ */
+ public static floorSafely(v: number | null): number | null {
+ if (v == null) {
+ return null;
+ } else {
+ return Math.floor(v);
+ }
+ }
+
/**
* Gets the value; or if it is null, gets the 'orElse' value
*
@@ -238,11 +253,11 @@ export class Utils {
*/
public static CONVERT_TO_WATT = (value: number | null): string => {
if (value == null) {
- return '-';
+ return "-";
} else if (value >= 0) {
- return formatNumber(value, 'de', '1.0-0') + ' W';
+ return formatNumber(value, "de", "1.0-0") + " W";
} else {
- return '0 W';
+ return "0 W";
}
};
@@ -254,14 +269,14 @@ export class Utils {
*/
public static CONVERT_WATT_TO_KILOWATT = (value: number | null): string => {
if (value == null) {
- return '-';
+ return "-";
}
const thisValue: number = (value / 1000);
if (thisValue >= 0) {
- return formatNumber(thisValue, 'de', '1.0-1') + ' kW';
+ return formatNumber(thisValue, "de", "1.0-1") + " kW";
} else {
- return '0 kW';
+ return "0 kW";
}
};
@@ -282,7 +297,7 @@ export class Utils {
* @returns converted value
*/
public static CONVERT_TO_PERCENT = (value: any): string => {
- return value + ' %';
+ return value + " %";
};
/**
@@ -292,7 +307,7 @@ export class Utils {
* @returns converted value
*/
public static CONVERT_TO_WATTHOURS = (value: number): string => {
- return formatNumber(value, 'de', '1.0-1') + ' Wh';
+ return formatNumber(value, "de", "1.0-1") + " Wh";
};
/**
@@ -302,7 +317,7 @@ export class Utils {
* @returns converted value
*/
public static CONVERT_TO_KILO_WATTHOURS = (value: number): string => {
- return formatNumber(Utils.divideSafely(value, 1000), 'de', '1.0-1') + ' kWh';
+ return formatNumber(Utils.divideSafely(value, 1000), "de", "1.0-1") + " kWh";
};
/**
@@ -313,12 +328,12 @@ export class Utils {
*/
public static CONVERT_MANUAL_ON_OFF = (translate: TranslateService) => {
return (value: DefaultTypes.ManualOnOff): string => {
- if (value === 'MANUAL_ON') {
- return translate.instant('General.on');
- } else if (value === 'MANUAL_OFF') {
- return translate.instant('General.off');
+ if (value === "MANUAL_ON") {
+ return translate.instant("General.on");
+ } else if (value === "MANUAL_OFF") {
+ return translate.instant("General.off");
} else {
- return '-';
+ return "-";
}
};
};
@@ -332,9 +347,9 @@ export class Utils {
*/
public static convertChargeDischargePower(translate: TranslateService, power: number): { name: string, value: number } {
if (power >= 0) {
- return { name: translate.instant('General.dischargePower'), value: power };
+ return { name: translate.instant("General.dischargePower"), value: power };
} else {
- return { name: translate.instant('General.chargePower'), value: power * -1 };
+ return { name: translate.instant("General.chargePower"), value: power * -1 };
}
}
@@ -347,14 +362,14 @@ export class Utils {
*/
public static CONVERT_MODE_TO_MANUAL_OFF_AUTOMATIC = (translate: TranslateService) => {
return (value: any): string => {
- if (value === 'MANUAL') {
- return translate.instant('General.manually');
- } else if (value === 'OFF') {
- return translate.instant('General.off');
- } else if (value === 'AUTOMATIC') {
- return translate.instant('General.automatic');
+ if (value === "MANUAL") {
+ return translate.instant("General.manually");
+ } else if (value === "OFF") {
+ return translate.instant("General.off");
+ } else if (value === "AUTOMATIC") {
+ return translate.instant("General.automatic");
} else {
- return '-';
+ return "-";
}
};
};
@@ -369,7 +384,7 @@ export class Utils {
const date: Date = new Date();
date.setHours(0, 0, 0, 0);
date.setMinutes(value);
- return date.toLocaleTimeString(translate.getBrowserCultureLang(), { hour: '2-digit', minute: '2-digit' });
+ return date.toLocaleTimeString(translate.getBrowserCultureLang(), { hour: "2-digit", minute: "2-digit" });
};
};
@@ -382,7 +397,7 @@ export class Utils {
*/
public static CONVERT_PRICE_TO_CENT_PER_KWH = (decimal: number, label: string) => {
return (value: number | null): string =>
- (!value ? "-" : formatNumber(value / 10, 'de', '1.0-' + decimal)) + ' ' + label;
+ (!value ? "-" : formatNumber(value / 10, "de", "1.0-" + decimal)) + " " + label;
};
/**
@@ -395,11 +410,11 @@ export class Utils {
return (value: any): string => {
switch (Math.round(value)) {
case 0:
- return translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE');
+ return translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE");
case 3:
- return translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID');
+ return translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID");
default: // Usually "1"
- return translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING');
+ return translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING");
}
};
};
@@ -412,17 +427,17 @@ export class Utils {
*/
public static getStorageSocSegment(soc: number | null): string {
if (!soc || soc < 10) {
- return '0';
+ return "0";
} else if (soc < 30) {
- return '20';
+ return "20";
} else if (soc < 50) {
- return '40';
+ return "40";
} else if (soc < 70) {
- return '60';
+ return "60";
} else if (soc < 90) {
- return '80';
+ return "80";
} else {
- return '100';
+ return "100";
}
}
@@ -435,7 +450,7 @@ export class Utils {
public static downloadXlsx(response: Base64PayloadResponse, filename: string) {
// decode base64 string, remove space for IE compatibility
// source: https://stackoverflow.com/questions/36036280/base64-representing-pdf-to-blob-javascript/45872086
- const binary = atob(response.result.payload.replace(/\s/g, ''));
+ const binary = atob(response.result.payload.replace(/\s/g, ""));
const len = binary.length;
const buffer = new ArrayBuffer(len);
const view = new Uint8Array(buffer);
@@ -443,10 +458,10 @@ export class Utils {
view[i] = binary.charCodeAt(i);
}
const data: Blob = new Blob([view], {
- type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8',
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8",
});
- saveAs(data, filename + '.xlsx');
+ saveAs(data, filename + ".xlsx");
}
/*
@@ -538,7 +553,7 @@ export class Utils {
}
public static isDataEmpty(arg: JsonrpcResponseSuccess): boolean {
- return Object.values(arg.result['data'])?.map(element => element as number[])?.every(element => element?.every(elem => elem == null) ?? true);
+ return Object.values(arg.result["data"])?.map(element => element as number[])?.every(element => element?.every(elem => elem == null) ?? true);
}
/**
@@ -555,17 +570,17 @@ export class Utils {
let totalEvcsConsumption: number = 0;
let totalMeteredConsumption: number = 0;
evcsComponents.forEach(component => {
- totalEvcsConsumption = this.addSafely(totalEvcsConsumption, energyValues.result.data[component.id + '/ActiveConsumptionEnergy']);
+ totalEvcsConsumption = this.addSafely(totalEvcsConsumption, energyValues.result.data[component.id + "/ActiveConsumptionEnergy"]);
});
consumptionMeterComponents.forEach(meter => {
- totalMeteredConsumption = this.addSafely(totalMeteredConsumption, energyValues.result.data[meter.id + '/ActiveProductionEnergy']);
+ totalMeteredConsumption = this.addSafely(totalMeteredConsumption, energyValues.result.data[meter.id + "/ActiveProductionEnergy"]);
});
return Utils.roundSlightlyNegativeValues(
Utils.subtractSafely(
Utils.subtractSafely(
- energyValues.result.data['_sum/ConsumptionActiveEnergy'], totalEvcsConsumption),
+ energyValues.result.data["_sum/ConsumptionActiveEnergy"], totalEvcsConsumption),
totalMeteredConsumption));
}
@@ -585,18 +600,18 @@ export class Utils {
const totalMeteredConsumption: number[] = [];
evcsComponents.forEach(component => {
- channelData[component.id + '/ChargePower']?.forEach((value, index) => {
+ channelData[component.id + "/ChargePower"]?.forEach((value, index) => {
totalMeteredConsumption[index] = Utils.addSafely(totalMeteredConsumption[index], value);
});
});
consumptionMeterComponents.forEach(meter => {
- channelData[meter.id + '/ActivePower']?.forEach((value, index) => {
+ channelData[meter.id + "/ActivePower"]?.forEach((value, index) => {
totalMeteredConsumption[index] = Utils.addSafely(totalMeteredConsumption[index], value);
});
});
- return channelData['ConsumptionActivePower']?.map((value, index) => {
+ return channelData["ConsumptionActivePower"]?.map((value, index) => {
if (value == null) {
return null;
@@ -610,7 +625,7 @@ export class Utils {
}
}
-export enum YAxisTitle {
+export enum YAxisType {
NONE,
POWER,
PERCENTAGE,
@@ -623,9 +638,9 @@ export enum YAxisTitle {
}
export enum ChartAxis {
- LEFT = 'left',
- RIGHT = 'right',
- RIGHT_2 = 'right2',
+ LEFT = "left",
+ RIGHT = "right",
+ RIGHT_2 = "right2",
}
export namespace HistoryUtils {
@@ -671,7 +686,9 @@ export namespace HistoryUtils {
noStrokeThroughLegendIfHidden?: boolean,
/** color in rgb-Format */
color: string,
- /** the stack for barChart, if not provided datasets are not stacked but overlaying each other */
+ /**
+ * The stack/stacks for this dataset to be displayed, if not provided datasets are not stacked but overlaying each other
+ */
stack?: number | number[],
/** False per default */
hideLabelInLegend?: boolean,
@@ -695,9 +712,9 @@ export namespace HistoryUtils {
};
export interface CustomOptions {
- unit?: YAxisTitle,
+ unit?: YAxisType,
/** overrides global charttype */
- type?: 'line' | 'bar',
+ type?: "line" | "bar",
/** overrides global formatNumber */
formatNumber?: string,
}
@@ -707,7 +724,7 @@ export namespace HistoryUtils {
}
export interface BoxCustomOptions extends PluginCustomOptions {
- pluginType: 'box',
+ pluginType: "box",
annotations: {
/** Start date string in ISO-format */
xMin: string | number,
@@ -720,6 +737,13 @@ export namespace HistoryUtils {
}[];
}
+ export interface DataLabelsCustomOptions extends PluginCustomOptions {
+ pluginType: "datalabels",
+ datalabels: {
+ displayUnit: string,
+ },
+ }
+
/**
* Data from a subscription to Channel or from a historic data query.
*
@@ -744,10 +768,11 @@ export namespace HistoryUtils {
export type yAxes = {
/** Name to be displayed on the left y-axis, also the unit to be displayed in tooltips and legend */
- unit: YAxisTitle,
- customTitle?: string,
- position: 'left' | 'right' | 'bottom' | 'top',
+ unit: YAxisType,
+ position: "left" | "right" | "bottom" | "top",
yAxisId: ChartAxis,
+ /** YAxis title -> {@link https://www.chartjs.org/docs/latest/samples/scale-options/titles.html Chartjs Title} */
+ customTitle?: string
/** Default: true */
displayGrid?: boolean
};
@@ -835,27 +860,27 @@ export namespace TimeOfUseTariffUtils {
return;
}
- const socLabel = translate.instant('General.soc');
- const dischargeLabel = translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE');
- const chargeConsumptionLabel = translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID');
- const balancingLabel = translate.instant('Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING');
- const gridBuyLabel = translate.instant('General.gridBuy');
+ const socLabel = translate.instant("General.soc");
+ const dischargeLabel = translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.DELAY_DISCHARGE");
+ const chargeConsumptionLabel = translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.CHARGE_GRID");
+ const balancingLabel = translate.instant("Edge.Index.Widgets.TIME_OF_USE_TARIFF.STATE.BALANCING");
+ const gridBuyLabel = translate.instant("General.gridBuy");
// Switch case to handle different labels
switch (label) {
case socLabel:
- return label + ": " + formatNumber(value, 'de', '1.0-0') + " %";
+ return label + ": " + formatNumber(value, "de", "1.0-0") + " %";
case dischargeLabel:
case chargeConsumptionLabel:
case balancingLabel:
// Show floating point number for values between 0 and 1
- return label + ": " + formatNumber(value, 'de', '1.0-4') + " " + currencyLabel;
+ return label + ": " + formatNumber(value, "de", "1.0-4") + " " + currencyLabel;
default:
case gridBuyLabel:
// Power values
- return label + ": " + formatNumber(value, 'de', '1.0-2') + " kW";
+ return label + ": " + formatNumber(value, "de", "1.0-2") + " kW";
}
}
diff --git a/ui/src/app/shared/service/websocket.ts b/ui/src/app/shared/service/websocket.ts
index 4c6fc1424ce..a79deefeb77 100644
--- a/ui/src/app/shared/service/websocket.ts
+++ b/ui/src/app/shared/service/websocket.ts
@@ -1,42 +1,44 @@
// @ts-strict-ignore
-import { Injectable } from '@angular/core';
-import { Router } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { CookieService } from 'ngx-cookie-service';
-import { delay, retryWhen } from 'rxjs/operators';
-import { webSocket, WebSocketSubject } from 'rxjs/webSocket';
+import { Injectable } from "@angular/core";
+import { Router } from "@angular/router";
+import { TranslateService } from "@ngx-translate/core";
+import { CookieService } from "ngx-cookie-service";
+import { delay, retryWhen } from "rxjs/operators";
+import { WebSocketSubject, webSocket } from "rxjs/webSocket";
import { environment } from "src/environments";
-import { JsonrpcMessage, JsonrpcNotification, JsonrpcRequest, JsonrpcResponse, JsonrpcResponseError, JsonrpcResponseSuccess } from '../jsonrpc/base';
-import { CurrentDataNotification } from '../jsonrpc/notification/currentDataNotification';
-import { EdgeConfigNotification } from '../jsonrpc/notification/edgeConfigNotification';
-import { EdgeRpcNotification } from '../jsonrpc/notification/edgeRpcNotification';
-import { SystemLogNotification } from '../jsonrpc/notification/systemLogNotification';
-import { AuthenticateWithPasswordRequest } from '../jsonrpc/request/authenticateWithPasswordRequest';
-import { AuthenticateWithTokenRequest } from '../jsonrpc/request/authenticateWithTokenRequest';
-import { EdgeRpcRequest } from '../jsonrpc/request/edgeRpcRequest';
-import { LogoutRequest } from '../jsonrpc/request/logoutRequest';
-import { RegisterUserRequest } from '../jsonrpc/request/registerUserRequest';
-import { AuthenticateResponse } from '../jsonrpc/response/authenticateResponse';
-import { Language } from '../type/language';
-import { Pagination } from './pagination';
-import { Service } from './service';
-import { WebsocketInterface } from './websocketInterface';
-import { WsData } from './wsdata';
+import { JsonrpcMessage, JsonrpcNotification, JsonrpcRequest, JsonrpcResponse, JsonrpcResponseError, JsonrpcResponseSuccess } from "../jsonrpc/base";
+import { CurrentDataNotification } from "../jsonrpc/notification/currentDataNotification";
+import { EdgeConfigNotification } from "../jsonrpc/notification/edgeConfigNotification";
+import { EdgeRpcNotification } from "../jsonrpc/notification/edgeRpcNotification";
+import { SystemLogNotification } from "../jsonrpc/notification/systemLogNotification";
+import { AuthenticateWithPasswordRequest } from "../jsonrpc/request/authenticateWithPasswordRequest";
+import { AuthenticateWithTokenRequest } from "../jsonrpc/request/authenticateWithTokenRequest";
+import { EdgeRpcRequest } from "../jsonrpc/request/edgeRpcRequest";
+import { LogoutRequest } from "../jsonrpc/request/logoutRequest";
+import { RegisterUserRequest } from "../jsonrpc/request/registerUserRequest";
+import { AuthenticateResponse } from "../jsonrpc/response/authenticateResponse";
+import { Language } from "../type/language";
+import { Pagination } from "./pagination";
+import { Service } from "./service";
+import { WebsocketInterface } from "./websocketInterface";
+import { WsData } from "./wsdata";
@Injectable()
export class Websocket implements WebsocketInterface {
+ public static readonly REQUEST_TIMEOUT = 500;
+
private static readonly DEFAULT_EDGEID = 0;
public status:
- 'initial' // before first connection attempt
- | 'connecting' // trying to connect to backend
- | 'authenticating' // sent authentication request; waiting for response
- | 'waiting for credentials' // login is required. Waiting for credentials input
- | 'online' // logged in + normal operation
- | 'failed' // connection failed
- = 'initial';
+ "initial" // before first connection attempt
+ | "connecting" // trying to connect to backend
+ | "authenticating" // sent authentication request; waiting for response
+ | "waiting for credentials" // login is required. Waiting for credentials input
+ | "online" // logged in + normal operation
+ | "failed" // connection failed
+ = "initial";
private readonly wsdata = new WsData();
@@ -71,10 +73,10 @@ export class Websocket implements WebsocketInterface {
const language = Language.getByKey(localStorage.DEMO_LANGUAGE ?? authenticateResponse.user.language.toLocaleLowerCase());
localStorage.LANGUAGE = language.key;
this.service.setLang(language);
- this.status = 'online';
+ this.status = "online";
// received login token -> save in cookie
- this.cookieService.set('token', authenticateResponse.token, { expires: 365, path: '/', sameSite: 'Strict', secure: location.protocol === 'https:' });
+ this.cookieService.set("token", authenticateResponse.token, { expires: 365, path: "/", sameSite: "Strict", secure: location.protocol === "https:" });
this.service.currentUser = authenticateResponse.user;
@@ -123,7 +125,7 @@ export class Websocket implements WebsocketInterface {
public sendRequest(request: JsonrpcRequest): Promise {
if (
// logged in + normal operation
- this.status == 'online'
+ this.status == "online"
// otherwise only authentication request allowed
|| (request instanceof AuthenticateWithPasswordRequest || request instanceof AuthenticateWithTokenRequest || request instanceof RegisterUserRequest)) {
@@ -131,7 +133,7 @@ export class Websocket implements WebsocketInterface {
this.wsdata.sendRequest(this.socket, request).then(response => {
if (environment.debugMode) {
if (request instanceof EdgeRpcRequest) {
- console.info("Response [" + request.params.payload.method + ":" + request.params.edgeId + "]", response.result['payload']['result']);
+ console.info("Response [" + request.params.payload.method + ":" + request.params.edgeId + "]", response.result["payload"]["result"]);
} else {
console.info("Response [" + request.method + "]", response.result);
}
@@ -174,13 +176,13 @@ export class Websocket implements WebsocketInterface {
const interval = setInterval(() => {
// TODO: Status should be Observable, furthermore status should be like state-machine
- if (this.status == 'online') {
+ if (this.status == "online") {
clearInterval(interval);
this.sendRequest(request)
.then((response) => resolve(response))
.catch((err) => reject(err));
}
- }, 500);
+ }, Websocket.REQUEST_TIMEOUT);
});
}
@@ -190,7 +192,7 @@ export class Websocket implements WebsocketInterface {
* @param notification the JSON-RPC Notification
*/
public sendNotification(notification: JsonrpcNotification): void {
- if (this.status != 'online') {
+ if (this.status != "online") {
console.warn("Websocket is not connected! Unable to send Notification", notification);
}
this.wsdata.sendNotification(this.socket, notification);
@@ -200,11 +202,11 @@ export class Websocket implements WebsocketInterface {
* Opens a connection using a stored token. Called once by constructor
*/
private connect() {
- if (this.status != 'initial') {
+ if (this.status != "initial") {
return;
}
// trying to connect
- this.status = 'connecting';
+ this.status = "connecting";
if (environment.debugMode) {
console.info("Websocket connecting to URL [" + environment.url + "]");
@@ -222,17 +224,17 @@ export class Websocket implements WebsocketInterface {
console.info("Websocket connection opened");
}
- const token = this.cookieService.get('token');
+ const token = this.cookieService.get("token");
if (token) {
// Login with Session Token
this.login(new AuthenticateWithTokenRequest({ token: token }));
- this.status = 'authenticating';
+ this.status = "authenticating";
} else {
// No Token -> directly ask for Login credentials
- this.status = 'waiting for credentials';
- this.router.navigate(['login']);
+ this.status = "waiting for credentials";
+ this.router.navigate(["login"]);
}
},
},
@@ -243,7 +245,7 @@ export class Websocket implements WebsocketInterface {
console.info("Websocket connection closed");
}
// trying to connect
- this.status = 'connecting';
+ this.status = "connecting";
},
},
});
@@ -274,10 +276,10 @@ export class Websocket implements WebsocketInterface {
} else if (message instanceof JsonrpcNotification) {
// handle JSON-RPC Notification
if (environment.debugMode) {
- if (message.method == EdgeRpcNotification.METHOD && 'payload' in message.params) {
+ if (message.method == EdgeRpcNotification.METHOD && "payload" in message.params) {
const m = message as EdgeRpcNotification;
const payload = m.params.payload;
- console.info("Notification [" + m.params.edgeId + "] [" + payload["method"] + "]", payload['params']);
+ console.info("Notification [" + m.params.edgeId + "] [" + payload["method"] + "]", payload["params"]);
} else {
console.info("Notification [" + message.method + "]", message.params);
}
@@ -289,7 +291,7 @@ export class Websocket implements WebsocketInterface {
this.onError(error);
}, () => {
- this.status = 'failed';
+ this.status = "failed";
this.onClose();
});
}
@@ -299,12 +301,12 @@ export class Websocket implements WebsocketInterface {
// TODO create global Errorhandler for any type of error
switch (reason.error.code) {
case 1003:
- this.service.toast(this.translate.instant('Login.authenticationFailed'), 'danger');
+ this.service.toast(this.translate.instant("Login.authenticationFailed"), "danger");
this.onLoggedOut();
break;
case 1:
this.service.toast(this.translate.instant("Login.REQUEST_TIMEOUT"), "danger");
- this.status = 'waiting for credentials';
+ this.status = "waiting for credentials";
this.service.onLogout();
break;
default:
@@ -313,8 +315,8 @@ export class Websocket implements WebsocketInterface {
}
private onLoggedOut(): void {
- this.status = 'waiting for credentials';
- this.cookieService.delete('token', '/');
+ this.status = "waiting for credentials";
+ this.cookieService.delete("token", "/");
this.service.onLogout();
}
diff --git a/ui/src/app/shared/service/websocketInterface.ts b/ui/src/app/shared/service/websocketInterface.ts
index 517799b1eb9..c4894b1cca6 100644
--- a/ui/src/app/shared/service/websocketInterface.ts
+++ b/ui/src/app/shared/service/websocketInterface.ts
@@ -1,7 +1,7 @@
// @ts-strict-ignore
-import { JsonrpcNotification, JsonrpcRequest, JsonrpcResponseSuccess } from '../jsonrpc/base';
-import { AuthenticateWithPasswordRequest } from '../jsonrpc/request/authenticateWithPasswordRequest';
-import { AuthenticateWithTokenRequest } from '../jsonrpc/request/authenticateWithTokenRequest';
+import { JsonrpcNotification, JsonrpcRequest, JsonrpcResponseSuccess } from "../jsonrpc/base";
+import { AuthenticateWithPasswordRequest } from "../jsonrpc/request/authenticateWithPasswordRequest";
+import { AuthenticateWithTokenRequest } from "../jsonrpc/request/authenticateWithTokenRequest";
export interface WebsocketInterface {
diff --git a/ui/src/app/shared/shared.module.ts b/ui/src/app/shared/shared.module.ts
index d29072a2480..1bf1507d696 100644
--- a/ui/src/app/shared/shared.module.ts
+++ b/ui/src/app/shared/shared.module.ts
@@ -1,49 +1,48 @@
// @ts-strict-ignore
-import { CommonModule } from '@angular/common';
-import { Injector, NgModule } from '@angular/core';
-import { FormControl, FormsModule, ReactiveFormsModule, ValidationErrors } from '@angular/forms';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { RouterModule } from '@angular/router';
-import { IonicModule } from '@ionic/angular';
-import { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';
-import { FormlyIonicModule } from '@ngx-formly/ionic';
-import { TranslateModule } from '@ngx-translate/core';
-import { NgChartsModule } from 'ng2-charts';
+import { CommonModule } from "@angular/common";
+import { Injector, NgModule } from "@angular/core";
+import { FormControl, FormsModule, ReactiveFormsModule, ValidationErrors } from "@angular/forms";
+import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
+import { RouterModule } from "@angular/router";
+import { IonicModule } from "@ionic/angular";
+import { FormlyFieldConfig, FormlyModule } from "@ngx-formly/core";
+import { FormlyIonicModule } from "@ngx-formly/ionic";
+import { TranslateModule } from "@ngx-translate/core";
+import { NgChartsModule } from "ng2-charts";
import { NgxSpinnerModule } from "ngx-spinner";
-
-import { appRoutingProviders } from './../app-routing.module';
-import { ComponentsModule } from './components/components.module';
-import { MeterModule } from './components/edge/meter/meter.module';
-import { FormlyCheckBoxHyperlinkWrapperComponent } from './components/formly/form-field-checkbox-hyperlink/form-field-checkbox-hyperlink.wrapper';
-import { FormlyWrapperDefaultValueWithCasesComponent } from './components/formly/form-field-default-cases.wrapper';
-import { FormlyWrapperFormFieldComponent } from './components/formly/form-field.wrapper';
-import { FormlyFieldCheckboxWithImageComponent } from './components/formly/formly-field-checkbox-image/formly-field-checkbox-with-image';
-import { FormlyFieldModalComponent } from './components/formly/formly-field-modal/formlyfieldmodal';
-import { FormlyFieldRadioWithImageComponent } from './components/formly/formly-field-radio-with-image/formly-field-radio-with-image';
-import { FormlySelectFieldModalComponent } from './components/formly/formly-select-field-modal.component';
-import { FormlySelectFieldExtendedWrapperComponent } from './components/formly/formly-select-field.extended';
-import { FormlyFieldWithLoadingAnimationComponent } from './components/formly/formly-skeleton-wrapper';
-import { InputTypeComponent } from './components/formly/input';
-import { FormlyInputSerialNumberWrapperComponent as FormlyWrapperInputSerialNumber } from './components/formly/input-serial-number-wrapper';
-import { PanelWrapperComponent } from './components/formly/panel-wrapper.component';
-import { RepeatTypeComponent } from './components/formly/repeat';
-import { HeaderComponent } from './components/header/header.component';
-import { HistoryDataErrorModule } from './components/history-data-error/history-data-error.module';
-import { PercentageBarComponent } from './components/percentagebar/percentagebar.component';
-import { DirectiveModule } from './directive/directive';
-import { ChartOptionsComponent } from './legacy/chartoptions/chartoptions.component';
-import { PipeModule } from './pipe/pipe';
-import { Logger } from './service/logger';
-import { Service } from './service/service';
-import { Utils } from './service/utils';
-import { Websocket } from './shared';
+import { appRoutingProviders } from "../app-routing.module";
+import { ComponentsModule } from "./components/components.module";
+import { MeterModule } from "./components/edge/meter/meter.module";
+import { FormlyCheckBoxHyperlinkWrapperComponent } from "./components/formly/form-field-checkbox-hyperlink/form-field-checkbox-hyperlink.wrapper";
+import { FormlyWrapperDefaultValueWithCasesComponent } from "./components/formly/form-field-default-cases.wrapper";
+import { FormlyWrapperFormFieldComponent } from "./components/formly/form-field.wrapper";
+import { FormlyFieldCheckboxWithImageComponent } from "./components/formly/formly-field-checkbox-image/formly-field-checkbox-with-image";
+import { FormlyFieldModalComponent } from "./components/formly/formly-field-modal/formlyfieldmodal";
+import { FormlyFieldRadioWithImageComponent } from "./components/formly/formly-field-radio-with-image/formly-field-radio-with-image";
+import { FormlySelectFieldModalComponent } from "./components/formly/formly-select-field-modal.component";
+import { FormlySelectFieldExtendedWrapperComponent } from "./components/formly/formly-select-field.extended";
+import { FormlyFieldWithLoadingAnimationComponent } from "./components/formly/formly-skeleton-wrapper";
+import { InputTypeComponent } from "./components/formly/input";
+import { FormlyInputSerialNumberWrapperComponent as FormlyWrapperInputSerialNumber } from "./components/formly/input-serial-number-wrapper";
+import { PanelWrapperComponent } from "./components/formly/panel-wrapper.component";
+import { RepeatTypeComponent } from "./components/formly/repeat";
+import { HeaderComponent } from "./components/header/header.component";
+import { HistoryDataErrorModule } from "./components/history-data-error/history-data-error.module";
+import { PercentageBarComponent } from "./components/percentagebar/percentagebar.component";
+import { DirectiveModule } from "./directive/directive";
+import { ChartOptionsComponent } from "./legacy/chartoptions/chartoptions.component";
+import { PipeModule } from "./pipe/pipe";
+import { Logger } from "./service/logger";
+import { Service } from "./service/service";
+import { Utils } from "./service/utils";
+import { Websocket } from "./shared";
export function IpValidator(control: FormControl): ValidationErrors {
- return /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(control.value) ? null : { 'ip': true };
+ return /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(control.value) ? null : { "ip": true };
}
export function SubnetmaskValidator(control: FormControl): ValidationErrors {
- return /^(255)\.(0|128|192|224|240|248|252|254|255)\.(0|128|192|224|240|248|252|254|255)\.(0|128|192|224|240|248|252|254|255)/.test(control.value) ? null : { 'subnetmask': true };
+ return /^(255)\.(0|128|192|224|240|248|252|254|255)\.(0|128|192|224|240|248|252|254|255)\.(0|128|192|224|240|248|252|254|255)/.test(control.value) ? null : { "subnetmask": true };
}
export function IpValidatorMessage(err, field: FormlyFieldConfig) {
@@ -64,33 +63,33 @@ export function SubnetmaskValidatorMessage(err, field: FormlyFieldConfig) {
FormsModule,
IonicModule,
NgxSpinnerModule.forRoot({
- type: 'ball-clip-rotate-multiple',
+ type: "ball-clip-rotate-multiple",
}),
ReactiveFormsModule,
RouterModule,
FormlyModule.forRoot({
wrappers: [
- { name: 'form-field', component: FormlyWrapperFormFieldComponent },
+ { name: "form-field", component: FormlyWrapperFormFieldComponent },
{ name: "input-serial-number", component: FormlyWrapperInputSerialNumber },
- { name: 'formly-select-extended-wrapper', component: FormlySelectFieldExtendedWrapperComponent },
- { name: 'formly-field-radio-with-image', component: FormlyFieldRadioWithImageComponent },
- { name: 'form-field-checkbox-hyperlink', component: FormlyCheckBoxHyperlinkWrapperComponent },
- { name: 'formly-wrapper-default-of-cases', component: FormlyWrapperDefaultValueWithCasesComponent },
- { name: 'panel', component: PanelWrapperComponent },
- { name: 'formly-field-modal', component: FormlyFieldModalComponent },
- { name: 'formly-field-checkbox-with-image', component: FormlyFieldCheckboxWithImageComponent },
+ { name: "formly-select-extended-wrapper", component: FormlySelectFieldExtendedWrapperComponent },
+ { name: "formly-field-radio-with-image", component: FormlyFieldRadioWithImageComponent },
+ { name: "form-field-checkbox-hyperlink", component: FormlyCheckBoxHyperlinkWrapperComponent },
+ { name: "formly-wrapper-default-of-cases", component: FormlyWrapperDefaultValueWithCasesComponent },
+ { name: "panel", component: PanelWrapperComponent },
+ { name: "formly-field-modal", component: FormlyFieldModalComponent },
+ { name: "formly-field-checkbox-with-image", component: FormlyFieldCheckboxWithImageComponent },
],
types: [
- { name: 'input', component: InputTypeComponent },
- { name: 'repeat', component: RepeatTypeComponent },
+ { name: "input", component: InputTypeComponent },
+ { name: "repeat", component: RepeatTypeComponent },
],
validators: [
- { name: 'ip', validation: IpValidator },
- { name: 'subnetmask', validation: SubnetmaskValidator },
+ { name: "ip", validation: IpValidator },
+ { name: "subnetmask", validation: SubnetmaskValidator },
],
validationMessages: [
- { name: 'ip', message: IpValidatorMessage },
- { name: 'subnetmask', message: SubnetmaskValidatorMessage },
+ { name: "ip", message: IpValidatorMessage },
+ { name: "subnetmask", message: SubnetmaskValidatorMessage },
],
}),
PipeModule,
diff --git a/ui/src/app/shared/shared.spec.ts b/ui/src/app/shared/shared.spec.ts
index 82662b2ea1f..c9ea351e2b4 100644
--- a/ui/src/app/shared/shared.spec.ts
+++ b/ui/src/app/shared/shared.spec.ts
@@ -3,33 +3,33 @@ import { SumState } from "../index/shared/sumState";
import { Edge, EdgePermission } from "./shared";
import { Role } from "./type/role";
-describe('EdgePermission', () => {
+describe("EdgePermission", () => {
const edge = new Edge("", "", "", "2024.2.2", Role.ADMIN, true, new Date(), SumState.OK, null);
- it('#getAllowedHistoryPeriods - no first ibn date', () => {
- expect(EdgePermission.getAllowedHistoryPeriods(edge, ['day', 'week', 'month', 'year'])).toEqual(['day', 'week', 'month', 'year']);
+ it("#getAllowedHistoryPeriods - no first ibn date", () => {
+ expect(EdgePermission.getAllowedHistoryPeriods(edge, ["day", "week", "month", "year"])).toEqual(["day", "week", "month", "year"]);
});
const edgeWithFirstIbnDate = new Edge("", "", "", "", Role.ADMIN, true, new Date(), SumState.OK, new Date());
- it('#getAllowedHistoryPeriods - first ibn date', () => {
- expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, ['day', 'week', 'month', 'year', 'total'])).toEqual(['day', 'week', 'month', 'year', 'total']);
+ it("#getAllowedHistoryPeriods - first ibn date", () => {
+ expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, ["day", "week", "month", "year", "total"])).toEqual(["day", "week", "month", "year", "total"]);
});
- it('#getAllowedHistoryPeriods - historyPeriods: []', () => {
- expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, [])).toEqual(['day', 'week', 'month', 'year', 'total', 'custom']);
+ it("#getAllowedHistoryPeriods - historyPeriods: []", () => {
+ expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, [])).toEqual(["day", "week", "month", "year", "total", "custom"]);
});
- it('#getAllowedHistoryPeriods - historyPeriod: null', () => {
- expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, null)).toEqual(['day', 'week', 'month', 'year', 'total', 'custom']);
+ it("#getAllowedHistoryPeriods - historyPeriod: null", () => {
+ expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, null)).toEqual(["day", "week", "month", "year", "total", "custom"]);
});
- it('#getAllowedHistoryPeriods - historyPeriod: undefined', () => {
- expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, undefined)).toEqual(['day', 'week', 'month', 'year', 'total', 'custom']);
+ it("#getAllowedHistoryPeriods - historyPeriod: undefined", () => {
+ expect(EdgePermission.getAllowedHistoryPeriods(edgeWithFirstIbnDate, undefined)).toEqual(["day", "week", "month", "year", "total", "custom"]);
});
const edgeWithoutFirstIbnDate = new Edge("", "", "", "", Role.ADMIN, true, new Date(), SumState.OK, null);
- it('#getAllowedHistoryPeriods - no first ibn date', () => {
- expect(EdgePermission.getAllowedHistoryPeriods(edgeWithoutFirstIbnDate)).toEqual(['day', 'week', 'month', 'year', 'custom']);
+ it("#getAllowedHistoryPeriods - no first ibn date", () => {
+ expect(EdgePermission.getAllowedHistoryPeriods(edgeWithoutFirstIbnDate)).toEqual(["day", "week", "month", "year", "custom"]);
});
});
diff --git a/ui/src/app/shared/shared.ts b/ui/src/app/shared/shared.ts
index f2bf0f04fed..4175e96134d 100644
--- a/ui/src/app/shared/shared.ts
+++ b/ui/src/app/shared/shared.ts
@@ -13,21 +13,21 @@ export { Widget, WidgetFactory, WidgetNature, Widgets } from "./type/widget";
import { AlertController, AlertOptions } from "@ionic/angular";
import { TranslateService } from "@ngx-translate/core";
-import { addIcons } from 'ionicons';
+import { addIcons } from "ionicons";
import { Edge } from "./components/edge/edge";
import { User } from "./jsonrpc/shared";
import { DefaultTypes } from "./service/defaulttypes";
import { Role } from "./type/role";
addIcons({
- 'oe-consumption': 'assets/img/icon/consumption.svg',
- 'oe-evcs': 'assets/img/icon/evcs.svg',
- 'oe-grid': 'assets/img/icon/grid.svg',
- 'oe-grid-storage': 'assets/img/icon/gridStorage.svg',
- 'oe-grid-restriction': 'assets/img/icon/gridRestriction.svg',
- 'oe-offgrid': 'assets/img/icon/offgrid.svg',
- 'oe-production': 'assets/img/icon/production.svg',
- 'oe-storage': 'assets/img/icon/storage.svg',
+ "oe-consumption": "assets/img/icon/consumption.svg",
+ "oe-evcs": "assets/img/icon/evcs.svg",
+ "oe-grid": "assets/img/icon/grid.svg",
+ "oe-grid-storage": "assets/img/icon/gridStorage.svg",
+ "oe-grid-restriction": "assets/img/icon/gridRestriction.svg",
+ "oe-offgrid": "assets/img/icon/offgrid.svg",
+ "oe-production": "assets/img/icon/production.svg",
+ "oe-storage": "assets/img/icon/storage.svg",
});
export class EdgePermission {
@@ -68,7 +68,7 @@ export class EdgePermission {
* @returns true if the channels are included in the edgeconfig
*/
public static hasChannelsInEdgeConfig(edge: Edge): boolean {
- return !edge.isVersionAtLeast('2024.6.1');
+ return !edge.isVersionAtLeast("2024.6.1");
}
/**
@@ -81,9 +81,8 @@ export class EdgePermission {
* @returns true if only the factories of the used components are in the edgeconfig
*/
public static hasReducedFactories(edge: Edge): boolean {
- return edge.isVersionAtLeast('2024.6.1');
+ return edge.isVersionAtLeast("2024.6.1");
}
-
}
export class UserPermission {
@@ -114,7 +113,7 @@ export class UserPermission {
* @returns true, if user is at least {@link Role.ADMIN} and edge version is at least 2024.2.2
*/
public static isAllowedToSeeSystemRestart(user: User, edge: Edge) {
- const isAllowed = edge?.isVersionAtLeast('2024.2.2');
+ const isAllowed = edge?.isVersionAtLeast("2024.2.2");
return Role.isAtLeast(user?.globalRole, Role.OWNER) && isAllowed;
}
}
@@ -142,7 +141,7 @@ export namespace Currency {
*/
export function getCurrencyLabelByCurrency(currency: string): Label {
switch (currency) {
- case 'SEK':
+ case "SEK":
return Label.OERE_PER_KWH;
default:
return Label.CENT_PER_KWH;
@@ -153,6 +152,10 @@ export namespace Currency {
OERE_PER_KWH = "Öre/kWh",
CENT_PER_KWH = "Cent/kWh",
}
+
+ export enum Unit {
+ CENT = "Cent",
+ }
}
export enum EssStateMachine {
@@ -178,12 +181,12 @@ export async function presentAlert(alertController: AlertController, translate:
const alert = alertController.create({
...alertOptions,
buttons: [{
- text: translate.instant('General.cancel'),
- role: 'cancel',
+ text: translate.instant("General.cancel"),
+ role: "cancel",
},
...(alertOptions?.buttons ?? []),
],
- cssClass: 'alertController',
+ cssClass: "alertController",
});
(await alert).present();
}
diff --git a/ui/src/app/shared/translate.extension.ts b/ui/src/app/shared/translate.extension.ts
index e0d7675b9af..0b9bce010b0 100644
--- a/ui/src/app/shared/translate.extension.ts
+++ b/ui/src/app/shared/translate.extension.ts
@@ -1,6 +1,6 @@
// @ts-strict-ignore
-import { FormlyExtension, FormlyFieldConfig } from '@ngx-formly/core';
-import { TranslateService } from '@ngx-translate/core';
+import { FormlyExtension, FormlyFieldConfig } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
export class TranslateExtension implements FormlyExtension {
constructor(private translate: TranslateService) { }
@@ -13,7 +13,7 @@ export class TranslateExtension implements FormlyExtension {
props._translated = true;
field.expressions = {
...(field.expressions || {}),
- 'props.label': this.translate.stream(props.label),
+ "props.label": this.translate.stream(props.label),
};
}
}
@@ -23,7 +23,7 @@ export function registerTranslateExtension(translate: TranslateService) {
validationMessages: [],
extensions: [
{
- name: 'translate',
+ name: "translate",
extension: new TranslateExtension(translate),
},
],
@@ -39,5 +39,5 @@ export function registerTranslateExtension(translate: TranslateService) {
* @returns the validation error message.
*/
export function serialNumber(translate: TranslateService, field: FormlyFieldConfig, length: number) {
- return translate.stream('INSTALLATION.FORM.BATTERY_SERIAL_NUMBER', { serialNumber: ((field.props.prefix ?? "") + field.formControl.value), length: length });
+ return translate.stream("INSTALLATION.FORM.BATTERY_SERIAL_NUMBER", { serialNumber: ((field.props.prefix ?? "") + field.formControl.value), length: length });
}
diff --git a/ui/src/app/shared/type/channeladdress.ts b/ui/src/app/shared/type/channeladdress.ts
index ae633707993..e8ddbeb302a 100644
--- a/ui/src/app/shared/type/channeladdress.ts
+++ b/ui/src/app/shared/type/channeladdress.ts
@@ -11,7 +11,7 @@ export class ChannelAddress {
* @param address in the form 'Component-ID/Channel-ID'
*/
public static fromString(address: string): ChannelAddress {
- const array = address.split('/', 2);
+ const array = address.split("/", 2);
return new ChannelAddress(array[0], array[1]);
}
diff --git a/ui/src/app/shared/type/country.ts b/ui/src/app/shared/type/country.ts
index ce388ed2835..f69f28c850a 100644
--- a/ui/src/app/shared/type/country.ts
+++ b/ui/src/app/shared/type/country.ts
@@ -1,21 +1,21 @@
import { TranslateService } from "@ngx-translate/core";
export enum Country {
- GERMANY = 'de',
- AUSTRIA = 'at',
- SWITZERLAND = 'ch',
- SWEDEN = 'se',
- CZECH_REPUBLIK = 'cz',
- NETHERLANDS = 'nl',
+ GERMANY = "de",
+ AUSTRIA = "at",
+ SWITZERLAND = "ch",
+ SWEDEN = "se",
+ CZECH_REPUBLIK = "cz",
+ NETHERLANDS = "nl",
}
export const COUNTRY_OPTIONS = (translate: TranslateService) => {
return [
- { value: Country.GERMANY, label: translate.instant('General.Country.germany') },
- { value: Country.AUSTRIA, label: translate.instant('General.Country.austria') },
- { value: Country.SWITZERLAND, label: translate.instant('General.Country.switzerland') },
- { value: Country.SWEDEN, label: translate.instant('General.Country.sweden') },
- { value: Country.NETHERLANDS, label: translate.instant('General.Country.netherlands') },
- { value: Country.CZECH_REPUBLIK, label: translate.instant('General.Country.czech') },
+ { value: Country.GERMANY, label: translate.instant("General.Country.germany") },
+ { value: Country.AUSTRIA, label: translate.instant("General.Country.austria") },
+ { value: Country.SWITZERLAND, label: translate.instant("General.Country.switzerland") },
+ { value: Country.SWEDEN, label: translate.instant("General.Country.sweden") },
+ { value: Country.NETHERLANDS, label: translate.instant("General.Country.netherlands") },
+ { value: Country.CZECH_REPUBLIK, label: translate.instant("General.Country.czech") },
];
};
diff --git a/ui/src/app/shared/type/general.ts b/ui/src/app/shared/type/general.ts
index c33d4e88d22..8394178bfce 100644
--- a/ui/src/app/shared/type/general.ts
+++ b/ui/src/app/shared/type/general.ts
@@ -4,9 +4,9 @@ export enum GridMode {
OFF_GRID = 2,
}
export enum Mode {
- MANUAL_ON = 'MANUAL_ON',
- MANUAL_OFF = 'MANUAL_OFF',
- AUTOMATIC = 'AUTOMATIC',
+ MANUAL_ON = "MANUAL_ON",
+ MANUAL_OFF = "MANUAL_OFF",
+ AUTOMATIC = "AUTOMATIC",
}
export const ChartAnnotationState = {
ON: 1,
@@ -14,6 +14,6 @@ export const ChartAnnotationState = {
OFF_HIDDEN: null,
};
export enum WorkMode {
- TIME = 'TIME',
- NONE = 'NONE',
+ TIME = "TIME",
+ NONE = "NONE",
}
diff --git a/ui/src/app/shared/type/language.spec.ts b/ui/src/app/shared/type/language.spec.ts
index d3b078be851..177daccbb97 100644
--- a/ui/src/app/shared/type/language.spec.ts
+++ b/ui/src/app/shared/type/language.spec.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
import { Language } from "./language";
-describe('Language', () => {
+describe("Language", () => {
- it('#geti18nLocaleByKey', () => {
- expect(Language.geti18nLocaleByKey('DE')).toBe('de');
- expect(Language.geti18nLocaleByKey('Zz')).toBe(Language.DEFAULT.i18nLocaleKey);
+ it("#geti18nLocaleByKey", () => {
+ expect(Language.geti18nLocaleByKey("DE")).toBe("de");
+ expect(Language.geti18nLocaleByKey("Zz")).toBe(Language.DEFAULT.i18nLocaleKey);
expect(Language.geti18nLocaleByKey(null)).toBe(Language.DEFAULT.i18nLocaleKey);
expect(Language.geti18nLocaleByKey(undefined)).toBe(Language.DEFAULT.i18nLocaleKey);
});
diff --git a/ui/src/app/shared/type/language.ts b/ui/src/app/shared/type/language.ts
index 4737bf4510a..79a88549ab3 100644
--- a/ui/src/app/shared/type/language.ts
+++ b/ui/src/app/shared/type/language.ts
@@ -1,18 +1,18 @@
-import localDE from '@angular/common/locales/de';
-import localEN from '@angular/common/locales/en';
-import localES from '@angular/common/locales/es';
-import localFR from '@angular/common/locales/fr';
-import localNL from '@angular/common/locales/nl';
-import localJA from '@angular/common/locales/ja';
+import localDE from "@angular/common/locales/de";
+import localEN from "@angular/common/locales/en";
+import localES from "@angular/common/locales/es";
+import localFR from "@angular/common/locales/fr";
+import localJA from "@angular/common/locales/ja";
+import localNL from "@angular/common/locales/nl";
import { TranslateLoader } from "@ngx-translate/core";
-import { Observable, of } from 'rxjs';
-import cz from 'src/assets/i18n/cz.json';
-import de from 'src/assets/i18n/de.json';
-import en from 'src/assets/i18n/en.json';
-import es from 'src/assets/i18n/es.json';
-import fr from 'src/assets/i18n/fr.json';
-import nl from 'src/assets/i18n/nl.json';
-import ja from 'src/assets/i18n/ja.json';
+import { Observable, of } from "rxjs";
+import cz from "src/assets/i18n/cz.json";
+import de from "src/assets/i18n/de.json";
+import en from "src/assets/i18n/en.json";
+import es from "src/assets/i18n/es.json";
+import fr from "src/assets/i18n/fr.json";
+import ja from "src/assets/i18n/ja.json";
+import nl from "src/assets/i18n/nl.json";
interface Translation {
[key: string]: string | Translation;
diff --git a/ui/src/app/shared/type/role.ts b/ui/src/app/shared/type/role.ts
index cf927a34f7d..5c985cb750a 100644
--- a/ui/src/app/shared/type/role.ts
+++ b/ui/src/app/shared/type/role.ts
@@ -35,10 +35,10 @@ export namespace Role {
* @return true if "Role 1" is equal or more privileged than "Role 2"
*/
export function isAtLeast(role1: Role | string, role2: Role | string): boolean {
- if (typeof role1 === 'string') {
+ if (typeof role1 === "string") {
role1 = Role.getRole(role1);
}
- if (typeof role2 === 'string') {
+ if (typeof role2 === "string") {
role2 = Role.getRole(role2);
}
return role1 <= role2;
diff --git a/ui/src/app/shared/type/systemlog.ts b/ui/src/app/shared/type/systemlog.ts
index d5a53572cf5..fa4a0a18734 100644
--- a/ui/src/app/shared/type/systemlog.ts
+++ b/ui/src/app/shared/type/systemlog.ts
@@ -1,6 +1,6 @@
export interface SystemLog {
time: string,
- level: 'ERROR' | 'WARN' | 'INFO',
+ level: "ERROR" | "WARN" | "INFO",
source: string,
message: string
}
diff --git a/ui/src/app/shared/type/widget.ts b/ui/src/app/shared/type/widget.ts
index f91e01905fd..bd838e1641b 100644
--- a/ui/src/app/shared/type/widget.ts
+++ b/ui/src/app/shared/type/widget.ts
@@ -1,41 +1,42 @@
// @ts-strict-ignore
-import { Edge } from '../components/edge/edge';
-import { EdgeConfig } from '../components/edge/edgeconfig';
+import { Edge } from "../components/edge/edge";
+import { EdgeConfig } from "../components/edge/edgeconfig";
export enum WidgetClass {
- 'Energymonitor',
- 'Common_Autarchy',
- 'Common_Selfconsumption',
- 'Storage',
- 'Grid',
- 'Common_Production',
- 'Consumption',
- 'Controller_ChannelThreshold',
+ "Energymonitor",
+ "Common_Autarchy",
+ "Common_Selfconsumption",
+ "Storage",
+ "Grid",
+ "Common_Production",
+ "Consumption",
+ "Controller_ChannelThreshold",
+ "Controller_Io_Digital_Outputs",
}
export enum WidgetNature {
- 'io.openems.edge.evcs.api.Evcs',
- 'io.openems.impl.controller.channelthreshold.ChannelThresholdController', // TODO deprecated
- 'io.openems.edge.io.api.DigitalInput',
+ "io.openems.edge.evcs.api.Evcs",
+ "io.openems.impl.controller.channelthreshold.ChannelThresholdController", // TODO deprecated
+ "io.openems.edge.io.api.DigitalInput",
}
export enum WidgetFactory {
- 'Controller.Asymmetric.PeakShaving',
- 'Controller.ChannelThreshold',
- 'Controller.CHP.SoC',
- 'Controller.Ess.DelayedSellToGrid',
- 'Controller.Ess.FixActivePower',
- 'Controller.Ess.GridOptimizedCharge',
- 'Controller.Ess.Time-Of-Use-Tariff.Discharge',
- 'Controller.Ess.Time-Of-Use-Tariff',
- 'Controller.IO.ChannelSingleThreshold',
- 'Controller.Io.FixDigitalOutput',
- 'Controller.IO.HeatingElement',
- 'Controller.Io.HeatPump.SgReady',
- 'Controller.Symmetric.PeakShaving',
- 'Controller.TimeslotPeakshaving',
- 'Evcs.Cluster.PeakShaving',
- 'Evcs.Cluster.SelfConsumption',
+ "Controller.Asymmetric.PeakShaving",
+ "Controller.ChannelThreshold",
+ "Controller.CHP.SoC",
+ "Controller.Ess.DelayedSellToGrid",
+ "Controller.Ess.FixActivePower",
+ "Controller.Ess.GridOptimizedCharge",
+ "Controller.Ess.Time-Of-Use-Tariff.Discharge",
+ "Controller.Ess.Time-Of-Use-Tariff",
+ "Controller.IO.ChannelSingleThreshold",
+ "Controller.Io.FixDigitalOutput",
+ "Controller.IO.HeatingElement",
+ "Controller.Io.HeatPump.SgReady",
+ "Controller.Symmetric.PeakShaving",
+ "Controller.TimeslotPeakshaving",
+ "Evcs.Cluster.PeakShaving",
+ "Evcs.Cluster.SelfConsumption",
}
export type Icon = {
@@ -75,41 +76,43 @@ export class Widgets {
}
public static parseWidgets(edge: Edge, config: EdgeConfig): Widgets {
-
const classes: string[] = Object.values(WidgetClass) //
- .filter(v => typeof v === 'string')
+ .filter(v => typeof v === "string")
.filter(clazz => {
- if (!edge.isVersionAtLeast('2018.8')) {
+ if (!edge.isVersionAtLeast("2018.8")) {
// no filter for deprecated versions
return true;
}
switch (clazz) {
- case 'Common_Autarchy':
- case 'Grid':
+ case "Common_Autarchy":
+ case "Grid":
return config.hasMeter();
- case 'Energymonitor':
- case 'Consumption':
+ case "Energymonitor":
+ case "Consumption":
if (config.hasMeter() == true || config.hasProducer() == true || config.hasStorage() == true) {
return true;
} else {
return false;
}
- case 'Storage':
+ case "Storage":
return config.hasStorage();
- case 'Common_Production':
- case 'Common_Selfconsumption':
+ case "Common_Production":
+ case "Common_Selfconsumption":
return config.hasProducer();
- case 'Controller_ChannelThreshold':
- return config.getComponentIdsByFactory('Controller.ChannelThreshold')?.length > 0;
+ case "Controller_ChannelThreshold":
+ return config.getComponentIdsByFactory("Controller.ChannelThreshold")?.length > 0;
+ case "Controller_Io_Digital_Outputs":
+ return config.getComponentIdsByFactories("Controller.Io.FixDigitalOutput", "Controller.IO.ChannelSingleThreshold")?.length > 0;
+ default:
+ return false;
}
- return false;
}).map(clazz => clazz.toString());
const list: Widget[] = [];
- for (const nature of Object.values(WidgetNature).filter(v => typeof v === 'string')) {
+ for (const nature of Object.values(WidgetNature).filter(v => typeof v === "string")) {
for (const componentId of config.getComponentIdsImplementingNature(nature.toString())) {
- if (nature === 'io.openems.edge.io.api.DigitalInput' && list.some(e => e.name === 'io.openems.edge.io.api.DigitalInput')) {
+ if (nature === "io.openems.edge.io.api.DigitalInput" && list.some(e => e.name === "io.openems.edge.io.api.DigitalInput")) {
continue;
}
if (config.getComponent(componentId).isEnabled) {
@@ -117,7 +120,7 @@ export class Widgets {
}
}
}
- for (const factory of Object.values(WidgetFactory).filter(v => typeof v === 'string')) {
+ for (const factory of Object.values(WidgetFactory).filter(v => typeof v === "string")) {
for (const componentId of config.getComponentIdsByFactory(factory.toString())) {
if (config.getComponent(componentId).isEnabled) {
list.push({ name: factory, componentId: componentId });
@@ -127,14 +130,14 @@ export class Widgets {
// explicitely sort ChannelThresholdControllers by their outputChannelAddress
list.sort((w1, w2) => {
- if (w1.name === 'Controller.IO.ChannelSingleThreshold' && w2.name === 'Controller.IO.ChannelSingleThreshold') {
- let outputChannelAddress1: string | string[] = config.getComponentProperties(w1.componentId)['outputChannelAddress'];
- if (typeof outputChannelAddress1 !== 'string') {
+ if (w1.name === "Controller.IO.ChannelSingleThreshold" && w2.name === "Controller.IO.ChannelSingleThreshold") {
+ let outputChannelAddress1: string | string[] = config.getComponentProperties(w1.componentId)["outputChannelAddress"];
+ if (typeof outputChannelAddress1 !== "string") {
// Takes only the first output for simplicity reasons
outputChannelAddress1 = outputChannelAddress1[0];
}
- let outputChannelAddress2: string | string[] = config.getComponentProperties(w2.componentId)['outputChannelAddress'];
- if (typeof outputChannelAddress2 !== 'string') {
+ let outputChannelAddress2: string | string[] = config.getComponentProperties(w2.componentId)["outputChannelAddress"];
+ if (typeof outputChannelAddress2 !== "string") {
// Takes only the first output for simplicity reasons
outputChannelAddress2 = outputChannelAddress2[0];
}
diff --git a/ui/src/app/shared/utils/array/array.utils.spec.ts b/ui/src/app/shared/utils/array/array.utils.spec.ts
index aab90e1edaa..a9298c0c205 100644
--- a/ui/src/app/shared/utils/array/array.utils.spec.ts
+++ b/ui/src/app/shared/utils/array/array.utils.spec.ts
@@ -1,23 +1,23 @@
// @ts-strict-ignore
import { ArrayUtils } from "./array.utils";
-describe('Array-Utils', () => {
- it('#findSmallestNumber', () => {
+describe("Array-Utils", () => {
+ it("#findSmallestNumber", () => {
expect(ArrayUtils.findSmallestNumber([])).toEqual(null);
expect(ArrayUtils.findSmallestNumber([null, null])).toEqual(null);
expect(ArrayUtils.findSmallestNumber([0, -1])).toEqual(-1);
expect(ArrayUtils.findSmallestNumber([null, undefined])).toEqual(null);
});
- it('#findBiggestNumber', () => {
+ it("#findBiggestNumber", () => {
expect(ArrayUtils.findBiggestNumber([])).toEqual(null);
expect(ArrayUtils.findBiggestNumber([null, null])).toEqual(null);
expect(ArrayUtils.findBiggestNumber([0, -1])).toEqual(0);
expect(ArrayUtils.findBiggestNumber([null, undefined])).toEqual(null);
});
- it('#sortAlphabeticaly', () => {
- const inputArr = ['A', null, 'C', undefined, 'B', 'a', '1'];
- const sortedArr = ['1', 'A', 'a', 'B', 'C', null, undefined];
+ it("#sortAlphabeticaly", () => {
+ const inputArr = ["A", null, "C", undefined, "B", "a", "1"];
+ const sortedArr = ["1", "A", "a", "B", "C", null, undefined];
expect(ArrayUtils.sortedAlphabetically(inputArr, a => a)).toEqual(sortedArr);
expect(ArrayUtils.sortedAlphabetically(inputArr, _a => null)).toEqual(inputArr);
diff --git a/ui/src/app/shared/utils/array/array.utils.ts b/ui/src/app/shared/utils/array/array.utils.ts
index d5403948bb5..6026afa4579 100644
--- a/ui/src/app/shared/utils/array/array.utils.ts
+++ b/ui/src/app/shared/utils/array/array.utils.ts
@@ -45,7 +45,7 @@ export namespace ArrayUtils {
} else if (!bVal) {
return -1;
}
- return aVal.localeCompare(bVal, undefined, { sensitivity: 'accent' });
+ return aVal.localeCompare(bVal, undefined, { sensitivity: "accent" });
});
}
}
diff --git a/ui/src/app/shared/utils/color/color.utils.spec.ts b/ui/src/app/shared/utils/color/color.utils.spec.ts
index d9ee75dd2a8..4ba93b95ff9 100644
--- a/ui/src/app/shared/utils/color/color.utils.spec.ts
+++ b/ui/src/app/shared/utils/color/color.utils.spec.ts
@@ -1,17 +1,17 @@
// @ts-strict-ignore
import { ColorUtils } from "./color.utils";
-describe('Color-Utils', () => {
- it('#rgbStringToRgba', () => {
- expect(ColorUtils.rgbStringToRGBA('rgb(0,0,0)', 1)).toBe('rgba(0,0,0,1)');
- expect(ColorUtils.rgbStringToRGBA('rgb(0,0,0)', null)).toEqual('rgba(0,0,0,0)');
+describe("Color-Utils", () => {
+ it("#rgbStringToRgba", () => {
+ expect(ColorUtils.rgbStringToRGBA("rgb(0,0,0)", 1)).toBe("rgba(0,0,0,1)");
+ expect(ColorUtils.rgbStringToRGBA("rgb(0,0,0)", null)).toEqual("rgba(0,0,0,0)");
expect(ColorUtils.rgbStringToRGBA(null, 1)).toEqual(null);
expect(ColorUtils.rgbStringToRGBA(null, null)).toEqual(null);
});
- it('#changeOpacityFromRGBA', () => {
- expect(ColorUtils.changeOpacityFromRGBA('rgba(0,0,0,0.05)', 1)).toBe('rgba(0,0,0,1)');
- expect(ColorUtils.changeOpacityFromRGBA('rgba(0,0,0,0.05)', null)).toBe('rgba(0,0,0,0)');
+ it("#changeOpacityFromRGBA", () => {
+ expect(ColorUtils.changeOpacityFromRGBA("rgba(0,0,0,0.05)", 1)).toBe("rgba(0,0,0,1)");
+ expect(ColorUtils.changeOpacityFromRGBA("rgba(0,0,0,0.05)", null)).toBe("rgba(0,0,0,0)");
expect(ColorUtils.changeOpacityFromRGBA(null, 1)).toBe(null);
expect(ColorUtils.changeOpacityFromRGBA(null, null)).toBe(null);
});
diff --git a/ui/src/app/shared/utils/color/color.utils.ts b/ui/src/app/shared/utils/color/color.utils.ts
index e8408861359..a561dc53eca 100644
--- a/ui/src/app/shared/utils/color/color.utils.ts
+++ b/ui/src/app/shared/utils/color/color.utils.ts
@@ -14,7 +14,7 @@ export namespace ColorUtils {
return null;
}
- return 'rgba(' + color.split('(').pop().split(')')[0] + ',' + (opacity ?? 0) + ')';
+ return "rgba(" + color.split("(").pop().split(")")[0] + "," + (opacity ?? 0) + ")";
}
/**
@@ -30,9 +30,9 @@ export namespace ColorUtils {
return null;
}
- const rgba = color.split('(').pop().split(')')[0];
- const rgb = rgba.split(',').slice(0, -1).join(',');
+ const rgba = color.split("(").pop().split(")")[0];
+ const rgb = rgba.split(",").slice(0, -1).join(",");
- return 'rgba(' + rgb + ',' + (opacity ?? 0) + ')';
+ return "rgba(" + rgb + "," + (opacity ?? 0) + ")";
}
}
diff --git a/ui/src/app/shared/utils/date/dateutils.spec.ts b/ui/src/app/shared/utils/date/dateutils.spec.ts
index 05916c3bfdb..83e03852083 100644
--- a/ui/src/app/shared/utils/date/dateutils.spec.ts
+++ b/ui/src/app/shared/utils/date/dateutils.spec.ts
@@ -1,14 +1,14 @@
// @ts-strict-ignore
import { DateUtils } from "./dateutils";
-describe('DateUtils', () => {
+describe("DateUtils", () => {
const dates: Date[] = [
new Date(Date.parse("2023-01-01")),
new Date(Date.parse("2023-01-02")),
];
- it('#minDate - smallest date', () => {
+ it("#minDate - smallest date", () => {
// valid params
expect(DateUtils.minDate(...dates)).toEqual(dates[0]);
@@ -20,7 +20,7 @@ describe('DateUtils', () => {
expect(isNaN(DateUtils.minDate(null, null)?.getTime())).toBe(true);
});
- it('#maxDate - biggest date', () => {
+ it("#maxDate - biggest date", () => {
// valid params
expect(DateUtils.maxDate(...dates)).toEqual(dates[1]);
@@ -31,13 +31,13 @@ describe('DateUtils', () => {
expect(isNaN(DateUtils.maxDate(null, null)?.getTime())).toBe(true);
});
- it('#stringToDate - converts string to date', () => {
- expect(DateUtils.stringToDate('2023-01-02')).toEqual(new Date(Date.parse('2023-01-02')));
- expect(DateUtils.stringToDate('wrong format')).toEqual(null);
+ it("#stringToDate - converts string to date", () => {
+ expect(DateUtils.stringToDate("2023-01-02")).toEqual(new Date(Date.parse("2023-01-02")));
+ expect(DateUtils.stringToDate("wrong format")).toEqual(null);
});
- it('#isDateBefore - checks if given date is before date to be compared to', () => {
- const date: Date = DateUtils.stringToDate('2023-01-01') as Date;
+ it("#isDateBefore - checks if given date is before date to be compared to", () => {
+ const date: Date = DateUtils.stringToDate("2023-01-01") as Date;
expect(DateUtils.isDateBefore(date, DateUtils.stringToDate("2023-01-31"))).toEqual(true);
expect(DateUtils.isDateBefore(date, DateUtils.stringToDate("2022-12-31"))).toEqual(false);
expect(DateUtils.isDateBefore(date, DateUtils.stringToDate("2023-01-01"))).toEqual(false);
diff --git a/ui/src/app/shared/utils/date/dateutils.ts b/ui/src/app/shared/utils/date/dateutils.ts
index ff97467488a..253e06cda38 100644
--- a/ui/src/app/shared/utils/date/dateutils.ts
+++ b/ui/src/app/shared/utils/date/dateutils.ts
@@ -1,4 +1,5 @@
-import { isBefore } from "date-fns";
+import { TranslateService } from "@ngx-translate/core";
+import { format, isBefore } from "date-fns";
export namespace DateUtils {
@@ -91,4 +92,20 @@ export namespace DateUtils {
}
return false;
}
+
+ /**
+ * Checks if passed date is before a certain date, e.g. "01.08.2024 - 02.08.2024"
+ *
+ * @param fromDate the date
+ * @param toDate the date to compare it to
+ * @param translate the translate service
+ * @returns a dateRange, or null if either fromDate or toDate invalid
+ */
+ export function toDateRange(fromDate: Date, toDate: Date, translate: TranslateService): string | null {
+
+ if (!fromDate || !toDate) {
+ return null;
+ }
+ return format(fromDate, translate.instant("General.dateFormat")) + " - " + format(toDate, translate.instant("General.dateFormat"));
+ }
}
diff --git a/ui/src/app/shared/utils/datetime/datetime-utils.ts b/ui/src/app/shared/utils/datetime/datetime-utils.ts
index aec8bad6a21..70bb0b7cc58 100644
--- a/ui/src/app/shared/utils/datetime/datetime-utils.ts
+++ b/ui/src/app/shared/utils/datetime/datetime-utils.ts
@@ -23,7 +23,7 @@ export class DateTimeUtils {
// Change first timestamp to start of month
const formattedDate = startOfMonth(DateUtils.stringToDate(energyPerPeriodResponse.result.timestamps[0]));
- energyPerPeriodResponse.result.timestamps[0] = format(formattedDate, 'yyyy-MM-dd HH:mm:ss', { locale: de })?.toString() ?? energyPerPeriodResponse.result.timestamps[0];
+ energyPerPeriodResponse.result.timestamps[0] = format(formattedDate, "yyyy-MM-dd HH:mm:ss", { locale: de })?.toString() ?? energyPerPeriodResponse.result.timestamps[0];
// show 12 stacks, even if no data and timestamps
const newTimestamps: string[] = [];
@@ -40,7 +40,7 @@ export class DateTimeUtils {
}
energyPerPeriodResponse.result.timestamps = newTimestamps.concat(energyPerPeriodResponse.result.timestamps);
- break;
+ return energyPerPeriodResponse;
}
case ChronoUnit.Type.YEARS: {
@@ -48,11 +48,12 @@ export class DateTimeUtils {
// Change dates to be first day of year
const formattedDates = energyPerPeriodResponse.result.timestamps.map((timestamp) =>
startOfYear(DateUtils.stringToDate(timestamp)));
- energyPerPeriodResponse.result.timestamps = formattedDates.map(date => format(date, 'yyyy-MM-dd HH:mm:ss', { locale: de })?.toString());
- break;
+ energyPerPeriodResponse.result.timestamps = formattedDates.map(date => format(date, "yyyy-MM-dd HH:mm:ss", { locale: de })?.toString());
+ return energyPerPeriodResponse;
}
+ default:
+ return energyPerPeriodResponse;
}
- return energyPerPeriodResponse;
}
}
diff --git a/ui/src/app/shared/utils/time/timeutils.spec.ts b/ui/src/app/shared/utils/time/timeutils.spec.ts
index 0916acd4b76..4286ef47110 100644
--- a/ui/src/app/shared/utils/time/timeutils.spec.ts
+++ b/ui/src/app/shared/utils/time/timeutils.spec.ts
@@ -1,11 +1,11 @@
// @ts-strict-ignore
import { TimeUtils } from "./timeutils";
-describe('TimeUtils', () => {
- it('#formatSecondsToDuration', () => {
- expect(TimeUtils.formatSecondsToDuration(12000, 'de')).toEqual("3h 20m");
- expect(TimeUtils.formatSecondsToDuration(null, 'de')).toEqual(null);
- expect(TimeUtils.formatSecondsToDuration(undefined, 'de')).toEqual(null);
+describe("TimeUtils", () => {
+ it("#formatSecondsToDuration", () => {
+ expect(TimeUtils.formatSecondsToDuration(12000, "de")).toEqual("3h 20m");
+ expect(TimeUtils.formatSecondsToDuration(null, "de")).toEqual(null);
+ expect(TimeUtils.formatSecondsToDuration(undefined, "de")).toEqual(null);
expect(TimeUtils.formatSecondsToDuration(12000, null)).toEqual("3h 20m");
});
});
diff --git a/ui/src/app/shared/utils/time/timeutils.ts b/ui/src/app/shared/utils/time/timeutils.ts
index 905f2128402..2998327d2ab 100644
--- a/ui/src/app/shared/utils/time/timeutils.ts
+++ b/ui/src/app/shared/utils/time/timeutils.ts
@@ -23,9 +23,9 @@ export class TimeUtils {
minutes -= hours * 60;
if (hours <= 23 && minutes > 0) {
- return decimalPipe.transform(hours, '1.0-0') + 'h' + " " + decimalPipe.transform(minutes, '1.0-0') + 'm';
+ return decimalPipe.transform(hours, "1.0-0") + "h" + " " + decimalPipe.transform(minutes, "1.0-0") + "m";
} else {
- return decimalPipe.transform(hours, '1.0-0') + 'h';
+ return decimalPipe.transform(hours, "1.0-0") + "h";
}
}
@@ -49,9 +49,9 @@ export class TimeUtils {
const minutes = Math.floor(seconds / 60);
if (minutes > 0) {
- return decimalPipe.transform(minutes, '1.0-0') + ' min';
+ return decimalPipe.transform(minutes, "1.0-0") + " min";
} else {
- return decimalPipe.transform(seconds, '1.0-0') + ' s';
+ return decimalPipe.transform(seconds, "1.0-0") + " s";
}
}
}
diff --git a/ui/src/app/user/user.component.html b/ui/src/app/user/user.component.html
index 1f3f7407448..bc5370ebca3 100644
--- a/ui/src/app/user/user.component.html
+++ b/ui/src/app/user/user.component.html
@@ -17,9 +17,11 @@
Menu.name
- {{ this.form?.model ? ((this.form?.model?.firstname ?? '') + ' ' + (this.form?.model?.lastname ?? '')).trim() : user.name }}
-
+ {{
+ this.form?.model
+ ? ((this.form?.model?.firstname ?? '') + ' ' + (this.form?.model?.lastname ?? '')).trim()
+ : user.name
+ }}
diff --git a/ui/src/app/user/user.component.ts b/ui/src/app/user/user.component.ts
index ee2ee865b0b..b42945d1521 100644
--- a/ui/src/app/user/user.component.ts
+++ b/ui/src/app/user/user.component.ts
@@ -1,19 +1,18 @@
// @ts-strict-ignore
-import { Component, OnInit } from '@angular/core';
-import { FormGroup, Validators } from '@angular/forms';
-import { ActivatedRoute } from '@angular/router';
-import { TranslateService } from '@ngx-translate/core';
-import { Changelog } from 'src/app/changelog/view/component/changelog.constants';
-
-import { FormlyFieldConfig } from '@ngx-formly/core';
-import { environment } from '../../environments';
-import { GetUserInformationRequest } from '../shared/jsonrpc/request/getUserInformationRequest';
-import { SetUserInformationRequest } from '../shared/jsonrpc/request/setUserInformationRequest';
-import { UpdateUserLanguageRequest } from '../shared/jsonrpc/request/updateUserLanguageRequest';
-import { GetUserInformationResponse } from '../shared/jsonrpc/response/getUserInformationResponse';
-import { Service, Websocket } from '../shared/shared';
-import { COUNTRY_OPTIONS } from '../shared/type/country';
-import { Language } from '../shared/type/language';
+import { Component, OnInit } from "@angular/core";
+import { FormGroup, Validators } from "@angular/forms";
+import { ActivatedRoute } from "@angular/router";
+import { FormlyFieldConfig } from "@ngx-formly/core";
+import { TranslateService } from "@ngx-translate/core";
+import { Changelog } from "src/app/changelog/view/component/changelog.constants";
+import { environment } from "../../environments";
+import { GetUserInformationRequest } from "../shared/jsonrpc/request/getUserInformationRequest";
+import { SetUserInformationRequest } from "../shared/jsonrpc/request/setUserInformationRequest";
+import { UpdateUserLanguageRequest } from "../shared/jsonrpc/request/updateUserLanguageRequest";
+import { GetUserInformationResponse } from "../shared/jsonrpc/response/getUserInformationResponse";
+import { Service, Websocket } from "../shared/shared";
+import { COUNTRY_OPTIONS } from "../shared/type/country";
+import { Language } from "../shared/type/language";
type CompanyUserInformation = UserInformation & { companyName: string };
@@ -29,7 +28,7 @@ type UserInformation = {
};
@Component({
- templateUrl: './user.component.html',
+ templateUrl: "./user.component.html",
})
export class UserComponent implements OnInit {
@@ -68,7 +67,6 @@ export class UserComponent implements OnInit {
ngOnInit() {
// Set currentLanguage to
this.currentLanguage = Language.getByKey(localStorage.LANGUAGE) ?? Language.DEFAULT;
- this.service.setCurrentComponent({ languageKey: 'Menu.user' }, this.route);
this.getUserInformation().then((userInformation) => {
this.form = {
formGroup: new FormGroup({}),
@@ -128,13 +126,13 @@ export class UserComponent implements OnInit {
},
}];
- if (Object.prototype.hasOwnProperty.call(userInformation, 'companyName')) {
+ if (Object.prototype.hasOwnProperty.call(userInformation, "companyName")) {
this.companyInformationFields.push(
{
key: "companyName",
type: "input",
props: {
- label: this.translate.instant('Register.Form.companyName'),
+ label: this.translate.instant("Register.Form.companyName"),
disabled: true,
},
},
@@ -153,7 +151,7 @@ export class UserComponent implements OnInit {
public applyChanges() {
- const params: SetUserInformationRequest['params'] = {
+ const params: SetUserInformationRequest["params"] = {
user: {
lastname: this.form.model.lastname,
firstname: this.form.model.firstname,
@@ -169,9 +167,9 @@ export class UserComponent implements OnInit {
};
this.service.websocket.sendRequest(new SetUserInformationRequest(params)).then(() => {
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch((reason) => {
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
});
this.enableAndDisableFormFields();
this.form.formGroup.markAsPristine();
@@ -204,7 +202,7 @@ export class UserComponent implements OnInit {
return new Promise(resolve => {
const interval = setInterval(() => {
- if (this.websocket.status == 'online') {
+ if (this.websocket.status == "online") {
this.service.websocket.sendRequest(new GetUserInformationRequest()).then((response: GetUserInformationResponse) => {
const user = response.result.user;
@@ -247,8 +245,8 @@ export class UserComponent implements OnInit {
}
public toggleDebugMode(event: CustomEvent) {
- localStorage.setItem("DEBUGMODE", event.detail['checked']);
- this.environment.debugMode = event.detail['checked'];
+ localStorage.setItem("DEBUGMODE", event.detail["checked"]);
+ this.environment.debugMode = event.detail["checked"];
}
public setLanguage(language: Language): void {
@@ -257,9 +255,9 @@ export class UserComponent implements OnInit {
this.service.setLang(language);
this.websocket.sendRequest(new UpdateUserLanguageRequest({ language: language.key })).then(() => {
- this.service.toast(this.translate.instant('General.changeAccepted'), 'success');
+ this.service.toast(this.translate.instant("General.changeAccepted"), "success");
}).catch((reason) => {
- this.service.toast(this.translate.instant('General.changeFailed') + '\n' + reason.error.message, 'danger');
+ this.service.toast(this.translate.instant("General.changeFailed") + "\n" + reason.error.message, "danger");
});
this.currentLanguage = language;
diff --git a/ui/src/app/user/user.module.ts b/ui/src/app/user/user.module.ts
index 71081adaf79..a0352848700 100644
--- a/ui/src/app/user/user.module.ts
+++ b/ui/src/app/user/user.module.ts
@@ -1,6 +1,6 @@
-import { NgModule } from '@angular/core';
-import { SharedModule } from './../shared/shared.module';
-import { UserComponent } from './user.component';
+import { NgModule } from "@angular/core";
+import { SharedModule } from "./../shared/shared.module";
+import { UserComponent } from "./user.component";
@NgModule({
imports: [
diff --git a/ui/src/assets/i18n/de.json b/ui/src/assets/i18n/de.json
index 30cbdd745b0..5e45735b3cf 100644
--- a/ui/src/assets/i18n/de.json
+++ b/ui/src/assets/i18n/de.json
@@ -245,7 +245,14 @@
"CHART_TITLE": "Aktueller Fahrplan (BETA-Test)",
"CHART_WARNING_NOTE": "Die Grafik zeigt die vergangenen drei Stunden, sowie die zukünftig geplante Betriebsweise für den Zeitraum, für den die dynamischen Netzbezugspreise zur Verfügung stehen. Bitte beachten Sie, dass der Fahrplan kontinuierlich neu berechnet wird und sich somit im Tagesverlauf ändern kann.",
"POWER_SOC_CHART_TITLE": "Vorhersagen (Nur für Admins)"
- }
+ },
+ "SYSTEM": {
+ "INDUSTRIAL": {
+ "NOTE": "Startet oder stoppt das Gesamtsystem, inklusive Batteriewechselrichter und Batterien."
+ },
+ "OVERALL_SYSTEM": "Gesamtsystem"
+ },
+ "FIX_DIGITAL_OUTPUT": "Digitale Ausgangscontroller"
},
"RETROFITTING": {
"UPDATE_TO_NEW_VERSION": "Um die Kapazitätserweiterung nutzen zu können, ist ein Update auf die neueste Version erforderlich.",
@@ -947,6 +954,11 @@
"WARNING": "Im Rahmen des Systemupdates wird {{system}} neu gestartet und dabei die Kommunikation unterbrochen. In dieser Zeit werden keine Daten aufgezeichnet oder Komponenten angesteuert. Bitte stellen Sie sicher, dass sich das Gesamtsystem in einem sicheren Zustand befindet.",
"UPDATE_EXECUTE": "Systemupdate durchführen",
"SUB_HEADER": "Möchten Sie ein Systemupdate durchführen?"
+ },
+ "ENERGY_JOURNEY": {
+ "TO_THE_ANALYSIS": "Zur Analyse",
+ "CURRENT_NUMBER_OF_MODULES": "Aktuell",
+ "SIMULATION_NOT_STARTED": "Simulation nicht gestartet"
}
},
"CHANNELS": {
diff --git a/ui/src/assets/i18n/en.json b/ui/src/assets/i18n/en.json
index 7e19b725d7d..3c555925b24 100644
--- a/ui/src/assets/i18n/en.json
+++ b/ui/src/assets/i18n/en.json
@@ -246,7 +246,14 @@
"CHART_TITLE": "Planned Schedule (BETA test)",
"CHART_WARNING_NOTE": "The graphic shows the past three hours as well as the future planned operating mode for the period for which the dynamic grid purchase prices are available. Please note that the planned schedule is subject to continuous recalculation and may change throughout the day.",
"POWER_SOC_CHART_TITLE": "Forecasts (Only for Admins)"
- }
+ },
+ "SYSTEM": {
+ "INDUSTRIAL": {
+ "NOTE": "Starts or stops the entire system, including battery inverter and batteries."
+ },
+ "OVERALL_SYSTEM": "Overall system"
+ },
+ "FIX_DIGITAL_OUTPUT": "Digital Outputcontroller"
},
"RETROFITTING": {
"OPTIMAL": "Capacity expansion",
@@ -950,6 +957,11 @@
"WARNING": "The software will restart after the system update. No data is recorded or components controlled during this time. Please ensure that the entire system is in a safe state.",
"UPDATE_EXECUTE": "Execute system update",
"SUB_HEADER": "Would you like to execute a system update?"
+ },
+ "ENERGY_JOURNEY": {
+ "TO_THE_ANALYSIS": "To the analysis",
+ "CURRENT_NUMBER_OF_MODULES": "Current",
+ "SIMULATION_NOT_STARTED": "Simulation not started"
}
},
"CHANNELS": {
@@ -972,4 +984,4 @@
"APP": {
"FUNCTIONALITY_TEMPORARILY_NOT_AVAILABLE": "This function is temporarily not available in the app, please use the web app instead."
}
-}
\ No newline at end of file
+}
diff --git a/ui/src/environments/index.ts b/ui/src/environments/index.ts
index 0515cc35d5d..e10181d51ce 100644
--- a/ui/src/environments/index.ts
+++ b/ui/src/environments/index.ts
@@ -1,9 +1,9 @@
-import { TranslateService } from '@ngx-translate/core';
-import { Filter } from 'src/app/index/filter/filter.component';
-import { DefaultTypes } from 'src/app/shared/service/defaulttypes';
-export { environment } from './dummy';
+import { TranslateService } from "@ngx-translate/core";
+import { Filter } from "src/app/index/filter/filter.component";
+import { DefaultTypes } from "src/app/shared/service/defaulttypes";
+export { environment } from "./dummy";
-export type Theme = 'OpenEMS';
+export type Theme = "OpenEMS";
export interface Environment {
readonly theme: Theme;
diff --git a/ui/src/global.scss b/ui/src/global.scss
index f29dac900c2..59a24c31264 100644
--- a/ui/src/global.scss
+++ b/ui/src/global.scss
@@ -26,6 +26,13 @@
@import "node_modules/ngx-spinner/animations/ball-clip-rotate-multiple.css";
@import "variables";
+/* Live- and HistoryComponent*/
+ion-refresher-content {
+ ion-spinner {
+ left: 0 !important;
+ }
+}
+
.custom-ion-popover {
white-space: inherit;
@@ -250,6 +257,7 @@ formly-input-section {
.alert-button-group {
justify-content: space-between;
+
.alert-button {
color: $primary-color;
font-size: small;
@@ -395,4 +403,4 @@ ion-modal.full-width {
--storage-segment-2: block;
--storage-segment-3: block;
--storage-segment-4: block;
-}
+}
\ No newline at end of file
diff --git a/ui/src/main.ts b/ui/src/main.ts
index 43c16a32c32..cb2219c75a6 100644
--- a/ui/src/main.ts
+++ b/ui/src/main.ts
@@ -1,7 +1,7 @@
-import { enableProdMode } from '@angular/core';
-import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
-import { environment } from 'src/environments';
-import { AppModule } from 'src/app/app.module';
+import { enableProdMode } from "@angular/core";
+import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
+import { AppModule } from "src/app/app.module";
+import { environment } from "src/environments";
if (environment.production) {
enableProdMode();
diff --git a/ui/src/polyfills.ts b/ui/src/polyfills.ts
index 5aacd21714a..1f1d0cedfd1 100644
--- a/ui/src/polyfills.ts
+++ b/ui/src/polyfills.ts
@@ -19,7 +19,7 @@
*/
/** IE11 requires the following for NgClass support on SVG elements */
-import 'classlist.js'; // Run `npm install --save classlist.js`.
+import "classlist.js"; // Run `npm install --save classlist.js`.
/**
* Web Animations `@angular/platform-browser/animations`
@@ -52,12 +52,14 @@ import 'classlist.js'; // Run `npm install --save classlist.js`.
*
*/
-import './zone-flags';
+import "./zone-flags";
/***************************************************************************************************
* Zone JS is required by default for Angular itself.
*/
-import 'zone.js/dist/zone'; // Included with Angular CLI.
+import "zone.js";
+
+// Included with Angular CLI.
/***************************************************************************************************
diff --git a/ui/src/test.ts b/ui/src/test.ts
index d8e68564e1b..31342e27233 100644
--- a/ui/src/test.ts
+++ b/ui/src/test.ts
@@ -7,12 +7,13 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
-import 'zone.js/testing';
-import { getTestBed } from '@angular/core/testing';
+import "zone.js/testing";
+
+import { getTestBed } from "@angular/core/testing";
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting,
-} from '@angular/platform-browser-dynamic/testing';
+} from "@angular/platform-browser-dynamic/testing";
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
diff --git a/ui/src/themes/openems/environments/backend-dev.ts b/ui/src/themes/openems/environments/backend-dev.ts
index f48b00c5e42..a6726d2b8c5 100644
--- a/ui/src/themes/openems/environments/backend-dev.ts
+++ b/ui/src/themes/openems/environments/backend-dev.ts
@@ -4,7 +4,7 @@ import { theme } from "./theme";
export const environment: Environment = {
...theme, ...{
- backend: 'OpenEMS Backend',
+ backend: "OpenEMS Backend",
url: "ws://" + location.hostname + ":8082",
production: false,
diff --git a/ui/src/themes/openems/environments/backend-docker.ts b/ui/src/themes/openems/environments/backend-docker.ts
index f49468be729..078845ad97c 100644
--- a/ui/src/themes/openems/environments/backend-docker.ts
+++ b/ui/src/themes/openems/environments/backend-docker.ts
@@ -11,7 +11,7 @@ const window_env = (window as any).env as { [key: string]: string };
export const environment: Environment = {
...theme, ...{
- backend: 'OpenEMS Backend',
+ backend: "OpenEMS Backend",
url: window_env.websocket,
production: true,
diff --git a/ui/src/themes/openems/environments/backend-prod.ts b/ui/src/themes/openems/environments/backend-prod.ts
index ae5bb5eb32f..ebfe2b1ecf2 100644
--- a/ui/src/themes/openems/environments/backend-prod.ts
+++ b/ui/src/themes/openems/environments/backend-prod.ts
@@ -4,7 +4,7 @@ import { theme } from "./theme";
export const environment: Environment = {
...theme, ...{
- backend: 'OpenEMS Backend',
+ backend: "OpenEMS Backend",
url: "ws://" + location.hostname + ":8082",
production: true,
diff --git a/ui/src/themes/openems/environments/edge-dev.ts b/ui/src/themes/openems/environments/edge-dev.ts
index 164dd04f34e..b36d202ef27 100644
--- a/ui/src/themes/openems/environments/edge-dev.ts
+++ b/ui/src/themes/openems/environments/edge-dev.ts
@@ -4,7 +4,7 @@ import { theme } from "./theme";
export const environment: Environment = {
...theme, ...{
- backend: 'OpenEMS Edge',
+ backend: "OpenEMS Edge",
url: "ws://" + location.hostname + ":8085",
production: false,
diff --git a/ui/src/themes/openems/environments/edge-docker.ts b/ui/src/themes/openems/environments/edge-docker.ts
index 810acf2717a..59371199cdd 100644
--- a/ui/src/themes/openems/environments/edge-docker.ts
+++ b/ui/src/themes/openems/environments/edge-docker.ts
@@ -11,7 +11,7 @@ const window_env = (window as any).env as { [key: string]: string };
export const environment: Environment = {
...theme, ...{
- backend: 'OpenEMS Edge',
+ backend: "OpenEMS Edge",
url: window_env.websocket,
production: true,
diff --git a/ui/src/themes/openems/environments/edge-prod.ts b/ui/src/themes/openems/environments/edge-prod.ts
index bcaf40f6901..183a4f0fef9 100644
--- a/ui/src/themes/openems/environments/edge-prod.ts
+++ b/ui/src/themes/openems/environments/edge-prod.ts
@@ -4,7 +4,7 @@ import { theme } from "./theme";
export const environment: Environment = {
...theme, ...{
- backend: 'OpenEMS Edge',
+ backend: "OpenEMS Edge",
url: "ws://" + location.hostname + ":8075",
production: true,
diff --git a/ui/src/themes/openems/environments/gitpod.ts b/ui/src/themes/openems/environments/gitpod.ts
index 1ef2f8ca499..88de7c57cdc 100644
--- a/ui/src/themes/openems/environments/gitpod.ts
+++ b/ui/src/themes/openems/environments/gitpod.ts
@@ -4,7 +4,7 @@ import { theme } from "./theme";
export const environment: Environment = {
...theme, ...{
- backend: 'OpenEMS Backend',
+ backend: "OpenEMS Backend",
// gitpod puts the port number in front of the hostname
url: "wss://8082-" + location.hostname.substring(location.hostname.indexOf("-") + 1),
diff --git a/ui/src/themes/openems/environments/theme.ts b/ui/src/themes/openems/environments/theme.ts
index bf94176f4f7..d771eb259d7 100644
--- a/ui/src/themes/openems/environments/theme.ts
+++ b/ui/src/themes/openems/environments/theme.ts
@@ -1,4 +1,4 @@
-import { Theme } from 'src/environments';
+import { Theme } from "src/environments";
export const theme = {
theme: "OpenEMS" as Theme,
diff --git a/ui/src/themes/openems/root/site.webmanifest b/ui/src/themes/openems/root/site.webmanifest
index 58e369e755e..b4bc8f030b2 100644
--- a/ui/src/themes/openems/root/site.webmanifest
+++ b/ui/src/themes/openems/root/site.webmanifest
@@ -16,4 +16,4 @@
"theme_color": "#f4a942",
"background_color": "#f4a942",
"display": "standalone"
-}
\ No newline at end of file
+}
diff --git a/ui/tsconfig.app.json b/ui/tsconfig.app.json
index da9cb8b9de2..82d91dc4a4d 100644
--- a/ui/tsconfig.app.json
+++ b/ui/tsconfig.app.json
@@ -12,4 +12,4 @@
"include": [
"src/**/*.d.ts"
]
-}
\ No newline at end of file
+}
diff --git a/ui/tsconfig.spec.json b/ui/tsconfig.spec.json
index 87be9d5b3f1..092345b02e8 100644
--- a/ui/tsconfig.spec.json
+++ b/ui/tsconfig.spec.json
@@ -15,4 +15,4 @@
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
-}
\ No newline at end of file
+}