This commit is contained in:
MichaelDvP
2025-04-10 12:57:40 +02:00
11 changed files with 2030 additions and 1925 deletions

File diff suppressed because one or more lines are too long

948
interface/.yarn/releases/yarn-4.9.0.cjs vendored Executable file

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.8.1.cjs
yarnPath: .yarn/releases/yarn-4.9.0.cjs

View File

@@ -62,5 +62,5 @@
"vite-plugin-imagemin": "^0.6.1",
"vite-tsconfig-paths": "^5.1.4"
},
"packageManager": "yarn@4.8.1"
"packageManager": "yarn@4.9.0"
}

View File

@@ -2057,9 +2057,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.30001688":
version: 1.0.30001711
resolution: "caniuse-lite@npm:1.0.30001711"
checksum: 10c0/1a6a5c6c586bd7a54e8fa3e54f084b3d640defa2b58a64d22fb6acf30361a4efacc24cebe37e19890a5f198e9a2f1924135c526563008c614a105ca24863399b
version: 1.0.30001712
resolution: "caniuse-lite@npm:1.0.30001712"
checksum: 10c0/b3df8bdcc3335969380c2e47acb36c89bfc7f8fb4ef7ee2a5380e30ba46aa69e9d411654bc29894a06c201a1d60d490ab9b92787f3b66d7a7a38d71360e68215
languageName: node
linkType: hard
@@ -2640,9 +2640,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.5.73":
version: 1.5.132
resolution: "electron-to-chromium@npm:1.5.132"
checksum: 10c0/5dcbbed2a5be4b19812d54d4beb0c09a7f753793018255690f028346f96baf8b5c77f4d231a735321bf6f69f389bdd90c045c99deac61e8ce19183788ceb4fb4
version: 1.5.134
resolution: "electron-to-chromium@npm:1.5.134"
checksum: 10c0/ba0c8b3a86e139b142ce797e807f3a7b4b5708d8a550d820cc5467bf22fc62517fa9c2a38c4fec975c96f321f18918be1bcae41687f1715889a0ac6122fbfa6d
languageName: node
linkType: hard

View File

