Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development
This commit is contained in:
commit
ca308d0895
@ -13,33 +13,38 @@ public:
|
|||||||
private:
|
private:
|
||||||
void onPrometheusMetricsGet(AsyncWebServerRequest* request);
|
void onPrometheusMetricsGet(AsyncWebServerRequest* request);
|
||||||
|
|
||||||
void addField(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId, const char* channelName = NULL);
|
void addField(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId, const char* metricName, const char* channelName = NULL);
|
||||||
|
|
||||||
void addPanelInfo(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel);
|
void addPanelInfo(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel);
|
||||||
|
|
||||||
AsyncWebServer* _server;
|
AsyncWebServer* _server;
|
||||||
|
|
||||||
enum {
|
enum MetricType_t {
|
||||||
METRIC_TYPE_NONE = 0,
|
NONE = 0,
|
||||||
METRIC_TYPE_GAUGE,
|
GAUGE,
|
||||||
METRIC_TYPE_COUNTER,
|
COUNTER,
|
||||||
};
|
};
|
||||||
const char* _metricTypes[3] = { 0, "gauge", "counter" };
|
const char* _metricTypes[3] = { 0, "gauge", "counter" };
|
||||||
|
|
||||||
std::map<FieldId_t, uint8_t> _fieldMetricAssignment {
|
struct publish_type_t {
|
||||||
{ FLD_UDC, METRIC_TYPE_GAUGE },
|
FieldId_t field;
|
||||||
{ FLD_IDC, METRIC_TYPE_GAUGE },
|
MetricType_t type;
|
||||||
{ FLD_PDC, METRIC_TYPE_GAUGE },
|
};
|
||||||
{ FLD_YD, METRIC_TYPE_COUNTER },
|
|
||||||
{ FLD_YT, METRIC_TYPE_COUNTER },
|
const publish_type_t _publishFields[14] = {
|
||||||
{ FLD_UAC, METRIC_TYPE_GAUGE },
|
{ FLD_PAC, MetricType_t::GAUGE },
|
||||||
{ FLD_IAC, METRIC_TYPE_GAUGE },
|
{ FLD_UAC, MetricType_t::GAUGE },
|
||||||
{ FLD_PAC, METRIC_TYPE_GAUGE },
|
{ FLD_IAC, MetricType_t::GAUGE },
|
||||||
{ FLD_F, METRIC_TYPE_GAUGE },
|
{ FLD_PDC, MetricType_t::GAUGE },
|
||||||
{ FLD_T, METRIC_TYPE_GAUGE },
|
{ FLD_UDC, MetricType_t::GAUGE },
|
||||||
{ FLD_PF, METRIC_TYPE_GAUGE },
|
{ FLD_IDC, MetricType_t::GAUGE },
|
||||||
{ FLD_EFF, METRIC_TYPE_GAUGE },
|
{ FLD_YD, MetricType_t::COUNTER },
|
||||||
{ FLD_IRR, METRIC_TYPE_GAUGE },
|
{ FLD_YT, MetricType_t::COUNTER },
|
||||||
{ FLD_Q, METRIC_TYPE_GAUGE }
|
{ FLD_F, MetricType_t::GAUGE },
|
||||||
|
{ FLD_T, MetricType_t::GAUGE },
|
||||||
|
{ FLD_PF, MetricType_t::GAUGE },
|
||||||
|
{ FLD_Q, MetricType_t::GAUGE },
|
||||||
|
{ FLD_EFF, MetricType_t::GAUGE },
|
||||||
|
{ FLD_IRR, MetricType_t::GAUGE },
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -36,7 +36,7 @@ static const byteAssign_t byteAssignment[] = {
|
|||||||
{ TYPE_AC, CH0, FLD_UAC, UNIT_V, 50, 2, 10, false, 1 },
|
{ TYPE_AC, CH0, FLD_UAC, UNIT_V, 50, 2, 10, false, 1 },
|
||||||
{ TYPE_AC, CH0, FLD_IAC, UNIT_A, 58, 2, 100, false, 2 },
|
{ TYPE_AC, CH0, FLD_IAC, UNIT_A, 58, 2, 100, false, 2 },
|
||||||
{ TYPE_AC, CH0, FLD_PAC, UNIT_W, 54, 2, 10, false, 1 },
|
{ TYPE_AC, CH0, FLD_PAC, UNIT_W, 54, 2, 10, false, 1 },
|
||||||
{ TYPE_AC, CH0, FLD_Q, UNIT_VAR, 56, 2, 10, false, 1 },
|
{ TYPE_AC, CH0, FLD_Q, UNIT_VAR, 56, 2, 10, true, 1 },
|
||||||
{ TYPE_AC, CH0, FLD_F, UNIT_HZ, 52, 2, 100, false, 2 },
|
{ TYPE_AC, CH0, FLD_F, UNIT_HZ, 52, 2, 100, false, 2 },
|
||||||
{ TYPE_AC, CH0, FLD_PF, UNIT_NONE, 60, 2, 1000, false, 3 },
|
{ TYPE_AC, CH0, FLD_PF, UNIT_NONE, 60, 2, 1000, false, 3 },
|
||||||
|
|
||||||
|
|||||||
@ -150,6 +150,13 @@ float StatisticsParser::getChannelFieldValue(ChannelType_t type, ChannelNum_t ch
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String StatisticsParser::getChannelFieldValueString(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId)
|
||||||
|
{
|
||||||
|
return String(
|
||||||
|
getChannelFieldValue(type, channel, fieldId),
|
||||||
|
static_cast<unsigned int>(getChannelFieldDigits(type, channel, fieldId)));
|
||||||
|
}
|
||||||
|
|
||||||
bool StatisticsParser::hasChannelFieldValue(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId)
|
bool StatisticsParser::hasChannelFieldValue(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId)
|
||||||
{
|
{
|
||||||
const byteAssign_t* pos = getAssignmentByChannelField(type, channel, fieldId);
|
const byteAssign_t* pos = getAssignmentByChannelField(type, channel, fieldId);
|
||||||
|
|||||||
@ -119,6 +119,7 @@ public:
|
|||||||
fieldSettings_t* getSettingByChannelField(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
fieldSettings_t* getSettingByChannelField(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
||||||
|
|
||||||
float getChannelFieldValue(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
float getChannelFieldValue(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
||||||
|
String getChannelFieldValueString(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
||||||
bool hasChannelFieldValue(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
bool hasChannelFieldValue(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
||||||
const char* getChannelFieldUnit(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
const char* getChannelFieldUnit(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
||||||
const char* getChannelFieldName(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
const char* getChannelFieldName(ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId);
|
||||||
|
|||||||
@ -126,11 +126,7 @@ void MqttHandleInverterClass::publishField(std::shared_ptr<InverterAbstract> inv
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String value = String(
|
MqttSettings.publish(topic, inv->Statistics()->getChannelFieldValueString(type, channel, fieldId));
|
||||||
inv->Statistics()->getChannelFieldValue(type, channel, fieldId),
|
|
||||||
static_cast<unsigned int>(inv->Statistics()->getChannelFieldDigits(type, channel, fieldId)));
|
|
||||||
|
|
||||||
MqttSettings.publish(topic, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String MqttHandleInverterClass::getTopic(std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId)
|
String MqttHandleInverterClass::getTopic(std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId)
|
||||||
|
|||||||
@ -34,7 +34,7 @@ void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncJsonResponse* response = new AsyncJsonResponse(false, 4096U);
|
AsyncJsonResponse* response = new AsyncJsonResponse(false, 768 * INV_MAX_COUNT);
|
||||||
JsonObject root = response->getRoot();
|
JsonObject root = response->getRoot();
|
||||||
JsonArray data = root.createNestedArray("inverter");
|
JsonArray data = root.createNestedArray("inverter");
|
||||||
|
|
||||||
|
|||||||
@ -75,24 +75,13 @@ void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* reques
|
|||||||
for (auto& t : inv->Statistics()->getChannelTypes()) {
|
for (auto& t : inv->Statistics()->getChannelTypes()) {
|
||||||
for (auto& c : inv->Statistics()->getChannelsByType(t)) {
|
for (auto& c : inv->Statistics()->getChannelsByType(t)) {
|
||||||
addPanelInfo(stream, serial, i, inv, t, c);
|
addPanelInfo(stream, serial, i, inv, t, c);
|
||||||
addField(stream, serial, i, inv, t, c, FLD_PAC);
|
for (uint8_t f = 0; f < sizeof(_publishFields) / sizeof(_publishFields[0]); f++) {
|
||||||
addField(stream, serial, i, inv, t, c, FLD_UAC);
|
if (t == TYPE_AC && _publishFields[f].field == FLD_PDC) {
|
||||||
addField(stream, serial, i, inv, t, c, FLD_IAC);
|
addField(stream, serial, i, inv, t, c, _publishFields[f].field, _metricTypes[_publishFields[f].type], "PowerDC");
|
||||||
if (t == TYPE_AC) {
|
} else {
|
||||||
addField(stream, serial, i, inv, t, c, FLD_PDC, "PowerDC");
|
addField(stream, serial, i, inv, t, c, _publishFields[f].field, _metricTypes[_publishFields[f].type]);
|
||||||
} else {
|
}
|
||||||
addField(stream, serial, i, inv, t, c, FLD_PDC);
|
|
||||||
}
|
}
|
||||||
addField(stream, serial, i, inv, t, c, FLD_UDC);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_IDC);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_YD);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_YT);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_F);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_T);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_PF);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_Q);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_EFF);
|
|
||||||
addField(stream, serial, i, inv, t, c, FLD_IRR);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,22 +96,22 @@ void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* reques
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebApiPrometheusClass::addField(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId, const char* channelName)
|
void WebApiPrometheusClass::addField(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, ChannelType_t type, ChannelNum_t channel, FieldId_t fieldId, const char* metricName, const char* channelName)
|
||||||
{
|
{
|
||||||
if (inv->Statistics()->hasChannelFieldValue(type, channel, fieldId)) {
|
if (inv->Statistics()->hasChannelFieldValue(type, channel, fieldId)) {
|
||||||
const char* chanName = (channelName == NULL) ? inv->Statistics()->getChannelFieldName(type, channel, fieldId) : channelName;
|
const char* chanName = (channelName == NULL) ? inv->Statistics()->getChannelFieldName(type, channel, fieldId) : channelName;
|
||||||
if (idx == 0 && type == TYPE_AC && channel == 0) {
|
if (idx == 0 && type == TYPE_AC && channel == 0) {
|
||||||
stream->printf("# HELP opendtu_%s in %s\n", chanName, inv->Statistics()->getChannelFieldUnit(type, channel, fieldId));
|
stream->printf("# HELP opendtu_%s in %s\n", chanName, inv->Statistics()->getChannelFieldUnit(type, channel, fieldId));
|
||||||
stream->printf("# TYPE opendtu_%s %s\n", chanName, _metricTypes[_fieldMetricAssignment[fieldId]]);
|
stream->printf("# TYPE opendtu_%s %s\n", chanName, metricName);
|
||||||
}
|
}
|
||||||
stream->printf("opendtu_%s{serial=\"%s\",unit=\"%d\",name=\"%s\",type=\"%s\",channel=\"%d\"} %f\n",
|
stream->printf("opendtu_%s{serial=\"%s\",unit=\"%d\",name=\"%s\",type=\"%s\",channel=\"%d\"} %s\n",
|
||||||
chanName,
|
chanName,
|
||||||
serial.c_str(),
|
serial.c_str(),
|
||||||
idx,
|
idx,
|
||||||
inv->name(),
|
inv->name(),
|
||||||
inv->Statistics()->getChannelTypeName(type),
|
inv->Statistics()->getChannelTypeName(type),
|
||||||
channel,
|
channel,
|
||||||
inv->Statistics()->getChannelFieldValue(type, channel, fieldId));
|
inv->Statistics()->getChannelFieldValueString(type, channel, fieldId).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
webapp/.gitignore
vendored
1
webapp/.gitignore
vendored
@ -13,6 +13,7 @@ dist
|
|||||||
dist-ssr
|
dist-ssr
|
||||||
coverage
|
coverage
|
||||||
*.local
|
*.local
|
||||||
|
vite.user.ts
|
||||||
|
|
||||||
/cypress/videos/
|
/cypress/videos/
|
||||||
/cypress/screenshots/
|
/cypress/screenshots/
|
||||||
|
|||||||
@ -22,18 +22,18 @@
|
|||||||
"vue-router": "^4.2.4"
|
"vue-router": "^4.2.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@intlify/unplugin-vue-i18n": "^0.12.2",
|
"@intlify/unplugin-vue-i18n": "^0.12.3",
|
||||||
"@rushstack/eslint-patch": "^1.3.3",
|
"@rushstack/eslint-patch": "^1.3.3",
|
||||||
"@tsconfig/node18": "^18.2.0",
|
"@tsconfig/node18": "^18.2.1",
|
||||||
"@types/bootstrap": "^5.2.6",
|
"@types/bootstrap": "^5.2.6",
|
||||||
"@types/node": "^20.4.8",
|
"@types/node": "^20.5.1",
|
||||||
"@types/sortablejs": "^1.15.1",
|
"@types/sortablejs": "^1.15.1",
|
||||||
"@types/spark-md5": "^3.0.2",
|
"@types/spark-md5": "^3.0.2",
|
||||||
"@vitejs/plugin-vue": "^4.2.3",
|
"@vitejs/plugin-vue": "^4.3.3",
|
||||||
"@vue/eslint-config-typescript": "^11.0.3",
|
"@vue/eslint-config-typescript": "^11.0.3",
|
||||||
"@vue/tsconfig": "^0.4.0",
|
"@vue/tsconfig": "^0.4.0",
|
||||||
"eslint": "^8.46.0",
|
"eslint": "^8.47.0",
|
||||||
"eslint-plugin-vue": "^9.16.1",
|
"eslint-plugin-vue": "^9.17.0",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"sass": "^1.64.2",
|
"sass": "^1.64.2",
|
||||||
"terser": "^5.19.2",
|
"terser": "^5.19.2",
|
||||||
|
|||||||
@ -690,9 +690,9 @@
|
|||||||
"DefaultProfile": "(Standardeinstellungen)",
|
"DefaultProfile": "(Standardeinstellungen)",
|
||||||
"ProfileHint": "Ihr Gerät reagiert möglicherweise nicht mehr, wenn Sie ein inkompatibles Profil wählen. In diesem Fall müssen Sie eine Löschung über das serielle Interface durchführen.",
|
"ProfileHint": "Ihr Gerät reagiert möglicherweise nicht mehr, wenn Sie ein inkompatibles Profil wählen. In diesem Fall müssen Sie eine Löschung über das serielle Interface durchführen.",
|
||||||
"Display": "Display",
|
"Display": "Display",
|
||||||
"PowerSafe": "Power Safe aktivieren:",
|
"PowerSafe": "Stromsparen aktivieren:",
|
||||||
"PowerSafeHint": "Schaltet das Display aus, wenn kein Wechselrichter Strom erzeugt",
|
"PowerSafeHint": "Schaltet das Display aus, wenn kein Wechselrichter Strom erzeugt",
|
||||||
"Screensaver": "Screensaver aktivieren:",
|
"Screensaver": "Bildschirmschoner aktivieren:",
|
||||||
"ScreensaverHint": "Bewegt die Ausgabe bei jeder Aktualisierung um ein Einbrennen zu verhindern (v. a. für OLED-Displays nützlich)",
|
"ScreensaverHint": "Bewegt die Ausgabe bei jeder Aktualisierung um ein Einbrennen zu verhindern (v. a. für OLED-Displays nützlich)",
|
||||||
"Contrast": "Kontrast ({contrast}):",
|
"Contrast": "Kontrast ({contrast}):",
|
||||||
"Rotation": "Rotation:",
|
"Rotation": "Rotation:",
|
||||||
|
|||||||
@ -699,7 +699,7 @@
|
|||||||
"DefaultProfile": "(Default settings)",
|
"DefaultProfile": "(Default settings)",
|
||||||
"ProfileHint": "Your device may stop responding if you select an incompatible profile. In this case, you must perform a deletion via the serial interface.",
|
"ProfileHint": "Your device may stop responding if you select an incompatible profile. In this case, you must perform a deletion via the serial interface.",
|
||||||
"Display": "Display",
|
"Display": "Display",
|
||||||
"PowerSafe": "Enable Power Safe:",
|
"PowerSafe": "Enable Power Save:",
|
||||||
"PowerSafeHint": "Turn off the display if no inverter is producing.",
|
"PowerSafeHint": "Turn off the display if no inverter is producing.",
|
||||||
"Screensaver": "Enable Screensaver:",
|
"Screensaver": "Enable Screensaver:",
|
||||||
"ScreensaverHint": "Move the display a little bit on each update to prevent burn-in. (Useful especially for OLED displays)",
|
"ScreensaverHint": "Move the display a little bit on each update to prevent burn-in. (Useful especially for OLED displays)",
|
||||||
|
|||||||
@ -9,6 +9,14 @@ import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
|
|||||||
|
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
|
// example 'vite.user.ts': export const proxy_target = '192.168.16.107'
|
||||||
|
let proxy_target;
|
||||||
|
try {
|
||||||
|
proxy_target = require('./vite.user.ts').proxy_target;
|
||||||
|
} catch (error) {
|
||||||
|
proxy_target = '192.168.20.110';
|
||||||
|
}
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [
|
plugins: [
|
||||||
@ -52,20 +60,15 @@ export default defineConfig({
|
|||||||
server: {
|
server: {
|
||||||
proxy: {
|
proxy: {
|
||||||
'^/api': {
|
'^/api': {
|
||||||
target: 'http://192.168.178.87/'
|
target: 'http://' + proxy_target
|
||||||
},
|
},
|
||||||
'^/livedata': {
|
'^/livedata': {
|
||||||
target: 'ws://192.168.178.87/',
|
target: 'ws://' + proxy_target,
|
||||||
ws: true,
|
|
||||||
changeOrigin: true
|
|
||||||
},
|
|
||||||
'^/vedirectlivedata': {
|
|
||||||
target: 'ws://192.168.178.87/',
|
|
||||||
ws: true,
|
ws: true,
|
||||||
changeOrigin: true
|
changeOrigin: true
|
||||||
},
|
},
|
||||||
'^/console': {
|
'^/console': {
|
||||||
target: 'ws://192.168.178.87/',
|
target: 'ws://' + proxy_target,
|
||||||
ws: true,
|
ws: true,
|
||||||
changeOrigin: true
|
changeOrigin: true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -151,10 +151,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
|
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
|
||||||
integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
|
integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
|
||||||
|
|
||||||
"@eslint/eslintrc@^2.1.1":
|
"@eslint/eslintrc@^2.1.2":
|
||||||
version "2.1.1"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93"
|
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396"
|
||||||
integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==
|
integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv "^6.12.4"
|
ajv "^6.12.4"
|
||||||
debug "^4.3.2"
|
debug "^4.3.2"
|
||||||
@ -166,10 +166,10 @@
|
|||||||
minimatch "^3.1.2"
|
minimatch "^3.1.2"
|
||||||
strip-json-comments "^3.1.1"
|
strip-json-comments "^3.1.1"
|
||||||
|
|
||||||
"@eslint/js@^8.46.0":
|
"@eslint/js@^8.47.0":
|
||||||
version "8.46.0"
|
version "8.47.0"
|
||||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6"
|
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d"
|
||||||
integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==
|
integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==
|
||||||
|
|
||||||
"@humanwhocodes/config-array@^0.11.10":
|
"@humanwhocodes/config-array@^0.11.10":
|
||||||
version "0.11.10"
|
version "0.11.10"
|
||||||
@ -249,10 +249,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.24.tgz#23e08af9fc904fe3ef896786f9e659da6bb567b5"
|
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.24.tgz#23e08af9fc904fe3ef896786f9e659da6bb567b5"
|
||||||
integrity sha512-AKxJ8s7eKIQWkNaf4wyyoLRwf4puCuQgjSChlDJm5JBEt6T8HGgnYTJLRXu6LD/JACn3Qwu6hM/XRX1c9yvjmQ==
|
integrity sha512-AKxJ8s7eKIQWkNaf4wyyoLRwf4puCuQgjSChlDJm5JBEt6T8HGgnYTJLRXu6LD/JACn3Qwu6hM/XRX1c9yvjmQ==
|
||||||
|
|
||||||
"@intlify/unplugin-vue-i18n@^0.12.2":
|
"@intlify/unplugin-vue-i18n@^0.12.3":
|
||||||
version "0.12.2"
|
version "0.12.3"
|
||||||
resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.12.2.tgz#64f7aad79cff1c4e8ff199cc059ea2bb9c36b2bb"
|
resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.12.3.tgz#fae7d92d3e7bfe9e710fb332b28d22e0f8d999f2"
|
||||||
integrity sha512-IIgzLRSPUKZM1FBdUAZ9NwVPiLUr4ea5g/HLWe2lB7gNtPDz4FOfUNUllIT504hT+3pDoJmjaYJ6pyqT7F4Wuw==
|
integrity sha512-0riPtSfTM58JmGNMmJho/aHD2z3K24BESYAmkLvKlo61/LbaPvnjYU1DbSbJEm6bSjE2oEjUj+di3QaYxXei/w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@intlify/bundle-utils" "^7.0.2"
|
"@intlify/bundle-utils" "^7.0.2"
|
||||||
"@intlify/shared" "9.3.0-beta.24"
|
"@intlify/shared" "9.3.0-beta.24"
|
||||||
@ -360,10 +360,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz#16ab6c727d8c2020a5b6e4a176a243ecd88d8d69"
|
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz#16ab6c727d8c2020a5b6e4a176a243ecd88d8d69"
|
||||||
integrity sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==
|
integrity sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==
|
||||||
|
|
||||||
"@tsconfig/node18@^18.2.0":
|
"@tsconfig/node18@^18.2.1":
|
||||||
version "18.2.0"
|
version "18.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/@tsconfig/node18/-/node18-18.2.0.tgz#d6b5358b3fa85fe89b13b46cb1e996e4d79d6a07"
|
resolved "https://registry.yarnpkg.com/@tsconfig/node18/-/node18-18.2.1.tgz#ebf5e6b8d94e9de072e712bc197d6441a325ed61"
|
||||||
integrity sha512-yhxwIlFVSVcMym3O31HoMnRXpoenmpIxcj4Yoes2DUpe+xCJnA7ECQP1Vw889V0jTt/2nzvpLQ/UuMYCd3JPIg==
|
integrity sha512-RDDZFuofwkcKpl8Vpj5wFbY+H53xOtqK7ckEL1sXsbPwvKwDdjQf3LkHbtt9sxIHn9nWIEwkmCwBRZ6z5TKU2A==
|
||||||
|
|
||||||
"@types/bootstrap@^5.2.6":
|
"@types/bootstrap@^5.2.6":
|
||||||
version "5.2.6"
|
version "5.2.6"
|
||||||
@ -382,10 +382,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
||||||
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
||||||
|
|
||||||
"@types/node@^20.4.8":
|
"@types/node@^20.5.1":
|
||||||
version "20.4.8"
|
version "20.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.8.tgz#b5dda19adaa473a9bf0ab5cbd8f30ec7d43f5c85"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30"
|
||||||
integrity sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==
|
integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==
|
||||||
|
|
||||||
"@types/semver@^7.3.12":
|
"@types/semver@^7.3.12":
|
||||||
version "7.3.13"
|
version "7.3.13"
|
||||||
@ -486,10 +486,10 @@
|
|||||||
"@typescript-eslint/types" "5.59.1"
|
"@typescript-eslint/types" "5.59.1"
|
||||||
eslint-visitor-keys "^3.3.0"
|
eslint-visitor-keys "^3.3.0"
|
||||||
|
|
||||||
"@vitejs/plugin-vue@^4.2.3":
|
"@vitejs/plugin-vue@^4.3.3":
|
||||||
version "4.2.3"
|
version "4.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6"
|
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.3.3.tgz#3b2337f64495f95cfea5b1497d2d3f4a0b3382b2"
|
||||||
integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==
|
integrity sha512-ssxyhIAZqB0TrpUg6R0cBpCuMk9jTIlO1GNSKKQD6S8VjnXi6JXKfUXjSsxey9IwQiaRGsO1WnW9Rkl1L6AJVw==
|
||||||
|
|
||||||
"@volar/language-core@1.10.0", "@volar/language-core@~1.10.0":
|
"@volar/language-core@1.10.0", "@volar/language-core@~1.10.0":
|
||||||
version "1.10.0"
|
version "1.10.0"
|
||||||
@ -1104,10 +1104,10 @@ escodegen@^2.0.0:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
source-map "~0.6.1"
|
source-map "~0.6.1"
|
||||||
|
|
||||||
eslint-plugin-vue@^9.16.1:
|
eslint-plugin-vue@^9.17.0:
|
||||||
version "9.16.1"
|
version "9.17.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.16.1.tgz#3508d9279d797b40889db76da2fd26524e9144e6"
|
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz#4501547373f246547083482838b4c8f4b28e5932"
|
||||||
integrity sha512-2FtnTqazA6aYONfDuOZTk0QzwhAwi7Z4+uJ7+GHeGxcKapjqWlDsRWDenvyG/utyOfAS5bVRmAG3cEWiYEz2bA==
|
integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/eslint-utils" "^4.4.0"
|
"@eslint-community/eslint-utils" "^4.4.0"
|
||||||
natural-compare "^1.4.0"
|
natural-compare "^1.4.0"
|
||||||
@ -1163,20 +1163,20 @@ eslint-visitor-keys@^3.4.1:
|
|||||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
|
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
|
||||||
integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
|
integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
|
||||||
|
|
||||||
eslint-visitor-keys@^3.4.2:
|
eslint-visitor-keys@^3.4.3:
|
||||||
version "3.4.2"
|
version "3.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f"
|
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
|
||||||
integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==
|
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||||
|
|
||||||
eslint@^8.46.0:
|
eslint@^8.47.0:
|
||||||
version "8.46.0"
|
version "8.47.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552"
|
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.47.0.tgz#c95f9b935463fb4fad7005e626c7621052e90806"
|
||||||
integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==
|
integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/eslint-utils" "^4.2.0"
|
"@eslint-community/eslint-utils" "^4.2.0"
|
||||||
"@eslint-community/regexpp" "^4.6.1"
|
"@eslint-community/regexpp" "^4.6.1"
|
||||||
"@eslint/eslintrc" "^2.1.1"
|
"@eslint/eslintrc" "^2.1.2"
|
||||||
"@eslint/js" "^8.46.0"
|
"@eslint/js" "^8.47.0"
|
||||||
"@humanwhocodes/config-array" "^0.11.10"
|
"@humanwhocodes/config-array" "^0.11.10"
|
||||||
"@humanwhocodes/module-importer" "^1.0.1"
|
"@humanwhocodes/module-importer" "^1.0.1"
|
||||||
"@nodelib/fs.walk" "^1.2.8"
|
"@nodelib/fs.walk" "^1.2.8"
|
||||||
@ -1187,7 +1187,7 @@ eslint@^8.46.0:
|
|||||||
doctrine "^3.0.0"
|
doctrine "^3.0.0"
|
||||||
escape-string-regexp "^4.0.0"
|
escape-string-regexp "^4.0.0"
|
||||||
eslint-scope "^7.2.2"
|
eslint-scope "^7.2.2"
|
||||||
eslint-visitor-keys "^3.4.2"
|
eslint-visitor-keys "^3.4.3"
|
||||||
espree "^9.6.1"
|
espree "^9.6.1"
|
||||||
esquery "^1.4.2"
|
esquery "^1.4.2"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
|
|||||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user