diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 3afe24493..a35d0dc12 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,6 @@ // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format "recommendations": [ - "arcanis.vscode-zipfs", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "platformio.platformio-ide" diff --git a/.vscode/settings.json b/.vscode/settings.json index 932d9fce9..1b4c362dd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -41,5 +41,6 @@ "**/*.min.*", "**/*.map", "**/ArduinoJson/**" - ] + ], + "cSpell.enableFiletypes": ["!cpp"] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 51c2b2e25..3a33589d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# [3.6.1] September 9 2023 + +## **IMPORTANT! BREAKING CHANGES** + +- `shower_data` MQTT topic shows duration is seconds (was previously a full english sentence) + +## Added + +- show WiFi rssi in Network Status Page, show quality as color + +## Fixed + +- Issue in espMqttClient causing a memory leak when MQTT broker is disconnected due to network unavailability [#1264](https://github.com/emsesp/EMS-ESP32/issues/1264) +- Using MQTT enum values correctly formatted in MQTT Discovery [#1280](https://github.com/emsesp/EMS-ESP32/issues/1280) + +## Changed + +- mqtt free mem check set to 60 kb +- small cosmetic changes to Searching in Customization web page +- updated to espressif32@6.4.0 + # [3.6.0] August 13 2023 ## **IMPORTANT! BREAKING CHANGES** diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 9d1fc704e..cfb39924f 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,11 +1,22 @@ # Changelog -# [3.7.0] +## [3.6.1] ## **IMPORTANT! BREAKING CHANGES** +- `shower_data` MQTT topic shows duration is seconds (was previously a full english sentence) + ## Added +- show WiFi rssi in Network Status Page, show quality as color + ## Fixed +- Issue in espMqttClient causing a memory leak when MQTT broker is disconnected due to network unavailability [#1264](https://github.com/emsesp/EMS-ESP32/issues/1264) +- Using MQTT enum values correctly formatted in MQTT Discovery [#1280](https://github.com/emsesp/EMS-ESP32/issues/1280) + ## Changed + +- mqtt free mem check set to 60 kb +- small cosmetic changes to Searching in Customization web page +- updated to espressif32@6.4.0 diff --git a/Makefile b/Makefile index e39169edb..c860bdc79 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,7 @@ DEFINES += -DARDUINOJSON_ENABLE_STD_STRING=1 -DARDUINOJSON_ENABLE_PROGMEM=1 -DAR DEFINES += -DEMSESP_DEBUG -DEMSESP_STANDALONE -DEMSESP_TEST -D__linux__ -DEMC_RX_BUFFER_SIZE=1500 DEFINES += $(ARGS) -DEFAULTS = -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.6.0-dev\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\" +DEFAULTS = -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.7.0-dev\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\" #---------------------------------------------------------------------- # Sources & Files diff --git a/interface/.typesafe-i18n.json b/interface/.typesafe-i18n.json index 00ccfe2f4..ab39dacfa 100644 --- a/interface/.typesafe-i18n.json +++ b/interface/.typesafe-i18n.json @@ -1,5 +1,5 @@ { "adapter": "react", "baseLocale": "pl", - "$schema": "https://unpkg.com/typesafe-i18n@5.26.0/schema/typesafe-i18n.json" + "$schema": "https://unpkg.com/typesafe-i18n@5.26.2/schema/typesafe-i18n.json" } \ No newline at end of file diff --git a/interface/package.json b/interface/package.json index d88012510..334fd10f1 100644 --- a/interface/package.json +++ b/interface/package.json @@ -12,7 +12,7 @@ "build-hosted": "vite build --mode hosted", "preview": "vite preview", "preview-standalone": "npm-run-all -p preview typesafe-i18n mock-api", - "mock-api": "nodemon --watch ../mock-api ../mock-api/server.js", + "mock-api": "node --watch ../mock-api ../mock-api/server.js", "standalone": "npm-run-all -p dev typesafe-i18n mock-api", "typesafe-i18n": "typesafe-i18n", "format": "prettier --write '**/*.{ts,tsx,js,css,json,md}'", @@ -22,55 +22,54 @@ "@alova/adapter-xhr": "^1.0.1", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", - "@mui/icons-material": "^5.14.3", - "@mui/material": "^5.14.4", + "@mui/icons-material": "^5.14.8", + "@mui/material": "^5.14.8", "@preact/compat": "^17.1.2", "@prefresh/vite": "^2.4.1", "@table-library/react-table-library": "4.1.7", - "@types/lodash-es": "^4.17.8", - "@types/node": "^20.4.10", - "@types/react": "^18.2.20", + "@types/lodash-es": "^4.17.9", + "@types/node": "^20.6.0", + "@types/react": "^18.2.21", "@types/react-dom": "^18.2.7", "@types/react-router-dom": "^5.3.3", - "alova": "^2.10.0", + "alova": "^2.11.1", "async-validator": "^4.2.5", "history": "^5.3.0", "jwt-decode": "^3.1.2", "lodash-es": "^4.17.21", "mime-types": "^2.1.35", - "preact": "^10.16.0", + "preact": "^10.17.1", "react": "latest", "react-dom": "latest", "react-dropzone": "^14.2.3", - "react-icons": "^4.10.1", + "react-icons": "^4.11.0", "react-router-dom": "^6.15.0", "react-toastify": "^9.1.3", "sockette": "^2.0.6", - "typesafe-i18n": "^5.26.0", - "typescript": "^5.1.6" + "typesafe-i18n": "^5.26.2", + "typescript": "^5.2.2" }, "devDependencies": { - "@babel/core": "^7.22.10", + "@babel/core": "^7.22.17", "@preact/preset-vite": "^2.5.0", "@types/babel__core": "^7", - "@typescript-eslint/eslint-plugin": "^6.3.0", - "@typescript-eslint/parser": "^6.3.0", - "eslint": "^8.47.0", + "@typescript-eslint/eslint-plugin": "^6.6.0", + "@typescript-eslint/parser": "^6.6.0", + "eslint": "^8.49.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.1.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-typescript": "^3.6.0", "eslint-plugin-autofix": "^1.1.0", - "eslint-plugin-import": "^2.28.0", + "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-prettier": "alpha", - "eslint-plugin-react": "^7.33.1", + "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", - "nodemon": "^3.0.1", "npm-run-all": "^4.1.5", - "prettier": "^3.0.1", + "prettier": "^3.0.3", "rollup-plugin-visualizer": "^5.9.2", - "terser": "^5.19.2", + "terser": "^5.19.4", "vite": "^4.4.9", "vite-plugin-svgr": "^3.2.0", "vite-tsconfig-paths": "^4.2.0" diff --git a/interface/src/framework/network/NetworkStatusForm.tsx b/interface/src/framework/network/NetworkStatusForm.tsx index 5994237c1..9d94d2490 100644 --- a/interface/src/framework/network/NetworkStatusForm.tsx +++ b/interface/src/framework/network/NetworkStatusForm.tsx @@ -38,6 +38,15 @@ const networkStatusHighlight = ({ status }: NetworkStatus, theme: Theme) => { } }; +const networkQualityHighlight = ({ rssi }: NetworkStatus, theme: Theme) => { + if (rssi <= -85) { + return theme.palette.error.main; + } else if (rssi <= -75) { + return theme.palette.warning.main; + } + return theme.palette.success.main; +}; + export const isWiFi = ({ status }: NetworkStatus) => status === NetworkConnectionStatus.WIFI_STATUS_CONNECTED; export const isEthernet = ({ status }: NetworkStatus) => status === NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED; @@ -110,11 +119,11 @@ const NetworkStatusForm: FC = () => { <> - + - + diff --git a/interface/src/framework/network/WiFiNetworkSelector.tsx b/interface/src/framework/network/WiFiNetworkSelector.tsx index 9b3593ac4..865db65ab 100644 --- a/interface/src/framework/network/WiFiNetworkSelector.tsx +++ b/interface/src/framework/network/WiFiNetworkSelector.tsx @@ -1,10 +1,11 @@ import LockIcon from '@mui/icons-material/Lock'; import LockOpenIcon from '@mui/icons-material/LockOpen'; import WifiIcon from '@mui/icons-material/Wifi'; -import { Avatar, Badge, List, ListItem, ListItemAvatar, ListItemIcon, ListItemText } from '@mui/material'; +import { Avatar, Badge, List, ListItem, ListItemAvatar, ListItemIcon, ListItemText, useTheme } from '@mui/material'; import { useContext } from 'react'; import { WiFiConnectionContext } from './WiFiConnectionContext'; +import type { Theme } from '@mui/material'; import type { FC } from 'react'; import type { WiFiNetwork, WiFiNetworkList } from 'types'; import { MessageBox } from 'components'; @@ -42,8 +43,18 @@ export const networkSecurityMode = ({ encryption_type }: WiFiNetwork) => { } }; +const networkQualityHighlight = ({ rssi }: WiFiNetwork, theme: Theme) => { + if (rssi <= -85) { + return theme.palette.error.main; + } else if (rssi <= -75) { + return theme.palette.warning.main; + } + return theme.palette.success.main; +}; + const WiFiNetworkSelector: FC = ({ networkList }) => { const { LL } = useI18nContext(); + const theme = useTheme(); const wifiConnectionContext = useContext(WiFiConnectionContext); @@ -57,8 +68,8 @@ const WiFiNetworkSelector: FC = ({ networkList }) => { secondary={'Security: ' + networkSecurityMode(network) + ', Ch: ' + network.channel} /> - - + + diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index 2fb0e47b0..db41d3761 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -86,7 +86,7 @@ const SettingsCustomization: FC = () => { const entities_theme = useTheme({ Table: ` - --data-table-library_grid-template-columns: 150px repeat(1, minmax(80px, 1fr)) 45px minmax(45px, auto) minmax(120px, auto); + --data-table-library_grid-template-columns: 156px repeat(1, minmax(80px, 1fr)) 45px minmax(45px, auto) minmax(120px, auto); `, BaseRow: ` font-size: 14px; @@ -192,17 +192,9 @@ const SettingsCustomization: FC = () => { return value; } - function formatName(de: DeviceEntity) { - return ( - <> - {de.n && (de.n[0] === '!' ? LL.COMMAND(1) + ': ' + de.n.slice(1) : de.cn && de.cn !== '' ? de.cn : de.n) + ' '}( - - {de.id} - - ) - - ); - } + const formatName = (de: DeviceEntity, withShortname: boolean) => + (de.n && de.n[0] === '!' ? LL.COMMAND(1) + ': ' + de.n.slice(1) : de.cn && de.cn !== '' ? de.cn : de.n) + + (withShortname ? ' ' + de.id : ''); const getMaskNumber = (newMask: string[]) => { let new_mask = 0; @@ -232,10 +224,13 @@ const SettingsCustomization: FC = () => { return new_masks; }; + const filter_entity = (de: DeviceEntity) => + (de.m & selectedFilters || !selectedFilters) && formatName(de, true).includes(search.toLocaleLowerCase()); + const maskDisabled = (set: boolean) => { setDeviceEntities( deviceEntities.map(function (de) { - if ((de.m & selectedFilters || !selectedFilters) && de.id.toLowerCase().includes(search.toLowerCase())) { + if (filter_entity(de)) { return { ...de, m: set @@ -353,7 +348,7 @@ const SettingsCustomization: FC = () => { margin="normal" select > - + {LL.SELECT_DEVICE()}... {devices.devices.map((device: DeviceShort, index) => ( @@ -370,9 +365,7 @@ const SettingsCustomization: FC = () => { return; } - const shown_data = deviceEntities.filter( - (de) => (de.m & selectedFilters || !selectedFilters) && de.id.toLowerCase().includes(search.toLowerCase()) - ); + const shown_data = deviceEntities.filter((de) => filter_entity(de)); return ( <> @@ -470,7 +463,13 @@ const SettingsCustomization: FC = () => { - {formatName(de)} + + {formatName(de, false)} ( + + {de.id} + + ) + {!(de.m & DeviceEntityMask.DV_READONLY) && formatValue(de.mi)} {!(de.m & DeviceEntityMask.DV_READONLY) && formatValue(de.ma)} {formatValue(de.v)} diff --git a/interface/src/project/SettingsCustomizationDialog.tsx b/interface/src/project/SettingsCustomizationDialog.tsx index 8476cd501..1e616218c 100644 --- a/interface/src/project/SettingsCustomizationDialog.tsx +++ b/interface/src/project/SettingsCustomizationDialog.tsx @@ -1,4 +1,5 @@ import CancelIcon from '@mui/icons-material/Cancel'; +import CloseIcon from '@mui/icons-material/Close'; import DoneIcon from '@mui/icons-material/Done'; import { @@ -67,15 +68,34 @@ const SettingsCustomizationDialog = ({ open, onClose, onSave, selectedItem }: Se {LL.EDIT() + ' ' + LL.ENTITY()} - - {editItem.id} - - - - {LL.DEFAULT(1) + ' ' + LL.ENTITY_NAME(1)}: {editItem.n} + + + {LL.ENTITY() + ' ID'}:  - - + {editItem.id} + + + + + {LL.DEFAULT(1) + ' ' + LL.ENTITY_NAME(1)}:  + + {editItem.n} + + + + + {LL.WRITEABLE()}:  + + + {editItem.w ? ( + + ) : ( + + )} + + + + diff --git a/interface/src/project/SettingsEntities.tsx b/interface/src/project/SettingsEntities.tsx index 2efe981fa..526754df7 100644 --- a/interface/src/project/SettingsEntities.tsx +++ b/interface/src/project/SettingsEntities.tsx @@ -13,7 +13,7 @@ import { toast } from 'react-toastify'; import SettingsEntitiesDialog from './SettingsEntitiesDialog'; import * as EMSESP from './api'; -import { DeviceValueUOM_s } from './types'; +import { DeviceValueTypeNames, DeviceValueUOM_s } from './types'; import { entityItemValidation } from './validators'; import type { EntityItem } from './types'; import type { FC } from 'react'; @@ -57,7 +57,7 @@ const SettingsEntities: FC = () => { const entity_theme = useTheme({ Table: ` - --data-table-library_grid-template-columns: repeat(1, minmax(60px, 1fr)) minmax(80px, auto) 80px 80px 80px; + --data-table-library_grid-template-columns: repeat(1, minmax(60px, 1fr)) minmax(80px, auto) 80px 80px 80px 90px; `, BaseRow: ` font-size: 14px; @@ -81,6 +81,9 @@ const SettingsEntities: FC = () => { &:nth-of-type(5) { text-align: center; } + &:nth-of-type(6) { + text-align: center; + } `, HeaderRow: ` text-transform: uppercase; @@ -208,8 +211,9 @@ const SettingsEntities: FC = () => { {LL.NAME(0)} {LL.ID_OF(LL.DEVICE())} {LL.ID_OF(LL.TYPE(1))} - Offset - {LL.VALUE(0)} + {LL.OFFSET()} + {LL.VALUE(1) + ' ' + LL.TYPE(1)} + {LL.VALUE(1)} @@ -219,6 +223,7 @@ const SettingsEntities: FC = () => { {showHex(ei.device_id as number, 2)} {showHex(ei.type_id as number, 3)} {ei.offset} + {DeviceValueTypeNames[ei.value_type]} {formatValue(ei.value, ei.uom)} ))} diff --git a/interface/src/project/SettingsEntitiesDialog.tsx b/interface/src/project/SettingsEntitiesDialog.tsx index 7006e92d6..061eab8c5 100644 --- a/interface/src/project/SettingsEntitiesDialog.tsx +++ b/interface/src/project/SettingsEntitiesDialog.tsx @@ -148,7 +148,7 @@ const SettingsEntitiesDialog = ({ { {tableList.map((si: ScheduleItem) => ( editScheduleItem(si)}> - {si.active && } + {si.active ? ( + + ) : ( + + )} diff --git a/interface/src/project/SettingsSchedulerDialog.tsx b/interface/src/project/SettingsSchedulerDialog.tsx index b5a4eb90f..111625da1 100644 --- a/interface/src/project/SettingsSchedulerDialog.tsx +++ b/interface/src/project/SettingsSchedulerDialog.tsx @@ -1,6 +1,5 @@ import AddIcon from '@mui/icons-material/Add'; import CancelIcon from '@mui/icons-material/Cancel'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; import DoneIcon from '@mui/icons-material/Done'; import RemoveIcon from '@mui/icons-material/RemoveCircleOutline'; @@ -184,11 +183,6 @@ const SettingsSchedulerDialog = ({ control={} label={LL.ACTIVE()} /> - {editItem.active && ( - - - - )} { server: { open: true, port: 3000, - watch: { - usePolling: true - }, + // watch: { + // usePolling: true + // }, proxy: { '/rest': 'http://localhost:3080', '/api': { diff --git a/interface/yarn.lock b/interface/yarn.lock index aaa689cf1..047374dfe 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -29,22 +29,13 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/code-frame@npm:7.22.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" dependencies: - "@babel/highlight": ^7.22.5 - checksum: 0b6c5eaf9e58be7140ac790b7bdf8148e8a24e26502dcaa50f157259c083b0584285748fd90d342ae311a5bb1eaad7835aec625296d2b46853464f9bd8991e28 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/code-frame@npm:7.22.10" - dependencies: - "@babel/highlight": ^7.22.10 + "@babel/highlight": ^7.22.13 chalk: ^2.4.2 - checksum: fc5fe681eda128f15b928287b6c8e2ccec45776b8662524945cde005fba725642cc47ab0cfef4e7ff9ba5acccb3e907eebc2b3a7f075b8b31b19011229170b27 + checksum: f4cc8ae1000265677daf4845083b72f88d00d311adb1a93c94eb4b07bf0ed6828a81ae4ac43ee7d476775000b93a28a9cddec18fbdc5796212d8dcccd5de72bd languageName: node linkType: hard @@ -55,73 +46,38 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.21.3, @babel/core@npm:^7.22.1": - version: 7.22.9 - resolution: "@babel/core@npm:7.22.9" +"@babel/core@npm:^7.21.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.22.17": + version: 7.22.17 + resolution: "@babel/core@npm:7.22.17" 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 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.22.15 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.22.17 + "@babel/helpers": ^7.22.15 + "@babel/parser": ^7.22.16 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.22.17 + "@babel/types": ^7.22.17 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.2 + json5: ^2.2.3 semver: ^6.3.1 - checksum: 4dffc8844bd8ab5c292e795f3eb0e636246177d28b75ec99f3349a29fe08a9f3e089fe68b857ed160f3312c035c8fb73fdc83b0c781f4629164e548a7d62a8c7 + checksum: 9ffd2cb1b860a0651f01927d9e84246860cef2e794bc7181e53770ebf80305e6b5ba5050786d8b44be0dc9832106b4e9c7749c4c05c7f711d7508a5fef9034ce languageName: node linkType: hard -"@babel/core@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/core@npm:7.22.10" +"@babel/generator@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/generator@npm:7.22.15" dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.22.10 - "@babel/generator": ^7.22.10 - "@babel/helper-compilation-targets": ^7.22.10 - "@babel/helper-module-transforms": ^7.22.9 - "@babel/helpers": ^7.22.10 - "@babel/parser": ^7.22.10 - "@babel/template": ^7.22.5 - "@babel/traverse": ^7.22.10 - "@babel/types": ^7.22.10 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.1 - checksum: aebc08abfc4d4370d3023b1c5a22db2edd896ddbe21ed54f11c654660481f598b08fd456f9a5aa90cd2d81e0ea6767cd73f72fc11f7ad04d897f8fb20671cc1c - languageName: node - linkType: hard - -"@babel/generator@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/generator@npm:7.22.10" - dependencies: - "@babel/types": ^7.22.10 + "@babel/types": ^7.22.15 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 2f26ac64f0b606cd9e7799eb2bc42d371b378ba2cb3c7c92c01a3bfccca271371990bcd2dc67fee5547721ba3e1fa83ca03fe3aab30bdf417c3078b9759d2f10 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.22.7, @babel/generator@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/generator@npm:7.22.9" - dependencies: - "@babel/types": ^7.22.5 - "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 - jsesc: ^2.5.1 - checksum: 6ef82c7f6dc8f749c0eb3a04fe35acab032a9221d82984e67cbbada449ca857dd981e08c129f9cf5d2f342ba00efcc683a99e46a470f233b0948edf197e35d26 + checksum: d5e559584fa43490555eb3aef3480d5bb75069aa045ace638fc86111ff2a53df50d303eeaa5ef4c96e8241896807a77699ec2ff8874ed99f7d31b711660658e7 languageName: node linkType: hard @@ -134,31 +90,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/helper-compilation-targets@npm:7.22.10" +"@babel/helper-compilation-targets@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: "@babel/compat-data": ^7.22.9 - "@babel/helper-validator-option": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 browserslist: ^4.21.9 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: edef207b819f491ded9462ac73858eadb155f4a0afe6cf3951459e47ad23b743ed56d7bd8a1b3f63fd25b39543db42ea58fea7b2193dcb4c98a511d7f1ad547a - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-compilation-targets@npm:7.22.9" - dependencies: - "@babel/compat-data": ^7.22.9 - "@babel/helper-validator-option": ^7.22.5 - browserslist: ^4.21.9 - lru-cache: ^5.1.1 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 543b9a45800c1db2f91cc53462ed1799834a1259e498d3d91f45816ae79d19719ef957fa00b0f015d8b768eac09fd1f4f5f42f868c5a10f4389e3883a3f050f1 + checksum: 45b9286861296e890f674a3abb199efea14a962a27d9b8adeb44970a9fd5c54e73a9e342e8414d2851cf4f98d5994537352fbce7b05ade32e9849bbd327f9ff1 languageName: node linkType: hard @@ -188,27 +129,27 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-module-imports@npm:7.22.5" +"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" dependencies: - "@babel/types": ^7.22.5 - checksum: 04f8c0586c485c33017c63e0fc5fc16bd33b883cef3c88e4b3a8bf7bc807b3f9a7bcb9372fbcc01c0a539a5d1cdb477e7bdec77e250669edab00f796683b6b07 + "@babel/types": ^7.22.15 + checksum: 4e0d7fc36d02c1b8c8b3006dfbfeedf7a367d3334a04934255de5128115ea0bafdeb3e5736a2559917f0653e4e437400d54542da0468e08d3cbc86d3bbfa8f30 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-module-transforms@npm:7.22.9" +"@babel/helper-module-transforms@npm:^7.22.17": + version: 7.22.17 + resolution: "@babel/helper-module-transforms@npm:7.22.17" dependencies: "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-module-imports": ^7.22.5 + "@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.5 + "@babel/helper-validator-identifier": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0 - checksum: 1844dc2c9049552d13d40385cb196704a754feab60ef8c370a5e1c431a4f64b0ddd7bb1dddaa5c98288cafd5c08cd4d8e6d5aba9a11e1133b8b999ab7c9defd1 + checksum: 54d14e092bb15e0e95155890e4c2352e5cb97370e9669aa1066a6a066194f6da01d801516f219a66455add7d10c1b6345d7c2ecfce1b8e69213eb2cc4ba94e75 languageName: node linkType: hard @@ -244,79 +185,48 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-validator-identifier@npm:7.22.5" - checksum: 2ff1d3833154d17ccf773b8a71fdc0cd0e7356aa8033179d0e3133787dfb33d97796cbff8b92a97c56268205337dfc720227aeddc677c1bc08ae1b67a95252d7 +"@babel/helper-validator-identifier@npm:^7.22.15, @babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-validator-identifier@npm:7.22.15" + checksum: 0473ccfd123cf872206eb916ec506f8963f75db50413560d4d1674aed4cd5d9354826c2514474d6cd40637d3bdc515ba87e8035b4bed683ba62cb607e0081aaf languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-validator-option@npm:7.22.5" - checksum: 23e310bf1b90d085b1ae250f31d423fb6cc004da882f0d3409266e5e4c7fd41ed0a172283a6a9a16083c5f2e11f987b32c815c80c60d9a948e23dd6dcf2e0437 +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: e9661bf80ba18e2dd978217b350fb07298e57ac417f4f1ab9fa011505e20e4857f2c3b4b538473516a9dc03af5ce3a831e5ed973311c28326f4c330b6be981c2 languageName: node linkType: hard -"@babel/helpers@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/helpers@npm:7.22.10" +"@babel/helpers@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helpers@npm:7.22.15" dependencies: - "@babel/template": ^7.22.5 - "@babel/traverse": ^7.22.10 - "@babel/types": ^7.22.10 - checksum: 14c2f4fe0663bf4042b82a09ea6eaa53b0844ed04c70d69be8fff0db504ab25a729c72ff427e84320a328e19853b4a8d9897a3d2379c0e70751053e6e23a7992 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 2f4c270b53cdca4999976ddd4f20b1b8c8be04722f35745d4a0a43d35c6496e1a23d8cbecb21e6bf22502c5e4828de2bea1c1f58bed81c84bfecc8fa96b69483 languageName: node linkType: hard -"@babel/helpers@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helpers@npm:7.22.6" - dependencies: - "@babel/template": ^7.22.5 - "@babel/traverse": ^7.22.6 - "@babel/types": ^7.22.5 - checksum: 8c03c19802d0fcc78d00d1eaa9ddab28f97f0c78a5d570762800e86f08c6f41750ad61e20cdede977a56173edf85e7175f1fd804eb6ef817280f064d3a3ca514 - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/highlight@npm:7.22.10" +"@babel/highlight@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/highlight@npm:7.22.13" dependencies: "@babel/helper-validator-identifier": ^7.22.5 chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: ac321ed90d37f76df74a44addc1692658eff64060375550bfb64919959573b14000ac83744e1ed30cc51b8b2f1291b0f0e98a3398d3c33c9c4548dd326a898fc + checksum: 65f20132c7ada5d82d343dc23ca61bcd040980f7bd59e480532bcd7f7895aa7abe58470ae8a4f851fd244b71b42a7ad915f7c515fef8f1c2e003777721ebdbe6 languageName: node linkType: hard -"@babel/highlight@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/highlight@npm:7.22.5" - dependencies: - "@babel/helper-validator-identifier": ^7.22.5 - chalk: ^2.0.0 - js-tokens: ^4.0.0 - checksum: e8cc07b5de76a9bf779982096ccbbe5a867c36d3786b26151eb570d9344a68af8aa065ed97d431e0d18ba55fe792c7c4301e0d62afff7a52ee0d20678443be54 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7": - version: 7.22.7 - resolution: "@babel/parser@npm:7.22.7" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.16": + version: 7.22.16 + resolution: "@babel/parser@npm:7.22.16" bin: parser: ./bin/babel-parser.js - checksum: d2bdf212644c39de58f1216540ec5aca4a05ffbec07c904eaaef8575dd9546b55345b91dcc0d306be4adbb717401ce321027bac7e2f7babfd66794c96243bb79 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/parser@npm:7.22.10" - bin: - parser: ./bin/babel-parser.js - checksum: 22de4b5b2e20dd5b44a73963e5fceef44501bacdd14f0b3b96fc16975826553c83c3e424e2ea906b4f2fb8c2129b176bcee33ae99e30de9006ceb28ded5c6ac7 + checksum: e7b6a7d65e27a08a8be361021c332aa72b989b845c4124e0e2c3ec5810956f8c96baf0f54657d1e1200ee5ec6298b895392d2ff73f9de61418e56c0d2d6f574c languageName: node linkType: hard @@ -343,95 +253,66 @@ __metadata: linkType: hard "@babel/plugin-transform-react-jsx@npm:^7.14.9, @babel/plugin-transform-react-jsx@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx@npm:7.22.5" + version: 7.22.15 + resolution: "@babel/plugin-transform-react-jsx@npm:7.22.15" dependencies: "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-module-imports": ^7.22.15 "@babel/helper-plugin-utils": ^7.22.5 "@babel/plugin-syntax-jsx": ^7.22.5 - "@babel/types": ^7.22.5 + "@babel/types": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: fa4e5b32233c41686a420ad97b07a8a8b6cec7d484e93d5917db460887ded5179a8a20867a5d56d962b5452535830c0c0f8bfdc7d55853369be1e51b6a79a14a + checksum: db37491e3eea5530521e177380312f308f01f806866fa0ce08d48fc5a8c9eaf9a954f778fa1ff477248afb72e916eb66ab3d35254bb6a8979f8b8e74a0fd8873 languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.7": - version: 7.22.6 - resolution: "@babel/runtime@npm:7.22.6" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.22.10, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.7": + version: 7.22.15 + resolution: "@babel/runtime@npm:7.22.15" dependencies: - regenerator-runtime: ^0.13.11 - checksum: 5a273e7d66586582041c68332028db5376d754d483422541fdc904e10474a6f8aef14dd3a5aabcbcb6daea87b64531cc4be993d2943557ede4a2613f5328a981 + regenerator-runtime: ^0.14.0 + checksum: 96b74adfd1db812d06ed56d9db12acecfc844d252b93994ce4901433957bd28affba725622a4dc9e7f76384c4cb6cadc3d620d07817c8be9156eaedba5eea059 languageName: node linkType: hard -"@babel/template@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/template@npm:7.22.5" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" dependencies: - "@babel/code-frame": ^7.22.5 - "@babel/parser": ^7.22.5 - "@babel/types": ^7.22.5 - checksum: dd8fc1b0bfe0128bace25da0e0a708e26320e8030322d3a53bb6366f199b46a277bfa4281dd370d73ab19087c7e27d166070a0659783b4715f7470448c7342b1 + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 9312edd37cf1311d738907003f2aa321a88a42ba223c69209abe4d7111db019d321805504f606c7fd75f21c6cf9d24d0a8223104cd21ebd207e241b6c551f454 languageName: node linkType: hard -"@babel/traverse@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/traverse@npm:7.22.10" +"@babel/traverse@npm:^7.22.15, @babel/traverse@npm:^7.22.17": + version: 7.22.17 + resolution: "@babel/traverse@npm:7.22.17" dependencies: - "@babel/code-frame": ^7.22.10 - "@babel/generator": ^7.22.10 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.22.15 "@babel/helper-environment-visitor": ^7.22.5 "@babel/helper-function-name": ^7.22.5 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.22.10 - "@babel/types": ^7.22.10 + "@babel/parser": ^7.22.16 + "@babel/types": ^7.22.17 debug: ^4.1.0 globals: ^11.1.0 - checksum: 8e8b63b053962908408ed9d954810e93f241122222db115327ed5876d020f420fc115ef2d79623c2a4928447ddc002ec220be2a152b241d19de2480c88e10cfb + checksum: c9bfa6d20caf50e529ac9359db4cd4a5c23f28536bf17e2d493135631ab68be456efda94ba71bf568be34c6d8e762b23cfd9f43fd52b09756cb0397446643d17 languageName: node linkType: hard -"@babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8": - version: 7.22.8 - resolution: "@babel/traverse@npm:7.22.8" - dependencies: - "@babel/code-frame": ^7.22.5 - "@babel/generator": ^7.22.7 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-function-name": ^7.22.5 - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.22.7 - "@babel/types": ^7.22.5 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 839014824c210388ed46f92bf5265522bd5bbb4a9a03c700f9d79b151bdd0aa077c2f6448a0cef41132188cc2bc6d8cdcad98a297ba59983401e882bdc256b1f - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.5, @babel/types@npm:^7.8.3": - version: 7.22.5 - resolution: "@babel/types@npm:7.22.5" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.17, @babel/types@npm:^7.22.5, @babel/types@npm:^7.8.3": + version: 7.22.17 + resolution: "@babel/types@npm:7.22.17" dependencies: "@babel/helper-string-parser": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.15 to-fast-properties: ^2.0.0 - checksum: 2473295056520432ec0b5fe2dc7b37914292d211ccdbc2cb05650f9c44d5168a760bca0f492a9fff7c72459defee15cd48ef152e74961cfdc03144c7a4b8bec8 - languageName: node - linkType: hard - -"@babel/types@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/types@npm:7.22.10" - dependencies: - "@babel/helper-string-parser": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.5 - to-fast-properties: ^2.0.0 - checksum: 34aad930339664a3a5423d6f1d6d2738e30cd73786ff6dfd0a40bfc8f45017e70e24ef397877c86f4e7dee8ada0a53b8fd9f3d86bc0137d09a44e4b3733090f7 + checksum: ca26bd1df1aa2707af058f70fb52898d31b209a8a5372330013870150182697e5ab45d6d661d433259e52b4e25396ad41d0b428158d5b856a030dc111d000359 languageName: node linkType: hard @@ -581,156 +462,156 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/android-arm64@npm:0.18.17" +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/android-arm@npm:0.18.17" +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/android-x64@npm:0.18.17" +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/darwin-arm64@npm:0.18.17" +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/darwin-x64@npm:0.18.17" +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/freebsd-arm64@npm:0.18.17" +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/freebsd-x64@npm:0.18.17" +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-arm64@npm:0.18.17" +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-arm@npm:0.18.17" +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-ia32@npm:0.18.17" +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-loong64@npm:0.18.17" +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-mips64el@npm:0.18.17" +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-ppc64@npm:0.18.17" +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-riscv64@npm:0.18.17" +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-s390x@npm:0.18.17" +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/linux-x64@npm:0.18.17" +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/netbsd-x64@npm:0.18.17" +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/openbsd-x64@npm:0.18.17" +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/sunos-x64@npm:0.18.17" +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/win32-arm64@npm:0.18.17" +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/win32-ia32@npm:0.18.17" +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.18.17": - version: 0.18.17 - resolution: "@esbuild/win32-x64@npm:0.18.17" +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -747,9 +628,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": - version: 4.6.2 - resolution: "@eslint-community/regexpp@npm:4.6.2" - checksum: da800788298f8419f4c4e04eaa4e3c97e7f57537e822e7b150de662e420e3d437816b863e490807bd0b00e715b0989f9d8864bf54357cbcfa84e4255b910789d + version: 4.8.0 + resolution: "@eslint-community/regexpp@npm:4.8.0" + checksum: 77252aecfea8a2eb02bb076803f78c1529963e9a7f1cb1be5305126f5582a0cbd1cb6ab38a8ac952633cfd5659c101e8b8b494c69376a2481ddd9bd156419fdd languageName: node linkType: hard @@ -770,21 +651,59 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:^8.47.0": - version: 8.47.0 - resolution: "@eslint/js@npm:8.47.0" - checksum: fb5b1377f0d7a8299c65baa856b23a7976165b0fc269b6220fd8e6dfb7fa29de83528b16226ccbe3625f24082a53ec8ca19d75d89f057478f17871b4fcdb32a0 +"@eslint/js@npm:8.49.0": + version: 8.49.0 + resolution: "@eslint/js@npm:8.49.0" + checksum: 40b4255866161e16b09eae1830c8ff7379276659ee7ce039e4708bcf3c5a5fd8b95418d32c355294e6c738f23ab42f3e3a55100dffb389edd5d5233ca47c01b3 languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.10": - version: 0.11.10 - resolution: "@humanwhocodes/config-array@npm:0.11.10" +"@floating-ui/core@npm:^1.4.1": + version: 1.4.1 + resolution: "@floating-ui/core@npm:1.4.1" + dependencies: + "@floating-ui/utils": ^0.1.1 + checksum: 6a738ff3b5bcca2470904a2462a2700e32081f6e681e077fd63c8d0b389439511a2a16187589df156fac6e8f47d56bdc0afea64303b9341fb5886cff82d87758 + languageName: node + linkType: hard + +"@floating-ui/dom@npm:^1.5.1": + version: 1.5.1 + resolution: "@floating-ui/dom@npm:1.5.1" + dependencies: + "@floating-ui/core": ^1.4.1 + "@floating-ui/utils": ^0.1.1 + checksum: cda044e72b6e015af70ef482ff19cae34b085c69a04e3d5d48613a58f6e88b71dbd7cc2f2ae02fc1f5f29ad8ba13c1c3074e2a4416b8c73ede47139177b5749c + languageName: node + linkType: hard + +"@floating-ui/react-dom@npm:^2.0.1": + version: 2.0.2 + resolution: "@floating-ui/react-dom@npm:2.0.2" + dependencies: + "@floating-ui/dom": ^1.5.1 + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: bfd07cfc9047a31e92e223dbbe48f2cdb75460126217b35cfbf8555eaf1718ce7c11f4ee4d39bdee89eaf9ad0a5c4dd9af443a552116fc3478a19a9f6283bdf6 + languageName: node + linkType: hard + +"@floating-ui/utils@npm:^0.1.1": + version: 0.1.1 + resolution: "@floating-ui/utils@npm:0.1.1" + checksum: 3fca5a8bce10de87f78c9b9377db7d5a4c992f98adc3722e46725d9bd2a3a1051bb1c512caf5fe293752c660455df5f7b6a2153802f9299572fac3b565f4c407 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" dependencies: "@humanwhocodes/object-schema": ^1.2.1 debug: ^4.1.1 minimatch: ^3.0.5 - checksum: 9e307a49a5baa28beb243d2c14c145f288fccd6885f4c92a9055707057ec40980242256b2a07c976cfa6c75f7081da111a40a9844d1ca8daeff2302f8b640e76 + checksum: 4195f68e485f7d1a7c95cf0f126cc41f7223eeda2f1b46b893123c99b35bb76145c37d25e2ba452d54815ed69bb656c0ce9e343ffa984470c08afa6e82a4713f languageName: node linkType: hard @@ -827,10 +746,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: 78055e2526108331126366572045355051a930f017d1904a4f753d3f4acee8d92a14854948095626f6163cffc24ea4e3efa30637417bb866b84743dec7ef6fd9 +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: 0dbc9e29bc640bbbdc5b9876d2859c69042bfcf1423c1e6421bcca53e826660bff4e41c7d4bcb8dbea696404231a6f902f76ba41835d049e20f2dd6cffb713bf languageName: node linkType: hard @@ -851,14 +770,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:1.4.14": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 3fbaff1387c1338b097eeb6ff92890d7838f7de0dde259e4983763b44540bfd5ca6a1f7644dc8ad003a57f7e80670d5b96a8402f1386ba9aee074743ae9bad51 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: 0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 @@ -866,23 +778,24 @@ __metadata: linkType: hard "@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.18 - resolution: "@jridgewell/trace-mapping@npm:0.3.18" + version: 0.3.19 + resolution: "@jridgewell/trace-mapping@npm:0.3.19" dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: e5045775f076022b6c7cc64a7b55742faa5442301cb3389fd0e6712fafc46a2bb13c68fa1ffaf7b8bb665a91196f050b4115885fc802094ebc06a1cf665935ac + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 845e6c6efca621b2b85e4d13fd25c319b6e4ab1ea78d4385ff6c0f78322ea0fcdfec8ac763aa4b56e8378c96d7bef101a2638c7a1a076f7d62f6376230c940a7 languageName: node linkType: hard -"@mui/base@npm:5.0.0-beta.10": - version: 5.0.0-beta.10 - resolution: "@mui/base@npm:5.0.0-beta.10" +"@mui/base@npm:5.0.0-beta.14": + version: 5.0.0-beta.14 + resolution: "@mui/base@npm:5.0.0-beta.14" dependencies: - "@babel/runtime": ^7.22.6 + "@babel/runtime": ^7.22.10 "@emotion/is-prop-valid": ^1.2.1 + "@floating-ui/react-dom": ^2.0.1 "@mui/types": ^7.2.4 - "@mui/utils": ^5.14.4 + "@mui/utils": ^5.14.8 "@popperjs/core": ^2.11.8 clsx: ^2.0.0 prop-types: ^15.8.1 @@ -894,22 +807,22 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: c7563a107334ef47eff5aa2595b0200f3b4061a0757aa0fb43e5c56e2fba594b20a3a535ea9847fa6e7138f4fcff7e67893193fb647730a2a6b0cb9ea1016c9a + checksum: 9e1bfb7a45b0fd2e39f6175fc3a792bee3344b75903e0de965f12f8f3703efdeb9a06f8712a10de1cea1fe9c438820b98d21f9c32968cfcbe09d720a148b1d19 languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.14.4": - version: 5.14.4 - resolution: "@mui/core-downloads-tracker@npm:5.14.4" - checksum: 23d652570020fcba2956dcc53da94da0242a900a3fa5ca4af1bfcb74f4ea6bc6f6725e1908dde232caf3a3a55fc0ab34fcb05832e3a41fbd8070b3d13a6aa6cc +"@mui/core-downloads-tracker@npm:^5.14.8": + version: 5.14.8 + resolution: "@mui/core-downloads-tracker@npm:5.14.8" + checksum: 93d22affbc826e8e60c190548bb178bf1f616c21e1d3cbc8bef097fdefc0fd4f4788e7327063205816536886d0131064f94ff3d42eaf957a46f2234be6e1d040 languageName: node linkType: hard -"@mui/icons-material@npm:^5.14.3": - version: 5.14.3 - resolution: "@mui/icons-material@npm:5.14.3" +"@mui/icons-material@npm:^5.14.8": + version: 5.14.8 + resolution: "@mui/icons-material@npm:5.14.8" dependencies: - "@babel/runtime": ^7.22.6 + "@babel/runtime": ^7.22.10 peerDependencies: "@mui/material": ^5.0.0 "@types/react": ^17.0.0 || ^18.0.0 @@ -917,20 +830,20 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 34b8864288c4fea703376a8d05690dcb0dd76a8e6dd1fe6eb31317b3d6729cdadd3010b2ee995cca469b53399d4ef40b0d5de065df0e125a4ab3e84060809ae5 + checksum: 212e5563d3aa1918ec27dd4d5e4134e043bd002b078e2802e39841c1cce31e1eb2f5fbf13529b86995f402edbfc5f9cd9cb62625a43f8565928860eac537919f languageName: node linkType: hard -"@mui/material@npm:^5.14.4": - version: 5.14.4 - resolution: "@mui/material@npm:5.14.4" +"@mui/material@npm:^5.14.8": + version: 5.14.8 + resolution: "@mui/material@npm:5.14.8" dependencies: - "@babel/runtime": ^7.22.6 - "@mui/base": 5.0.0-beta.10 - "@mui/core-downloads-tracker": ^5.14.4 - "@mui/system": ^5.14.4 + "@babel/runtime": ^7.22.10 + "@mui/base": 5.0.0-beta.14 + "@mui/core-downloads-tracker": ^5.14.8 + "@mui/system": ^5.14.8 "@mui/types": ^7.2.4 - "@mui/utils": ^5.14.4 + "@mui/utils": ^5.14.8 "@types/react-transition-group": ^4.4.6 clsx: ^2.0.0 csstype: ^3.1.2 @@ -950,16 +863,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 653b87fbd92de29a0e37579651333bea078518a81cbbab6f37b807aee10af438a050660b887da81ee5df8d14f688b169573f4f709f0e6c28d4a19c9de2eed502 + checksum: b26fb4966c005cb6bbc6195d0b22f254bf8f34d81e47ea10f459c06b893122958b16f438102ce56f105abc89f21b5705cad0b13d8d4401f2c8f672ed61519861 languageName: node linkType: hard -"@mui/private-theming@npm:^5.14.4": - version: 5.14.4 - resolution: "@mui/private-theming@npm:5.14.4" +"@mui/private-theming@npm:^5.14.8": + version: 5.14.8 + resolution: "@mui/private-theming@npm:5.14.8" dependencies: - "@babel/runtime": ^7.22.6 - "@mui/utils": ^5.14.4 + "@babel/runtime": ^7.22.10 + "@mui/utils": ^5.14.8 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -967,15 +880,15 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 647c19aab6420c4cd5529220c30afa77278badb8cff0251f84bc0d41b566f9c3f3771a59f1100d87a90f420a057679bc9e696da0fcd56272bf3fb4c13769fb8b + checksum: 5d92f9afaf31ff2610cc455277f3ff1be5ce5de5b40d0747a60de7fef7ec82127d167cade843054318885dec634a1fe070757f269045c5fd9ac3610be9ede31a languageName: node linkType: hard -"@mui/styled-engine@npm:^5.13.2": - version: 5.13.2 - resolution: "@mui/styled-engine@npm:5.13.2" +"@mui/styled-engine@npm:^5.14.8": + version: 5.14.8 + resolution: "@mui/styled-engine@npm:5.14.8" dependencies: - "@babel/runtime": ^7.21.0 + "@babel/runtime": ^7.22.10 "@emotion/cache": ^11.11.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -988,19 +901,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: ed53dbe0151067c6843989fc41245f98a56c48e7c341ce61656b71de2cb334bdf1cea8bbf625ddbc4ce600d6005717c2cd1f34473b3b41e154662353cf2c108e + checksum: d1848e34239a2fa4c833d27816845f730cf57481f815212094bcb5fd9f2040efd1e790de7f7b867bfdd6de3d7a5f9406607f853db399129d2789e6a408cb7f87 languageName: node linkType: hard -"@mui/system@npm:^5.14.4": - version: 5.14.4 - resolution: "@mui/system@npm:5.14.4" +"@mui/system@npm:^5.14.8": + version: 5.14.8 + resolution: "@mui/system@npm:5.14.8" dependencies: - "@babel/runtime": ^7.22.6 - "@mui/private-theming": ^5.14.4 - "@mui/styled-engine": ^5.13.2 + "@babel/runtime": ^7.22.10 + "@mui/private-theming": ^5.14.8 + "@mui/styled-engine": ^5.14.8 "@mui/types": ^7.2.4 - "@mui/utils": ^5.14.4 + "@mui/utils": ^5.14.8 clsx: ^2.0.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -1016,7 +929,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: d8d74d5c05cd73cf859649ca2abbbaccc37bf6b87a122c09f080349f3e22e3d1c4cacc1f6d23a808b19078eba9a68a6ac2781e0783f6ca18d66964306c766f78 + checksum: 3333b2a8af50c3b9cbf8a4955af911635a49151a2ff75f32cd677becaa69d6a3a9814ae798e3aeb4c439ea5f1e24c66747f2434ddab70f7ff690700e69417bdb languageName: node linkType: hard @@ -1032,18 +945,18 @@ __metadata: languageName: node linkType: hard -"@mui/utils@npm:^5.14.4": - version: 5.14.4 - resolution: "@mui/utils@npm:5.14.4" +"@mui/utils@npm:^5.14.8": + version: 5.14.8 + resolution: "@mui/utils@npm:5.14.8" dependencies: - "@babel/runtime": ^7.22.6 + "@babel/runtime": ^7.22.10 "@types/prop-types": ^15.7.5 "@types/react-is": ^18.2.1 prop-types: ^15.8.1 react-is: ^18.2.0 peerDependencies: react: ^17.0.0 || ^18.0.0 - checksum: ad0d6ac443cc99c74949bd0cac86034ea2c847419e014e2e49f9bf1d1c648d05649d682145fc7ff632b064bbf9f582a28e313091388ed6e640266c2a0ecf8533 + checksum: 1949563a793a36eb31df0bc2f7cad3cffd5537cd18a130d4245e00e9f83deb9e8dccb99c530aec661a9e62262b219a4b19f0cfdaaf09ab31f3df2f28fb7f1201 languageName: node linkType: hard @@ -1196,8 +1109,8 @@ __metadata: linkType: hard "@rollup/pluginutils@npm:^5.0.2": - version: 5.0.2 - resolution: "@rollup/pluginutils@npm:5.0.2" + version: 5.0.4 + resolution: "@rollup/pluginutils@npm:5.0.4" dependencies: "@types/estree": ^1.0.0 estree-walker: ^2.0.2 @@ -1207,7 +1120,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: b06f73c15bb59418aa6fbfead5675bab2d6922e15663525ffc2eb8429530bc5add516600adb251cfbf9b60f3d12fb821cde155cb5103415154a476bd0f163432 + checksum: 4114d0dbc22623d33ee38885e90afada4d96fae92e9645693fe438f6313832377ffb6b2809d90e96cc269339a54e2c0c46a739f621d9041050b0b751020f726b languageName: node linkType: hard @@ -1426,26 +1339,26 @@ __metadata: languageName: node linkType: hard -"@types/lodash-es@npm:^4.17.8": - version: 4.17.8 - resolution: "@types/lodash-es@npm:4.17.8" +"@types/lodash-es@npm:^4.17.9": + version: 4.17.9 + resolution: "@types/lodash-es@npm:4.17.9" dependencies: "@types/lodash": "*" - checksum: 950771d406c842814dd22217adba5e01bd06b3c21e97900d3c3816f38580e132894400b5d83a7962645fa284d8478614bdcc50755255ad15024311b7b8ed8520 + checksum: 9fe82df0ec14e2aad50a1bf6488c4457e3378fcc77f5806fbc8035904ef0848b70e50037b13d9bddb66d3a30b425d2998a4a438a5024efe7431b63fde0920378 languageName: node linkType: hard "@types/lodash@npm:*": - version: 4.14.196 - resolution: "@types/lodash@npm:4.14.196" - checksum: a482cc4070f45f278b3fcedfb66b109b2a32fcae5854c6d500333cef73f25fbd7f1d48cd4a709dae2ed31ff2cf0df70080d0f7185b0faebcb738eb1ef997ebd1 + version: 4.14.198 + resolution: "@types/lodash@npm:4.14.198" + checksum: 9523efda6eb78dc06bcc536c13396892695bc05147fef9f8e60db130d7be693a7a2eb48682b1dd30c0afa58617d5c79333d4bbe527a1c2474e4360282678c9cc languageName: node linkType: hard -"@types/node@npm:^20.4.10": - version: 20.4.10 - resolution: "@types/node@npm:20.4.10" - checksum: 203a930077cb02d91b8ca98a254667112b1f4c5828f94908078c126d22b71508069c3ef70c569b313d56752edcc692e62ee47c267dd0ad44a5c22ab7d128ab8c +"@types/node@npm:^20.6.0": + version: 20.6.0 + resolution: "@types/node@npm:20.6.0" + checksum: 0979a218f1862a80ddb7a8ba70498798a72e4861394244657c47bd64ed0c87baa4e0c8ce693bab23e58ec272913438b341de98768dc737491c58e6faff19d955 languageName: node linkType: hard @@ -1511,25 +1424,14 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*": - version: 18.2.18 - resolution: "@types/react@npm:18.2.18" +"@types/react@npm:*, @types/react@npm:^18.2.21": + version: 18.2.21 + resolution: "@types/react@npm:18.2.21" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 2f544da491f7fcfa91ef172945b9b0f3ed9aff48bdf644f557cdfbef363b5891e1b1b06f3510c8f361c72523b835ed72ef0320a0d03cddbdcc37ff198c212900 - languageName: node - linkType: hard - -"@types/react@npm:^18.2.20": - version: 18.2.20 - resolution: "@types/react@npm:18.2.20" - dependencies: - "@types/prop-types": "*" - "@types/scheduler": "*" - csstype: ^3.0.2 - checksum: 42bab593f14b202a5ee98073ed579f147de9e4dd4dcdefcba19588cf06c0fff83f0a602db535e9ff0c0896a3aa25759841ebddb59a2c7c293cb6981ddee08fd0 + checksum: 5b5aff55d38c358a50108dddb24e06d344e4d578cc177dd2e24a7c5d0fadb034298e5e652b174053b5e75f0d6b0d9f926976c1c9f5e84fe94bb91348c54f5313 languageName: node linkType: hard @@ -1541,26 +1443,25 @@ __metadata: linkType: hard "@types/semver@npm:^7.5.0": - version: 7.5.0 - resolution: "@types/semver@npm:7.5.0" - checksum: ca4ba4642b5972b6e88e73c5bc02bbaceb8d76bce71748d86e3e95042d4e5a44603113a1dcd2cb9b73ad6f91f6e4ab73185eb41bbfc9c73b11f0ed3db3b7443a + version: 7.5.1 + resolution: "@types/semver@npm:7.5.1" + checksum: 10746bd8c6b5ba4da8c5b8e246e0ce2ccde7df0e782cbb2b376bc8c6c25ae0aca39a3c82b762912c6eab801cd64ffd8582369c4b96f0d4e7898118b68717c93b languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.3.0" +"@typescript-eslint/eslint-plugin@npm:^6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.6.0" dependencies: "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.3.0 - "@typescript-eslint/type-utils": 6.3.0 - "@typescript-eslint/utils": 6.3.0 - "@typescript-eslint/visitor-keys": 6.3.0 + "@typescript-eslint/scope-manager": 6.6.0 + "@typescript-eslint/type-utils": 6.6.0 + "@typescript-eslint/utils": 6.6.0 + "@typescript-eslint/visitor-keys": 6.6.0 debug: ^4.3.4 graphemer: ^1.4.0 ignore: ^5.2.4 natural-compare: ^1.4.0 - natural-compare-lite: ^1.4.0 semver: ^7.5.4 ts-api-utils: ^1.0.1 peerDependencies: @@ -1569,44 +1470,44 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 5945d5c995624eea1f55ab039189d1c62005a520c56998f72aa904d9f13719495c6db5c2f03d32460bf43d542898cef866a0a07f522f8dd1fd583f83216bd6e6 + checksum: be6d0b4e79cb5890c3786cd87870db394914cf980cb60b756b5a2395c62743cf4c19cf81c57548ff19d141f1c967b6ab1a2c73eb7ddee261154b81d9041da923 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/parser@npm:6.3.0" +"@typescript-eslint/parser@npm:^6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/parser@npm:6.6.0" dependencies: - "@typescript-eslint/scope-manager": 6.3.0 - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/typescript-estree": 6.3.0 - "@typescript-eslint/visitor-keys": 6.3.0 + "@typescript-eslint/scope-manager": 6.6.0 + "@typescript-eslint/types": 6.6.0 + "@typescript-eslint/typescript-estree": 6.6.0 + "@typescript-eslint/visitor-keys": 6.6.0 debug: ^4.3.4 peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 9a8d0514961e6957ab10c44e97177ae00524d347f666695300890936b9c8f128c06801dab08badb5a6913dd96469a218f625d6b43234713a212874da5efdb2b6 + checksum: 869601abdd8a70d4cb823bda7ba838fe6ce28f908e25b8028c07cf2cc56bfe5b79f5a4b2421d5f7027bcdb2ad56df6d4eddf7903182caa384ea8b0353ca3a64e languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/scope-manager@npm:6.3.0" +"@typescript-eslint/scope-manager@npm:6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/scope-manager@npm:6.6.0" dependencies: - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/visitor-keys": 6.3.0 - checksum: 8d81fca0d9143ad5365c2a71bed6946a51d9da4b4591d6b52612802d9df99a9bbf86a19e63eb4dfd20e6473276583b02707b859486cbb02b90fc4b7b224e1814 + "@typescript-eslint/types": 6.6.0 + "@typescript-eslint/visitor-keys": 6.6.0 + checksum: 881dc83a6cc0770bff5dd1f709883c829801241486f96e4fc38ca3e817cc33b4e09238c724974004ab2e3ffd31f1423d20e309d1c34e9bdb07e008a6f8fdee21 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/type-utils@npm:6.3.0" +"@typescript-eslint/type-utils@npm:6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/type-utils@npm:6.6.0" dependencies: - "@typescript-eslint/typescript-estree": 6.3.0 - "@typescript-eslint/utils": 6.3.0 + "@typescript-eslint/typescript-estree": 6.6.0 + "@typescript-eslint/utils": 6.6.0 debug: ^4.3.4 ts-api-utils: ^1.0.1 peerDependencies: @@ -1614,23 +1515,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: e0e6b0dddc8781440253037ce2b8ce8d855fbbe81ad6478dd3e8c089f8609a255e1a038c9d9ad754bc60e112011b903f3c80586239925f23e60349817beb9dcc + checksum: 9365b4b6f7200a86c7f78c462845e1cf252b0ce46a358de850f9d7d37afd9e34d40ac144760dcff6b3d6fe536310fa76cfc21acb680e2d98c7c6222ea8612892 languageName: node linkType: hard -"@typescript-eslint/types@npm:6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/types@npm:6.3.0" - checksum: 74d9ea540a23d8ccdb89670035015522eca0bb49272da37c01d10800b4fe7509235491a0acc76b8f280c7663971350210a90f56367023748a958203ca64e2337 +"@typescript-eslint/types@npm:6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/types@npm:6.6.0" + checksum: b48fa3574e0c6498cffb0fda0836a1e7cc10d19dca4e0fd0718feb233da1b428f49645324dc65173385c2b7f81bb42348aa376fe47fbb15664315b7429cc7223 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.3.0" +"@typescript-eslint/typescript-estree@npm:6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.6.0" dependencies: - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/visitor-keys": 6.3.0 + "@typescript-eslint/types": 6.6.0 + "@typescript-eslint/visitor-keys": 6.6.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -1639,34 +1540,34 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 143accfa2b2fb19225ee5979a4e0d33361e5432c0935a12e7cbf0138721a66c711ac699eee2b4a2ada5767d7a3a7f03fe3bca7bbcfcbfa9f006c56a6b030749a + checksum: bacdc5ea194c0bf3defa61f5be1e2367bcbf3457277e4e17d3fb1bfefa191431df6bb456d3625670cd80dd2184184bea61fa9afbba056ea590f9abcbdd665fec languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/utils@npm:6.3.0" +"@typescript-eslint/utils@npm:6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/utils@npm:6.6.0" dependencies: "@eslint-community/eslint-utils": ^4.4.0 "@types/json-schema": ^7.0.12 "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.3.0 - "@typescript-eslint/types": 6.3.0 - "@typescript-eslint/typescript-estree": 6.3.0 + "@typescript-eslint/scope-manager": 6.6.0 + "@typescript-eslint/types": 6.6.0 + "@typescript-eslint/typescript-estree": 6.6.0 semver: ^7.5.4 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: d016907ac933a7ba8240de8696b968b18d954518fe3a6ad6f2d1a1cbec424b99f633381e3731593d0364ae34fdf56dcfa5729cd548078eb0a2182b5bcb378aa0 + checksum: b24db4396a2a796f57565f3dd9fd60c38fb2b64d62c9df5e145b246d2ddab53503cd96f77d0005155160fa8b94699b4c458ea7b41bbe12c4ea2f5c92487abf1b languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.3.0": - version: 6.3.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.3.0" +"@typescript-eslint/visitor-keys@npm:6.6.0": + version: 6.6.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.6.0" dependencies: - "@typescript-eslint/types": 6.3.0 + "@typescript-eslint/types": 6.6.0 eslint-visitor-keys: ^3.4.1 - checksum: ac9e7364c4b874091ecb07852f9dd67640166258fdf1a7b91333a2ed6929f5c807900d6650dfd4c38cb1feb98995fd01c613d124e86dd958f3922356209a8b9e + checksum: 916331900aa39f91eb509954169b1230ba979577343ab6d4e380862c29408053c3325c852501241ff17c4e46ffb80ca28217f9781f627db2d20b3c4d9691ab69 languageName: node linkType: hard @@ -1675,62 +1576,61 @@ __metadata: resolution: "EMS-ESP@workspace:." dependencies: "@alova/adapter-xhr": ^1.0.1 - "@babel/core": ^7.22.10 + "@babel/core": ^7.22.17 "@emotion/react": ^11.11.1 "@emotion/styled": ^11.11.0 - "@mui/icons-material": ^5.14.3 - "@mui/material": ^5.14.4 + "@mui/icons-material": ^5.14.8 + "@mui/material": ^5.14.8 "@preact/compat": ^17.1.2 "@preact/preset-vite": ^2.5.0 "@prefresh/vite": ^2.4.1 "@table-library/react-table-library": 4.1.7 "@types/babel__core": ^7 - "@types/lodash-es": ^4.17.8 - "@types/node": ^20.4.10 - "@types/react": ^18.2.20 + "@types/lodash-es": ^4.17.9 + "@types/node": ^20.6.0 + "@types/react": ^18.2.21 "@types/react-dom": ^18.2.7 "@types/react-router-dom": ^5.3.3 - "@typescript-eslint/eslint-plugin": ^6.3.0 - "@typescript-eslint/parser": ^6.3.0 - alova: ^2.10.0 + "@typescript-eslint/eslint-plugin": ^6.6.0 + "@typescript-eslint/parser": ^6.6.0 + alova: ^2.11.1 async-validator: ^4.2.5 - eslint: ^8.47.0 + eslint: ^8.49.0 eslint-config-airbnb: ^19.0.4 eslint-config-airbnb-typescript: ^17.1.0 eslint-config-prettier: ^9.0.0 eslint-import-resolver-typescript: ^3.6.0 eslint-plugin-autofix: ^1.1.0 - eslint-plugin-import: ^2.28.0 + eslint-plugin-import: ^2.28.1 eslint-plugin-jsx-a11y: ^6.7.1 eslint-plugin-prettier: alpha - eslint-plugin-react: ^7.33.1 + eslint-plugin-react: ^7.33.2 eslint-plugin-react-hooks: ^4.6.0 history: ^5.3.0 jwt-decode: ^3.1.2 lodash-es: ^4.17.21 mime-types: ^2.1.35 - nodemon: ^3.0.1 npm-run-all: ^4.1.5 - preact: ^10.16.0 - prettier: ^3.0.1 + preact: ^10.17.1 + prettier: ^3.0.3 react: latest react-dom: latest react-dropzone: ^14.2.3 - react-icons: ^4.10.1 + react-icons: ^4.11.0 react-router-dom: ^6.15.0 react-toastify: ^9.1.3 rollup-plugin-visualizer: ^5.9.2 sockette: ^2.0.6 - terser: ^5.19.2 - typesafe-i18n: ^5.26.0 - typescript: ^5.1.6 + terser: ^5.19.4 + typesafe-i18n: ^5.26.2 + typescript: ^5.2.2 vite: ^4.4.9 vite-plugin-svgr: ^3.2.0 vite-tsconfig-paths: ^4.2.0 languageName: unknown linkType: soft -"abbrev@npm:1, abbrev@npm:^1.0.0": +"abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: 3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 @@ -1765,13 +1665,11 @@ __metadata: linkType: hard "agentkeepalive@npm:^4.2.1": - version: 4.3.0 - resolution: "agentkeepalive@npm:4.3.0" + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" dependencies: - debug: ^4.1.0 - depd: ^2.0.0 humanize-ms: ^1.2.1 - checksum: 61cbdab12d45e82e9ae515b0aa8d09617b66f72409e541a646dd7be4b7260d335d7f56a38079ad305bf0ffb8405592a459faf1294111289107f48352a20c2799 + checksum: 394ea19f9710f230722996e156607f48fdf3a345133b0b1823244b7989426c16019a428b56c82d3eabef616e938812981d9009f4792ecc66bd6a59e991c62612 languageName: node linkType: hard @@ -1797,10 +1695,10 @@ __metadata: languageName: node linkType: hard -"alova@npm:^2.10.0": - version: 2.10.0 - resolution: "alova@npm:2.10.0" - checksum: 959b68ca90dbf03f4781f412e37617022a4aaa8bb1df50efd018979907fb03aeb3442773b00730687b878cd3eaea48633b3b45e900fd2a0ce8924694a22dfe3f +"alova@npm:^2.11.1": + version: 2.11.1 + resolution: "alova@npm:2.11.1" + checksum: 1ef0cc44985495611728c9b9326d9c40382e45d3e0ba1c5aa87634e58b75f7b66f0b7bdb77fa60e0d57450db91dc31ed0cfe2cbd42dc707811ef3ae97bc3b374 languageName: node linkType: hard @@ -1843,16 +1741,6 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -1897,15 +1785,15 @@ __metadata: linkType: hard "array-includes@npm:^3.1.6": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" + version: 3.1.7 + resolution: "array-includes@npm:3.1.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 is-string: ^1.0.7 - checksum: d0caeaa57bea7d14b8480daee30cf8611899321006b15a6cd872b831bd7aaed7649f8764e060d01c5d33b8d9e998e5de5c87f4901874e1c1f467f429b7db2929 + checksum: 692907bd7f19d06dc58ccb761f34b58f5dc0b437d2b47a8fe42a1501849a5cf5c27aed3d521a9702667827c2c85a7e75df00a402c438094d87fc43f39ebf9b2b languageName: node linkType: hard @@ -1917,66 +1805,67 @@ __metadata: linkType: hard "array.prototype.findlastindex@npm:^1.2.2": - version: 1.2.2 - resolution: "array.prototype.findlastindex@npm:1.2.2" + version: 1.2.3 + resolution: "array.prototype.findlastindex@npm:1.2.3" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 es-shim-unscopables: ^1.0.0 - get-intrinsic: ^1.1.3 - checksum: b8037687a669df4dbdea33055a3817ea59bb0a6c2f17f90e4ad7c232d5edc1780e586b6ad284bcc45ff56e6861b0668c07de47bcc298018c21c0d553ab9480fd + get-intrinsic: ^1.2.1 + checksum: 2c5c4d3f07512d6729f728f6260a314c00f2eb0a243123092661fa1bc65dce90234c3b483b5f978396eccef6f69c50f0bea248448aaf9cdfcd1cedad6217acbb languageName: node linkType: hard "array.prototype.flat@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 es-shim-unscopables: ^1.0.0 - checksum: 8eda91d6925cc84b73ebf5a3d406ff28745d93a22ef6a0afb967755107081a937cf6c4555d3c18354870b2c5366c0ff51b3f597c11079e689869810a418b1b4f + checksum: a578ed836a786efbb6c2db0899ae80781b476200617f65a44846cb1ed8bd8b24c8821b83703375d8af639c689497b7b07277060024b9919db94ac3e10dc8a49b languageName: node linkType: hard "array.prototype.flatmap@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flatmap@npm:1.3.1" + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 es-shim-unscopables: ^1.0.0 - checksum: 2bd58a0e79d5d90cb4f5ef0e287edf8b28e87c65428f54025ac6b7b4c204224b92811c266f296c53a2dbc93872117c0fcea2e51d3c9e8cecfd5024d4a4a57db4 + checksum: 67b3f1d602bb73713265145853128b1ad77cc0f9b833c7e1e056b323fbeac41a4ff1c9c99c7b9445903caea924d9ca2450578d9011913191aa88cc3c3a4b54f4 languageName: node linkType: hard "array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" + version: 1.1.2 + resolution: "array.prototype.tosorted@npm:1.1.2" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 es-shim-unscopables: ^1.0.0 - get-intrinsic: ^1.1.3 - checksum: fd5f57aca3c7ddcd1bb83965457b625f3a67d8f334f5cbdb8ac8ef33d5b0d38281524114db2936f8c08048115d5158af216c94e6ae1eb966241b9b6f4ab8a7e8 + get-intrinsic: ^1.2.1 + checksum: aa222a0f78e9cdb4ea4d788a11f0acc2b17c2226f0912917e1c89e0f0c4dcdd14414ac88afffbd03025f33501f2649907cfb80664e48aa2af3430c1fb1b0b416 languageName: node linkType: hard "arraybuffer.prototype.slice@npm:^1.0.1": - version: 1.0.1 - resolution: "arraybuffer.prototype.slice@npm:1.0.1" + version: 1.0.2 + resolution: "arraybuffer.prototype.slice@npm:1.0.2" dependencies: array-buffer-byte-length: ^1.0.0 call-bind: ^1.0.2 define-properties: ^1.2.0 + es-abstract: ^1.22.1 get-intrinsic: ^1.2.1 is-array-buffer: ^3.0.2 is-shared-array-buffer: ^1.0.2 - checksum: db460cb4a96c3c9e27a2a7eed5d0ab1fcfccae9fc8cd1b4883cbb03cd29060b373e0723e78b5c786fdec2025a0ab12eb840c72b2f26016bac906b91bc4e9e4db + checksum: 96b6e40e439678ffb7fa266398510074d33c3980fbb475490b69980cca60adec3b0777047ef377068a29862157f83edef42efc64ce48ce38977d04d68de5b7fb languageName: node linkType: hard @@ -1994,6 +1883,15 @@ __metadata: languageName: node linkType: hard +"asynciterator.prototype@npm:^1.0.0": + version: 1.0.0 + resolution: "asynciterator.prototype@npm:1.0.0" + dependencies: + has-symbols: ^1.0.3 + checksum: fb76850e57d931ff59fd16b6cddb79b0d34fe45f400b2c3480d38892e72cd089787401687dbdb7cdb14ece402c275d3e02a648760d1489cd493527129c4c6204 + languageName: node + linkType: hard + "attr-accept@npm:^2.2.2": version: 2.2.2 resolution: "attr-accept@npm:2.2.2" @@ -2009,9 +1907,9 @@ __metadata: linkType: hard "axe-core@npm:^4.6.2": - version: 4.7.2 - resolution: "axe-core@npm:4.7.2" - checksum: 8dfc61f038fbd9623ae8a264c8a475d887113a027fb440a2b377b82ffd300e71d1a0bcf042ff13b517a8d548b34c44b4159eff693725c5d7cde240d0aa68feac + version: 4.8.1 + resolution: "axe-core@npm:4.8.1" + checksum: 160887aac11d0a249adade104379bb3b05d1bca26386137b50ea82861cc4bbbdcc76091309b3c5f03da1fae0f27ab02d8d4aef3d041a16e67f3a012cb5080c90 languageName: node linkType: hard @@ -2058,13 +1956,6 @@ __metadata: languageName: node linkType: hard -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d - languageName: node - linkType: hard - "bplist-parser@npm:^0.2.0": version: 0.2.0 resolution: "bplist-parser@npm:0.2.0" @@ -2093,7 +1984,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": +"braces@npm:^3.0.2": version: 3.0.2 resolution: "braces@npm:3.0.2" dependencies: @@ -2133,14 +2024,14 @@ __metadata: linkType: hard "cacache@npm:^17.0.0": - version: 17.1.3 - resolution: "cacache@npm:17.1.3" + version: 17.1.4 + resolution: "cacache@npm:17.1.4" dependencies: "@npmcli/fs": ^3.1.0 fs-minipass: ^3.0.0 glob: ^10.2.2 lru-cache: ^7.7.1 - minipass: ^5.0.0 + minipass: ^7.0.3 minipass-collect: ^1.0.2 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 @@ -2148,7 +2039,7 @@ __metadata: ssri: ^10.0.0 tar: ^6.1.11 unique-filename: ^3.0.0 - checksum: fcb0843c8e152b0e1440328508a2c0d6435c431198155e31daa591b348a1739b089ce2a72a4528690ed10a2bf086c180ee4980e2116457131b4c8a6e65e10976 + checksum: 21749dcf98c61dd570b179e51573b076c92e3f6c82166d37444242db66b92b1e6c6dc11c6059c027ac7bdef5479b513855059299cc11cda8212c49b0f69a3662 languageName: node linkType: hard @@ -2177,13 +2068,13 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001517": - version: 1.0.30001519 - resolution: "caniuse-lite@npm:1.0.30001519" - checksum: 563008248cb7f3746dba1f72ae300140e30f7cf6c0f8becd94fd8923b481cad85a08818b5c1462bb94f11e7afdc3c69ada75113db36483aa551c000a00e97733 + version: 1.0.30001532 + resolution: "caniuse-lite@npm:1.0.30001532" + checksum: cea427c7c8a606a5170ffaf837f60270f647dbb2c4d2c758aa37374a7f82f73364e28dfecc71c0ef7075d53f7a35c22e15329ed7ce74f66d5e255627ffa006a6 languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -2204,25 +2095,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.2 - glob-parent: ~5.1.2 - is-binary-path: ~2.1.0 - is-glob: ~4.0.1 - normalize-path: ~3.0.0 - readdirp: ~3.6.0 - dependenciesMeta: - fsevents: - optional: true - checksum: 1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 - languageName: node - linkType: hard - "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -2359,14 +2231,19 @@ __metadata: linkType: hard "cosmiconfig@npm:^8.1.3": - version: 8.2.0 - resolution: "cosmiconfig@npm:8.2.0" + version: 8.3.5 + resolution: "cosmiconfig@npm:8.3.5" dependencies: - import-fresh: ^3.2.1 + import-fresh: ^3.3.0 js-yaml: ^4.1.0 - parse-json: ^5.0.0 + parse-json: ^5.2.0 path-type: ^4.0.0 - checksum: 4180aa6d1881b75ba591b2fc04b022741a3a4b67e9e243c0eb8d169b6e1efbd3cdf7e8ca19243c0f2e53a9d59ac3eccd5cad5f95f487fcbf4e740f9e86745747 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: ec803b30b49ba686c3a844677ed9d40f7db68e01f75a2e6ad474f2af6ec15ef17561258c9592a0df209f137edc88056c113838b1d54e784de21853920c3a1fa9 languageName: node linkType: hard @@ -2489,13 +2366,6 @@ __metadata: languageName: node linkType: hard -"depd@npm:^2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: 58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c - languageName: node - linkType: hard - "dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" @@ -2548,9 +2418,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.477": - version: 1.4.482 - resolution: "electron-to-chromium@npm:1.4.482" - checksum: 6c89bf08001adf3f0446b270ff71e6eb433df0882b0688e4db2df8e98d4fd05d4d32831637516e7c06c95be9b17aeb84111a51ac872560a0d224ae1efd81d7d8 + version: 1.4.513 + resolution: "electron-to-chromium@npm:1.4.513" + checksum: 5b5469fbca60f76537dafc7f255e8878ce80de54254af8913153cc8c99502fd41d5c2ce2d3a957f18235cf6cdcf145fe8d29c2557b9d9beb09ccdf571f5d6307 languageName: node linkType: hard @@ -2617,7 +2487,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2": +"es-abstract@npm:^1.22.1": version: 1.22.1 resolution: "es-abstract@npm:1.22.1" dependencies: @@ -2664,6 +2534,28 @@ __metadata: languageName: node linkType: hard +"es-iterator-helpers@npm:^1.0.12": + version: 1.0.14 + resolution: "es-iterator-helpers@npm:1.0.14" + dependencies: + asynciterator.prototype: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-set-tostringtag: ^2.0.1 + function-bind: ^1.1.1 + get-intrinsic: ^1.2.1 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + iterator.prototype: ^1.1.0 + safe-array-concat: ^1.0.0 + checksum: 47d59ccbcf2fe32d9e5ac4fff65d613210851bbf14ba32726e5eb771194173b66aa233d7e4049b2cb24251545787ac1ea3242f91aa343aaaa7ce699e20d12e1c + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.1 resolution: "es-set-tostringtag@npm:2.0.1" @@ -2696,31 +2588,31 @@ __metadata: linkType: hard "esbuild@npm:^0.18.10": - version: 0.18.17 - resolution: "esbuild@npm:0.18.17" + version: 0.18.20 + resolution: "esbuild@npm:0.18.20" dependencies: - "@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/android-arm": 0.18.20 + "@esbuild/android-arm64": 0.18.20 + "@esbuild/android-x64": 0.18.20 + "@esbuild/darwin-arm64": 0.18.20 + "@esbuild/darwin-x64": 0.18.20 + "@esbuild/freebsd-arm64": 0.18.20 + "@esbuild/freebsd-x64": 0.18.20 + "@esbuild/linux-arm": 0.18.20 + "@esbuild/linux-arm64": 0.18.20 + "@esbuild/linux-ia32": 0.18.20 + "@esbuild/linux-loong64": 0.18.20 + "@esbuild/linux-mips64el": 0.18.20 + "@esbuild/linux-ppc64": 0.18.20 + "@esbuild/linux-riscv64": 0.18.20 + "@esbuild/linux-s390x": 0.18.20 + "@esbuild/linux-x64": 0.18.20 + "@esbuild/netbsd-x64": 0.18.20 + "@esbuild/openbsd-x64": 0.18.20 + "@esbuild/sunos-x64": 0.18.20 + "@esbuild/win32-arm64": 0.18.20 + "@esbuild/win32-ia32": 0.18.20 + "@esbuild/win32-x64": 0.18.20 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -2768,7 +2660,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 44b01abe3c7a00ef4e46eaddb8dfb08ef02e95240f1979b23ebeda2b26609c4c43da048e4120c0fc3930bbdad7ef4677d6a74dad93869930a76ec11fbcfe4a81 + checksum: 473b1d92842f50a303cf948a11ebd5f69581cd254d599dd9d62f9989858e0533f64e83b723b5e1398a5b488c0f5fd088795b4235f65ecaf4f007d4b79f04bc88 languageName: node linkType: hard @@ -2851,13 +2743,13 @@ __metadata: linkType: hard "eslint-import-resolver-node@npm:^0.3.7": - version: 0.3.7 - resolution: "eslint-import-resolver-node@npm:0.3.7" + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" dependencies: debug: ^3.2.7 - is-core-module: ^2.11.0 - resolve: ^1.22.1 - checksum: 39c562b59ec8dfd6b85ffa52273dbf0edb661b616463e2c453c60b2398b0a76f268f15f949a1648046c9c996d29599b57f6266df4b5d3562bff1088ded3672d5 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 languageName: node linkType: hard @@ -2906,9 +2798,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.28.0": - version: 2.28.0 - resolution: "eslint-plugin-import@npm:2.28.0" +"eslint-plugin-import@npm:^2.28.1": + version: 2.28.1 + resolution: "eslint-plugin-import@npm:2.28.1" dependencies: array-includes: ^3.1.6 array.prototype.findlastindex: ^1.2.2 @@ -2919,18 +2811,17 @@ __metadata: eslint-import-resolver-node: ^0.3.7 eslint-module-utils: ^2.8.0 has: ^1.0.3 - is-core-module: ^2.12.1 + is-core-module: ^2.13.0 is-glob: ^4.0.3 minimatch: ^3.1.2 object.fromentries: ^2.0.6 object.groupby: ^1.0.0 object.values: ^1.1.6 - resolve: ^1.22.3 semver: ^6.3.1 tsconfig-paths: ^3.14.2 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 0d7b978a3c4778b68bede2c8a14512e33581091bd8a508c4a424d2e8bff1f174549ffc3f2b7cfb28345cfb63061d3e43fdaa810ebfe9c96b5a4a1dc4047f6e9d + checksum: 5a29554d56f26d2bfb4d4f20b99aad6664c64812ef9655d5b3f089bbf70f340a34dabbe0b8ffa38bd9f1eabf828200acc5a56634842ddb83dd1e4ba01ad6d38d languageName: node linkType: hard @@ -2988,14 +2879,15 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.33.1": - version: 7.33.1 - resolution: "eslint-plugin-react@npm:7.33.1" +"eslint-plugin-react@npm:^7.33.2": + version: 7.33.2 + resolution: "eslint-plugin-react@npm:7.33.2" dependencies: array-includes: ^3.1.6 array.prototype.flatmap: ^1.3.1 array.prototype.tosorted: ^1.1.1 doctrine: ^2.1.0 + es-iterator-helpers: ^1.0.12 estraverse: ^5.3.0 jsx-ast-utils: ^2.4.1 || ^3.0.0 minimatch: ^3.1.2 @@ -3009,7 +2901,7 @@ __metadata: string.prototype.matchall: ^4.0.8 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 594b634cc5a86ff0eb5fe41b421dbd42ed69196150eef407d82a40541af8e3bebc600d63648584549588bfae4121004e6d1ff8434939902a81594b374460def2 + checksum: f9b247861024bafc396c4bd3c9ac946604b3b23077251c98f23602aa22027a0c33a69157fd49564e4ff7f17b3678e5dc366a46c7ec42a09454d7cbce786d5001 languageName: node linkType: hard @@ -3030,29 +2922,22 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": - version: 3.4.2 - resolution: "eslint-visitor-keys@npm:3.4.2" - checksum: 4521d1d470490c89fb613aec6fb2f0814b496a4618619ec8dfcc985640fe33c9c64f3dab882f50ebb401b4613f35f2601a9ef9a72b57739af5b0150fecdaf1f1 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 languageName: node linkType: hard -"eslint@npm:^8.47.0": - version: 8.47.0 - resolution: "eslint@npm:8.47.0" +"eslint@npm:^8.49.0": + version: 8.49.0 + resolution: "eslint@npm:8.49.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.2 - "@eslint/js": ^8.47.0 - "@humanwhocodes/config-array": ^0.11.10 + "@eslint/js": 8.49.0 + "@humanwhocodes/config-array": ^0.11.11 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 ajv: ^6.12.4 @@ -3087,7 +2972,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: b6c69f2ca34990027cfe7d46c956672583549b2a13d118791ee60ad1fa3e5057ab7781b27c9b0ea76dc67f7e980b33e106ad07d54c83464ab9ba03d2ec832f36 + checksum: 8d6985a8d60379ea714ad35d7a3d8762ac8c37b986c615e9a7c245794faddf68f61f997ba6f5f903d440e92065a56a4f7832a45adc2d4fc6e977026782f25835 languageName: node linkType: hard @@ -3277,16 +3162,17 @@ __metadata: linkType: hard "flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" + version: 3.1.0 + resolution: "flat-cache@npm:3.1.0" dependencies: - flatted: ^3.1.0 + flatted: ^3.2.7 + keyv: ^4.5.3 rimraf: ^3.0.2 - checksum: f274dcbadb09ad8d7b6edf2ee9b034bc40bf0c12638f6c4084e9f1d39208cb104a5ebbb24b398880ef048200eaa116852f73d2d8b72e8c9627aba8c3e27ca057 + checksum: fcbf70a2a7d8664ef8f94e25d8b4a05d0594aee8ba0b53b5b7f6287877e8e5080ae893fc4a71fb3d803c7659aeaf801d49f12183b954e21ecd98a1d74012167e languageName: node linkType: hard -"flatted@npm:^3.1.0": +"flatted@npm:^3.2.7": version: 3.2.7 resolution: "flatted@npm:3.2.7" checksum: 207a87c7abfc1ea6928ea16bac84f9eaa6d44d365620ece419e5c41cf44a5e9902b4c1f59c9605771b10e4565a0cb46e99d78e0464e8aabb42c97de880642257 @@ -3322,11 +3208,11 @@ __metadata: linkType: hard "fs-minipass@npm:^3.0.0": - version: 3.0.2 - resolution: "fs-minipass@npm:3.0.2" + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" dependencies: - minipass: ^5.0.0 - checksum: 34726f25b968ac05f6122ea7e9457fe108c7ae3b82beff0256953b0e405def61af2850570e32be2eb05c1e7660b663f24e14b6ab882d1d8a858314faacc4c972 + minipass: ^7.0.3 + checksum: 63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 languageName: node linkType: hard @@ -3338,18 +3224,18 @@ __metadata: linkType: hard "fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: latest - checksum: be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b + checksum: a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 conditions: os=darwin languageName: node linkType: hard "fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: node-gyp: latest conditions: os=darwin @@ -3364,18 +3250,18 @@ __metadata: linkType: hard "function.prototype.name@npm:^1.1.5": - version: 1.1.5 - resolution: "function.prototype.name@npm:1.1.5" + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - functions-have-names: ^1.2.2 - checksum: b75fb8c5261f03a54f7cb53a8c99e0c40297efc3cf750c51d3a2e56f6741701c14eda51986d30c24063136a4c32d1643df9d1dd2f2a14b64fa011edd3e7117ae + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b languageName: node linkType: hard -"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": +"functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: 33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca @@ -3442,15 +3328,15 @@ __metadata: linkType: hard "get-tsconfig@npm:^4.5.0": - version: 4.6.2 - resolution: "get-tsconfig@npm:4.6.2" + version: 4.7.0 + resolution: "get-tsconfig@npm:4.7.0" dependencies: resolve-pkg-maps: ^1.0.0 - checksum: 352c7313720b0f1172de5b6697da55c02744bacd8587f4cd989bfa25d8bb1af702128c2869121e6e4eef06c5c2f013406d2840905a8e898fd35351a305298ee1 + checksum: 5844d18a705535808cf535010d9443b47b462c6e91ed00d94500602f220ecb8e518325d5b1f9e0c515c67025819c3df193194144a456e1d8f1cd70b5d48b52aa languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": +"glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -3469,8 +3355,8 @@ __metadata: linkType: hard "glob@npm:^10.2.2": - version: 10.3.3 - resolution: "glob@npm:10.3.3" + version: 10.3.4 + resolution: "glob@npm:10.3.4" dependencies: foreground-child: ^3.1.0 jackspeak: ^2.0.3 @@ -3479,7 +3365,7 @@ __metadata: path-scurry: ^1.10.1 bin: glob: dist/cjs/src/bin.js - checksum: 50effa4208762e508def5688e4d88242db80b5913f65e9c5d5aefb707c59e66a27e845fbf18127157189f6ed0f055e2c94d7112c97a065b9cbfe002e1b26d330 + checksum: fe075f8109749cb0c264fd6eee8bf0cc8bb23a02305619b7a88bf1f79766218cc3ef66a3e8f3cd2e826006f047a3a8833c1694f167e978a6e37c34a8c053e48e languageName: node linkType: hard @@ -3505,11 +3391,11 @@ __metadata: linkType: hard "globals@npm:^13.19.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" + version: 13.21.0 + resolution: "globals@npm:13.21.0" dependencies: type-fest: ^0.20.2 - checksum: 9a028f136f1e7a3574689f430f7d57faa0d699c4c7e92ade00b02882a892be31c314d50dff07b48e607283013117bb8a997406d03a1f7ab4a33a005eb16efd6c + checksum: 90573e825401adbe0ef25db1b52e8f74afe4a1087049edd972f1ace77b391753fc3fe51eba9b6962c62e2282645f0a27ce20251662cdc247631c4861f32d56eb languageName: node linkType: hard @@ -3720,13 +3606,6 @@ __metadata: languageName: node linkType: hard -"ignore-by-default@npm:^1.0.1": - version: 1.0.1 - resolution: "ignore-by-default@npm:1.0.1" - checksum: 9ab6e70e80f7cc12735def7ecb5527cfa56ab4e1152cd64d294522827f2dcf1f6d85531241537dc3713544e88dd888f65cb3c49c7b2cddb9009087c75274e533 - languageName: node - linkType: hard - "ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.2.4 resolution: "ignore@npm:5.2.4" @@ -3734,7 +3613,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -3775,7 +3654,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.5": +"internal-slot@npm:^1.0.5": version: 1.0.5 resolution: "internal-slot@npm:1.0.5" dependencies: @@ -3811,6 +3690,15 @@ __metadata: languageName: node linkType: hard +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 787bc931576aad525d751fc5ce211960fe91e49ac84a5c22d6ae0bc9541945fbc3f686dc590c3175722ce4f6d7b798a93f6f8ff4847fdb2199aea6f4baf5d668 + languageName: node + linkType: hard + "is-bigint@npm:^1.0.1": version: 1.0.4 resolution: "is-bigint@npm:1.0.4" @@ -3820,15 +3708,6 @@ __metadata: languageName: node linkType: hard -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 - languageName: node - linkType: hard - "is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" @@ -3846,16 +3725,16 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.12.0, is-core-module@npm:^2.12.1, is-core-module@npm:^2.9.0": - version: 2.12.1 - resolution: "is-core-module@npm:2.12.1" +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.9.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" dependencies: has: ^1.0.3 - checksum: ff1d0dfc0b7851310d289398e416eb92ae8a9ac7ea8b8b9737fa8c0725f5a78c5f3db6edd4dff38c9ed731f3aaa1f6410a320233fcb52a2c8f1cf58eebf10a4b + checksum: a8e7f46f8cefd7c9f6f5d54f3dbf1c40bf79467b6612d6023421ec6ea7e8e4c22593b3963ff7a3f770db07bc19fccbe7987a550a8bc1a4d6ec4115db5e4c5dca languageName: node linkType: hard -"is-date-object@npm:^1.0.1": +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -3889,6 +3768,15 @@ __metadata: languageName: node linkType: hard +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 81caecc984d27b1a35c68741156fc651fb1fa5e3e6710d21410abc527eb226d400c0943a167922b2e920f6b3e58b0dede9aa795882b038b85f50b3a4b877db86 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -3896,7 +3784,16 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-generator-function@npm:^1.0.10": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: df03514df01a6098945b5a0cfa1abff715807c8e72f57c49a0686ad54b3b74d394e2d8714e6f709a71eb00c9630d48e73ca1796c1ccc84ac95092c1fecc0d98b + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -3923,6 +3820,13 @@ __metadata: languageName: node linkType: hard +"is-map@npm:^2.0.1": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: 119ff9137a37fd131a72fab3f4ab8c9d6a24b0a1ee26b4eff14dc625900d8675a97785eea5f4174265e2006ed076cc24e89f6e57ebd080a48338d914ec9168a5 + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -3963,6 +3867,13 @@ __metadata: languageName: node linkType: hard +"is-set@npm:^2.0.1": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: 5f8bd1880df8c0004ce694e315e6e1e47a3452014be792880bb274a3b2cdb952fdb60789636ca6e084c7947ca8b7ae03ccaf54c93a7fcfed228af810559e5432 + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" @@ -4013,6 +3924,13 @@ __metadata: languageName: node linkType: hard +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 9c9fec9efa7bf5030a4a927f33fff2a6976b93646259f92b517d3646c073cc5b98283a162ce75c412b060a46de07032444b530f0a4c9b6e012ef8f1741c3a987 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -4022,6 +3940,16 @@ __metadata: languageName: node linkType: hard +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: ef5136bd446ae4603229b897f73efd0720c6ab3ec6cc05c8d5c4b51aa9f95164713c4cad0a22ff1fedf04865ff86cae4648bc1d5eead4b6388e1150525af1cc1 + languageName: node + linkType: hard + "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" @@ -4045,16 +3973,28 @@ __metadata: languageName: node linkType: hard +"iterator.prototype@npm:^1.1.0": + version: 1.1.1 + resolution: "iterator.prototype@npm:1.1.1" + dependencies: + define-properties: ^1.2.0 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + reflect.getprototypeof: ^1.0.3 + checksum: c11d53e4b5723c3c77272cb87f730a71e1a9aa0c5b1ac6f325113a988cfe0bb2da414e84044a2fc364968515095330efc8d49694939b01f283faa4541b997d57 + languageName: node + linkType: hard + "jackspeak@npm:^2.0.3": - version: 2.2.2 - resolution: "jackspeak@npm:2.2.2" + version: 2.3.3 + resolution: "jackspeak@npm:2.3.3" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 70b286206a2729f6a2ba8470f68d4d130f7154f6a767fccabf107b9f6b3871395e89018437c2676c849450b258711cb557a4be6d7b2f889f1fa4d8b364533225 + checksum: 787b0617dcc534ef793ba685b92347b1b3d634d888b2833a57b140e97eb1f628ec3e460ba1a68fd99bd148004442625db7519be186b38ff51f4951e7c99b52d7 languageName: node linkType: hard @@ -4085,6 +4025,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + "json-parse-better-errors@npm:^1.0.1": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" @@ -4124,7 +4071,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.2": +"json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -4152,6 +4099,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.3": + version: 4.5.3 + resolution: "keyv@npm:4.5.3" + dependencies: + json-buffer: 3.0.1 + checksum: 7d3fc0469962bdff75ce92402b216a23d146e0caad011424947b32b95ffc4b91df12b1206026e6e945e7f80b3729a3109c0c3984f23038d738d355491179dd79 + languageName: node + linkType: hard + "kolorist@npm:^1.2.10": version: 1.8.0 resolution: "kolorist@npm:1.8.0" @@ -4271,9 +4227,9 @@ __metadata: linkType: hard "lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.0.0 - resolution: "lru-cache@npm:10.0.0" - checksum: 347b7b391091e9f91182b6f683ce04329932a542376a2d7d300637213b99f06c222a3bb0f0db59adf246dac6cef1bb509cab352451a96621d07c41b10a20495f + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 982dabfb227b9a2daf56d712ae0e72e01115a28c0a2068cd71277bca04568f3417bbf741c6c7941abc5c620fd8059e34f15607f90ebccbfa0a17533322d27a8e languageName: node linkType: hard @@ -4403,17 +4359,17 @@ __metadata: linkType: hard "minipass-fetch@npm:^3.0.0": - version: 3.0.3 - resolution: "minipass-fetch@npm:3.0.3" + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" dependencies: encoding: ^0.1.13 - minipass: ^5.0.0 + minipass: ^7.0.3 minipass-sized: ^1.0.3 minizlib: ^2.1.2 dependenciesMeta: encoding: optional: true - checksum: 12e0fde7e8fdb1bd923b9243b4788e7d3df305c6ddb3b79ab2da4587fa608c126157c7f6dd43746e8063ee99ec5abbb898d0426c812e9c9b68260c4fea9b279a + checksum: 1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 languageName: node linkType: hard @@ -4460,10 +4416,10 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0": - version: 7.0.2 - resolution: "minipass@npm:7.0.2" - checksum: 5e800acfc9dc75eacac5c4969ab50210463a8afbe8b487de1ae681106e17eb93772513854b6a38462b200b5758af95eeeb481945e050ce76f575ff1150fff4b4 +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.3 + resolution: "minipass@npm:7.0.3" + checksum: c85426bce6310368218aad1f20b8f242180b6c2058209c78840959d6fff8a4738076a3224c3a6b651080f95684d559be1bdb084939bc40011c653ec4552cf06e languageName: node linkType: hard @@ -4509,13 +4465,6 @@ __metadata: languageName: node linkType: hard -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: f6cef26f5044515754802c0fc475d81426f3b90fe88c20fabe08771ce1f736ce46e0397c10acb569a4dd0acb84c7f1ee70676122f95d5bfdd747af3a6c6bbaa8 - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -4565,26 +4514,6 @@ __metadata: languageName: node linkType: hard -"nodemon@npm:^3.0.1": - version: 3.0.1 - resolution: "nodemon@npm:3.0.1" - 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: ^7.5.3 - simple-update-notifier: ^2.0.0 - supports-color: ^5.5.0 - touch: ^3.1.0 - undefsafe: ^2.0.5 - bin: - nodemon: bin/nodemon.js - checksum: 471a218227949b38926de78237004c91e226b63ee06f433cf85c2f1c1f8b6bfbef9bceaa8d27786e7cfb539eb84da357d01741884d08a3ae172bebecd0f1de5b - languageName: node - linkType: hard - "nopt@npm:^6.0.0": version: 6.0.0 resolution: "nopt@npm:6.0.0" @@ -4596,17 +4525,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:~1.0.10": - version: 1.0.10 - resolution: "nopt@npm:1.0.10" - dependencies: - abbrev: 1 - bin: - nopt: ./bin/nopt.js - checksum: ddfbd892116a125fd68849ef564dd5b1f0a5ba0dbbf18782e9499e2efad8f4d3790635b47c6b5d3f7e014069e7b3ce5b8112687e9ae093fcd2678188c866fe28 - languageName: node - linkType: hard - "normalize-package-data@npm:^2.3.2": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" @@ -4619,13 +4537,6 @@ __metadata: languageName: node linkType: hard -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - "npm-run-all@npm:^4.1.5": version: 4.1.5 resolution: "npm-run-all@npm:4.1.5" @@ -4711,57 +4622,57 @@ __metadata: linkType: hard "object.entries@npm:^1.1.5, object.entries@npm:^1.1.6": - version: 1.1.6 - resolution: "object.entries@npm:1.1.6" + version: 1.1.7 + resolution: "object.entries@npm:1.1.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 8782c71db3a068ccbae9e0541e6b4ac2c25dc67c63f97b7e6ad3c88271d7820197e7398e37747f96542ed47c27f0b81148cdf14c42df15dc22f64818ae7bb5bf + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 3ad1899cc7bf14546bf28f4a9b363ae8690b90948fcfbcac4c808395435d760f26193d9cae95337ce0e3c1e5c1f4fa45f7b46b31b68d389e9e117fce38775d86 languageName: node linkType: hard "object.fromentries@npm:^2.0.6": - version: 2.0.6 - resolution: "object.fromentries@npm:2.0.6" + version: 2.0.7 + resolution: "object.fromentries@npm:2.0.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: db6759ea68131cbdb70b1152f9984b49db03e81de4f6de079b39929bebd8b45501e5333ca2351991e07ee56f4651606c023396644e8f25c0806fa39a26c4c6e6 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 071745c21f6fc9e6c914691f2532c1fb60ad967e5ddc52801d09958b5de926566299d07ae14466452a7efd29015f9145d6c09c573d93a0dc6f1683ee0ec2b93b languageName: node linkType: hard "object.groupby@npm:^1.0.0": - version: 1.0.0 - resolution: "object.groupby@npm:1.0.0" + version: 1.0.1 + resolution: "object.groupby@npm:1.0.1" dependencies: call-bind: ^1.0.2 define-properties: ^1.2.0 - es-abstract: ^1.21.2 + es-abstract: ^1.22.1 get-intrinsic: ^1.2.1 - checksum: 64fff29630d8a9e3260376ece19ffa15f6ac65e2d2c99f4d912dcb06a99571a2cc7ea612c15ee3d335c2aecd961f1ba0eb9bf79cbc12edf3fd2af43973f5eb5a + checksum: 61e41fbf08cc04ed860363db9629eedeaa590fce243c0960e948fd7b11f78a9d4350065c339936d118a2dd8775d7259e26207340cc8ce688bec66cb615fec6fe languageName: node linkType: hard "object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" + version: 1.1.3 + resolution: "object.hasown@npm:1.1.3" dependencies: - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 419fc1c74a2aea7ebb4d49b79d5b1599a010b26c18eae35bd061ccdd013ccb749c499d8dd6ee21a91e6d7264ccc592573d0f13562970f76e25fc844d8c1b02ce + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 8a41ba4fb1208a85c2275e9b5098071beacc24345b9a71ab98ef0a1c61b34dc74c6b460ff1e1884c33843d8f2553df64a10eec2b74b3ed009e3b2710c826bd2c languageName: node linkType: hard "object.values@npm:^1.1.6": - version: 1.1.6 - resolution: "object.values@npm:1.1.6" + version: 1.1.7 + resolution: "object.values@npm:1.1.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 3381204390f10c9f653a4875a50d221c67b5c16cb80a6ac06c706fc82a7cad8400857d4c7a0731193b0abb56b84fe803eabcf7addcf32de76397bbf207e68c66 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: e869d6a37fb7afdd0054dea49036d6ccebb84854a8848a093bbd1bc516f53e690bba88f0bc3e83fdfa74c601469ee6989c9b13359cda9604144c6e732fad3b6b languageName: node linkType: hard @@ -4875,7 +4786,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0": +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -4962,7 +4873,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": +"picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -4986,20 +4897,20 @@ __metadata: linkType: hard "postcss@npm:^8.4.27": - version: 8.4.27 - resolution: "postcss@npm:8.4.27" + version: 8.4.29 + resolution: "postcss@npm:8.4.29" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 41a0476e05cb97514ff8d75e4ff9fdcf778f22b2e0d25b7028f219cd408e01d3c4f50459d4a1cd9a430d8ef08202c881374a4fa4ea6009f4a135a07315d606e5 + checksum: b50b7ad4ac6c9ba029eda4381863570b7aed2672ffae2566ef109e556bae01823a51180409877ff2cce1fe186025751c7191c301eafc07b0d90c630ab5e0365c languageName: node linkType: hard -"preact@npm:^10.16.0": - version: 10.16.0 - resolution: "preact@npm:10.16.0" - checksum: 719d0a51dfda0149390b3f65aefd54bdc231f1f821b42ae17bc3fd5e9652d0a30d8a44c455921353e375bfed5d91d74054936827e7d780aee519e07fa84db4ac +"preact@npm:^10.17.1": + version: 10.17.1 + resolution: "preact@npm:10.17.1" + checksum: 6a264832afacb2e5c6ffd3bdbbb85cfbb1c5f8e33c616885cdbd8d07474819b6740c834dc3a749f6986366a57cdc33feba10680b2a65dc51d5e40a9c68c7b641 languageName: node linkType: hard @@ -5019,12 +4930,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^3.0.1": - version: 3.0.1 - resolution: "prettier@npm:3.0.1" +"prettier@npm:^3.0.3": + version: 3.0.3 + resolution: "prettier@npm:3.0.3" bin: prettier: bin/prettier.cjs - checksum: 7231768b6e0f0f17cbaa83a4f7cdb100df0229ef1910b0b2cf72ce5ed8ee25ae7ec0d30cde20dcd898a002c6d1fcdb8a6ab0f8f5d8fc1275b7c29ea9e56305f2 + checksum: f950887bc03c5b970d8c6dd129364acfbbc61e7b46aec5d5ce17f4adf6404e2ef43072c98b51c4786e0eaca949b307d362a773fd47502862d754b5a328fa2b26 languageName: node linkType: hard @@ -5049,13 +4960,6 @@ __metadata: languageName: node linkType: hard -"pstree.remy@npm:^1.1.8": - version: 1.1.8 - resolution: "pstree.remy@npm:1.1.8" - checksum: 30f78c88ce6393cb3f7834216cb6e282eb83c92ccb227430d4590298ab2811bc4a4745f850a27c5178e79a8f3e316591de0fec87abc19da648c2b3c6eb766d14 - languageName: node - linkType: hard - "punycode@npm:^2.1.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" @@ -5095,12 +4999,12 @@ __metadata: languageName: node linkType: hard -"react-icons@npm:^4.10.1": - version: 4.10.1 - resolution: "react-icons@npm:4.10.1" +"react-icons@npm:^4.11.0": + version: 4.11.0 + resolution: "react-icons@npm:4.11.0" peerDependencies: react: "*" - checksum: aa4ecd390751bf61fc7967c2256eace1351c4af9a941ea4459464ac5cae012fe99970430ab659ad38a633ca55b0392d9ea5624ab3953c0bc86e1809199d6e2e2 + checksum: 95e837e11ece80cc39ef1beac026d10f96cd7e567afc718e717517beb35b82dd59307a758c10b3a449dc15d6682d6551ecc630b2821d9365819af921fa279a73 languageName: node linkType: hard @@ -5223,23 +5127,28 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" +"reflect.getprototypeof@npm:^1.0.3": + version: 1.0.4 + resolution: "reflect.getprototypeof@npm:1.0.4" dependencies: - picomatch: ^2.2.1 - checksum: 6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + globalthis: ^1.0.3 + which-builtin-type: ^1.1.3 + checksum: 02104cdd22658b637efe6b1df73658edab539268347327c8250a72d0cb273dcdf280c284e2d94155d22601d022d16be1a816a8616d679e447cbcbde9860d15cb languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 12b069dc774001fbb0014f6a28f11c09ebfe3c0d984d88c9bced77fdb6fedbacbca434d24da9ae9371bfbf23f754869307fb51a4c98a8b8b18e5ef748677ca24 +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: e25f062c1a183f81c99681691a342760e65c55e8d3a4d4fe347ebe72433b123754b942b70b622959894e11f8a9131dc549bd3c9a5234677db06a4af42add8d12 languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0": +"regexp.prototype.flags@npm:^1.5.0": version: 1.5.0 resolution: "regexp.prototype.flags@npm:1.5.0" dependencies: @@ -5271,16 +5180,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.3": - version: 1.22.3 - resolution: "resolve@npm:1.22.3" +"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.4": + version: 1.22.4 + resolution: "resolve@npm:1.22.4" dependencies: - is-core-module: ^2.12.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 5ebd90dc08467e7d9af8f89a67f127c90d77e58d3bfc65da5221699cc15679c5bae5e410e6795ee4b9f717cd711c495a52a3b650ce6720b0626de46e5074e796 + checksum: b1adb7885a05e31fc2be19e85e338b8d48d9e442b568d91e9c925990ed1c3bff66683ccea03b9e9893b857ec25dee0f7951a0d0630be49e4e1f5c1150ddc35dc languageName: node linkType: hard @@ -5297,16 +5206,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.3#~builtin": - version: 1.22.3 - resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=c3c19d" +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin": + version: 1.22.4 + resolution: "resolve@patch:resolve@npm%3A1.22.4#~builtin::version=1.22.4&hash=c3c19d" dependencies: - is-core-module: ^2.12.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 6267bdbbbb1da23975463e979dadf5135fcc40c4b9281c5af4581afa848ced98090ab4e2dbc9085e58f8ea48c0eb7c4fe94b1e8f55ebdd17a725d86982eb5288 + checksum: 60ca179599acf8b1bb17b850280a7081781b457d235d48197dc893b82d75741f191c5fe2d93e5729292234d0b0d88e9add273df4b9e04755eeed4fd7d23f1c79 languageName: node linkType: hard @@ -5368,8 +5277,8 @@ __metadata: linkType: hard "rollup@npm:^3.27.1": - version: 3.27.2 - resolution: "rollup@npm:3.27.2" + version: 3.29.0 + resolution: "rollup@npm:3.29.0" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -5377,7 +5286,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: feb1e76f50fb502e106954a621b2d0b3e2e92e2552f938a0cbef5f7931c9f4283d05076d47311a4582863205f377e3e2d7314a1626e3c7d9c7330527ddeb7562 + checksum: 6759c1e8bc5193ad761d54f429d14d0f59a374ef38b4dbbbb097144b8cef7aeed6bd5d3be62d6411926fac5e321d30d5773a8c1ea83cca57597f6d6082fca38f languageName: node linkType: hard @@ -5400,14 +5309,14 @@ __metadata: linkType: hard "safe-array-concat@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-array-concat@npm:1.0.0" + version: 1.0.1 + resolution: "safe-array-concat@npm:1.0.1" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 + get-intrinsic: ^1.2.1 has-symbols: ^1.0.3 isarray: ^2.0.5 - checksum: 792d41fde9834583980912cb16bee511ce25e1759d3c467fdbbb3fc3245346a2289a6476d821713aa1ae23cc1d613d17e79c80e55adb29577f6a29e6f45e7f46 + checksum: 4b15ce5fce5ce4d7e744a63592cded88d2f27806ed229eadb2e42629cbcd40e770f7478608e75f455e7fe341acd8c0a01bdcd7146b10645ea7411c5e3c1d1dd8 languageName: node linkType: hard @@ -5463,7 +5372,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:^7.3.5, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -5545,15 +5454,6 @@ __metadata: languageName: node linkType: hard -"simple-update-notifier@npm:^2.0.0": - version: 2.0.0 - resolution: "simple-update-notifier@npm:2.0.0" - dependencies: - semver: ^7.5.3 - checksum: 2a00bd03bfbcbf8a737c47ab230d7920f8bfb92d1159d421bdd194479f6d01ebc995d13fbe13d45dace23066a78a3dc6642999b4e3b38b847e6664191575b20c - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -5669,11 +5569,11 @@ __metadata: linkType: hard "ssri@npm:^10.0.0": - version: 10.0.4 - resolution: "ssri@npm:10.0.4" + version: 10.0.5 + resolution: "ssri@npm:10.0.5" dependencies: - minipass: ^5.0.0 - checksum: d085474ea6b439623a9a6a2c67570cb9e68e1bb6060e46e4d387f113304d75a51946d57c524be3a90ebfa3c73026edf76eb1a2d79a7f6cff0b04f21d99f127ab + minipass: ^7.0.3 + checksum: b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 languageName: node linkType: hard @@ -5707,62 +5607,62 @@ __metadata: linkType: hard "string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" + version: 4.0.9 + resolution: "string.prototype.matchall@npm:4.0.9" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.4.3 + internal-slot: ^1.0.5 + regexp.prototype.flags: ^1.5.0 side-channel: ^1.0.4 - checksum: 644523d05c1ee93bab7474e999a5734ee5f6ad2d7ad24ed6ea8706c270dc92b352bde0f2a5420bfbeed54e28cb6a770c3800e1988a5267a70fd5e677c7750abc + checksum: bcd2e34f467b9c474df88cebc1a3ed208f02d0b1452ef8907e74d332b2358f9cf03695693ab7620664b21a0df0c2b4917b631b1fe3c26a3b8c1feded80912ff7 languageName: node linkType: hard "string.prototype.padend@npm:^3.0.0": - version: 3.1.4 - resolution: "string.prototype.padend@npm:3.1.4" + version: 3.1.5 + resolution: "string.prototype.padend@npm:3.1.5" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 11feb9ae51a32febc73bb3b38d29900405c736f47613badff773ab830f23faad796c43d51e18090cada975b82831f66bdcb6b5353739a019b7fcc321900205ad + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 94ba0d7a463c225d0337ebe4f5c150577d6d09fe56c798f77cd2b11f8d7c9b7b05e65b3c2a273f03529a3f155edb2d78b9c06b7a91f964f89796010a6cbc1dfa languageName: node linkType: hard "string.prototype.trim@npm:^1.2.7": - version: 1.2.7 - resolution: "string.prototype.trim@npm:1.2.7" + version: 1.2.8 + resolution: "string.prototype.trim@npm:1.2.8" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 31698f6d718794e422db6fcfa6685dcd9243097273b3b2a8b7948b5d45a183cd336378893ff0d4a7b2531b604c32bb5c45193dd6da3d2f5504df5cd222372c09 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 4f76c583908bcde9a71208ddff38f67f24c9ec8093631601666a0df8b52fad44dad2368c78895ce83eb2ae8e7068294cc96a02fc971ab234e4d5c9bb61ea4e34 languageName: node linkType: hard "string.prototype.trimend@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimend@npm:1.0.6" + version: 1.0.7 + resolution: "string.prototype.trimend@npm:1.0.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 51b663e3195a74b58620a250b3fc4efb58951000f6e7d572a9f671c038f2f37f24a2b8c6994500a882aeab2f1c383fac1e8c023c01eb0c8b4e52d2f13b6c4513 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 53c24911c7c4d8d65f5ef5322de23a3d5b6b4db73273e05871d5ab4571ae5638f38f7f19d71d09116578fb060e5a145cc6a208af2d248c8baf7a34f44d32ce57 languageName: node linkType: hard "string.prototype.trimstart@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimstart@npm:1.0.6" + version: 1.0.7 + resolution: "string.prototype.trimstart@npm:1.0.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 13b9970d4e234002dfc8069c655c1fe19e83e10ced208b54858c41bb0f7544e581ac0ce746e92b279563664ad63910039f7253f36942113fec413b2b4e7c1fcd + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 0bcf391b41ea16d4fda9c9953d0a7075171fe090d33b4cf64849af94944c50862995672ac03e0c5dba2940a213ad7f53515a668dac859ce22a0276289ae5cf4f languageName: node linkType: hard @@ -5828,7 +5728,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": +"supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" dependencies: @@ -5878,8 +5778,8 @@ __metadata: linkType: hard "tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.15 - resolution: "tar@npm:6.1.15" + version: 6.2.0 + resolution: "tar@npm:6.2.0" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 @@ -5887,13 +5787,13 @@ __metadata: minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 - checksum: bb2babe7b14442f690d83c2b2c571c9dd0bf802314773e05f4a3e4a241fdecd7fb560b8e4e7d6ea34533c8cd692e1b8418a3b8ba3b9687fe78a683dfbad7f82d + checksum: 02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8 languageName: node linkType: hard -"terser@npm:^5.19.2": - version: 5.19.2 - resolution: "terser@npm:5.19.2" +"terser@npm:^5.19.4": + version: 5.19.4 + resolution: "terser@npm:5.19.4" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -5901,7 +5801,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 95817b86619af33d8d143d7ae02dfcd9ac2cf4ea5b5cb7b208aaccff4cdc5594893960a4c3dcdac09863ebd43e2835ab173997041790aa77092c1d31ff40c95a + checksum: 39c6687609f5b9061f2fb82bee02d2f9d7756fcb5bd50c67da1482f52cf5977e03e0c5df5cb4ce17e549428024c8859075137c461ec4a9ae8cf91a505759255a languageName: node linkType: hard @@ -5935,23 +5835,12 @@ __metadata: languageName: node linkType: hard -"touch@npm:^3.1.0": - version: 3.1.0 - resolution: "touch@npm:3.1.0" - dependencies: - nopt: ~1.0.10 - bin: - nodetouch: ./bin/nodetouch.js - checksum: dacb4a639401b83b0a40b56c0565e01096e5ecf38b22a4840d9eeb642a5bea136c6a119e4543f9b172349a5ee343b10cda0880eb47f7d7ddfd6eac59dcf53244 - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "ts-api-utils@npm:1.0.1" + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" peerDependencies: typescript: ">=4.2.0" - checksum: 8e8a54afb44df31c413e6f5b817a305a37780726125db26e85d01d553efc31aacb3ccad111a14844b584776f24e71bcd4db2f2d3e9bce8031a329dc78f3e46e2 + checksum: 9408338819c3aca2a709f0bc54e3f874227901506cacb1163612a6c8a43df224174feb965a5eafdae16f66fc68fd7bfee8d3275d0fa73fbb8699e03ed26520c9 languageName: node linkType: hard @@ -5982,9 +5871,9 @@ __metadata: linkType: hard "tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0": - version: 2.6.1 - resolution: "tslib@npm:2.6.1" - checksum: a0382d386f5f1d6e3a39ab22bc56d1e08493da99ab3daf550e63bae6c08fdd6dd4fd20623ef387cad8262ce3fede98439257054fc025f2103cd4603b4509a052 + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb languageName: node linkType: hard @@ -6051,34 +5940,34 @@ __metadata: languageName: node linkType: hard -"typesafe-i18n@npm:^5.26.0": - version: 5.26.0 - resolution: "typesafe-i18n@npm:5.26.0" +"typesafe-i18n@npm:^5.26.2": + version: 5.26.2 + resolution: "typesafe-i18n@npm:5.26.2" peerDependencies: typescript: ">=3.5.1" bin: typesafe-i18n: cli/typesafe-i18n.mjs - checksum: aae455e9a97f77c810acd38c60b9fdada869323ceaa2f80cdea93f1385d2d397a7349e69cd3f72f6bc377839f71742cbc1a99591192eac1d71c05101597b5f4b + checksum: f13b13d54bf121701c85424de2d677f3d3e61c6b7160dffa681e3ffcbb2843ea10931d5842fcc382faed78bac727b234259e9fc767a44cd9dc1d64ddd8ddf397 languageName: node linkType: hard -"typescript@npm:^5.1.6": - version: 5.1.6 - resolution: "typescript@npm:5.1.6" +"typescript@npm:^5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 45ac28e2df8365fd28dac42f5d62edfe69a7203d5ec646732cadc04065331f34f9078f81f150fde42ed9754eed6fa3b06a8f3523c40b821e557b727f1992e025 + checksum: 91ae3e6193d0ddb8656d4c418a033f0f75dec5e077ebbc2bd6d76439b93f35683936ee1bdc0e9cf94ec76863aa49f27159b5788219b50e1cd0cd6d110aa34b07 languageName: node linkType: hard -"typescript@patch:typescript@^5.1.6#~builtin": - version: 5.1.6 - resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=1f5320" +"typescript@patch:typescript@^5.2.2#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=1f5320" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: c134abcd9fc5c393db30498db18d8e89453efae14e11a39c1adb6238138d4c152472e497499b8a67b0c87ca6eafcb26b0eb02f962f240c233c2e0ad3785f8742 + checksum: 303979762f9b8932c53f8149e866521a1265168b5c0fde8cc8ad83ac3d0e8ede8096cb02dff5f2de048e7f118a6f61902f81da12d5972c7fb582f09f2f18d169 languageName: node linkType: hard @@ -6094,13 +5983,6 @@ __metadata: languageName: node linkType: hard -"undefsafe@npm:^2.0.5": - version: 2.0.5 - resolution: "undefsafe@npm:2.0.5" - checksum: 96c0466a5fbf395917974a921d5d4eee67bca4b30d3a31ce7e621e0228c479cf893e783a109af6e14329b52fe2f0cb4108665fad2b87b0018c0df6ac771261d5 - languageName: node - linkType: hard - "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -6248,7 +6130,39 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11": +"which-builtin-type@npm:^1.1.3": + version: 1.1.3 + resolution: "which-builtin-type@npm:1.1.3" + dependencies: + function.prototype.name: ^1.1.5 + has-tostringtag: ^1.0.0 + is-async-function: ^2.0.0 + is-date-object: ^1.0.5 + is-finalizationregistry: ^1.0.2 + is-generator-function: ^1.0.10 + is-regex: ^1.1.4 + is-weakref: ^1.0.2 + isarray: ^2.0.5 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: 2b7b234df3443b52f4fbd2b65b731804de8d30bcc4210ec84107ef377a81923cea7f2763b7fb78b394175cea59118bf3c41b9ffd2d643cb1d748ef93b33b6bd4 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: ^2.0.1 + is-set: ^2.0.1 + is-weakmap: ^2.0.1 + is-weakset: ^2.0.1 + checksum: 249f913e1758ed2f06f00706007d87dc22090a80591a56917376e70ecf8fc9ab6c41d98e1c87208bb9648676f65d4b09c0e4d23c56c7afb0f0a73a27d701df5d + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.9": version: 1.1.11 resolution: "which-typed-array@npm:1.1.11" dependencies: diff --git a/lib/espMqttClient/src/MqttClient.cpp b/lib/espMqttClient/src/MqttClient.cpp index a428158ed..97db0dcce 100644 --- a/lib/espMqttClient/src/MqttClient.cpp +++ b/lib/espMqttClient/src/MqttClient.cpp @@ -103,7 +103,7 @@ bool MqttClient::disconnected() const { } bool MqttClient::connect() { - bool result = true; + bool result = false; if (_state == State::disconnected) { EMC_SEMAPHORE_TAKE(); if (_addPacketFront(_cleanSession, @@ -116,19 +116,21 @@ bool MqttClient::connect() { _willPayloadLength, (uint16_t)(_keepAlive / 1000), // 32b to 16b doesn't overflow because it comes from 16b orignally _clientId)) { + result = true; + _state = State::connectingTcp1; #if defined(ARDUINO_ARCH_ESP32) if (_useInternalTask == espMqttClientTypes::UseInternalTask::YES) { vTaskResume(_taskHandle); } #endif - _state = State::connectingTcp1; } else { EMC_SEMAPHORE_GIVE(); emc_log_e("Could not create CONNECT packet"); _onError(0, Error::OUT_OF_MEMORY); - result = false; } EMC_SEMAPHORE_GIVE(); + } else if (_state <= State::connected) { // already connected or connecting + result = true; } return result; } @@ -196,6 +198,14 @@ const char * MqttClient::getClientId() const { return _clientId; } +size_t MqttClient::queueSize() { + size_t ret = 0; + EMC_SEMAPHORE_TAKE(); + ret = _outbox.size(); + EMC_SEMAPHORE_GIVE(); + return ret; +} + void MqttClient::loop() { switch ((State)_state) { // modified by proddy for EMS-ESP compiling standalone case State::disconnected: @@ -335,7 +345,6 @@ int MqttClient::_sendPacket() { size_t wantToWrite = 0; size_t written = 0; if (packet && (wantToWrite == written)) { - // mixing signed with unsigned here but safe because of MQTT packet size limits wantToWrite = packet->packet.available(_bytesSent); if (wantToWrite == 0) { EMC_SEMAPHORE_GIVE(); @@ -630,9 +639,6 @@ void MqttClient::_onPubcomp() { // if it doesn't match the ID, return if ((it.get()->packet.packetType()) == PacketType.PUBREL) { if (it.get()->packet.packetId() == idToMatch) { - // if (!_addPacket(PacketType.PUBCOMP, idToMatch)) { - // emc_log_e("Could not create PUBCOMP packet"); - // } callback = true; _outbox.remove(it); break; @@ -697,20 +703,6 @@ void MqttClient::_onUnsuback() { } } -uint16_t MqttClient::getQueue() const { - EMC_SEMAPHORE_TAKE(); - espMqttClientInternals::Outbox::Iterator it = _outbox.front(); - uint16_t count = 0; - while (it) { - // if (it.get()->packet.packetType() == PacketType.PUBLISH) { - ++count; - // } - ++it; - } - EMC_SEMAPHORE_GIVE(); - return count; -} - void MqttClient::_clearQueue(int clearData) { emc_log_i("clearing queue (clear session: %d)", clearData); EMC_SEMAPHORE_TAKE(); diff --git a/lib/espMqttClient/src/MqttClient.h b/lib/espMqttClient/src/MqttClient.h index d09db68c5..dba4bf245 100644 --- a/lib/espMqttClient/src/MqttClient.h +++ b/lib/espMqttClient/src/MqttClient.h @@ -65,7 +65,7 @@ class MqttClient { uint16_t publish(const char * topic, uint8_t qos, bool retain, espMqttClientTypes::PayloadCallback callback, size_t length); void clearQueue(bool deleteSessionData = false); // Not MQTT compliant and may cause unpredictable results when `deleteSessionData` = true! const char * getClientId() const; - uint16_t getQueue() const; + size_t queueSize(); // No const because of mutex void loop(); protected: @@ -131,8 +131,9 @@ class MqttClient { uint32_t timeSent; espMqttClientInternals::Packet packet; template - OutgoingPacket(uint32_t t, espMqttClientTypes::Error error, Args &&... args) - : timeSent(t) + OutgoingPacket(uint32_t t, espMqttClientTypes::Error & error, Args &&... args) + : // NOLINT(runtime/references) + timeSent(t) , packet(error, std::forward(args)...) { } }; @@ -150,18 +151,26 @@ class MqttClient { bool _addPacket(Args &&... args) { espMqttClientTypes::Error error(espMqttClientTypes::Error::SUCCESS); espMqttClientInternals::Outbox::Iterator it = _outbox.emplace(0, error, std::forward(args)...); - if (it && error == espMqttClientTypes::Error::SUCCESS) + if (it && error == espMqttClientTypes::Error::SUCCESS) { return true; - return false; + } else { + if (it) + _outbox.remove(it); + return false; + } } template bool _addPacketFront(Args &&... args) { espMqttClientTypes::Error error(espMqttClientTypes::Error::SUCCESS); espMqttClientInternals::Outbox::Iterator it = _outbox.emplaceFront(0, error, std::forward(args)...); - if (it && error == espMqttClientTypes::Error::SUCCESS) + if (it && error == espMqttClientTypes::Error::SUCCESS) { return true; - return false; + } else { + if (it) + _outbox.remove(it); + return false; + } } void _checkOutbox(); diff --git a/lib/espMqttClient/src/Outbox.h b/lib/espMqttClient/src/Outbox.h index dfbbd13c0..cfb9f244d 100644 --- a/lib/espMqttClient/src/Outbox.h +++ b/lib/espMqttClient/src/Outbox.h @@ -163,6 +163,16 @@ class Outbox { return false; } + size_t size() const { + Node* n = _first; + size_t count = 0; + while (n) { + n = n->next; + ++count; + } + return count; + } + private: Node* _first; Node* _last; diff --git a/lib/espMqttClient/src/Packets/Packet.cpp b/lib/espMqttClient/src/Packets/Packet.cpp index df463ef7b..2f84b503a 100644 --- a/lib/espMqttClient/src/Packets/Packet.cpp +++ b/lib/espMqttClient/src/Packets/Packet.cpp @@ -100,7 +100,7 @@ Packet::Packet(espMqttClientTypes::Error& error, (password ? 2 + strlen(password) : 0); // allocate memory - if (!_allocate(remainingLength)) { + if (!_allocate(remainingLength, false)) { error = espMqttClientTypes::Error::OUT_OF_MEMORY; return; } @@ -300,8 +300,8 @@ Packet::Packet(espMqttClientTypes::Error& error, MQTTPacketType type) } -bool Packet::_allocate(size_t remainingLength) { - if (EMC_GET_FREE_MEMORY() < EMC_MIN_FREE_MEMORY) { +bool Packet::_allocate(size_t remainingLength, bool check) { + if (check && EMC_GET_FREE_MEMORY() < EMC_MIN_FREE_MEMORY) { emc_log_w("Packet buffer not allocated: low memory"); return false; } diff --git a/lib/espMqttClient/src/Packets/Packet.h b/lib/espMqttClient/src/Packets/Packet.h index 1af2f06af..f2b290293 100644 --- a/lib/espMqttClient/src/Packets/Packet.h +++ b/lib/espMqttClient/src/Packets/Packet.h @@ -133,7 +133,7 @@ class Packet { private: // pass remainingLength = total size - header - remainingLengthLength! - bool _allocate(size_t remainingLength); + bool _allocate(size_t remainingLength, bool check = true); // fills header and returns index of next available byte in buffer size_t _fillPublishHeader(uint16_t packetId, diff --git a/lib/framework/NetworkSettingsService.cpp b/lib/framework/NetworkSettingsService.cpp index da89434b3..8dcee3bd8 100644 --- a/lib/framework/NetworkSettingsService.cpp +++ b/lib/framework/NetworkSettingsService.cpp @@ -6,6 +6,10 @@ NetworkSettingsService::NetworkSettingsService(AsyncWebServer * server, FS * fs, : _httpEndpoint(NetworkSettings::read, NetworkSettings::update, this, server, NETWORK_SETTINGS_SERVICE_PATH, securityManager) , _fsPersistence(NetworkSettings::read, NetworkSettings::update, this, fs, NETWORK_SETTINGS_FILE) , _lastConnectionAttempt(0) { + addUpdateHandler([&](const String & originId) { reconfigureWiFiConnection(); }, false); +} + +void NetworkSettingsService::begin() { // We want the device to come up in opmode=0 (WIFI_OFF), when erasing the flash this is not the default. // If needed, we save opmode=0 before disabling persistence so the device boots with WiFi disabled in the future. if (WiFi.getMode() != WIFI_OFF) { @@ -21,10 +25,6 @@ NetworkSettingsService::NetworkSettingsService(AsyncWebServer * server, FS * fs, WiFi.onEvent(std::bind(&NetworkSettingsService::WiFiEvent, this, _1)); - addUpdateHandler([&](const String & originId) { reconfigureWiFiConnection(); }, false); -} - -void NetworkSettingsService::begin() { _fsPersistence.readFromFS(); reconfigureWiFiConnection(); } diff --git a/mock-api/package.json b/mock-api/package.json index 1bdb7584a..3c21e42d3 100644 --- a/mock-api/package.json +++ b/mock-api/package.json @@ -5,15 +5,14 @@ "author": "proddy", "main": "server.js", "scripts": { - "dev": "nodemon ./server.js localhost 3080", + "dev": "node --watch ./server.js localhost 3080", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "@msgpack/msgpack": "^2.8.0", "compression": "^1.7.4", "express": "^4.18.2", - "multer": "^1.4.5-lts.1", - "nodemon": "^3.0.1" + "multer": "^1.4.5-lts.1" }, "packageManager": "yarn@3.4.1" } diff --git a/mock-api/server.js b/mock-api/server.js index 18e871398..2b2d6e4ab 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -299,7 +299,7 @@ const SIGN_IN_ENDPOINT = REST_ENDPOINT_ROOT + 'signIn'; const GENERATE_TOKEN_ENDPOINT = REST_ENDPOINT_ROOT + 'generateToken'; let system_status = { - emsesp_version: '3.6.0-demo', + emsesp_version: '3.7.0-demo', esp_platform: 'ESP32', max_alloc_heap: 89, psram_size: 0, @@ -2627,7 +2627,7 @@ rest_server.get(EMSESP_BOARDPROFILE_ENDPOINT, (req, res) => { // EMS-ESP API specific const emsesp_info = { System: { - version: '3.6.0', + version: '3.7.0', uptime: '001+06:40:34.018', 'uptime (seconds)': 110434, freemem: 131, diff --git a/mock-api/yarn.lock b/mock-api/yarn.lock index 0c5dc99bb..e944f5392 100644 --- a/mock-api/yarn.lock +++ b/mock-api/yarn.lock @@ -5,13 +5,6 @@ __metadata: version: 6 cacheKey: 8 -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 - languageName: node - linkType: hard - "@msgpack/msgpack@npm:^2.8.0": version: 2.8.0 resolution: "@msgpack/msgpack@npm:2.8.0" @@ -19,40 +12,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" - dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 - languageName: node - linkType: hard - -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 - languageName: node - linkType: hard - -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"abbrev@npm:1, abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - "accepts@npm:~1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" @@ -63,53 +22,6 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.2.1 - resolution: "agentkeepalive@npm:4.2.1" - dependencies: - debug: ^4.1.0 - depd: ^1.1.2 - humanize-ms: ^1.2.1 - checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - "api@workspace:.": version: 0.0.0-use.local resolution: "api@workspace:." @@ -118,7 +30,6 @@ __metadata: compression: ^1.7.4 express: ^4.18.2 multer: ^1.4.5-lts.1 - nodemon: ^3.0.1 languageName: unknown linkType: soft @@ -129,23 +40,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -153,20 +47,6 @@ __metadata: languageName: node linkType: hard -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 - languageName: node - linkType: hard - "body-parser@npm:1.20.1": version: 1.20.1 resolution: "body-parser@npm:1.20.1" @@ -187,34 +67,6 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -245,32 +97,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" - 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 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 - languageName: node - linkType: hard - "call-bind@npm:^1.0.0": version: 1.0.2 resolution: "call-bind@npm:1.0.2" @@ -281,48 +107,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.2 - glob-parent: ~5.1.2 - is-binary-path: ~2.1.0 - is-glob: ~4.0.1 - normalize-path: ~3.0.0 - readdirp: ~3.6.0 - dependenciesMeta: - fsevents: - optional: true - checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -347,13 +131,6 @@ __metadata: languageName: node linkType: hard -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - "concat-stream@npm:^1.5.2": version: 1.6.2 resolution: "concat-stream@npm:1.6.2" @@ -366,13 +143,6 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -419,34 +189,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.3": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -454,13 +196,6 @@ __metadata: languageName: node linkType: hard -"depd@npm:^1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 - languageName: node - linkType: hard - "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -475,13 +210,6 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -489,29 +217,6 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - "escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" @@ -565,15 +270,6 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - "finalhandler@npm:1.2.0": version: 1.2.0 resolution: "finalhandler@npm:1.2.0" @@ -603,41 +299,6 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" - dependencies: - node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - "function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" @@ -645,80 +306,22 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - 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 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - "get-intrinsic@npm:^1.0.2": - version: 1.2.0 - resolution: "get-intrinsic@npm:1.2.0" + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" dependencies: function-bind: ^1.1.1 has: ^1.0.3 + has-proto: ^1.0.1 has-symbols: ^1.0.3 - checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f languageName: node linkType: hard -"glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - 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 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"glob@npm:^8.0.1": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^5.0.1 - once: ^1.3.0 - checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e languageName: node linkType: hard @@ -729,13 +332,6 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - "has@npm:^1.0.3": version: 1.0.3 resolution: "has@npm:1.0.3" @@ -745,13 +341,6 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - "http-errors@npm:2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -765,36 +354,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - "iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -804,67 +363,13 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"ignore-by-default@npm:^1.0.1": - version: 1.0.1 - resolution: "ignore-by-default@npm:1.0.1" - checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 - languageName: node - linkType: hard - "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -872,52 +377,6 @@ __metadata: languageName: node linkType: hard -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -925,53 +384,6 @@ __metadata: languageName: node linkType: hard -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lru-cache@npm:^7.7.1": - version: 7.14.1 - resolution: "lru-cache@npm:7.14.1" - checksum: d72c6713c6a6d86836a7a6523b3f1ac6764768cca47ec99341c3e76db06aacd4764620e5e2cda719a36848785a52a70e531822dc2b33fb071fa709683746c104 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" - 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 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c - languageName: node - linkType: hard - "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -1018,24 +430,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - "minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -1043,83 +437,6 @@ __metadata: languageName: node linkType: hard -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" - dependencies: - encoding: ^0.1.13 - minipass: ^3.1.6 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^4.0.0": - version: 4.0.3 - resolution: "minipass@npm:4.0.3" - checksum: a09f405e2f380ae7f6ee0cbb53b45c1fcc1b6c70fc3896f4d20649d92a10e61892c57bd9960a64cedf6c90b50022cb6c195905b515039c335b423202f99e6f18 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - "mkdirp@npm:^0.5.4": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -1131,15 +448,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -1147,14 +455,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -1176,94 +477,13 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 languageName: node linkType: hard -"node-gyp@npm:latest": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" - dependencies: - env-paths: ^2.2.0 - 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 - checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 - languageName: node - linkType: hard - -"nodemon@npm:^3.0.1": - version: 3.0.1 - resolution: "nodemon@npm:3.0.1" - 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: ^7.5.3 - simple-update-notifier: ^2.0.0 - supports-color: ^5.5.0 - touch: ^3.1.0 - undefsafe: ^2.0.5 - bin: - nodemon: bin/nodemon.js - checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - -"nopt@npm:~1.0.10": - version: 1.0.10 - resolution: "nopt@npm:1.0.10" - dependencies: - abbrev: 1 - bin: - nopt: ./bin/nopt.js - checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - "object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -1294,24 +514,6 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - "parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -1319,13 +521,6 @@ __metadata: languageName: node linkType: hard -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -1333,13 +528,6 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -1347,23 +535,6 @@ __metadata: languageName: node linkType: hard -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -1374,13 +545,6 @@ __metadata: languageName: node linkType: hard -"pstree.remy@npm:^1.1.8": - version: 1.1.8 - resolution: "pstree.remy@npm:1.1.8" - checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d - languageName: node - linkType: hard - "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -1424,44 +588,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.6.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: ^2.2.1 - checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -1469,42 +595,20 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": +"safer-buffer@npm:>= 2.1.2 < 3": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 languageName: node linkType: hard -"semver@npm:^7.3.5": - version: 7.3.8 - resolution: "semver@npm:7.3.8" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 - languageName: node - linkType: hard - -"semver@npm:^7.5.3": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 - languageName: node - linkType: hard - "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -1538,13 +642,6 @@ __metadata: languageName: node linkType: hard -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -1563,59 +660,6 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"simple-update-notifier@npm:^2.0.0": - version: 2.0.0 - resolution: "simple-update-notifier@npm:2.0.0" - dependencies: - semver: ^7.5.3 - checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: ^2.0.0 - smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 - languageName: node - linkType: hard - -"ssri@npm:^9.0.0": - version: 9.0.1 - resolution: "ssri@npm:9.0.1" - dependencies: - minipass: ^3.1.1 - checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -1630,26 +674,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -1659,47 +683,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"supports-color@npm:^5.5.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.13 - resolution: "tar@npm:6.1.13" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^4.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -1707,17 +690,6 @@ __metadata: languageName: node linkType: hard -"touch@npm:^3.1.0": - version: 3.1.0 - resolution: "touch@npm:3.1.0" - dependencies: - nopt: ~1.0.10 - bin: - nodetouch: ./bin/nodetouch.js - checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 - languageName: node - linkType: hard - "type-is@npm:^1.6.4, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -1735,31 +707,6 @@ __metadata: languageName: node linkType: hard -"undefsafe@npm:^2.0.5": - version: 2.0.5 - resolution: "undefsafe@npm:2.0.5" - checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc - languageName: node - linkType: hard - -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - "unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" @@ -1767,7 +714,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 @@ -1788,43 +735,9 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - "xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a languageName: node linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard diff --git a/pio_local.ini_example b/pio_local.ini_example index 1e70e81db..5180d1c53 100644 --- a/pio_local.ini_example +++ b/pio_local.ini_example @@ -18,6 +18,7 @@ default_envs = esp32_4M ; default_envs = esp32_16M ; default_envs = lolin_s3 ; default_envs = standalone +; default_envs = debug [env:esp32_4M] ; if using OTA enter your details below @@ -33,6 +34,8 @@ upload_port = /dev/ttyUSB* ; override arduino espressif core platform = espressif32 ; take latest ; platform = espressif32@5.3.0 +; platform = espressif32@6.3.2 +; platform = espressif32@6.4.0 extra_scripts = pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time @@ -52,13 +55,21 @@ extra_scripts = ; options for debugging are: EMSESP_DEBUG EMSESP_UART_DEBUG EMSESP_DEBUG_SENSOR [env:debug] board = esp32dev +framework = arduino platform = espressif32 board_build.partitions = esp32_partition_debug.csv +; board_build.partitions = esp32_partition_4M.csv +board_upload.flash_size = 4MB +board_build.filesystem = littlefs upload_protocol = esptool build_type = debug monitor_raw = no monitor_filters = esp32_exception_decoder debug_tool = esp-prog debug_init_break = tbreak setup -build_flags = ${factory_settings.build_flags} -DONEWIRE_CRC16=0 -DNO_GLOBAL_ARDUINOOTA -DARDUINOJSON_ENABLE_STD_STRING=1 -DESP32=1 -DARDUINO_ARCH_ESP32=1 -extra_scripts = pre:scripts/build_interface.py +build_flags = ${factory_settings.build_flags} -DEMSESP_EN_ONLY -DCORE_DEBUG_LEVEL=5 -DONEWIRE_CRC16=0 -DNO_GLOBAL_ARDUINOOTA -DARDUINOJSON_ENABLE_STD_STRING=1 -DESP32=1 -DARDUINO_ARCH_ESP32=1 +upload_port = /dev/ttyUSB0 +extra_scripts = + ; pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time + scripts/rename_fw.py + ; post:scripts/app-tls-size.py diff --git a/platformio.ini b/platformio.ini index 9d7e062b4..3ba1c8891 100644 --- a/platformio.ini +++ b/platformio.ini @@ -39,7 +39,7 @@ unbuild_flags = ${common.core_unbuild_flags} [espressi32_base] -platform = espressif32@6.3.2 +platform = espressif32 framework = arduino build_flags = ${common.build_flags} build_unflags = ${common.unbuild_flags} @@ -65,6 +65,8 @@ check_flags = ; the Web interface is built seperately [env:ci] extends = espressi32_base +; stay on platform 6.3.2 until heap issue is solved +platform = espressif32@6.3.2 extra_scripts = scripts/rename_fw.py board = esp32dev board_build.partitions = esp32_partition_4M.csv @@ -85,6 +87,8 @@ build_unflags = ${common.unbuild_flags} [env:esp32_4M] extends = espressi32_base +; stay on platform 6.3.2 until heap issue is solved +platform = espressif32@6.3.2 board = esp32dev board_upload.flash_size = 4MB board_build.partitions = esp32_partition_4M.csv @@ -92,6 +96,8 @@ build_flags = ${common.build_flags} -Os [env:esp32_4Mplus] extends = espressi32_base +; stay on platform 6.3.2 until heap issue is solved +platform = espressif32@6.3.2 board = esp32dev board_upload.flash_size = 4MB board_build.partitions = esp32_asym_partition_4M.csv @@ -99,6 +105,8 @@ build_flags = ${common.build_flags} [env:esp32_16M] extends = espressi32_base +; stay on platform 6.3.2 until heap issue is solved +platform = espressif32@6.3.2 board = esp32dev board_upload.flash_size = 16MB board_build.partitions = esp32_partition_16M.csv @@ -143,7 +151,7 @@ platform = native build_flags = -DARDUINOJSON_ENABLE_STD_STRING=1 -DARDUINOJSON_ENABLE_PROGMEM=1 -DARDUINOJSON_ENABLE_ARDUINO_STRING -DARDUINOJSON_USE_DOUBLE=0 -DEMSESP_DEBUG -DEMSESP_STANDALONE -DEMSESP_TEST -D__linux__ - -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.6.0-dev\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\" + -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.7.0-dev\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\" -lpthread -std=gnu++11 -Og -ggdb build_src_flags = diff --git a/scripts/api_test.http b/scripts/api_test.http index 1ced2e06f..6a0baa97e 100644 --- a/scripts/api_test.http +++ b/scripts/api_test.http @@ -1,17 +1,21 @@ # testing EMS-ESP API -# use with https://marketplace.visualstudio.com/items?itemName=humao.rest-client +# use with "REST Client" extension in Visual Studio Code +# https://marketplace.visualstudio.com/items?itemName=humao.rest-client + +@host = http://ems-esp.local +@host_dev = http://ems-esp2.local @token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiYWRtaW4iOnRydWV9.2bHpWya2C7Q12WjNUBD6_7N3RCD7CMl-EGhyQVzFdDg -GET http://ems-esp.local/api/system/info +GET {{host}}/api/system/info ### -GET http://ems-esp.local/api/thermostat/seltemp +GET {{host}}/api/thermostat/seltemp ### -POST http://ems-esp.local/api/thermostat/seltemp +POST {{host}}/api/thermostat/seltemp Content-Type: application/json Authorization: Bearer {{token}} @@ -21,7 +25,7 @@ Authorization: Bearer {{token}} ### -POST http://ems-esp.local/api/thermostat +POST {{host}}/api/thermostat Content-Type: application/json Authorization: Bearer {{token}} @@ -32,12 +36,61 @@ Authorization: Bearer {{token}} ### -POST http://10.10.10.134/api +POST {{host}}/api Content-Type: application/json -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiYWRtaW4iOnRydWV9.2bHpWya2C7Q12WjNUBD6_7N3RCD7CMl-EGhyQVzFdDg +Authorization: Bearer {{token}} { "device" : "boiler", "entity" : "wwtapactivated", "value" : "on" -} \ No newline at end of file +} + +### + +GET {{host}}/api/system/restart +Authorization: Bearer {{token}} + +### + +GET {{host}}/api/boiler/coldshot +Authorization: Bearer {{token}} + +### + +GET {{host}}/api/temperaturesensor/info + +### + +# +# Test on dev +# + +GET {{host_dev}}/api/system/info + +# Run a test. EMS-ESP must be compiled with -DEMSESP_TEST +# Use this to load up a dummy thermostat and boiler with data + +### + +GET {{host_dev}}/api?device=system&cmd=test&data=general + +### + +GET {{host_dev}}/api/boiler/info + +### +GET {{host_dev}}/api/boiler/values + +### + +GET {{host_dev}}/api/analogsensor/info + +### + +GET {{host_dev}}/api/boiler/coldshot +Authorization: Bearer {{token}} + +### +GET {{host_dev}}/api/system/commands + diff --git a/sonar-project.properties b/sonar-project.properties index d06f4752a..c2ed8a4d3 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,7 +1,7 @@ sonar.organization=emsesp sonar.projectKey=emsesp_EMS-ESP32 sonar.projectName=EMS-ESP32 -sonar.projectVersion=3.6.0 +sonar.projectVersion=3.7.0 sonar.sources=./src sonar.cfamily.build-wrapper-output=build_wrapper_output_directory sonar.sourceEncoding=UTF-8 diff --git a/src/analogsensor.cpp b/src/analogsensor.cpp index 37a74113b..cc0f19ffb 100644 --- a/src/analogsensor.cpp +++ b/src/analogsensor.cpp @@ -260,7 +260,7 @@ void AnalogSensor::measure() { for (auto & sensor : sensors_) { if (sensor.type() == AnalogType::DIGITAL_IN || sensor.type() == AnalogType::COUNTER || sensor.type() == AnalogType::TIMER || sensor.type() == AnalogType::RATE) { - auto old_value = sensor.value(); // remember current value before reading + auto old_value = sensor.value(); // remember current value before reading auto current_reading = digitalRead(sensor.gpio()); if (sensor.poll_ != current_reading) { // check for pinchange sensor.polltime_ = uuid::get_uptime(); // remember time of pinchange @@ -274,7 +274,7 @@ void AnalogSensor::measure() { } else if (!sensor.poll_) { // falling edge if (sensor.type() == AnalogType::COUNTER) { sensor.set_value(old_value + sensor.factor()); - } else if (sensor.type() == AnalogType::RATE) { // dafault uom: Hz (1/sec) with factor 1 + } else if (sensor.type() == AnalogType::RATE) { // dafault uom: Hz (1/sec) with factor 1 sensor.set_value(sensor.factor() * 1000 / (sensor.polltime_ - sensor.last_polltime_)); } else if (sensor.type() == AnalogType::TIMER) { // default seconds with factor 1 sensor.set_value(sensor.factor() * (sensor.polltime_ - sensor.last_polltime_) / 1000); @@ -685,7 +685,7 @@ bool AnalogSensor::command_info(const char * value, const int8_t id, JsonObject dataSensor["value"] = sensor.value(); } else if (id == 0) { // output values command output[sensor.name()] = sensor.value(); - } else { // if someone wants gpio numbers + } else { // if someone wants gpio numbers char gpio_str[9]; snprintf(gpio_str, sizeof(gpio_str), "gpio_%02d", sensor.gpio()); output[gpio_str] = sensor.value(); diff --git a/src/command.cpp b/src/command.cpp index 3bb89fd69..0ef48306e 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -46,7 +46,7 @@ uint8_t Command::process(const char * path, const bool is_admin, const JsonObjec if (!strncmp(path, Mqtt::base().c_str(), Mqtt::base().length())) { char new_path[Mqtt::MQTT_TOPIC_MAX_SIZE]; strlcpy(new_path, path, sizeof(new_path)); - p.parse(new_path + Mqtt::base().length() + 1); // re-parse the stripped path + p.parse(new_path + Mqtt::base().length() + 1); // re-parse the stripped path } else { return message(CommandRet::ERROR, "unrecognized path", output); // error } @@ -194,7 +194,7 @@ uint8_t Command::process(const char * path, const bool is_admin, const JsonObjec } else if (data.isNull()) { return_code = Command::call(device_type, command_p, "", is_admin, id_n, output); // empty, will do a query instead } else { - return message(CommandRet::ERROR, "cannot parse command", output); // can't process + return message(CommandRet::ERROR, "cannot parse command", output); // can't process } return return_code; } @@ -301,9 +301,14 @@ uint8_t Command::call(const uint8_t device_type, const char * cmd, const char * auto cf = find_command(device_type, device_id, cmd); // check if its a call to and end-point to a device - // except for system commands as this is a special device without any queryable entities (device values) - if ((device_type > EMSdevice::DeviceType::SYSTEM) && (!value || !strlen(value))) { - if (!cf || !cf->cmdfunction_json_) { + // this is used to fetch the attributes of the device entity, or call a command directly + bool single_command = (!value || !strlen(value)); + if (single_command) { + // exception 1: anything that is from System + // exception 2: boiler coldshot command + bool get_attributes = (!cf || !cf->cmdfunction_json_) && (device_type > EMSdevice::DeviceType::SYSTEM) && (strcmp(cmd, F_(coldshot)) != 0); + + if (get_attributes) { LOG_DEBUG("Calling %s command '%s' to retrieve attributes", dname, cmd); return EMSESP::get_device_value_info(output, cmd, id, device_type) ? CommandRet::OK : CommandRet::ERROR; // entity = cmd } @@ -344,7 +349,7 @@ uint8_t Command::call(const uint8_t device_type, const char * cmd, const char * // check if read-only. This also checks for valid tags (e.g. heating circuits) if (cf->cmdfunction_) { - if (EMSESP::cmd_is_readonly(device_type, device_id, cmd, id)) { + if (!single_command && EMSESP::cmd_is_readonly(device_type, device_id, cmd, id)) { return_code = CommandRet::INVALID; // readonly or invalid hc } else { return_code = ((cf->cmdfunction_)(value, id)) ? CommandRet::OK : CommandRet::ERROR; @@ -593,7 +598,7 @@ void Command::show_devices(uuid::console::Shell & shell) { // output list of all commands to console // calls show with verbose mode set void Command::show_all(uuid::console::Shell & shell) { - shell.println("Available commands (*=do not need authorization): "); + shell.println("Available commands (*=authorization not required): "); // show system first shell.print(COLOR_BOLD_ON); diff --git a/src/command.h b/src/command.h index 3b04242eb..f0b54bbf2 100644 --- a/src/command.h +++ b/src/command.h @@ -56,7 +56,7 @@ class Command { struct CmdFunction { uint8_t device_type_; // DeviceType:: uint8_t device_id_; - uint8_t flags_; // mqtt flags for command subscriptions + uint8_t flags_; // mqtt flags for command subscriptions const char * cmd_; cmd_function_p cmdfunction_; cmd_json_function_p cmdfunction_json_; diff --git a/src/console.cpp b/src/console.cpp index 4fef7d7b9..dfc0f5792 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -137,6 +137,9 @@ static void setup_commands(std::shared_ptr & commands) { Test::run_test(shell, arguments[0].c_str(), arguments[1].c_str()); } }); + commands->add_command(ShellContext::MAIN, CommandFlags::USER, string_vector{"t"}, [=](Shell & shell, const std::vector & arguments) { + Test::run_test(shell, "default"); + }); #endif commands->add_command(ShellContext::MAIN, CommandFlags::USER, string_vector{F_(su)}, [=](Shell & shell, const std::vector & arguments) { @@ -419,7 +422,6 @@ static void setup_commands(std::shared_ptr & commands) { to_app(shell).send_read_request(type_id, device_id, 0, EMS_MAX_TELEGRAM_LENGTH, true); } to_app(shell).set_read_id(type_id); - }); commands->add_command(ShellContext::MAIN, @@ -433,11 +435,11 @@ static void setup_commands(std::shared_ptr & commands) { if (!arguments.empty()) { // get raw/pretty if (arguments[0] == (F_(raw))) { - to_app(shell).watch(to_app(shell).WATCH_RAW); // raw + to_app(shell).watch(to_app(shell).WATCH_RAW); // raw } else if (arguments[0] == (FL_(on)[0])) { - to_app(shell).watch(to_app(shell).WATCH_ON); // on + to_app(shell).watch(to_app(shell).WATCH_ON); // on } else if (arguments[0] == (FL_(off)[0])) { - to_app(shell).watch(to_app(shell).WATCH_OFF); // off + to_app(shell).watch(to_app(shell).WATCH_OFF); // off } else if (arguments[0] == (FL_(unknown)[0])) { to_app(shell).watch(to_app(shell).WATCH_UNKNOWN); // unknown watch_id = WATCH_ID_NONE; @@ -445,7 +447,7 @@ static void setup_commands(std::shared_ptr & commands) { watch_id = Helpers::hextoint(arguments[0].c_str()); if (watch_id > 0 && ((to_app(shell).watch() == to_app(shell).WATCH_OFF) || (to_app(shell).watch() == to_app(shell).WATCH_UNKNOWN))) { - to_app(shell).watch(to_app(shell).WATCH_ON); // on + to_app(shell).watch(to_app(shell).WATCH_ON); // on } else if (watch_id == 0) { to_app(shell).watch(to_app(shell).WATCH_OFF); // off return; @@ -480,7 +482,7 @@ static void setup_commands(std::shared_ptr & commands) { } else if (watch == to_app(shell).WATCH_RAW) { shell.printfln("Watching incoming telegrams, displayed as raw bytes"); // WATCH_RAW } else { - shell.printfln("Watching unknown telegrams"); // WATCH_UNKNOWN + shell.printfln("Watching unknown telegrams"); // WATCH_UNKNOWN } watch_id = to_app(shell).watch_id(); @@ -623,7 +625,7 @@ void EMSESPShell::stopped() { void EMSESPShell::display_banner() { println(); printfln("┌────────────────────────────────────────┐"); - printfln("│ %sEMS-ESP version %-12s%s │", COLOR_BOLD_ON, EMSESP_APP_VERSION, COLOR_BOLD_OFF); + printfln("│ %sEMS-ESP version %-12s%s │", COLOR_BOLD_ON, EMSESP_APP_VERSION, COLOR_BOLD_OFF); printfln("│ %s%shttps://github.com/emsesp/EMS-ESP32%s │", COLOR_BRIGHT_GREEN, COLOR_UNDERLINE, COLOR_RESET); printfln("│ │"); printfln("│ type %shelp%s to show available commands │", COLOR_UNDERLINE, COLOR_RESET); diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 028d84d17..62a3f5be6 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -980,13 +980,13 @@ void Boiler::process_UBASettingsWW(std::shared_ptr telegram) { // Boiler(0x08) -> Me(0x0B), UBAParameterWW(0x33), data: 08 FF 30 FB FF 28 FF 07 46 00 00 void Boiler::process_UBAParameterWW(std::shared_ptr telegram) { // has_bitupdate(telegram, wwEquipt_,0,3); // 8=boiler has ww - has_update(telegram, wwActivated_, 1); // 0xFF means on + has_update(telegram, wwActivated_, 1); // 0xFF means on has_update(telegram, wwSelTemp_, 2); - has_update(telegram, wwHystOn_, 3); // Hyst on (default -5) - has_update(telegram, wwHystOff_, 4); // Hyst off (default -1) - has_update(telegram, wwFlowTempOffset_, 5); // default 40 - has_update(telegram, wwCircPump_, 6); // 0xFF means on - has_update(telegram, wwCircMode_, 7); // 0=off, 1=1x3min 6=6x3min 7=continuous + has_update(telegram, wwHystOn_, 3); // Hyst on (default -5) + has_update(telegram, wwHystOff_, 4); // Hyst off (default -1) + has_update(telegram, wwFlowTempOffset_, 5); // default 40 + has_update(telegram, wwCircPump_, 6); // 0xFF means on + has_update(telegram, wwCircMode_, 7); // 0=off, 1=1x3min 6=6x3min 7=continuous has_update(telegram, wwDisinfectionTemp_, 8); has_bitupdate(telegram, wwChargeType_, 10, 0); // 0 = charge pump, 0xff = 3-way valve @@ -1089,7 +1089,7 @@ void Boiler::process_UBAMonitorSlow(std::shared_ptr telegram) { has_update(telegram, outdoorTemp_, 0); has_update(telegram, boilTemp_, 2); has_update(telegram, exhaustTemp_, 4); - has_update(telegram, switchTemp_, 25); // only if there is a mixer module present + has_update(telegram, switchTemp_, 25); // only if there is a mixer module present has_update(telegram, heatingPumpMod_, 9); has_update(telegram, burnStarts_, 10, 3); // force to 3 bytes has_update(telegram, burnWorkMin_, 13, 3); // force to 3 bytes @@ -1414,7 +1414,7 @@ void Boiler::process_UBAErrorMessage(std::shared_ptr telegram) { // data: displaycode(2), errornumber(2), year, month, hour, day, minute, duration(2), src-addr if (telegram->message_data[4] & 0x80) { // valid date - static uint32_t lastCodeDate_ = 0; // last code date + static uint32_t lastCodeDate_ = 0; // last code date char code[3] = {0}; uint16_t codeNo = EMS_VALUE_SHORT_NOTSET; code[0] = telegram->message_data[0]; @@ -1530,12 +1530,12 @@ void Boiler::process_HpSilentMode(std::shared_ptr telegram) { has_update(telegram, wwAltOpPrioWw_, 3); // range 30-120 minutes on Buderus WSW196i has_update(telegram, silentMode_, 10); // enum off-auto-on has_update(telegram, minTempSilent_, 11); - has_update(telegram, hpHystHeat_, 37); // is / 5 - has_update(telegram, hpHystCool_, 35); // is / 5, maybe offset swapped with pool - has_update(telegram, hpHystPool_, 33); // is / 5 + has_update(telegram, hpHystHeat_, 37); // is / 5 + has_update(telegram, hpHystCool_, 35); // is / 5, maybe offset swapped with pool + has_update(telegram, hpHystPool_, 33); // is / 5 has_update(telegram, hpCircPumpWw_, 46); - has_update(telegram, silentFrom_, 52); // in steps of 15 min - has_update(telegram, silentTo_, 53); // in steps of 15 min + has_update(telegram, silentFrom_, 52); // in steps of 15 min + has_update(telegram, silentTo_, 53); // in steps of 15 min } // Boiler(0x08) -B-> All(0x00), ?(0x0488), data: 8E 00 00 00 00 00 01 03 @@ -1556,7 +1556,7 @@ void Boiler::process_HpAdditionalHeater(std::shared_ptr telegram has_update(telegram, manDefrost_, 0); // off/on has_update(telegram, auxHeaterOnly_, 1); has_update(telegram, auxHeaterOff_, 2); - has_update(telegram, auxHeatMode_, 4); // eco/comfort + has_update(telegram, auxHeatMode_, 4); // eco/comfort has_update(telegram, tempParMode_, 5); has_update(telegram, auxMaxLimit_, 14); // is * 10 has_update(telegram, auxLimitStart_, 15); // is * 10 @@ -2131,6 +2131,7 @@ bool Boiler::set_tapwarmwater_activated(const char * value, const int8_t id) { wwTapActivated_ = 1; } + // LOG_INFO("calling EMS_TYPE_UBAFunctionTest with %d", v); write_command(EMS_TYPE_UBAFunctionTest, 0, message_data, sizeof(message_data), 0); return true; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 1b5a26b2e..78b175cc4 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -87,9 +87,9 @@ class Boiler : public EMSdevice { uint32_t wwWorkM_; // DHW minutes int8_t wwHystOn_; int8_t wwHystOff_; - uint8_t wwTapActivated_; // maintenance-mode to switch DHW off - uint16_t wwMixerTemp_; // mixing temperature - uint16_t wwCylMiddleTemp_; // Cyl middle temperature (TS3) + uint8_t wwTapActivated_; // maintenance-mode to switch DHW off + uint16_t wwMixerTemp_; // mixing temperature + uint16_t wwCylMiddleTemp_; // Cyl middle temperature (TS3) uint16_t wwSolarTemp_; uint8_t wwAlternatingOper_; // alternating operation on/off uint8_t wwAltOpPrioHeat_; // alternating operation, prioritize heat time diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index b0ef46318..210b0d2f1 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -170,7 +170,7 @@ void Mixer::process_MMPLUSStatusMessage_HC(std::shared_ptr teleg void Mixer::process_MMPLUSStatusMessage_WWC(std::shared_ptr telegram) { has_update(telegram, flowTempHc_, 0); // is * 10 has_bitupdate(telegram, pumpStatus_, 2, 0); - has_update(telegram, status_, 11); // temp status + has_update(telegram, status_, 11); // temp status } // Mixer IPM - 0x010C @@ -220,7 +220,7 @@ void Mixer::process_MMStatusMessage(std::shared_ptr telegram) { has_update(telegram, flowTempHc_, 1); // is * 10 has_bitupdate(telegram, pumpStatus_, 3, 2); // is 0 or 0x64 (100%), check only bit 2 has_update(telegram, flowSetTemp_, 0); - has_update(telegram, status_, 4); // valve status -100 to 100 + has_update(telegram, status_, 4); // valve status -100 to 100 } /* diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 73f9de866..53e1547fc 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -685,9 +685,9 @@ void Solar::process_SM100Monitor(std::shared_ptr telegram) { has_update(telegram, cylBottomTemp2_, 16); // is *10 - TS5: Temperature sensor 2 cylinder, bottom, or swimming pool has_update(telegram, heatExchangerTemp_, 20); // is *10 - TS6: Heat exchanger temperature sensor - has_update(telegram, collector2Temp_, 6); // is *10 - TS7: Temperature sensor for collector array 2 - has_update(telegram, cylMiddleTemp_, 8); // is *10 - TS14: cylinder middle temperature - has_update(telegram, retHeatAssist_, 10); // is *10 - TS15: return temperature heating assistance + has_update(telegram, collector2Temp_, 6); // is *10 - TS7: Temperature sensor for collector array 2 + has_update(telegram, cylMiddleTemp_, 8); // is *10 - TS14: cylinder middle temperature + has_update(telegram, retHeatAssist_, 10); // is *10 - TS15: return temperature heating assistance } // SM100wwTemperature - 0x07D6 @@ -749,8 +749,8 @@ void Solar::process_SM100Monitor2(std::shared_ptr telegram) { has_update(telegram->read_value(heatCntFlowTemp_, 0)); // is *10 has_update(telegram->read_value(heatCntRetTemp_, 2)); // is *10 has_update(telegram->read_value(heatCnt_, 12)); - has_update(telegram->read_value(swapRetTemp_, 6)); // is *10 - has_update(telegram->read_value(swapFlowTemp_, 8)); // is *10 + has_update(telegram->read_value(swapRetTemp_, 6)); // is *10 + has_update(telegram->read_value(swapFlowTemp_, 8)); // is *10 } #pragma GCC diagnostic push @@ -879,7 +879,7 @@ void Solar::process_ISM1StatusMessage(std::shared_ptr telegram) has_update(telegram, collectorTemp_, 4); // Collector Temperature has_update(telegram, cylBottomTemp_, 6); // Temperature Bottom of Solar Boiler cyl uint16_t Wh = energyLastHour_ / 10; - telegram->read_value(Wh, 2); // Solar Energy produced in last hour only ushort, is not * 10 + telegram->read_value(Wh, 2); // Solar Energy produced in last hour only ushort, is not * 10 if (energyLastHour_ != Wh * 10) { energyLastHour_ = Wh * 10; has_update(&energyLastHour_); diff --git a/src/devices/solar.h b/src/devices/solar.h index 033cd6519..16bb379bf 100644 --- a/src/devices/solar.h +++ b/src/devices/solar.h @@ -58,9 +58,9 @@ class Solar : public EMSdevice { uint32_t energyLastHour_; uint32_t energyToday_; uint32_t energyTotal_; - uint32_t pumpWorkTime_; // Total solar pump operating time - uint32_t pump2WorkTime_; // Total solar pump 2 operating time - uint32_t m1WorkTime_; // differential control work time + uint32_t pumpWorkTime_; // Total solar pump operating time + uint32_t pump2WorkTime_; // Total solar pump 2 operating time + uint32_t m1WorkTime_; // differential control work time uint8_t cylHeated_; uint8_t collectorShutdown_; // Collector shutdown on/off diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 786b78193..7ff89a49f 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -661,8 +661,8 @@ void Thermostat::process_RC20Set_2(std::shared_ptr telegram) { return; } has_update(telegram, hc->heatingtype, 0); - has_update(telegram, hc->nighttemp, 1); // is * 2, - has_update(telegram, hc->daytemp, 2); // is * 2, + has_update(telegram, hc->nighttemp, 1); // is * 2, + has_update(telegram, hc->daytemp, 2); // is * 2, has_update(telegram, hc->mode, 3); has_enumupdate(telegram, hc->program, 11, 1); // 1 .. 9 predefined programs has_update(telegram, hc->tempautotemp, 13); @@ -798,8 +798,8 @@ void Thermostat::process_RC35wwSettings(std::shared_ptr telegram has_update(telegram, wwDisinfecting_, 4); // 0-off, 0xFF on has_update(telegram, wwDisinfectDay_, 5); // 0-6 Day of week, 7 every day has_update(telegram, wwDisinfectHour_, 6); - has_update(telegram, wwMaxTemp_, 8); // Limiter 60 degrees - has_update(telegram, wwOneTimeKey_, 9); // 0-off, 0xFF on + has_update(telegram, wwMaxTemp_, 8); // Limiter 60 degrees + has_update(telegram, wwOneTimeKey_, 9); // 0-off, 0xFF on } // Settings WW 0x3A - RC30 @@ -951,7 +951,7 @@ void Thermostat::process_RC300Monitor(std::shared_ptr telegram) return; } - has_update(telegram, hc->roomTemp, 0); // is * 10 + has_update(telegram, hc->roomTemp, 0); // is * 10 has_bitupdate(telegram, hc->modetype, 10, 1); has_bitupdate(telegram, hc->mode, 10, 0); // bit 1, mode (auto=1 or manual=0) @@ -1013,8 +1013,8 @@ void Thermostat::process_RC300Set(std::shared_ptr telegram) { } has_update(hc->tempautotemp, tat); - has_update(telegram, hc->manualtemp, 10); // is * 2 - has_enumupdate(telegram, hc->program, 11, 1); // timer program 1 or 2 + has_update(telegram, hc->manualtemp, 10); // is * 2 + has_enumupdate(telegram, hc->program, 11, 1); // timer program 1 or 2 has_enumupdate(telegram, hc->reducemode, 5, 1); // 1-outdoor temp threshold, 2-room temp threshold, 3-reduced mode has_update(telegram, hc->reducetemp, 9); @@ -1097,7 +1097,7 @@ void Thermostat::process_RC300WWtemp(std::shared_ptr telegram) { // RC300WWmode(0x2F5), data: 01 FF 04 00 00 00 08 05 00 08 04 00 00 00 00 00 00 00 00 00 01 void Thermostat::process_RC300WWmode(std::shared_ptr telegram) { // circulation pump see: https://github.com/Th3M3/buderus_ems-wiki/blob/master/Einstellungen%20der%20Bedieneinheit%20RC310.md - has_update(telegram, wwCircPump_, 1); // FF=off, 0=on ? + has_update(telegram, wwCircPump_, 1); // FF=off, 0=on ? has_update(telegram, wwMode_, 2); // 0=off, 1=low, 2=high, 3=auto, 4=own prog has_update(telegram, wwCircMode_, 3); // 0=off, 1=on, 2=auto, 4=own? @@ -1207,11 +1207,11 @@ void Thermostat::process_RC30Set(std::shared_ptr telegram) { has_update(telegram, mixingvalves_, 17); // Number of Mixing Valves: (0x00=0, 0x01=1, 0x02=2) has_update(telegram, brightness_, 18); // Screen brightness 0F=dark F1=light has_update(telegram, hc->mode, 23); - has_update(telegram, hc->nofrosttemp, 24); // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius) - has_update(telegram, heatingpid_, 25); // PID setting 00=1 01=2 02=3 - has_update(telegram, preheating_, 26); // Preheating in the clock program: (0x00 = off, 0xFF = on) - has_update(telegram, hc->tempautotemp, 28); // is * 2 - has_update(telegram, hc->manualtemp, 29); // manualtemp is * 2 + has_update(telegram, hc->nofrosttemp, 24); // Set Temperature when mode is Off / 10 (e.g.: 0x0F = 7.5 degrees Celsius) + has_update(telegram, heatingpid_, 25); // PID setting 00=1 01=2 02=3 + has_update(telegram, preheating_, 26); // Preheating in the clock program: (0x00 = off, 0xFF = on) + has_update(telegram, hc->tempautotemp, 28); // is * 2 + has_update(telegram, hc->manualtemp, 29); // manualtemp is * 2 } // type 0x40 (HC1) - for reading the operating mode from the RC30 thermostat (0x10) @@ -1274,13 +1274,13 @@ void Thermostat::process_RC35Set(std::shared_ptr telegram) { return; } - has_update(telegram, hc->heatingtype, 0); // 0- off, 1-radiator, 2-convector, 3-floor - has_update(telegram, hc->nighttemp, 1); // is * 2 - has_update(telegram, hc->daytemp, 2); // is * 2 - has_update(telegram, hc->holidaytemp, 3); // is * 2 - has_update(telegram, hc->roominfluence, 4); // is * 1 - has_update(telegram, hc->offsettemp, 6); // is * 2 - has_update(telegram, hc->mode, 7); // night, day, auto + has_update(telegram, hc->heatingtype, 0); // 0- off, 1-radiator, 2-convector, 3-floor + has_update(telegram, hc->nighttemp, 1); // is * 2 + has_update(telegram, hc->daytemp, 2); // is * 2 + has_update(telegram, hc->holidaytemp, 3); // is * 2 + has_update(telegram, hc->roominfluence, 4); // is * 1 + has_update(telegram, hc->offsettemp, 6); // is * 2 + has_update(telegram, hc->mode, 7); // night, day, auto has_update(telegram, hc->wwprio, 21); // 0xFF for on has_update(telegram, hc->summertemp, 22); // is * 1 @@ -1291,10 +1291,10 @@ void Thermostat::process_RC35Set(std::shared_ptr telegram) { has_update(telegram, hc->control, 26); // 0-off, 1-RC20 (remote), 2-RC35 has_update(telegram, hc->controlmode, 33); // 0-outdoortemp, 1-roomtemp has_update(telegram, hc->tempautotemp, 37); - has_update(telegram, hc->noreducetemp, 38); // outdoor temperature for no reduce - has_update(telegram, hc->reducetemp, 39); // temperature for off/reduce - has_update(telegram, hc->vacreducetemp, 40); // temperature for off/reduce in vacations - has_update(telegram, hc->vacreducemode, 41); // vacations reduce mode + has_update(telegram, hc->noreducetemp, 38); // outdoor temperature for no reduce + has_update(telegram, hc->reducetemp, 39); // temperature for off/reduce + has_update(telegram, hc->vacreducetemp, 40); // temperature for off/reduce in vacations + has_update(telegram, hc->vacreducemode, 41); // vacations reduce mode has_update(telegram, hc->minflowtemp, 16); // RC35 stores values for floorheating in different position @@ -1416,7 +1416,7 @@ void Thermostat::process_RCTime(std::shared_ptr telegram) { bool ivtclock = (telegram->message_data[0] & 0x80) == 0x80; // dont sync ivt-clock, #439 bool junkersclock = model() == EMSdevice::EMS_DEVICE_FLAG_JUNKERS; - time_t ttime = mktime(tm_); // thermostat time + time_t ttime = mktime(tm_); // thermostat time // correct thermostat clock if we have valid ntp time, and could write the command if (!ivtclock && !junkersclock && tset_ && EMSESP::system_.ntp_connected() && !EMSESP::system_.readonly_mode() && has_command(&dateTime_)) { double difference = difftime(now, ttime); @@ -1426,7 +1426,7 @@ void Thermostat::process_RCTime(std::shared_ptr telegram) { } } #ifndef EMSESP_STANDALONE - if (!tset_ && tm_->tm_year > 110) { // emsesp clock not set, but thermostat clock + if (!tset_ && tm_->tm_year > 110) { // emsesp clock not set, but thermostat clock if (ivtclock) { tm_->tm_isdst = -1; // determine dst ttime = mktime(tm_); // thermostat time @@ -2302,7 +2302,7 @@ bool Thermostat::set_datetime(const char * value, const int8_t id) { data[6] = (tm_->tm_wday + 6) % 7; // Bosch counts from Mo, time from Su data[7] = tm_->tm_isdst + 2; // set DST and flag for ext. clock if (model() == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { - data[6]++; // Junkers use 1-7; + data[6]++; // Junkers use 1-7; data[7] = 0; } } else if (dt.length() == 23) { @@ -2500,7 +2500,7 @@ bool Thermostat::set_mode_n(const uint8_t mode, const uint8_t hc_num) { if (mode == HeatingCircuit::Mode::AUTO) { set_mode_value = 0xFF; // special value for auto } else { - set_mode_value = 0; // everything else, like manual/day etc.. + set_mode_value = 0; // everything else, like manual/day etc.. } break; case EMSdevice::EMS_DEVICE_FLAG_JUNKERS: @@ -3121,7 +3121,7 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co offset = 0x0A; // manual offset break; case HeatingCircuit::Mode::TEMPAUTO: - offset = 0x08; // auto offset + offset = 0x08; // auto offset if (temperature == -1) { factor = 1; // to write 0xFF } diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index d98c100f5..a28d882de 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -256,9 +256,9 @@ class Thermostat : public EMSdevice { static constexpr uint16_t EMS_TYPE_RCOutdoorTemp = 0xA3; // is an automatic thermostat broadcast, outdoor external temp // Type offsets - static constexpr uint8_t EMS_OFFSET_RC10StatusMessage_setpoint = 1; // setpoint temp - static constexpr uint8_t EMS_OFFSET_RC10StatusMessage_curr = 2; // current temp - static constexpr uint8_t EMS_OFFSET_RC10Set_temp = 4; // position of thermostat setpoint temperature + static constexpr uint8_t EMS_OFFSET_RC10StatusMessage_setpoint = 1; // setpoint temp + static constexpr uint8_t EMS_OFFSET_RC10StatusMessage_curr = 2; // current temp + static constexpr uint8_t EMS_OFFSET_RC10Set_temp = 4; // position of thermostat setpoint temperature static constexpr uint8_t EMS_OFFSET_RC20StatusMessage_setpoint = 1; // setpoint temp static constexpr uint8_t EMS_OFFSET_RC20StatusMessage_curr = 2; // current temp @@ -267,9 +267,9 @@ class Thermostat : public EMSdevice { static constexpr uint8_t EMS_OFFSET_RC20Set_temp_auto = 28; // position of thermostat setpoint temperature static constexpr uint8_t EMS_OFFSET_RC20Set_temp_manual = 29; // position of thermostat setpoint temperature - static constexpr uint8_t EMS_OFFSET_RC20_2_Set_mode = 3; // ES72 - see https://github.com/emsesp/EMS-ESP/issues/334 - static constexpr uint8_t EMS_OFFSET_RC20_2_Set_temp_night = 1; // ES72 - static constexpr uint8_t EMS_OFFSET_RC20_2_Set_temp_day = 2; // ES72 + static constexpr uint8_t EMS_OFFSET_RC20_2_Set_mode = 3; // ES72 - see https://github.com/emsesp/EMS-ESP/issues/334 + static constexpr uint8_t EMS_OFFSET_RC20_2_Set_temp_night = 1; // ES72 + static constexpr uint8_t EMS_OFFSET_RC20_2_Set_temp_day = 2; // ES72 static constexpr uint8_t EMS_OFFSET_RC30StatusMessage_setpoint = 1; // setpoint temp static constexpr uint8_t EMS_OFFSET_RC30StatusMessage_curr = 2; // current temp @@ -308,8 +308,8 @@ class Thermostat : public EMSdevice { static constexpr uint8_t EMS_OFFSET_RC35Set_temp_summer = 22; static constexpr uint8_t EMS_OFFSET_RC35Set_temp_nofrost = 23; - static constexpr uint8_t EMS_OFFSET_EasyStatusMessage_setpoint = 10; // setpoint temp - static constexpr uint8_t EMS_OFFSET_EasyStatusMessage_curr = 8; // current temp + static constexpr uint8_t EMS_OFFSET_EasyStatusMessage_setpoint = 10; // setpoint temp + static constexpr uint8_t EMS_OFFSET_EasyStatusMessage_curr = 8; // current temp static constexpr uint8_t EMS_OFFSET_RCPLUSStatusMessage_mode = 10; // thermostat mode (auto, manual) static constexpr uint8_t EMS_OFFSET_RCPLUSStatusMessage_setpoint = 3; // setpoint temp diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 7fb293b35..2cc94fd22 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -520,7 +520,7 @@ void EMSdevice::add_device_value(uint8_t tag, // to b // get fullname, getting translation if it exists const char * const * fullname; if (Helpers::count_items(name) == 1) { - fullname = nullptr; // no translations available, use empty + fullname = nullptr; // no translations available, use empty } else { fullname = &name[1]; // translations start at index 1 } @@ -1311,7 +1311,7 @@ void EMSdevice::dump_value_info() { if (dv.type == DeviceValueType::BOOL) { snprintf(entityid, sizeof(entityid), "binary_sensor.%s", entity_with_tag); // binary sensor (for booleans) } else { - snprintf(entityid, sizeof(entityid), "sensor.%s", entity_with_tag); // normal HA sensor + snprintf(entityid, sizeof(entityid), "sensor.%s", entity_with_tag); // normal HA sensor } } @@ -1767,6 +1767,11 @@ const char * EMSdevice::telegram_type_name(std::shared_ptr teleg bool EMSdevice::handle_telegram(std::shared_ptr telegram) { for (auto & tf : telegram_functions_) { if (tf.telegram_type_id_ == telegram->type_id) { + // for telegram desitnation only read telegram + if (telegram->dest == device_id_ && telegram->message_length > 0) { + tf.process_function_(telegram); + return true; + } // if the data block is empty and we have not received data before, assume that this telegram // is not recognized by the bus master. So remove it from the automatic fetch list if (telegram->message_length == 0 && telegram->offset == 0 && !tf.received_) { diff --git a/src/emsdevice.h b/src/emsdevice.h index 2d2372060..00ab27f1c 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -459,7 +459,7 @@ class EMSdevice { std::vector telegram_functions_; // each EMS device has its own set of registered telegram types - std::vector devicevalues_; // all the device values + std::vector devicevalues_; // all the device values std::vector handlers_ignored_; }; diff --git a/src/emsdevicevalue.h b/src/emsdevicevalue.h index 08a342690..5ea551004 100644 --- a/src/emsdevicevalue.h +++ b/src/emsdevicevalue.h @@ -145,12 +145,12 @@ class DeviceValue { DV_NUMOP_MUL15 = -15 }; - uint8_t device_type; // EMSdevice::DeviceType - uint8_t tag; // DeviceValueTAG::* - void * value_p; // pointer to variable of any type - uint8_t type; // DeviceValueType::* - const char * const ** options; // options as a flash char array - const char * const * options_single; // options are not translated + uint8_t device_type; // EMSdevice::DeviceType + uint8_t tag; // DeviceValueTAG::* + void * value_p; // pointer to variable of any type + uint8_t type; // DeviceValueType::* + const char * const ** options; // options as a flash char array + const char * const * options_single; // options are not translated int8_t numeric_operator; uint8_t options_size; // number of options in the char array, calculated const char * const short_name; // used in MQTT and API diff --git a/src/emsesp.cpp b/src/emsesp.cpp index 199383800..67a591d11 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -341,7 +341,7 @@ void EMSESP::dump_all_values(uuid::console::Shell & shell) { if (device.product_id == 160) { // MM100 device_id = 0x28; // wwc } else { - device_id = 0x20; // hc + device_id = 0x20; // hc } } else { device_id = 0x20; // should cover all the other device types @@ -926,7 +926,7 @@ bool EMSESP::process_telegram(std::shared_ptr telegram) { if (telegram->type_id == publish_id_) { publish_id_ = 0; } - emsdevice->has_update(false); // reset flag + emsdevice->has_update(false); // reset flag if (!Mqtt::publish_single()) { publish_device_values(emsdevice->device_type()); // publish to MQTT if we explicitly have too } @@ -939,6 +939,8 @@ bool EMSESP::process_telegram(std::shared_ptr telegram) { emsdevice->add_handlers_ignored(telegram->type_id); } break; + } else if (emsdevice->is_device_id(telegram->dest)) { + emsdevice->handle_telegram(telegram); } } @@ -1118,7 +1120,7 @@ bool EMSESP::add_device(const uint8_t device_id, const uint8_t product_id, const name = "Modem"; device_type = DeviceType::CONNECT; } else if (device_id == EMSdevice::EMS_DEVICE_ID_CONVERTER) { - name = "Converter"; // generic + name = "Converter"; // generic } else if (device_id == EMSdevice::EMS_DEVICE_ID_CLOCK) { name = "Clock"; // generic device_type = DeviceType::CONTROLLER; @@ -1390,7 +1392,7 @@ void EMSESP::incoming_telegram(uint8_t * data, const uint8_t length) { #endif Roomctrl::check((data[1] ^ 0x80 ^ rxservice_.ems_mask()), data); // check if there is a message for the roomcontroller - rxservice_.add(data, length); // add to RxQueue + rxservice_.add(data, length); // add to RxQueue } } @@ -1470,8 +1472,8 @@ void EMSESP::start() { bool factory_settings = false; #endif - esp8266React.begin(); // loads core system services settings (network, mqtt, ap, ntp etc) - webLogService.begin(); // start web log service. now we can start capturing logs to the web log + esp8266React.begin(); // loads core system services settings (network, mqtt, ap, ntp etc) + webLogService.begin(); // start web log service. now we can start capturing logs to the web log LOG_INFO("Starting EMS-ESP version %s", EMSESP_APP_VERSION); // welcome message LOG_DEBUG("System is running in Debug mode"); @@ -1491,7 +1493,7 @@ void EMSESP::start() { system_.system_restart(); }; - system_.reload_settings(); // ... and store some of the settings locally + system_.reload_settings(); // ... and store some of the settings locally webCustomizationService.begin(); // load the customizations webSchedulerService.begin(); // load the scheduler events diff --git a/src/emsesp.h b/src/emsesp.h index a1a6f061f..e83287fde 100644 --- a/src/emsesp.h +++ b/src/emsesp.h @@ -163,7 +163,7 @@ class EMSESP { } static void watch(uint8_t watch) { - watch_ = watch; // 0=off, 1=on, 2=raw + watch_ = watch; // 0=off, 1=on, 2=raw if (watch == WATCH_OFF) { watch_id_ = 0; // reset watch id if watch is disabled } diff --git a/src/helpers.cpp b/src/helpers.cpp index e6de1c060..35de71b8a 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -385,7 +385,7 @@ std::string Helpers::data_to_hex(const uint8_t * data, const uint8_t length) { *p++ = buffer[1]; *p++ = ' '; // space } - *--p = '\0'; // null terminate just in case, loosing the trailing space + *--p = '\0'; // null terminate just in case, loosing the trailing space return std::string(str); } diff --git a/src/locale_common.h b/src/locale_common.h index 3e373dab1..3eb878b5e 100644 --- a/src/locale_common.h +++ b/src/locale_common.h @@ -80,6 +80,7 @@ MAKE_WORD(info) MAKE_WORD(settings) MAKE_WORD(value) MAKE_WORD(entities) +MAKE_WORD(coldshot) // device types - lowercase, used in MQTT MAKE_WORD(boiler) diff --git a/src/locale_translations.h b/src/locale_translations.h index 8814ad57c..4a9f2e314 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -70,6 +70,7 @@ MAKE_WORD_TRANSLATION(system_info_cmd, "show system status", "Zeige System-Statu MAKE_WORD_TRANSLATION(schedule_cmd, "enable schedule item", "Aktiviere Zeitplan", "activeer tijdschema item", "", "aktywuj wybrany harmonogram", "", "", "program öğesini etkinleştir", "abilitare l'elemento programmato") // TODO translate MAKE_WORD_TRANSLATION(entity_cmd, "set custom value on ems", "Sende eigene Entitäten zu EMS", "verstuur custom waarde naar EMS", "", "wyślij własną wartość na EMS", "", "", "", "imposta valori personalizzati su EMS") // TODO translate MAKE_WORD_TRANSLATION(commands_response, "get response", "Hole Antwort", "Verzoek om antwoord", "", "", "", "", "") // TODO translate +MAKE_WORD_TRANSLATION(coldshot_cmd, "send a cold shot of water", "", "", "", "", "", "", "", "") // TODO translate // tags MAKE_WORD_TRANSLATION(tag_boiler_data_ww, "dhw", "WW", "dhw", "VV", "CWU", "dhw", "ecs", "SKS", "dhw") diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 77e697af8..dcb9744b7 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -124,6 +124,8 @@ void Mqtt::resubscribe() { // Main MQTT loop - sends out top item on publish queue void Mqtt::loop() { + queuecount_ = mqttClient_->queueSize(); + // exit if MQTT is not enabled or if there is no network connection if (!connected()) { return; @@ -142,7 +144,7 @@ void Mqtt::loop() { EMSESP::publish_sensor_values(false); } - queuecount_ = mqttClient_->getQueue(); + // wait for empty queue before sending scheduled device messages if (queuecount_ > 0) { return; } @@ -278,9 +280,13 @@ void Mqtt::on_message(const char * topic, const uint8_t * payload, size_t len) c if (return_code != CommandRet::OK) { char error[100]; if (output.size()) { - snprintf(error, sizeof(error), "Call failed with error: %s (%s)", (const char *)output["message"], Command::return_code_string(return_code).c_str()); + snprintf(error, + sizeof(error), + "MQTT command failed with error: %s (%s)", + (const char *)output["message"], + Command::return_code_string(return_code).c_str()); } else { - snprintf(error, sizeof(error), "Call failed with error code (%s)", Command::return_code_string(return_code).c_str()); + snprintf(error, sizeof(error), "MQTT command failed with error code (%s)", Command::return_code_string(return_code).c_str()); } LOG_ERROR(error); Mqtt::queue_publish("response", error); @@ -478,7 +484,7 @@ void Mqtt::on_connect() { connecting_ = true; connectcount_++; // count # reconnects. not currently used. - queuecount_ = 0; + queuecount_ = mqttClient_->queueSize(); load_settings(); // reload MQTT settings - in case they have changes @@ -506,7 +512,7 @@ void Mqtt::on_connect() { // publish to the last will topic (see Mqtt::start() function) to say we're alive queue_publish_retain("status", "online", true); // with retain on - mqtt_publish_fails_ = 0; // reset fail count to 0 + // mqtt_publish_fails_ = 0; // reset fail count to 0 } // Home Assistant Discovery - the main master Device called EMS-ESP @@ -586,14 +592,25 @@ bool Mqtt::queue_message(const uint8_t operation, const std::string & topic, con if (!mqtt_enabled_ || topic.empty()) { return false; // quit, not using MQTT } +// check free mem +#ifndef EMSESP_STANDALONE + if (ESP.getFreeHeap() < 60 * 1204) { + if (operation == Operation::PUBLISH) { + mqtt_message_id_++; + mqtt_publish_fails_++; + } + LOG_DEBUG("%s failed: low memory", operation == Operation::PUBLISH ? "Publish" : operation == Operation::SUBSCRIBE ? "Subscribe" : "Unsubscribe"); + return false; // quit + } +#endif uint16_t packet_id = 0; char fulltopic[MQTT_TOPIC_MAX_SIZE]; if (topic.find(discovery_prefix_) == 0) { - strlcpy(fulltopic, topic.c_str(), sizeof(fulltopic)); // leave topic as it is + strlcpy(fulltopic, topic.c_str(), sizeof(fulltopic)); // leave discovery topic as it is } else { - // it's a discovery topic, added the mqtt base to the topic path + // it's not a discovery topic, added the mqtt base to the topic path snprintf(fulltopic, sizeof(fulltopic), "%s/%s", mqtt_base_.c_str(), topic.c_str()); // uses base } @@ -679,7 +696,7 @@ bool Mqtt::queue_remove_topic(const char * topic) { if (ha_enabled_) { return queue_publish_message(Mqtt::discovery_prefix() + topic, "", true); // publish with retain to remove from broker } else { - return queue_publish_message(topic, "", true); // publish with retain to remove from broker + return queue_publish_message(topic, "", true); // publish with retain to remove from broker } } @@ -691,7 +708,7 @@ bool Mqtt::queue_ha(const char * topic, const JsonObject & payload) { std::string payload_text; payload_text.reserve(measureJson(payload) + 1); - serializeJson(payload, payload_text); // convert json to string + serializeJson(payload, payload_text); // convert json to string return queue_publish_message(Mqtt::discovery_prefix() + topic, payload_text, true); // with retain true } @@ -860,7 +877,7 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev if (type == DeviceValueType::BOOL) { snprintf(topic, sizeof(topic), "binary_sensor/%s", config_topic); // binary sensor (for booleans) } else { - snprintf(topic, sizeof(topic), "sensor/%s", config_topic); // normal HA sensor + snprintf(topic, sizeof(topic), "sensor/%s", config_topic); // normal HA sensor } } @@ -874,13 +891,13 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev // build the payload StaticJsonDocument doc; doc["uniq_id"] = uniq_id; - doc["obj_id"] = uniq_id; // same as unique_id + doc["obj_id"] = uniq_id; // same as unique_id const char * ic_ha = "ic"; // icon - only set this if there is no device class const char * sc_ha = "stat_cla"; // state class const char * uom_ha = "unit_of_meas"; // unit of measure - char sample_val[30] = "0"; // sample, correct(!) entity value, used only to prevent warning/error in HA if real value is not published yet + char sample_val[30] = "0"; // sample, correct(!) entity value, used only to prevent warning/error in HA if real value is not published yet // handle commands, which are device entities that are writable // we add the command topic parameter @@ -898,10 +915,20 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev // for enums, add options if (type == DeviceValueType::ENUM) { JsonArray option_list = doc.createNestedArray("ops"); // options - for (uint8_t i = 0; i < options_size; i++) { - option_list.add(Helpers::translated_word(options[i])); + if (EMSESP::system_.enum_format() == ENUM_FORMAT_INDEX) { + // use index numbers + for (uint8_t i = 0; i < options_size; i++) { + option_list.add(Helpers::itoa(i)); // as a string + } + snprintf(sample_val, sizeof(sample_val), "'0'"); + } else { + // use strings + for (uint8_t i = 0; i < options_size; i++) { + option_list.add(Helpers::translated_word(options[i])); + } + snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::translated_word(options[0])); } - snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::translated_word(options[0])); + } else if (type != DeviceValueType::STRING && type != DeviceValueType::BOOL) { // Must be Numeric.... doc["mode"] = "box"; // auto, slider or box @@ -952,7 +979,7 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev } else { snprintf(ha_name, sizeof(ha_name), "%s", F_name); // no tag } - free(F_name); // very important! + free(F_name); // very important! doc["name"] = ha_name; // value template @@ -1164,7 +1191,7 @@ bool Mqtt::publish_ha_climate_config(const uint8_t tag, const bool has_roomtemp, if (Mqtt::entity_format() == entityFormat::MULTI_SHORT) { snprintf(uniq_id_s, sizeof(uniq_id_s), "%s_thermostat_hc%d", mqtt_basename_.c_str(), hc_num); // add basename } else { - snprintf(uniq_id_s, sizeof(uniq_id_s), "thermostat_hc%d", hc_num); // backward compatible with v3.4 + snprintf(uniq_id_s, sizeof(uniq_id_s), "thermostat_hc%d", hc_num); // backward compatible with v3.4 } snprintf(temp_cmd_s, sizeof(temp_cmd_s), "~/thermostat/hc%d/seltemp", hc_num); diff --git a/src/shower.cpp b/src/shower.cpp index 06432200f..f596bd95d 100644 --- a/src/shower.cpp +++ b/src/shower.cpp @@ -22,6 +22,8 @@ namespace emsesp { uuid::log::Logger Shower::logger_{F_(shower), uuid::log::Facility::CONSOLE}; +static bool force_coldshot = false; + void Shower::start() { EMSESP::webSettingsService.read([&](WebSettings & settings) { shower_timer_ = settings.shower_timer; @@ -30,7 +32,27 @@ void Shower::start() { shower_alert_coldshot_ = settings.shower_alert_coldshot * 1000; // convert from seconds }); - set_shower_state(false, true); // turns shower to off and creates HA topic if not already done + Command::add( + EMSdevice::DeviceType::BOILER, + F_(coldshot), + [&](const char * value, const int8_t id, JsonObject & output) { + LOG_INFO("Forcing coldshot..."); + if (shower_state_) { + output["message"] = "OK"; + force_coldshot = true; + } else { + output["message"] = "Coldshot failed. Shower not active"; + LOG_WARNING("Coldshot failed. Shower not active"); + force_coldshot = false; + } + return true; + }, + FL_(coldshot_cmd), + CommandFlag::ADMIN_ONLY); + + if (shower_timer_) { + set_shower_state(false, true); // turns shower to off and creates HA topic if not already done + } } void Shower::loop() { @@ -57,10 +79,10 @@ void Shower::loop() { // first check to see if hot water has been on long enough to be recognized as a Shower/Bath if (!shower_state_ && (time_now - timer_start_) > SHOWER_MIN_DURATION) { set_shower_state(true); - LOG_DEBUG("[Shower] hot water still running, starting shower timer"); + LOG_DEBUG("hot water still running, starting shower timer"); } // check if the shower has been on too long - else if ((time_now - timer_start_) > shower_alert_trigger_) { + else if ((shower_alert_ && ((time_now - timer_start_) > shower_alert_trigger_)) || force_coldshot) { shower_alert_start(); } } @@ -79,11 +101,11 @@ void Shower::loop() { if (duration_ > SHOWER_MIN_DURATION) { StaticJsonDocument doc; - char s[50]; - snprintf(s, 50, "%d minutes and %d seconds", (uint8_t)(duration_ / 60000), (uint8_t)((duration_ / 1000) % 60)); - doc["duration"] = s; + // char s[50]; + // snprintf(s, 50, "%02u:%02u:%02u", (uint8_t)(duration_ / 3600000UL), (uint8_t)(duration_ / 60000UL), (uint8_t)((duration_ / 1000UL) % 60)); + doc["duration"] = (uint8_t)(duration_ / 1000UL); // seconds Mqtt::queue_publish("shower_data", doc.as()); - LOG_DEBUG("[Shower] finished with duration %d", duration_); + LOG_INFO("finished with duration %d", duration_); } } @@ -106,21 +128,22 @@ void Shower::loop() { } } +// turn off hot water to send a shot of cold +void Shower::shower_alert_start() { + LOG_DEBUG("Shower Alert started"); + (void)Command::call(EMSdevice::DeviceType::BOILER, "wwtapactivated", "false"); + doing_cold_shot_ = true; + force_coldshot = false; + alert_timer_start_ = uuid::get_uptime(); // timer starts now +} + // turn back on the hot water for the shower void Shower::shower_alert_stop() { if (doing_cold_shot_) { LOG_DEBUG("Shower Alert stopped"); (void)Command::call(EMSdevice::DeviceType::BOILER, "wwtapactivated", "true"); doing_cold_shot_ = false; - } -} -// turn off hot water to send a shot of cold -void Shower::shower_alert_start() { - if (shower_alert_) { - LOG_DEBUG("Shower Alert started"); - (void)Command::call(EMSdevice::DeviceType::BOILER, "wwtapactivated", "false"); - doing_cold_shot_ = true; - alert_timer_start_ = uuid::get_uptime(); // timer starts now + force_coldshot = false; } } @@ -128,15 +151,11 @@ void Shower::shower_alert_start() { // and creates the HA config topic if HA enabled // force is used by EMSESP::publish_all_loop() void Shower::set_shower_state(bool state, bool force) { - if (!shower_timer_ && !shower_alert_) { - return; - } - // sets the state shower_state_ = state; // only publish if that state has changed - static bool old_shower_state_; + static bool old_shower_state_ = false; if ((shower_state_ == old_shower_state_) && !force) { return; } @@ -149,10 +168,15 @@ void Shower::set_shower_state(bool state, bool force) { // send out HA MQTT Discovery config topic if ((Mqtt::ha_enabled()) && (!ha_configdone_ || force)) { StaticJsonDocument doc; + char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; + char str[70]; + char stat_t[50]; + // + // shower_active topic + // doc["name"] = "Shower Active"; - char str[70]; if (Mqtt::entity_format() == Mqtt::entityFormat::MULTI_SHORT) { snprintf(str, sizeof(str), "%s_shower_active", Mqtt::basename().c_str()); } else { @@ -161,7 +185,6 @@ void Shower::set_shower_state(bool state, bool force) { doc["uniq_id"] = str; doc["object_id"] = str; - char stat_t[50]; snprintf(stat_t, sizeof(stat_t), "%s/shower_active", Mqtt::basename().c_str()); doc["stat_t"] = stat_t; @@ -181,13 +204,39 @@ void Shower::set_shower_state(bool state, bool force) { JsonArray ids = dev.createNestedArray("ids"); ids.add(Mqtt::basename()); - // add "availability" section - Mqtt::add_avty_to_doc(stat_t, doc.as()); + Mqtt::add_avty_to_doc(stat_t, doc.as()); // add "availability" section - char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; snprintf(topic, sizeof(topic), "binary_sensor/%s/shower_active/config", Mqtt::basename().c_str()); - ha_configdone_ = Mqtt::queue_ha(topic, doc.as()); // publish the config payload with retain flag + + // + // shower_duaration topic + // + doc.clear(); + + snprintf(str, sizeof(str), "%s_shower_duration", Mqtt::basename().c_str()); + + doc["uniq_id"] = str; + doc["object_id"] = str; + + snprintf(stat_t, sizeof(stat_t), "%s/shower_data", Mqtt::basename().c_str()); + doc["stat_t"] = stat_t; + + doc["name"] = "Shower Duration"; + doc["val_tpl"] = "{{value_json.duration if value_json.duration is defined else 0}}"; + doc["unit_of_meas"] = "s"; + doc["stat_cla"] = "measurement"; + doc["dev_cla"] = "duration"; + doc["ent_cat"] = "diagnostic"; + + JsonObject dev2 = doc.createNestedObject("dev"); + JsonArray ids2 = dev2.createNestedArray("ids"); + ids2.add(Mqtt::basename()); + + Mqtt::add_avty_to_doc(stat_t, doc.as(), "value_json.duration is defined"); // add "availability" section + + snprintf(topic, sizeof(topic), "sensor/%s/shower_duration/config", Mqtt::basename().c_str()); + Mqtt::queue_ha(topic, doc.as()); // publish the config payload with retain flag } } diff --git a/src/shower.h b/src/shower.h index e9e866c52..bb2013b6a 100644 --- a/src/shower.h +++ b/src/shower.h @@ -30,6 +30,9 @@ class Shower { void set_shower_state(bool state, bool force = false); + // commands + static bool command_coldshot(const char * value, const int8_t id); + private: static uuid::log::Logger logger_; @@ -46,9 +49,9 @@ class Shower { uint32_t shower_alert_coldshot_; // default 10 seconds for cold water before turning back hot water bool ha_configdone_ = false; // for HA MQTT Discovery bool shower_state_; - uint32_t timer_start_; // ms - uint32_t timer_pause_; // ms - uint32_t duration_; // ms + uint32_t timer_start_; // ms + uint32_t timer_pause_; // ms + uint32_t duration_; // ms // cold shot uint32_t alert_timer_start_; // ms diff --git a/src/system.cpp b/src/system.cpp index 818cc215e..a00c7e660 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -847,7 +847,7 @@ void System::led_monitor() { } if (led_on_) { - digitalWrite(led_gpio_, LED_ON); // LED off + digitalWrite(led_gpio_, LED_ON); // LED off } #endif } else { @@ -1432,27 +1432,27 @@ bool System::command_test(const char * value, const int8_t id) { // 3 = RMII clock output from GPIO17, for 50hz inverted clock bool System::load_board_profile(std::vector & data, const std::string & board_profile) { if (board_profile == "S32") { - data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // BBQKees Gateway S32 + data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // BBQKees Gateway S32 } else if (board_profile == "E32") { data = {2, 4, 5, 17, 33, PHY_type::PHY_TYPE_LAN8720, 16, 1, 0}; // BBQKees Gateway E32 } else if (board_profile == "MH-ET") { - data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // MH-ET Live D1 Mini + data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // MH-ET Live D1 Mini } else if (board_profile == "NODEMCU") { - data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // NodeMCU 32S + data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // NodeMCU 32S } else if (board_profile == "LOLIN") { - data = {2, 18, 17, 16, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin D32 + data = {2, 18, 17, 16, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin D32 } else if (board_profile == "OLIMEX") { data = {0, 0, 36, 4, 34, PHY_type::PHY_TYPE_LAN8720, -1, 0, 0}; // Olimex ESP32-EVB (uses U1TXD/U1RXD/BUTTON, no LED or Temperature sensor) } else if (board_profile == "OLIMEXPOE") { data = {0, 0, 36, 4, 34, PHY_type::PHY_TYPE_LAN8720, 12, 0, 3}; // Olimex ESP32-POE } else if (board_profile == "C3MINI") { - data = {7, 1, 4, 5, 9, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin C3 Mini + data = {7, 1, 4, 5, 9, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin C3 Mini } else if (board_profile == "S2MINI") { - data = {15, 7, 11, 12, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin S2 Mini + data = {15, 7, 11, 12, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin S2 Mini } else if (board_profile == "S3MINI") { - data = {17, 18, 8, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Liligo S3 + data = {17, 18, 8, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Liligo S3 } else if (board_profile == "S32S3") { - data = {2, 18, 5, 17, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // BBQKees Gateway S3 + data = {2, 18, 5, 17, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // BBQKees Gateway S3 } else if (board_profile == "CUSTOM") { // send back current values data = {(int8_t)EMSESP::system_.led_gpio_, diff --git a/src/telegram.cpp b/src/telegram.cpp index 2a89cff71..ac9ff25b5 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -148,11 +148,11 @@ void RxService::add(uint8_t * data, uint8_t length) { // validate the CRC. if it fails then increment the number of corrupt/incomplete telegrams and only report to console/syslog uint8_t crc = calculate_crc(data, length - 1); if (data[length - 1] != crc) { - if ((data[0] & 0x7F) != ems_bus_id()) { // do not count echos as errors + if ((data[0] & 0x7F) != ems_bus_id()) { // do not count echos as errors telegram_error_count_++; LOG_WARNING("Incomplete Rx: %s", Helpers::data_to_hex(data, length - 1).c_str()); // exclude CRC } else { - LOG_TRACE("Incomplete Rx: %s", Helpers::data_to_hex(data, length - 1).c_str()); // exclude CRC + LOG_TRACE("Incomplete Rx: %s", Helpers::data_to_hex(data, length - 1).c_str()); // exclude CRC } return; } @@ -347,7 +347,7 @@ void TxService::send_telegram(const QueuedTxTelegram & tx_telegram) { telegram_raw[5] = (telegram->type_id >> 8) - 1; // type, 1st byte, high-byte, subtract 0x100 telegram_raw[6] = telegram->type_id & 0xFF; // type, 2nd byte, low-byte message_p = 7; - copy_data = false; // there are no more data values after the type_id when reading on EMS+ + copy_data = false; // there are no more data values after the type_id when reading on EMS+ } } else { // EMS 1.0 @@ -396,11 +396,11 @@ void TxService::send_telegram(const QueuedTxTelegram & tx_telegram) { if (status == EMS_TX_STATUS_ERR) { LOG_ERROR("Failed to transmit Tx via UART."); if (telegram->operation == Telegram::Operation::TX_READ) { - increment_telegram_read_fail_count(); // another Tx fail + increment_telegram_read_fail_count(); // another Tx fail } else { increment_telegram_write_fail_count(); // another Tx fail } - tx_state(Telegram::Operation::NONE); // nothing send, tx not in wait state + tx_state(Telegram::Operation::NONE); // nothing send, tx not in wait state return; } @@ -456,7 +456,7 @@ void TxService::add(const uint8_t operation, if (front) { tx_telegrams_.emplace_front(tx_telegram_id_++, std::move(telegram), false, validateid); // add to front of queue } else { - tx_telegrams_.emplace_back(tx_telegram_id_++, std::move(telegram), false, validateid); // add to back of queue + tx_telegrams_.emplace_back(tx_telegram_id_++, std::move(telegram), false, validateid); // add to back of queue } if (validateid != 0) { EMSESP::wait_validate(validateid); @@ -595,14 +595,14 @@ bool TxService::send_raw(const char * telegram_data) { void TxService::retry_tx(const uint8_t operation, const uint8_t * data, const uint8_t length) { // have we reached the limit? if so, reset count and give up if (++retry_count_ > MAXIMUM_TX_RETRIES) { - reset_retry_count(); // give up - EMSESP::wait_validate(0); // do not wait for validation + reset_retry_count(); // give up + EMSESP::wait_validate(0); // do not wait for validation if (operation == Telegram::Operation::TX_READ) { if (telegram_last_->offset > 0) { // ignore errors for higher offsets LOG_DEBUG("Last Tx Read operation failed after %d retries. Ignoring request: %s", MAXIMUM_TX_RETRIES, telegram_last_->to_string().c_str()); return; } - increment_telegram_read_fail_count(); // another Tx fail + increment_telegram_read_fail_count(); // another Tx fail } else { increment_telegram_write_fail_count(); // another Tx fail } diff --git a/src/telegram.h b/src/telegram.h index bcf9c3e7b..60805ab2c 100644 --- a/src/telegram.h +++ b/src/telegram.h @@ -48,8 +48,8 @@ static constexpr int16_t EMS_VALUE_SHORT_NOTSET = 0x7D00; // 32000: for 2- static constexpr uint32_t EMS_VALUE_ULONG_NOTSET = 0x00FFFFFF; // for 3-byte longs static constexpr uint32_t EMS_VALUE_ULLONG_NOTSET = 0xFFFFFFFF; // for 4-byte longs -static constexpr uint8_t EMS_MAX_TELEGRAM_LENGTH = 32; // max length of a complete EMS telegram -static constexpr uint8_t EMS_MAX_TELEGRAM_MESSAGE_LENGTH = 27; // max length of message block, assuming EMS1.0 +static constexpr uint8_t EMS_MAX_TELEGRAM_LENGTH = 32; // max length of a complete EMS telegram +static constexpr uint8_t EMS_MAX_TELEGRAM_MESSAGE_LENGTH = 27; // max length of message block, assuming EMS1.0 #define EMS_VALUE_DEFAULT_INT EMS_VALUE_INT_NOTSET #define EMS_VALUE_DEFAULT_UINT EMS_VALUE_UINT_NOTSET @@ -232,13 +232,13 @@ class EMSbus { private: static constexpr uint32_t EMS_BUS_TIMEOUT = 30000; // timeout in ms before recognizing the ems bus is offline (30 seconds) - static uint32_t last_bus_activity_; // timestamp of last time a valid Rx came in - static uint32_t bus_uptime_start_; // timestamp of first time we connected to the bus - static bool bus_connected_; // start assuming the bus hasn't been connected - static uint8_t ems_mask_; // unset=0xFF, buderus=0x00, junkers/ht3=0x80 - static uint8_t ems_bus_id_; // the bus id, which configurable and stored in settings - static uint8_t tx_mode_; // local copy of the tx mode - static uint8_t tx_state_; // state of the Tx line (NONE or waiting on a TX_READ or TX_WRITE) + static uint32_t last_bus_activity_; // timestamp of last time a valid Rx came in + static uint32_t bus_uptime_start_; // timestamp of first time we connected to the bus + static bool bus_connected_; // start assuming the bus hasn't been connected + static uint8_t ems_mask_; // unset=0xFF, buderus=0x00, junkers/ht3=0x80 + static uint8_t ems_bus_id_; // the bus id, which configurable and stored in settings + static uint8_t tx_mode_; // local copy of the tx mode + static uint8_t tx_state_; // state of the Tx line (NONE or waiting on a TX_READ or TX_WRITE) }; class RxService : public EMSbus { @@ -433,17 +433,17 @@ class TxService : public EMSbus { private: std::deque tx_telegrams_; // the Tx queue - uint32_t telegram_read_count_ = 0; // # Tx successful reads - uint32_t telegram_write_count_ = 0; // # Tx successful writes - uint32_t telegram_read_fail_count_ = 0; // # Tx unsuccessful transmits - uint32_t telegram_write_fail_count_ = 0; // # Tx unsuccessful transmits + uint32_t telegram_read_count_ = 0; // # Tx successful reads + uint32_t telegram_write_count_ = 0; // # Tx successful writes + uint32_t telegram_read_fail_count_ = 0; // # Tx unsuccessful transmits + uint32_t telegram_write_fail_count_ = 0; // # Tx unsuccessful transmits std::shared_ptr telegram_last_; uint16_t telegram_last_post_send_query_; // which type ID to query after a successful send, to read back the values just written uint8_t retry_count_ = 0; // count for # Tx retries uint32_t delayed_send_ = 0; // manage delay for post send query - uint8_t tx_telegram_id_ = 0; // queue counter + uint8_t tx_telegram_id_ = 0; // queue counter void send_telegram(const QueuedTxTelegram & tx_telegram); }; diff --git a/src/temperaturesensor.cpp b/src/temperaturesensor.cpp index 33f1394b5..ef5e7aac7 100644 --- a/src/temperaturesensor.cpp +++ b/src/temperaturesensor.cpp @@ -214,7 +214,7 @@ void TemperatureSensor::loop() { // LOG_DEBUG("Adding %d sensor(s) from first scan", firstscan_); } else if ((scancnt_ <= 0) && (firstscan_ != sensors_.size())) { // check 2 times for no change of sensor # scancnt_ = SCAN_START; - sensors_.clear(); // restart scanning and clear to get correct numbering + sensors_.clear(); // restart scanning and clear to get correct numbering } state_ = State::IDLE; } @@ -576,7 +576,7 @@ TemperatureSensor::Sensor::Sensor(const uint8_t addr[]) (unsigned int)(internal_id_ >> 48) & 0xFF, (unsigned int)(internal_id_ >> 32) & 0xFFFF, (unsigned int)(internal_id_ >> 16) & 0xFFFF, - (unsigned int)(internal_id_)&0xFFFF); + (unsigned int)(internal_id_) & 0xFFFF); id_ = std::string(id_s); name_ = std::string{}; // name (alias) is empty offset_ = 0; // 0 degrees offset diff --git a/src/temperaturesensor.h b/src/temperaturesensor.h index 741d8fa85..353b8f8fa 100644 --- a/src/temperaturesensor.h +++ b/src/temperaturesensor.h @@ -132,7 +132,7 @@ class TemperatureSensor { static constexpr uint8_t TYPE_DS18B20 = 0x28; static constexpr uint8_t TYPE_DS18S20 = 0x10; static constexpr uint8_t TYPE_DS1822 = 0x22; - static constexpr uint8_t TYPE_DS1825 = 0x3B; // also DS1826 + static constexpr uint8_t TYPE_DS1825 = 0x3B; // also DS1826 static constexpr uint32_t READ_INTERVAL_MS = 5000; // 5 seconds static constexpr uint32_t CONVERSION_MS = 1000; // 1 seconds diff --git a/src/test/test.cpp b/src/test/test.cpp index 556500516..0bb5c8754 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -266,7 +266,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const shell.printfln("Testing adding a general boiler & thermostat..."); run_test("general"); // shell.invoke_command("show devices"); - // shell.invoke_command("show values"); + shell.invoke_command("show values"); shell.invoke_command("call system publish"); // shell.invoke_command("show mqtt"); ok = true; @@ -280,6 +280,21 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const ok = true; } + if (command == "coldshot") { + shell.printfln("Testing coldshot..."); + run_test("general"); + +#ifdef EMSESP_STANDALONE + AsyncWebServerRequest request; + request.method(HTTP_GET); + request.url("/api/boiler/coldshot"); + EMSESP::webAPIService.webAPIService_get(&request); +#else + shell.invoke_command("call boiler coldshot"); +#endif + ok = true; + } + if (command == "string2minutes") { shell.printfln("Testing string2minutes()..."); std::string time_s = "12:00"; @@ -1005,10 +1020,10 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const EMSESP::mqtt_.incoming("ems-esp/thermostat_hc1", "22"); // HA only EMSESP::mqtt_.incoming("ems-esp/thermostat_hc1", "off"); // HA only EMSESP::mqtt_.incoming("ems-esp/system/send", "11 12 13"); - EMSESP::mqtt_.incoming("ems-esp/boiler/syspress"); // empty payload - EMSESP::mqtt_.incoming("ems-esp/thermostat/mode"); // empty payload + EMSESP::mqtt_.incoming("ems-esp/boiler/syspress"); // empty payload + EMSESP::mqtt_.incoming("ems-esp/thermostat/mode"); // empty payload EMSESP::mqtt_.incoming("ems-esp/system/publish"); - EMSESP::mqtt_.incoming("ems-esp/thermostat/seltemp"); // empty payload + EMSESP::mqtt_.incoming("ems-esp/thermostat/seltemp"); // empty payload EMSESP::mqtt_.incoming("ems-esp/boiler/wwseltemp", "59"); EMSESP::mqtt_.incoming("ems-esp/boiler/wwseltemp"); @@ -1204,7 +1219,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const uart_telegram("30 00 FF 0A 02 6A 04"); // SM100 pump on 1 uart_telegram("30 00 FF 00 02 64 00 00 00 04 00 00 FF 00 00 1E 0B 09 64 00 00 00 00"); // SM100 modulation - uart_telegram("30 00 FF 0A 02 6A 03"); // SM100 pump off 0 + uart_telegram("30 00 FF 0A 02 6A 03"); // SM100 pump off 0 shell.invoke_command("show"); ok = true; @@ -1446,7 +1461,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const shell.invoke_command("call"); shell.invoke_command("call system info"); - EMSESP::mqtt_.incoming("ems-esp/system", "{\"cmd\":\"info\"}"); // this should fail + EMSESP::mqtt_.incoming("ems-esp/system", "{\"cmd\":\"info\"}"); // this should fail EMSESP::mqtt_.incoming("ems-esp/thermostat", "{\"cmd\":\"temp\",\"data\":23.45}"); // this should work just fine EMSESP::mqtt_.incoming("ems-esp/thermostat", "{\"cmd\":\"TeMP\",\"data\":23.45}"); // test mix cased cmd @@ -1559,7 +1574,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // EMSESP::mqtt_.incoming(system_topic, "{\"cmd\":\"pin\",\"id\":12,\"data\":\"1\"}"); EMSESP::mqtt_.incoming(thermostat_topic, "{\"cmd\":\"wwmode\",\"data\":\"auto\"}"); - EMSESP::mqtt_.incoming(thermostat_topic, "{\"cmd\":\"mode\",\"data\":\"typo\",\"id\":2}"); // invalid mode + EMSESP::mqtt_.incoming(thermostat_topic, "{\"cmd\":\"mode\",\"data\":\"typo\",\"id\":2}"); // invalid mode EMSESP::mqtt_.incoming(thermostat_topic, "{\"cmd\":\"mode\",\"data\":\"auto\",\"id\":2}"); EMSESP::mqtt_.incoming(thermostat_topic, "{\"cmd\":\"mode\",\"data\":\"auto\",\"hc\":2}"); // hc as number EMSESP::mqtt_.incoming(thermostat_topic, "{\"cmd\":\"seltemp\",\"data\":19.5,\"hc\":1}"); // data as number diff --git a/src/test/test.h b/src/test/test.h index 36823b166..b0c495a8e 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -26,11 +26,12 @@ namespace emsesp { +// #define EMSESP_DEBUG_DEFAULT "general" + // #define EMSESP_DEBUG_DEFAULT "thermostat" // #define EMSESP_DEBUG_DEFAULT "solar" // #define EMSESP_DEBUG_DEFAULT "web" // #define EMSESP_DEBUG_DEFAULT "mqtt" -#define EMSESP_DEBUG_DEFAULT "general" // #define EMSESP_DEBUG_DEFAULT "boiler" // #define EMSESP_DEBUG_DEFAULT "mqtt2" // #define EMSESP_DEBUG_DEFAULT "mqtt_nested" @@ -53,6 +54,7 @@ namespace emsesp { // #define EMSESP_DEBUG_DEFAULT "custom" // #define EMSESP_DEBUG_DEFAULT "entity_dump" // #define EMSESP_DEBUG_DEFAULT "memory" +#define EMSESP_DEBUG_DEFAULT "coldshot" class Test { public: diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index 35e4360b2..6055ac3c4 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -86,7 +86,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t uart_set_pin(EMSUART_NUM, tx_gpio, rx_gpio, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_driver_install(EMSUART_NUM, 129, 0, (EMS_MAXBUFFERSIZE + 1) * 2, &uart_queue, 0); // buffer must be > fifo uart_set_rx_full_threshold(EMSUART_NUM, 1); - uart_set_rx_timeout(EMSUART_NUM, 0); // disable + uart_set_rx_timeout(EMSUART_NUM, 0); // disable // note esp32s3 crashes with 2k stacksize, stack overflow here sometimes wipes settingsfiles. xTaskCreate(uart_event_task, "uart_event_task", 2560, NULL, configMAX_PRIORITIES - 1, NULL); diff --git a/src/uart/emsuart_esp32.h b/src/uart/emsuart_esp32.h index a7bc0751e..e39ad91ba 100644 --- a/src/uart/emsuart_esp32.h +++ b/src/uart/emsuart_esp32.h @@ -24,7 +24,7 @@ #ifndef EMSESP_EMSUART_H #define EMSESP_EMSUART_H -#define EMS_MAXBUFFERSIZE 33 // max size of the buffer. EMS packets are max 32 bytes, plus extra for BRK +#define EMS_MAXBUFFERSIZE 33 // max size of the buffer. EMS packets are max 32 bytes, plus extra for BRK #define EMSUART_NUM UART_NUM_1 // on C3 and S2 there is no UART2, use UART1 for all #define EMSUART_BAUD 9600 // uart baud rate for the EMS circuit diff --git a/src/version.h b/src/version.h index f59facfb3..af24f2378 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.6.0" +#define EMSESP_APP_VERSION "3.6.1" diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index 84f94ff02..aa56f582b 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -121,9 +121,9 @@ void WebAPIService::parse(AsyncWebServerRequest * request, JsonObject & input) { if (return_code != CommandRet::OK) { char error[100]; if (output.size()) { - snprintf(error, sizeof(error), "Call failed with error: %s (%s)", (const char *)output["message"], Command::return_code_string(return_code).c_str()); + snprintf(error, sizeof(error), "API failed with error: %s (%s)", (const char *)output["message"], Command::return_code_string(return_code).c_str()); } else { - snprintf(error, sizeof(error), "Call failed with error code (%s)", Command::return_code_string(return_code).c_str()); + snprintf(error, sizeof(error), "API failed with error code (%s)", Command::return_code_string(return_code).c_str()); } emsesp::EMSESP::logger().err(error); api_fails_++; diff --git a/src/web/WebDataService.cpp b/src/web/WebDataService.cpp index 244218682..287d8e649 100644 --- a/src/web/WebDataService.cpp +++ b/src/web/WebDataService.cpp @@ -156,7 +156,7 @@ void WebDataService::sensor_data(AsyncWebServerRequest * request) { if (sensor.type() != AnalogSensor::AnalogType::NOTUSED) { obj["v"] = Helpers::transformNumFloat(sensor.value(), 0); // is optional and is a float } else { - obj["v"] = 0; // must have a value for web sorting to work + obj["v"] = 0; // must have a value for web sorting to work } } } diff --git a/src/web/WebEntityService.cpp b/src/web/WebEntityService.cpp index 3b31e653f..1919c5eb3 100644 --- a/src/web/WebEntityService.cpp +++ b/src/web/WebEntityService.cpp @@ -31,6 +31,7 @@ WebEntityService::WebEntityService(AsyncWebServer * server, FS * fs, SecurityMan void WebEntityService::begin() { _fsPersistence.readFromFS(); EMSESP::logger().info("Starting Custom entity service"); + Mqtt::subscribe(EMSdevice::DeviceType::CUSTOM, "custom/#", nullptr); // use empty function callback } // this creates the entity file, saving it to the FS @@ -60,6 +61,7 @@ StateUpdateResult WebEntity::update(JsonObject & root, WebEntity & webEntity) { Command::erase_command(EMSdevice::DeviceType::CUSTOM, entityItem.name.c_str()); } webEntity.entityItems.clear(); + EMSESP::webEntityService.ha_reset(); if (root["entities"].is()) { for (const JsonObject ei : root["entities"].as()) { @@ -219,8 +221,8 @@ bool WebEntityService::get_value_info(JsonObject & output, const char * cmd) { return false; } if (Helpers::toLower(cmd) == "commands") { - output["info"] = "lists all values"; - output["commands"] = "lists all commands"; + output["info"] = "list all values"; + output["commands"] = "list all commands"; for (const auto & entity : *entityItems) { output[entity.name] = "custom entitiy"; } @@ -318,7 +320,8 @@ void WebEntityService::publish(const bool force) { } DynamicJsonDocument doc(EMSESP_JSON_SIZE_XLARGE); - JsonObject output = doc.to(); + JsonObject output = doc.to(); + bool ha_created = ha_registered_; for (const EntityItem & entityItem : *entityItems) { render_value(output, entityItem); // create HA config @@ -382,11 +385,10 @@ void WebEntityService::publish(const bool force) { // add "availability" section Mqtt::add_avty_to_doc(stat_t, config.as(), val_cond); - if (Mqtt::queue_ha(topic, config.as())) { - ha_registered_ = true; - } + ha_created |= Mqtt::queue_ha(topic, config.as()); } } + ha_registered_ = ha_created; if (output.size() > 0) { Mqtt::queue_publish("custom_data", output); } diff --git a/src/web/WebEntityService.h b/src/web/WebEntityService.h index e58a7cb39..7df9c4243 100644 --- a/src/web/WebEntityService.h +++ b/src/web/WebEntityService.h @@ -63,6 +63,9 @@ class WebEntityService : public StatefulService { uint8_t count_entities(); uint8_t has_commands(); void generate_value_web(JsonObject & output); + void ha_reset() { + ha_registered_ = false; + } private: diff --git a/src/web/WebLogService.h b/src/web/WebLogService.h index aa852fabb..0f06bfff2 100644 --- a/src/web/WebLogService.h +++ b/src/web/WebLogService.h @@ -66,7 +66,7 @@ class WebLogService : public uuid::log::Handler { void setValues(AsyncWebServerRequest * request, JsonVariant & json); - AsyncCallbackJsonWebHandler setValues_; // for POSTs + AsyncCallbackJsonWebHandler setValues_; // for POSTs uint64_t last_transmit_ = 0; // Last transmit time size_t maximum_log_messages_ = MAX_LOG_MESSAGES; // Maximum number of log messages to buffer before they are output diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index b794e0335..b7b166a26 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -31,6 +31,7 @@ WebSchedulerService::WebSchedulerService(AsyncWebServer * server, FS * fs, Secur void WebSchedulerService::begin() { _fsPersistence.readFromFS(); EMSESP::logger().info("Starting Scheduler service"); + Mqtt::subscribe(EMSdevice::DeviceType::SCHEDULER, "scheduler/#", nullptr); // use empty function callback } // this creates the scheduler file, saving it to the FS @@ -70,6 +71,7 @@ StateUpdateResult WebScheduler::update(JsonObject & root, WebScheduler & webSche Command::erase_command(EMSdevice::DeviceType::SCHEDULER, scheduleItem.name.c_str()); } webScheduler.scheduleItems.clear(); + EMSESP::webSchedulerService.ha_reset(); if (root["schedule"].is()) { for (const JsonObject schedule : root["schedule"].as()) { @@ -85,7 +87,7 @@ StateUpdateResult WebScheduler::update(JsonObject & root, WebScheduler & webSche // calculated elapsed minutes si.elapsed_min = Helpers::string2minutes(si.time); - si.retry_cnt = 0xFF; // no startup retries + si.retry_cnt = 0xFF; // no startup retries webScheduler.scheduleItems.push_back(si); // add to list if (!webScheduler.scheduleItems.back().name.empty()) { @@ -218,6 +220,12 @@ void WebSchedulerService::publish_single(const char * name, const bool state) { // publish to Mqtt void WebSchedulerService::publish(const bool force) { + if (force) { + ha_registered_ = false; + } + if (!Mqtt::enabled()) { + return; + } EMSESP::webSchedulerService.read([&](WebScheduler & webScheduler) { scheduleItems = &webScheduler.scheduleItems; }); if (scheduleItems->size() == 0) { return; @@ -229,6 +237,7 @@ void WebSchedulerService::publish(const bool force) { } DynamicJsonDocument doc(EMSESP_JSON_SIZE_XLARGE); + bool ha_created = ha_registered_; for (const ScheduleItem & scheduleItem : *scheduleItems) { if (!scheduleItem.name.empty() && !doc.containsKey(scheduleItem.name)) { if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { @@ -241,7 +250,7 @@ void WebSchedulerService::publish(const bool force) { } // create HA config - if (Mqtt::ha_enabled() && force) { + if (Mqtt::ha_enabled() && !ha_registered_) { StaticJsonDocument config; char stat_t[50]; snprintf(stat_t, sizeof(stat_t), "%s/scheduler_data", Mqtt::basename().c_str()); @@ -283,10 +292,11 @@ void WebSchedulerService::publish(const bool force) { // add "availability" section Mqtt::add_avty_to_doc(stat_t, config.as(), val_cond); - Mqtt::queue_ha(topic, config.as()); + ha_created |= Mqtt::queue_ha(topic, config.as()); } } } + ha_registered_ = ha_created; if (doc.size() > 0) { Mqtt::queue_publish("scheduler_data", doc.as()); } diff --git a/src/web/WebSchedulerService.h b/src/web/WebSchedulerService.h index 57a9c8f22..ef012fc5a 100644 --- a/src/web/WebSchedulerService.h +++ b/src/web/WebSchedulerService.h @@ -22,8 +22,8 @@ #define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json" #define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST -#define SCHEDULEFLAG_SCHEDULE_TIMER 0x80 // 7th bit for Timer -#define MAX_STARTUP_RETRIES 3 // retry the start-up commands x times +#define SCHEDULEFLAG_SCHEDULE_TIMER 0x80 // 7th bit for Timer +#define MAX_STARTUP_RETRIES 3 // retry the start-up commands x times namespace emsesp { @@ -58,6 +58,9 @@ class WebSchedulerService : public StatefulService { bool has_commands(); bool command_setvalue(const char * value, const std::string name); bool get_value_info(JsonObject & output, const char * cmd); + void ha_reset() { + ha_registered_ = false; + } // make all functions public so we can test in the debug and standalone mode #ifndef EMSESP_STANDALONE @@ -69,6 +72,7 @@ class WebSchedulerService : public StatefulService { FSPersistence _fsPersistence; std::list * scheduleItems; // pointer to the list of schedule events + bool ha_registered_ = false; }; } // namespace emsesp diff --git a/src/web/WebStatusService.cpp b/src/web/WebStatusService.cpp index 86ec82683..b4ee7eaab 100644 --- a/src/web/WebStatusService.cpp +++ b/src/web/WebStatusService.cpp @@ -166,9 +166,9 @@ void WebStatusService::webStatusService(AsyncWebServerRequest * request) { if (Mqtt::enabled()) { statJson = statsJson.createNestedObject(); statJson["id"] = 5; - statJson["s"] = Mqtt::publish_count(); + statJson["s"] = Mqtt::publish_count() - Mqtt::publish_fails(); statJson["f"] = Mqtt::publish_fails(); - statJson["q"] = Mqtt::publish_count() == 0 ? 100 : 100 - (uint8_t)((100 * Mqtt::publish_fails()) / (Mqtt::publish_count() + Mqtt::publish_fails())); + statJson["q"] = Mqtt::publish_count() == 0 ? 100 : 100 - (uint8_t)((100 * Mqtt::publish_fails()) / Mqtt::publish_count()); } statJson = statsJson.createNestedObject(); @@ -228,61 +228,61 @@ void WebStatusService::mDNS_start() const { const char * WebStatusService::disconnectReason(uint8_t code) { #ifndef EMSESP_STANDALONE switch (code) { - case WIFI_REASON_UNSPECIFIED: // = 1, + case WIFI_REASON_UNSPECIFIED: // = 1, return "unspecified"; - case WIFI_REASON_AUTH_EXPIRE: // = 2, + case WIFI_REASON_AUTH_EXPIRE: // = 2, return "auth expire"; - case WIFI_REASON_AUTH_LEAVE: // = 3, + case WIFI_REASON_AUTH_LEAVE: // = 3, return "auth leave"; - case WIFI_REASON_ASSOC_EXPIRE: // = 4, + case WIFI_REASON_ASSOC_EXPIRE: // = 4, return "assoc expired"; - case WIFI_REASON_ASSOC_TOOMANY: // = 5, + case WIFI_REASON_ASSOC_TOOMANY: // = 5, return "assoc too many"; - case WIFI_REASON_NOT_AUTHED: // = 6, + case WIFI_REASON_NOT_AUTHED: // = 6, return "not authenticated"; - case WIFI_REASON_NOT_ASSOCED: // = 7, + case WIFI_REASON_NOT_ASSOCED: // = 7, return "not assoc"; - case WIFI_REASON_ASSOC_LEAVE: // = 8, + case WIFI_REASON_ASSOC_LEAVE: // = 8, return "assoc leave"; - case WIFI_REASON_ASSOC_NOT_AUTHED: // = 9, + case WIFI_REASON_ASSOC_NOT_AUTHED: // = 9, return "assoc not authed"; - case WIFI_REASON_DISASSOC_PWRCAP_BAD: // = 10, + case WIFI_REASON_DISASSOC_PWRCAP_BAD: // = 10, return "disassoc powerCAP bad"; - case WIFI_REASON_DISASSOC_SUPCHAN_BAD: // = 11, + case WIFI_REASON_DISASSOC_SUPCHAN_BAD: // = 11, return "disassoc supchan bad"; - case WIFI_REASON_IE_INVALID: // = 13, + case WIFI_REASON_IE_INVALID: // = 13, return "IE invalid"; - case WIFI_REASON_MIC_FAILURE: // = 14, + case WIFI_REASON_MIC_FAILURE: // = 14, return "MIC failure"; - case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: // = 15, + case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: // = 15, return "4way handshake timeout"; case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: // = 16, return "group key-update timeout"; - case WIFI_REASON_IE_IN_4WAY_DIFFERS: // = 17, + case WIFI_REASON_IE_IN_4WAY_DIFFERS: // = 17, return "IE in 4way differs"; - case WIFI_REASON_GROUP_CIPHER_INVALID: // = 18, + case WIFI_REASON_GROUP_CIPHER_INVALID: // = 18, return "group cipher invalid"; - case WIFI_REASON_PAIRWISE_CIPHER_INVALID: // = 19, + case WIFI_REASON_PAIRWISE_CIPHER_INVALID: // = 19, return "pairwise cipher invalid"; - case WIFI_REASON_AKMP_INVALID: // = 20, + case WIFI_REASON_AKMP_INVALID: // = 20, return "AKMP invalid"; - case WIFI_REASON_UNSUPP_RSN_IE_VERSION: // = 21, + case WIFI_REASON_UNSUPP_RSN_IE_VERSION: // = 21, return "unsupported RSN_IE version"; - case WIFI_REASON_INVALID_RSN_IE_CAP: // = 22, + case WIFI_REASON_INVALID_RSN_IE_CAP: // = 22, return "invalid RSN_IE_CAP"; - case WIFI_REASON_802_1X_AUTH_FAILED: // = 23, + case WIFI_REASON_802_1X_AUTH_FAILED: // = 23, return "802 X1 auth failed"; - case WIFI_REASON_CIPHER_SUITE_REJECTED: // = 24, + case WIFI_REASON_CIPHER_SUITE_REJECTED: // = 24, return "cipher suite rejected"; - case WIFI_REASON_BEACON_TIMEOUT: // = 200, + case WIFI_REASON_BEACON_TIMEOUT: // = 200, return "beacon timeout"; - case WIFI_REASON_NO_AP_FOUND: // = 201, + case WIFI_REASON_NO_AP_FOUND: // = 201, return "no AP found"; - case WIFI_REASON_AUTH_FAIL: // = 202, + case WIFI_REASON_AUTH_FAIL: // = 202, return "auth fail"; - case WIFI_REASON_ASSOC_FAIL: // = 203, + case WIFI_REASON_ASSOC_FAIL: // = 203, return "assoc fail"; - case WIFI_REASON_HANDSHAKE_TIMEOUT: // = 204, + case WIFI_REASON_HANDSHAKE_TIMEOUT: // = 204, return "handshake timeout"; default: return "unknown";