@@ -1,5 +1,5 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// Copyright © 2014-2025, Benoit BLANCHON
// MIT License
#pragma once
@@ -239,11 +239,11 @@
#define ARDUINOJSON_BIN2ALPHA_1111() P
#define ARDUINOJSON_BIN2ALPHA_(A, B, C, D) ARDUINOJSON_BIN2ALPHA_##A##B##C##D()
#define ARDUINOJSON_BIN2ALPHA(A, B, C, D) ARDUINOJSON_BIN2ALPHA_(A, B, C, D)
#define ARDUINOJSON_VERSION "7.3.0"
#define ARDUINOJSON_VERSION "7.4.0"
#define ARDUINOJSON_VERSION_MAJOR 7
#define ARDUINOJSON_VERSION_MINOR 3
#define ARDUINOJSON_VERSION_MINOR 4
#define ARDUINOJSON_VERSION_REVISION 0
#define ARDUINOJSON_VERSION_MACRO V730
#define ARDUINOJSON_VERSION_MACRO V740
#ifndef ARDUINOJSON_VERSION_NAMESPACE
# define ARDUINOJSON_VERSION_NAMESPACE \
ARDUINOJSON_CONCAT5( \
@@ -1018,6 +1018,14 @@ struct StringAdapter<TChar*, enable_if_t<IsChar<TChar>::value>> {
return AdaptedString(str, str ? ::strlen(str) : 0);
}
};
template <typename TChar>
struct StringAdapter<TChar[], enable_if_t<IsChar<TChar>::value>> {
using AdaptedString = RamString;
static AdaptedString adapt(const TChar* p) {
auto str = reinterpret_cast<const char*>(p);
return AdaptedString(str, str ? ::strlen(str) : 0);
}
};
template <size_t N>
struct StringAdapter<const char (&)[N]> {
using AdaptedString = RamString;
@@ -1029,8 +1037,9 @@ template <typename TChar, size_t N>
struct StringAdapter<TChar[N], enable_if_t<IsChar<TChar>::value>> {
using AdaptedString = RamString;
static AdaptedString adapt(const TChar* p) {
ARDUINOJSON_ASSERT(p);
auto str = reinterpret_cast<const char*>(p);
return AdaptedString(str, str ? ::strlen(str) : 0);
return AdaptedString(str, ::strlen(str));
}
};
template <typename TChar>
@@ -2003,8 +2012,9 @@ ARDUINOJSON_END_PUBLIC_NAMESPACE
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
class ObjectData : public CollectionData {
public:
template <typename TAdaptedString> // also works with StringNode*
template <typename TAdaptedString>
VariantData* addMember(TAdaptedString key, ResourceManager* resources);
VariantData* addPair(VariantData** value, ResourceManager* resources);
template <typename TAdaptedString>
VariantData* getOrAddMember(TAdaptedString key, ResourceManager* resources);
template <typename TAdaptedString>
@@ -2057,6 +2067,7 @@ enum class VariantTypeBits : uint8_t {
};
enum class VariantType : uint8_t {
Null = 0, // 0000 0000
TinyString = 0x02, // 0000 0010
RawString = 0x03, // 0000 0011
LinkedString = 0x04, // 0000 0100
OwnedString = 0x05, // 0000 0101
@@ -2077,6 +2088,7 @@ enum class VariantType : uint8_t {
inline bool operator&(VariantType type, VariantTypeBits bit) {
return (uint8_t(type) & uint8_t(bit)) != 0;
}
const size_t tinyStringMaxLength = 3;
union VariantContent {
VariantContent() {}
float asFloat;
@@ -2091,6 +2103,7 @@ union VariantContent {
CollectionData asCollection;
const char* asLinkedString;
struct StringNode* asOwnedString;
char asTinyString[tinyStringMaxLength + 1];
};
#if ARDUINOJSON_USE_EXTENSIONS
union VariantExtension {
@@ -2105,6 +2118,15 @@ union VariantExtension {
#endif
template <typename T>
T parseNumber(const char* s);
template <typename T>
static bool isTinyString(const T& s, size_t n) {
if (n > tinyStringMaxLength)
return false;
bool containsNul = false;
for (uint8_t i = 0; i < uint8_t(n); i++)
containsNul |= !s[i];
return !containsNul;
}
class VariantData {
VariantContent content_; // must be first to allow cast from array to variant
VariantType type_;
@@ -2140,6 +2162,8 @@ class VariantData {
return visit.visit(content_.asArray);
case VariantType::Object:
return visit.visit(content_.asObject);
case VariantType::TinyString:
return visit.visit(JsonString(content_.asTinyString));
case VariantType::LinkedString:
return visit.visit(JsonString(content_.asLinkedString, true));
case VariantType::OwnedString:
@@ -2243,6 +2267,7 @@ class VariantData {
#else
(void)resources; // silence warning
#endif
const char* str = nullptr;
switch (type_) {
case VariantType::Boolean:
return static_cast<T>(content_.asBoolean);
@@ -2256,9 +2281,15 @@ class VariantData {
case VariantType::Int64:
return static_cast<T>(extension->asInt64);
#endif
case VariantType::TinyString:
str = content_.asTinyString;
break;
case VariantType::LinkedString:
str = content_.asLinkedString;
break;
case VariantType::OwnedString:
return parseNumber<T>(content_.asOwnedString->data);
str = content_.asOwnedString->data;
break;
case VariantType::Float:
return static_cast<T>(content_.asFloat);
#if ARDUINOJSON_USE_DOUBLE
@@ -2266,8 +2297,10 @@ class VariantData {
return static_cast<T>(extension->asDouble);
#endif
default:
return 0;
return 0.0;
}
ARDUINOJSON_ASSERT(str != nullptr);
return parseNumber<T>(str);
}
template <typename T>
T asIntegral(const ResourceManager* resources) const {
@@ -2277,6 +2310,7 @@ class VariantData {
#else
(void)resources; // silence warning
#endif
const char* str = nullptr;
switch (type_) {
case VariantType::Boolean:
return content_.asBoolean;
@@ -2290,10 +2324,15 @@ class VariantData {
case VariantType::Int64:
return convertNumber<T>(extension->asInt64);
#endif
case VariantType::TinyString:
str = content_.asTinyString;
break;
case VariantType::LinkedString:
return parseNumber<T>(content_.asLinkedString);
str = content_.asLinkedString;
break;
case VariantType::OwnedString:
return parseNumber<T>(content_.asOwnedString->data);
str = content_.asOwnedString->data;
break;
case VariantType::Float:
return convertNumber<T>(content_.asFloat);
#if ARDUINOJSON_USE_DOUBLE
@@ -2303,6 +2342,8 @@ class VariantData {
default:
return 0;
}
ARDUINOJSON_ASSERT(str != nullptr);
return parseNumber<T>(str);
}
ObjectData* asObject() {
return isObject() ? &content_.asObject : 0;
@@ -2321,6 +2362,8 @@ class VariantData {
}
JsonString asString() const {
switch (type_) {
case VariantType::TinyString:
return JsonString(content_.asTinyString);
case VariantType::LinkedString:
return JsonString(content_.asLinkedString, true);
case VariantType::OwnedString:
@@ -2415,7 +2458,8 @@ class VariantData {
}
bool isString() const {
return type_ == VariantType::LinkedString ||
type_ == VariantType::OwnedString;
type_ == VariantType::OwnedString ||
type_ == VariantType::TinyString;
}
size_t nesting(const ResourceManager* resources) const {
auto collection = asCollection();
@@ -2450,7 +2494,7 @@ class VariantData {
return;
var->removeMember(key, resources);
}
void reset() {
void reset() { // TODO: remove
type_ = VariantType::Null;
}
void setBoolean(bool value) {
@@ -2491,10 +2535,6 @@ class VariantData {
}
template <typename TAdaptedString>
bool setString(TAdaptedString value, ResourceManager* resources);
bool setString(StringNode* s, ResourceManager*) {
setOwnedString(s);
return true;
}
template <typename TAdaptedString>
static void setString(VariantData* var, TAdaptedString value,
ResourceManager* resources) {
@@ -2509,6 +2549,14 @@ class VariantData {
type_ = VariantType::LinkedString;
content_.asLinkedString = s;
}
void setTinyString(const char* s, uint8_t n) {
ARDUINOJSON_ASSERT(type_ == VariantType::Null); // must call clear() first
ARDUINOJSON_ASSERT(s);
type_ = VariantType::TinyString;
for (uint8_t i = 0; i < n; i++)
content_.asTinyString[i] = s[i];
content_.asTinyString[n] = 0;
}
void setOwnedString(StringNode* s) {
ARDUINOJSON_ASSERT(type_ == VariantType::Null); // must call clear() first
ARDUINOJSON_ASSERT(s);
@@ -4313,7 +4361,7 @@ template <typename T, typename Enable = void>
struct Comparer;
template <typename T>
struct Comparer<T, enable_if_t<IsString<T>::value>> : ComparerBase {
T rhs;
T rhs; // TODO: store adapted string?
explicit Comparer(T value) : rhs(value) {}
CompareResult visit(JsonString lhs) {
int i = stringCompare(adaptString(rhs), adaptString(lhs));
@@ -4812,6 +4860,18 @@ inline VariantData* ObjectData::addMember(TAdaptedString key,
CollectionData::appendPair(keySlot, valueSlot, resources);
return valueSlot.ptr();
}
inline VariantData* ObjectData::addPair(VariantData** value,
ResourceManager* resources) {
auto keySlot = resources->allocVariant();
if (!keySlot)
return nullptr;
auto valueSlot = resources->allocVariant();
if (!valueSlot)
return nullptr;
*value = valueSlot.ptr();
CollectionData::appendPair(keySlot, valueSlot, resources);
return keySlot.ptr();
}
constexpr size_t sizeofObject(size_t n) {
return 2 * n * ResourceManager::slotSize;
}
@@ -5358,10 +5418,16 @@ class StringBuilder {
if (!node_)
node_ = resources_->createString(initialCapacity);
}
StringNode* save() {
void save(VariantData* variant) {
ARDUINOJSON_ASSERT(variant != nullptr);
ARDUINOJSON_ASSERT(node_ != nullptr);
node_->data[size_] = 0;
StringNode* node = resources_->getString(adaptString(node_->data, size_));
char* p = node_->data;
if (isTinyString(p, size_)) {
variant->setTinyString(p, static_cast<uint8_t>(size_));
return;
}
p[size_] = 0;
StringNode* node = resources_->getString(adaptString(p, size_));
if (!node) {
node = resources_->resizeString(node_, size_);
ARDUINOJSON_ASSERT(node != nullptr); // realloc to smaller can't fail
@@ -5370,14 +5436,14 @@ class StringBuilder {
} else {
node->references++;
}
return node;
variant->setOwnedString(node);
}
void append(const char* s) {
while (*s)
append(*s++);
}
void append(const char* s, size_t n) {
while (n-- > 0)
while (n-- > 0) // TODO: memcpy
append(*s++);
}
void append(char c) {
@@ -5583,9 +5649,9 @@ class StringBuilderPrint : public Print {
StringBuilderPrint(ResourceManager* resources) : copier_(resources) {
copier_.startString();
}
StringNode* save() {
void save(VariantData* data) {
ARDUINOJSON_ASSERT(!overflowed());
return copier_.save();
copier_.save(data);
}
size_t write(uint8_t c) {
copier_.append(char(c));
@@ -5616,7 +5682,7 @@ inline void convertToJson(const ::Printable& src, JsonVariant dst) {
src.printTo(print);
if (print.overflowed())
return;
data->setOwnedString(print.save());
print.save(data);
}
#endif
#if ARDUINOJSON_ENABLE_ARDUINO_STRING
@@ -5762,6 +5828,10 @@ inline bool VariantData::setString(TAdaptedString value,
setLinkedString(value.data());
return true;
}
if (isTinyString(value, value.size())) {
setTinyString(value.data(), uint8_t(value.size()));
return true;
}
auto dup = resources->saveString(value);
if (dup) {
setOwnedString(dup);
@@ -6883,10 +6953,10 @@ class JsonDeserializer {
if (memberFilter.allow()) {
auto member = object.getMember(adaptString(key), resources_);
if (!member) {
auto savedKey = stringBuilder_.save();
member = object.addMember(savedKey, resources_);
if (!member)
auto keyVariant = object.addPair(&member, resources_);
if (!keyVariant)
return DeserializationError::NoMemory;
stringBuilder_.save(keyVariant);
} else {
member->clear(resources_);
}
@@ -6960,7 +7030,7 @@ class JsonDeserializer {
err = parseQuotedString();
if (err)
return err;
variant.setOwnedString(stringBuilder_.save());
stringBuilder_.save(&variant);
return DeserializationError::Ok;
}
DeserializationError::Code parseQuotedString() {
@@ -7412,7 +7482,23 @@ class StringBuffer {
node_->data[capacity] = 0; // null-terminate the string
return node_->data;
}
StringNode* save() {
JsonString str() const {
ARDUINOJSON_ASSERT(node_ != nullptr);
return JsonString(node_->data, node_->length);
}
void save(VariantData* data) {
ARDUINOJSON_ASSERT(node_ != nullptr);
const char* s = node_->data;
if (isTinyString(s, size_))
data->setTinyString(s, static_cast<uint8_t>(size_));
else
data->setOwnedString(commitStringNode());
}
void saveRaw(VariantData* data) {
data->setRawString(commitStringNode());
}
private:
StringNode* commitStringNode() {
ARDUINOJSON_ASSERT(node_ != nullptr);
node_->data[size_] = 0;
auto node = resources_->getString(adaptString(node_->data, size_));
@@ -7430,11 +7516,6 @@ class StringBuffer {
resources_->saveString(node);
return node;
}
JsonString str() const {
ARDUINOJSON_ASSERT(node_ != nullptr);
return JsonString(node_->data, node_->length);
}
private:
ResourceManager* resources_;
StringNode* node_ = nullptr;
size_t size_ = 0;
@@ -7704,7 +7785,7 @@ class MsgPackDeserializer {
err = readString(n);
if (err)
return err;
variant->setOwnedString(stringBuffer_.save());
stringBuffer_.save(variant);
return DeserializationError::Ok;
}
DeserializationError::Code readString(size_t n) {
@@ -7726,7 +7807,7 @@ class MsgPackDeserializer {
auto err = readBytes(p + headerSize, n);
if (err)
return err;
variant->setRawString(stringBuffer_.save());
stringBuffer_.saveRaw(variant);
return DeserializationError::Ok;
}
template <typename TFilter>
@@ -7781,15 +7862,13 @@ class MsgPackDeserializer {
return err;
JsonString key = stringBuffer_.str();
TFilter memberFilter = filter[key.c_str()];
VariantData* member;
VariantData* member = 0;
if (memberFilter.allow()) {
ARDUINOJSON_ASSERT(object != 0);
auto savedKey = stringBuffer_.save();
member = object->addMember(savedKey, resources_);
if (!member)
auto keyVariant = object->addPair(&member, resources_);
if (!keyVariant)
return DeserializationError::NoMemory;
} else {
member = 0;
stringBuffer_.save(keyVariant);
}
err = parseVariant(member, memberFilter, nestingLimit.decrement());
if (err)

File diff suppressed because one or more lines are too long

948
mock-api/.yarn/releases/yarn-4.9.0.cjs vendored Executable file

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.8.1.cjs
yarnPath: .yarn/releases/yarn-4.9.0.cjs

View File

@@ -15,5 +15,5 @@
"itty-router": "^5.0.18",
"prettier": "^3.5.3"
},
"packageManager": "yarn@4.8.1"
"packageManager": "yarn@4.9.0"
}

View File

@@ -100,10 +100,10 @@ monitor_filters = direct
build_type = release
board_build.filesystem = littlefs
lib_deps =
bblanchon/ArduinoJson @ 7.3.1
bblanchon/ArduinoJson @ 7.4.0
ESP32Async/AsyncTCP @ 3.3.8
ESP32Async/ESPAsyncWebServer @ 3.7.6
https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.5
https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.6
;
; Builds for different board types