diff --git a/DEPENDENCIES b/DEPENDENCIES index ddf3c9bfc..9df0ec45e 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -1,4 +1,4 @@ vendorpull https://github.com/sourcemeta/vendorpull 1dcbac42809cf87cb5b045106b863e17ad84ba02 -core https://github.com/sourcemeta/core aa314809fdb59ed6fcb1b10b3087f32eebf708c5 -blaze https://github.com/sourcemeta/blaze 5554d3106d7920b28b852e929f0a31d7805effe1 +core https://github.com/sourcemeta/core 39431ca30471bb248effafb841f937962bf8291c +blaze https://github.com/sourcemeta/blaze b10fca7344e3a11048587a7b904e5710fbb448d3 bootstrap https://github.com/twbs/bootstrap 1a6fdfae6be09b09eaced8f0e442ca6f7680a61e diff --git a/cmake/FindCore.cmake b/cmake/FindCore.cmake index f64baf8d2..41c6c0e3e 100644 --- a/cmake/FindCore.cmake +++ b/cmake/FindCore.cmake @@ -5,7 +5,6 @@ if(NOT Core_FOUND) set(SOURCEMETA_CORE_INSTALL OFF CACHE BOOL "disable installation") endif() - set(SOURCEMETA_CORE_TIME OFF CACHE BOOL "disable") set(SOURCEMETA_CORE_UUID OFF CACHE BOOL "disable") set(SOURCEMETA_CORE_GZIP OFF CACHE BOOL "disable") set(SOURCEMETA_CORE_MD5 OFF CACHE BOOL "disable") diff --git a/config.cmake.in b/config.cmake.in index 537141d0c..7b5987308 100644 --- a/config.cmake.in +++ b/config.cmake.in @@ -9,8 +9,8 @@ if(NOT JSONBINPACK_COMPONENTS) endif() include(CMakeFindDependencyMacro) -find_dependency(Core COMPONENTS numeric regex uri json jsonpointer jsonschema io) -find_dependency(Blaze COMPONENTS alterschema) +find_dependency(Core COMPONENTS numeric regex uri json jsonpointer io) +find_dependency(Blaze COMPONENTS foundation alterschema) foreach(component ${JSONBINPACK_COMPONENTS}) if(component STREQUAL "runtime") diff --git a/src/compiler/CMakeLists.txt b/src/compiler/CMakeLists.txt index 01b7364af..7fb220f4f 100644 --- a/src/compiler/CMakeLists.txt +++ b/src/compiler/CMakeLists.txt @@ -29,6 +29,6 @@ target_link_libraries(sourcemeta_jsonbinpack_compiler PUBLIC target_link_libraries(sourcemeta_jsonbinpack_compiler PRIVATE sourcemeta::core::jsonpointer) target_link_libraries(sourcemeta_jsonbinpack_compiler PUBLIC - sourcemeta::core::jsonschema) + sourcemeta::blaze::foundation) target_link_libraries(sourcemeta_jsonbinpack_compiler PRIVATE sourcemeta::blaze::alterschema) diff --git a/src/compiler/compiler.cc b/src/compiler/compiler.cc index 309298bea..62f6666a1 100644 --- a/src/compiler/compiler.cc +++ b/src/compiler/compiler.cc @@ -21,8 +21,8 @@ static auto transformer_callback_noop( namespace sourcemeta::jsonbinpack { auto canonicalize(sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const std::string_view default_dialect) -> void { sourcemeta::blaze::SchemaTransformer canonicalizer; sourcemeta::blaze::add(canonicalizer, @@ -59,8 +59,8 @@ auto make_encoding(sourcemeta::core::JSON &document, #include "mapper/number_arbitrary.h" auto compile(sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const std::string_view default_dialect) -> void { canonicalize(schema, walker, resolver, default_dialect); @@ -93,7 +93,7 @@ auto compile(sourcemeta::core::JSON &schema, assert(mapper_result.first); // The "any" encoding is always the last resort - const auto dialect{sourcemeta::core::dialect(schema)}; + const auto dialect{sourcemeta::blaze::dialect(schema)}; if (dialect.empty() || dialect != ENCODING_V1) { make_encoding(schema, "ANY_PACKED_TYPE_TAG_BYTE_PREFIX", sourcemeta::core::JSON::make_object()); diff --git a/src/compiler/encoding.h b/src/compiler/encoding.h index 77b7c62f5..ed618adfd 100644 --- a/src/compiler/encoding.h +++ b/src/compiler/encoding.h @@ -1,14 +1,14 @@ #ifndef SOURCEMETA_JSONBINPACK_COMPILER_ENCODING_H_ #define SOURCEMETA_JSONBINPACK_COMPILER_ENCODING_H_ +#include #include -#include namespace sourcemeta::jsonbinpack { constexpr auto ENCODING_V1{"tag:sourcemeta.com,2024:jsonbinpack/encoding/v1"}; -inline auto make_resolver(const sourcemeta::core::SchemaResolver &fallback) +inline auto make_resolver(const sourcemeta::blaze::SchemaResolver &fallback) -> auto { return [&fallback](std::string_view identifier) -> std::optional { diff --git a/src/compiler/include/sourcemeta/jsonbinpack/compiler.h b/src/compiler/include/sourcemeta/jsonbinpack/compiler.h index c1ec85a9d..05eb55729 100644 --- a/src/compiler/include/sourcemeta/jsonbinpack/compiler.h +++ b/src/compiler/include/sourcemeta/jsonbinpack/compiler.h @@ -14,8 +14,8 @@ /// #include /// ``` +#include #include -#include #include // std::string_view @@ -29,7 +29,7 @@ namespace sourcemeta::jsonbinpack { /// ```cpp /// #include /// #include -/// #include +/// #include /// /// #include /// @@ -39,16 +39,16 @@ namespace sourcemeta::jsonbinpack { /// })JSON")}; /// /// sourcemeta::jsonbinpack::compile( -/// schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); +/// schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); /// /// sourcemeta::core::prettify(schema, std::cout); /// std::cout << std::endl; /// ``` SOURCEMETA_JSONBINPACK_COMPILER_EXPORT auto compile(sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect = "") -> void; /// @ingroup compiler @@ -61,7 +61,7 @@ auto compile(sourcemeta::core::JSON &schema, /// ```cpp /// #include /// #include -/// #include +/// #include /// /// #include /// @@ -71,16 +71,16 @@ auto compile(sourcemeta::core::JSON &schema, /// })JSON")}; /// /// sourcemeta::jsonbinpack::canonicalize( -/// schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); +/// schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); /// /// sourcemeta::core::prettify(schema, std::cout); /// std::cout << std::endl; /// ``` SOURCEMETA_JSONBINPACK_COMPILER_EXPORT auto canonicalize(sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect = "") -> void; } // namespace sourcemeta::jsonbinpack diff --git a/src/compiler/mapper/enum_8_bit.h b/src/compiler/mapper/enum_8_bit.h index 85dbe2ea6..ad16d83d0 100644 --- a/src/compiler/mapper/enum_8_bit.h +++ b/src/compiler/mapper/enum_8_bit.h @@ -8,14 +8,14 @@ class Enum8Bit final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("enum") && schema.at("enum").is_array() && !location.pointer.empty() && diff --git a/src/compiler/mapper/enum_8_bit_top_level.h b/src/compiler/mapper/enum_8_bit_top_level.h index 6618cd83d..e4c17f960 100644 --- a/src/compiler/mapper/enum_8_bit_top_level.h +++ b/src/compiler/mapper/enum_8_bit_top_level.h @@ -8,14 +8,14 @@ class Enum8BitTopLevel final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("enum") && schema.at("enum").is_array() && location.pointer.empty() && diff --git a/src/compiler/mapper/enum_arbitrary.h b/src/compiler/mapper/enum_arbitrary.h index c3864c21d..ad6a258e9 100644 --- a/src/compiler/mapper/enum_arbitrary.h +++ b/src/compiler/mapper/enum_arbitrary.h @@ -9,14 +9,14 @@ class EnumArbitrary final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("enum") && schema.at("enum").is_array() && !location.pointer.empty() && diff --git a/src/compiler/mapper/enum_singleton.h b/src/compiler/mapper/enum_singleton.h index 002cea77b..1098253cc 100644 --- a/src/compiler/mapper/enum_singleton.h +++ b/src/compiler/mapper/enum_singleton.h @@ -8,14 +8,14 @@ class EnumSingleton final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("enum") && schema.at("enum").is_array() && schema.at("enum").size() == 1; diff --git a/src/compiler/mapper/integer_bounded_8_bit.h b/src/compiler/mapper/integer_bounded_8_bit.h index fa68accab..6f2749cfc 100644 --- a/src/compiler/mapper/integer_bounded_8_bit.h +++ b/src/compiler/mapper/integer_bounded_8_bit.h @@ -8,14 +8,14 @@ class IntegerBounded8Bit final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/integer_bounded_greater_than_8_bit.h b/src/compiler/mapper/integer_bounded_greater_than_8_bit.h index 63a5673a8..99fca3fbf 100644 --- a/src/compiler/mapper/integer_bounded_greater_than_8_bit.h +++ b/src/compiler/mapper/integer_bounded_greater_than_8_bit.h @@ -10,14 +10,14 @@ class IntegerBoundedGreaterThan8Bit final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/integer_bounded_multiplier_8_bit.h b/src/compiler/mapper/integer_bounded_multiplier_8_bit.h index 508a4f368..77b5c99a7 100644 --- a/src/compiler/mapper/integer_bounded_multiplier_8_bit.h +++ b/src/compiler/mapper/integer_bounded_multiplier_8_bit.h @@ -10,14 +10,14 @@ class IntegerBoundedMultiplier8Bit final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { if (location.dialect != "https://json-schema.org/draft/2020-12/schema" || - !vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + !vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) || !schema.is_object() || !schema.defines("type") || schema.at("type").to_string() != "integer" || diff --git a/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h b/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h index e14606a63..d4133f992 100644 --- a/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h +++ b/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h @@ -10,14 +10,14 @@ class IntegerBoundedMultiplierGreaterThan8Bit final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { if (location.dialect != "https://json-schema.org/draft/2020-12/schema" || - !vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + !vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) || !schema.is_object() || !schema.defines("type") || schema.at("type").to_string() != "integer" || diff --git a/src/compiler/mapper/integer_lower_bound.h b/src/compiler/mapper/integer_lower_bound.h index c14247eb6..e8dcceb61 100644 --- a/src/compiler/mapper/integer_lower_bound.h +++ b/src/compiler/mapper/integer_lower_bound.h @@ -8,14 +8,14 @@ class IntegerLowerBound final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/integer_lower_bound_multiplier.h b/src/compiler/mapper/integer_lower_bound_multiplier.h index 9207eb5b5..82b385c64 100644 --- a/src/compiler/mapper/integer_lower_bound_multiplier.h +++ b/src/compiler/mapper/integer_lower_bound_multiplier.h @@ -10,14 +10,14 @@ class IntegerLowerBoundMultiplier final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/integer_unbound.h b/src/compiler/mapper/integer_unbound.h index 4eecb701d..f157ba1bc 100644 --- a/src/compiler/mapper/integer_unbound.h +++ b/src/compiler/mapper/integer_unbound.h @@ -8,14 +8,14 @@ class IntegerUnbound final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/integer_unbound_multiplier.h b/src/compiler/mapper/integer_unbound_multiplier.h index 78a8a0ce5..afba029a4 100644 --- a/src/compiler/mapper/integer_unbound_multiplier.h +++ b/src/compiler/mapper/integer_unbound_multiplier.h @@ -10,14 +10,14 @@ class IntegerUnboundMultiplier final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/integer_upper_bound.h b/src/compiler/mapper/integer_upper_bound.h index 499646443..01f1fcfa5 100644 --- a/src/compiler/mapper/integer_upper_bound.h +++ b/src/compiler/mapper/integer_upper_bound.h @@ -8,14 +8,14 @@ class IntegerUpperBound final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/integer_upper_bound_multiplier.h b/src/compiler/mapper/integer_upper_bound_multiplier.h index 044ae6e17..3a38d2094 100644 --- a/src/compiler/mapper/integer_upper_bound_multiplier.h +++ b/src/compiler/mapper/integer_upper_bound_multiplier.h @@ -10,14 +10,14 @@ class IntegerUpperBoundMultiplier final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "integer" && diff --git a/src/compiler/mapper/number_arbitrary.h b/src/compiler/mapper/number_arbitrary.h index 8709fb497..006ff9fda 100644 --- a/src/compiler/mapper/number_arbitrary.h +++ b/src/compiler/mapper/number_arbitrary.h @@ -8,14 +8,14 @@ class NumberArbitrary final : public sourcemeta::blaze::SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> sourcemeta::blaze::SchemaTransformRule::Result override { return location.dialect == "https://json-schema.org/draft/2020-12/schema" && - vocabularies.contains(sourcemeta::core::Vocabularies::Known:: + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: JSON_Schema_2020_12_Validation) && schema.is_object() && schema.defines("type") && schema.at("type").to_string() == "number"; diff --git a/test/compiler/2020_12_compiler_any_test.cc b/test/compiler/2020_12_compiler_any_test.cc index f6dc629e8..8f2fd36a3 100644 --- a/test/compiler/2020_12_compiler_any_test.cc +++ b/test/compiler/2020_12_compiler_any_test.cc @@ -9,8 +9,8 @@ TEST(JSONBinPack_Compiler_Any_2020_12, enum_singleton) { "enum": [ 2 ] })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -29,8 +29,8 @@ TEST(JSONBinPack_Compiler_Any_2020_12, const_scalar) { "const": 2 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -49,8 +49,8 @@ TEST(JSONBinPack_Compiler_Any_2020_12, enum_small_top_level) { "enum": [ 1, 2, 3 ] })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -68,8 +68,8 @@ TEST(JSONBinPack_Compiler_Any_2020_12, only_metaschema) { "$schema": "https://json-schema.org/draft/2020-12/schema" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -84,8 +84,8 @@ TEST(JSONBinPack_Compiler_Any_2020_12, empty) { auto schema = sourcemeta::core::parse_json("{}"); sourcemeta::jsonbinpack::compile( - schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver, + schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver, "https://json-schema.org/draft/2020-12/schema"); const auto expected = sourcemeta::core::parse_json(R"JSON({ diff --git a/test/compiler/2020_12_compiler_integer_test.cc b/test/compiler/2020_12_compiler_integer_test.cc index 22513d017..436274599 100644 --- a/test/compiler/2020_12_compiler_integer_test.cc +++ b/test/compiler/2020_12_compiler_integer_test.cc @@ -11,8 +11,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, maximum_minimum_8_bit) { "maximum": 100 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -36,8 +36,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, maximum_minimum_multiplier_8_bit) { "multipleOf": 5 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -60,8 +60,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, maximum_minimum_greater_than_8_bit) { "maximum": 100000 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -85,8 +85,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, "multipleOf": 5 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -107,8 +107,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, minimum) { "minimum": 0 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -130,8 +130,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, minimum_multiplier) { "multipleOf": 5 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -152,8 +152,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, maximum) { "maximum": 100 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -175,8 +175,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, maximum_multiplier) { "multipleOf": 5 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -196,8 +196,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, unbounded) { "type": "integer" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -217,8 +217,8 @@ TEST(JSONBinPack_Compiler_Integer_2020_12, unbounded_multiplier) { "multipleOf": 5 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", diff --git a/test/compiler/2020_12_compiler_number_test.cc b/test/compiler/2020_12_compiler_number_test.cc index 544f5cb45..a134273b9 100644 --- a/test/compiler/2020_12_compiler_number_test.cc +++ b/test/compiler/2020_12_compiler_number_test.cc @@ -9,8 +9,8 @@ TEST(JSONBinPack_Compiler_Number_2020_12, arbitrary) { "type": "number" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", diff --git a/test/compiler/CMakeLists.txt b/test/compiler/CMakeLists.txt index 2e091fc43..6c7c3df3a 100644 --- a/test/compiler/CMakeLists.txt +++ b/test/compiler/CMakeLists.txt @@ -12,4 +12,4 @@ target_link_libraries(sourcemeta_jsonbinpack_compiler_unit target_link_libraries(sourcemeta_jsonbinpack_compiler_unit PRIVATE sourcemeta::core::json) target_link_libraries(sourcemeta_jsonbinpack_compiler_unit - PRIVATE sourcemeta::core::jsonschema) + PRIVATE sourcemeta::blaze::foundation) diff --git a/test/compiler/canonicalizer_test.cc b/test/compiler/canonicalizer_test.cc index d2b845b53..89b92eb96 100644 --- a/test/compiler/canonicalizer_test.cc +++ b/test/compiler/canonicalizer_test.cc @@ -1,7 +1,7 @@ #include +#include #include -#include #include #include // std::optional @@ -15,7 +15,7 @@ static auto test_resolver(std::string_view identifier) "$id": "https://jsonbinpack.sourcemeta.com/draft/unknown" })JSON"); } else { - return sourcemeta::core::schema_resolver(identifier); + return sourcemeta::blaze::schema_resolver(identifier); } } @@ -26,8 +26,8 @@ TEST(JSONBinPack_Canonicalizer, unsupported_draft) { })JSON"); EXPECT_THROW(sourcemeta::jsonbinpack::canonicalize( - schema, sourcemeta::core::schema_walker, test_resolver), - sourcemeta::core::SchemaUnknownBaseDialectError); + schema, sourcemeta::blaze::schema_walker, test_resolver), + sourcemeta::blaze::SchemaUnknownBaseDialectError); } TEST(JSONBinPack_Canonicalizer, unknown_draft) { @@ -36,7 +36,7 @@ TEST(JSONBinPack_Canonicalizer, unknown_draft) { })JSON"); EXPECT_THROW(sourcemeta::jsonbinpack::canonicalize( - schema, sourcemeta::core::schema_walker, test_resolver, + schema, sourcemeta::blaze::schema_walker, test_resolver, "https://example.com/invalid"), - sourcemeta::core::SchemaResolutionError); + sourcemeta::blaze::SchemaResolutionError); } diff --git a/test/compiler/compiler_test.cc b/test/compiler/compiler_test.cc index 5c5ef372a..0ae463d51 100644 --- a/test/compiler/compiler_test.cc +++ b/test/compiler/compiler_test.cc @@ -10,8 +10,8 @@ TEST(JSONBinPack_Compiler, dialect_2020_12) { "$schema": "https://json-schema.org/draft/2020-12/schema" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -27,8 +27,8 @@ TEST(JSONBinPack_Compiler, dialect_2019_09) { "$schema": "https://json-schema.org/draft/2019-09/schema" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -44,8 +44,8 @@ TEST(JSONBinPack_Compiler, dialect_draft7) { "$schema": "http://json-schema.org/draft-07/schema#" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -61,8 +61,8 @@ TEST(JSONBinPack_Compiler, dialect_draft6) { "$schema": "http://json-schema.org/draft-06/schema#" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -78,8 +78,8 @@ TEST(JSONBinPack_Compiler, dialect_draft4) { "$schema": "http://json-schema.org/draft-04/schema#" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -95,8 +95,8 @@ TEST(JSONBinPack_Compiler, dialect_draft3) { "$schema": "http://json-schema.org/draft-03/schema#" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -112,8 +112,8 @@ TEST(JSONBinPack_Compiler, dialect_draft2) { "$schema": "http://json-schema.org/draft-02/schema#" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -129,8 +129,8 @@ TEST(JSONBinPack_Compiler, dialect_draft1) { "$schema": "http://json-schema.org/draft-01/schema#" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -146,8 +146,8 @@ TEST(JSONBinPack_Compiler, dialect_draft0) { "$schema": "http://json-schema.org/draft-00/schema#" })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const auto expected = sourcemeta::core::parse_json(R"JSON({ "$schema": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1", @@ -164,8 +164,8 @@ TEST(JSONBinPack_Compiler, unknown_dialect_default) { })JSON"); sourcemeta::jsonbinpack::compile( - schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver, + schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver, "https://json-schema.org/draft/2020-12/schema"); const auto expected = sourcemeta::core::parse_json(R"JSON({ @@ -185,9 +185,9 @@ TEST(JSONBinPack_Compiler, unknown_dialect_without_default) { })JSON"); EXPECT_THROW( - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver), - sourcemeta::core::SchemaUnknownBaseDialectError); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver), + sourcemeta::blaze::SchemaUnknownBaseDialectError); } TEST(JSONBinPack_Compiler, invalid_dialect) { @@ -197,7 +197,7 @@ TEST(JSONBinPack_Compiler, invalid_dialect) { })JSON"); EXPECT_THROW( - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver), - sourcemeta::core::SchemaResolutionError); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver), + sourcemeta::blaze::SchemaResolutionError); } diff --git a/test/e2e/runner.cc b/test/e2e/runner.cc index 541204c44..2c7897bbb 100644 --- a/test/e2e/runner.cc +++ b/test/e2e/runner.cc @@ -1,8 +1,8 @@ #include #include +#include #include -#include #include // assert #include // EXIT_SUCCESS, EXIT_FAILURE @@ -34,25 +34,25 @@ auto main(int argc, char *argv[]) -> int { sourcemeta::core::JSON schema = sourcemeta::core::read_json(schema_path); // Canonicalize - sourcemeta::jsonbinpack::canonicalize(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver, - DEFAULT_METASCHEMA); + sourcemeta::jsonbinpack::canonicalize( + schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver, DEFAULT_METASCHEMA); std::ofstream canonical_output_stream(directory / "canonical.json", std::ios::binary); canonical_output_stream.exceptions(std::ios_base::badbit); - sourcemeta::core::format(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver, - "https://json-schema.org/draft/2020-12/schema"); + sourcemeta::blaze::format(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver, + "https://json-schema.org/draft/2020-12/schema"); sourcemeta::core::prettify(schema, canonical_output_stream); canonical_output_stream << "\n"; canonical_output_stream.flush(); canonical_output_stream.close(); // Compile - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver, + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver, DEFAULT_METASCHEMA); std::ofstream encoding_output_stream(directory / "encoding.json", diff --git a/test/packaging/find_package/hello.cc b/test/packaging/find_package/hello.cc index 91a007325..6ff79481b 100644 --- a/test/packaging/find_package/hello.cc +++ b/test/packaging/find_package/hello.cc @@ -1,8 +1,8 @@ #include #include +#include #include -#include #include // EXIT_SUCCESS #include // std::cout @@ -15,8 +15,8 @@ auto main() -> int { "maximum": 100 })JSON"); - sourcemeta::jsonbinpack::compile(schema, sourcemeta::core::schema_walker, - sourcemeta::core::schema_resolver); + sourcemeta::jsonbinpack::compile(schema, sourcemeta::blaze::schema_walker, + sourcemeta::blaze::schema_resolver); const sourcemeta::jsonbinpack::Encoding encoding{ sourcemeta::jsonbinpack::load(schema)}; diff --git a/vendor/blaze/CMakeLists.txt b/vendor/blaze/CMakeLists.txt index 64f5f6c17..3369d4d8a 100644 --- a/vendor/blaze/CMakeLists.txt +++ b/vendor/blaze/CMakeLists.txt @@ -13,6 +13,8 @@ option(BLAZE_CONFIGURATION "Build the Blaze configuration file library" ON) option(BLAZE_ALTERSCHEMA "Build the Blaze alterschema rule library" ON) option(BLAZE_CODEGEN "Build the Blaze codegen library" ON) option(BLAZE_DOCUMENTATION "Build the Blaze documentation generator library" ON) +option(BLAZE_EDITOR "Build the Blaze editor schema compatibility library" ON) +option(BLAZE_FOUNDATION "Build the Blaze foundation JSON Schema library" ON) option(BLAZE_TESTS "Build the Blaze tests" OFF) option(BLAZE_BENCHMARK "Build the Blaze benchmarks" OFF) option(BLAZE_CONTRIB "Build the Blaze contrib programs" OFF) @@ -45,6 +47,10 @@ if(PROJECT_IS_TOP_LEVEL) sourcemeta_enable_simd() endif() +if(BLAZE_FOUNDATION) + add_subdirectory(src/foundation) +endif() + if(BLAZE_COMPILER) add_subdirectory(src/compiler) endif() @@ -77,6 +83,10 @@ if(BLAZE_DOCUMENTATION) add_subdirectory(src/documentation) endif() +if(BLAZE_EDITOR) + add_subdirectory(src/editor) +endif() + if(BLAZE_CONTRIB) add_subdirectory(contrib) endif() @@ -123,6 +133,10 @@ endif() if(BLAZE_TESTS) enable_testing() + if(BLAZE_FOUNDATION) + add_subdirectory(test/foundation) + endif() + if(BLAZE_COMPILER) add_subdirectory(test/compiler) endif() @@ -155,6 +169,10 @@ if(BLAZE_TESTS) add_subdirectory(test/documentation) endif() + if(BLAZE_EDITOR) + add_subdirectory(test/editor) + endif() + if(PROJECT_IS_TOP_LEVEL) # Otherwise we need the child project to link # against the sanitizers too. diff --git a/vendor/blaze/DEPENDENCIES b/vendor/blaze/DEPENDENCIES index bb37e6984..425adb78d 100644 --- a/vendor/blaze/DEPENDENCIES +++ b/vendor/blaze/DEPENDENCIES @@ -1,3 +1,14 @@ vendorpull https://github.com/sourcemeta/vendorpull 1dcbac42809cf87cb5b045106b863e17ad84ba02 -core https://github.com/sourcemeta/core aa314809fdb59ed6fcb1b10b3087f32eebf708c5 +core https://github.com/sourcemeta/core 31404273bf927fc26457a1052b27b56519c0329c jsonschema-test-suite https://github.com/json-schema-org/JSON-Schema-Test-Suite c7257e92580678a086f0b9243a1903ed88bd27f7 +jsonschema-2020-12 https://github.com/json-schema-org/json-schema-spec 769daad75a9553562333a8937a187741cb708c72 +jsonschema-2019-09 https://github.com/json-schema-org/json-schema-spec 41014ea723120ce70b314d72f863c6929d9f3cfd +jsonschema-draft7 https://github.com/json-schema-org/json-schema-spec 567f768506aaa33a38e552c85bf0586029ef1b32 +jsonschema-draft6 https://github.com/json-schema-org/json-schema-spec 59ed5f6fc6f6386e23ca51d7f31d7fe9cf696713 +jsonschema-draft4 https://github.com/json-schema-org/json-schema-spec 955d185db846cfca84269d9d711b10f4f3353d38 +jsonschema-draft3 https://github.com/json-schema-org/json-schema-spec 89912ad69fe15e006e8336a59e93bf7a1e46fa54 +jsonschema-draft2 https://github.com/json-schema-org/json-schema-spec 707f65070d09fe5baa1315bce4d31a66ff124171 +jsonschema-draft1 https://github.com/json-schema-org/json-schema-spec 2072feec9fc7a7ff0b2bb5b02c2d6742c554cc4a +jsonschema-draft0 https://github.com/json-schema-org/json-schema-spec 7ea575aef8d5c0183acbe6ff65b4c98ee9c236ec +openapi https://github.com/OAI/OpenAPI-Specification 74906beddddab9e555337031b2a8d8e9338c4972 +referencing-suite https://github.com/python-jsonschema/referencing-suite 61c4cc202b1e96ed5adcaf4842a595f68d659212 diff --git a/vendor/blaze/config.cmake.in b/vendor/blaze/config.cmake.in index 363cf57b5..695683bcd 100644 --- a/vendor/blaze/config.cmake.in +++ b/vendor/blaze/config.cmake.in @@ -4,6 +4,7 @@ list(APPEND BLAZE_COMPONENTS ${Blaze_FIND_COMPONENTS}) list(APPEND BLAZE_COMPONENTS ${blaze_FIND_COMPONENTS}) if(NOT BLAZE_COMPONENTS) + list(APPEND BLAZE_COMPONENTS foundation) list(APPEND BLAZE_COMPONENTS compiler) list(APPEND BLAZE_COMPONENTS evaluator) list(APPEND BLAZE_COMPONENTS output) @@ -12,39 +13,53 @@ if(NOT BLAZE_COMPONENTS) list(APPEND BLAZE_COMPONENTS alterschema) list(APPEND BLAZE_COMPONENTS codegen) list(APPEND BLAZE_COMPONENTS documentation) + list(APPEND BLAZE_COMPONENTS editor) endif() include(CMakeFindDependencyMacro) -find_dependency(Core COMPONENTS regex uri json jsonpointer jsonschema io yaml crypto html) +find_dependency(Core COMPONENTS regex uri uritemplate json jsonpointer io yaml crypto html email ip dns time) foreach(component ${BLAZE_COMPONENTS}) - if(component STREQUAL "compiler") + if(component STREQUAL "foundation") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") + elseif(component STREQUAL "compiler") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_evaluator.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_compiler.cmake") elseif(component STREQUAL "evaluator") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_evaluator.cmake") elseif(component STREQUAL "test") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_evaluator.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_compiler.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_test.cmake") elseif(component STREQUAL "output") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_evaluator.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_output.cmake") elseif(component STREQUAL "configuration") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_configuration.cmake") elseif(component STREQUAL "alterschema") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_evaluator.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_compiler.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_output.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_alterschema.cmake") elseif(component STREQUAL "codegen") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_evaluator.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_compiler.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_output.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_alterschema.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_codegen.cmake") elseif(component STREQUAL "documentation") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_documentation.cmake") + elseif(component STREQUAL "editor") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_foundation.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_blaze_editor.cmake") else() message(FATAL_ERROR "Unknown Blaze component: ${component}") endif() diff --git a/vendor/blaze/src/alterschema/CMakeLists.txt b/vendor/blaze/src/alterschema/CMakeLists.txt index 0a57b8495..045650fe0 100644 --- a/vendor/blaze/src/alterschema/CMakeLists.txt +++ b/vendor/blaze/src/alterschema/CMakeLists.txt @@ -121,6 +121,7 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT blaze NAME alterschema # Linter linter/comment_trim.h + linter/conflicting_readonly_writeonly.h linter/const_not_in_enum.h linter/content_schema_default.h linter/definitions_to_defs.h @@ -168,7 +169,7 @@ if(BLAZE_INSTALL) endif() target_link_libraries(sourcemeta_blaze_alterschema PUBLIC - sourcemeta::core::jsonschema) + sourcemeta::blaze::foundation) target_link_libraries(sourcemeta_blaze_alterschema PUBLIC sourcemeta::blaze::compiler) target_link_libraries(sourcemeta_blaze_alterschema PRIVATE diff --git a/vendor/blaze/src/alterschema/alterschema.cc b/vendor/blaze/src/alterschema/alterschema.cc index 6f5da5b0f..30b5417cd 100644 --- a/vendor/blaze/src/alterschema/alterschema.cc +++ b/vendor/blaze/src/alterschema/alterschema.cc @@ -233,6 +233,7 @@ auto WALK_UP_IN_PLACE_APPLICATORS(const JSON &root, const SchemaFrame &frame, // Linter #include "linter/comment_trim.h" +#include "linter/conflicting_readonly_writeonly.h" #include "linter/const_not_in_enum.h" #include "linter/content_schema_default.h" #include "linter/definitions_to_defs.h" @@ -476,6 +477,7 @@ auto add(SchemaTransformer &bundle, const AlterSchemaMode mode) -> void { bundle.add(); bundle.add(); bundle.add(); + bundle.add(); bundle.add(); bundle.add(); bundle.add(); diff --git a/vendor/blaze/src/alterschema/canonicalizer/additional_items_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/additional_items_implicit.h index 320c99081..74a38f8f7 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/additional_items_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/additional_items_implicit.h @@ -8,11 +8,11 @@ class AdditionalItemsImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/canonicalizer/allof_merge_compatible_branches.h b/vendor/blaze/src/alterschema/canonicalizer/allof_merge_compatible_branches.h index ec26664c6..b79d88c25 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/allof_merge_compatible_branches.h +++ b/vendor/blaze/src/alterschema/canonicalizer/allof_merge_compatible_branches.h @@ -8,11 +8,11 @@ class AllOfMergeCompatibleBranches final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"allOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( @@ -143,8 +143,8 @@ class AllOfMergeCompatibleBranches final : public SchemaTransformRule { static auto has_cross_dependencies(const JSON &branch_a, const JSON &branch_b, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::Vocabularies &vocabularies) + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::Vocabularies &vocabularies) -> bool { for (const auto &entry_a : branch_a.as_object()) { const auto &metadata{walker(entry_a.first, vocabularies)}; diff --git a/vendor/blaze/src/alterschema/canonicalizer/comment_drop.h b/vendor/blaze/src/alterschema/canonicalizer/comment_drop.h index c55700a27..8c12e8ec1 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/comment_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/comment_drop.h @@ -7,11 +7,11 @@ class CommentDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_7, diff --git a/vendor/blaze/src/alterschema/canonicalizer/const_as_enum.h b/vendor/blaze/src/alterschema/canonicalizer/const_as_enum.h index b0cf8efc4..4d65ac9e0 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/const_as_enum.h +++ b/vendor/blaze/src/alterschema/canonicalizer/const_as_enum.h @@ -10,11 +10,11 @@ class ConstAsEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_any_of.h b/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_any_of.h index ebd0a3154..29cd2c731 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_any_of.h +++ b/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_any_of.h @@ -7,11 +7,11 @@ class DependenciesToAnyOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_4, diff --git a/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_extends_disallow.h b/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_extends_disallow.h index 2c36d9348..488784522 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_extends_disallow.h +++ b/vendor/blaze/src/alterschema/canonicalizer/dependencies_to_extends_disallow.h @@ -8,11 +8,11 @@ class DependenciesToExtendsDisallow final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_3) && diff --git a/vendor/blaze/src/alterschema/canonicalizer/dependent_required_to_any_of.h b/vendor/blaze/src/alterschema/canonicalizer/dependent_required_to_any_of.h index a98ffe5af..59fc087e2 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/dependent_required_to_any_of.h +++ b/vendor/blaze/src/alterschema/canonicalizer/dependent_required_to_any_of.h @@ -8,11 +8,11 @@ class DependentRequiredToAnyOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/dependent_schemas_to_any_of.h b/vendor/blaze/src/alterschema/canonicalizer/dependent_schemas_to_any_of.h index 61f7953b6..6420a49c8 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/dependent_schemas_to_any_of.h +++ b/vendor/blaze/src/alterschema/canonicalizer/dependent_schemas_to_any_of.h @@ -8,11 +8,11 @@ class DependentSchemasToAnyOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/deprecated_false_drop.h b/vendor/blaze/src/alterschema/canonicalizer/deprecated_false_drop.h index d692d24af..4fe2cc14b 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/deprecated_false_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/deprecated_false_drop.h @@ -7,11 +7,11 @@ class DeprecatedFalseDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/disallow_to_array_of_schemas.h b/vendor/blaze/src/alterschema/canonicalizer/disallow_to_array_of_schemas.h index 14293c7f3..b9fbc4258 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/disallow_to_array_of_schemas.h +++ b/vendor/blaze/src/alterschema/canonicalizer/disallow_to_array_of_schemas.h @@ -8,11 +8,11 @@ class DisallowToArrayOfSchemas final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/divisible_by_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/divisible_by_implicit.h index 507b82c76..5a65c46c4 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/divisible_by_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/divisible_by_implicit.h @@ -7,11 +7,11 @@ class DivisibleByImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_2, diff --git a/vendor/blaze/src/alterschema/canonicalizer/draft3_type_any.h b/vendor/blaze/src/alterschema/canonicalizer/draft3_type_any.h index dea04abec..fcf2833ec 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/draft3_type_any.h +++ b/vendor/blaze/src/alterschema/canonicalizer/draft3_type_any.h @@ -7,11 +7,11 @@ class Draft3TypeAny final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_3) && diff --git a/vendor/blaze/src/alterschema/canonicalizer/empty_definitions_drop.h b/vendor/blaze/src/alterschema/canonicalizer/empty_definitions_drop.h index cf79d81d5..74a40d866 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/empty_definitions_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/empty_definitions_drop.h @@ -7,11 +7,11 @@ class EmptyDefinitionsDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_4, diff --git a/vendor/blaze/src/alterschema/canonicalizer/empty_defs_drop.h b/vendor/blaze/src/alterschema/canonicalizer/empty_defs_drop.h index e82bf0970..2e013dfe7 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/empty_defs_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/empty_defs_drop.h @@ -7,11 +7,11 @@ class EmptyDefsDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2019_09_Core, diff --git a/vendor/blaze/src/alterschema/canonicalizer/empty_dependencies_drop.h b/vendor/blaze/src/alterschema/canonicalizer/empty_dependencies_drop.h index cb3b7c4e3..c1d91f3a5 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/empty_dependencies_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/empty_dependencies_drop.h @@ -8,11 +8,11 @@ class EmptyDependenciesDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_required_drop.h b/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_required_drop.h index 1753be269..cdf3967ac 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_required_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_required_drop.h @@ -8,11 +8,11 @@ class EmptyDependentRequiredDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_schemas_drop.h b/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_schemas_drop.h index 54e3c8aec..24900ff11 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_schemas_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/empty_dependent_schemas_drop.h @@ -8,11 +8,11 @@ class EmptyDependentSchemasDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/enum_drop_redundant_validation.h b/vendor/blaze/src/alterschema/canonicalizer/enum_drop_redundant_validation.h index 27e09a00f..78fe1081b 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/enum_drop_redundant_validation.h +++ b/vendor/blaze/src/alterschema/canonicalizer/enum_drop_redundant_validation.h @@ -8,11 +8,11 @@ class EnumDropRedundantValidation final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( @@ -54,12 +54,12 @@ class EnumDropRedundantValidation final : public SchemaTransformRule { } const auto &metadata{walker(entry.first, vocabularies)}; - if (metadata.type == sourcemeta::core::SchemaKeywordType::Unknown || - metadata.type == sourcemeta::core::SchemaKeywordType::Annotation || - metadata.type == sourcemeta::core::SchemaKeywordType::Other || - metadata.type == sourcemeta::core::SchemaKeywordType::Comment || + if (metadata.type == sourcemeta::blaze::SchemaKeywordType::Unknown || + metadata.type == sourcemeta::blaze::SchemaKeywordType::Annotation || + metadata.type == sourcemeta::blaze::SchemaKeywordType::Other || + metadata.type == sourcemeta::blaze::SchemaKeywordType::Comment || metadata.type == - sourcemeta::core::SchemaKeywordType::LocationMembers) { + sourcemeta::blaze::SchemaKeywordType::LocationMembers) { continue; } diff --git a/vendor/blaze/src/alterschema/canonicalizer/enum_filter_by_type.h b/vendor/blaze/src/alterschema/canonicalizer/enum_filter_by_type.h index 78f90299a..9e3098b48 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/enum_filter_by_type.h +++ b/vendor/blaze/src/alterschema/canonicalizer/enum_filter_by_type.h @@ -7,11 +7,11 @@ class EnumFilterByType final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_boolean_integer_fold.h b/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_boolean_integer_fold.h index 6ceaeb596..e1cc9b47c 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_boolean_integer_fold.h +++ b/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_boolean_integer_fold.h @@ -8,11 +8,11 @@ class ExclusiveMaximumBooleanIntegerFold final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h b/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h index 9bb3d23b2..148b82eb2 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h +++ b/vendor/blaze/src/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h @@ -11,11 +11,11 @@ class ExclusiveMaximumIntegerToMaximum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_boolean_integer_fold.h b/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_boolean_integer_fold.h index ee6b7abb7..fcdd42d59 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_boolean_integer_fold.h +++ b/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_boolean_integer_fold.h @@ -8,11 +8,11 @@ class ExclusiveMinimumBooleanIntegerFold final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h b/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h index 6406122df..31fc5534e 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h +++ b/vendor/blaze/src/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h @@ -11,11 +11,11 @@ class ExclusiveMinimumIntegerToMinimum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/extends_to_array.h b/vendor/blaze/src/alterschema/canonicalizer/extends_to_array.h index 1269debbf..10c0b0b49 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/extends_to_array.h +++ b/vendor/blaze/src/alterschema/canonicalizer/extends_to_array.h @@ -7,11 +7,11 @@ class ExtendsToArray final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/if_then_else_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/if_then_else_implicit.h index 0184861fa..9b9c66fe6 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/if_then_else_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/if_then_else_implicit.h @@ -7,11 +7,11 @@ class IfThenElseImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/implicit_contains_keywords.h b/vendor/blaze/src/alterschema/canonicalizer/implicit_contains_keywords.h index 114676786..263f7a3b7 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/implicit_contains_keywords.h +++ b/vendor/blaze/src/alterschema/canonicalizer/implicit_contains_keywords.h @@ -8,11 +8,11 @@ class ImplicitContainsKeywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/implicit_object_keywords.h b/vendor/blaze/src/alterschema/canonicalizer/implicit_object_keywords.h index ca0a24cfd..5fc4ed22b 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/implicit_object_keywords.h +++ b/vendor/blaze/src/alterschema/canonicalizer/implicit_object_keywords.h @@ -8,11 +8,11 @@ class ImplicitObjectKeywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object()); @@ -94,7 +94,7 @@ class ImplicitObjectKeywords final : public SchemaTransformRule { } auto check_object(const sourcemeta::core::JSON &schema, - const sourcemeta::core::Vocabularies &vocabularies) const + const sourcemeta::blaze::Vocabularies &vocabularies) const -> void { this->add_pattern_properties_ = !schema.defines("patternProperties") && @@ -164,7 +164,7 @@ class ImplicitObjectKeywords final : public SchemaTransformRule { } auto check_array(const sourcemeta::core::JSON &schema, - const sourcemeta::core::Vocabularies &vocabularies) const + const sourcemeta::blaze::Vocabularies &vocabularies) const -> void { if (!vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/inline_single_use_ref.h b/vendor/blaze/src/alterschema/canonicalizer/inline_single_use_ref.h index 635b8160d..3dbe6b251 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/inline_single_use_ref.h +++ b/vendor/blaze/src/alterschema/canonicalizer/inline_single_use_ref.h @@ -7,11 +7,11 @@ class InlineSingleUseRef final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object() && schema.size() == 1); diff --git a/vendor/blaze/src/alterschema/canonicalizer/items_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/items_implicit.h index acf61d787..7436e72f1 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/items_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/items_implicit.h @@ -10,11 +10,11 @@ class ItemsImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( ((vocabularies.contains( diff --git a/vendor/blaze/src/alterschema/canonicalizer/max_contains_covered_by_max_items.h b/vendor/blaze/src/alterschema/canonicalizer/max_contains_covered_by_max_items.h index c80cf1fa9..c4a2f7ba8 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/max_contains_covered_by_max_items.h +++ b/vendor/blaze/src/alterschema/canonicalizer/max_contains_covered_by_max_items.h @@ -12,11 +12,11 @@ class MaxContainsCoveredByMaxItems final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/max_decimal_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/max_decimal_implicit.h index a4cf397b1..cc705a520 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/max_decimal_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/max_decimal_implicit.h @@ -7,11 +7,11 @@ class MaxDecimalImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_integer_fold.h b/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_integer_fold.h index 1758a1d9c..fc00372a8 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_integer_fold.h +++ b/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_integer_fold.h @@ -8,11 +8,11 @@ class MaximumCanEqualIntegerFold final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_true_drop.h b/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_true_drop.h index f5b2068a0..58fa43e70 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_true_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/maximum_can_equal_true_drop.h @@ -8,11 +8,11 @@ class MaximumCanEqualTrueDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/min_items_given_min_contains.h b/vendor/blaze/src/alterschema/canonicalizer/min_items_given_min_contains.h index 4c8950599..89684d9cf 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/min_items_given_min_contains.h +++ b/vendor/blaze/src/alterschema/canonicalizer/min_items_given_min_contains.h @@ -11,11 +11,11 @@ class MinItemsGivenMinContains final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/min_length_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/min_length_implicit.h index 91932fb99..7f90c7714 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/min_length_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/min_length_implicit.h @@ -10,11 +10,11 @@ class MinLengthImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/min_properties_covered_by_required.h b/vendor/blaze/src/alterschema/canonicalizer/min_properties_covered_by_required.h index 532162b77..d2b19a74a 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/min_properties_covered_by_required.h +++ b/vendor/blaze/src/alterschema/canonicalizer/min_properties_covered_by_required.h @@ -11,11 +11,11 @@ class MinPropertiesCoveredByRequired final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_integer_fold.h b/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_integer_fold.h index 216d24721..05e010e7c 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_integer_fold.h +++ b/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_integer_fold.h @@ -8,11 +8,11 @@ class MinimumCanEqualIntegerFold final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_true_drop.h b/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_true_drop.h index 0bd3c2e08..53f6cf16c 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_true_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/minimum_can_equal_true_drop.h @@ -8,11 +8,11 @@ class MinimumCanEqualTrueDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/multiple_of_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/multiple_of_implicit.h index 934f21127..d17cea25e 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/multiple_of_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/multiple_of_implicit.h @@ -9,11 +9,11 @@ class MultipleOfImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/optional_property_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/optional_property_implicit.h index 91b22f7ec..0931e3a66 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/optional_property_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/optional_property_implicit.h @@ -8,11 +8,11 @@ class OptionalPropertyImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/recursive_anchor_false_drop.h b/vendor/blaze/src/alterschema/canonicalizer/recursive_anchor_false_drop.h index ba2b12c3f..5d26fb878 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/recursive_anchor_false_drop.h +++ b/vendor/blaze/src/alterschema/canonicalizer/recursive_anchor_false_drop.h @@ -8,11 +8,11 @@ class RecursiveAnchorFalseDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_2019_09_Core) && diff --git a/vendor/blaze/src/alterschema/canonicalizer/required_property_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/required_property_implicit.h index 520c53160..56924c85d 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/required_property_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/required_property_implicit.h @@ -8,11 +8,11 @@ class RequiredPropertyImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_3) && diff --git a/vendor/blaze/src/alterschema/canonicalizer/single_branch_allof.h b/vendor/blaze/src/alterschema/canonicalizer/single_branch_allof.h index 4745cb7ca..424adfc43 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/single_branch_allof.h +++ b/vendor/blaze/src/alterschema/canonicalizer/single_branch_allof.h @@ -7,11 +7,11 @@ class SingleBranchAllOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"allOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/single_branch_anyof.h b/vendor/blaze/src/alterschema/canonicalizer/single_branch_anyof.h index e3fc7dedf..09f87461a 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/single_branch_anyof.h +++ b/vendor/blaze/src/alterschema/canonicalizer/single_branch_anyof.h @@ -7,11 +7,11 @@ class SingleBranchAnyOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"anyOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/single_branch_oneof.h b/vendor/blaze/src/alterschema/canonicalizer/single_branch_oneof.h index 93627c169..0d0f130f3 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/single_branch_oneof.h +++ b/vendor/blaze/src/alterschema/canonicalizer/single_branch_oneof.h @@ -7,11 +7,11 @@ class SingleBranchOneOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"oneOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_array_to_any_of.h b/vendor/blaze/src/alterschema/canonicalizer/type_array_to_any_of.h index c17b91cfb..3eb2ad4e9 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_array_to_any_of.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_array_to_any_of.h @@ -11,11 +11,11 @@ class TypeArrayToAnyOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_boolean_as_enum.h b/vendor/blaze/src/alterschema/canonicalizer/type_boolean_as_enum.h index 9909d78ef..010746958 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_boolean_as_enum.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_boolean_as_enum.h @@ -11,11 +11,11 @@ class TypeBooleanAsEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_inherit_in_place.h b/vendor/blaze/src/alterschema/canonicalizer/type_inherit_in_place.h index 1a7612eff..bbaa021be 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_inherit_in_place.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_inherit_in_place.h @@ -11,11 +11,11 @@ class TypeInheritInPlace final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { using namespace sourcemeta::core; ONLY_CONTINUE_IF(schema.is_object()); diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_null_as_enum.h b/vendor/blaze/src/alterschema/canonicalizer/type_null_as_enum.h index 47c0998b4..ef007dfa9 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_null_as_enum.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_null_as_enum.h @@ -11,11 +11,11 @@ class TypeNullAsEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_union_implicit.h b/vendor/blaze/src/alterschema/canonicalizer/type_union_implicit.h index b2d13af3a..81ccfbdc5 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_union_implicit.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_union_implicit.h @@ -10,11 +10,11 @@ class TypeUnionImplicit final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { using namespace sourcemeta::core; ONLY_CONTINUE_IF(schema.is_object() && !schema.empty()); @@ -78,10 +78,10 @@ class TypeUnionImplicit final : public SchemaTransformRule { private: static auto allof_sibling_constrains_type( const sourcemeta::core::JSON &root, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) -> bool { + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) -> bool { using namespace sourcemeta::core; auto walk_pointer{location.pointer}; auto walk_parent{location.parent}; diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_union_to_schemas.h b/vendor/blaze/src/alterschema/canonicalizer/type_union_to_schemas.h index 5a488516b..6a277796a 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_union_to_schemas.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_union_to_schemas.h @@ -7,11 +7,11 @@ class TypeUnionToSchemas final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_allof.h b/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_allof.h index 4022ae9e3..c85f09348 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_allof.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_allof.h @@ -8,11 +8,11 @@ class TypeWithApplicatorToAllOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( @@ -66,14 +66,14 @@ class TypeWithApplicatorToAllOf final : public SchemaTransformRule { continue; } const auto keyword_type{walker(entry.first, vocabularies).type}; - if (keyword_type != sourcemeta::core::SchemaKeywordType::Unknown && - keyword_type != sourcemeta::core::SchemaKeywordType::Annotation && - keyword_type != sourcemeta::core::SchemaKeywordType::Comment) { + if (keyword_type != sourcemeta::blaze::SchemaKeywordType::Unknown && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Annotation && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Comment) { modern_ref_needs_wrapping = true; - if (keyword_type != sourcemeta::core::SchemaKeywordType::Reference && - keyword_type != sourcemeta::core::SchemaKeywordType::Other && + if (keyword_type != sourcemeta::blaze::SchemaKeywordType::Reference && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Other && keyword_type != - sourcemeta::core::SchemaKeywordType::LocationMembers) { + sourcemeta::blaze::SchemaKeywordType::LocationMembers) { this->ref_annotations_only_ = false; } } diff --git a/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_extends.h b/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_extends.h index 5d4ee3696..fc31d2801 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_extends.h +++ b/vendor/blaze/src/alterschema/canonicalizer/type_with_applicator_to_extends.h @@ -8,11 +8,11 @@ class TypeWithApplicatorToExtends final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_0, diff --git a/vendor/blaze/src/alterschema/canonicalizer/unevaluated_items_to_items.h b/vendor/blaze/src/alterschema/canonicalizer/unevaluated_items_to_items.h index 6894d6bfa..146095014 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/unevaluated_items_to_items.h +++ b/vendor/blaze/src/alterschema/canonicalizer/unevaluated_items_to_items.h @@ -8,11 +8,11 @@ class UnevaluatedItemsToItems final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( @@ -26,13 +26,13 @@ class UnevaluatedItemsToItems final : public SchemaTransformRule { } const auto &metadata{walker(entry.first, vocabularies)}; const auto keyword_type{metadata.type}; - if (keyword_type != sourcemeta::core::SchemaKeywordType::Unknown && - keyword_type != sourcemeta::core::SchemaKeywordType::Assertion && - keyword_type != sourcemeta::core::SchemaKeywordType::Annotation && - keyword_type != sourcemeta::core::SchemaKeywordType::Comment && - keyword_type != sourcemeta::core::SchemaKeywordType::Other && + if (keyword_type != sourcemeta::blaze::SchemaKeywordType::Unknown && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Assertion && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Annotation && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Comment && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Other && keyword_type != - sourcemeta::core::SchemaKeywordType::LocationMembers) { + sourcemeta::blaze::SchemaKeywordType::LocationMembers) { return false; } } diff --git a/vendor/blaze/src/alterschema/canonicalizer/unevaluated_properties_to_additional_properties.h b/vendor/blaze/src/alterschema/canonicalizer/unevaluated_properties_to_additional_properties.h index 33a5bc13c..39cf18028 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/unevaluated_properties_to_additional_properties.h +++ b/vendor/blaze/src/alterschema/canonicalizer/unevaluated_properties_to_additional_properties.h @@ -10,11 +10,11 @@ class UnevaluatedPropertiesToAdditionalProperties final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( @@ -28,13 +28,13 @@ class UnevaluatedPropertiesToAdditionalProperties final } const auto &metadata{walker(entry.first, vocabularies)}; const auto keyword_type{metadata.type}; - if (keyword_type != sourcemeta::core::SchemaKeywordType::Unknown && - keyword_type != sourcemeta::core::SchemaKeywordType::Assertion && - keyword_type != sourcemeta::core::SchemaKeywordType::Annotation && - keyword_type != sourcemeta::core::SchemaKeywordType::Comment && - keyword_type != sourcemeta::core::SchemaKeywordType::Other && + if (keyword_type != sourcemeta::blaze::SchemaKeywordType::Unknown && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Assertion && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Annotation && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Comment && + keyword_type != sourcemeta::blaze::SchemaKeywordType::Other && keyword_type != - sourcemeta::core::SchemaKeywordType::LocationMembers) { + sourcemeta::blaze::SchemaKeywordType::LocationMembers) { return false; } } diff --git a/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_can_equal_bounds.h b/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_can_equal_bounds.h index 0b537c240..f38ba240a 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_can_equal_bounds.h +++ b/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_can_equal_bounds.h @@ -8,11 +8,11 @@ class UnsatisfiableCanEqualBounds final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_2) && diff --git a/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_exclusive_equal_bounds.h b/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_exclusive_equal_bounds.h index 4cd4e33a9..c0f411868 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_exclusive_equal_bounds.h +++ b/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_exclusive_equal_bounds.h @@ -8,11 +8,11 @@ class UnsatisfiableExclusiveEqualBounds final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_type_and_enum.h b/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_type_and_enum.h index d7990b0e3..a90df7e0e 100644 --- a/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_type_and_enum.h +++ b/vendor/blaze/src/alterschema/canonicalizer/unsatisfiable_type_and_enum.h @@ -8,11 +8,11 @@ class UnsatisfiableTypeAndEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/allof_false_simplify.h b/vendor/blaze/src/alterschema/common/allof_false_simplify.h index 935100201..fc4111df0 100644 --- a/vendor/blaze/src/alterschema/common/allof_false_simplify.h +++ b/vendor/blaze/src/alterschema/common/allof_false_simplify.h @@ -10,11 +10,11 @@ class AllOfFalseSimplify final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"allOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/anyof_false_simplify.h b/vendor/blaze/src/alterschema/common/anyof_false_simplify.h index 7069a38bf..1bfb77f9f 100644 --- a/vendor/blaze/src/alterschema/common/anyof_false_simplify.h +++ b/vendor/blaze/src/alterschema/common/anyof_false_simplify.h @@ -10,11 +10,11 @@ class AnyOfFalseSimplify final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"anyOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/anyof_remove_false_schemas.h b/vendor/blaze/src/alterschema/common/anyof_remove_false_schemas.h index 837c5f761..4670da1b4 100644 --- a/vendor/blaze/src/alterschema/common/anyof_remove_false_schemas.h +++ b/vendor/blaze/src/alterschema/common/anyof_remove_false_schemas.h @@ -11,11 +11,11 @@ class AnyOfRemoveFalseSchemas final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"anyOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/anyof_true_simplify.h b/vendor/blaze/src/alterschema/common/anyof_true_simplify.h index f9f08af10..b79a4e96f 100644 --- a/vendor/blaze/src/alterschema/common/anyof_true_simplify.h +++ b/vendor/blaze/src/alterschema/common/anyof_true_simplify.h @@ -10,11 +10,11 @@ class AnyOfTrueSimplify final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"anyOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/const_in_enum.h b/vendor/blaze/src/alterschema/common/const_in_enum.h index fed367cf5..baaeb2f38 100644 --- a/vendor/blaze/src/alterschema/common/const_in_enum.h +++ b/vendor/blaze/src/alterschema/common/const_in_enum.h @@ -11,11 +11,11 @@ class ConstInEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/const_with_type.h b/vendor/blaze/src/alterschema/common/const_with_type.h index f7031330b..4fc2dfefa 100644 --- a/vendor/blaze/src/alterschema/common/const_with_type.h +++ b/vendor/blaze/src/alterschema/common/const_with_type.h @@ -11,11 +11,11 @@ class ConstWithType final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/content_media_type_without_encoding.h b/vendor/blaze/src/alterschema/common/content_media_type_without_encoding.h index 61da1f715..23aa9a74a 100644 --- a/vendor/blaze/src/alterschema/common/content_media_type_without_encoding.h +++ b/vendor/blaze/src/alterschema/common/content_media_type_without_encoding.h @@ -11,11 +11,11 @@ class ContentMediaTypeWithoutEncoding final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Content, diff --git a/vendor/blaze/src/alterschema/common/content_schema_without_media_type.h b/vendor/blaze/src/alterschema/common/content_schema_without_media_type.h index 705fa9f23..c4b376e0f 100644 --- a/vendor/blaze/src/alterschema/common/content_schema_without_media_type.h +++ b/vendor/blaze/src/alterschema/common/content_schema_without_media_type.h @@ -14,11 +14,11 @@ class ContentSchemaWithoutMediaType final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Content, diff --git a/vendor/blaze/src/alterschema/common/dependencies_property_tautology.h b/vendor/blaze/src/alterschema/common/dependencies_property_tautology.h index 03bd70677..22b503307 100644 --- a/vendor/blaze/src/alterschema/common/dependencies_property_tautology.h +++ b/vendor/blaze/src/alterschema/common/dependencies_property_tautology.h @@ -12,11 +12,11 @@ class DependenciesPropertyTautology final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_7, diff --git a/vendor/blaze/src/alterschema/common/dependent_required_tautology.h b/vendor/blaze/src/alterschema/common/dependent_required_tautology.h index 1740b8dae..8d344457d 100644 --- a/vendor/blaze/src/alterschema/common/dependent_required_tautology.h +++ b/vendor/blaze/src/alterschema/common/dependent_required_tautology.h @@ -12,11 +12,11 @@ class DependentRequiredTautology final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/disallow_narrows_type.h b/vendor/blaze/src/alterschema/common/disallow_narrows_type.h index 6157ee939..54c32a8b1 100644 --- a/vendor/blaze/src/alterschema/common/disallow_narrows_type.h +++ b/vendor/blaze/src/alterschema/common/disallow_narrows_type.h @@ -12,11 +12,11 @@ class DisallowNarrowsType final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"disallow"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/double_negation_elimination.h b/vendor/blaze/src/alterschema/common/double_negation_elimination.h index 50b86fb8e..17e5d4ea1 100644 --- a/vendor/blaze/src/alterschema/common/double_negation_elimination.h +++ b/vendor/blaze/src/alterschema/common/double_negation_elimination.h @@ -11,11 +11,11 @@ class DoubleNegationElimination final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"not"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/draft_official_dialect_with_https.h b/vendor/blaze/src/alterschema/common/draft_official_dialect_with_https.h index f3eb13a2d..afbdf755e 100644 --- a/vendor/blaze/src/alterschema/common/draft_official_dialect_with_https.h +++ b/vendor/blaze/src/alterschema/common/draft_official_dialect_with_https.h @@ -11,13 +11,13 @@ class DraftOfficialDialectWithHttps final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { - using sourcemeta::core::SchemaBaseDialect; + using sourcemeta::blaze::SchemaBaseDialect; ONLY_CONTINUE_IF( location.base_dialect == SchemaBaseDialect::JSON_Schema_Draft_7 || location.base_dialect == SchemaBaseDialect::JSON_Schema_Draft_7_Hyper || diff --git a/vendor/blaze/src/alterschema/common/draft_official_dialect_without_empty_fragment.h b/vendor/blaze/src/alterschema/common/draft_official_dialect_without_empty_fragment.h index dab56c1f2..99159c330 100644 --- a/vendor/blaze/src/alterschema/common/draft_official_dialect_without_empty_fragment.h +++ b/vendor/blaze/src/alterschema/common/draft_official_dialect_without_empty_fragment.h @@ -10,11 +10,11 @@ class DraftOfficialDialectWithoutEmptyFragment final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object()); const auto *schema_keyword{schema.try_at("$schema")}; diff --git a/vendor/blaze/src/alterschema/common/draft_ref_siblings.h b/vendor/blaze/src/alterschema/common/draft_ref_siblings.h index 5559f7916..749b281e1 100644 --- a/vendor/blaze/src/alterschema/common/draft_ref_siblings.h +++ b/vendor/blaze/src/alterschema/common/draft_ref_siblings.h @@ -10,11 +10,11 @@ class DraftRefSiblings final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_7, @@ -30,8 +30,8 @@ class DraftRefSiblings final : public SchemaTransformRule { std::vector locations; for (const auto &entry : schema.as_object()) { const auto &metadata{walker(entry.first, vocabularies)}; - if (metadata.type == sourcemeta::core::SchemaKeywordType::Reference || - metadata.type == sourcemeta::core::SchemaKeywordType::Comment || + if (metadata.type == sourcemeta::blaze::SchemaKeywordType::Reference || + metadata.type == sourcemeta::blaze::SchemaKeywordType::Comment || // If we disallow this, we end up deleting it and the linter will fail // with an error about not knowing the dialect entry.first == "$schema") { diff --git a/vendor/blaze/src/alterschema/common/drop_extends_empty_schemas.h b/vendor/blaze/src/alterschema/common/drop_extends_empty_schemas.h index 8ec9dd8d6..5e990fd36 100644 --- a/vendor/blaze/src/alterschema/common/drop_extends_empty_schemas.h +++ b/vendor/blaze/src/alterschema/common/drop_extends_empty_schemas.h @@ -10,11 +10,11 @@ class DropExtendsEmptySchemas final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"extends"}; ONLY_CONTINUE_IF(vocabularies.contains_any( @@ -29,14 +29,14 @@ class DropExtendsEmptySchemas final : public SchemaTransformRule { keyword_pointer.push_back(std::cref(KEYWORD)); ONLY_CONTINUE_IF(!frame.has_references_through(keyword_pointer)); - if (sourcemeta::core::is_empty_schema(*extends)) { + if (sourcemeta::blaze::is_empty_schema(*extends)) { return APPLIES_TO_POINTERS({Pointer{KEYWORD}}); } if (extends->is_array() && !extends->empty()) { std::vector locations; for (std::size_t index = 0; index < extends->size(); ++index) { - if (sourcemeta::core::is_empty_schema(extends->at(index))) { + if (sourcemeta::blaze::is_empty_schema(extends->at(index))) { locations.push_back(Pointer{KEYWORD, index}); } } @@ -55,7 +55,7 @@ class DropExtendsEmptySchemas final : public SchemaTransformRule { auto new_extends{JSON::make_array()}; for (const auto &entry : schema.at("extends").as_array()) { - if (!sourcemeta::core::is_empty_schema(entry)) { + if (!sourcemeta::blaze::is_empty_schema(entry)) { new_extends.push_back(entry); } } diff --git a/vendor/blaze/src/alterschema/common/duplicate_allof_branches.h b/vendor/blaze/src/alterschema/common/duplicate_allof_branches.h index 3ee911be0..7ef75d20e 100644 --- a/vendor/blaze/src/alterschema/common/duplicate_allof_branches.h +++ b/vendor/blaze/src/alterschema/common/duplicate_allof_branches.h @@ -13,11 +13,11 @@ class DuplicateAllOfBranches final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/common/duplicate_anyof_branches.h b/vendor/blaze/src/alterschema/common/duplicate_anyof_branches.h index 678d47237..ff0b03044 100644 --- a/vendor/blaze/src/alterschema/common/duplicate_anyof_branches.h +++ b/vendor/blaze/src/alterschema/common/duplicate_anyof_branches.h @@ -13,11 +13,11 @@ class DuplicateAnyOfBranches final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/common/duplicate_enum_values.h b/vendor/blaze/src/alterschema/common/duplicate_enum_values.h index 165071be6..561fb19a9 100644 --- a/vendor/blaze/src/alterschema/common/duplicate_enum_values.h +++ b/vendor/blaze/src/alterschema/common/duplicate_enum_values.h @@ -10,11 +10,11 @@ class DuplicateEnumValues final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/duplicate_required_values.h b/vendor/blaze/src/alterschema/common/duplicate_required_values.h index ecf7347f0..657afa4b4 100644 --- a/vendor/blaze/src/alterschema/common/duplicate_required_values.h +++ b/vendor/blaze/src/alterschema/common/duplicate_required_values.h @@ -11,11 +11,11 @@ class DuplicateRequiredValues final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/dynamic_ref_to_static_ref.h b/vendor/blaze/src/alterschema/common/dynamic_ref_to_static_ref.h index 481298286..babd3baf4 100644 --- a/vendor/blaze/src/alterschema/common/dynamic_ref_to_static_ref.h +++ b/vendor/blaze/src/alterschema/common/dynamic_ref_to_static_ref.h @@ -15,11 +15,11 @@ class DynamicRefToStaticRef final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object() && !schema.defines("$ref")); @@ -29,10 +29,10 @@ class DynamicRefToStaticRef final : public SchemaTransformRule { reference_pointer.push_back(std::cref(KEYWORD_DYNAMIC_REF)); auto reference_entry{frame.reference( - sourcemeta::core::SchemaReferenceType::Static, reference_pointer)}; + sourcemeta::blaze::SchemaReferenceType::Static, reference_pointer)}; if (!reference_entry.has_value()) { reference_entry = frame.reference( - sourcemeta::core::SchemaReferenceType::Dynamic, reference_pointer); + sourcemeta::blaze::SchemaReferenceType::Dynamic, reference_pointer); } if (!reference_entry.has_value()) { return false; @@ -45,7 +45,7 @@ class DynamicRefToStaticRef final : public SchemaTransformRule { } if (destination->get().type == - sourcemeta::core::SchemaFrame::LocationType::Anchor) { + sourcemeta::blaze::SchemaFrame::LocationType::Anchor) { const auto &subschema{sourcemeta::core::get( root, sourcemeta::core::to_pointer(destination->get().pointer))}; if (subschema.is_object()) { @@ -76,10 +76,10 @@ class DynamicRefToStaticRef final : public SchemaTransformRule { reference_pointer.push_back(std::cref(KEYWORD_RECURSIVE_REF)); auto reference_entry{frame.reference( - sourcemeta::core::SchemaReferenceType::Static, reference_pointer)}; + sourcemeta::blaze::SchemaReferenceType::Static, reference_pointer)}; if (!reference_entry.has_value()) { reference_entry = frame.reference( - sourcemeta::core::SchemaReferenceType::Dynamic, reference_pointer); + sourcemeta::blaze::SchemaReferenceType::Dynamic, reference_pointer); } if (!reference_entry.has_value()) { return false; diff --git a/vendor/blaze/src/alterschema/common/else_without_if.h b/vendor/blaze/src/alterschema/common/else_without_if.h index 548859590..38fcdf73d 100644 --- a/vendor/blaze/src/alterschema/common/else_without_if.h +++ b/vendor/blaze/src/alterschema/common/else_without_if.h @@ -13,11 +13,11 @@ class ElseWithoutIf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/common/empty_object_as_true.h b/vendor/blaze/src/alterschema/common/empty_object_as_true.h index d506e0441..3266747bd 100644 --- a/vendor/blaze/src/alterschema/common/empty_object_as_true.h +++ b/vendor/blaze/src/alterschema/common/empty_object_as_true.h @@ -11,11 +11,11 @@ class EmptyObjectAsTrue final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Core, diff --git a/vendor/blaze/src/alterschema/common/enum_with_type.h b/vendor/blaze/src/alterschema/common/enum_with_type.h index 2307456a3..a04d36a3f 100644 --- a/vendor/blaze/src/alterschema/common/enum_with_type.h +++ b/vendor/blaze/src/alterschema/common/enum_with_type.h @@ -11,11 +11,11 @@ class EnumWithType final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/equal_numeric_bounds_to_enum.h b/vendor/blaze/src/alterschema/common/equal_numeric_bounds_to_enum.h index b73d0d801..bc20685b1 100644 --- a/vendor/blaze/src/alterschema/common/equal_numeric_bounds_to_enum.h +++ b/vendor/blaze/src/alterschema/common/equal_numeric_bounds_to_enum.h @@ -11,11 +11,11 @@ class EqualNumericBoundsToEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_4, diff --git a/vendor/blaze/src/alterschema/common/exclusive_bounds_false_drop.h b/vendor/blaze/src/alterschema/common/exclusive_bounds_false_drop.h index ab0862d19..37d0062b9 100644 --- a/vendor/blaze/src/alterschema/common/exclusive_bounds_false_drop.h +++ b/vendor/blaze/src/alterschema/common/exclusive_bounds_false_drop.h @@ -11,11 +11,11 @@ class ExclusiveBoundsFalseDrop final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/common/exclusive_maximum_number_and_maximum.h b/vendor/blaze/src/alterschema/common/exclusive_maximum_number_and_maximum.h index 1e226301b..9e53efcdc 100644 --- a/vendor/blaze/src/alterschema/common/exclusive_maximum_number_and_maximum.h +++ b/vendor/blaze/src/alterschema/common/exclusive_maximum_number_and_maximum.h @@ -11,11 +11,11 @@ class ExclusiveMaximumNumberAndMaximum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/exclusive_minimum_number_and_minimum.h b/vendor/blaze/src/alterschema/common/exclusive_minimum_number_and_minimum.h index 3e940564f..46a1b10d0 100644 --- a/vendor/blaze/src/alterschema/common/exclusive_minimum_number_and_minimum.h +++ b/vendor/blaze/src/alterschema/common/exclusive_minimum_number_and_minimum.h @@ -11,11 +11,11 @@ class ExclusiveMinimumNumberAndMinimum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/flatten_nested_allof.h b/vendor/blaze/src/alterschema/common/flatten_nested_allof.h index 715003bfd..ca0aa3a29 100644 --- a/vendor/blaze/src/alterschema/common/flatten_nested_allof.h +++ b/vendor/blaze/src/alterschema/common/flatten_nested_allof.h @@ -11,11 +11,11 @@ class FlattenNestedAllOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"allOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/flatten_nested_anyof.h b/vendor/blaze/src/alterschema/common/flatten_nested_anyof.h index 39b1ea52c..d0c04ca5d 100644 --- a/vendor/blaze/src/alterschema/common/flatten_nested_anyof.h +++ b/vendor/blaze/src/alterschema/common/flatten_nested_anyof.h @@ -11,11 +11,11 @@ class FlattenNestedAnyOf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"anyOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/flatten_nested_extends.h b/vendor/blaze/src/alterschema/common/flatten_nested_extends.h index 4b6deb4ed..187ffc36b 100644 --- a/vendor/blaze/src/alterschema/common/flatten_nested_extends.h +++ b/vendor/blaze/src/alterschema/common/flatten_nested_extends.h @@ -11,11 +11,11 @@ class FlattenNestedExtends final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"extends"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/if_without_then_else.h b/vendor/blaze/src/alterschema/common/if_without_then_else.h index c92b0e7c7..790a49a70 100644 --- a/vendor/blaze/src/alterschema/common/if_without_then_else.h +++ b/vendor/blaze/src/alterschema/common/if_without_then_else.h @@ -14,11 +14,11 @@ class IfWithoutThenElse final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/common/ignored_metaschema.h b/vendor/blaze/src/alterschema/common/ignored_metaschema.h index 24766cc58..181a39ef5 100644 --- a/vendor/blaze/src/alterschema/common/ignored_metaschema.h +++ b/vendor/blaze/src/alterschema/common/ignored_metaschema.h @@ -11,16 +11,16 @@ class IgnoredMetaschema final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object()); const auto *schema_keyword{schema.try_at("$schema")}; ONLY_CONTINUE_IF(schema_keyword && schema_keyword->is_string()); - const auto dialect{sourcemeta::core::dialect(schema)}; + const auto dialect{sourcemeta::blaze::dialect(schema)}; ONLY_CONTINUE_IF(!dialect.empty()); ONLY_CONTINUE_IF(dialect != location.dialect); return APPLIES_TO_KEYWORDS("$schema"); diff --git a/vendor/blaze/src/alterschema/common/max_contains_without_contains.h b/vendor/blaze/src/alterschema/common/max_contains_without_contains.h index 2bb43a712..afacf26e2 100644 --- a/vendor/blaze/src/alterschema/common/max_contains_without_contains.h +++ b/vendor/blaze/src/alterschema/common/max_contains_without_contains.h @@ -11,11 +11,11 @@ class MaxContainsWithoutContains final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/maximum_real_for_integer.h b/vendor/blaze/src/alterschema/common/maximum_real_for_integer.h index 6329a75b1..17b25cf5f 100644 --- a/vendor/blaze/src/alterschema/common/maximum_real_for_integer.h +++ b/vendor/blaze/src/alterschema/common/maximum_real_for_integer.h @@ -11,11 +11,11 @@ class MaximumRealForInteger final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/min_contains_without_contains.h b/vendor/blaze/src/alterschema/common/min_contains_without_contains.h index 579ae9c6a..b202ec8e5 100644 --- a/vendor/blaze/src/alterschema/common/min_contains_without_contains.h +++ b/vendor/blaze/src/alterschema/common/min_contains_without_contains.h @@ -11,11 +11,11 @@ class MinContainsWithoutContains final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/minimum_real_for_integer.h b/vendor/blaze/src/alterschema/common/minimum_real_for_integer.h index d142cd7e7..a3e894993 100644 --- a/vendor/blaze/src/alterschema/common/minimum_real_for_integer.h +++ b/vendor/blaze/src/alterschema/common/minimum_real_for_integer.h @@ -11,11 +11,11 @@ class MinimumRealForInteger final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/modern_official_dialect_with_empty_fragment.h b/vendor/blaze/src/alterschema/common/modern_official_dialect_with_empty_fragment.h index e3e8daf3c..cedd25239 100644 --- a/vendor/blaze/src/alterschema/common/modern_official_dialect_with_empty_fragment.h +++ b/vendor/blaze/src/alterschema/common/modern_official_dialect_with_empty_fragment.h @@ -11,11 +11,11 @@ class ModernOfficialDialectWithEmptyFragment final [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object()); const auto *schema_keyword{schema.try_at("$schema")}; diff --git a/vendor/blaze/src/alterschema/common/modern_official_dialect_with_http.h b/vendor/blaze/src/alterschema/common/modern_official_dialect_with_http.h index b98b62252..2efde16de 100644 --- a/vendor/blaze/src/alterschema/common/modern_official_dialect_with_http.h +++ b/vendor/blaze/src/alterschema/common/modern_official_dialect_with_http.h @@ -11,13 +11,13 @@ class ModernOfficialDialectWithHttp final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { - using sourcemeta::core::SchemaBaseDialect; + using sourcemeta::blaze::SchemaBaseDialect; ONLY_CONTINUE_IF( location.base_dialect == SchemaBaseDialect::JSON_Schema_2020_12 || location.base_dialect == SchemaBaseDialect::JSON_Schema_2020_12_Hyper || diff --git a/vendor/blaze/src/alterschema/common/non_applicable_additional_items.h b/vendor/blaze/src/alterschema/common/non_applicable_additional_items.h index 90d4c7a4d..894af50a7 100644 --- a/vendor/blaze/src/alterschema/common/non_applicable_additional_items.h +++ b/vendor/blaze/src/alterschema/common/non_applicable_additional_items.h @@ -14,11 +14,11 @@ class NonApplicableAdditionalItems final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2019_09_Applicator, diff --git a/vendor/blaze/src/alterschema/common/non_applicable_disallow_types.h b/vendor/blaze/src/alterschema/common/non_applicable_disallow_types.h index f70963b98..d267dd729 100644 --- a/vendor/blaze/src/alterschema/common/non_applicable_disallow_types.h +++ b/vendor/blaze/src/alterschema/common/non_applicable_disallow_types.h @@ -11,11 +11,11 @@ class NonApplicableDisallowTypes final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"disallow"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/non_applicable_enum_validation_keywords.h b/vendor/blaze/src/alterschema/common/non_applicable_enum_validation_keywords.h index e1076d2ce..25f0c981e 100644 --- a/vendor/blaze/src/alterschema/common/non_applicable_enum_validation_keywords.h +++ b/vendor/blaze/src/alterschema/common/non_applicable_enum_validation_keywords.h @@ -11,11 +11,11 @@ class NonApplicableEnumValidationKeywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/non_applicable_type_specific_keywords.h b/vendor/blaze/src/alterschema/common/non_applicable_type_specific_keywords.h index edab3ec0c..5a5f23b1e 100644 --- a/vendor/blaze/src/alterschema/common/non_applicable_type_specific_keywords.h +++ b/vendor/blaze/src/alterschema/common/non_applicable_type_specific_keywords.h @@ -10,11 +10,11 @@ class NonApplicableTypeSpecificKeywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object()); diff --git a/vendor/blaze/src/alterschema/common/oneof_false_simplify.h b/vendor/blaze/src/alterschema/common/oneof_false_simplify.h index befd95f4b..ed31814b1 100644 --- a/vendor/blaze/src/alterschema/common/oneof_false_simplify.h +++ b/vendor/blaze/src/alterschema/common/oneof_false_simplify.h @@ -10,11 +10,11 @@ class OneOfFalseSimplify final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"oneOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/oneof_to_anyof_disjoint_types.h b/vendor/blaze/src/alterschema/common/oneof_to_anyof_disjoint_types.h index a500acf10..66a39dcdf 100644 --- a/vendor/blaze/src/alterschema/common/oneof_to_anyof_disjoint_types.h +++ b/vendor/blaze/src/alterschema/common/oneof_to_anyof_disjoint_types.h @@ -11,11 +11,11 @@ class OneOfToAnyOfDisjointTypes final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { static const JSON::String KEYWORD{"oneOf"}; ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/common/orphan_definitions.h b/vendor/blaze/src/alterschema/common/orphan_definitions.h index faed95009..5b2d1e85f 100644 --- a/vendor/blaze/src/alterschema/common/orphan_definitions.h +++ b/vendor/blaze/src/alterschema/common/orphan_definitions.h @@ -11,11 +11,11 @@ class OrphanDefinitions final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object()); const bool has_modern_core{ @@ -65,14 +65,14 @@ class OrphanDefinitions final : public SchemaTransformRule { private: static auto - subtree_has_dynamic_anchor(const sourcemeta::core::SchemaFrame &frame, + subtree_has_dynamic_anchor(const sourcemeta::blaze::SchemaFrame &frame, const WeakPointer &entry_pointer) -> bool { for (const auto &[key, location] : frame.locations()) { - if (key.first != sourcemeta::core::SchemaReferenceType::Dynamic) { + if (key.first != sourcemeta::blaze::SchemaReferenceType::Dynamic) { continue; } if (location.type != - sourcemeta::core::SchemaFrame::LocationType::Anchor) { + sourcemeta::blaze::SchemaFrame::LocationType::Anchor) { continue; } if (location.pointer.starts_with(entry_pointer)) { @@ -83,10 +83,10 @@ class OrphanDefinitions final : public SchemaTransformRule { } static auto has_reachable_reference_through( - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &base, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &base, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const WeakPointer &pointer) -> bool { for (const auto &reference : frame.references()) { const auto destination{frame.traverse(reference.second.destination)}; @@ -105,7 +105,7 @@ class OrphanDefinitions final : public SchemaTransformRule { const auto source_location{frame.traverse( source_pointer.initial(), - sourcemeta::core::SchemaFrame::LocationType::Subschema)}; + sourcemeta::blaze::SchemaFrame::LocationType::Subschema)}; if (source_location.has_value() && frame.is_reachable(base, source_location->get(), walker, resolver)) { return true; @@ -116,10 +116,10 @@ class OrphanDefinitions final : public SchemaTransformRule { } static auto - collect_orphans(const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &base, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + collect_orphans(const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &base, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const WeakPointer &prefix, const JSON &schema, const JSON::String &container, const bool has_container, std::vector &orphans) -> void { @@ -133,7 +133,7 @@ class OrphanDefinitions final : public SchemaTransformRule { const auto absolute_entry_pointer{prefix.concat(entry_pointer)}; const auto entry_location{frame.traverse( absolute_entry_pointer, - sourcemeta::core::SchemaFrame::LocationType::Subschema)}; + sourcemeta::blaze::SchemaFrame::LocationType::Subschema)}; if (entry_location.has_value() && !frame.is_reachable(base, entry_location->get(), walker, resolver) && !has_reachable_reference_through(frame, base, walker, resolver, diff --git a/vendor/blaze/src/alterschema/common/required_properties_in_properties.h b/vendor/blaze/src/alterschema/common/required_properties_in_properties.h index f4c56142a..266c166df 100644 --- a/vendor/blaze/src/alterschema/common/required_properties_in_properties.h +++ b/vendor/blaze/src/alterschema/common/required_properties_in_properties.h @@ -11,11 +11,11 @@ class RequiredPropertiesInProperties final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( ((vocabularies.contains( diff --git a/vendor/blaze/src/alterschema/common/single_type_array.h b/vendor/blaze/src/alterschema/common/single_type_array.h index 5f9b0a61a..569481d61 100644 --- a/vendor/blaze/src/alterschema/common/single_type_array.h +++ b/vendor/blaze/src/alterschema/common/single_type_array.h @@ -10,11 +10,11 @@ class SingleTypeArray final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/common/then_without_if.h b/vendor/blaze/src/alterschema/common/then_without_if.h index cf233c819..58bf32cda 100644 --- a/vendor/blaze/src/alterschema/common/then_without_if.h +++ b/vendor/blaze/src/alterschema/common/then_without_if.h @@ -13,11 +13,11 @@ class ThenWithoutIf final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/common/unnecessary_allof_ref_wrapper_draft.h b/vendor/blaze/src/alterschema/common/unnecessary_allof_ref_wrapper_draft.h index e7f9f9235..5f0bc2f08 100644 --- a/vendor/blaze/src/alterschema/common/unnecessary_allof_ref_wrapper_draft.h +++ b/vendor/blaze/src/alterschema/common/unnecessary_allof_ref_wrapper_draft.h @@ -10,11 +10,11 @@ class UnnecessaryAllOfRefWrapperDraft final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any({Vocabularies::Known::JSON_Schema_Draft_7, diff --git a/vendor/blaze/src/alterschema/common/unnecessary_extends_ref_wrapper.h b/vendor/blaze/src/alterschema/common/unnecessary_extends_ref_wrapper.h index bbe81a48f..8c60d8aa3 100644 --- a/vendor/blaze/src/alterschema/common/unnecessary_extends_ref_wrapper.h +++ b/vendor/blaze/src/alterschema/common/unnecessary_extends_ref_wrapper.h @@ -10,11 +10,11 @@ class UnnecessaryExtendsRefWrapper final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/common/unsatisfiable_drop_validation.h b/vendor/blaze/src/alterschema/common/unsatisfiable_drop_validation.h index 67220a845..2ee105d86 100644 --- a/vendor/blaze/src/alterschema/common/unsatisfiable_drop_validation.h +++ b/vendor/blaze/src/alterschema/common/unsatisfiable_drop_validation.h @@ -10,11 +10,11 @@ class UnsatisfiableDropValidation final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, @@ -37,7 +37,7 @@ class UnsatisfiableDropValidation final : public SchemaTransformRule { } } else { const auto *not_value{schema.try_at("not")}; - if (not_value && sourcemeta::core::is_empty_schema(*not_value)) { + if (not_value && sourcemeta::blaze::is_empty_schema(*not_value)) { trigger_keyword = "not"; } } @@ -79,7 +79,7 @@ class UnsatisfiableDropValidation final : public SchemaTransformRule { if (value.is_string()) { return value.to_string() == "any"; } - if (sourcemeta::core::is_empty_schema(value)) { + if (sourcemeta::blaze::is_empty_schema(value)) { return true; } if (value.is_array()) { @@ -87,7 +87,7 @@ class UnsatisfiableDropValidation final : public SchemaTransformRule { if (entry.is_string()) { return entry.to_string() == "any"; } - return sourcemeta::core::is_empty_schema(entry); + return sourcemeta::blaze::is_empty_schema(entry); }); } return false; diff --git a/vendor/blaze/src/alterschema/common/unsatisfiable_in_place_applicator_type.h b/vendor/blaze/src/alterschema/common/unsatisfiable_in_place_applicator_type.h index cd9685a5d..a4b35ce65 100644 --- a/vendor/blaze/src/alterschema/common/unsatisfiable_in_place_applicator_type.h +++ b/vendor/blaze/src/alterschema/common/unsatisfiable_in_place_applicator_type.h @@ -11,11 +11,11 @@ class UnsatisfiableInPlaceApplicatorType final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object() && schema.defines("type")); ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema.h b/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema.h index 077c992d6..0c2abcfe4 100644 --- a/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema.h +++ b/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema.h @@ -18,7 +18,7 @@ #include #include -#include +#include #include // std::uint8_t #include // std::optional, std::nullopt @@ -67,7 +67,7 @@ enum class AlterSchemaMode : std::uint8_t { /// example: /// /// ```cpp -/// #include +/// #include /// #include /// /// sourcemeta::blaze::SchemaTransformer bundle; @@ -84,8 +84,8 @@ enum class AlterSchemaMode : std::uint8_t { /// } /// })JSON"); /// -/// bundle.apply(schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); +/// bundle.apply(schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); /// ``` SOURCEMETA_BLAZE_ALTERSCHEMA_EXPORT auto add(SchemaTransformer &bundle, const AlterSchemaMode mode) -> void; @@ -105,18 +105,18 @@ class SOURCEMETA_BLAZE_ALTERSCHEMA_EXPORT SchemaRule final using mutates = std::false_type; using reframe_after_transform = std::false_type; SchemaRule(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Compiler &compiler, const std::string_view default_dialect = "", const std::optional &tweaks = std::nullopt); [[nodiscard]] auto condition(const sourcemeta::core::JSON &, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override; private: diff --git a/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema_transformer.h b/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema_transformer.h index 400a0dfc0..bd46c3cfc 100644 --- a/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema_transformer.h +++ b/vendor/blaze/src/alterschema/include/sourcemeta/blaze/alterschema_transformer.h @@ -5,9 +5,9 @@ #include #endif +#include #include #include -#include #include // assert #include // std::derived_from, std::same_as @@ -90,11 +90,11 @@ class SOURCEMETA_BLAZE_ALTERSCHEMA_EXPORT SchemaTransformRule { [[nodiscard]] auto check(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, const sourcemeta::core::JSON::String &exclude_keyword) const -> Result; /// A method to optionally fix any reference location that was affected by the @@ -109,11 +109,11 @@ class SOURCEMETA_BLAZE_ALTERSCHEMA_EXPORT SchemaTransformRule { /// The rule condition [[nodiscard]] virtual auto condition( const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const -> Result = 0; + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> Result = 0; /// The rule transformation. If this virtual method is not overriden, /// then the rule is considered to not mutate the schema @@ -177,8 +177,8 @@ class SOURCEMETA_BLAZE_ALTERSCHEMA_EXPORT SchemaTransformer { /// Apply the bundle of rules to a schema [[nodiscard]] auto apply(sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Callback &callback, std::string_view default_dialect = "", std::string_view default_id = "", const sourcemeta::core::JSON::String &exclude_keyword = "") const @@ -187,8 +187,8 @@ class SOURCEMETA_BLAZE_ALTERSCHEMA_EXPORT SchemaTransformer { /// Report back the rules from the bundle that need to be applied to a schema [[nodiscard]] auto check(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Callback &callback, std::string_view default_dialect = "", std::string_view default_id = "", const sourcemeta::core::JSON::String &exclude_keyword = "") const diff --git a/vendor/blaze/src/alterschema/linter/comment_trim.h b/vendor/blaze/src/alterschema/linter/comment_trim.h index 9dabf43b3..cb9d11e70 100644 --- a/vendor/blaze/src/alterschema/linter/comment_trim.h +++ b/vendor/blaze/src/alterschema/linter/comment_trim.h @@ -10,11 +10,11 @@ class CommentTrim final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Core, diff --git a/vendor/blaze/src/alterschema/linter/conflicting_readonly_writeonly.h b/vendor/blaze/src/alterschema/linter/conflicting_readonly_writeonly.h new file mode 100644 index 000000000..e79828a9d --- /dev/null +++ b/vendor/blaze/src/alterschema/linter/conflicting_readonly_writeonly.h @@ -0,0 +1,31 @@ +class ConflictingReadOnlyWriteOnly final : public SchemaTransformRule { +public: + using mutates = std::false_type; + using reframe_after_transform = std::false_type; + ConflictingReadOnlyWriteOnly() + : SchemaTransformRule{"conflicting_readonly_writeonly", + "The `readOnly` and `writeOnly` keywords are " + "mutually exclusive"} {}; + + [[nodiscard]] auto + condition(const sourcemeta::core::JSON &schema, + const sourcemeta::core::JSON &, + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const + -> SchemaTransformRule::Result override { + ONLY_CONTINUE_IF(vocabularies.contains_any( + {Vocabularies::Known::JSON_Schema_2020_12_Meta_Data, + Vocabularies::Known::JSON_Schema_2019_09_Meta_Data, + Vocabularies::Known::JSON_Schema_Draft_7})); + ONLY_CONTINUE_IF(schema.is_object()); + const auto *read_only{schema.try_at("readOnly")}; + const auto *write_only{schema.try_at("writeOnly")}; + ONLY_CONTINUE_IF(read_only && write_only); + ONLY_CONTINUE_IF(read_only->is_boolean() && write_only->is_boolean()); + ONLY_CONTINUE_IF(read_only->to_boolean() && write_only->to_boolean()); + return APPLIES_TO_KEYWORDS("readOnly", "writeOnly"); + } +}; diff --git a/vendor/blaze/src/alterschema/linter/const_not_in_enum.h b/vendor/blaze/src/alterschema/linter/const_not_in_enum.h index 4412c12ab..538691768 100644 --- a/vendor/blaze/src/alterschema/linter/const_not_in_enum.h +++ b/vendor/blaze/src/alterschema/linter/const_not_in_enum.h @@ -11,11 +11,11 @@ class ConstNotInEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/linter/content_schema_default.h b/vendor/blaze/src/alterschema/linter/content_schema_default.h index 04021cfb7..1ae69204a 100644 --- a/vendor/blaze/src/alterschema/linter/content_schema_default.h +++ b/vendor/blaze/src/alterschema/linter/content_schema_default.h @@ -14,11 +14,11 @@ class ContentSchemaDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/definitions_to_defs.h b/vendor/blaze/src/alterschema/linter/definitions_to_defs.h index 827d25891..2e7a5177e 100644 --- a/vendor/blaze/src/alterschema/linter/definitions_to_defs.h +++ b/vendor/blaze/src/alterschema/linter/definitions_to_defs.h @@ -10,11 +10,11 @@ class DefinitionsToDefs final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Core, diff --git a/vendor/blaze/src/alterschema/linter/dependencies_default.h b/vendor/blaze/src/alterschema/linter/dependencies_default.h index 3b7baa8b6..0df7feec6 100644 --- a/vendor/blaze/src/alterschema/linter/dependencies_default.h +++ b/vendor/blaze/src/alterschema/linter/dependencies_default.h @@ -14,11 +14,11 @@ class DependenciesDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_7, diff --git a/vendor/blaze/src/alterschema/linter/dependent_required_default.h b/vendor/blaze/src/alterschema/linter/dependent_required_default.h index 8e5bdd3fe..d151e7732 100644 --- a/vendor/blaze/src/alterschema/linter/dependent_required_default.h +++ b/vendor/blaze/src/alterschema/linter/dependent_required_default.h @@ -11,11 +11,11 @@ class DependentRequiredDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/description_trailing_period.h b/vendor/blaze/src/alterschema/linter/description_trailing_period.h index 287515857..b2fc6ef48 100644 --- a/vendor/blaze/src/alterschema/linter/description_trailing_period.h +++ b/vendor/blaze/src/alterschema/linter/description_trailing_period.h @@ -11,11 +11,11 @@ class DescriptionTrailingPeriod final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Meta_Data, diff --git a/vendor/blaze/src/alterschema/linter/description_trim.h b/vendor/blaze/src/alterschema/linter/description_trim.h index 5be9dfdd3..ff1f81b80 100644 --- a/vendor/blaze/src/alterschema/linter/description_trim.h +++ b/vendor/blaze/src/alterschema/linter/description_trim.h @@ -11,11 +11,11 @@ class DescriptionTrim final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Meta_Data, diff --git a/vendor/blaze/src/alterschema/linter/disallow_default.h b/vendor/blaze/src/alterschema/linter/disallow_default.h index 51a812c99..8459adbdd 100644 --- a/vendor/blaze/src/alterschema/linter/disallow_default.h +++ b/vendor/blaze/src/alterschema/linter/disallow_default.h @@ -10,11 +10,11 @@ class DisallowDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/linter/divisible_by_default.h b/vendor/blaze/src/alterschema/linter/divisible_by_default.h index f4eb8c2d0..0d95fe0cc 100644 --- a/vendor/blaze/src/alterschema/linter/divisible_by_default.h +++ b/vendor/blaze/src/alterschema/linter/divisible_by_default.h @@ -11,11 +11,11 @@ class DivisibleByDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_Draft_3, diff --git a/vendor/blaze/src/alterschema/linter/duplicate_examples.h b/vendor/blaze/src/alterschema/linter/duplicate_examples.h index eaeca1ea3..3604ece7b 100644 --- a/vendor/blaze/src/alterschema/linter/duplicate_examples.h +++ b/vendor/blaze/src/alterschema/linter/duplicate_examples.h @@ -10,11 +10,11 @@ class DuplicateExamples final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Meta_Data, diff --git a/vendor/blaze/src/alterschema/linter/enum_to_const.h b/vendor/blaze/src/alterschema/linter/enum_to_const.h index 9d3c7fc5b..35d9d4989 100644 --- a/vendor/blaze/src/alterschema/linter/enum_to_const.h +++ b/vendor/blaze/src/alterschema/linter/enum_to_const.h @@ -10,11 +10,11 @@ class EnumToConst final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/linter/equal_numeric_bounds_to_const.h b/vendor/blaze/src/alterschema/linter/equal_numeric_bounds_to_const.h index 0f2dab921..dea26fa29 100644 --- a/vendor/blaze/src/alterschema/linter/equal_numeric_bounds_to_const.h +++ b/vendor/blaze/src/alterschema/linter/equal_numeric_bounds_to_const.h @@ -11,11 +11,11 @@ class EqualNumericBoundsToConst final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any({ Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/linter/forbid_empty_enum.h b/vendor/blaze/src/alterschema/linter/forbid_empty_enum.h index 10a2319f4..17026c404 100644 --- a/vendor/blaze/src/alterschema/linter/forbid_empty_enum.h +++ b/vendor/blaze/src/alterschema/linter/forbid_empty_enum.h @@ -10,11 +10,11 @@ class ForbidEmptyEnum final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/linter/incoherent_min_max_contains.h b/vendor/blaze/src/alterschema/linter/incoherent_min_max_contains.h index 960e2bb73..863116759 100644 --- a/vendor/blaze/src/alterschema/linter/incoherent_min_max_contains.h +++ b/vendor/blaze/src/alterschema/linter/incoherent_min_max_contains.h @@ -11,11 +11,11 @@ class IncoherentMinMaxContains final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/items_array_default.h b/vendor/blaze/src/alterschema/linter/items_array_default.h index f6dbafbf2..b20627a4b 100644 --- a/vendor/blaze/src/alterschema/linter/items_array_default.h +++ b/vendor/blaze/src/alterschema/linter/items_array_default.h @@ -10,11 +10,11 @@ class ItemsArrayDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2019_09_Applicator, diff --git a/vendor/blaze/src/alterschema/linter/items_schema_default.h b/vendor/blaze/src/alterschema/linter/items_schema_default.h index c67e6909d..ebd84902c 100644 --- a/vendor/blaze/src/alterschema/linter/items_schema_default.h +++ b/vendor/blaze/src/alterschema/linter/items_schema_default.h @@ -13,11 +13,11 @@ class ItemsSchemaDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/multiple_of_default.h b/vendor/blaze/src/alterschema/linter/multiple_of_default.h index 09844d894..7e5429248 100644 --- a/vendor/blaze/src/alterschema/linter/multiple_of_default.h +++ b/vendor/blaze/src/alterschema/linter/multiple_of_default.h @@ -10,11 +10,11 @@ class MultipleOfDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/linter/pattern_properties_default.h b/vendor/blaze/src/alterschema/linter/pattern_properties_default.h index 4ed4b3563..a2165505e 100644 --- a/vendor/blaze/src/alterschema/linter/pattern_properties_default.h +++ b/vendor/blaze/src/alterschema/linter/pattern_properties_default.h @@ -11,11 +11,11 @@ class PatternPropertiesDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/linter/portable_anchor_names.h b/vendor/blaze/src/alterschema/linter/portable_anchor_names.h index 7be1ccc2f..4835b41cb 100644 --- a/vendor/blaze/src/alterschema/linter/portable_anchor_names.h +++ b/vendor/blaze/src/alterschema/linter/portable_anchor_names.h @@ -11,11 +11,11 @@ class PortableAnchorNames final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Core, diff --git a/vendor/blaze/src/alterschema/linter/properties_default.h b/vendor/blaze/src/alterschema/linter/properties_default.h index 35ac20c1c..64aad5f7c 100644 --- a/vendor/blaze/src/alterschema/linter/properties_default.h +++ b/vendor/blaze/src/alterschema/linter/properties_default.h @@ -11,11 +11,11 @@ class PropertiesDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/linter/property_names_default.h b/vendor/blaze/src/alterschema/linter/property_names_default.h index cbc9635c7..ba10aa4c1 100644 --- a/vendor/blaze/src/alterschema/linter/property_names_default.h +++ b/vendor/blaze/src/alterschema/linter/property_names_default.h @@ -14,11 +14,11 @@ class PropertyNamesDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/linter/property_names_type_default.h b/vendor/blaze/src/alterschema/linter/property_names_type_default.h index 7aa9f2670..645a2cb62 100644 --- a/vendor/blaze/src/alterschema/linter/property_names_type_default.h +++ b/vendor/blaze/src/alterschema/linter/property_names_type_default.h @@ -11,11 +11,11 @@ class PropertyNamesTypeDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/linter/simple_properties_identifiers.h b/vendor/blaze/src/alterschema/linter/simple_properties_identifiers.h index 61cbaa12d..2454ba0c0 100644 --- a/vendor/blaze/src/alterschema/linter/simple_properties_identifiers.h +++ b/vendor/blaze/src/alterschema/linter/simple_properties_identifiers.h @@ -13,11 +13,11 @@ class SimplePropertiesIdentifiers final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/alterschema/linter/title_description_equal.h b/vendor/blaze/src/alterschema/linter/title_description_equal.h index 4ef00961e..b2cfcdd04 100644 --- a/vendor/blaze/src/alterschema/linter/title_description_equal.h +++ b/vendor/blaze/src/alterschema/linter/title_description_equal.h @@ -11,11 +11,11 @@ class TitleDescriptionEqual final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Meta_Data, diff --git a/vendor/blaze/src/alterschema/linter/title_trailing_period.h b/vendor/blaze/src/alterschema/linter/title_trailing_period.h index 806403842..ea3052e3f 100644 --- a/vendor/blaze/src/alterschema/linter/title_trailing_period.h +++ b/vendor/blaze/src/alterschema/linter/title_trailing_period.h @@ -11,11 +11,11 @@ class TitleTrailingPeriod final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Meta_Data, diff --git a/vendor/blaze/src/alterschema/linter/title_trim.h b/vendor/blaze/src/alterschema/linter/title_trim.h index 94d2824df..8758d8964 100644 --- a/vendor/blaze/src/alterschema/linter/title_trim.h +++ b/vendor/blaze/src/alterschema/linter/title_trim.h @@ -10,11 +10,11 @@ class TitleTrim final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Meta_Data, diff --git a/vendor/blaze/src/alterschema/linter/top_level_description.h b/vendor/blaze/src/alterschema/linter/top_level_description.h index 69a68c0a9..fb9996954 100644 --- a/vendor/blaze/src/alterschema/linter/top_level_description.h +++ b/vendor/blaze/src/alterschema/linter/top_level_description.h @@ -11,11 +11,11 @@ class TopLevelDescription final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(location.pointer.empty()); ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/top_level_examples.h b/vendor/blaze/src/alterschema/linter/top_level_examples.h index ff6fd27fa..bee363b41 100644 --- a/vendor/blaze/src/alterschema/linter/top_level_examples.h +++ b/vendor/blaze/src/alterschema/linter/top_level_examples.h @@ -11,11 +11,11 @@ class TopLevelExamples final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(location.pointer.empty()); ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/top_level_title.h b/vendor/blaze/src/alterschema/linter/top_level_title.h index 8e2abe71a..9509cdf4e 100644 --- a/vendor/blaze/src/alterschema/linter/top_level_title.h +++ b/vendor/blaze/src/alterschema/linter/top_level_title.h @@ -11,11 +11,11 @@ class TopLevelTitle final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(location.pointer.empty()); ONLY_CONTINUE_IF(vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/unevaluated_items_default.h b/vendor/blaze/src/alterschema/linter/unevaluated_items_default.h index 9d24ef1ba..57f9e0481 100644 --- a/vendor/blaze/src/alterschema/linter/unevaluated_items_default.h +++ b/vendor/blaze/src/alterschema/linter/unevaluated_items_default.h @@ -14,11 +14,11 @@ class UnevaluatedItemsDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/unevaluated_properties_default.h b/vendor/blaze/src/alterschema/linter/unevaluated_properties_default.h index 6b7ade065..20cec0e02 100644 --- a/vendor/blaze/src/alterschema/linter/unevaluated_properties_default.h +++ b/vendor/blaze/src/alterschema/linter/unevaluated_properties_default.h @@ -14,11 +14,11 @@ class UnevaluatedPropertiesDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/unknown_format_prefix.h b/vendor/blaze/src/alterschema/linter/unknown_format_prefix.h index 94ab66771..339d3609f 100644 --- a/vendor/blaze/src/alterschema/linter/unknown_format_prefix.h +++ b/vendor/blaze/src/alterschema/linter/unknown_format_prefix.h @@ -13,11 +13,11 @@ class UnknownFormatPrefix final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(schema.is_object() && schema.defines("format")); const auto &format_value{schema.at("format")}; @@ -46,9 +46,9 @@ class UnknownFormatPrefix final : public SchemaTransformRule { private: static auto - recognized_formats_for(const sourcemeta::core::Vocabularies &vocabularies) + recognized_formats_for(const sourcemeta::blaze::Vocabularies &vocabularies) -> const std::unordered_set * { - using Known = sourcemeta::core::Vocabularies::Known; + using Known = sourcemeta::blaze::Vocabularies::Known; if (vocabularies.contains_any( {Known::JSON_Schema_Draft_3, Known::JSON_Schema_Draft_3_Hyper})) { return &DRAFT_3_FORMATS; diff --git a/vendor/blaze/src/alterschema/linter/unnecessary_allof_ref_wrapper_modern.h b/vendor/blaze/src/alterschema/linter/unnecessary_allof_ref_wrapper_modern.h index 183266b46..218990a74 100644 --- a/vendor/blaze/src/alterschema/linter/unnecessary_allof_ref_wrapper_modern.h +++ b/vendor/blaze/src/alterschema/linter/unnecessary_allof_ref_wrapper_modern.h @@ -10,11 +10,11 @@ class UnnecessaryAllOfRefWrapperModern final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Applicator, @@ -63,7 +63,7 @@ class UnnecessaryAllOfRefWrapperModern final : public SchemaTransformRule { } } - schema.at("allOf").erase_if(sourcemeta::core::is_empty_schema); + schema.at("allOf").erase_if(sourcemeta::blaze::is_empty_schema); if (schema.at("allOf").empty()) { schema.erase("allOf"); diff --git a/vendor/blaze/src/alterschema/linter/unsatisfiable_max_contains.h b/vendor/blaze/src/alterschema/linter/unsatisfiable_max_contains.h index 9d02a2ce1..ccf7b0029 100644 --- a/vendor/blaze/src/alterschema/linter/unsatisfiable_max_contains.h +++ b/vendor/blaze/src/alterschema/linter/unsatisfiable_max_contains.h @@ -12,11 +12,11 @@ class UnsatisfiableMaxContains final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains_any( diff --git a/vendor/blaze/src/alterschema/linter/unsatisfiable_min_properties.h b/vendor/blaze/src/alterschema/linter/unsatisfiable_min_properties.h index 42ab40e82..1b3521e31 100644 --- a/vendor/blaze/src/alterschema/linter/unsatisfiable_min_properties.h +++ b/vendor/blaze/src/alterschema/linter/unsatisfiable_min_properties.h @@ -11,11 +11,11 @@ class UnsatisfiableMinProperties final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(vocabularies.contains_any( {Vocabularies::Known::JSON_Schema_2020_12_Validation, diff --git a/vendor/blaze/src/alterschema/linter/valid_default.h b/vendor/blaze/src/alterschema/linter/valid_default.h index 7485c7013..c2ea6f206 100644 --- a/vendor/blaze/src/alterschema/linter/valid_default.h +++ b/vendor/blaze/src/alterschema/linter/valid_default.h @@ -10,11 +10,11 @@ class ValidDefault final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { using Known = Vocabularies::Known; // Technically, the `default` keyword goes back to Draft 1, but Blaze @@ -45,7 +45,7 @@ class ValidDefault final : public SchemaTransformRule { frame, base.value().get(), Mode::Exhaustive); } catch (const CompilerReferenceTargetNotSchemaError &) { throw; - } catch (const sourcemeta::core::SchemaVocabularyError &) { + } catch (const sourcemeta::blaze::SchemaVocabularyError &) { throw; } catch (...) { return false; @@ -75,21 +75,21 @@ class ValidDefault final : public SchemaTransformRule { const auto &root_base_dialect{ frame.traverse(frame.root()).value_or(location).get().base_dialect}; std::string_view default_id{location.base}; - if (!sourcemeta::core::identify(root, root_base_dialect).empty() || + if (!sourcemeta::blaze::identify(root, root_base_dialect).empty() || default_id.empty()) { default_id = ""; } sourcemeta::core::WeakPointer base; const auto subschema{ - sourcemeta::core::wrap(root, frame, location, resolver, base)}; + sourcemeta::blaze::wrap(root, frame, location, resolver, base)}; Template schema_template; try { schema_template = compile(subschema, walker, resolver, this->compiler_, Mode::Exhaustive, location.dialect, default_id); } catch (const CompilerReferenceTargetNotSchemaError &) { throw; - } catch (const sourcemeta::core::SchemaVocabularyError &) { + } catch (const sourcemeta::blaze::SchemaVocabularyError &) { throw; } catch (...) { return false; diff --git a/vendor/blaze/src/alterschema/linter/valid_examples.h b/vendor/blaze/src/alterschema/linter/valid_examples.h index 738daf353..1d3328804 100644 --- a/vendor/blaze/src/alterschema/linter/valid_examples.h +++ b/vendor/blaze/src/alterschema/linter/valid_examples.h @@ -11,11 +11,11 @@ class ValidExamples final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { using Known = Vocabularies::Known; ONLY_CONTINUE_IF( @@ -46,7 +46,7 @@ class ValidExamples final : public SchemaTransformRule { frame, base.value().get(), Mode::Exhaustive); } catch (const CompilerReferenceTargetNotSchemaError &) { throw; - } catch (const sourcemeta::core::SchemaVocabularyError &) { + } catch (const sourcemeta::blaze::SchemaVocabularyError &) { throw; } catch (...) { return false; @@ -84,21 +84,21 @@ class ValidExamples final : public SchemaTransformRule { const auto &root_base_dialect{ frame.traverse(frame.root()).value_or(location).get().base_dialect}; std::string_view default_id{location.base}; - if (!sourcemeta::core::identify(root, root_base_dialect).empty() || + if (!sourcemeta::blaze::identify(root, root_base_dialect).empty() || default_id.empty()) { default_id = ""; } sourcemeta::core::WeakPointer base; const auto subschema{ - sourcemeta::core::wrap(root, frame, location, resolver, base)}; + sourcemeta::blaze::wrap(root, frame, location, resolver, base)}; Template schema_template; try { schema_template = compile(subschema, walker, resolver, this->compiler_, Mode::Exhaustive, location.dialect, default_id); } catch (const CompilerReferenceTargetNotSchemaError &) { throw; - } catch (const sourcemeta::core::SchemaVocabularyError &) { + } catch (const sourcemeta::blaze::SchemaVocabularyError &) { throw; } catch (...) { return false; diff --git a/vendor/blaze/src/alterschema/schema_rule.cc b/vendor/blaze/src/alterschema/schema_rule.cc index adbdb7228..5d50a1597 100644 --- a/vendor/blaze/src/alterschema/schema_rule.cc +++ b/vendor/blaze/src/alterschema/schema_rule.cc @@ -63,8 +63,8 @@ static auto extract_title(const sourcemeta::core::JSON &schema) -> std::string { } SchemaRule::SchemaRule(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Compiler &compiler, const std::string_view default_dialect, const std::optional &tweaks) @@ -74,11 +74,11 @@ SchemaRule::SchemaRule(const sourcemeta::core::JSON &schema, auto SchemaRule::condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result { SimpleOutput output{schema}; Evaluator evaluator; diff --git a/vendor/blaze/src/alterschema/transformer.cc b/vendor/blaze/src/alterschema/transformer.cc index 8769e9326..08b417776 100644 --- a/vendor/blaze/src/alterschema/transformer.cc +++ b/vendor/blaze/src/alterschema/transformer.cc @@ -1,5 +1,5 @@ #include -#include +#include #include #include // std::erase_if @@ -39,12 +39,12 @@ auto calculate_health_percentage(const std::size_t subschemas, auto check_rules( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const std::vector, bool, bool>> &rules, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const sourcemeta::blaze::SchemaTransformer::Callback &callback, const sourcemeta::core::JSON::String &exclude_keyword, const bool non_mutating_only) -> std::pair { @@ -57,9 +57,9 @@ auto check_rules( for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } @@ -101,13 +101,13 @@ auto check_rules( calculate_health_percentage(subschema_count, subschema_failures)}; } -auto analyse_frame(sourcemeta::core::SchemaFrame &frame, +auto analyse_frame(sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const std::string_view default_dialect, const std::string_view default_id) -> void { - if (!sourcemeta::core::identify(schema, resolver, default_dialect).empty()) { + if (!sourcemeta::blaze::identify(schema, resolver, default_dialect).empty()) { frame.analyse(schema, walker, resolver, default_dialect); } else { frame.analyse(schema, walker, resolver, default_dialect, default_id); @@ -151,11 +151,11 @@ auto SchemaTransformRule::rereference(const std::string_view reference, auto SchemaTransformRule::check(const core::JSON &schema, const core::JSON &root, - const core::Vocabularies &vocabularies, - const core::SchemaWalker &walker, - const core::SchemaResolver &resolver, - const core::SchemaFrame &frame, - const core::SchemaFrame::Location &location, + const blaze::Vocabularies &vocabularies, + const blaze::SchemaWalker &walker, + const blaze::SchemaResolver &resolver, + const blaze::SchemaFrame &frame, + const blaze::SchemaFrame::Location &location, const core::JSON::String &exclude_keyword) const -> SchemaTransformRule::Result { auto result{this->condition(schema, root, vocabularies, frame, location, @@ -176,22 +176,22 @@ auto SchemaTransformRule::check(const core::JSON &schema, } auto SchemaTransformer::check(const core::JSON &schema, - const core::SchemaWalker &walker, - const core::SchemaResolver &resolver, + const blaze::SchemaWalker &walker, + const blaze::SchemaResolver &resolver, const SchemaTransformer::Callback &callback, std::string_view default_dialect, std::string_view default_id, const core::JSON::String &exclude_keyword) const -> std::pair { - core::SchemaFrame frame{core::SchemaFrame::Mode::References}; + blaze::SchemaFrame frame{blaze::SchemaFrame::Mode::References}; analyse_frame(frame, schema, walker, resolver, default_dialect, default_id); return check_rules(schema, frame, this->rules, walker, resolver, callback, exclude_keyword, false); } auto SchemaTransformer::apply(core::JSON &schema, - const core::SchemaWalker &walker, - const core::SchemaResolver &resolver, + const blaze::SchemaWalker &walker, + const blaze::SchemaResolver &resolver, const SchemaTransformer::Callback &callback, std::string_view default_dialect, std::string_view default_id, @@ -202,7 +202,7 @@ auto SchemaTransformer::apply(core::JSON &schema, ProcessedRuleHasher> processed_rules; - core::SchemaFrame frame{core::SchemaFrame::Mode::References}; + blaze::SchemaFrame frame{blaze::SchemaFrame::Mode::References}; struct PotentiallyBrokenReference { core::Pointer origin; @@ -229,8 +229,8 @@ auto SchemaTransformer::apply(core::JSON &schema, bool applied{false}; for (const auto &entry : frame.locations()) { - if (entry.second.type != core::SchemaFrame::LocationType::Resource && - entry.second.type != core::SchemaFrame::LocationType::Subschema) { + if (entry.second.type != blaze::SchemaFrame::LocationType::Resource && + entry.second.type != blaze::SchemaFrame::LocationType::Subschema) { continue; } diff --git a/vendor/blaze/src/alterschema/upgrade/helpers.h b/vendor/blaze/src/alterschema/upgrade/helpers.h index eec42a5aa..c1041100b 100644 --- a/vendor/blaze/src/alterschema/upgrade/helpers.h +++ b/vendor/blaze/src/alterschema/upgrade/helpers.h @@ -23,7 +23,7 @@ static auto current_dialect_or_override(const sourcemeta::core::JSON &schema) static auto subschema_at_dialect(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaFrame::Location &location, const std::string_view dialect) -> bool { const auto current{current_dialect_or_override(schema)}; if (!current.empty()) { diff --git a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_2020_12_keywords.h b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_2020_12_keywords.h index a95c05900..585e5617a 100644 --- a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_2020_12_keywords.h +++ b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_2020_12_keywords.h @@ -8,11 +8,11 @@ class PrefixPromoted202012Keywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_2019_09_Core) && diff --git a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_2019_09_keywords.h b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_2019_09_keywords.h index 0e67f10aa..a123738a5 100644 --- a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_2019_09_keywords.h +++ b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_2019_09_keywords.h @@ -8,11 +8,11 @@ class PrefixPromoted201909Keywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_7) && diff --git a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_4_keywords.h b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_4_keywords.h index 921cbba99..aa049986d 100644 --- a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_4_keywords.h +++ b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_4_keywords.h @@ -8,11 +8,11 @@ class PrefixPromotedDraft4Keywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_3) && diff --git a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_6_keywords.h b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_6_keywords.h index f2bcae220..7d9aeb843 100644 --- a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_6_keywords.h +++ b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_6_keywords.h @@ -8,11 +8,11 @@ class PrefixPromotedDraft6Keywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_4) && diff --git a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_7_keywords.h b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_7_keywords.h index 597d2eee6..e0a129967 100644 --- a/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_7_keywords.h +++ b/vendor/blaze/src/alterschema/upgrade/prefix_promoted_draft_7_keywords.h @@ -8,11 +8,11 @@ class PrefixPromotedDraft7Keywords final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_6) && diff --git a/vendor/blaze/src/alterschema/upgrade/upgrade_2019_09_to_2020_12.h b/vendor/blaze/src/alterschema/upgrade/upgrade_2019_09_to_2020_12.h index 18d907b71..f2b2c501d 100644 --- a/vendor/blaze/src/alterschema/upgrade/upgrade_2019_09_to_2020_12.h +++ b/vendor/blaze/src/alterschema/upgrade/upgrade_2019_09_to_2020_12.h @@ -8,11 +8,11 @@ class Upgrade201909To202012 final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_2019_09_Core) && @@ -20,7 +20,7 @@ class Upgrade201909To202012 final : public SchemaTransformRule { const bool is_resource_scope{ location.type == - sourcemeta::core::SchemaFrame::LocationType::Resource || + sourcemeta::blaze::SchemaFrame::LocationType::Resource || location.pointer.empty()}; if (is_resource_scope) { @@ -209,14 +209,14 @@ class Upgrade201909To202012 final : public SchemaTransformRule { static auto compute_document_has_unevaluated_items( const sourcemeta::core::JSON &root, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) -> bool { + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) -> bool { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } const auto absolute{sourcemeta::core::to_pointer(entry.second.pointer)}; @@ -229,7 +229,7 @@ class Upgrade201909To202012 final : public SchemaTransformRule { const auto &keyword_metadata{ walker("unevaluatedItems", location_vocabularies)}; if (keyword_metadata.type != - sourcemeta::core::SchemaKeywordType::Unknown) { + sourcemeta::blaze::SchemaKeywordType::Unknown) { return true; } } @@ -238,13 +238,13 @@ class Upgrade201909To202012 final : public SchemaTransformRule { static auto any_descendant_has_pending_pattern( const sourcemeta::core::JSON &root, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location) -> bool { + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location) -> bool { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } if (entry.second.pointer.size() <= location.pointer.size() || @@ -288,7 +288,7 @@ class Upgrade201909To202012 final : public SchemaTransformRule { } static auto location_inside_contains_wrapper( - const sourcemeta::core::SchemaFrame::Location &location) -> bool { + const sourcemeta::blaze::SchemaFrame::Location &location) -> bool { if (location.pointer.size() < 2) { return false; } @@ -305,7 +305,7 @@ class Upgrade201909To202012 final : public SchemaTransformRule { static auto has_pending_pattern(const sourcemeta::core::JSON &subschema, - const sourcemeta::core::SchemaFrame::Location &location) + const sourcemeta::blaze::SchemaFrame::Location &location) -> bool { if (!subschema.is_object()) { return false; @@ -333,17 +333,17 @@ class Upgrade201909To202012 final : public SchemaTransformRule { } static auto find_enclosing_resource( - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location ¤t_location) + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location ¤t_location) -> std::optional> { + const sourcemeta::blaze::SchemaFrame::Location>> { std::optional< - std::reference_wrapper> + std::reference_wrapper> closest; for (const auto &entry : frame.locations()) { const bool entry_is_resource_scope{ entry.second.type == - sourcemeta::core::SchemaFrame::LocationType::Resource || + sourcemeta::blaze::SchemaFrame::LocationType::Resource || entry.second.pointer.empty()}; if (!entry_is_resource_scope) { continue; @@ -374,8 +374,8 @@ class Upgrade201909To202012 final : public SchemaTransformRule { auto compute_anchor_sanitization( const sourcemeta::core::JSON &root, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &resource_location) const + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &resource_location) const -> void { this->anchor_renames_.clear(); this->anchor_ref_rewrites_.clear(); @@ -387,10 +387,10 @@ class Upgrade201909To202012 final : public SchemaTransformRule { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Anchor) { + sourcemeta::blaze::SchemaFrame::LocationType::Anchor) { continue; } - if (entry.first.first != sourcemeta::core::SchemaReferenceType::Static) { + if (entry.first.first != sourcemeta::blaze::SchemaReferenceType::Static) { continue; } if (!pointer_within_resource(entry.second.pointer, resource_pointer)) { @@ -484,8 +484,9 @@ class Upgrade201909To202012 final : public SchemaTransformRule { static auto enclosing_resource_has_pending_sanitization( const sourcemeta::core::JSON &root, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location ¤t_location) -> bool { + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location ¤t_location) + -> bool { const auto closest{find_enclosing_resource(frame, current_location)}; if (!closest.has_value()) { return false; @@ -494,10 +495,10 @@ class Upgrade201909To202012 final : public SchemaTransformRule { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Anchor) { + sourcemeta::blaze::SchemaFrame::LocationType::Anchor) { continue; } - if (entry.first.first != sourcemeta::core::SchemaReferenceType::Static) { + if (entry.first.first != sourcemeta::blaze::SchemaReferenceType::Static) { continue; } if (!pointer_within_resource(entry.second.pointer, resource_pointer)) { @@ -534,8 +535,9 @@ class Upgrade201909To202012 final : public SchemaTransformRule { static auto compute_resource_has_recursive_anchor( const sourcemeta::core::JSON &root, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location ¤t_location) -> bool { + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location ¤t_location) + -> bool { const auto closest{find_enclosing_resource(frame, current_location)}; if (!closest.has_value()) { return false; @@ -545,16 +547,16 @@ class Upgrade201909To202012 final : public SchemaTransformRule { std::set seen; for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } if (!entry.second.pointer.starts_with(resource_pointer)) { continue; } if (entry.second.type == - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.pointer.size() > resource_pointer.size()) { continue; } diff --git a/vendor/blaze/src/alterschema/upgrade/upgrade_dialect_override_cleanup.h b/vendor/blaze/src/alterschema/upgrade/upgrade_dialect_override_cleanup.h index 5dbbd6540..e1752b075 100644 --- a/vendor/blaze/src/alterschema/upgrade/upgrade_dialect_override_cleanup.h +++ b/vendor/blaze/src/alterschema/upgrade/upgrade_dialect_override_cleanup.h @@ -8,11 +8,11 @@ class UpgradeDialectOverrideCleanup final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaFrame &, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF(location.pointer.empty() && schema.is_object()); diff --git a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_3_to_draft_4.h b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_3_to_draft_4.h index 49fce4775..5261d5b38 100644 --- a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_3_to_draft_4.h +++ b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_3_to_draft_4.h @@ -8,11 +8,11 @@ class UpgradeDraft3ToDraft4 final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_3) && @@ -26,9 +26,9 @@ class UpgradeDraft3ToDraft4 final : public SchemaTransformRule { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } diff --git a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_4_to_draft_6.h b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_4_to_draft_6.h index e4e4e7b93..4db59d961 100644 --- a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_4_to_draft_6.h +++ b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_4_to_draft_6.h @@ -8,11 +8,11 @@ class UpgradeDraft4ToDraft6 final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_4) && @@ -20,7 +20,7 @@ class UpgradeDraft4ToDraft6 final : public SchemaTransformRule { const bool is_resource_scope = location.type == - sourcemeta::core::SchemaFrame::LocationType::Resource || + sourcemeta::blaze::SchemaFrame::LocationType::Resource || location.pointer.empty(); const bool sanitization_branch = @@ -42,9 +42,9 @@ class UpgradeDraft4ToDraft6 final : public SchemaTransformRule { if (!sanitization_branch) { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } @@ -573,14 +573,14 @@ class UpgradeDraft4ToDraft6 final : public SchemaTransformRule { } static auto enclosing_resource_has_pending_sanitization( - const sourcemeta::core::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaFrame::Location &location, const sourcemeta::core::JSON &root, - const sourcemeta::core::SchemaFrame &frame) -> bool { + const sourcemeta::blaze::SchemaFrame &frame) -> bool { std::optional closest; for (const auto &entry : frame.locations()) { const bool entry_is_resource_scope = entry.second.type == - sourcemeta::core::SchemaFrame::LocationType::Resource || + sourcemeta::blaze::SchemaFrame::LocationType::Resource || entry.second.pointer.empty(); if (!entry_is_resource_scope) { continue; diff --git a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_6_to_draft_7.h b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_6_to_draft_7.h index a3cf617c0..92295b58d 100644 --- a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_6_to_draft_7.h +++ b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_6_to_draft_7.h @@ -8,11 +8,11 @@ class UpgradeDraft6ToDraft7 final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_6) && @@ -20,9 +20,9 @@ class UpgradeDraft6ToDraft7 final : public SchemaTransformRule { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } diff --git a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_7_to_draft_2019_09.h b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_7_to_draft_2019_09.h index 187be7660..be536e682 100644 --- a/vendor/blaze/src/alterschema/upgrade/upgrade_draft_7_to_draft_2019_09.h +++ b/vendor/blaze/src/alterschema/upgrade/upgrade_draft_7_to_draft_2019_09.h @@ -8,11 +8,11 @@ class UpgradeDraft7To201909 final : public SchemaTransformRule { [[nodiscard]] auto condition(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &root, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &, - const sourcemeta::core::SchemaResolver &) const + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &, + const sourcemeta::blaze::SchemaResolver &) const -> SchemaTransformRule::Result override { ONLY_CONTINUE_IF( vocabularies.contains(Vocabularies::Known::JSON_Schema_Draft_7) && @@ -25,9 +25,9 @@ class UpgradeDraft7To201909 final : public SchemaTransformRule { for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } diff --git a/vendor/blaze/src/codegen/CMakeLists.txt b/vendor/blaze/src/codegen/CMakeLists.txt index 099c0cda9..a570b15b4 100644 --- a/vendor/blaze/src/codegen/CMakeLists.txt +++ b/vendor/blaze/src/codegen/CMakeLists.txt @@ -15,6 +15,6 @@ endif() target_link_libraries(sourcemeta_blaze_codegen PUBLIC sourcemeta::core::json) target_link_libraries(sourcemeta_blaze_codegen PUBLIC - sourcemeta::core::jsonschema) + sourcemeta::blaze::foundation) target_link_libraries(sourcemeta_blaze_codegen PRIVATE sourcemeta::blaze::alterschema) diff --git a/vendor/blaze/src/codegen/codegen.cc b/vendor/blaze/src/codegen/codegen.cc index 03d309415..c7831daae 100644 --- a/vendor/blaze/src/codegen/codegen.cc +++ b/vendor/blaze/src/codegen/codegen.cc @@ -10,10 +10,10 @@ namespace { auto is_validation_subschema( - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) -> bool { + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) -> bool { if (!location.parent.has_value()) { return false; } @@ -36,7 +36,7 @@ auto is_validation_subschema( const auto vocabularies{ frame.vocabularies(parent_location.value().get(), resolver)}; const auto &walker_result{walker(keyword_token.to_property(), vocabularies)}; - using Type = sourcemeta::core::SchemaKeywordType; + using Type = sourcemeta::blaze::SchemaKeywordType; if (walker_result.type == Type::ApplicatorValueTraverseAnyPropertyKey || walker_result.type == Type::ApplicatorValueTraverseAnyItem) { return true; @@ -51,8 +51,8 @@ auto is_validation_subschema( namespace sourcemeta::blaze { auto compile(const sourcemeta::core::JSON &input, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const CodegenCompiler &compiler, const std::string_view default_dialect, const std::string_view default_id) -> CodegenIRResult { @@ -60,8 +60,8 @@ auto compile(const sourcemeta::core::JSON &input, // (1) Bundle the schema to resolve external references // -------------------------------------------------------------------------- - auto schema{sourcemeta::core::bundle(input, walker, resolver, default_dialect, - default_id)}; + auto schema{sourcemeta::blaze::bundle(input, walker, resolver, + default_dialect, default_id)}; // -------------------------------------------------------------------------- // (2) Canonicalize the schema for easier analysis @@ -81,8 +81,8 @@ auto compile(const sourcemeta::core::JSON &input, // (3) Frame the resulting schema with instance location information // -------------------------------------------------------------------------- - sourcemeta::core::SchemaFrame frame{ - sourcemeta::core::SchemaFrame::Mode::References}; + sourcemeta::blaze::SchemaFrame frame{ + sourcemeta::blaze::SchemaFrame::Mode::References}; frame.analyse(schema, walker, resolver, default_dialect, default_id); // -------------------------------------------------------------------------- @@ -96,9 +96,9 @@ auto compile(const sourcemeta::core::JSON &input, CodegenIRResult result; for (const auto &[key, location] : frame.locations()) { if (location.type != - sourcemeta::core::SchemaFrame::LocationType::Resource && + sourcemeta::blaze::SchemaFrame::LocationType::Resource && location.type != - sourcemeta::core::SchemaFrame::LocationType::Subschema) { + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } diff --git a/vendor/blaze/src/codegen/codegen_default_compiler.h b/vendor/blaze/src/codegen/codegen_default_compiler.h index c92041bb8..98eced569 100644 --- a/vendor/blaze/src/codegen/codegen_default_compiler.h +++ b/vendor/blaze/src/codegen/codegen_default_compiler.h @@ -3,7 +3,7 @@ #include -#include +#include #include #include @@ -29,10 +29,10 @@ namespace sourcemeta::blaze { auto handle_impossible(const sourcemeta::core::JSON &, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &) -> CodegenIRImpossible { return CodegenIRImpossible{ {.pointer = sourcemeta::core::to_pointer(location.pointer), @@ -40,10 +40,10 @@ auto handle_impossible(const sourcemeta::core::JSON &, } auto handle_any(const sourcemeta::core::JSON &, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &) -> CodegenIRAny { return CodegenIRAny{ {.pointer = sourcemeta::core::to_pointer(location.pointer), @@ -51,10 +51,10 @@ auto handle_any(const sourcemeta::core::JSON &, } auto handle_string(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIRScalar { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, {"$schema", @@ -85,10 +85,10 @@ auto handle_string(const sourcemeta::core::JSON &schema, } auto handle_object(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIRObject { ONLY_WHITELIST_KEYWORDS( schema, subschema, location.pointer, @@ -193,10 +193,10 @@ auto handle_object(const sourcemeta::core::JSON &schema, } auto handle_integer(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIRScalar { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, @@ -212,10 +212,10 @@ auto handle_integer(const sourcemeta::core::JSON &schema, } auto handle_number(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIRScalar { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, {"$schema", "$id", "$anchor", "$dynamicAnchor", @@ -230,10 +230,10 @@ auto handle_number(const sourcemeta::core::JSON &schema, } auto handle_array(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, {"$schema", "$id", "$anchor", @@ -245,8 +245,6 @@ auto handle_array(const sourcemeta::core::JSON &schema, "default", "deprecated", "readOnly", "writeOnly", "examples"}); - using Vocabularies = sourcemeta::core::Vocabularies; - if (vocabularies.contains( Vocabularies::Known::JSON_Schema_2020_12_Applicator) && subschema.defines("prefixItems")) { @@ -355,10 +353,10 @@ auto handle_array(const sourcemeta::core::JSON &schema, } auto handle_enum(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, {"$schema", "$id", "$anchor", "$dynamicAnchor", @@ -394,10 +392,10 @@ auto handle_enum(const sourcemeta::core::JSON &schema, } auto handle_anyof(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS( schema, subschema, location.pointer, @@ -431,10 +429,10 @@ auto handle_anyof(const sourcemeta::core::JSON &schema, } auto handle_oneof(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS( schema, subschema, location.pointer, @@ -468,10 +466,10 @@ auto handle_oneof(const sourcemeta::core::JSON &schema, } auto handle_ref(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, {"$schema", "$id", "$anchor", "$dynamicAnchor", @@ -485,7 +483,7 @@ auto handle_ref(const sourcemeta::core::JSON &schema, const auto &references{frame.references()}; const auto reference{references.find( - {sourcemeta::core::SchemaReferenceType::Static, ref_weak_pointer})}; + {sourcemeta::blaze::SchemaReferenceType::Static, ref_weak_pointer})}; assert(reference != references.cend()); const auto &destination{reference->second.destination}; @@ -504,13 +502,13 @@ auto handle_ref(const sourcemeta::core::JSON &schema, .symbol = symbol(frame, target_location)}}; } -auto handle_dynamic_ref(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, - const sourcemeta::core::JSON &subschema) - -> CodegenIREntity { +auto handle_dynamic_ref( + const sourcemeta::core::JSON &schema, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, + const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, {"$schema", "$id", "$anchor", "$dynamicAnchor", "$defs", "$vocabulary", "$dynamicRef", "title", @@ -526,7 +524,7 @@ auto handle_dynamic_ref(const sourcemeta::core::JSON &schema, // Note: The frame internally converts single-target dynamic references to // static reference const auto static_reference{references.find( - {sourcemeta::core::SchemaReferenceType::Static, ref_weak_pointer})}; + {sourcemeta::blaze::SchemaReferenceType::Static, ref_weak_pointer})}; if (static_reference != references.cend()) { const auto &destination{static_reference->second.destination}; const auto target{frame.traverse(destination)}; @@ -547,15 +545,15 @@ auto handle_dynamic_ref(const sourcemeta::core::JSON &schema, // Multi-target dynamic reference: find all dynamic anchors with the matching // fragment and emit a union of all possible targets const auto dynamic_reference{references.find( - {sourcemeta::core::SchemaReferenceType::Dynamic, ref_weak_pointer})}; + {sourcemeta::blaze::SchemaReferenceType::Dynamic, ref_weak_pointer})}; assert(dynamic_reference != references.cend()); assert(dynamic_reference->second.fragment.has_value()); const auto &fragment{dynamic_reference->second.fragment.value()}; std::vector branches; for (const auto &[key, entry] : frame.locations()) { - if (key.first != sourcemeta::core::SchemaReferenceType::Dynamic || - entry.type != sourcemeta::core::SchemaFrame::LocationType::Anchor) { + if (key.first != sourcemeta::blaze::SchemaReferenceType::Dynamic || + entry.type != sourcemeta::blaze::SchemaFrame::LocationType::Anchor) { continue; } @@ -577,10 +575,10 @@ auto handle_dynamic_ref(const sourcemeta::core::JSON &schema, } auto handle_allof(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS( schema, subschema, location.pointer, @@ -630,10 +628,10 @@ auto handle_allof(const sourcemeta::core::JSON &schema, auto handle_if_then_else( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::Vocabularies &, - const sourcemeta::core::SchemaResolver &, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::Vocabularies &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { ONLY_WHITELIST_KEYWORDS(schema, subschema, location.pointer, {"$schema", "$id", "$anchor", "$dynamicAnchor", @@ -676,16 +674,15 @@ auto handle_if_then_else( } auto default_compiler(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaResolver &resolver, const sourcemeta::core::JSON &subschema) -> CodegenIREntity { const auto vocabularies{frame.vocabularies(location, resolver)}; assert(!vocabularies.empty()); // Be strict with vocabulary support - using Vocabularies = sourcemeta::core::Vocabularies; static const std::unordered_set supported{ Vocabularies::Known::JSON_Schema_2020_12_Core, Vocabularies::Known::JSON_Schema_2020_12_Applicator, diff --git a/vendor/blaze/src/codegen/codegen_symbol.cc b/vendor/blaze/src/codegen/codegen_symbol.cc index 6003dba22..ebe40ddf2 100644 --- a/vendor/blaze/src/codegen/codegen_symbol.cc +++ b/vendor/blaze/src/codegen/codegen_symbol.cc @@ -74,8 +74,8 @@ auto push_token_segments(std::vector &result, namespace sourcemeta::blaze { -auto symbol(const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location) +auto symbol(const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location) -> std::vector { std::vector result; diff --git a/vendor/blaze/src/codegen/include/sourcemeta/blaze/codegen.h b/vendor/blaze/src/codegen/include/sourcemeta/blaze/codegen.h index db14db1c2..d7319bdbb 100644 --- a/vendor/blaze/src/codegen/include/sourcemeta/blaze/codegen.h +++ b/vendor/blaze/src/codegen/include/sourcemeta/blaze/codegen.h @@ -10,9 +10,9 @@ #include // NOLINTEND(misc-include-cleaner) +#include #include #include -#include #include // std::uint8_t #include // std::function @@ -126,32 +126,32 @@ using CodegenIRResult = std::vector; /// @ingroup codegen using CodegenCompiler = std::function; + const sourcemeta::core::JSON &, const sourcemeta::blaze::SchemaFrame &, + const sourcemeta::blaze::SchemaFrame::Location &, + const sourcemeta::blaze::SchemaResolver &, const sourcemeta::core::JSON &)>; /// @ingroup codegen SOURCEMETA_BLAZE_CODEGEN_EXPORT auto default_compiler(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaResolver &resolver, const sourcemeta::core::JSON &subschema) -> CodegenIREntity; /// @ingroup codegen SOURCEMETA_BLAZE_CODEGEN_EXPORT auto compile(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const CodegenCompiler &compiler, const std::string_view default_dialect = "", const std::string_view default_id = "") -> CodegenIRResult; /// @ingroup codegen SOURCEMETA_BLAZE_CODEGEN_EXPORT -auto symbol(const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location) +auto symbol(const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location) -> std::vector; /// @ingroup codegen diff --git a/vendor/blaze/src/compiler/CMakeLists.txt b/vendor/blaze/src/compiler/CMakeLists.txt index a95786cee..d0d0da5e1 100644 --- a/vendor/blaze/src/compiler/CMakeLists.txt +++ b/vendor/blaze/src/compiler/CMakeLists.txt @@ -25,6 +25,6 @@ target_link_libraries(sourcemeta_blaze_compiler PUBLIC target_link_libraries(sourcemeta_blaze_compiler PRIVATE sourcemeta::core::uri) target_link_libraries(sourcemeta_blaze_compiler PUBLIC - sourcemeta::core::jsonschema) + sourcemeta::blaze::foundation) target_link_libraries(sourcemeta_blaze_compiler PUBLIC sourcemeta::blaze::evaluator) diff --git a/vendor/blaze/src/compiler/compile.cc b/vendor/blaze/src/compiler/compile.cc index 65b1fcd37..857719669 100644 --- a/vendor/blaze/src/compiler/compile.cc +++ b/vendor/blaze/src/compiler/compile.cc @@ -1,7 +1,7 @@ #include #include -#include +#include #include // std::move, std::sort, std::unique #include // assert @@ -43,7 +43,7 @@ auto compile_subschema(const sourcemeta::blaze::Context &context, } Instructions steps; - for (const auto &entry : sourcemeta::core::SchemaKeywordIterator{ + for (const auto &entry : sourcemeta::blaze::SchemaKeywordIterator{ schema_context.schema, context.walker, context.resolver, default_dialect}) { assert(entry.pointer.back().is_property()); @@ -64,7 +64,7 @@ auto compile_subschema(const sourcemeta::blaze::Context &context, steps)) { // Just a sanity check to ensure every keyword location is indeed valid assert(context.frame.locations().contains( - {sourcemeta::core::SchemaReferenceType::Static, + {sourcemeta::blaze::SchemaReferenceType::Static, context.extra[step.extra_index].keyword_location})); steps.push_back(std::move(step)); } @@ -75,7 +75,7 @@ auto compile_subschema(const sourcemeta::blaze::Context &context, // TODO: Somehow move this logic up to `SchemaFrame` auto schema_frame_populate_target_types( - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, std::unordered_map> &target_types) -> void { for (const auto &reference : frame.references()) { @@ -152,10 +152,10 @@ auto schema_frame_populate_target_types( namespace sourcemeta::blaze { auto compile(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Compiler &compiler, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const std::string_view entrypoint, const Mode mode, const std::optional &tweaks) -> Template { assert(is_schema(schema)); @@ -169,7 +169,7 @@ auto compile(const sourcemeta::core::JSON &schema, const auto &entrypoint_location{maybe_entrypoint_location->get()}; if (entrypoint_location.type == - sourcemeta::core::SchemaFrame::LocationType::Pointer) [[unlikely]] { + sourcemeta::blaze::SchemaFrame::LocationType::Pointer) [[unlikely]] { throw CompilerInvalidEntryPoint{ entrypoint, "The given entry point URI is not a valid subschema"}; } @@ -181,7 +181,7 @@ auto compile(const sourcemeta::core::JSON &schema, std::vector resources; for (const auto &entry : frame.locations()) { if (entry.second.type == - sourcemeta::core::SchemaFrame::LocationType::Resource) { + sourcemeta::blaze::SchemaFrame::LocationType::Resource) { resources.push_back(entry.first.second); } } @@ -203,7 +203,7 @@ auto compile(const sourcemeta::core::JSON &schema, // Check whether dynamic referencing takes places in this schema. If not, // we can avoid the overhead of keeping track of dynamics scopes, etc if (reference.first.first == - sourcemeta::core::SchemaReferenceType::Dynamic) { + sourcemeta::blaze::SchemaReferenceType::Dynamic) { uses_dynamic_scopes = true; break; } @@ -216,13 +216,13 @@ auto compile(const sourcemeta::core::JSON &schema, std::unordered_map> target_types; schema_frame_populate_target_types(frame, target_types); - std::map< - std::tuple, - std::pair> + std::map, + std::pair> targets_map; targets_map.emplace( - std::make_tuple(sourcemeta::core::SchemaReferenceType::Static, entrypoint, - false), + std::make_tuple(sourcemeta::blaze::SchemaReferenceType::Static, + entrypoint, false), std::make_pair(0, nullptr)); for (const auto &reference : frame.references()) { @@ -236,7 +236,7 @@ auto compile(const sourcemeta::core::JSON &schema, auto reference_origin{frame.traverse(reference.first.second)}; assert(reference_origin.has_value()); while (reference_origin->get().type == - sourcemeta::core::SchemaFrame::LocationType::Pointer && + sourcemeta::blaze::SchemaFrame::LocationType::Pointer && reference_origin->get().parent.has_value()) { reference_origin = frame.traverse(reference_origin->get().parent.value()); assert(reference_origin.has_value()); @@ -244,7 +244,7 @@ auto compile(const sourcemeta::core::JSON &schema, // Skip unreachable targets if (reference_origin->get().type != - sourcemeta::core::SchemaFrame::LocationType::Pointer && + sourcemeta::blaze::SchemaFrame::LocationType::Pointer && !frame.is_reachable(entrypoint_location, reference_origin->get(), walker, resolver)) { continue; @@ -274,8 +274,8 @@ auto compile(const sourcemeta::core::JSON &schema, // but could be used as override targets during dynamic resolution for (const auto &entry : frame.locations()) { if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Anchor || - entry.first.first != sourcemeta::core::SchemaReferenceType::Dynamic) { + sourcemeta::blaze::SchemaFrame::LocationType::Anchor || + entry.first.first != sourcemeta::blaze::SchemaReferenceType::Dynamic) { continue; } @@ -321,8 +321,9 @@ auto compile(const sourcemeta::core::JSON &schema, for (const auto &entry : context.frame.locations()) { // We are only trying to find dynamic anchors if (entry.second.type != - sourcemeta::core::SchemaFrame::LocationType::Anchor || - entry.first.first != sourcemeta::core::SchemaReferenceType::Dynamic) { + sourcemeta::blaze::SchemaFrame::LocationType::Anchor || + entry.first.first != + sourcemeta::blaze::SchemaReferenceType::Dynamic) { continue; } @@ -342,7 +343,7 @@ auto compile(const sourcemeta::core::JSON &schema, // Find the index in targets for this dynamic anchor const auto key{ - std::make_tuple(sourcemeta::core::SchemaReferenceType::Dynamic, + std::make_tuple(sourcemeta::blaze::SchemaReferenceType::Dynamic, std::string_view{entry.first.second}, false)}; assert(context.targets.contains(key)); const auto index{context.targets.at(key).first}; @@ -366,9 +367,9 @@ auto compile(const sourcemeta::core::JSON &schema, assert(location.has_value()); const auto &entry{location->get()}; - if (entry.type != sourcemeta::core::SchemaFrame::LocationType::Subschema && - entry.type != sourcemeta::core::SchemaFrame::LocationType::Resource && - entry.type != sourcemeta::core::SchemaFrame::LocationType::Anchor) + if (entry.type != sourcemeta::blaze::SchemaFrame::LocationType::Subschema && + entry.type != sourcemeta::blaze::SchemaFrame::LocationType::Resource && + entry.type != sourcemeta::blaze::SchemaFrame::LocationType::Anchor) [[unlikely]] { assert(reference_pointer != nullptr); const auto parent_size{entry.parent ? entry.parent->size() : 0}; @@ -379,7 +380,7 @@ auto compile(const sourcemeta::core::JSON &schema, } auto subschema{sourcemeta::core::get(context.root, entry.pointer)}; - auto nested_vocabularies{sourcemeta::core::vocabularies( + auto nested_vocabularies{sourcemeta::blaze::vocabularies( subschema, context.resolver, entry.dialect)}; const auto nested_relative_pointer{ entry.pointer.slice(entry.relative_pointer)}; @@ -427,8 +428,8 @@ auto compile(const sourcemeta::core::JSON &schema, } auto compile(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Compiler &compiler, const Mode mode, const std::string_view default_dialect, const std::string_view default_id, @@ -438,11 +439,11 @@ auto compile(const sourcemeta::core::JSON &schema, // Make sure the input schema is bundled, otherwise we won't be able to // resolve remote references here - const sourcemeta::core::JSON result{sourcemeta::core::bundle( + const sourcemeta::core::JSON result{sourcemeta::blaze::bundle( schema, walker, resolver, default_dialect, default_id)}; - sourcemeta::core::SchemaFrame frame{ - sourcemeta::core::SchemaFrame::Mode::References}; + sourcemeta::blaze::SchemaFrame frame{ + sourcemeta::blaze::SchemaFrame::Mode::References}; frame.analyse(result, walker, resolver, default_dialect, default_id); return compile(result, walker, resolver, compiler, frame, entrypoint.empty() ? frame.root() : entrypoint, mode, tweaks); @@ -464,15 +465,15 @@ auto compile(const Context &context, const SchemaContext &schema_context, // Otherwise the recursion attempt is non-sense if (!context.frame.locations().contains( - {sourcemeta::core::SchemaReferenceType::Static, destination})) + {sourcemeta::blaze::SchemaReferenceType::Static, destination})) [[unlikely]] { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( destination, to_pointer(schema_context.relative_pointer), "The target of the reference does not exist in the schema"); } const auto &entry{context.frame.locations().at( - {sourcemeta::core::SchemaReferenceType::Static, destination})}; + {sourcemeta::blaze::SchemaReferenceType::Static, destination})}; const auto &new_schema{get(context.root, entry.pointer)}; assert(is_schema(new_schema)); diff --git a/vendor/blaze/src/compiler/compile_helpers.h b/vendor/blaze/src/compiler/compile_helpers.h index 03984f6d9..d0e6df3c6 100644 --- a/vendor/blaze/src/compiler/compile_helpers.h +++ b/vendor/blaze/src/compiler/compile_helpers.h @@ -177,10 +177,10 @@ unsigned_integer_property(const sourcemeta::core::JSON &document, inline auto static_frame_entry(const Context &context, const SchemaContext &schema_context) - -> const sourcemeta::core::SchemaFrame::Location & { + -> const sourcemeta::blaze::SchemaFrame::Location & { const auto current{ to_uri(schema_context.relative_pointer, schema_context.base).recompose()}; - const auto type{sourcemeta::core::SchemaReferenceType::Static}; + const auto type{sourcemeta::blaze::SchemaReferenceType::Static}; assert(context.frame.locations().contains({type, current})); return context.frame.locations().at({type, current}); } @@ -189,7 +189,7 @@ inline auto walk_subschemas(const Context &context, const SchemaContext &schema_context, const DynamicContext &dynamic_context) -> auto { const auto &entry{static_frame_entry(context, schema_context)}; - return sourcemeta::core::SchemaIterator{ + return sourcemeta::blaze::SchemaIterator{ schema_context.schema.at(dynamic_context.keyword), context.walker, context.resolver, entry.dialect}; } @@ -223,7 +223,7 @@ inline auto find_adjacent(const Context &context, // Attempt to statically follow references static const std::string ref_keyword{"$ref"}; if (schema_context.schema.defines("$ref")) { - const auto reference_type{sourcemeta::core::SchemaReferenceType::Static}; + const auto reference_type{sourcemeta::blaze::SchemaReferenceType::Static}; const auto destination_uri{ to_uri(schema_context.relative_pointer.initial().concat( make_weak_pointer(ref_keyword)), @@ -255,16 +255,17 @@ inline auto find_adjacent(const Context &context, for (const auto &possible_keyword_uri : possible_keyword_uris) { if (!context.frame.locations().contains( - {sourcemeta::core::SchemaReferenceType::Static, + {sourcemeta::blaze::SchemaReferenceType::Static, possible_keyword_uri})) { continue; } const auto &frame_entry{context.frame.locations().at( - {sourcemeta::core::SchemaReferenceType::Static, possible_keyword_uri})}; + {sourcemeta::blaze::SchemaReferenceType::Static, + possible_keyword_uri})}; const auto &subschema{ sourcemeta::core::get(context.root, frame_entry.pointer)}; - const auto &subschema_vocabularies{sourcemeta::core::vocabularies( + const auto &subschema_vocabularies{sourcemeta::blaze::vocabularies( subschema, context.resolver, frame_entry.dialect)}; if (std::ranges::any_of(vocabularies, @@ -322,9 +323,9 @@ inline auto requires_evaluation(const Context &context, // TODO: Elevate to Core and test inline auto -is_circular(const sourcemeta::core::SchemaFrame &frame, +is_circular(const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::WeakPointer &reference_origin, - const sourcemeta::core::SchemaFrame::ReferencesEntry &reference, + const sourcemeta::blaze::SchemaFrame::ReferencesEntry &reference, std::unordered_set &visited) -> bool { if (visited.contains(reference.destination)) { return false; @@ -344,7 +345,7 @@ is_circular(const sourcemeta::core::SchemaFrame &frame, for (const auto &ref_entry : frame.references()) { if (ref_entry.first.first == - sourcemeta::core::SchemaReferenceType::Static && + sourcemeta::blaze::SchemaReferenceType::Static && ref_entry.first.second.starts_with(destination_pointer)) { if (is_circular(frame, reference_origin, ref_entry.second, visited)) { return true; @@ -359,7 +360,7 @@ is_circular(const sourcemeta::core::SchemaFrame &frame, // level inline auto required_properties(const SchemaContext &schema_context) -> ValueStringSet { - using Known = sourcemeta::core::Vocabularies::Known; + using Known = sourcemeta::blaze::Vocabularies::Known; const auto imports_validation_vocabulary{ schema_context.vocabularies.contains(Known::JSON_Schema_Draft_4) || schema_context.vocabularies.contains(Known::JSON_Schema_Draft_6) || diff --git a/vendor/blaze/src/compiler/default_compiler.cc b/vendor/blaze/src/compiler/default_compiler.cc index c4e23cfc3..28b20bdbb 100644 --- a/vendor/blaze/src/compiler/default_compiler.cc +++ b/vendor/blaze/src/compiler/default_compiler.cc @@ -20,8 +20,8 @@ auto sourcemeta::blaze::default_schema_compiler( -> sourcemeta::blaze::Instructions { assert(!dynamic_context.keyword.empty()); - using Known = sourcemeta::core::Vocabularies::Known; - static std::unordered_set + using Known = sourcemeta::blaze::Vocabularies::Known; + static std::unordered_set SUPPORTED_VOCABULARIES{Known::JSON_Schema_2020_12_Core, Known::JSON_Schema_2020_12_Applicator, Known::JSON_Schema_2020_12_Unevaluated, @@ -112,7 +112,7 @@ auto sourcemeta::blaze::default_schema_compiler( COMPILE(Known::JSON_Schema_2020_12_Content, "contentSchema", compiler_2019_09_content_contentschema); COMPILE(Known::JSON_Schema_2020_12_Format_Annotation, "format", - compiler_2019_09_format_format); + compiler_draft3_validation_format); // Same as Draft 7 @@ -214,7 +214,7 @@ auto sourcemeta::blaze::default_schema_compiler( COMPILE(Known::JSON_Schema_2019_09_Content, "contentSchema", compiler_2019_09_content_contentschema); COMPILE(Known::JSON_Schema_2019_09_Format, "format", - compiler_2019_09_format_format); + compiler_draft3_validation_format); // Same as Draft 7 @@ -368,6 +368,8 @@ auto sourcemeta::blaze::default_schema_compiler( "minLength", compiler_draft3_validation_minlength); COMPILE_ANY(Known::JSON_Schema_Draft_7, Known::JSON_Schema_Draft_7_Hyper, "pattern", compiler_draft3_validation_pattern); + COMPILE_ANY(Known::JSON_Schema_Draft_7, Known::JSON_Schema_Draft_7_Hyper, + "format", compiler_draft3_validation_format); // ******************************************** // DRAFT 6 @@ -452,6 +454,8 @@ auto sourcemeta::blaze::default_schema_compiler( "minLength", compiler_draft3_validation_minlength); COMPILE_ANY(Known::JSON_Schema_Draft_6, Known::JSON_Schema_Draft_6_Hyper, "pattern", compiler_draft3_validation_pattern); + COMPILE_ANY(Known::JSON_Schema_Draft_6, Known::JSON_Schema_Draft_6_Hyper, + "format", compiler_draft3_validation_format); // ******************************************** // DRAFT 4 @@ -515,6 +519,8 @@ auto sourcemeta::blaze::default_schema_compiler( "maxLength", compiler_draft3_validation_maxlength); COMPILE_ANY(Known::JSON_Schema_Draft_4, Known::JSON_Schema_Draft_4_Hyper, "minLength", compiler_draft3_validation_minlength); + COMPILE_ANY(Known::JSON_Schema_Draft_4, Known::JSON_Schema_Draft_4_Hyper, + "format", compiler_draft3_validation_format); // Number COMPILE_ANY(Known::JSON_Schema_Draft_4, Known::JSON_Schema_Draft_4_Hyper, @@ -574,6 +580,8 @@ auto sourcemeta::blaze::default_schema_compiler( "maxLength", compiler_draft3_validation_maxlength); COMPILE_ANY(Known::JSON_Schema_Draft_3, Known::JSON_Schema_Draft_3_Hyper, "minLength", compiler_draft3_validation_minlength); + COMPILE_ANY(Known::JSON_Schema_Draft_3, Known::JSON_Schema_Draft_3_Hyper, + "format", compiler_draft3_validation_format); // Number COMPILE_ANY(Known::JSON_Schema_Draft_3, Known::JSON_Schema_Draft_3_Hyper, diff --git a/vendor/blaze/src/compiler/default_compiler_2019_09.h b/vendor/blaze/src/compiler/default_compiler_2019_09.h index 32ebf57b9..133ece3cd 100644 --- a/vendor/blaze/src/compiler/default_compiler_2019_09.h +++ b/vendor/blaze/src/compiler/default_compiler_2019_09.h @@ -269,7 +269,7 @@ auto compiler_2019_09_applicator_unevaluateditems( const auto &keyword{dependency.back().to_property()}; const auto &subschema{sourcemeta::core::get(context.root, dependency)}; // NOLINTBEGIN(bugprone-branch-clone) - if (keyword == "items" && sourcemeta::core::is_schema(subschema)) { + if (keyword == "items" && sourcemeta::blaze::is_schema(subschema)) { return {}; } else if (keyword == "additionalItems" || keyword == "unevaluatedItems") { return {}; @@ -418,7 +418,7 @@ auto compiler_2019_09_core_recursiveref(const Context &context, const auto &entry{static_frame_entry(context, schema_context)}; // In this case, just behave as a normal static reference if (!context.frame.references().contains( - {sourcemeta::core::SchemaReferenceType::Dynamic, entry.pointer})) { + {sourcemeta::blaze::SchemaReferenceType::Dynamic, entry.pointer})) { return compiler_draft3_core_ref(context, schema_context, dynamic_context, current); } @@ -509,24 +509,5 @@ auto compiler_2019_09_content_contentschema( ValueType::String, std::move(children))}; } -auto compiler_2019_09_format_format(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context, - const Instructions &) -> Instructions { - if (context.mode == Mode::FastValidation) { - return {}; - } - - Instructions children{ - make(sourcemeta::blaze::InstructionIndex::AnnotationEmit, context, - schema_context, dynamic_context, - sourcemeta::core::JSON{ - schema_context.schema.at(dynamic_context.keyword)})}; - - return {make(sourcemeta::blaze::InstructionIndex::ControlGroupWhenType, - context, schema_context, relative_dynamic_context(), - ValueType::String, std::move(children))}; -} - } // namespace internal #endif diff --git a/vendor/blaze/src/compiler/default_compiler_2020_12.h b/vendor/blaze/src/compiler/default_compiler_2020_12.h index d4fe9695a..f1c8cf803 100644 --- a/vendor/blaze/src/compiler/default_compiler_2020_12.h +++ b/vendor/blaze/src/compiler/default_compiler_2020_12.h @@ -73,7 +73,7 @@ auto compiler_2020_12_core_dynamicref(const Context &context, const auto &entry{static_frame_entry(context, schema_context)}; // In this case, just behave as a normal static reference if (!context.frame.references().contains( - {sourcemeta::core::SchemaReferenceType::Dynamic, entry.pointer})) { + {sourcemeta::blaze::SchemaReferenceType::Dynamic, entry.pointer})) { return compiler_draft3_core_ref(context, schema_context, dynamic_context, current); } diff --git a/vendor/blaze/src/compiler/default_compiler_draft3.h b/vendor/blaze/src/compiler/default_compiler_draft3.h index 0b11d1f98..9c2a5508e 100644 --- a/vendor/blaze/src/compiler/default_compiler_draft3.h +++ b/vendor/blaze/src/compiler/default_compiler_draft3.h @@ -287,10 +287,10 @@ auto compiler_draft3_core_ref(const Context &context, const DynamicContext &dynamic_context, const Instructions &) -> Instructions { const auto &entry{static_frame_entry(context, schema_context)}; - const auto type{sourcemeta::core::SchemaReferenceType::Static}; + const auto type{sourcemeta::blaze::SchemaReferenceType::Static}; const auto reference{context.frame.reference(type, entry.pointer)}; if (!reference.has_value()) [[unlikely]] { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( schema_context.schema.at(dynamic_context.keyword).to_string(), to_pointer(schema_context.relative_pointer), "Could not resolve schema reference"); @@ -316,7 +316,7 @@ auto properties_as_loop(const Context &context, return false; } - using Known = sourcemeta::core::Vocabularies::Known; + using Known = sourcemeta::blaze::Vocabularies::Known; const auto size{properties.size()}; const auto imports_validation_vocabulary = schema_context.vocabularies.contains(Known::JSON_Schema_Draft_4) || @@ -349,14 +349,14 @@ auto properties_as_loop(const Context &context, context.frame.references(), [&context, ¤t_entry](const auto &reference) { if (!context.frame.locations().contains( - {sourcemeta::core::SchemaReferenceType::Static, + {sourcemeta::blaze::SchemaReferenceType::Static, reference.second.destination})) { return false; } const auto &target{ context.frame.locations() - .at({sourcemeta::core::SchemaReferenceType::Static, + .at({sourcemeta::blaze::SchemaReferenceType::Static, reference.second.destination}) .pointer}; return is_inside_disjunctor(reference.first.second) && @@ -696,7 +696,7 @@ auto compiler_draft3_applicator_properties_with_options( const auto &keyword_type{ context.walker(keyword, schema_context.vocabularies).type}; - using enum sourcemeta::core::SchemaKeywordType; + using enum sourcemeta::blaze::SchemaKeywordType; if (keyword_type == Assertion || keyword_type == Annotation || keyword_type == Unknown || keyword_type == Comment || keyword_type == Other || keyword_type == LocationMembers) { @@ -953,7 +953,7 @@ auto compiler_draft3_applicator_properties( auto property_instructions{compiler_draft3_applicator_properties_with_options( context, schema_context, dynamic_context, current, false, false)}; - using Known = sourcemeta::core::Vocabularies::Known; + using Known = sourcemeta::blaze::Vocabularies::Known; const auto is_draft3{ schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3) || schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3_Hyper)}; @@ -1872,7 +1872,7 @@ auto compiler_draft3_validation_type(const Context &context, const Instructions &) -> Instructions { const auto &value{schema_context.schema.at(dynamic_context.keyword)}; - using Known = sourcemeta::core::Vocabularies::Known; + using Known = sourcemeta::blaze::Vocabularies::Known; const auto is_draft3{ schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3) || schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3_Hyper)}; @@ -2372,7 +2372,7 @@ auto compiler_draft3_applicator_dependencies( return {}; } - using Known = sourcemeta::core::Vocabularies::Known; + using Known = sourcemeta::blaze::Vocabularies::Known; const auto is_draft3{ schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3) || schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3_Hyper)}; @@ -2439,5 +2439,135 @@ auto compiler_draft3_validation_divisibleby( schema_context.schema.at(dynamic_context.keyword)})}; } +auto compiler_draft3_validation_format(const Context &context, + const SchemaContext &schema_context, + const DynamicContext &dynamic_context, + const Instructions &) -> Instructions { + using Known = sourcemeta::blaze::Vocabularies::Known; + static constexpr auto unsupported_dialect_message{ + "The format assertion tweak not supported in this dialect"}; + + if (schema_context.vocabularies.contains(Known::JSON_Schema_2019_09_Format) || + schema_context.vocabularies.contains( + Known::JSON_Schema_2020_12_Format_Annotation)) { + if (context.tweaks.format_assertion) { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + unsupported_dialect_message); + } + + if (context.mode == Mode::FastValidation) { + return {}; + } + + Instructions children{ + make(sourcemeta::blaze::InstructionIndex::AnnotationEmit, context, + schema_context, dynamic_context, + sourcemeta::core::JSON{ + schema_context.schema.at(dynamic_context.keyword)})}; + + return {make(sourcemeta::blaze::InstructionIndex::ControlGroupWhenType, + context, schema_context, relative_dynamic_context(), + ValueType::String, std::move(children))}; + } + + if (!context.tweaks.format_assertion) { + return {}; + } + + const auto &format{schema_context.schema.at(dynamic_context.keyword)}; + if (!format.is_string()) { + return {}; + } + + const auto &name{format.to_string()}; + ValueStringType type; + + const auto is_draft3{ + schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3) || + schema_context.vocabularies.contains(Known::JSON_Schema_Draft_3_Hyper)}; + const auto is_draft4{ + schema_context.vocabularies.contains(Known::JSON_Schema_Draft_4) || + schema_context.vocabularies.contains(Known::JSON_Schema_Draft_4_Hyper)}; + const auto is_draft6{ + schema_context.vocabularies.contains(Known::JSON_Schema_Draft_6) || + schema_context.vocabularies.contains(Known::JSON_Schema_Draft_6_Hyper)}; + + if (is_draft4 || is_draft6) { + if (name == "date-time") { + type = ValueStringType::DateTime; + } else if (name == "email") { + type = ValueStringType::Email; + } else if (name == "hostname") { + type = ValueStringType::Hostname; + } else if (name == "ipv4") { + type = ValueStringType::IPv4; + } else if (name == "ipv6") { + type = ValueStringType::IPv6; + } else if (name == "uri") { + type = ValueStringType::URI; + } else if (is_draft6 && name == "uri-reference") { + type = ValueStringType::URIReference; + } else if (is_draft6 && name == "uri-template") { + type = ValueStringType::URITemplate; + } else if (is_draft6 && name == "json-pointer") { + type = ValueStringType::JSONPointer; + } else { + return {}; + } + } else if (is_draft3) { + if (name == "date-time") { + type = ValueStringType::DateTime; + } else if (name == "email") { + type = ValueStringType::Email; + } else if (name == "host-name") { + type = ValueStringType::Hostname; + } else if (name == "ip-address") { + type = ValueStringType::IPv4; + } else if (name == "ipv6") { + type = ValueStringType::IPv6; + } else if (name == "uri") { + type = ValueStringType::URI; + } else if (name == "date") { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + "The \"date\" format is not supported in assertion mode yet"); + } else if (name == "time") { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + "The \"time\" format is not supported in assertion mode yet"); + } else if (name == "utc-millisec") { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + "The \"utc-millisec\" format is not supported in assertion mode yet"); + } else if (name == "regex") { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + "The \"regex\" format is not supported in assertion mode yet"); + } else if (name == "color") { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + "The \"color\" format is not supported in assertion mode yet"); + } else if (name == "style") { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + "The \"style\" format is not supported in assertion mode yet"); + } else if (name == "phone") { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + "The \"phone\" format is not supported in assertion mode yet"); + } else { + return {}; + } + } else { + throw sourcemeta::blaze::CompilerError( + schema_context.base, to_pointer(schema_context.relative_pointer), + unsupported_dialect_message); + } + + return {make(sourcemeta::blaze::InstructionIndex::AssertionStringType, + context, schema_context, dynamic_context, type)}; +} + } // namespace internal #endif diff --git a/vendor/blaze/src/compiler/default_compiler_draft7.h b/vendor/blaze/src/compiler/default_compiler_draft7.h index 6fa3df30c..716af57cf 100644 --- a/vendor/blaze/src/compiler/default_compiler_draft7.h +++ b/vendor/blaze/src/compiler/default_compiler_draft7.h @@ -28,7 +28,7 @@ auto compiler_draft7_applicator_if(const Context &context, schema_context.base) .recompose()}; assert(context.frame.locations().contains( - {sourcemeta::core::SchemaReferenceType::Static, destination})); + {sourcemeta::blaze::SchemaReferenceType::Static, destination})); DynamicContext new_dynamic_context{ .keyword = KEYWORD_THEN, .base_schema_location = dynamic_context.base_schema_location, @@ -56,7 +56,7 @@ auto compiler_draft7_applicator_if(const Context &context, schema_context.base) .recompose()}; assert(context.frame.locations().contains( - {sourcemeta::core::SchemaReferenceType::Static, destination})); + {sourcemeta::blaze::SchemaReferenceType::Static, destination})); DynamicContext new_dynamic_context{ .keyword = KEYWORD_ELSE, .base_schema_location = dynamic_context.base_schema_location, diff --git a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h index 86b198c1e..f5dec141f 100644 --- a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h +++ b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h @@ -10,9 +10,9 @@ #include +#include #include #include -#include #include #include // std::size_t @@ -42,7 +42,7 @@ struct SchemaContext { /// The current subschema const sourcemeta::core::JSON &schema; /// The schema vocabularies in use - const sourcemeta::core::Vocabularies &vocabularies; + const sourcemeta::blaze::Vocabularies &vocabularies; /// The schema base URI const sourcemeta::core::URI &base; // NOLINTEND(cppcoreguidelines-avoid-const-or-ref-data-members) @@ -95,6 +95,8 @@ struct Tweaks { bool properties_reorder{true}; /// Inline jump targets with fewer instructions than this threshold std::size_t target_inline_threshold{50}; + /// When set, force `format` to be compiled as an assertion + bool format_assertion{false}; }; /// @ingroup compiler @@ -106,13 +108,13 @@ struct Context { /// The root schema resource const sourcemeta::core::JSON &root; /// The reference frame of the entire schema - const sourcemeta::core::SchemaFrame &frame; + const sourcemeta::blaze::SchemaFrame &frame; /// The set of all schema resources in the schema without duplicates const std::vector resources; /// The schema walker in use - const sourcemeta::core::SchemaWalker &walker; + const sourcemeta::blaze::SchemaWalker &walker; /// The schema resolver in use - const sourcemeta::core::SchemaResolver &resolver; + const sourcemeta::blaze::SchemaResolver &resolver; /// The schema compiler in use const Compiler &compiler; /// The mode of the schema compiler @@ -124,9 +126,9 @@ struct Context { /// The set of tweaks for the compiler const Tweaks tweaks; /// All possible reference targets (key includes is_property_name context) - const std::map< - std::tuple, - std::pair> + const std::map, + std::pair> targets; /// Accumulator for instruction extra data during compilation std::vector &extra; @@ -149,7 +151,7 @@ auto SOURCEMETA_BLAZE_COMPILER_EXPORT default_schema_compiler( /// #include /// /// #include -/// #include +/// #include /// /// const sourcemeta::core::JSON schema = /// sourcemeta::core::parse_json(R"JSON({ @@ -158,16 +160,16 @@ auto SOURCEMETA_BLAZE_COMPILER_EXPORT default_schema_compiler( /// })JSON"); /// /// const auto schema_template{sourcemeta::blaze::compile( -/// schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver, -/// sourcemeta::core::default_schema_compiler)}; +/// schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver, +/// sourcemeta::blaze::default_schema_compiler)}; /// /// // Evaluate or encode /// ``` auto SOURCEMETA_BLAZE_COMPILER_EXPORT compile(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Compiler &compiler, const Mode mode = Mode::FastValidation, const std::string_view default_dialect = "", const std::string_view default_id = "", @@ -185,9 +187,9 @@ compile(const sourcemeta::core::JSON &schema, /// Don't use this function unless you know what you are doing. auto SOURCEMETA_BLAZE_COMPILER_EXPORT compile( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, const Compiler &compiler, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const Compiler &compiler, + const sourcemeta::blaze::SchemaFrame &frame, const std::string_view entrypoint, const Mode mode = Mode::FastValidation, const std::optional &tweaks = std::nullopt) -> Template; diff --git a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h index c3e00fdde..389a520e0 100644 --- a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h +++ b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h @@ -22,7 +22,7 @@ namespace sourcemeta::blaze { #pragma warning(disable : 4251 4275) #endif -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a schema compilation failure event class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerError : public std::exception { public: @@ -58,7 +58,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerError : public std::exception { const char *message_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents an invalid regular expression during compilation class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerInvalidRegexError : public std::exception { @@ -91,7 +91,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerInvalidRegexError std::string regex_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a reference target that is not a valid schema class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerReferenceTargetNotSchemaError : public std::exception { @@ -120,7 +120,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerReferenceTargetNotSchemaError sourcemeta::core::Pointer schema_location_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents an invalid compilation entrypoint class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerInvalidEntryPoint : public std::exception { diff --git a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_unevaluated.h b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_unevaluated.h index aca465c4a..12b9fd65c 100644 --- a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_unevaluated.h +++ b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_unevaluated.h @@ -5,9 +5,9 @@ #include #endif +#include #include #include -#include #include // std::map #include // std::set @@ -40,9 +40,9 @@ using SchemaUnevaluatedEntries = /// ``` auto SOURCEMETA_BLAZE_COMPILER_EXPORT unevaluated(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) -> SchemaUnevaluatedEntries; } // namespace sourcemeta::blaze diff --git a/vendor/blaze/src/compiler/unevaluated.cc b/vendor/blaze/src/compiler/unevaluated.cc index 67a0a9709..058393591 100644 --- a/vendor/blaze/src/compiler/unevaluated.cc +++ b/vendor/blaze/src/compiler/unevaluated.cc @@ -135,6 +135,27 @@ auto find_adjacent_dependencies( } } +auto register_under_all_bases(SchemaUnevaluatedEntries &result, + const SchemaFrame &frame, + const SchemaFrame::Location &location, + const JSON::String &keyword, + const SchemaUnevaluatedEntry &value) -> void { + result.emplace(frame.uri(location, make_weak_pointer(keyword)), value); + for (const auto &alternate : frame.locations()) { + if (alternate.second.pointer != location.pointer || + alternate.second.base == location.base) { + continue; + } + if (alternate.second.type != SchemaFrame::LocationType::Subschema && + alternate.second.type != SchemaFrame::LocationType::Resource && + alternate.second.type != SchemaFrame::LocationType::Anchor) { + continue; + } + result.emplace(frame.uri(alternate.second, make_weak_pointer(keyword)), + value); + } +} + } // namespace namespace sourcemeta::blaze { @@ -172,6 +193,9 @@ auto unevaluated(const JSON &schema, const SchemaFrame &frame, const auto subschema_vocabularies{ frame.vocabularies(entry.second, resolver)}; + // The same pointer may be reachable through alternate identifiers whose + // dynamic anchors carry a different base, so we register the entry under + // each of them if (has_unevaluated_properties) { if ((subschema_vocabularies.contains( Known::JSON_Schema_2020_12_Unevaluated) && @@ -185,9 +209,8 @@ auto unevaluated(const JSON &schema, const SchemaFrame &frame, {"properties", "patternProperties", "additionalProperties", "unevaluatedProperties"}, entry.second, entry.second, true, unevaluated); - result.emplace( - frame.uri(entry.second, make_weak_pointer(UNEVALUATED_PROPERTIES)), - std::move(unevaluated)); + register_under_all_bases(result, frame, entry.second, + UNEVALUATED_PROPERTIES, unevaluated); } } @@ -201,18 +224,16 @@ auto unevaluated(const JSON &schema, const SchemaFrame &frame, "unevaluatedItems", schema, frame, walker, resolver, {"prefixItems", "items", "contains", "unevaluatedItems"}, entry.second, entry.second, true, unevaluated); - result.emplace( - frame.uri(entry.second, make_weak_pointer(UNEVALUATED_ITEMS)), - std::move(unevaluated)); + register_under_all_bases(result, frame, entry.second, UNEVALUATED_ITEMS, + unevaluated); } else if (subschema_vocabularies.contains( Known::JSON_Schema_2019_09_Applicator)) { find_adjacent_dependencies( "unevaluatedItems", schema, frame, walker, resolver, {"items", "additionalItems", "unevaluatedItems"}, entry.second, entry.second, true, unevaluated); - result.emplace( - frame.uri(entry.second, make_weak_pointer(UNEVALUATED_ITEMS)), - std::move(unevaluated)); + register_under_all_bases(result, frame, entry.second, UNEVALUATED_ITEMS, + unevaluated); } } } diff --git a/vendor/blaze/src/configuration/CMakeLists.txt b/vendor/blaze/src/configuration/CMakeLists.txt index 9a9d08c02..0b7ed316c 100644 --- a/vendor/blaze/src/configuration/CMakeLists.txt +++ b/vendor/blaze/src/configuration/CMakeLists.txt @@ -10,4 +10,4 @@ target_link_libraries(sourcemeta_blaze_configuration PUBLIC sourcemeta::core::js target_link_libraries(sourcemeta_blaze_configuration PRIVATE sourcemeta::core::uri) target_link_libraries(sourcemeta_blaze_configuration PRIVATE sourcemeta::core::io) target_link_libraries(sourcemeta_blaze_configuration PRIVATE sourcemeta::core::crypto) -target_link_libraries(sourcemeta_blaze_configuration PRIVATE sourcemeta::core::jsonschema) +target_link_libraries(sourcemeta_blaze_configuration PRIVATE sourcemeta::blaze::foundation) diff --git a/vendor/blaze/src/configuration/fetch.cc b/vendor/blaze/src/configuration/fetch.cc index 2c2cdd957..8de8e3c18 100644 --- a/vendor/blaze/src/configuration/fetch.cc +++ b/vendor/blaze/src/configuration/fetch.cc @@ -1,8 +1,8 @@ #include +#include #include #include -#include #include // assert #include // std::uint8_t @@ -82,7 +82,7 @@ auto fetch_and_write( const std::string &dependency_uri, const std::filesystem::path &dependency_path, const sourcemeta::blaze::Configuration::FetchCallback &fetcher, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, const sourcemeta::blaze::Configuration::WriteCallback &writer, const sourcemeta::blaze::Configuration::FetchEvent::Callback &callback, const std::optional &default_dialect, @@ -116,8 +116,8 @@ auto fetch_and_write( try { const std::string default_dialect_value{default_dialect.value_or("")}; - sourcemeta::core::bundle(out_schema, sourcemeta::core::schema_walker, - resolver, default_dialect_value, dependency_uri); + sourcemeta::blaze::bundle(out_schema, sourcemeta::blaze::schema_walker, + resolver, default_dialect_value, dependency_uri); } catch (...) { emit_event(callback, FetchEvent::Type::Error, dependency_uri, dependency_path, index, total, "Failed to bundle schema", @@ -157,7 +157,7 @@ auto fetch_and_write( namespace sourcemeta::blaze { auto Configuration::fetch(Lock &lock, const FetchCallback &fetcher, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, const ReadCallback &reader, const WriteCallback &writer, const FetchEvent::Callback &callback, @@ -241,7 +241,7 @@ auto Configuration::fetch(Lock &lock, const FetchCallback &fetcher, } auto Configuration::fetch(const Lock &lock, const FetchCallback &fetcher, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, const ReadCallback &reader, const WriteCallback &writer, const FetchEvent::Callback &callback, diff --git a/vendor/blaze/src/configuration/include/sourcemeta/blaze/configuration.h b/vendor/blaze/src/configuration/include/sourcemeta/blaze/configuration.h index 22430befc..e8bab468b 100644 --- a/vendor/blaze/src/configuration/include/sourcemeta/blaze/configuration.h +++ b/vendor/blaze/src/configuration/include/sourcemeta/blaze/configuration.h @@ -18,8 +18,8 @@ #include // NOLINTEND(misc-include-cleaner) +#include #include -#include #include #include // std::size_t @@ -179,7 +179,7 @@ struct SOURCEMETA_BLAZE_CONFIGURATION_EXPORT Configuration { /// Fetch dependencies, modifying the lock in-place auto fetch(Lock &lock, const FetchCallback &fetcher, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, const ReadCallback &reader, const WriteCallback &writer, const FetchEvent::Callback &on_event, FetchMode mode, // TODO: Make this work for real @@ -187,7 +187,7 @@ struct SOURCEMETA_BLAZE_CONFIGURATION_EXPORT Configuration { /// Fetch dependencies without modifying the lock file (frozen mode) auto fetch(const Lock &lock, const FetchCallback &fetcher, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, const ReadCallback &reader, const WriteCallback &writer, const FetchEvent::Callback &on_event, bool dry_run = false, // TODO: Make this work for real diff --git a/vendor/blaze/src/documentation/CMakeLists.txt b/vendor/blaze/src/documentation/CMakeLists.txt index ca698642d..147d3410d 100644 --- a/vendor/blaze/src/documentation/CMakeLists.txt +++ b/vendor/blaze/src/documentation/CMakeLists.txt @@ -9,7 +9,7 @@ endif() target_link_libraries(sourcemeta_blaze_documentation PUBLIC sourcemeta::core::json) target_link_libraries(sourcemeta_blaze_documentation PUBLIC - sourcemeta::core::jsonschema) + sourcemeta::blaze::foundation) target_link_libraries(sourcemeta_blaze_documentation PRIVATE sourcemeta::blaze::alterschema) target_link_libraries(sourcemeta_blaze_documentation PRIVATE diff --git a/vendor/blaze/src/documentation/documentation.cc b/vendor/blaze/src/documentation/documentation.cc index b5d57adc1..2f2b89fee 100644 --- a/vendor/blaze/src/documentation/documentation.cc +++ b/vendor/blaze/src/documentation/documentation.cc @@ -2,8 +2,8 @@ #include +#include #include -#include #include // assert #include // std::int64_t @@ -18,15 +18,15 @@ namespace sourcemeta::blaze { namespace { auto resolve_destination(const sourcemeta::core::JSON::String &raw_ref, - const sourcemeta::core::SchemaFrame &frame) - -> std::optional< - std::reference_wrapper> { + const sourcemeta::blaze::SchemaFrame &frame) + -> std::optional> { auto result{frame.traverse(raw_ref)}; if (result.has_value()) { return result; } for (const auto &[key, entry] : frame.references()) { - if (key.first == sourcemeta::core::SchemaReferenceType::Static && + if (key.first == sourcemeta::blaze::SchemaReferenceType::Static && entry.original == raw_ref) { return frame.traverse(entry.destination); } @@ -42,7 +42,7 @@ using VisitedSchemas = std::map; using RefChain = std::set; auto type_expression_of(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, const VisitedSchemas &visited, RefChain &ref_chain) -> sourcemeta::core::JSON { @@ -192,7 +192,7 @@ auto type_expression_of(const sourcemeta::core::JSON &schema, } auto type_expression_of(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, const VisitedSchemas &visited) -> sourcemeta::core::JSON { @@ -524,7 +524,7 @@ auto make_section(const std::string &label, sourcemeta::core::JSON tables) } auto walk_schema(const sourcemeta::core::JSON &schema, bool include_root, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> sourcemeta::core::JSON; @@ -534,7 +534,7 @@ auto walk_branching_subschema(const std::string &label, const std::string &synthetic_name, const sourcemeta::core::JSON &inner_schema, sourcemeta::core::JSON &doc_children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier, @@ -543,19 +543,19 @@ auto walk_branching_subschema(const std::string &label, auto walk_branches(const std::string &keyword, const std::string &label, const sourcemeta::core::JSON &schema, sourcemeta::core::JSON &children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void; auto walk_all_of(const sourcemeta::core::JSON &schema, sourcemeta::core::JSON &rows, sourcemeta::core::JSON &children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void; auto walk_if_then_else(const sourcemeta::core::JSON &schema, sourcemeta::core::JSON &children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void; @@ -564,7 +564,7 @@ auto walk_wildcard_keyword(const sourcemeta::core::JSON &schema, const std::string &keyword, const sourcemeta::core::JSON &base_path, sourcemeta::core::JSON &rows, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void; @@ -572,13 +572,13 @@ auto walk_wildcard_keyword(const sourcemeta::core::JSON &schema, auto walk_pattern_properties(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &base_path, sourcemeta::core::JSON &rows, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void; auto resolve_ref(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, const VisitedSchemas &visited) -> const sourcemeta::core::JSON & { @@ -600,7 +600,7 @@ auto resolve_ref(const sourcemeta::core::JSON &schema, auto emit_row(const sourcemeta::core::JSON &schema, sourcemeta::core::JSON path, sourcemeta::core::JSON &rows, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier, const bool expand_applicators = true) -> void { @@ -681,7 +681,7 @@ auto emit_row(const sourcemeta::core::JSON &schema, sourcemeta::core::JSON path, auto walk_properties(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &base_path, sourcemeta::core::JSON &rows, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void { @@ -843,7 +843,7 @@ auto walk_wildcard_keyword(const sourcemeta::core::JSON &schema, const std::string &keyword, const sourcemeta::core::JSON &base_path, sourcemeta::core::JSON &rows, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void { @@ -933,7 +933,7 @@ auto walk_wildcard_keyword(const sourcemeta::core::JSON &schema, auto walk_pattern_properties(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &base_path, sourcemeta::core::JSON &rows, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void { @@ -992,7 +992,7 @@ auto walk_prefix_items(const sourcemeta::core::JSON &schema, const sourcemeta::core::JSON &base_path, sourcemeta::core::JSON &rows, sourcemeta::core::JSON &children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void { @@ -1095,7 +1095,7 @@ auto walk_prefix_items(const sourcemeta::core::JSON &schema, auto walk_branches(const std::string &keyword, const std::string &label, const sourcemeta::core::JSON &schema, sourcemeta::core::JSON &children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void { if (!schema.is_object() || !schema.defines(keyword) || @@ -1131,7 +1131,7 @@ auto has_recursive_ref_in_rows(const sourcemeta::core::JSON &rows) -> bool { auto walk_all_of(const sourcemeta::core::JSON &schema, sourcemeta::core::JSON &rows, sourcemeta::core::JSON &children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void { if (!schema.is_object() || !schema.defines("allOf") || @@ -1234,7 +1234,7 @@ auto walk_all_of(const sourcemeta::core::JSON &schema, auto walk_if_then_else(const sourcemeta::core::JSON &schema, sourcemeta::core::JSON &children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> void { @@ -1269,7 +1269,7 @@ auto walk_branching_subschema(const std::string &label, const std::string &synthetic_name, const sourcemeta::core::JSON &inner_schema, sourcemeta::core::JSON &doc_children, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier, @@ -1303,7 +1303,7 @@ auto walk_branching_subschema(const std::string &label, } auto walk_schema(const sourcemeta::core::JSON &schema, const bool include_root, - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::JSON &root, VisitedSchemas &visited, std::size_t &next_identifier) -> sourcemeta::core::JSON { if (schema.is_object() && schema.defines("$ref") && @@ -1534,8 +1534,8 @@ auto walk_schema(const sourcemeta::core::JSON &schema, const bool include_root, } // namespace auto to_documentation(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) -> sourcemeta::core::JSON { sourcemeta::blaze::SchemaTransformer canonicalizer; sourcemeta::blaze::add(canonicalizer, @@ -1547,8 +1547,8 @@ auto to_documentation(const sourcemeta::core::JSON &schema, [[maybe_unused]] const auto applied) { assert(applied); })}; assert(canonicalized.first); - sourcemeta::core::SchemaFrame frame{ - sourcemeta::core::SchemaFrame::Mode::References}; + sourcemeta::blaze::SchemaFrame frame{ + sourcemeta::blaze::SchemaFrame::Mode::References}; frame.analyse(canonical, walker, resolver); VisitedSchemas visited; diff --git a/vendor/blaze/src/documentation/include/sourcemeta/blaze/documentation.h b/vendor/blaze/src/documentation/include/sourcemeta/blaze/documentation.h index 07a18b41b..90d60f16a 100644 --- a/vendor/blaze/src/documentation/include/sourcemeta/blaze/documentation.h +++ b/vendor/blaze/src/documentation/include/sourcemeta/blaze/documentation.h @@ -14,8 +14,8 @@ #include #endif +#include #include -#include #include // std::string @@ -29,7 +29,7 @@ namespace sourcemeta::blaze { /// #include /// /// #include -/// #include +/// #include /// /// const sourcemeta::core::JSON schema = /// sourcemeta::core::parse_json(R"JSON({ @@ -38,13 +38,13 @@ namespace sourcemeta::blaze { /// })JSON"); /// /// const auto documentation{sourcemeta::blaze::to_documentation( -/// schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver)}; +/// schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver)}; /// ``` [[nodiscard]] SOURCEMETA_BLAZE_DOCUMENTATION_EXPORT auto to_documentation(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver) + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver) -> sourcemeta::core::JSON; /// @ingroup documentation diff --git a/vendor/blaze/src/editor/CMakeLists.txt b/vendor/blaze/src/editor/CMakeLists.txt new file mode 100644 index 000000000..3c2cd375c --- /dev/null +++ b/vendor/blaze/src/editor/CMakeLists.txt @@ -0,0 +1,12 @@ +sourcemeta_library(NAMESPACE sourcemeta PROJECT blaze NAME editor + FOLDER "Blaze/Editor" + SOURCES editor.cc) + +if(BLAZE_INSTALL) + sourcemeta_library_install(NAMESPACE sourcemeta PROJECT blaze NAME editor) +endif() + +target_link_libraries(sourcemeta_blaze_editor PUBLIC + sourcemeta::core::json) +target_link_libraries(sourcemeta_blaze_editor PUBLIC + sourcemeta::blaze::foundation) diff --git a/vendor/core/src/extension/editorschema/editorschema.cc b/vendor/blaze/src/editor/editor.cc similarity index 65% rename from vendor/core/src/extension/editorschema/editorschema.cc rename to vendor/blaze/src/editor/editor.cc index d595efdcd..638cd7279 100644 --- a/vendor/core/src/extension/editorschema/editorschema.cc +++ b/vendor/blaze/src/editor/editor.cc @@ -1,4 +1,4 @@ -#include +#include #include // assert #include // std::map @@ -10,7 +10,7 @@ namespace { // massively grow, plus such case is quite uncommon in practice. // See https://arxiv.org/abs/2503.11288 for an academic study of this topic auto top_dynamic_anchor_location( - const sourcemeta::core::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame &frame, const sourcemeta::core::WeakPointer ¤t, const std::string_view fragment, const sourcemeta::core::JSON::String &default_uri) @@ -53,34 +53,36 @@ auto top_dynamic_anchor_location( } // namespace -namespace sourcemeta::core { +namespace sourcemeta::blaze { // Collected information about a reference to modify struct ReferenceChange { - Pointer pointer; - JSON::String new_value; - JSON::String keyword; + sourcemeta::core::Pointer pointer; + sourcemeta::core::JSON::String new_value; + sourcemeta::core::JSON::String keyword; bool rename_to_ref; }; // Collected information about a subschema to modify struct SubschemaChange { - Pointer pointer; - SchemaBaseDialect base_dialect; + sourcemeta::core::Pointer pointer; + sourcemeta::blaze::SchemaBaseDialect base_dialect; bool add_schema_declaration; bool erase_2020_12_keywords; bool erase_2019_09_keywords; }; -auto for_editor(JSON &schema, const SchemaWalker &walker, - const SchemaResolver &resolver, +auto for_editor(sourcemeta::core::JSON &schema, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect) -> void { // (1) Frame the schema and collect all changes we need to make std::vector reference_changes; std::vector subschema_changes; { - SchemaFrame frame{SchemaFrame::Mode::References}; + sourcemeta::blaze::SchemaFrame frame{ + sourcemeta::blaze::SchemaFrame::Mode::References}; frame.analyse(schema, walker, resolver, default_dialect); // Otherwise the input is not bundled @@ -88,7 +90,8 @@ auto for_editor(JSON &schema, const SchemaWalker &walker, // Note that `std::unordered_map` is slower here due to high collision rates // from the simple pointer hashes - std::map> + std::map> pointer_to_uri; for (const auto &entry : frame.locations()) { pointer_to_uri.emplace(entry.second.pointer, @@ -101,7 +104,7 @@ auto for_editor(JSON &schema, const SchemaWalker &walker, assert(key.second.back().is_property()); const auto &keyword{key.second.back().to_property()}; - if (key.first == SchemaReferenceType::Dynamic) { + if (key.first == sourcemeta::blaze::SchemaReferenceType::Dynamic) { if (reference.fragment.has_value()) { const auto destination{top_dynamic_anchor_location( frame, key.second, reference.fragment.value(), @@ -111,11 +114,12 @@ auto for_editor(JSON &schema, const SchemaWalker &walker, } reference_changes.push_back( - {to_pointer(key.second), - to_uri(destination.value().get()).recompose(), keyword, true}); + {sourcemeta::core::to_pointer(key.second), + sourcemeta::core::to_uri(destination.value().get()).recompose(), + keyword, true}); } else { reference_changes.push_back( - {to_pointer(key.second), "", keyword, true}); + {sourcemeta::core::to_pointer(key.second), "", keyword, true}); } } else { if (keyword == "$schema") { @@ -125,8 +129,9 @@ auto for_editor(JSON &schema, const SchemaWalker &walker, const auto origin{frame.traverse(uri_it->second.get())}; assert(origin.has_value()); reference_changes.push_back( - {to_pointer(key.second), - JSON::String{to_string(origin.value().get().base_dialect)}, + {sourcemeta::core::to_pointer(key.second), + sourcemeta::core::JSON::String{sourcemeta::blaze::to_string( + origin.value().get().base_dialect)}, keyword, false}); continue; } @@ -136,24 +141,28 @@ auto for_editor(JSON &schema, const SchemaWalker &walker, const bool should_rename = keyword == "$dynamicRef" || keyword == "$recursiveRef"; reference_changes.push_back( - {to_pointer(key.second), - to_uri(result.value().get().pointer).recompose(), keyword, - should_rename}); + {sourcemeta::core::to_pointer(key.second), + sourcemeta::core::to_uri(result.value().get().pointer) + .recompose(), + keyword, should_rename}); } else { - reference_changes.push_back( - {to_pointer(key.second), reference.destination, keyword, false}); + reference_changes.push_back({sourcemeta::core::to_pointer(key.second), + reference.destination, keyword, false}); } } } // Collect subschema changes for (const auto &entry : frame.locations()) { - if (entry.second.type != SchemaFrame::LocationType::Resource && - entry.second.type != SchemaFrame::LocationType::Subschema) { + if (entry.second.type != + sourcemeta::blaze::SchemaFrame::LocationType::Resource && + entry.second.type != + sourcemeta::blaze::SchemaFrame::LocationType::Subschema) { continue; } - const auto &subschema{get(schema, entry.second.pointer)}; + const auto &subschema{ + sourcemeta::core::get(schema, entry.second.pointer)}; if (subschema.is_boolean()) { continue; } @@ -163,34 +172,38 @@ auto for_editor(JSON &schema, const SchemaWalker &walker, const auto vocabularies{frame.vocabularies(entry.second, resolver)}; subschema_changes.push_back( - {to_pointer(entry.second.pointer), entry.second.base_dialect, - add_schema, - vocabularies.contains(Vocabularies::Known::JSON_Schema_2020_12_Core), - vocabularies.contains( - Vocabularies::Known::JSON_Schema_2019_09_Core)}); + {sourcemeta::core::to_pointer(entry.second.pointer), + entry.second.base_dialect, add_schema, + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: + JSON_Schema_2020_12_Core), + vocabularies.contains(sourcemeta::blaze::Vocabularies::Known:: + JSON_Schema_2019_09_Core)}); } } // (2) Apply reference changes for (const auto &change : reference_changes) { if (!change.new_value.empty()) { - set(schema, change.pointer, JSON{change.new_value}); + sourcemeta::core::set(schema, change.pointer, + sourcemeta::core::JSON{change.new_value}); } if (change.rename_to_ref) { - get(schema, change.pointer.initial()).rename(change.keyword, "$ref"); + sourcemeta::core::get(schema, change.pointer.initial()) + .rename(change.keyword, "$ref"); } } // (3) Apply subschema changes for (const auto &change : subschema_changes) { - auto &subschema{get(schema, change.pointer)}; + auto &subschema{sourcemeta::core::get(schema, change.pointer)}; if (change.add_schema_declaration) { subschema.assign_assume_new( - "$schema", JSON{JSON::String{to_string(change.base_dialect)}}); + "$schema", sourcemeta::core::JSON{sourcemeta::core::JSON::String{ + sourcemeta::blaze::to_string(change.base_dialect)}}); } - anonymize(subschema, change.base_dialect); + sourcemeta::blaze::anonymize(subschema, change.base_dialect); if (change.erase_2020_12_keywords) { subschema.erase_keys({"$vocabulary", "$anchor", "$dynamicAnchor"}); @@ -200,4 +213,4 @@ auto for_editor(JSON &schema, const SchemaWalker &walker, } } -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze diff --git a/vendor/core/src/extension/editorschema/include/sourcemeta/core/editorschema.h b/vendor/blaze/src/editor/include/sourcemeta/blaze/editor.h similarity index 53% rename from vendor/core/src/extension/editorschema/include/sourcemeta/core/editorschema.h rename to vendor/blaze/src/editor/include/sourcemeta/blaze/editor.h index 8d871ba93..eb54aa196 100644 --- a/vendor/core/src/extension/editorschema/include/sourcemeta/core/editorschema.h +++ b/vendor/blaze/src/editor/include/sourcemeta/blaze/editor.h @@ -1,27 +1,27 @@ -#ifndef SOURCEMETA_CORE_EXTENSION_EDITORSCHEMA_H_ -#define SOURCEMETA_CORE_EXTENSION_EDITORSCHEMA_H_ +#ifndef SOURCEMETA_BLAZE_EDITOR_H_ +#define SOURCEMETA_BLAZE_EDITOR_H_ -/// @defgroup editorschema EditorSchema +/// @defgroup editor Editor /// @brief A JSON Schema compatibility layer for code editors /// /// This functionality is included as follows: /// /// ```cpp -/// #include +/// #include /// ``` -#ifndef SOURCEMETA_CORE_EDITORSCHEMA_EXPORT -#include +#ifndef SOURCEMETA_BLAZE_EDITOR_EXPORT +#include #endif +#include #include -#include #include // std::string_view -namespace sourcemeta::core { +namespace sourcemeta::blaze { -/// @ingroup editorschema +/// @ingroup editor /// /// This function aims to transform the schema (in potentially non-strictly /// compliant manners) to workaround JSON Schema limitations of popular code @@ -35,7 +35,8 @@ namespace sourcemeta::core { /// /// ```cpp /// #include -/// #include +/// #include +/// #include /// /// auto schema = sourcemeta::core::parse_json(R"JSON({ /// "$id": "https://www.example.com/schema", @@ -43,18 +44,19 @@ namespace sourcemeta::core { /// "$ref": "another" /// })JSON"); /// -/// sourcemeta::core::bundle(schema, -/// sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); -/// sourcemeta::core::for_editor(schema, -/// sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); +/// sourcemeta::blaze::bundle(schema, +/// sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); +/// sourcemeta::blaze::for_editor(schema, +/// sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); /// ``` -SOURCEMETA_CORE_EDITORSCHEMA_EXPORT -auto for_editor(JSON &schema, const SchemaWalker &walker, - const SchemaResolver &resolver, +SOURCEMETA_BLAZE_EDITOR_EXPORT +auto for_editor(sourcemeta::core::JSON &schema, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect = "") -> void; -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/evaluator/CMakeLists.txt b/vendor/blaze/src/evaluator/CMakeLists.txt index e58c9a1d3..7adf7b920 100644 --- a/vendor/blaze/src/evaluator/CMakeLists.txt +++ b/vendor/blaze/src/evaluator/CMakeLists.txt @@ -17,5 +17,15 @@ target_link_libraries(sourcemeta_blaze_evaluator PUBLIC sourcemeta::core::regex) target_link_libraries(sourcemeta_blaze_evaluator PUBLIC sourcemeta::core::jsonpointer) -target_link_libraries(sourcemeta_blaze_evaluator PRIVATE +target_link_libraries(sourcemeta_blaze_evaluator PUBLIC sourcemeta::core::uri) +target_link_libraries(sourcemeta_blaze_evaluator PUBLIC + sourcemeta::core::uritemplate) +target_link_libraries(sourcemeta_blaze_evaluator PUBLIC + sourcemeta::core::email) +target_link_libraries(sourcemeta_blaze_evaluator PUBLIC + sourcemeta::core::ip) +target_link_libraries(sourcemeta_blaze_evaluator PUBLIC + sourcemeta::core::dns) +target_link_libraries(sourcemeta_blaze_evaluator PUBLIC + sourcemeta::core::time) diff --git a/vendor/blaze/src/evaluator/evaluator_describe.cc b/vendor/blaze/src/evaluator/evaluator_describe.cc index 70bfcc5e3..01503f5a1 100644 --- a/vendor/blaze/src/evaluator/evaluator_describe.cc +++ b/vendor/blaze/src/evaluator/evaluator_describe.cc @@ -2017,6 +2017,30 @@ auto describe(const bool valid, const Instruction &step, case ValueStringType::URI: message << " URI"; break; + case ValueStringType::URIReference: + message << " URI reference"; + break; + case ValueStringType::URITemplate: + message << " URI template"; + break; + case ValueStringType::Email: + message << " email address"; + break; + case ValueStringType::IPv4: + message << " IPv4 address"; + break; + case ValueStringType::IPv6: + message << " IPv6 address"; + break; + case ValueStringType::Hostname: + message << " hostname"; + break; + case ValueStringType::DateTime: + message << " RFC 3339 date-time"; + break; + case ValueStringType::JSONPointer: + message << " JSON Pointer"; + break; default: return unknown(); } diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h index b125cd70c..39f0b46ad 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h @@ -86,7 +86,7 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT Evaluator { /// #include /// /// #include - /// #include + /// #include /// /// #include /// @@ -97,9 +97,9 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT Evaluator { /// })JSON"); /// /// const auto schema_template{sourcemeta::blaze::compile( - /// schema, sourcemeta::core::schema_walker, - /// sourcemeta::core::schema_resolver, - /// sourcemeta::core::default_schema_compiler)}; + /// schema, sourcemeta::blaze::schema_walker, + /// sourcemeta::blaze::schema_resolver, + /// sourcemeta::blaze::default_schema_compiler)}; /// /// sourcemeta::blaze::Evaluator evaluator; /// const sourcemeta::core::JSON instance{"foo bar"}; @@ -134,7 +134,7 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT Evaluator { /// #include /// /// #include - /// #include + /// #include /// /// #include /// #include @@ -146,9 +146,9 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT Evaluator { /// })JSON"); /// /// const auto schema_template{sourcemeta::blaze::compile( - /// schema, sourcemeta::core::schema_walker, - /// sourcemeta::core::schema_resolver, - /// sourcemeta::core::default_schema_compiler)}; + /// schema, sourcemeta::blaze::schema_walker, + /// sourcemeta::blaze::schema_resolver, + /// sourcemeta::blaze::default_schema_compiler)}; /// /// static auto callback( /// bool result, diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_dispatch.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_dispatch.h index 7e69da570..951eb59e7 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_dispatch.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_dispatch.h @@ -3,6 +3,12 @@ #include +#include +#include +#include +#include +#include + // TODO(C++23): Replace SOURCEMETA_ASSUME with [[assume]] when available // across all compilers (Clang 19, GCC 13) #if defined(__clang__) @@ -867,6 +873,30 @@ INSTRUCTION_HANDLER(AssertionStringType) { case ValueStringType::URI: result = URI::is_uri(target); break; + case ValueStringType::URIReference: + result = URI::is_uri_reference(target); + break; + case ValueStringType::URITemplate: + result = URITemplate::is_uritemplate(target); + break; + case ValueStringType::Email: + result = is_email(target); + break; + case ValueStringType::IPv4: + result = is_ipv4(target); + break; + case ValueStringType::IPv6: + result = is_ipv6(target); + break; + case ValueStringType::Hostname: + result = is_hostname(target); + break; + case ValueStringType::DateTime: + result = is_rfc3339_datetime(target); + break; + case ValueStringType::JSONPointer: + result = is_pointer(target); + break; default: std::unreachable(); } diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h index 3452b765e..78b537e7c 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h @@ -120,7 +120,17 @@ using ValueNamedIndexes = sourcemeta::core::JSONObject< /// @ingroup evaluator /// Represents a compiler step string logical type -enum class ValueStringType : std::uint8_t { URI }; +enum class ValueStringType : std::uint8_t { + URI, + URIReference, + URITemplate, + Email, + IPv4, + IPv6, + Hostname, + DateTime, + JSONPointer +}; /// @ingroup evaluator /// Represents an compiler step that maps strings to strings diff --git a/vendor/core/src/core/jsonschema/CMakeLists.txt b/vendor/blaze/src/foundation/CMakeLists.txt similarity index 53% rename from vendor/core/src/core/jsonschema/CMakeLists.txt rename to vendor/blaze/src/foundation/CMakeLists.txt index d1db95285..33b479e01 100644 --- a/vendor/core/src/core/jsonschema/CMakeLists.txt +++ b/vendor/blaze/src/foundation/CMakeLists.txt @@ -2,20 +2,21 @@ set(KNOWN_RESOLVER_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/known_resolver.in.cc") set(KNOWN_RESOLVER_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/known_resolver.cc") include(./known_resolver.cmake) -sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME jsonschema +sourcemeta_library(NAMESPACE sourcemeta PROJECT blaze NAME foundation + FOLDER "Blaze/Foundation" PRIVATE_HEADERS bundle.h walker.h frame.h error.h types.h vocabularies.h - SOURCES jsonschema.cc vocabularies.cc known_walker.cc + SOURCES foundation.cc vocabularies.cc known_walker.cc frame.cc walker.cc bundle.cc format.cc helpers.h "${CMAKE_CURRENT_BINARY_DIR}/known_resolver.cc") -if(SOURCEMETA_CORE_INSTALL) - sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME jsonschema) +if(BLAZE_INSTALL) + sourcemeta_library_install(NAMESPACE sourcemeta PROJECT blaze NAME foundation) endif() -target_link_libraries(sourcemeta_core_jsonschema PUBLIC +target_link_libraries(sourcemeta_blaze_foundation PUBLIC sourcemeta::core::json) -target_link_libraries(sourcemeta_core_jsonschema PUBLIC +target_link_libraries(sourcemeta_blaze_foundation PUBLIC sourcemeta::core::jsonpointer) -target_link_libraries(sourcemeta_core_jsonschema PRIVATE +target_link_libraries(sourcemeta_blaze_foundation PRIVATE sourcemeta::core::uri) diff --git a/vendor/core/src/core/jsonschema/bundle.cc b/vendor/blaze/src/foundation/bundle.cc similarity index 79% rename from vendor/core/src/core/jsonschema/bundle.cc rename to vendor/blaze/src/foundation/bundle.cc index bbdd91427..16e416cf3 100644 --- a/vendor/core/src/core/jsonschema/bundle.cc +++ b/vendor/blaze/src/foundation/bundle.cc @@ -1,4 +1,4 @@ -#include +#include #include "helpers.h" @@ -19,22 +19,22 @@ auto is_official_metaschema_reference( assert(!pointer.empty()); assert(pointer.back().is_property()); return pointer.back().to_property() == "$schema" && - sourcemeta::core::is_known_schema(destination); + sourcemeta::blaze::is_official_schema(destination); } -auto dependencies_internal(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, - const sourcemeta::core::DependencyCallback &callback, - std::string_view default_dialect, - std::string_view default_id, - const sourcemeta::core::SchemaFrame::Paths &paths, - std::unordered_set &visited) -> void { - sourcemeta::core::SchemaFrame frame{ - sourcemeta::core::SchemaFrame::Mode::References}; +auto dependencies_internal( + const sourcemeta::core::JSON &schema, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, + const sourcemeta::blaze::DependencyCallback &callback, + std::string_view default_dialect, std::string_view default_id, + const sourcemeta::blaze::SchemaFrame::Paths &paths, + std::unordered_set &visited) -> void { + sourcemeta::blaze::SchemaFrame frame{ + sourcemeta::blaze::SchemaFrame::Mode::References}; frame.analyse(schema, walker, resolver, default_dialect, default_id, paths); - const auto origin{sourcemeta::core::identify(schema, resolver, - default_dialect, default_id)}; + const auto origin{sourcemeta::blaze::identify(schema, resolver, + default_dialect, default_id)}; std::vector< std::tuple> @@ -49,7 +49,7 @@ auto dependencies_internal(const sourcemeta::core::JSON &schema, } if (reference.base.empty()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( reference.destination, sourcemeta::core::to_pointer(pointer), "Could not resolve schema reference"); } @@ -62,7 +62,7 @@ auto dependencies_internal(const sourcemeta::core::JSON &schema, // If we can't find the destination but there is a base and we can // find the base, then we are facing an unresolved fragment if (frame.traverse(reference.base).has_value()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( reference.destination, sourcemeta::core::to_pointer(pointer), "Could not resolve schema reference"); } @@ -71,20 +71,20 @@ auto dependencies_internal(const sourcemeta::core::JSON &schema, const auto &identifier{reference.base}; auto remote{resolver(identifier)}; if (!remote.has_value()) { - throw sourcemeta::core::SchemaResolutionError( + throw sourcemeta::blaze::SchemaResolutionError( identifier, "Could not resolve the reference to an external schema"); } - if (!sourcemeta::core::is_schema(remote.value())) { - throw sourcemeta::core::SchemaReferenceError( + if (!sourcemeta::blaze::is_schema(remote.value())) { + throw sourcemeta::blaze::SchemaReferenceError( identifier, sourcemeta::core::to_pointer(pointer), "The JSON document is not a valid JSON Schema"); } - const auto remote_base_dialect{sourcemeta::core::base_dialect( + const auto remote_base_dialect{sourcemeta::blaze::base_dialect( remote.value(), resolver, default_dialect)}; if (!remote_base_dialect.has_value()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( identifier, sourcemeta::core::to_pointer(pointer), "The JSON document is not a valid JSON Schema"); } @@ -119,7 +119,7 @@ auto embed_schema(sourcemeta::core::JSON &root, } if (!current->is_object()) { - throw sourcemeta::core::SchemaError( + throw sourcemeta::blaze::SchemaError( "Could not bundle to a container path that is not an object"); } @@ -135,12 +135,12 @@ auto embed_schema(sourcemeta::core::JSON &root, auto elevate_embedded_resources( sourcemeta::core::JSON &remote, sourcemeta::core::JSON &root, const sourcemeta::core::Pointer &container, - const sourcemeta::core::SchemaBaseDialect remote_dialect, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaBaseDialect remote_dialect, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect, std::unordered_map &bundled) -> void { - const auto keyword{sourcemeta::core::definitions_keyword(remote_dialect)}; + const auto keyword{sourcemeta::blaze::definitions_keyword(remote_dialect)}; const sourcemeta::core::JSON::String keyword_string{keyword}; if (keyword.empty() || !remote.is_object() || !remote.defines(keyword_string) || @@ -169,10 +169,10 @@ auto elevate_embedded_resources( const auto &key{entry.first}; const auto &value{entry.second}; const auto entry_dialect{ - sourcemeta::core::base_dialect(value, resolver, default_dialect)}; + sourcemeta::blaze::base_dialect(value, resolver, default_dialect)}; const auto effective_entry_dialect{entry_dialect.value_or(remote_dialect)}; const auto identifier{ - sourcemeta::core::identify(value, effective_entry_dialect)}; + sourcemeta::blaze::identify(value, effective_entry_dialect)}; if (identifier.empty() || identifier != key || !sourcemeta::core::URI{identifier}.is_absolute()) { continue; @@ -186,19 +186,19 @@ auto elevate_embedded_resources( continue; } - const auto stored_dialect{sourcemeta::core::base_dialect( + const auto stored_dialect{sourcemeta::blaze::base_dialect( root_entry.second, resolver, default_dialect)}; const auto effective_stored_dialect{stored_dialect.has_value() ? stored_dialect.value() : remote_dialect}; - const auto stored_id{sourcemeta::core::identify( + const auto stored_id{sourcemeta::blaze::identify( root_entry.second, effective_stored_dialect)}; if (stored_id != identifier_string) { continue; } if (root_entry.second != value) { - throw sourcemeta::core::SchemaError( + throw sourcemeta::blaze::SchemaError( "Conflicting embedded resources with the same identifier"); } @@ -231,18 +231,18 @@ auto elevate_embedded_resources( auto bundle_schema(sourcemeta::core::JSON &root, const sourcemeta::core::Pointer &container, sourcemeta::core::JSON &subschema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect, std::string_view default_id, - const sourcemeta::core::SchemaFrame::Paths &paths, + const sourcemeta::blaze::SchemaFrame::Paths &paths, std::unordered_map &bundled, const std::size_t depth = 0) -> void { // Create a fresh frame for each schema we analyze to avoid key collisions // between different schemas that have references at the same pointer paths - sourcemeta::core::SchemaFrame frame{ - sourcemeta::core::SchemaFrame::Mode::References}; + sourcemeta::blaze::SchemaFrame frame{ + sourcemeta::blaze::SchemaFrame::Mode::References}; if (depth == 0) { frame.analyse( subschema, walker, resolver, default_dialect, default_id, @@ -253,7 +253,7 @@ auto bundle_schema(sourcemeta::core::JSON &root, } std::vector> + sourcemeta::blaze::SchemaBaseDialect>> deferred; std::vector< std::pair> @@ -270,13 +270,13 @@ auto bundle_schema(sourcemeta::core::JSON &root, // If we can't find the destination but there is a base and we can // find base, then we are facing an unresolved fragment if (!reference.base.empty() && frame.traverse(reference.base).has_value()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( reference.destination, sourcemeta::core::to_pointer(pointer), "Could not resolve schema reference"); } if (reference.base.empty()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( reference.destination, sourcemeta::core::to_pointer(pointer), "Could not resolve schema reference"); } @@ -302,43 +302,43 @@ auto bundle_schema(sourcemeta::core::JSON &root, auto remote{resolver(identifier)}; if (!remote.has_value()) { if (frame.traverse(identifier).has_value()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( reference.destination, sourcemeta::core::to_pointer(pointer), "Could not resolve schema reference"); } - throw sourcemeta::core::SchemaResolutionError( + throw sourcemeta::blaze::SchemaResolutionError( identifier, "Could not resolve the reference to an external schema"); } - if (!sourcemeta::core::is_schema(remote.value())) { - throw sourcemeta::core::SchemaReferenceError( + if (!sourcemeta::blaze::is_schema(remote.value())) { + throw sourcemeta::blaze::SchemaReferenceError( identifier, sourcemeta::core::to_pointer(pointer), "The JSON document is not a valid JSON Schema"); } - const auto remote_base_dialect{sourcemeta::core::base_dialect( + const auto remote_base_dialect{sourcemeta::blaze::base_dialect( remote.value(), resolver, default_dialect)}; if (!remote_base_dialect.has_value()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( identifier, sourcemeta::core::to_pointer(pointer), "The JSON document is not a valid JSON Schema"); } auto remote_id = - sourcemeta::core::identify(remote.value(), resolver, default_dialect); + sourcemeta::blaze::identify(remote.value(), resolver, default_dialect); // If the reference has a fragment, verify it exists in the remote // schema if (reference.fragment.has_value()) { // TODO: The fact that we have to re-frame on each loop pass to check // for this is probably insanely slow - sourcemeta::core::SchemaFrame remote_frame{ - sourcemeta::core::SchemaFrame::Mode::Locations}; + sourcemeta::blaze::SchemaFrame remote_frame{ + sourcemeta::blaze::SchemaFrame::Mode::Locations}; remote_frame.analyse(remote.value(), walker, resolver, default_dialect, identifier); if (!remote_frame.traverse(reference.destination).has_value()) { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( reference.destination, sourcemeta::core::to_pointer(pointer), "Could not resolve schema reference"); } @@ -349,8 +349,8 @@ auto bundle_schema(sourcemeta::core::JSON &root, : sourcemeta::core::JSON::String{remote_id}}; if (remote.value().is_object()) { - sourcemeta::core::reidentify(remote.value(), effective_id, - remote_base_dialect.value()); + sourcemeta::blaze::reidentify(remote.value(), effective_id, + remote_base_dialect.value()); } if (effective_id != identifier) { @@ -385,10 +385,10 @@ auto bundle_schema(sourcemeta::core::JSON &root, } // namespace -namespace sourcemeta::core { +namespace sourcemeta::blaze { -auto dependencies(const JSON &schema, const SchemaWalker &walker, - const SchemaResolver &resolver, +auto dependencies(const sourcemeta::core::JSON &schema, + const SchemaWalker &walker, const SchemaResolver &resolver, const DependencyCallback &callback, std::string_view default_dialect, std::string_view default_id, const SchemaFrame::Paths &paths) -> void { @@ -399,20 +399,23 @@ auto dependencies(const JSON &schema, const SchemaWalker &walker, // TODO: Refactor this function to internally rely on the `.dependencies()` // function -auto bundle(JSON &schema, const SchemaWalker &walker, +auto bundle(sourcemeta::core::JSON &schema, const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect, std::string_view default_id, - const std::optional &default_container, + const std::optional &default_container, const SchemaFrame::Paths &paths) -> void { // Pre-scan the schema to find any already-embedded schemas and mark them // as bundled to avoid re-embedding them. This includes the root schema itself // and any schemas already embedded within it - std::unordered_map bundled; + std::unordered_map + bundled; SchemaFrame initial_frame{SchemaFrame::Mode::Locations}; initial_frame.analyse(schema, walker, resolver, default_dialect, default_id, paths); initial_frame.for_each_resource_uri([&bundled](const auto &uri) { - bundled.emplace(JSON::String{uri}, JSON::String{uri}); + bundled.emplace(sourcemeta::core::JSON::String{uri}, + sourcemeta::core::JSON::String{uri}); }); if (default_container.has_value()) { // This is undefined behavior @@ -458,7 +461,7 @@ auto bundle(JSON &schema, const SchemaWalker &walker, SchemaBaseDialect::JSON_Schema_Draft_3 || schema_base_dialect.value() == SchemaBaseDialect::JSON_Schema_Draft_3_Hyper}; - auto branches{JSON::make_array()}; + auto branches{sourcemeta::core::JSON::make_array()}; branches.push_back(schema); schema.at("$ref").into(std::move(branches)); schema.rename("$ref", is_draft3 ? "extends" : "allOf"); @@ -470,19 +473,20 @@ auto bundle(JSON &schema, const SchemaWalker &walker, } } - bundle_schema(schema, {JSON::String{container_keyword}}, schema, walker, - resolver, default_dialect, default_id, paths, bundled); + bundle_schema(schema, {sourcemeta::core::JSON::String{container_keyword}}, + schema, walker, resolver, default_dialect, default_id, paths, + bundled); } -auto bundle(const JSON &schema, const SchemaWalker &walker, +auto bundle(const sourcemeta::core::JSON &schema, const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect, std::string_view default_id, - const std::optional &default_container, - const SchemaFrame::Paths &paths) -> JSON { - JSON copy = schema; + const std::optional &default_container, + const SchemaFrame::Paths &paths) -> sourcemeta::core::JSON { + sourcemeta::core::JSON copy = schema; bundle(copy, walker, resolver, default_dialect, default_id, default_container, paths); return copy; } -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze diff --git a/vendor/core/src/core/jsonschema/format.cc b/vendor/blaze/src/foundation/format.cc similarity index 93% rename from vendor/core/src/core/jsonschema/format.cc rename to vendor/blaze/src/foundation/format.cc index 1940c54ec..dafcff7f5 100644 --- a/vendor/core/src/core/jsonschema/format.cc +++ b/vendor/blaze/src/foundation/format.cc @@ -1,4 +1,4 @@ -#include +#include #include // std::uint64_t #include // std::numeric_limits @@ -134,13 +134,13 @@ auto keyword_compare(const sourcemeta::core::JSON::String &left, } // namespace -namespace sourcemeta::core { +namespace sourcemeta::blaze { -auto format(JSON &schema, const SchemaWalker &walker, +auto format(sourcemeta::core::JSON &schema, const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect) -> void { assert(is_schema(schema)); - std::vector subschemas; + std::vector subschemas; { SchemaFrame frame{SchemaFrame::Mode::Locations}; @@ -152,16 +152,16 @@ auto format(JSON &schema, const SchemaWalker &walker, continue; } - subschemas.push_back(to_pointer(entry.second.pointer)); + subschemas.push_back(sourcemeta::core::to_pointer(entry.second.pointer)); } } for (const auto &pointer : subschemas) { - auto &subschema{get(schema, pointer)}; + auto &subschema{sourcemeta::core::get(schema, pointer)}; if (subschema.is_object()) { subschema.reorder(keyword_compare); } } } -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze diff --git a/vendor/core/src/core/jsonschema/jsonschema.cc b/vendor/blaze/src/foundation/foundation.cc similarity index 77% rename from vendor/core/src/core/jsonschema/jsonschema.cc rename to vendor/blaze/src/foundation/foundation.cc index 39971abd3..2a3fb6ddc 100644 --- a/vendor/core/src/core/jsonschema/jsonschema.cc +++ b/vendor/blaze/src/foundation/foundation.cc @@ -1,4 +1,4 @@ -#include +#include #include "helpers.h" @@ -13,19 +13,20 @@ #include // std::unordered_set #include // std::move, std::to_underlying -auto sourcemeta::core::is_schema(const sourcemeta::core::JSON &schema) -> bool { +auto sourcemeta::blaze::is_schema(const sourcemeta::core::JSON &schema) + -> bool { return schema.is_object() || schema.is_boolean(); } // TODO: Make this function detect schemas only using identifier/comment // keywords, etc -auto sourcemeta::core::is_empty_schema(const sourcemeta::core::JSON &schema) +auto sourcemeta::blaze::is_empty_schema(const sourcemeta::core::JSON &schema) -> bool { return (schema.is_boolean() && schema.to_boolean()) || (schema.is_object() && schema.empty()); } -auto sourcemeta::core::to_string(const SchemaBaseDialect base_dialect) +auto sourcemeta::blaze::to_string(const SchemaBaseDialect base_dialect) -> std::string_view { switch (base_dialect) { case SchemaBaseDialect::JSON_Schema_2020_12: @@ -64,7 +65,7 @@ auto sourcemeta::core::to_string(const SchemaBaseDialect base_dialect) return {}; } -auto sourcemeta::core::to_base_dialect(const std::string_view base_dialect) +auto sourcemeta::blaze::to_base_dialect(const std::string_view base_dialect) -> std::optional { if (base_dialect == "https://json-schema.org/draft/2020-12/schema" || base_dialect == "http://json-schema.org/draft/2020-12/schema") { @@ -120,14 +121,14 @@ auto sourcemeta::core::to_base_dialect(const std::string_view base_dialect) return std::nullopt; } -auto sourcemeta::core::identify(const sourcemeta::core::JSON &schema, - const SchemaResolver &resolver, - std::string_view default_dialect, - std::string_view default_id, - const bool allow_dialect_override) +auto sourcemeta::blaze::identify(const sourcemeta::core::JSON &schema, + const SchemaResolver &resolver, + std::string_view default_dialect, + std::string_view default_id, + const bool allow_dialect_override) -> std::string_view { try { - const auto maybe_base_dialect{sourcemeta::core::base_dialect( + const auto maybe_base_dialect{sourcemeta::blaze::base_dialect( schema, resolver, default_dialect, allow_dialect_override)}; if (maybe_base_dialect.has_value()) { return identify(schema, maybe_base_dialect.value(), default_id); @@ -141,15 +142,15 @@ auto sourcemeta::core::identify(const sourcemeta::core::JSON &schema, } } -auto sourcemeta::core::identify(const JSON &schema, - const SchemaBaseDialect base_dialect, - std::string_view default_id) +auto sourcemeta::blaze::identify(const sourcemeta::core::JSON &schema, + const SchemaBaseDialect base_dialect, + std::string_view default_id) -> std::string_view { if (!schema.is_object()) { return default_id; } - const std::string keyword{sourcemeta::core::id_keyword(base_dialect)}; + const std::string keyword{sourcemeta::blaze::id_keyword(base_dialect)}; if (!schema.defines(keyword)) { return default_id; @@ -159,7 +160,7 @@ auto sourcemeta::core::identify(const JSON &schema, if (!identifier.is_string()) { std::ostringstream value; sourcemeta::core::stringify(identifier, value); - throw sourcemeta::core::SchemaKeywordError( + throw sourcemeta::blaze::SchemaKeywordError( keyword, value.str(), "The schema identifier is invalid"); } @@ -196,32 +197,35 @@ auto sourcemeta::core::identify(const JSON &schema, return identifier.to_string(); } -auto sourcemeta::core::anonymize(JSON &schema, - const SchemaBaseDialect base_dialect) -> void { +auto sourcemeta::blaze::anonymize(sourcemeta::core::JSON &schema, + const SchemaBaseDialect base_dialect) + -> void { if (schema.is_object()) { - schema.erase(sourcemeta::core::id_keyword(base_dialect)); + schema.erase(sourcemeta::blaze::id_keyword(base_dialect)); } } -auto sourcemeta::core::reidentify(JSON &schema, std::string_view new_identifier, - const SchemaResolver &resolver, - std::string_view default_dialect) -> void { +auto sourcemeta::blaze::reidentify(sourcemeta::core::JSON &schema, + std::string_view new_identifier, + const SchemaResolver &resolver, + std::string_view default_dialect) -> void { const auto resolved_base_dialect{ - sourcemeta::core::base_dialect(schema, resolver, default_dialect)}; + sourcemeta::blaze::base_dialect(schema, resolver, default_dialect)}; if (!resolved_base_dialect.has_value()) { - throw sourcemeta::core::SchemaUnknownBaseDialectError(); + throw sourcemeta::blaze::SchemaUnknownBaseDialectError(); } reidentify(schema, new_identifier, resolved_base_dialect.value()); } -auto sourcemeta::core::reidentify(JSON &schema, std::string_view new_identifier, - const SchemaBaseDialect base_dialect) +auto sourcemeta::blaze::reidentify(sourcemeta::core::JSON &schema, + std::string_view new_identifier, + const SchemaBaseDialect base_dialect) -> void { assert(is_schema(schema)); assert(schema.is_object()); - schema.assign(sourcemeta::core::id_keyword(base_dialect), - JSON{new_identifier}); + schema.assign(sourcemeta::blaze::id_keyword(base_dialect), + sourcemeta::core::JSON{new_identifier}); // If we reidentify, and the identifier is still not retrievable, then // we are facing the Draft 7 `$ref` sibling edge case, and we cannot @@ -231,11 +235,11 @@ auto sourcemeta::core::reidentify(JSON &schema, std::string_view new_identifier, } } -auto sourcemeta::core::dialect(const sourcemeta::core::JSON &schema, - std::string_view default_dialect, - const bool allow_dialect_override) +auto sourcemeta::blaze::dialect(const sourcemeta::core::JSON &schema, + std::string_view default_dialect, + const bool allow_dialect_override) -> std::string_view { - assert(sourcemeta::core::is_schema(schema)); + assert(sourcemeta::blaze::is_schema(schema)); if (allow_dialect_override && schema.is_object()) { const auto *override_value{ @@ -254,33 +258,33 @@ auto sourcemeta::core::dialect(const sourcemeta::core::JSON &schema, if (!dialect_value.is_string()) { std::ostringstream value; sourcemeta::core::stringify(dialect_value, value); - throw sourcemeta::core::SchemaKeywordError("$schema", value.str(), - "The dialect value is invalid"); + throw sourcemeta::blaze::SchemaKeywordError("$schema", value.str(), + "The dialect value is invalid"); } return dialect_value.to_string(); } -auto sourcemeta::core::metaschema( +auto sourcemeta::blaze::metaschema( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaResolver &resolver, - std::string_view default_dialect) -> JSON { + const sourcemeta::blaze::SchemaResolver &resolver, + std::string_view default_dialect) -> sourcemeta::core::JSON { const auto effective_dialect{ - sourcemeta::core::dialect(schema, default_dialect)}; + sourcemeta::blaze::dialect(schema, default_dialect)}; if (effective_dialect.empty()) { - throw sourcemeta::core::SchemaUnknownDialectError(); + throw sourcemeta::blaze::SchemaUnknownDialectError(); } const auto maybe_metaschema{resolver(effective_dialect)}; if (!maybe_metaschema.has_value()) { // Relative meta-schema references are invalid according to the // JSON Schema specifications. They must be absolute ones - const URI effective_dialect_uri{effective_dialect}; + const sourcemeta::core::URI effective_dialect_uri{effective_dialect}; if (effective_dialect_uri.is_relative()) { - throw sourcemeta::core::SchemaRelativeMetaschemaResolutionError( + throw sourcemeta::blaze::SchemaRelativeMetaschemaResolutionError( effective_dialect); } else { - throw sourcemeta::core::SchemaResolutionError( + throw sourcemeta::blaze::SchemaResolutionError( effective_dialect, "Could not resolve the metaschema of the schema"); } } @@ -290,13 +294,13 @@ auto sourcemeta::core::metaschema( static auto base_dialect_with_visited(const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect, std::unordered_set &visited, const bool allow_dialect_override) - -> std::optional { - assert(sourcemeta::core::is_schema(schema)); - const std::string_view effective_dialect{sourcemeta::core::dialect( + -> std::optional { + assert(sourcemeta::blaze::is_schema(schema)); + const std::string_view effective_dialect{sourcemeta::blaze::dialect( schema, default_dialect, allow_dialect_override)}; // There is no metaschema information whatsoever @@ -306,14 +310,14 @@ base_dialect_with_visited(const sourcemeta::core::JSON &schema, } // Check for known base dialects - const auto result{sourcemeta::core::to_base_dialect(effective_dialect)}; + const auto result{sourcemeta::blaze::to_base_dialect(effective_dialect)}; if (result.has_value()) { return result; } // Detect cycles in the metaschema chain if (!visited.emplace(effective_dialect).second) { - throw sourcemeta::core::SchemaUnknownBaseDialectError(); + throw sourcemeta::blaze::SchemaUnknownBaseDialectError(); } // Otherwise, traverse the metaschema hierarchy up @@ -324,27 +328,27 @@ base_dialect_with_visited(const sourcemeta::core::JSON &schema, try { effective_dialect_uri = sourcemeta::core::URI{effective_dialect}; } catch (const sourcemeta::core::URIParseError &) { - throw sourcemeta::core::SchemaKeywordError( + throw sourcemeta::blaze::SchemaKeywordError( "$schema", effective_dialect, "The dialect is not a valid URI"); } // Relative meta-schema references are invalid according to the // JSON Schema specifications. They must be absolute ones if (effective_dialect_uri.is_relative()) { - throw sourcemeta::core::SchemaRelativeMetaschemaResolutionError( + throw sourcemeta::blaze::SchemaRelativeMetaschemaResolutionError( effective_dialect); } else { - throw sourcemeta::core::SchemaResolutionError( + throw sourcemeta::blaze::SchemaResolutionError( effective_dialect, "Could not resolve the metaschema of the schema"); } } // If the metaschema declares the same dialect (self-descriptive), and it's // not an official dialect, we cannot determine the base dialect - const std::string_view metaschema_dialect{sourcemeta::core::dialect( + const std::string_view metaschema_dialect{sourcemeta::blaze::dialect( metaschema.value(), effective_dialect, allow_dialect_override)}; if (metaschema_dialect == effective_dialect) { - throw sourcemeta::core::SchemaUnknownBaseDialectError(); + throw sourcemeta::blaze::SchemaUnknownBaseDialectError(); } return base_dialect_with_visited(metaschema.value(), resolver, @@ -352,9 +356,9 @@ base_dialect_with_visited(const sourcemeta::core::JSON &schema, allow_dialect_override); } -auto sourcemeta::core::base_dialect( +auto sourcemeta::blaze::base_dialect( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect, const bool allow_dialect_override) -> std::optional { std::unordered_set visited; @@ -364,10 +368,10 @@ auto sourcemeta::core::base_dialect( namespace { auto core_vocabulary_known( - const sourcemeta::core::SchemaBaseDialect base_dialect) - -> sourcemeta::core::Vocabularies::Known { - using sourcemeta::core::SchemaBaseDialect; - using sourcemeta::core::Vocabularies; + const sourcemeta::blaze::SchemaBaseDialect base_dialect) + -> sourcemeta::blaze::Vocabularies::Known { + using sourcemeta::blaze::SchemaBaseDialect; + using sourcemeta::blaze::Vocabularies; switch (base_dialect) { case SchemaBaseDialect::JSON_Schema_2020_12: case SchemaBaseDialect::JSON_Schema_2020_12_Hyper: @@ -382,8 +386,8 @@ auto core_vocabulary_known( } auto dialect_to_known(const std::string_view dialect) - -> std::optional { - using sourcemeta::core::Vocabularies; + -> std::optional { + using sourcemeta::blaze::Vocabularies; if (dialect == "http://json-schema.org/draft-07/schema#") { return Vocabularies::Known::JSON_Schema_Draft_7; } @@ -429,10 +433,10 @@ auto dialect_to_known(const std::string_view dialect) return std::nullopt; } -auto base_dialect_to_known(const sourcemeta::core::SchemaBaseDialect dialect) - -> sourcemeta::core::Vocabularies::Known { - using sourcemeta::core::SchemaBaseDialect; - using sourcemeta::core::Vocabularies; +auto base_dialect_to_known(const sourcemeta::blaze::SchemaBaseDialect dialect) + -> sourcemeta::blaze::Vocabularies::Known { + using sourcemeta::blaze::SchemaBaseDialect; + using sourcemeta::blaze::Vocabularies; switch (dialect) { case SchemaBaseDialect::JSON_Schema_Draft_7: return Vocabularies::Known::JSON_Schema_Draft_7; @@ -463,8 +467,8 @@ auto base_dialect_to_known(const sourcemeta::core::SchemaBaseDialect dialect) } auto is_pre_vocabulary_base_dialect( - const sourcemeta::core::SchemaBaseDialect base_dialect) -> bool { - using sourcemeta::core::SchemaBaseDialect; + const sourcemeta::blaze::SchemaBaseDialect base_dialect) -> bool { + using sourcemeta::blaze::SchemaBaseDialect; switch (base_dialect) { case SchemaBaseDialect::JSON_Schema_Draft_7: case SchemaBaseDialect::JSON_Schema_Draft_7_Hyper: @@ -484,18 +488,18 @@ auto is_pre_vocabulary_base_dialect( } } // namespace -auto sourcemeta::core::parse_vocabularies( +auto sourcemeta::blaze::parse_vocabularies( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaBaseDialect base_dialect) - -> std::optional { + const sourcemeta::blaze::SchemaBaseDialect base_dialect) + -> std::optional { if (base_dialect != - sourcemeta::core::SchemaBaseDialect::JSON_Schema_2020_12 && + sourcemeta::blaze::SchemaBaseDialect::JSON_Schema_2020_12 && base_dialect != - sourcemeta::core::SchemaBaseDialect::JSON_Schema_2020_12_Hyper && + sourcemeta::blaze::SchemaBaseDialect::JSON_Schema_2020_12_Hyper && base_dialect != - sourcemeta::core::SchemaBaseDialect::JSON_Schema_2019_09 && + sourcemeta::blaze::SchemaBaseDialect::JSON_Schema_2019_09 && base_dialect != - sourcemeta::core::SchemaBaseDialect::JSON_Schema_2019_09_Hyper) { + sourcemeta::blaze::SchemaBaseDialect::JSON_Schema_2019_09_Hyper) { return std::nullopt; } @@ -509,7 +513,7 @@ auto sourcemeta::core::parse_vocabularies( } assert(vocabulary_entry->is_object()); - sourcemeta::core::Vocabularies result; + sourcemeta::blaze::Vocabularies result; for (const auto &entry : vocabulary_entry->as_object()) { assert(entry.second.is_boolean()); result.insert(entry.first, entry.second.to_boolean()); @@ -518,48 +522,48 @@ auto sourcemeta::core::parse_vocabularies( return result; } -auto sourcemeta::core::parse_vocabularies( +auto sourcemeta::blaze::parse_vocabularies( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect) - -> std::optional { + -> std::optional { const auto schema_base_dialect{ - sourcemeta::core::base_dialect(schema, resolver, default_dialect)}; + sourcemeta::blaze::base_dialect(schema, resolver, default_dialect)}; if (schema_base_dialect.has_value()) { - return sourcemeta::core::parse_vocabularies(schema, - schema_base_dialect.value()); + return sourcemeta::blaze::parse_vocabularies(schema, + schema_base_dialect.value()); } else { return std::nullopt; } } -auto sourcemeta::core::vocabularies( +auto sourcemeta::blaze::vocabularies( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaResolver &resolver, - std::string_view default_dialect) -> sourcemeta::core::Vocabularies { + const sourcemeta::blaze::SchemaResolver &resolver, + std::string_view default_dialect) -> sourcemeta::blaze::Vocabularies { const auto resolved_base_dialect{ - sourcemeta::core::base_dialect(schema, resolver, default_dialect)}; + sourcemeta::blaze::base_dialect(schema, resolver, default_dialect)}; if (!resolved_base_dialect.has_value()) { - throw sourcemeta::core::SchemaUnknownBaseDialectError(); + throw sourcemeta::blaze::SchemaUnknownBaseDialectError(); } const std::string_view resolved_dialect{ - sourcemeta::core::dialect(schema, default_dialect)}; + sourcemeta::blaze::dialect(schema, default_dialect)}; if (resolved_dialect.empty()) { // If the schema has no declared metaschema and the user didn't // provide a explicit default, then we cannot do anything. // Better to abort instead of trying to guess. - throw sourcemeta::core::SchemaUnknownDialectError(); + throw sourcemeta::blaze::SchemaUnknownDialectError(); } return vocabularies(resolver, resolved_base_dialect.value(), resolved_dialect); } -auto sourcemeta::core::vocabularies(const SchemaResolver &resolver, - const SchemaBaseDialect base_dialect, - std::string_view dialect) - -> sourcemeta::core::Vocabularies { +auto sourcemeta::blaze::vocabularies(const SchemaResolver &resolver, + const SchemaBaseDialect base_dialect, + std::string_view dialect) + -> sourcemeta::blaze::Vocabularies { const auto base_dialect_string{to_string(base_dialect)}; // As a performance optimization shortcut if (base_dialect_string == dialect || @@ -621,7 +625,7 @@ auto sourcemeta::core::vocabularies(const SchemaResolver &resolver, const std::optional maybe_schema_dialect{ resolver(dialect)}; if (!maybe_schema_dialect.has_value()) { - throw sourcemeta::core::SchemaResolutionError( + throw sourcemeta::blaze::SchemaResolutionError( dialect, "Could not resolve the metaschema of the schema"); } const sourcemeta::core::JSON &schema_dialect{maybe_schema_dialect.value()}; @@ -644,12 +648,12 @@ auto sourcemeta::core::vocabularies(const SchemaResolver &resolver, // The specification recommends these checks if (!result.contains(core)) { - throw sourcemeta::core::SchemaError( + throw sourcemeta::blaze::SchemaError( "The core vocabulary must always be present"); } else { const auto core_status{result.get(core)}; if (core_status.has_value() && !core_status.value()) { - throw sourcemeta::core::SchemaError( + throw sourcemeta::blaze::SchemaError( "The core vocabulary must always be required"); } } @@ -657,10 +661,10 @@ auto sourcemeta::core::vocabularies(const SchemaResolver &resolver, return result; } -auto sourcemeta::core::schema_keyword_priority( +auto sourcemeta::blaze::schema_keyword_priority( std::string_view keyword, - const sourcemeta::core::Vocabularies &vocabularies, - const sourcemeta::core::SchemaWalker &walker) -> std::uint64_t { + const sourcemeta::blaze::Vocabularies &vocabularies, + const sourcemeta::blaze::SchemaWalker &walker) -> std::uint64_t { const auto &result{walker(keyword, vocabularies)}; const auto priority_from_dependencies{std::ranges::fold_left( result.dependencies, static_cast(0), @@ -679,22 +683,23 @@ auto sourcemeta::core::schema_keyword_priority( return std::max(priority_from_dependencies, priority_from_order_dependencies); } -auto sourcemeta::core::wrap(const std::string_view identifier) +auto sourcemeta::blaze::wrap(const std::string_view identifier) -> sourcemeta::core::JSON { - auto result{JSON::make_object()}; + auto result{sourcemeta::core::JSON::make_object()}; // JSON Schema 2020-12 is the first dialect that truly supports cross-dialect // references In practice, others do, but we can play it safe here result.assign_assume_new( - "$schema", JSON{"https://json-schema.org/draft/2020-12/schema"}); - result.assign_assume_new("$ref", JSON{identifier}); + "$schema", + sourcemeta::core::JSON{"https://json-schema.org/draft/2020-12/schema"}); + result.assign_assume_new("$ref", sourcemeta::core::JSON{identifier}); return result; } -auto sourcemeta::core::wrap( +auto sourcemeta::blaze::wrap( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaFrame &frame, - const sourcemeta::core::SchemaFrame::Location &location, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaFrame &frame, + const sourcemeta::blaze::SchemaFrame::Location &location, + const sourcemeta::blaze::SchemaResolver &resolver, sourcemeta::core::WeakPointer &base) -> sourcemeta::core::JSON { assert(frame.mode() == SchemaFrame::Mode::References); assert(location.type != SchemaFrame::LocationType::Pointer); @@ -703,7 +708,7 @@ auto sourcemeta::core::wrap( if (pointer.empty()) { auto copy = schema; if (copy.is_object()) { - copy.assign("$schema", JSON{location.dialect}); + copy.assign("$schema", sourcemeta::core::JSON{location.dialect}); } return copy; @@ -717,23 +722,24 @@ auto sourcemeta::core::wrap( })}; if (!has_internal_references) { - auto subschema{get(schema, pointer)}; + auto subschema{sourcemeta::core::get(schema, pointer)}; if (subschema.is_object()) { - subschema.assign("$schema", JSON{location.dialect}); + subschema.assign("$schema", sourcemeta::core::JSON{location.dialect}); } return subschema; } auto copy = schema; - copy.assign("$schema", JSON{location.dialect}); + copy.assign("$schema", sourcemeta::core::JSON{location.dialect}); - auto result{JSON::make_object()}; + auto result{sourcemeta::core::JSON::make_object()}; // JSON Schema 2020-12 is the first dialect that truly supports // cross-dialect references In practice, others do, but we can // play it safe here result.assign_assume_new( - "$schema", JSON{"https://json-schema.org/draft/2020-12/schema"}); + "$schema", + sourcemeta::core::JSON{"https://json-schema.org/draft/2020-12/schema"}); // We need to make sure the schema we are wrapping always has an identifier, // at least an artificial one, otherwise a standalone instance of `$schema` // outside of the root of a schema resource is not valid according to @@ -745,7 +751,7 @@ auto sourcemeta::core::wrap( const auto maybe_id{identify(copy, resolver, location.dialect)}; const auto id{maybe_id.empty() ? WRAPPER_IDENTIFIER : maybe_id}; - URI uri{id}; + sourcemeta::core::URI uri{id}; try { reidentify(copy, id, resolver, location.dialect); @@ -759,24 +765,26 @@ auto sourcemeta::core::wrap( "undefined behavior"); } - result.assign_assume_new("$defs", JSON::make_object()); + result.assign_assume_new("$defs", sourcemeta::core::JSON::make_object()); result.at("$defs").assign_assume_new("schema", std::move(copy)); // Add a reference to the schema if (!uri.fragment().has_value() || uri.fragment().value().empty()) { - uri.fragment(to_string(pointer)); - result.assign_assume_new("$ref", JSON{uri.recompose()}); + uri.fragment(sourcemeta::core::to_string(pointer)); + result.assign_assume_new("$ref", sourcemeta::core::JSON{uri.recompose()}); } else { - static const JSON::String DEFS{"$defs"}; - static const JSON::String SCHEMA{"schema"}; + static const sourcemeta::core::JSON::String DEFS{"$defs"}; + static const sourcemeta::core::JSON::String SCHEMA{"schema"}; result.assign_assume_new( "$ref", - JSON{to_uri(WeakPointer{std::cref(DEFS), std::cref(SCHEMA)}.concat( - pointer)) - .recompose()}); + sourcemeta::core::JSON{ + sourcemeta::core::to_uri(sourcemeta::core::WeakPointer{ + std::cref(DEFS), std::cref(SCHEMA)} + .concat(pointer)) + .recompose()}); } - static const JSON::String REF{"$ref"}; + static const sourcemeta::core::JSON::String REF{"$ref"}; base.push_back(REF); return result; } @@ -802,7 +810,7 @@ static auto parse_schema_type_string(const sourcemeta::core::JSON::String &type, } } -auto sourcemeta::core::parse_schema_type(const sourcemeta::core::JSON &type) +auto sourcemeta::blaze::parse_schema_type(const sourcemeta::core::JSON &type) -> sourcemeta::core::JSON::TypeSet { sourcemeta::core::JSON::TypeSet result; if (type.is_string()) { diff --git a/vendor/core/src/core/jsonschema/frame.cc b/vendor/blaze/src/foundation/frame.cc similarity index 82% rename from vendor/core/src/core/jsonschema/frame.cc rename to vendor/blaze/src/foundation/frame.cc index 541700963..353488fac 100644 --- a/vendor/core/src/core/jsonschema/frame.cc +++ b/vendor/blaze/src/foundation/frame.cc @@ -1,4 +1,4 @@ -#include +#include #include "helpers.h" @@ -71,19 +71,19 @@ auto is_valid_anchor(const std::string_view name) -> bool { } auto find_anchors(const sourcemeta::core::JSON &schema, - const sourcemeta::core::Vocabularies &vocabularies) + const sourcemeta::blaze::Vocabularies &vocabularies) -> std::vector> { std::vector> result; // 2020-12 if (schema.is_object() && vocabularies.contains( - sourcemeta::core::Vocabularies::Known::JSON_Schema_2020_12_Core)) { + sourcemeta::blaze::Vocabularies::Known::JSON_Schema_2020_12_Core)) { const auto *dynamic_anchor{schema.try_at("$dynamicAnchor")}; if (dynamic_anchor && dynamic_anchor->is_string()) { const std::string_view dynamic_anchor_view{dynamic_anchor->to_string()}; if (!is_valid_anchor_2020_12(dynamic_anchor_view)) { - throw sourcemeta::core::SchemaKeywordError( + throw sourcemeta::blaze::SchemaKeywordError( "$dynamicAnchor", dynamic_anchor_view, "Invalid dynamic anchor value"); } @@ -95,8 +95,8 @@ auto find_anchors(const sourcemeta::core::JSON &schema, if (anchor_2020 && anchor_2020->is_string()) { const std::string_view anchor_view{anchor_2020->to_string()}; if (!is_valid_anchor_2020_12(anchor_view)) { - throw sourcemeta::core::SchemaKeywordError("$anchor", anchor_view, - "Invalid anchor value"); + throw sourcemeta::blaze::SchemaKeywordError("$anchor", anchor_view, + "Invalid anchor value"); } bool found = false; @@ -116,7 +116,7 @@ auto find_anchors(const sourcemeta::core::JSON &schema, // 2019-09 if (schema.is_object() && vocabularies.contains( - sourcemeta::core::Vocabularies::Known::JSON_Schema_2019_09_Core)) { + sourcemeta::blaze::Vocabularies::Known::JSON_Schema_2019_09_Core)) { const auto *recursive_anchor{schema.try_at("$recursiveAnchor")}; if (recursive_anchor) { if (recursive_anchor->is_boolean()) { @@ -127,7 +127,7 @@ auto find_anchors(const sourcemeta::core::JSON &schema, } else { std::ostringstream value; sourcemeta::core::stringify(*recursive_anchor, value); - throw sourcemeta::core::SchemaKeywordError( + throw sourcemeta::blaze::SchemaKeywordError( "$recursiveAnchor", value.str(), "Invalid recursive anchor value"); } } @@ -136,8 +136,8 @@ auto find_anchors(const sourcemeta::core::JSON &schema, if (anchor_2019 && anchor_2019->is_string()) { const std::string_view anchor_view{anchor_2019->to_string()}; if (!is_valid_anchor(anchor_view)) { - throw sourcemeta::core::SchemaKeywordError("$anchor", anchor_view, - "Invalid anchor value"); + throw sourcemeta::blaze::SchemaKeywordError("$anchor", anchor_view, + "Invalid anchor value"); } bool found = false; @@ -158,9 +158,9 @@ auto find_anchors(const sourcemeta::core::JSON &schema, // Old `$id` anchor form if (schema.is_object() && (vocabularies.contains( - sourcemeta::core::Vocabularies::Known::JSON_Schema_Draft_7) || + sourcemeta::blaze::Vocabularies::Known::JSON_Schema_Draft_7) || vocabularies.contains( - sourcemeta::core::Vocabularies::Known::JSON_Schema_Draft_6))) { + sourcemeta::blaze::Vocabularies::Known::JSON_Schema_Draft_6))) { const auto *id_value{schema.try_at("$id")}; if (id_value) { assert(id_value->is_string()); @@ -173,8 +173,8 @@ auto find_anchors(const sourcemeta::core::JSON &schema, // begin with a letter `[A-Za-z]` followed by any number of // letters, digits, hyphens, underscores, colons, or periods. if (!is_valid_anchor(anchor_view)) { - throw sourcemeta::core::SchemaKeywordError("$id", id_view, - "Invalid anchor value"); + throw sourcemeta::blaze::SchemaKeywordError("$id", id_view, + "Invalid anchor value"); } result.emplace_back(anchor_view, AnchorType::Static); @@ -186,7 +186,7 @@ auto find_anchors(const sourcemeta::core::JSON &schema, // Old `id` anchor form if (schema.is_object() && vocabularies.contains( - sourcemeta::core::Vocabularies::Known::JSON_Schema_Draft_4)) { + sourcemeta::blaze::Vocabularies::Known::JSON_Schema_Draft_4)) { const auto *id_value{schema.try_at("id")}; if (id_value) { assert(id_value->is_string()); @@ -197,7 +197,7 @@ auto find_anchors(const sourcemeta::core::JSON &schema, // Draft 4 imposes no plain-name pattern on the fragment, but the // value must still be a valid URI reference per RFC 3986 if (!sourcemeta::core::URI::is_uri_reference(id_view)) { - throw sourcemeta::core::SchemaKeywordError( + throw sourcemeta::blaze::SchemaKeywordError( "id", id_view, "The identifier is not a valid URI"); } @@ -252,7 +252,7 @@ auto find_nearest_bases(const MapType &bases, struct DialectAtPointer { std::vector dialects; - sourcemeta::core::SchemaBaseDialect base_dialect; + sourcemeta::blaze::SchemaBaseDialect base_dialect; }; struct CombinedWalkResult { @@ -303,9 +303,9 @@ auto find_dialect_and_all_bases(const DialectMapType &base_dialects, return result; } -auto supports_id_anchors(const sourcemeta::core::SchemaBaseDialect base_dialect) - -> bool { - using sourcemeta::core::SchemaBaseDialect; +auto supports_id_anchors( + const sourcemeta::blaze::SchemaBaseDialect base_dialect) -> bool { + using sourcemeta::blaze::SchemaBaseDialect; switch (base_dialect) { case SchemaBaseDialect::JSON_Schema_Draft_7: case SchemaBaseDialect::JSON_Schema_Draft_7_Hyper: @@ -320,7 +320,7 @@ auto supports_id_anchors(const sourcemeta::core::SchemaBaseDialect base_dialect) } auto set_base_and_fragment( - sourcemeta::core::SchemaFrame::ReferencesEntry &entry) -> void { + sourcemeta::blaze::SchemaFrame::ReferencesEntry &entry) -> void { const std::string_view destination_view{entry.destination}; if (destination_view.empty()) { entry.base = std::string_view{}; @@ -347,18 +347,18 @@ auto set_base_and_fragment( [[noreturn]] auto throw_already_exists(const sourcemeta::core::JSON::String &uri) -> void { - throw sourcemeta::core::SchemaFrameError(uri, - "Schema identifier already exists"); + throw sourcemeta::blaze::SchemaFrameError(uri, + "Schema identifier already exists"); } -auto store(sourcemeta::core::SchemaFrame::Locations &frame, - const sourcemeta::core::SchemaReferenceType type, - const sourcemeta::core::SchemaFrame::LocationType entry_type, +auto store(sourcemeta::blaze::SchemaFrame::Locations &frame, + const sourcemeta::blaze::SchemaReferenceType type, + const sourcemeta::blaze::SchemaFrame::LocationType entry_type, sourcemeta::core::JSON::String uri, const std::string_view base, const sourcemeta::core::WeakPointer &pointer_from_root, const std::size_t relative_pointer_offset, const std::string_view dialect, - const sourcemeta::core::SchemaBaseDialect base_dialect, + const sourcemeta::blaze::SchemaBaseDialect base_dialect, const std::optional &parent, const bool property_name, const bool orphan, const bool ignore_if_present = false, @@ -377,8 +377,8 @@ auto store(sourcemeta::core::SchemaFrame::Locations &frame, .property_name = property_name, .orphan = orphan}}); if (!ignore_if_present && !inserted) { - if (entry_type == sourcemeta::core::SchemaFrame::LocationType::Anchor) { - throw sourcemeta::core::SchemaAnchorCollisionError( + if (entry_type == sourcemeta::blaze::SchemaFrame::LocationType::Anchor) { + throw sourcemeta::blaze::SchemaAnchorCollisionError( iterator->first.second, sourcemeta::core::to_pointer(pointer_from_root), sourcemeta::core::to_pointer(iterator->second.pointer)); @@ -394,7 +394,7 @@ auto store(sourcemeta::core::SchemaFrame::Locations &frame, // Check misunderstood struct to be a function // NOLINTNEXTLINE(bugprone-exception-escape) struct InternalEntry { - sourcemeta::core::SchemaIteratorEntry common; + sourcemeta::blaze::SchemaIteratorEntry common; std::optional id; }; @@ -408,68 +408,80 @@ struct CacheSubschema { } // namespace -namespace sourcemeta::core { +namespace sourcemeta::blaze { -auto to_json(const SchemaReferenceType value) -> JSON { - return JSON{value == SchemaReferenceType::Static ? "static" : "dynamic"}; +auto to_json(const SchemaReferenceType value) -> sourcemeta::core::JSON { + return sourcemeta::core::JSON{ + value == SchemaReferenceType::Static ? "static" : "dynamic"}; } -auto to_json(const SchemaFrame::LocationType value) -> JSON { +auto to_json(const SchemaFrame::LocationType value) -> sourcemeta::core::JSON { switch (value) { case SchemaFrame::LocationType::Resource: - return JSON{"resource"}; + return sourcemeta::core::JSON{"resource"}; case SchemaFrame::LocationType::Anchor: - return JSON{"anchor"}; + return sourcemeta::core::JSON{"anchor"}; case SchemaFrame::LocationType::Pointer: - return JSON{"pointer"}; + return sourcemeta::core::JSON{"pointer"}; case SchemaFrame::LocationType::Subschema: - return JSON{"subschema"}; + return sourcemeta::core::JSON{"subschema"}; default: assert(false); - return JSON{nullptr}; + return sourcemeta::core::JSON{nullptr}; } } auto SchemaFrame::to_json( - const std::optional &tracker) const -> JSON { - auto root{JSON::make_object()}; - - root.assign_assume_new("locations", JSON::make_object()); - root.at("locations").assign_assume_new("static", JSON::make_object()); - root.at("locations").assign_assume_new("dynamic", JSON::make_object()); + const std::optional &tracker) + const -> sourcemeta::core::JSON { + auto root{sourcemeta::core::JSON::make_object()}; + + root.assign_assume_new("locations", sourcemeta::core::JSON::make_object()); + root.at("locations") + .assign_assume_new("static", sourcemeta::core::JSON::make_object()); + root.at("locations") + .assign_assume_new("dynamic", sourcemeta::core::JSON::make_object()); for (const auto &location : this->locations_) { - auto entry{JSON::make_object()}; - entry.assign_assume_new("parent", location.second.parent.has_value() - ? JSON{sourcemeta::core::to_string( - location.second.parent.value())} - : JSON{nullptr}); + auto entry{sourcemeta::core::JSON::make_object()}; + entry.assign_assume_new( + "parent", location.second.parent.has_value() + ? sourcemeta::core::JSON{sourcemeta::core::to_string( + location.second.parent.value())} + : sourcemeta::core::JSON{nullptr}); entry.assign_assume_new("type", - sourcemeta::core::to_json(location.second.type)); - entry.assign_assume_new("root", this->root_.empty() ? JSON{nullptr} - : JSON{this->root_}); - entry.assign_assume_new("base", JSON{JSON::String{location.second.base}}); + sourcemeta::blaze::to_json(location.second.type)); + entry.assign_assume_new("root", this->root_.empty() + ? sourcemeta::core::JSON{nullptr} + : sourcemeta::core::JSON{this->root_}); entry.assign_assume_new( - "pointer", JSON{sourcemeta::core::to_string(location.second.pointer)}); + "base", sourcemeta::core::JSON{ + sourcemeta::core::JSON::String{location.second.base}}); + entry.assign_assume_new( + "pointer", sourcemeta::core::JSON{ + sourcemeta::core::to_string(location.second.pointer)}); if (tracker.has_value()) { - entry.assign_assume_new("position", - sourcemeta::core::to_json(tracker.value().get( - to_pointer(location.second.pointer)))); + entry.assign_assume_new( + "position", + sourcemeta::core::to_json(tracker.value().get( + sourcemeta::core::to_pointer(location.second.pointer)))); } else { entry.assign_assume_new("position", sourcemeta::core::to_json(nullptr)); } entry.assign_assume_new( "relativePointer", - JSON{sourcemeta::core::to_string( + sourcemeta::core::JSON{sourcemeta::core::to_string( this->relative_instance_location(location.second))}); - entry.assign_assume_new("dialect", - JSON{JSON::String{location.second.dialect}}); entry.assign_assume_new( - "baseDialect", - JSON{JSON::String{to_string(location.second.base_dialect)}}); - entry.assign_assume_new("propertyName", - JSON{location.second.property_name}); - entry.assign_assume_new("orphan", JSON{location.second.orphan}); + "dialect", sourcemeta::core::JSON{sourcemeta::core::JSON::String{ + location.second.dialect}}); + entry.assign_assume_new( + "baseDialect", sourcemeta::core::JSON{sourcemeta::core::JSON::String{ + to_string(location.second.base_dialect)}}); + entry.assign_assume_new( + "propertyName", sourcemeta::core::JSON{location.second.property_name}); + entry.assign_assume_new("orphan", + sourcemeta::core::JSON{location.second.orphan}); switch (location.first.first) { case SchemaReferenceType::Static: @@ -487,18 +499,20 @@ auto SchemaFrame::to_json( } } - root.assign_assume_new("references", JSON::make_array()); + root.assign_assume_new("references", sourcemeta::core::JSON::make_array()); for (const auto &reference : this->references_) { - auto entry{JSON::make_object()}; + auto entry{sourcemeta::core::JSON::make_object()}; entry.assign_assume_new("type", - sourcemeta::core::to_json(reference.first.first)); + sourcemeta::blaze::to_json(reference.first.first)); entry.assign_assume_new( - "origin", JSON{sourcemeta::core::to_string(reference.first.second)}); + "origin", sourcemeta::core::JSON{ + sourcemeta::core::to_string(reference.first.second)}); if (tracker.has_value()) { - entry.assign_assume_new("position", - sourcemeta::core::to_json(tracker.value().get( - to_pointer(reference.first.second)))); + entry.assign_assume_new( + "position", + sourcemeta::core::to_json(tracker.value().get( + sourcemeta::core::to_pointer(reference.first.second)))); } else { entry.assign_assume_new("position", sourcemeta::core::to_json(nullptr)); } @@ -506,37 +520,43 @@ auto SchemaFrame::to_json( entry.assign_assume_new( "destination", sourcemeta::core::to_json(reference.second.destination)); entry.assign_assume_new( - "base", - !reference.second.base.empty() - ? sourcemeta::core::to_json(JSON::String{reference.second.base}) - : sourcemeta::core::to_json(nullptr)); + "base", !reference.second.base.empty() + ? sourcemeta::core::to_json( + sourcemeta::core::JSON::String{reference.second.base}) + : sourcemeta::core::to_json(nullptr)); entry.assign_assume_new( - "fragment", reference.second.fragment.has_value() - ? sourcemeta::core::to_json( - JSON::String{reference.second.fragment.value()}) - : sourcemeta::core::to_json(nullptr)); + "fragment", + reference.second.fragment.has_value() + ? sourcemeta::core::to_json(sourcemeta::core::JSON::String{ + reference.second.fragment.value()}) + : sourcemeta::core::to_json(nullptr)); root.at("references").push_back(std::move(entry)); } return root; } -auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, +auto SchemaFrame::analyse(const sourcemeta::core::JSON &root, + const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect, std::string_view default_id, const SchemaFrame::Paths &paths) -> void { this->reset(); - assert((std::unordered_set(paths.cbegin(), - paths.cend()) + assert((std::unordered_set( + paths.cbegin(), paths.cend()) .size() == paths.size())); std::vector subschema_entries; - std::unordered_map + std::unordered_map subschemas; - std::unordered_map, - WeakPointer::Hasher> + std::unordered_map, + sourcemeta::core::WeakPointer::Hasher> base_uris; - std::unordered_map + std::unordered_map base_dialects; for (const auto &path : paths) { @@ -546,27 +566,27 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, return path == other || !path.starts_with(other); })); - const auto &schema{get(root, path)}; + const auto &schema{sourcemeta::core::get(root, path)}; const auto root_base_dialect{ - sourcemeta::core::base_dialect(schema, resolver, default_dialect)}; + sourcemeta::blaze::base_dialect(schema, resolver, default_dialect)}; if (!root_base_dialect.has_value()) { throw SchemaUnknownBaseDialectError(); } // If we are dealing with nested schemas, then by definition // the root has no identifier - std::optional root_id{std::nullopt}; + std::optional root_id{std::nullopt}; if (path.empty()) { - const auto maybe_id{sourcemeta::core::identify( + const auto maybe_id{sourcemeta::blaze::identify( schema, root_base_dialect.value(), default_id)}; if (!maybe_id.empty()) { try { - root_id = URI::canonicalize(maybe_id); - } catch (const URIParseError &) { + root_id = sourcemeta::core::URI::canonicalize(maybe_id); + } catch (const sourcemeta::core::URIParseError &) { throw SchemaKeywordError( - sourcemeta::core::id_keyword(root_base_dialect.value()), maybe_id, - "The identifier is not a valid URI"); + sourcemeta::blaze::id_keyword(root_base_dialect.value()), + maybe_id, "The identifier is not a valid URI"); } this->root_ = root_id.value(); @@ -574,7 +594,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, } const std::string_view root_dialect{ - sourcemeta::core::dialect(schema, default_dialect)}; + sourcemeta::blaze::dialect(schema, default_dialect)}; assert(!root_dialect.empty()); // If the top-level schema has a specific identifier but the user @@ -584,7 +604,8 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, !default_id.empty() && root_id.value() != default_id}; if (has_explicit_different_id) { - const auto default_id_canonical{URI::canonicalize(default_id)}; + const auto default_id_canonical{ + sourcemeta::core::URI::canonicalize(default_id)}; // Use this->root_ as base - it contains root_id.value() and persists store(this->locations_, SchemaReferenceType::Static, SchemaFrame::LocationType::Resource, default_id_canonical, @@ -595,7 +616,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, } std::vector current_subschema_entries; - for (const auto &relative_entry : sourcemeta::core::SchemaIterator{ + for (const auto &relative_entry : sourcemeta::blaze::SchemaIterator{ schema, walker, resolver, default_dialect}) { // Rephrase the iterator entry as being for the current base auto entry{relative_entry}; @@ -618,12 +639,13 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, const std::string default_id_for_entry{ entry.pointer.empty() && root_id.has_value() ? root_id.value() : std::string{}}; - const auto maybe_id{sourcemeta::core::identify(entry.subschema.get(), - entry.base_dialect.value(), - default_id_for_entry)}; - std::optional id{ - !maybe_id.empty() ? std::make_optional(maybe_id) - : std::nullopt}; + const auto maybe_id{sourcemeta::blaze::identify( + entry.subschema.get(), entry.base_dialect.value(), + default_id_for_entry)}; + std::optional id{ + !maybe_id.empty() + ? std::make_optional(maybe_id) + : std::nullopt}; // Store information subschemas.emplace(entry.pointer, @@ -642,7 +664,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (entry.id.has_value()) { assert(entry.common.base_dialect.has_value()); const bool ref_overrides = - sourcemeta::core::ref_overrides_adjacent_keywords( + sourcemeta::blaze::ref_overrides_adjacent_keywords( entry.common.base_dialect.value()); const bool is_pre_2019_09_location_independent_identifier = supports_id_anchors(entry.common.base_dialect.value()) && @@ -653,7 +675,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, // identifier, we ignore it as a traditional identifier and take // care of it as an anchor !is_pre_2019_09_location_independent_identifier) { - const auto bases{find_nearest_bases( + const auto bases{find_nearest_bases( base_uris, common_pointer_weak, entry.id ? std::optional{*entry.id} : std::nullopt)}; @@ -670,8 +692,8 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, base = sourcemeta::core::URI{base_string}; maybe_relative = sourcemeta::core::URI{entry.id.value()}; } catch (const sourcemeta::core::URIParseError &) { - throw sourcemeta::core::SchemaKeywordError( - sourcemeta::core::id_keyword( + throw sourcemeta::blaze::SchemaKeywordError( + sourcemeta::blaze::id_keyword( entry.common.base_dialect.value()), entry.id.value(), "The identifier is not a valid URI"); } @@ -695,7 +717,8 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, const bool maybe_relative_is_absolute{maybe_relative.is_absolute()}; maybe_relative.resolve_from(base).canonicalize(); - const JSON::String new_id{maybe_relative.recompose()}; + const sourcemeta::core::JSON::String new_id{ + maybe_relative.recompose()}; const auto maybe_match{ this->locations_.find({SchemaReferenceType::Static, new_id})}; @@ -730,21 +753,22 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (this->mode_ != SchemaFrame::Mode::Locations) { // Handle metaschema references - const auto maybe_metaschema{ - sourcemeta::core::dialect(entry.common.subschema.get(), {}, false)}; + const auto maybe_metaschema{sourcemeta::blaze::dialect( + entry.common.subschema.get(), {}, false)}; if (!maybe_metaschema.empty()) { sourcemeta::core::URI metaschema; try { metaschema = sourcemeta::core::URI{maybe_metaschema}; - } catch (const URIParseError &) { + } catch (const sourcemeta::core::URIParseError &) { throw SchemaKeywordError("$schema", maybe_metaschema, "The dialect is not a valid URI"); } - const auto nearest_bases{find_nearest_bases( - base_uris, common_pointer_weak, - entry.id ? std::optional{*entry.id} - : std::nullopt)}; + const auto nearest_bases{ + find_nearest_bases( + base_uris, common_pointer_weak, + entry.id ? std::optional{*entry.id} + : std::nullopt)}; if (!nearest_bases.first.empty()) { metaschema.resolve_from(nearest_bases.first.front()); } @@ -767,7 +791,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, // Handle schema anchors for (const auto &[name, type] : find_anchors(entry.common.subschema.get(), entry.common.vocabularies)) { - const auto bases{find_nearest_bases( + const auto bases{find_nearest_bases( base_uris, common_pointer_weak, entry.id ? std::optional{*entry.id} : std::nullopt)}; @@ -827,7 +851,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (type == AnchorType::Static || type == AnchorType::All) { store(this->locations_, - sourcemeta::core::SchemaReferenceType::Static, + sourcemeta::blaze::SchemaReferenceType::Static, SchemaFrame::LocationType::Anchor, anchor_uri, base_view, common_pointer_weak, bases.second.size(), entry.common.dialect, entry.common.base_dialect.value(), @@ -837,7 +861,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (type == AnchorType::Dynamic || type == AnchorType::All) { store(this->locations_, - sourcemeta::core::SchemaReferenceType::Dynamic, + sourcemeta::blaze::SchemaReferenceType::Dynamic, SchemaFrame::LocationType::Anchor, anchor_uri, base_view, common_pointer_weak, bases.second.size(), entry.common.dialect, entry.common.base_dialect.value(), @@ -847,7 +871,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (entry.common.vocabularies.contains( Vocabularies::Known::JSON_Schema_2020_12_Core)) { store(this->locations_, - sourcemeta::core::SchemaReferenceType::Static, + sourcemeta::blaze::SchemaReferenceType::Static, SchemaFrame::LocationType::Anchor, anchor_uri, base_view, common_pointer_weak, bases.second.size(), entry.common.dialect, entry.common.base_dialect.value(), @@ -887,7 +911,8 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, : root_base_dialect.value()}; const auto &every_base_result{combined.every_base}; - std::optional> nearest_base_info; + std::optional> + nearest_base_info; for (const auto &entry : every_base_result) { if (!entry.first.empty()) { nearest_base_info = entry; @@ -902,7 +927,8 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, std::string_view hoisted_base_view{}; if (nearest_base_info.has_value()) { - const JSON::String nearest_base_str{nearest_base_info->first}; + const sourcemeta::core::JSON::String nearest_base_str{ + nearest_base_info->first}; const auto base_entry{this->locations_.find( {SchemaReferenceType::Static, nearest_base_str})}; if (base_entry != this->locations_.cend()) { @@ -912,7 +938,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, } } - WeakPointer cached_base{}; + sourcemeta::core::WeakPointer cached_base{}; for (const auto &base : every_base_result) { const auto resolved{cached_base == base.second ? pointer_weak.resolve_from(cached_base) @@ -936,7 +962,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (nearest_base_info.has_value()) { base_view = hoisted_base_view; } else { - const JSON::String current_base{base.first}; + const sourcemeta::core::JSON::String current_base{base.first}; const auto base_entry{this->locations_.find( {SchemaReferenceType::Static, current_base})}; if (base_entry != this->locations_.cend()) { @@ -955,9 +981,10 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, subschema_it->second.property_name, subschema_it->second.orphan, false, true); } else { - const auto &parent_pointer{combined.dialect_match.has_value() - ? combined.dialect_match->second - : empty_weak_pointer}; + const auto &parent_pointer{ + combined.dialect_match.has_value() + ? combined.dialect_match->second + : sourcemeta::core::empty_weak_pointer}; const auto parent_subschema_it{subschemas.find(parent_pointer)}; const bool parent_property_name{ parent_subschema_it != subschemas.cend() && @@ -984,25 +1011,26 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, for (const auto &entry : subschema_entries) { const auto &common_pointer_weak{entry.common.pointer}; if (entry.common.subschema.get().is_object()) { - const auto nearest_bases{find_nearest_bases( - base_uris, common_pointer_weak, - entry.id ? std::optional{*entry.id} - : std::nullopt)}; + const auto nearest_bases{ + find_nearest_bases( + base_uris, common_pointer_weak, + entry.id ? std::optional{*entry.id} + : std::nullopt)}; const auto *ref_value{entry.common.subschema.get().try_at("$ref")}; if (ref_value) { if (!ref_value->is_string()) { std::ostringstream value; sourcemeta::core::stringify(*ref_value, value); - throw sourcemeta::core::SchemaKeywordError("$ref", value.str(), - "Invalid reference value"); + throw sourcemeta::blaze::SchemaKeywordError( + "$ref", value.str(), "Invalid reference value"); } const auto &original{ref_value->to_string()}; sourcemeta::core::URI ref; try { ref = sourcemeta::core::URI{original}; - } catch (const URIParseError &) { - throw sourcemeta::core::SchemaKeywordError( + } catch (const sourcemeta::core::URIParseError &) { + throw sourcemeta::blaze::SchemaKeywordError( "$ref", original, "The reference is not a valid URI"); } @@ -1031,7 +1059,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (!recursive_ref_value->is_string()) { std::ostringstream value; sourcemeta::core::stringify(*recursive_ref_value, value); - throw sourcemeta::core::SchemaKeywordError( + throw sourcemeta::blaze::SchemaKeywordError( "$recursiveRef", value.str(), "Invalid recursive reference value"); } @@ -1043,7 +1071,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, // See // https://json-schema.org/draft/2019-09/draft-handrews-json-schema-02#rfc.section.8.2.4.2.1 if (ref != "#") { - throw sourcemeta::core::SchemaReferenceError( + throw sourcemeta::blaze::SchemaReferenceError( entry.id.value_or(""), to_pointer(common_pointer_weak).concat({"$recursiveRef"}), "Invalid recursive reference"); @@ -1077,7 +1105,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (!dynamic_ref_value->is_string()) { std::ostringstream value; sourcemeta::core::stringify(*dynamic_ref_value, value); - throw sourcemeta::core::SchemaKeywordError( + throw sourcemeta::blaze::SchemaKeywordError( "$dynamicRef", value.str(), "Invalid dynamic reference value"); } @@ -1085,8 +1113,8 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, sourcemeta::core::URI ref; try { ref = sourcemeta::core::URI{original}; - } catch (const URIParseError &) { - throw sourcemeta::core::SchemaKeywordError( + } catch (const sourcemeta::core::URIParseError &) { + throw sourcemeta::blaze::SchemaKeywordError( "$dynamicRef", original, "The dynamic reference is not a valid URI"); } @@ -1143,7 +1171,8 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, if (this->standalone_) { // Find all dynamic anchors // Values are pointers to full URIs in locations_ - std::unordered_map> + std::unordered_map> dynamic_anchors; for (const auto &entry : this->locations_) { if (entry.first.first != SchemaReferenceType::Dynamic || @@ -1151,9 +1180,10 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, continue; } - const URI anchor_uri{entry.first.second}; + const sourcemeta::core::URI anchor_uri{entry.first.second}; // Copy the fragment to avoid dangling string_view (anchor_uri is local) - const JSON::String fragment{anchor_uri.fragment().value_or("")}; + const sourcemeta::core::JSON::String fragment{ + anchor_uri.fragment().value_or("")}; dynamic_anchors[fragment].push_back(&entry.first.second); } @@ -1169,7 +1199,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker, } const auto match{dynamic_anchors.find( - JSON::String{reference.second.fragment.value()})}; + sourcemeta::core::JSON::String{reference.second.fragment.value()})}; assert(match != dynamic_anchors.cend()); // Otherwise we can assume there is only one possible target for the // dynamic reference @@ -1208,7 +1238,7 @@ auto SchemaFrame::references() const noexcept -> const References & { } auto SchemaFrame::reference(const SchemaReferenceType type, - const WeakPointer &pointer) const + const sourcemeta::core::WeakPointer &pointer) const -> std::optional> { const auto result{this->references_.find({type, pointer})}; if (result != this->references_.cend()) { @@ -1222,28 +1252,32 @@ auto SchemaFrame::standalone() const noexcept -> bool { return this->standalone_; } -auto SchemaFrame::root() const noexcept -> const JSON::String & { +auto SchemaFrame::root() const noexcept + -> const sourcemeta::core::JSON::String & { return this->root_; } auto SchemaFrame::vocabularies(const Location &location, const SchemaResolver &resolver) const -> Vocabularies { - return sourcemeta::core::vocabularies(resolver, location.base_dialect, - location.dialect); + return sourcemeta::blaze::vocabularies(resolver, location.base_dialect, + location.dialect); } -auto SchemaFrame::uri(const Location &location, - const WeakPointer &relative_schema_location) const - -> JSON::String { - return to_uri(this->relative_instance_location(location).concat( - relative_schema_location), - location.base) +auto SchemaFrame::uri( + const Location &location, + const sourcemeta::core::WeakPointer &relative_schema_location) const + -> sourcemeta::core::JSON::String { + return sourcemeta::core::to_uri( + this->relative_instance_location(location).concat( + relative_schema_location), + location.base) .recompose(); } -auto SchemaFrame::traverse(const Location &location, - const WeakPointer &relative_schema_location) const +auto SchemaFrame::traverse( + const Location &location, + const sourcemeta::core::WeakPointer &relative_schema_location) const -> const Location & { const auto new_uri{this->uri(location, relative_schema_location)}; const auto static_match{ @@ -1260,7 +1294,7 @@ auto SchemaFrame::traverse(const Location &location, auto SchemaFrame::traverse(const std::string_view uri) const -> std::optional> { - const JSON::String uri_string{uri}; + const sourcemeta::core::JSON::String uri_string{uri}; const auto static_result{ this->locations_.find({SchemaReferenceType::Static, uri_string})}; if (static_result != this->locations_.cend()) { @@ -1276,7 +1310,7 @@ auto SchemaFrame::traverse(const std::string_view uri) const return std::nullopt; } -auto SchemaFrame::traverse(const WeakPointer &pointer) const +auto SchemaFrame::traverse(const sourcemeta::core::WeakPointer &pointer) const -> std::optional> { this->populate_pointer_to_location(); const auto iterator{this->pointer_to_location_.find(std::cref(pointer))}; @@ -1288,7 +1322,7 @@ auto SchemaFrame::traverse(const WeakPointer &pointer) const return *(iterator->second.front()); } -auto SchemaFrame::traverse(const WeakPointer &pointer, +auto SchemaFrame::traverse(const sourcemeta::core::WeakPointer &pointer, const LocationType type) const -> std::optional> { this->populate_pointer_to_location(); @@ -1306,8 +1340,9 @@ auto SchemaFrame::traverse(const WeakPointer &pointer, return std::nullopt; } -auto SchemaFrame::uri(const WeakPointer &pointer) const - -> std::optional> { +auto SchemaFrame::uri(const sourcemeta::core::WeakPointer &pointer) const + -> std::optional< + std::reference_wrapper> { this->populate_pointer_to_location(); const auto iterator{this->pointer_to_location_.find(std::cref(pointer))}; if (iterator == this->pointer_to_location_.cend()) { @@ -1332,8 +1367,9 @@ auto SchemaFrame::uri(const WeakPointer &pointer) const return std::nullopt; } -auto SchemaFrame::dereference(const Location &location, - const WeakPointer &relative_schema_location) const +auto SchemaFrame::dereference( + const Location &location, + const sourcemeta::core::WeakPointer &relative_schema_location) const -> std::pair>> { const auto effective_location{ @@ -1359,7 +1395,8 @@ auto SchemaFrame::dereference(const Location &location, return {SchemaReferenceType::Static, destination->second}; } -auto SchemaFrame::has_references_to(const WeakPointer &pointer) const -> bool { +auto SchemaFrame::has_references_to( + const sourcemeta::core::WeakPointer &pointer) const -> bool { for (const auto &reference : this->references_) { assert(!reference.first.second.empty()); assert(reference.first.second.back().is_property()); @@ -1377,8 +1414,8 @@ auto SchemaFrame::has_references_to(const WeakPointer &pointer) const -> bool { location.first.first == SchemaReferenceType::Dynamic && location.second.pointer == pointer) { if (!reference.second.fragment.has_value() || - URI{location.first.second}.fragment().value_or("") == - reference.second.fragment.value()) { + sourcemeta::core::URI{location.first.second}.fragment().value_or( + "") == reference.second.fragment.value()) { return true; } } @@ -1389,8 +1426,8 @@ auto SchemaFrame::has_references_to(const WeakPointer &pointer) const -> bool { return false; } -auto SchemaFrame::has_references_through(const WeakPointer &pointer) const - -> bool { +auto SchemaFrame::has_references_through( + const sourcemeta::core::WeakPointer &pointer) const -> bool { for (const auto &reference : this->references_) { assert(!reference.first.second.empty()); assert(reference.first.second.back().is_property()); @@ -1408,8 +1445,8 @@ auto SchemaFrame::has_references_through(const WeakPointer &pointer) const location.first.first == SchemaReferenceType::Dynamic && location.second.pointer.starts_with(pointer)) { if (!reference.second.fragment.has_value() || - URI{location.first.second}.fragment().value_or("") == - reference.second.fragment.value()) { + sourcemeta::core::URI{location.first.second}.fragment().value_or( + "") == reference.second.fragment.value()) { return true; } } @@ -1420,9 +1457,9 @@ auto SchemaFrame::has_references_through(const WeakPointer &pointer) const return false; } -auto SchemaFrame::has_references_through(const WeakPointer &pointer, - const WeakPointer::Token &tail) const - -> bool { +auto SchemaFrame::has_references_through( + const sourcemeta::core::WeakPointer &pointer, + const sourcemeta::core::WeakPointer::Token &tail) const -> bool { for (const auto &reference : this->references_) { assert(!reference.first.second.empty()); assert(reference.first.second.back().is_property()); @@ -1440,8 +1477,8 @@ auto SchemaFrame::has_references_through(const WeakPointer &pointer, location.first.first == SchemaReferenceType::Dynamic && location.second.pointer.starts_with(pointer, tail)) { if (!reference.second.fragment.has_value() || - URI{location.first.second}.fragment().value_or("") == - reference.second.fragment.value()) { + sourcemeta::core::URI{location.first.second}.fragment().value_or( + "") == reference.second.fragment.value()) { return true; } } @@ -1453,7 +1490,7 @@ auto SchemaFrame::has_references_through(const WeakPointer &pointer, } auto SchemaFrame::relative_instance_location(const Location &location) const - -> WeakPointer { + -> sourcemeta::core::WeakPointer { return location.pointer.slice(location.relative_pointer); } @@ -1537,7 +1574,7 @@ auto SchemaFrame::populate_descendants() const -> void { const auto &pointer{entry.second.pointer}; const auto *location{&entry.second}; - WeakPointer prefix; + sourcemeta::core::WeakPointer prefix; for (std::size_t index = 0; index <= pointer.size(); ++index) { auto prefix_iter = this->pointer_to_location_.find(std::cref(prefix)); if (prefix_iter != this->pointer_to_location_.end() && @@ -1576,7 +1613,7 @@ auto SchemaFrame::populate_potential_sources( const auto *location{&entry.second}; std::vector sources; - WeakPointer ancestor = pointer; + sourcemeta::core::WeakPointer ancestor = pointer; bool first_iteration{true}; while (first_iteration || !ancestor.empty()) { auto destination_iterator = @@ -1620,7 +1657,8 @@ auto SchemaFrame::populate_reference_graph() const -> void { return; } - std::unordered_map> + std::unordered_map> dynamic_anchors_by_fragment; for (const auto &location : this->locations_) { if (location.first.first == SchemaReferenceType::Dynamic && @@ -1636,7 +1674,8 @@ auto SchemaFrame::populate_reference_graph() const -> void { } } - std::vector> + std::vector> reference_destinations; reference_destinations.reserve(this->references_.size()); @@ -1839,4 +1878,4 @@ auto SchemaFrame::is_reachable(const Location &base, const Location &location, return iterator != cache.end() && iterator->second; } -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze diff --git a/vendor/core/src/core/jsonschema/helpers.h b/vendor/blaze/src/foundation/helpers.h similarity index 93% rename from vendor/core/src/core/jsonschema/helpers.h rename to vendor/blaze/src/foundation/helpers.h index b3ca84fa2..2f3b1f373 100644 --- a/vendor/core/src/core/jsonschema/helpers.h +++ b/vendor/blaze/src/foundation/helpers.h @@ -1,12 +1,12 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_HELPERS_H -#define SOURCEMETA_CORE_JSONSCHEMA_HELPERS_H +#ifndef SOURCEMETA_BLAZE_FOUNDATION_HELPERS_H +#define SOURCEMETA_BLAZE_FOUNDATION_HELPERS_H -#include +#include #include // assert #include // std::string_view -namespace sourcemeta::core { +namespace sourcemeta::blaze { inline auto id_keyword(const SchemaBaseDialect base_dialect) -> std::string_view { @@ -81,6 +81,6 @@ ref_overrides_adjacent_keywords(const SchemaBaseDialect base_dialect) -> bool { } } -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema.h b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation.h similarity index 62% rename from vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema.h rename to vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation.h index 5f6a23796..33d9ddabb 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema.h +++ b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation.h @@ -1,19 +1,19 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_H_ -#define SOURCEMETA_CORE_JSONSCHEMA_H_ +#ifndef SOURCEMETA_BLAZE_FOUNDATION_H_ +#define SOURCEMETA_BLAZE_FOUNDATION_H_ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_EXPORT -#include +#ifndef SOURCEMETA_BLAZE_FOUNDATION_EXPORT +#include #endif #include #include // NOLINTBEGIN(misc-include-cleaner) -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include // NOLINTEND(misc-include-cleaner) #include // std::uint8_t @@ -23,46 +23,53 @@ #include // std::string #include // std::string_view -/// @defgroup jsonschema JSON Schema -/// @brief A set of JSON Schema utilities across draft versions. +/// @defgroup foundation Foundation +/// @brief A set of JSON Schema utilities across dialects. /// /// This functionality is included as follows: /// /// ```cpp -/// #include +/// #include /// ``` -namespace sourcemeta::core { +namespace sourcemeta::blaze { -/// @ingroup jsonschema +/// @ingroup foundation /// A default resolver that relies on built-in official schemas. -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto schema_resolver(const std::string_view identifier) -> std::optional; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto schema_resolver(const std::string_view identifier) + -> std::optional; -/// @ingroup jsonschema +/// @ingroup foundation /// Check if a given identifier corresponds to a known built-in schema -SOURCEMETA_CORE_JSONSCHEMA_EXPORT +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto is_known_schema(const std::string_view identifier) noexcept -> bool; -/// @ingroup jsonschema +/// @ingroup foundation +/// Check if a given URI corresponds to an official schema released by the +/// JSON Schema organisation +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto is_official_schema(const std::string_view identifier) noexcept -> bool; + +/// @ingroup foundation /// A default schema walker with support for a wide range of drafts -SOURCEMETA_CORE_JSONSCHEMA_EXPORT +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto schema_walker(const std::string_view keyword, const Vocabularies &vocabularies) -> const SchemaWalkerResult &; -/// @ingroup jsonschema +/// @ingroup foundation /// Stringify a base dialect to its URI -SOURCEMETA_CORE_JSONSCHEMA_EXPORT +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto to_string(const SchemaBaseDialect base_dialect) -> std::string_view; -/// @ingroup jsonschema +/// @ingroup foundation /// Parse a base dialect URI to its enum representation -SOURCEMETA_CORE_JSONSCHEMA_EXPORT +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto to_base_dialect(const std::string_view base_dialect) -> std::optional; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Calculate the priority of a keyword that determines the ordering in which a /// JSON Schema implementation should evaluate keyword on a subschema. It does @@ -74,7 +81,7 @@ auto to_base_dialect(const std::string_view base_dialect) /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -85,63 +92,63 @@ auto to_base_dialect(const std::string_view base_dialect) /// })JSON"); /// /// const auto vocabularies{ -/// sourcemeta::core::vocabularies( -/// document, sourcemeta::core::schema_resolver)}; +/// sourcemeta::blaze::vocabularies( +/// document, sourcemeta::blaze::schema_resolver)}; /// -/// assert(sourcemeta::core::schema_keyword_priority( +/// assert(sourcemeta::blaze::schema_keyword_priority( /// "prefixItems", vocabularies, -/// sourcemeta::core::schema_walker) == 0); +/// sourcemeta::blaze::schema_walker) == 0); /// /// // The "items" keyword must be evaluated after the "prefixItems" keyword -/// assert(sourcemeta::core::schema_keyword_priority( +/// assert(sourcemeta::blaze::schema_keyword_priority( /// "items", vocabularies, -/// sourcemeta::core::schema_walker) == 1); +/// sourcemeta::blaze::schema_walker) == 1); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto schema_keyword_priority(const std::string_view keyword, const Vocabularies &vocabularies, const SchemaWalker &walker) -> std::uint64_t; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function returns true if the given JSON instance is of a /// schema-compatible type: an object or a boolean. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document{true}; -/// assert(sourcemeta::core::is_schema(document)); +/// assert(sourcemeta::blaze::is_schema(document)); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto is_schema(const JSON &schema) -> bool; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto is_schema(const sourcemeta::core::JSON &schema) -> bool; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function returns true if the given JSON instance is a schema /// semantically equivalent to the empty schema. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document{true}; -/// assert(sourcemeta::core::is_empty_schema(document)); +/// assert(sourcemeta::blaze::is_empty_schema(document)); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto is_empty_schema(const JSON &schema) -> bool; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto is_empty_schema(const sourcemeta::core::JSON &schema) -> bool; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function returns the URI identifier of the given schema, or an empty /// string view if the schema has no identifier. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -150,26 +157,28 @@ auto is_empty_schema(const JSON &schema) -> bool; /// "$id": "https://sourcemeta.com/example-schema" /// })JSON"); /// -/// const auto id{sourcemeta::core::identify( -/// document, sourcemeta::core::schema_resolver)}; +/// const auto id{sourcemeta::blaze::identify( +/// document, sourcemeta::blaze::schema_resolver)}; /// assert(!id.empty()); /// assert(id == "https://sourcemeta.com/example-schema"); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto identify(const JSON &schema, const SchemaResolver &resolver, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto identify(const sourcemeta::core::JSON &schema, + const SchemaResolver &resolver, std::string_view default_dialect = "", std::string_view default_id = "", bool allow_dialect_override = true) -> std::string_view; -/// @ingroup jsonschema +/// @ingroup foundation /// -/// A shortcut to sourcemeta::core::identify if you know the base dialect +/// A shortcut to sourcemeta::blaze::identify if you know the base dialect /// of the schema. -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto identify(const JSON &schema, const SchemaBaseDialect base_dialect, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto identify(const sourcemeta::core::JSON &schema, + const SchemaBaseDialect base_dialect, std::string_view default_id = "") -> std::string_view; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function removes the top-level URI identifier of the given schema, if /// any, given you know its base dialect. It is the caller responsibility to @@ -178,7 +187,7 @@ auto identify(const JSON &schema, const SchemaBaseDialect base_dialect, /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// sourcemeta::core::JSON document = @@ -187,24 +196,25 @@ auto identify(const JSON &schema, const SchemaBaseDialect base_dialect, /// "$id": "https://sourcemeta.com/example-schema" /// })JSON"); /// -/// sourcemeta::core::anonymize(document, -/// sourcemeta::core::SchemaBaseDialect::JSON_Schema_2020_12); +/// sourcemeta::blaze::anonymize(document, +/// sourcemeta::blaze::SchemaBaseDialect::JSON_Schema_2020_12); /// -/// const auto id{sourcemeta::core::identify( -/// document, sourcemeta::core::schema_resolver)}; +/// const auto id{sourcemeta::blaze::identify( +/// document, sourcemeta::blaze::schema_resolver)}; /// assert(id.empty()); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto anonymize(JSON &schema, const SchemaBaseDialect base_dialect) -> void; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto anonymize(sourcemeta::core::JSON &schema, + const SchemaBaseDialect base_dialect) -> void; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function sets the identifier of a schema, replacing the existing one, /// if any. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// sourcemeta::core::JSON document = @@ -213,36 +223,36 @@ auto anonymize(JSON &schema, const SchemaBaseDialect base_dialect) -> void; /// "$id": "https://sourcemeta.com/example-schema" /// })JSON"); /// -/// sourcemeta::core::reidentify(document, +/// sourcemeta::blaze::reidentify(document, /// "https://example.com/my-new-id", -/// sourcemeta::core::schema_resolver); +/// sourcemeta::blaze::schema_resolver); /// -/// const auto id{sourcemeta::core::identify( -/// document, sourcemeta::core::schema_resolver)}; +/// const auto id{sourcemeta::blaze::identify( +/// document, sourcemeta::blaze::schema_resolver)}; /// assert(!id.empty()); /// assert(id == "https://example.com/my-new-id"); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto reidentify(JSON &schema, std::string_view new_identifier, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto reidentify(sourcemeta::core::JSON &schema, std::string_view new_identifier, const SchemaResolver &resolver, std::string_view default_dialect = "") -> void; -/// @ingroup jsonschema +/// @ingroup foundation /// -/// A shortcut to sourcemeta::core::reidentify if you know the base +/// A shortcut to sourcemeta::blaze::reidentify if you know the base /// dialect of the schema. -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto reidentify(JSON &schema, std::string_view new_identifier, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto reidentify(sourcemeta::core::JSON &schema, std::string_view new_identifier, const SchemaBaseDialect base_dialect) -> void; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Get the dialect URI that corresponds to a JSON Schema instance. /// The result is empty if the dialect cannot be determined. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -251,21 +261,22 @@ auto reidentify(JSON &schema, std::string_view new_identifier, /// "type": "object" /// })JSON"); /// -/// const auto dialect{sourcemeta::core::dialect(document)}; +/// const auto dialect{sourcemeta::blaze::dialect(document)}; /// assert(!dialect.empty()); /// assert(dialect == "https://json-schema.org/draft/2020-12/schema"); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto dialect(const JSON &schema, std::string_view default_dialect = "", +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto dialect(const sourcemeta::core::JSON &schema, + std::string_view default_dialect = "", bool allow_dialect_override = true) -> std::string_view; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Get the metaschema document that describes the given schema. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -275,19 +286,21 @@ auto dialect(const JSON &schema, std::string_view default_dialect = "", /// })JSON"); /// /// const sourcemeta::core::JSON metaschema{ -/// sourcemeta::core::metaschema( -/// document, sourcemeta::core::schema_resolver)}; +/// sourcemeta::blaze::metaschema( +/// document, sourcemeta::blaze::schema_resolver)}; /// /// sourcemeta::core::prettify(metaschema, std::cout); /// std::cout << std::endl; /// ``` /// /// This function will throw if the metaschema cannot be determined or resolved. -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto metaschema(const JSON &schema, const SchemaResolver &resolver, - std::string_view default_dialect = "") -> JSON; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto metaschema(const sourcemeta::core::JSON &schema, + const SchemaResolver &resolver, + std::string_view default_dialect = "") + -> sourcemeta::core::JSON; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Get the base dialect that applies to the given schema. If you set /// a default dialect URI, this will be used if the given schema does not @@ -295,7 +308,7 @@ auto metaschema(const JSON &schema, const SchemaResolver &resolver, /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -305,26 +318,27 @@ auto metaschema(const JSON &schema, const SchemaResolver &resolver, /// })JSON"); /// /// const auto base_dialect{ -/// sourcemeta::core::base_dialect( -/// document, sourcemeta::core::schema_resolver)}; +/// sourcemeta::blaze::base_dialect( +/// document, sourcemeta::blaze::schema_resolver)}; /// /// assert(base_dialect.has_value()); /// assert(base_dialect.value() == -/// sourcemeta::core::SchemaBaseDialect::JSON_Schema_2020_12); +/// sourcemeta::blaze::SchemaBaseDialect::JSON_Schema_2020_12); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto base_dialect(const JSON &schema, const SchemaResolver &resolver, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto base_dialect(const sourcemeta::core::JSON &schema, + const SchemaResolver &resolver, std::string_view default_dialect = "", bool allow_dialect_override = true) -> std::optional; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Parse the `$vocabulary` keyword from a given schema, if set. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -337,27 +351,28 @@ auto base_dialect(const JSON &schema, const SchemaResolver &resolver, /// })JSON"); /// /// const auto result{ -/// sourcemeta::core::parse_vocabularies( -/// document, sourcemeta::core::schema_resolver)}; +/// sourcemeta::blaze::parse_vocabularies( +/// document, sourcemeta::blaze::schema_resolver)}; /// /// assert(result.has_value()); /// assert(result->size() == 2); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto parse_vocabularies(const JSON &schema, const SchemaResolver &resolver, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto parse_vocabularies(const sourcemeta::core::JSON &schema, + const SchemaResolver &resolver, std::string_view default_dialect = "") -> std::optional; -/// @ingroup jsonschema +/// @ingroup foundation /// -/// A shortcut to sourcemeta::core::parse_vocabularies when the base dialect +/// A shortcut to sourcemeta::blaze::parse_vocabularies when the base dialect /// is already known. -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto parse_vocabularies(const JSON &schema, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto parse_vocabularies(const sourcemeta::core::JSON &schema, const SchemaBaseDialect base_dialect) -> std::optional; -/// @ingroup jsonschema +/// @ingroup foundation /// /// List the vocabularies that a specific schema makes use of. If you set a /// default dialect URI, this will be used if the given schema does not @@ -368,7 +383,7 @@ auto parse_vocabularies(const JSON &schema, /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -378,8 +393,8 @@ auto parse_vocabularies(const JSON &schema, /// })JSON"); /// /// const auto vocabularies{ -/// sourcemeta::core::vocabularies( -/// document, sourcemeta::core::schema_resolver)}; +/// sourcemeta::blaze::vocabularies( +/// document, sourcemeta::blaze::schema_resolver)}; /// /// assert(vocabularies.at("https://json-schema.org/draft/2020-12/vocab/core")); /// assert(vocabularies.at("https://json-schema.org/draft/2020-12/vocab/applicator")); @@ -389,20 +404,21 @@ auto parse_vocabularies(const JSON &schema, /// assert(vocabularies.at("https://json-schema.org/draft/2020-12/vocab/format-annotation")); /// assert(vocabularies.at("https://json-schema.org/draft/2020-12/vocab/content")); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto vocabularies(const JSON &schema, const SchemaResolver &resolver, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto vocabularies(const sourcemeta::core::JSON &schema, + const SchemaResolver &resolver, std::string_view default_dialect = "") -> Vocabularies; -/// @ingroup jsonschema +/// @ingroup foundation /// -/// A shortcut to sourcemeta::core::vocabularies based on the base +/// A shortcut to sourcemeta::blaze::vocabularies based on the base /// dialect and dialect URI. -SOURCEMETA_CORE_JSONSCHEMA_EXPORT +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto vocabularies(const SchemaResolver &resolver, const SchemaBaseDialect base_dialect, std::string_view dialect) -> Vocabularies; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Format a JSON Schema document by reordering all object properties throughout /// the entire document according to an opinionated JSON Schema aware ordering. @@ -410,25 +426,25 @@ auto vocabularies(const SchemaResolver &resolver, /// /// ```cpp /// #include -/// #include +/// #include /// #include /// #include /// /// sourcemeta::core::JSON schema = /// sourcemeta::core::parse_json( /// "{ \"type\": \"string\", \"minLength\": 3 }"); -/// sourcemeta::core::format(schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); +/// sourcemeta::blaze::format(schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); /// std::ostringstream stream; /// sourcemeta::core::prettify(schema, stream); /// std::cout << stream.str() << std::endl; /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto format(JSON &schema, const SchemaWalker &walker, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto format(sourcemeta::core::JSON &schema, const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect = "") -> void; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Given a schema identifier, this function creates a JSON Schema wrapper that /// references such schema. This is useful when trying to validate an instance @@ -438,19 +454,19 @@ auto format(JSON &schema, const SchemaWalker &walker, /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON result = -/// sourcemeta::core::wrap("https://www.example.com#/foo/bar"); +/// sourcemeta::blaze::wrap("https://www.example.com#/foo/bar"); /// /// sourcemeta::core::prettify(result, std::cerr); /// std::cerr << "\n"; /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto wrap(std::string_view identifier) -> JSON; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto wrap(std::string_view identifier) -> sourcemeta::core::JSON; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Wrap a schema to only access one of its subschemas. This is useful if you /// want to perform validation on only a specific part of the schema without @@ -458,7 +474,7 @@ auto wrap(std::string_view identifier) -> JSON; /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -467,48 +483,49 @@ auto wrap(std::string_view identifier) -> JSON; /// "items": { "type": "string" } /// })JSON"); /// -/// sourcemeta::core::SchemaFrame frame{ -/// sourcemeta::core::SchemaFrame::Mode::References}; -/// frame.analyse(document, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); +/// sourcemeta::blaze::SchemaFrame frame{ +/// sourcemeta::blaze::SchemaFrame::Mode::References}; +/// frame.analyse(document, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); /// /// const auto location{frame.traverse( /// sourcemeta::core::WeakPointer{"items"}, -/// sourcemeta::core::SchemaFrame::LocationType::Subschema)}; +/// sourcemeta::blaze::SchemaFrame::LocationType::Subschema)}; /// /// sourcemeta::core::WeakPointer base; /// const sourcemeta::core::JSON result = -/// sourcemeta::core::wrap(document, frame, location.value().get(), -/// sourcemeta::core::schema_resolver, base); +/// sourcemeta::blaze::wrap(document, frame, location.value().get(), +/// sourcemeta::blaze::schema_resolver, base); /// /// sourcemeta::core::prettify(result, std::cerr); /// std::cerr << "\n"; /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto wrap(const JSON &schema, const SchemaFrame &frame, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto wrap(const sourcemeta::core::JSON &schema, const SchemaFrame &frame, const SchemaFrame::Location &location, const SchemaResolver &resolver, - WeakPointer &base) -> JSON; + sourcemeta::core::WeakPointer &base) -> sourcemeta::core::JSON; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Parse the value of a JSON Schema `type` keyword (which can be a string or /// an array of strings) into a set of native JSON types. For example: /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const auto type{sourcemeta::core::parse_json(R"JSON([ "string", "null" -/// ])JSON")}; const auto types{sourcemeta::core::parse_schema_type(type)}; +/// ])JSON")}; const auto types{sourcemeta::blaze::parse_schema_type(type)}; /// assert(types.test( /// static_cast(sourcemeta::core::JSON::Type::String))); /// assert(types.test( /// static_cast(sourcemeta::core::JSON::Type::Null))); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto parse_schema_type(const JSON &type) -> JSON::TypeSet; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto parse_schema_type(const sourcemeta::core::JSON &type) + -> sourcemeta::core::JSON::TypeSet; -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_bundle.h similarity index 68% rename from vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h rename to vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_bundle.h index 18f4fe645..b439736e0 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h +++ b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_bundle.h @@ -1,40 +1,41 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_BUNDLE_H -#define SOURCEMETA_CORE_JSONSCHEMA_BUNDLE_H +#ifndef SOURCEMETA_BLAZE_FOUNDATION_BUNDLE_H +#define SOURCEMETA_BLAZE_FOUNDATION_BUNDLE_H -#ifndef SOURCEMETA_CORE_JSONSCHEMA_EXPORT -#include +#ifndef SOURCEMETA_BLAZE_FOUNDATION_EXPORT +#include #endif #include #include // NOLINTBEGIN(misc-include-cleaner) -#include -#include +#include +#include // NOLINTEND(misc-include-cleaner) #include // std::function #include // std::string_view -namespace sourcemeta::core { +namespace sourcemeta::blaze { -/// @ingroup jsonschema +/// @ingroup foundation /// A callback to get dependency information /// - Origin URI (empty if none) /// - Pointer (reference keyword from the origin) /// - Target URI /// - Target schema -using DependencyCallback = std::function; +using DependencyCallback = + std::function; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function recursively traverses and reports the external references in a /// schema. For example: /// /// ```cpp /// #include -/// #include +/// #include /// /// // A custom resolver that knows about an additional schema /// static auto test_resolver(std::string_view identifier) @@ -46,7 +47,7 @@ using DependencyCallback = std::function void; + const SchemaFrame::Paths &paths = { + sourcemeta::core::empty_weak_pointer}) -> void; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function bundles a JSON Schema (starting from Draft 4) by embedding /// every remote reference into the top level schema resource, handling circular @@ -82,7 +83,7 @@ auto dependencies(const JSON &schema, const SchemaWalker &walker, /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// // A custom resolver that knows about an additional schema @@ -95,7 +96,7 @@ auto dependencies(const JSON &schema, const SchemaWalker &walker, /// "type": "string" /// })JSON"); /// } else { -/// return sourcemeta::core::schema_resolver(identifier); +/// return sourcemeta::blaze::schema_resolver(identifier); /// } /// } /// @@ -105,8 +106,8 @@ auto dependencies(const JSON &schema, const SchemaWalker &walker, /// "items": { "$ref": "https://www.example.com/test" } /// })JSON"); /// -/// sourcemeta::core::bundle(document, -/// sourcemeta::core::schema_walker, test_resolver); +/// sourcemeta::blaze::bundle(document, +/// sourcemeta::blaze::schema_walker, test_resolver); /// /// const sourcemeta::core::JSON expected = /// sourcemeta::core::parse_json(R"JSON({ @@ -123,15 +124,17 @@ auto dependencies(const JSON &schema, const SchemaWalker &walker, /// /// assert(document == expected); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto bundle(JSON &schema, const SchemaWalker &walker, +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto bundle(sourcemeta::core::JSON &schema, const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect = "", std::string_view default_id = "", - const std::optional &default_container = std::nullopt, - const SchemaFrame::Paths &paths = {empty_weak_pointer}) -> void; + const std::optional &default_container = + std::nullopt, + const SchemaFrame::Paths &paths = { + sourcemeta::core::empty_weak_pointer}) -> void; -/// @ingroup jsonschema +/// @ingroup foundation /// /// This function bundles a JSON Schema (starting from Draft 4) by embedding /// every remote reference into the top level schema resource, handling circular @@ -140,7 +143,7 @@ auto bundle(JSON &schema, const SchemaWalker &walker, /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// // A custom resolver that knows about an additional schema @@ -153,7 +156,7 @@ auto bundle(JSON &schema, const SchemaWalker &walker, /// "type": "string" /// })JSON"); /// } else { -/// return sourcemeta::core::schema_resolver(identifier); +/// return sourcemeta::blaze::schema_resolver(identifier); /// } /// } /// @@ -164,8 +167,8 @@ auto bundle(JSON &schema, const SchemaWalker &walker, /// })JSON"); /// /// const sourcemeta::core::JSON result = -/// sourcemeta::core::bundle(document, -/// sourcemeta::core::schema_walker, test_resolver); +/// sourcemeta::blaze::bundle(document, +/// sourcemeta::blaze::schema_walker, test_resolver); /// /// const sourcemeta::core::JSON expected = /// sourcemeta::core::parse_json(R"JSON({ @@ -182,14 +185,16 @@ auto bundle(JSON &schema, const SchemaWalker &walker, /// /// assert(result == expected); /// ``` -SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto bundle(const JSON &schema, const SchemaWalker &walker, - const SchemaResolver &resolver, - std::string_view default_dialect = "", - std::string_view default_id = "", - const std::optional &default_container = std::nullopt, - const SchemaFrame::Paths &paths = {empty_weak_pointer}) -> JSON; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT +auto bundle( + const sourcemeta::core::JSON &schema, const SchemaWalker &walker, + const SchemaResolver &resolver, std::string_view default_dialect = "", + std::string_view default_id = "", + const std::optional &default_container = + std::nullopt, + const SchemaFrame::Paths &paths = {sourcemeta::core::empty_weak_pointer}) + -> sourcemeta::core::JSON; -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_error.h b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_error.h similarity index 77% rename from vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_error.h rename to vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_error.h index 6dd586c16..9a3283211 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_error.h +++ b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_error.h @@ -1,8 +1,8 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_ERROR_H -#define SOURCEMETA_CORE_JSONSCHEMA_ERROR_H +#ifndef SOURCEMETA_BLAZE_FOUNDATION_ERROR_H +#define SOURCEMETA_BLAZE_FOUNDATION_ERROR_H -#ifndef SOURCEMETA_CORE_JSONSCHEMA_EXPORT -#include +#ifndef SOURCEMETA_BLAZE_FOUNDATION_EXPORT +#include #endif #include @@ -11,7 +11,7 @@ #include // std::string #include // std::string_view -namespace sourcemeta::core { +namespace sourcemeta::blaze { // Exporting symbols that depends on the standard C++ library is considered // safe. @@ -20,9 +20,9 @@ namespace sourcemeta::core { #pragma warning(disable : 4251 4275) #endif -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a general schema error event -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaError : public std::exception { +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaError : public std::exception { public: SchemaError(const char *message) : message_{message} {} SchemaError(std::string message) = delete; @@ -37,9 +37,9 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaError : public std::exception { const char *message_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a schema resolution failure event -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaResolutionError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaResolutionError : public std::exception { public: SchemaResolutionError(const std::string_view identifier, const char *message) @@ -58,11 +58,11 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaResolutionError const char *message_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a relative meta-schema resolution failure event /// Relative references to meta-schemas are invalid as per the specification /// See https://json-schema.org/draft/2020-12/json-schema-core#section-8.1.1-2 -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaRelativeMetaschemaResolutionError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaRelativeMetaschemaResolutionError : public SchemaResolutionError { public: SchemaRelativeMetaschemaResolutionError(const std::string_view identifier) @@ -71,9 +71,9 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaRelativeMetaschemaResolutionError "according to the JSON Schema specification"} {} }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a schema vocabulary error -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaVocabularyError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaVocabularyError : public std::exception { public: SchemaVocabularyError(const std::string_view uri, const char *message) @@ -92,13 +92,14 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaVocabularyError const char *message_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a schema resolution failure event -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaReferenceError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaReferenceError : public std::exception { public: SchemaReferenceError(const std::string_view identifier, - Pointer schema_location, const char *message) + sourcemeta::core::Pointer schema_location, + const char *message) : identifier_{identifier}, schema_location_{std::move(schema_location)}, message_{message} {} @@ -110,19 +111,20 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaReferenceError return this->identifier_; } - [[nodiscard]] auto location() const noexcept -> const Pointer & { + [[nodiscard]] auto location() const noexcept + -> const sourcemeta::core::Pointer & { return this->schema_location_; } private: std::string identifier_; - Pointer schema_location_; + sourcemeta::core::Pointer schema_location_; const char *message_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents that the dialect of the schema could not determined -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaUnknownDialectError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaUnknownDialectError : public std::exception { public: SchemaUnknownDialectError() = default; @@ -132,10 +134,10 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaUnknownDialectError } }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents that the base dialect of the schema could not /// determined -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaUnknownBaseDialectError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaUnknownBaseDialectError : public std::exception { public: SchemaUnknownBaseDialectError() = default; @@ -145,10 +147,10 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaUnknownBaseDialectError } }; -/// @ingroup jsonschema +/// @ingroup foundation /// In JSON Schema Draft 7 and older, a schema that defines `$ref` is a /// reference object where every other keywords are ignored -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaReferenceObjectResourceError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaReferenceObjectResourceError : public std::exception { public: SchemaReferenceObjectResourceError(const std::string_view identifier) @@ -169,9 +171,9 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaReferenceObjectResourceError std::string identifier_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents an unrecognized base dialect -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaBaseDialectError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaBaseDialectError : public std::exception { public: SchemaBaseDialectError(const std::string_view base_dialect) @@ -189,9 +191,9 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaBaseDialectError std::string base_dialect_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a schema keyword error -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaKeywordError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaKeywordError : public std::exception { public: SchemaKeywordError(const std::string_view keyword, @@ -216,9 +218,9 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaKeywordError const char *message_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a schema frame error -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrameError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaFrameError : public std::exception { public: SchemaFrameError(const std::string_view identifier, const char *message) @@ -237,13 +239,14 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrameError const char *message_; }; -/// @ingroup jsonschema +/// @ingroup foundation /// An error that represents a schema anchor collision error -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaAnchorCollisionError +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaAnchorCollisionError : public std::exception { public: SchemaAnchorCollisionError(const std::string_view identifier, - Pointer location, Pointer other) + sourcemeta::core::Pointer location, + sourcemeta::core::Pointer other) : identifier_{identifier}, location_(std::move(location)), other_(std::move(other)) {} @@ -255,24 +258,26 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaAnchorCollisionError return this->identifier_; } - [[nodiscard]] auto location() const noexcept -> const Pointer & { + [[nodiscard]] auto location() const noexcept + -> const sourcemeta::core::Pointer & { return this->location_; } - [[nodiscard]] auto other() const noexcept -> const Pointer & { + [[nodiscard]] auto other() const noexcept + -> const sourcemeta::core::Pointer & { return this->other_; } private: std::string identifier_; - Pointer location_; - Pointer other_; + sourcemeta::core::Pointer location_; + sourcemeta::core::Pointer other_; }; #if defined(_MSC_VER) #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_frame.h similarity index 68% rename from vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h rename to vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_frame.h index cbc85e378..dbfdb4e5f 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h +++ b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_frame.h @@ -1,15 +1,15 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_FRAME_H_ -#define SOURCEMETA_CORE_JSONSCHEMA_FRAME_H_ +#ifndef SOURCEMETA_BLAZE_FOUNDATION_FRAME_H_ +#define SOURCEMETA_BLAZE_FOUNDATION_FRAME_H_ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_EXPORT -#include +#ifndef SOURCEMETA_BLAZE_FOUNDATION_EXPORT +#include #endif #include #include -#include -#include +#include +#include #include // std::invocable #include // std::uint8_t @@ -23,9 +23,9 @@ #include // std::pair #include // std::vector -namespace sourcemeta::core { +namespace sourcemeta::blaze { -/// @ingroup jsonschema +/// @ingroup foundation /// /// This class performs a static analysis pass on the input schema, computing /// things such as the static identifiers and references of a schema. @@ -34,7 +34,7 @@ namespace sourcemeta::core { /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -48,14 +48,14 @@ namespace sourcemeta::core { /// } /// })JSON"); /// -/// sourcemeta::core::SchemaFrame -/// frame{sourcemeta::core::SchemaFrame::Mode::References}; +/// sourcemeta::blaze::SchemaFrame +/// frame{sourcemeta::blaze::SchemaFrame::Mode::References}; /// /// frame.analyse(document, -/// sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver); +/// sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver); /// ``` -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaFrame { public: /// The mode of framing. More extensive analysis can be compute and memory /// intensive @@ -77,7 +77,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { std::string_view original; // TODO: This one is tricky to turn into a view, as there is no // location entry to point to if it is an external unresolved reference - JSON::String destination; + sourcemeta::core::JSON::String destination; // Empty means no base std::string_view base; std::optional fragment; @@ -91,7 +91,8 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { /// have a static and a dynamic reference to the same location /// on the same schema object. using References = - std::map, ReferencesEntry>; + std::map, + ReferencesEntry>; #if defined(__GNUC__) #pragma GCC diagnostic push @@ -99,7 +100,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { // definition), can shadow an alias defined even on a different namespace. #pragma GCC diagnostic ignored "-Wshadow" #endif - /// @ingroup jsonschema + /// @ingroup foundation /// The type of a location frame enum class LocationType : std::uint8_t { Resource, @@ -114,10 +115,10 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { /// A location entry struct Location { - std::optional parent; + std::optional parent; LocationType type; std::string_view base; - WeakPointer pointer; + sourcemeta::core::WeakPointer pointer; std::size_t relative_pointer; std::string_view dialect; SchemaBaseDialect base_dialect; @@ -136,23 +137,25 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { // from `$recursiveRef: true` on another place of the schema schema // resource, as otherwise they would both have the exact same URI, but // point to different places. - std::map, Location>; + std::map, + Location>; /// A list of paths to frame within a schema wrapper - using Paths = std::vector; + using Paths = std::vector; /// Export the frame entries as JSON [[nodiscard]] auto to_json( - const std::optional &tracker = std::nullopt) const - -> JSON; + const std::optional &tracker = + std::nullopt) const -> sourcemeta::core::JSON; /// Analyse a schema or set of schemas from a given root. Passing /// multiple paths that have any overlap is undefined behaviour - auto analyse(const JSON &root, const SchemaWalker &walker, + auto analyse(const sourcemeta::core::JSON &root, const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect = "", std::string_view default_id = "", - const Paths &paths = {empty_weak_pointer}) -> void; + const Paths &paths = {sourcemeta::core::empty_weak_pointer}) + -> void; /// Access the analysed schema locations [[nodiscard]] auto locations() const noexcept -> const Locations &; @@ -161,15 +164,17 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { [[nodiscard]] auto references() const noexcept -> const References &; /// Get a specific reference entry by type and pointer - [[nodiscard]] auto reference(const SchemaReferenceType type, - const WeakPointer &pointer) const + [[nodiscard]] auto + reference(const SchemaReferenceType type, + const sourcemeta::core::WeakPointer &pointer) const -> std::optional>; /// Check whether the analysed schema has no external references [[nodiscard]] auto standalone() const noexcept -> bool; /// Get the root schema identifier (empty if none) - [[nodiscard]] auto root() const noexcept -> const JSON::String &; + [[nodiscard]] auto root() const noexcept + -> const sourcemeta::core::JSON::String &; /// Get the vocabularies associated with a location entry [[nodiscard]] auto vocabularies(const Location &location, @@ -179,12 +184,14 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { /// Get the URI associated with a location entry [[nodiscard]] auto uri(const Location &location, - const WeakPointer &relative_schema_location = empty_weak_pointer) const - -> JSON::String; + const sourcemeta::core::WeakPointer &relative_schema_location = + sourcemeta::core::empty_weak_pointer) const + -> sourcemeta::core::JSON::String; /// Get the location associated by traversing a pointer from another location - [[nodiscard]] auto traverse(const Location &location, - const WeakPointer &relative_schema_location) const + [[nodiscard]] auto + traverse(const Location &location, + const sourcemeta::core::WeakPointer &relative_schema_location) const -> const Location &; /// Get the location associated with a given URI @@ -192,22 +199,25 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { -> std::optional>; /// Get the location associated with a given pointer - [[nodiscard]] auto traverse(const WeakPointer &pointer) const + [[nodiscard]] auto + traverse(const sourcemeta::core::WeakPointer &pointer) const -> std::optional>; /// Get the location of a specific type associated with a given pointer - [[nodiscard]] auto traverse(const WeakPointer &pointer, + [[nodiscard]] auto traverse(const sourcemeta::core::WeakPointer &pointer, const LocationType type) const -> std::optional>; /// Turn an absolute pointer into a location URI - [[nodiscard]] auto uri(const WeakPointer &pointer) const - -> std::optional>; + [[nodiscard]] auto uri(const sourcemeta::core::WeakPointer &pointer) const + -> std::optional< + std::reference_wrapper>; /// Try to dereference a reference location into its destination location - [[nodiscard]] auto dereference( - const Location &location, - const WeakPointer &relative_schema_location = empty_weak_pointer) const + [[nodiscard]] auto + dereference(const Location &location, + const sourcemeta::core::WeakPointer &relative_schema_location = + sourcemeta::core::empty_weak_pointer) const -> std::pair>>; @@ -223,7 +233,9 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { /// Iterate over all unresolved references (where destination cannot be /// traversed) - template F> + template + F> auto for_each_unresolved_reference(const F &callback) const -> void { for (const auto &[key, reference] : this->references_) { if (!this->traverse(reference.destination).has_value()) { @@ -233,21 +245,23 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { } /// Check if there are any references to a given location pointer - [[nodiscard]] auto has_references_to(const WeakPointer &pointer) const - -> bool; + [[nodiscard]] auto + has_references_to(const sourcemeta::core::WeakPointer &pointer) const -> bool; /// Check if there are any references that go through a given location pointer - [[nodiscard]] auto has_references_through(const WeakPointer &pointer) const + [[nodiscard]] auto + has_references_through(const sourcemeta::core::WeakPointer &pointer) const -> bool; /// Check if there are any references that go through a given location pointer /// with a tail token [[nodiscard]] auto - has_references_through(const WeakPointer &pointer, - const WeakPointer::Token &tail) const -> bool; + has_references_through(const sourcemeta::core::WeakPointer &pointer, + const sourcemeta::core::WeakPointer::Token &tail) const + -> bool; /// Get the relative instance location pointer for a given location entry [[nodiscard]] auto relative_instance_location(const Location &location) const - -> WeakPointer; + -> sourcemeta::core::WeakPointer; /// Check if the frame has no analysed data [[nodiscard]] auto empty() const noexcept -> bool; @@ -269,19 +283,23 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { #if defined(_MSC_VER) #pragma warning(disable : 4251 4275) #endif - JSON::String root_; + sourcemeta::core::JSON::String root_; Locations locations_; References references_; - mutable std::unordered_map, - std::vector, WeakPointer::Hasher, - WeakPointer::Comparator> + mutable std::unordered_map< + std::reference_wrapper, + std::vector, sourcemeta::core::WeakPointer::Hasher, + sourcemeta::core::WeakPointer::Comparator> pointer_to_location_; - mutable std::unordered_set, - WeakPointer::Hasher, WeakPointer::Comparator> + mutable std::unordered_set< + std::reference_wrapper, + sourcemeta::core::WeakPointer::Hasher, + sourcemeta::core::WeakPointer::Comparator> pointers_with_non_orphan_; - using ReachabilityCache = std::unordered_map; + using ReachabilityCache = + std::unordered_map; struct ReachabilityKey { - const WeakPointer *pointer; + const sourcemeta::core::WeakPointer *pointer; bool orphan; auto operator==(const ReachabilityKey &other) const noexcept -> bool { return this->pointer == other.pointer && this->orphan == other.orphan; @@ -296,20 +314,25 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { mutable std::unordered_map reachability_; - mutable std::unordered_map, - std::vector, - WeakPointer::Hasher, WeakPointer::Comparator> + mutable std::unordered_map< + std::reference_wrapper, + std::vector, + sourcemeta::core::WeakPointer::Hasher, + sourcemeta::core::WeakPointer::Comparator> references_by_destination_; - mutable std::unordered_set, - WeakPointer::Hasher, WeakPointer::Comparator> + mutable std::unordered_set< + std::reference_wrapper, + sourcemeta::core::WeakPointer::Hasher, + sourcemeta::core::WeakPointer::Comparator> location_members_children_; - mutable std::unordered_map, - std::vector, WeakPointer::Hasher, - WeakPointer::Comparator> + mutable std::unordered_map< + std::reference_wrapper, + std::vector, sourcemeta::core::WeakPointer::Hasher, + sourcemeta::core::WeakPointer::Comparator> descendants_by_pointer_; struct PotentialSource { - const WeakPointer *source_pointer; - WeakPointer source_parent; + const sourcemeta::core::WeakPointer *source_pointer; + sourcemeta::core::WeakPointer source_parent; bool crosses; }; mutable std::unordered_map> @@ -321,11 +344,14 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { }; mutable std::unordered_map> reachability_graph_; - mutable std::unordered_map, - const WeakPointer *, WeakPointer::Hasher, - WeakPointer::Comparator> + mutable std::unordered_map< + std::reference_wrapper, + const sourcemeta::core::WeakPointer *, + sourcemeta::core::WeakPointer::Hasher, + sourcemeta::core::WeakPointer::Comparator> canonical_pointer_; - mutable std::unordered_map + mutable std::unordered_map location_to_canonical_; bool standalone_{false}; @@ -347,6 +373,6 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaFrame { #endif }; -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_types.h b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_types.h similarity index 91% rename from vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_types.h rename to vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_types.h index 30f0ddfcc..d2d586cc1 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_types.h +++ b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_types.h @@ -1,9 +1,9 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_TYPES_H_ -#define SOURCEMETA_CORE_JSONSCHEMA_TYPES_H_ +#ifndef SOURCEMETA_BLAZE_FOUNDATION_TYPES_H_ +#define SOURCEMETA_BLAZE_FOUNDATION_TYPES_H_ +#include #include #include -#include #include // std::uint8_t #include // std::function, std::reference_wrapper @@ -12,30 +12,31 @@ #include // std::string_view #include // std::unordered_set -namespace sourcemeta::core { +namespace sourcemeta::blaze { // Take a URI and get back a schema -/// @ingroup jsonschema +/// @ingroup foundation /// /// Some functions need to reference other schemas by their URIs. To accomplish /// this in a generic and flexible way, these functions take resolver functions -/// as arguments, of the type sourcemeta::core::SchemaResolver. +/// as arguments, of the type sourcemeta::blaze::SchemaResolver. /// /// For convenience, we provide the following default resolvers: /// -/// - sourcemeta::core::schema_resolver +/// - sourcemeta::blaze::schema_resolver /// /// You can implement resolvers to read from a local storage, to send HTTP /// requests, or anything your application might require. Unless your resolver /// is trivial, it is recommended to create a callable object that implements /// the function interface. -using SchemaResolver = std::function(std::string_view)>; +using SchemaResolver = + std::function(std::string_view)>; -/// @ingroup jsonschema +/// @ingroup foundation /// The reference type enum class SchemaReferenceType : std::uint8_t { Static, Dynamic }; -/// @ingroup jsonschema +/// @ingroup foundation /// All the known JSON Schema base dialects enum class SchemaBaseDialect : std::uint8_t { JSON_Schema_2020_12, @@ -62,7 +63,7 @@ enum class SchemaBaseDialect : std::uint8_t { // alias defined even on a different namespace. #pragma GCC diagnostic ignored "-Wshadow" #endif -/// @ingroup jsonschema +/// @ingroup foundation /// Determines the type of a JSON Schema keyword enum class SchemaKeywordType : std::uint8_t { /// The JSON Schema keyword is unknown @@ -171,7 +172,7 @@ enum class SchemaKeywordType : std::uint8_t { #pragma GCC diagnostic pop #endif -/// @ingroup jsonschema +/// @ingroup foundation /// A structure that encapsulates the result of walker over a specific keyword struct SchemaWalkerResult { /// The walker strategy to continue traversing across the schema @@ -185,7 +186,7 @@ struct SchemaWalkerResult { /// only (not semantic dependencies) std::unordered_set order_dependencies; /// The JSON instance types that this keyword applies to (empty means all) - JSON::TypeSet instances; + sourcemeta::core::JSON::TypeSet instances; // Prevent accidental copies, as walker results are always returned by // reference @@ -199,14 +200,14 @@ struct SchemaWalkerResult { std::optional vocabulary_, std::unordered_set dependencies_, std::unordered_set order_dependencies_, - JSON::TypeSet instances_) + sourcemeta::core::JSON::TypeSet instances_) : type{type_}, vocabulary{std::move(vocabulary_)}, dependencies{std::move(dependencies_)}, order_dependencies{std::move(order_dependencies_)}, instances{instances_} {} }; -/// @ingroup jsonschema +/// @ingroup foundation /// /// For walking purposes, some functions need to understand which JSON Schema /// keywords declare other JSON Schema definitions. To accomplish this in a @@ -215,20 +216,20 @@ struct SchemaWalkerResult { using SchemaWalker = std::function; -/// @ingroup jsonschema +/// @ingroup foundation /// An entry of a schema iterator. struct SchemaIteratorEntry { - std::optional parent; - WeakPointer pointer; + std::optional parent; + sourcemeta::core::WeakPointer pointer; // TODO: Use "known" enum classes + strings for dialects std::string_view dialect; Vocabularies vocabularies; std::optional base_dialect; - std::reference_wrapper subschema; + std::reference_wrapper subschema; bool orphan; bool property_name; }; -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_vocabularies.h b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_vocabularies.h similarity index 80% rename from vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_vocabularies.h rename to vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_vocabularies.h index 345d1213f..9139299aa 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_vocabularies.h +++ b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_vocabularies.h @@ -1,8 +1,8 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_VOCABULARIES_H_ -#define SOURCEMETA_CORE_JSONSCHEMA_VOCABULARIES_H_ +#ifndef SOURCEMETA_BLAZE_FOUNDATION_VOCABULARIES_H_ +#define SOURCEMETA_BLAZE_FOUNDATION_VOCABULARIES_H_ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_EXPORT -#include +#ifndef SOURCEMETA_BLAZE_FOUNDATION_EXPORT +#include #endif #include @@ -22,12 +22,12 @@ #include // std::variant #include // std::vector -namespace sourcemeta::core { +namespace sourcemeta::blaze { -/// @ingroup jsonschema +/// @ingroup foundation /// Optimized vocabulary set using bitflags for known vocabularies /// and a fallback `std::unordered_map` for custom vocabularies. -struct SOURCEMETA_CORE_JSONSCHEMA_EXPORT Vocabularies { +struct SOURCEMETA_BLAZE_FOUNDATION_EXPORT Vocabularies { enum class Known : std::uint8_t { // Pre-vocabulary dialects (treated as vocabularies) JSON_Schema_Draft_0 = 0, @@ -73,7 +73,7 @@ struct SOURCEMETA_CORE_JSONSCHEMA_EXPORT Vocabularies { /// A vocabulary URI type that can be either a known vocabulary enum or a /// custom string URI - using URI = std::variant; + using URI = std::variant; public: Vocabularies() = default; @@ -84,13 +84,16 @@ struct SOURCEMETA_CORE_JSONSCHEMA_EXPORT Vocabularies { ~Vocabularies() = default; /// Construct from initializer list - Vocabularies(std::initializer_list> init); + Vocabularies( + std::initializer_list> + init); /// Construct from initializer list using known vocabulary enums Vocabularies(std::initializer_list> init); /// Check if a vocabulary is enabled - [[nodiscard]] auto contains(const JSON::String &uri) const noexcept -> bool; + [[nodiscard]] auto + contains(const sourcemeta::core::JSON::String &uri) const noexcept -> bool; /// Check if a known vocabulary is enabled [[nodiscard]] auto contains(Known vocabulary) const noexcept -> bool; @@ -101,13 +104,15 @@ struct SOURCEMETA_CORE_JSONSCHEMA_EXPORT Vocabularies { -> bool; /// Insert a vocabulary with its required/optional status - auto insert(const JSON::String &uri, bool required) noexcept -> void; + auto insert(const sourcemeta::core::JSON::String &uri, bool required) noexcept + -> void; /// Insert a known vocabulary with its required/optional status auto insert(Known vocabulary, bool required) noexcept -> void; /// Get vocabulary status by URI - [[nodiscard]] auto get(const JSON::String &uri) const noexcept + [[nodiscard]] auto + get(const sourcemeta::core::JSON::String &uri) const noexcept -> std::optional; /// Get known vocabulary status @@ -141,39 +146,40 @@ struct SOURCEMETA_CORE_JSONSCHEMA_EXPORT Vocabularies { std::bitset required_known{}; std::bitset optional_known{}; // Lazily initialized only when unknown (non-official) vocabularies are used - std::optional> unknown{std::nullopt}; + std::optional> + unknown{std::nullopt}; #ifdef _MSC_VER #pragma warning(pop) #endif }; /// Convert a known vocabulary enum to its URI string -SOURCEMETA_CORE_JSONSCHEMA_EXPORT auto +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto operator<<(std::ostream &stream, Vocabularies::Known vocabulary) -> std::ostream &; /// Convert a vocabulary URI to its string representation -SOURCEMETA_CORE_JSONSCHEMA_EXPORT auto +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto operator<<(std::ostream &stream, const Vocabularies::URI &vocabulary) -> std::ostream &; /// Stringify a known vocabulary to a string -SOURCEMETA_CORE_JSONSCHEMA_EXPORT auto to_string(Vocabularies::Known vocabulary) - -> std::string_view; +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto +to_string(Vocabularies::Known vocabulary) -> std::string_view; /// Stringify a vocabulary URI to a string -SOURCEMETA_CORE_JSONSCHEMA_EXPORT auto +SOURCEMETA_BLAZE_FOUNDATION_EXPORT auto to_string(const Vocabularies::URI &vocabulary) -> std::string_view; -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze -template <> struct std::formatter { +template <> struct std::formatter { constexpr auto parse(std::format_parse_context &context) -> decltype(context.begin()) { return context.begin(); } - auto format(const sourcemeta::core::Vocabularies::Known value, + auto format(const sourcemeta::blaze::Vocabularies::Known value, std::format_context &context) const -> decltype(context.out()) { std::ostringstream stream; stream << value; @@ -181,13 +187,13 @@ template <> struct std::formatter { } }; -template <> struct std::formatter { +template <> struct std::formatter { constexpr auto parse(std::format_parse_context &context) -> decltype(context.begin()) { return context.begin(); } - auto format(const sourcemeta::core::Vocabularies::URI &value, + auto format(const sourcemeta::blaze::Vocabularies::URI &value, std::format_context &context) const -> decltype(context.out()) { std::ostringstream stream; stream << value; diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_walker.h similarity index 77% rename from vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h rename to vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_walker.h index 7c039ed2d..4ac40dd64 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h +++ b/vendor/blaze/src/foundation/include/sourcemeta/blaze/foundation_walker.h @@ -1,22 +1,22 @@ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_WALKER_H_ -#define SOURCEMETA_CORE_JSONSCHEMA_WALKER_H_ +#ifndef SOURCEMETA_BLAZE_FOUNDATION_WALKER_H_ +#define SOURCEMETA_BLAZE_FOUNDATION_WALKER_H_ -#ifndef SOURCEMETA_CORE_JSONSCHEMA_EXPORT -#include +#ifndef SOURCEMETA_BLAZE_FOUNDATION_EXPORT +#include #endif #include -#include +#include #include // std::uint64_t #include // std::optional #include // std::string_view #include // std::vector -namespace sourcemeta::core { +namespace sourcemeta::blaze { -/// @ingroup jsonschema +/// @ingroup foundation /// /// Return an iterator over the subschemas of a given JSON Schema definition /// according to the applicators understood by the provided walker function. @@ -28,7 +28,7 @@ namespace sourcemeta::core { /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -46,22 +46,22 @@ namespace sourcemeta::core { /// })JSON"); /// /// for (const auto &entry : -/// sourcemeta::core::SchemaIterator{ -/// document, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver}) { +/// sourcemeta::blaze::SchemaIterator{ +/// document, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver}) { /// sourcemeta::core::prettify( /// sourcemeta::core::get(document, entry.pointer), std::cout); /// std::cout << "\n"; /// } /// ``` -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIterator { +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaIterator { private: using internal = typename std::vector; public: using const_iterator = typename internal::const_iterator; - SchemaIterator(const JSON &input, const SchemaWalker &walker, - const SchemaResolver &resolver, + SchemaIterator(const sourcemeta::core::JSON &input, + const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect = ""); [[nodiscard]] auto begin() const -> const_iterator; [[nodiscard]] auto end() const -> const_iterator; @@ -81,7 +81,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIterator { #endif }; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Return an iterator over the subschemas of a given JSON Schema definition /// according to the applicators understood by the provided walker function. @@ -94,7 +94,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIterator { /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -112,22 +112,22 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIterator { /// })JSON"); /// /// for (const auto &entry : -/// sourcemeta::core::SchemaIteratorFlat{ -/// document, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver}) { +/// sourcemeta::blaze::SchemaIteratorFlat{ +/// document, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver}) { /// sourcemeta::core::prettify( /// sourcemeta::core::get(document, entry.pointer), std::cout); /// std::cout << "\n"; /// } /// ``` -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIteratorFlat { +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaIteratorFlat { private: using internal = typename std::vector; public: using const_iterator = typename internal::const_iterator; - SchemaIteratorFlat(const JSON &input, const SchemaWalker &walker, - const SchemaResolver &resolver, + SchemaIteratorFlat(const sourcemeta::core::JSON &input, + const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect = ""); [[nodiscard]] auto begin() const -> const_iterator; [[nodiscard]] auto end() const -> const_iterator; @@ -147,7 +147,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIteratorFlat { #endif }; -/// @ingroup jsonschema +/// @ingroup foundation /// /// Return an iterator over the top-level keywords of a given JSON Schema /// definition in the order in which an implementation must evaluate them. @@ -156,7 +156,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIteratorFlat { /// /// ```cpp /// #include -/// #include +/// #include /// #include /// /// const sourcemeta::core::JSON document = @@ -169,20 +169,21 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIteratorFlat { /// })JSON"); /// /// for (const auto &entry : -/// sourcemeta::core::SchemaKeywordIterator{ -/// document, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver}) { +/// sourcemeta::blaze::SchemaKeywordIterator{ +/// document, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver}) { /// sourcemeta::core::stringify(entry.pointer, std::cout); /// std::cout << "\n"; /// } /// ``` -class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaKeywordIterator { +class SOURCEMETA_BLAZE_FOUNDATION_EXPORT SchemaKeywordIterator { private: using internal = typename std::vector; public: using const_iterator = typename internal::const_iterator; - SchemaKeywordIterator(const JSON &input, const SchemaWalker &walker, + SchemaKeywordIterator(const sourcemeta::core::JSON &input, + const SchemaWalker &walker, const SchemaResolver &resolver, std::string_view default_dialect = ""); [[nodiscard]] auto begin() const -> const_iterator; @@ -203,6 +204,6 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaKeywordIterator { #endif }; -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze #endif diff --git a/vendor/core/src/core/jsonschema/known_resolver.cmake b/vendor/blaze/src/foundation/known_resolver.cmake similarity index 100% rename from vendor/core/src/core/jsonschema/known_resolver.cmake rename to vendor/blaze/src/foundation/known_resolver.cmake diff --git a/vendor/core/src/core/jsonschema/known_resolver.in.cc b/vendor/blaze/src/foundation/known_resolver.in.cc similarity index 90% rename from vendor/core/src/core/jsonschema/known_resolver.in.cc rename to vendor/blaze/src/foundation/known_resolver.in.cc index a2c1d48ba..d8ef8cf5e 100644 --- a/vendor/core/src/core/jsonschema/known_resolver.in.cc +++ b/vendor/blaze/src/foundation/known_resolver.in.cc @@ -1,4 +1,4 @@ -#include +#include #include // std::uint8_t @@ -364,7 +364,7 @@ static auto parse_identifier(const std::string_view identifier) -> KnownSchema { return KnownSchema::UNKNOWN; } -auto sourcemeta::core::schema_resolver(const std::string_view identifier) +auto sourcemeta::blaze::schema_resolver(const std::string_view identifier) -> std::optional { switch (parse_identifier(identifier)) { case KnownSchema::JSONSCHEMA_2020_12: @@ -532,7 +532,73 @@ auto sourcemeta::core::schema_resolver(const std::string_view identifier) return std::nullopt; } -auto sourcemeta::core::is_known_schema( +auto sourcemeta::blaze::is_known_schema( const std::string_view identifier) noexcept -> bool { return parse_identifier(identifier) != KnownSchema::UNKNOWN; } + +auto sourcemeta::blaze::is_official_schema( + const std::string_view identifier) noexcept -> bool { + switch (parse_identifier(identifier)) { + case KnownSchema::JSONSCHEMA_2020_12: + case KnownSchema::HYPERSCHEMA_2020_12: + case KnownSchema::JSONSCHEMA_2020_12_APPLICATOR: + case KnownSchema::JSONSCHEMA_2020_12_CONTENT: + case KnownSchema::JSONSCHEMA_2020_12_CORE: + case KnownSchema::JSONSCHEMA_2020_12_FORMAT_ANNOTATION: + case KnownSchema::JSONSCHEMA_2020_12_FORMAT_ASSERTION: + case KnownSchema::JSONSCHEMA_2020_12_HYPER_SCHEMA: + case KnownSchema::JSONSCHEMA_2020_12_META_DATA: + case KnownSchema::JSONSCHEMA_2020_12_UNEVALUATED: + case KnownSchema::JSONSCHEMA_2020_12_VALIDATION: + case KnownSchema::LINKS_2020_12: + case KnownSchema::JSONSCHEMA_2020_12_OUTPUT: + case KnownSchema::JSONSCHEMA_2019_09: + case KnownSchema::HYPERSCHEMA_2019_09: + case KnownSchema::JSONSCHEMA_2019_09_APPLICATOR: + case KnownSchema::JSONSCHEMA_2019_09_CONTENT: + case KnownSchema::JSONSCHEMA_2019_09_CORE: + case KnownSchema::JSONSCHEMA_2019_09_FORMAT: + case KnownSchema::JSONSCHEMA_2019_09_HYPER_SCHEMA: + case KnownSchema::JSONSCHEMA_2019_09_META_DATA: + case KnownSchema::JSONSCHEMA_2019_09_VALIDATION: + case KnownSchema::LINKS_2019_09: + case KnownSchema::JSONSCHEMA_2019_09_OUTPUT: + case KnownSchema::HYPERSCHEMA_2019_09_OUTPUT: + case KnownSchema::JSONSCHEMA_DRAFT7: + case KnownSchema::HYPERSCHEMA_DRAFT7: + case KnownSchema::LINKS_DRAFT7: + case KnownSchema::HYPERSCHEMA_DRAFT7_OUTPUT: + case KnownSchema::JSONSCHEMA_DRAFT6: + case KnownSchema::HYPERSCHEMA_DRAFT6: + case KnownSchema::LINKS_DRAFT6: + case KnownSchema::JSONSCHEMA_DRAFT4: + case KnownSchema::HYPERSCHEMA_DRAFT4: + case KnownSchema::LINKS_DRAFT4: + case KnownSchema::JSONSCHEMA_DRAFT3: + case KnownSchema::HYPERSCHEMA_DRAFT3: + case KnownSchema::LINKS_DRAFT3: + case KnownSchema::JSON_REF_DRAFT3: + case KnownSchema::JSONSCHEMA_DRAFT2: + case KnownSchema::HYPERSCHEMA_DRAFT2: + case KnownSchema::LINKS_DRAFT2: + case KnownSchema::JSON_REF_DRAFT2: + case KnownSchema::JSONSCHEMA_DRAFT1: + case KnownSchema::HYPERSCHEMA_DRAFT1: + case KnownSchema::LINKS_DRAFT1: + case KnownSchema::JSON_REF_DRAFT1: + case KnownSchema::JSONSCHEMA_DRAFT0: + case KnownSchema::HYPERSCHEMA_DRAFT0: + case KnownSchema::LINKS_DRAFT0: + case KnownSchema::JSON_REF_DRAFT0: + return true; + case KnownSchema::OAS_3_2_DIALECT_2025_09_17: + case KnownSchema::OAS_3_2_META_2025_09_17: + case KnownSchema::OAS_3_1_DIALECT_BASE: + case KnownSchema::OAS_3_1_META_BASE: + case KnownSchema::UNKNOWN: + return false; + } + + return false; +} diff --git a/vendor/core/src/core/jsonschema/known_walker.cc b/vendor/blaze/src/foundation/known_walker.cc similarity index 54% rename from vendor/core/src/core/jsonschema/known_walker.cc rename to vendor/blaze/src/foundation/known_walker.cc index f439eb5d4..0185bf942 100644 --- a/vendor/core/src/core/jsonschema/known_walker.cc +++ b/vendor/blaze/src/foundation/known_walker.cc @@ -1,8 +1,8 @@ -#include +#include #include // std::unordered_map -namespace sourcemeta::core { +namespace sourcemeta::blaze { namespace { @@ -359,21 +359,23 @@ auto handle_properties(const Vocabularies &vocabularies) if (vocabularies.contains(Known::JSON_Schema_2020_12_Applicator)) { if (vocabularies.contains(Known::JSON_Schema_2020_12_Validation)) { RETURN_WITH_ORDER_DEPENDENCIES( - Known::JSON_Schema_2020_12_Applicator, make_set({JSON::Type::Object}), + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyStatic, "required") } RETURN(Known::JSON_Schema_2020_12_Applicator, - make_set({JSON::Type::Object}), + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyStatic) } if (vocabularies.contains(Known::JSON_Schema_2019_09_Applicator)) { if (vocabularies.contains(Known::JSON_Schema_2019_09_Validation)) { RETURN_WITH_ORDER_DEPENDENCIES( - Known::JSON_Schema_2019_09_Applicator, make_set({JSON::Type::Object}), + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyStatic, "required") } RETURN(Known::JSON_Schema_2019_09_Applicator, - make_set({JSON::Type::Object}), + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyStatic) } if (vocabularies.contains(Known::JSON_Schema_Draft_7)) { @@ -382,7 +384,7 @@ auto handle_properties(const Vocabularies &vocabularies) Known::JSON_Schema_Draft_7, {"$ref"}, {"required"}, - make_set({JSON::Type::Object})}; + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object})}; return result; } if (vocabularies.contains(Known::JSON_Schema_Draft_7_Hyper)) { @@ -391,7 +393,7 @@ auto handle_properties(const Vocabularies &vocabularies) Known::JSON_Schema_Draft_7_Hyper, {"$ref"}, {"required"}, - make_set({JSON::Type::Object})}; + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object})}; return result; } if (vocabularies.contains(Known::JSON_Schema_Draft_6)) { @@ -400,7 +402,7 @@ auto handle_properties(const Vocabularies &vocabularies) Known::JSON_Schema_Draft_6, {"$ref"}, {"required"}, - make_set({JSON::Type::Object})}; + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object})}; return result; } if (vocabularies.contains(Known::JSON_Schema_Draft_6_Hyper)) { @@ -409,7 +411,7 @@ auto handle_properties(const Vocabularies &vocabularies) Known::JSON_Schema_Draft_6_Hyper, {"$ref"}, {"required"}, - make_set({JSON::Type::Object})}; + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object})}; return result; } if (vocabularies.contains(Known::JSON_Schema_Draft_4)) { @@ -418,7 +420,7 @@ auto handle_properties(const Vocabularies &vocabularies) Known::JSON_Schema_Draft_4, {"$ref"}, {"required"}, - make_set({JSON::Type::Object})}; + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object})}; return result; } if (vocabularies.contains(Known::JSON_Schema_Draft_4_Hyper)) { @@ -427,179 +429,234 @@ auto handle_properties(const Vocabularies &vocabularies) Known::JSON_Schema_Draft_4_Hyper, {"$ref"}, {"required"}, - make_set({JSON::Type::Object})}; + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object})}; return result; } CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyStatic, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyStatic, "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyStatic) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyStatic) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyStatic) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyStatic) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyStatic) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyStatic) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyStatic) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyStatic) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyStatic) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyStatic) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyStatic) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyStatic) return UNKNOWN_RESULT; } auto handle_additionalProperties(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_2020_12_Applicator, make_set({JSON::Type::Object}), + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_2019_09_Applicator, make_set({JSON::Type::Object}), + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_4, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_4_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties", "patternProperties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_2, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_2_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_1, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_1_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_0, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_0_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, "properties") return UNKNOWN_RESULT; } auto handle_patternProperties(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Applicator, - make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyRegex) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Applicator, - make_set({JSON::Type::Object}), - ApplicatorMembersTraversePropertyRegex) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyRegex) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersTraversePropertyRegex) CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_4, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_4_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorMembersTraversePropertyRegex, "$ref") return UNKNOWN_RESULT; } auto handle_propertyNames(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Applicator, - make_set({JSON::Type::Object}), - ApplicatorValueTraverseAnyPropertyKey) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Applicator, - make_set({JSON::Type::Object}), - ApplicatorValueTraverseAnyPropertyKey) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseAnyPropertyKey) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseAnyPropertyKey) CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseAnyPropertyKey, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseAnyPropertyKey, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseAnyPropertyKey, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6_Hyper, make_set({JSON::Type::Object}), + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), ApplicatorValueTraverseAnyPropertyKey, "$ref") return UNKNOWN_RESULT; } auto handle_dependentSchemas(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Applicator, - make_set({JSON::Type::Object}), ApplicatorMembersInPlaceSome) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Applicator, - make_set({JSON::Type::Object}), ApplicatorMembersInPlaceSome) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome) return UNKNOWN_RESULT; } auto handle_dependencies(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Object}), - ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorMembersInPlaceSome, "$ref") return UNKNOWN_RESULT; } @@ -608,123 +665,160 @@ auto handle_contains(const Vocabularies &vocabularies) if (vocabularies.contains(Known::JSON_Schema_2020_12_Applicator)) { if (vocabularies.contains(Known::JSON_Schema_2020_12_Validation)) { RETURN_WITH_DEPENDENCIES( - Known::JSON_Schema_2020_12_Applicator, make_set({JSON::Type::Array}), + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueTraverseAnyItem, "minContains", "maxContains") } - RETURN(Known::JSON_Schema_2020_12_Applicator, make_set({JSON::Type::Array}), + RETURN(Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueTraverseAnyItem) } if (vocabularies.contains(Known::JSON_Schema_2019_09_Applicator)) { if (vocabularies.contains(Known::JSON_Schema_2019_09_Validation)) { RETURN_WITH_DEPENDENCIES( - Known::JSON_Schema_2019_09_Applicator, make_set({JSON::Type::Array}), + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueTraverseAnyItem, "minContains", "maxContains") } - RETURN(Known::JSON_Schema_2019_09_Applicator, make_set({JSON::Type::Array}), + RETURN(Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueTraverseAnyItem) } - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseAnyItem, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseAnyItem, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseAnyItem, "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseAnyItem, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseAnyItem, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseAnyItem, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseAnyItem, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseAnyItem, "$ref") return UNKNOWN_RESULT; } auto handle_items(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_2020_12_Applicator, make_set({JSON::Type::Array}), + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueTraverseSomeItem, "prefixItems") - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Applicator, - make_set({JSON::Type::Array}), - ApplicatorValueOrElementsTraverseAnyItemOrItem) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueOrElementsTraverseAnyItemOrItem) CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_7_Hyper, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_6_Hyper, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_4, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_4_Hyper, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( - Known::JSON_Schema_Draft_3_Hyper, make_set({JSON::Type::Array}), + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueOrElementsTraverseAnyItemOrItem, "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::Array}), - ApplicatorValueOrElementsTraverseAnyItemOrItem) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueOrElementsTraverseAnyItemOrItem) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::Array}), - ApplicatorValueOrElementsTraverseAnyItemOrItem) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueOrElementsTraverseAnyItemOrItem) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::Array}), - ApplicatorValueOrElementsTraverseAnyItemOrItem) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueOrElementsTraverseAnyItemOrItem) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueOrElementsTraverseAnyItemOrItem) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueOrElementsTraverseAnyItemOrItem) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueOrElementsTraverseAnyItemOrItem) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueOrElementsTraverseAnyItemOrItem) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueOrElementsTraverseAnyItemOrItem) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueOrElementsTraverseAnyItemOrItem) return UNKNOWN_RESULT; } auto handle_prefixItems(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Applicator, - make_set({JSON::Type::Array}), - ApplicatorElementsTraverseItem) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorElementsTraverseItem) return UNKNOWN_RESULT; } auto handle_additionalItems(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_2019_09_Applicator, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Array}), - ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem, "items") return UNKNOWN_RESULT; } @@ -734,17 +828,20 @@ auto handle_unevaluatedProperties(const Vocabularies &vocabularies) if (vocabularies.contains(Known::JSON_Schema_2020_12_Applicator)) { RETURN_WITH_DEPENDENCIES( Known::JSON_Schema_2020_12_Unevaluated, - make_set({JSON::Type::Object}), ApplicatorValueTraverseSomeProperty, - "properties", "patternProperties", "additionalProperties") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseSomeProperty, "properties", + "patternProperties", "additionalProperties") } RETURN(Known::JSON_Schema_2020_12_Unevaluated, - make_set({JSON::Type::Object}), ApplicatorValueTraverseSomeProperty) + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseSomeProperty) } if (vocabularies.contains(Known::JSON_Schema_2019_09_Applicator)) { - RETURN_WITH_DEPENDENCIES(Known::JSON_Schema_2019_09_Applicator, - make_set({JSON::Type::Object}), - ApplicatorValueTraverseSomeProperty, "properties", - "patternProperties", "additionalProperties") + RETURN_WITH_DEPENDENCIES( + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseSomeProperty, "properties", "patternProperties", + "additionalProperties") } return UNKNOWN_RESULT; } @@ -754,15 +851,18 @@ auto handle_unevaluatedItems(const Vocabularies &vocabularies) if (vocabularies.contains(Known::JSON_Schema_2020_12_Unevaluated)) { if (vocabularies.contains(Known::JSON_Schema_2020_12_Applicator)) { RETURN_WITH_DEPENDENCIES( - Known::JSON_Schema_2020_12_Unevaluated, make_set({JSON::Type::Array}), + Known::JSON_Schema_2020_12_Unevaluated, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueTraverseSomeItem, "prefixItems", "items", "contains") } RETURN(Known::JSON_Schema_2020_12_Unevaluated, - make_set({JSON::Type::Array}), ApplicatorValueTraverseSomeItem) + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + ApplicatorValueTraverseSomeItem) } if (vocabularies.contains(Known::JSON_Schema_2019_09_Applicator)) { RETURN_WITH_DEPENDENCIES( - Known::JSON_Schema_2019_09_Applicator, make_set({JSON::Type::Array}), + Known::JSON_Schema_2019_09_Applicator, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), ApplicatorValueTraverseSomeItem, "items", "additionalItems") } return UNKNOWN_RESULT; @@ -861,28 +961,46 @@ auto handle_const(const Vocabularies &vocabularies) auto handle_multipleOf(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") return UNKNOWN_RESULT; } @@ -890,46 +1008,84 @@ auto handle_maximum(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { CHECK_VOCABULARY_WITH_ORDER_DEPENDENCIES( Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "type") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "type") CHECK_VOCABULARY_WITH_ORDER_DEPENDENCIES( Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "type") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "type") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) return UNKNOWN_RESULT; } @@ -937,488 +1093,750 @@ auto handle_minimum(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { CHECK_VOCABULARY_WITH_ORDER_DEPENDENCIES( Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "type") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "type") CHECK_VOCABULARY_WITH_ORDER_DEPENDENCIES( Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "type") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "type") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) return UNKNOWN_RESULT; } auto handle_exclusiveMaximum(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") return UNKNOWN_RESULT; } auto handle_exclusiveMinimum(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") return UNKNOWN_RESULT; } auto handle_maxLength(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::String}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) return UNKNOWN_RESULT; } auto handle_minLength(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::String}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) return UNKNOWN_RESULT; } auto handle_pattern(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::String}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::String}), Assertion, - "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::String}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::String}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) return UNKNOWN_RESULT; } auto handle_maxItems(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::Array}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::Array}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::Array}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Array}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) return UNKNOWN_RESULT; } auto handle_minItems(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::Array}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::Array}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::Array}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Array}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) return UNKNOWN_RESULT; } auto handle_uniqueItems(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Array}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Array}), Assertion, - "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::Array}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Array}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) return UNKNOWN_RESULT; } auto handle_maxProperties(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") return UNKNOWN_RESULT; } auto handle_minProperties(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") return UNKNOWN_RESULT; } auto handle_required(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Object}), Assertion, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Object}), Assertion, - "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion, "$ref") return UNKNOWN_RESULT; } auto handle_dependentRequired(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Object}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) return UNKNOWN_RESULT; } auto handle_minContains(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Array}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) return UNKNOWN_RESULT; } auto handle_maxContains(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Validation, - make_set({JSON::Type::Array}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Validation, - make_set({JSON::Type::Array}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Validation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Array}), + Assertion) return UNKNOWN_RESULT; } @@ -1566,117 +1984,169 @@ auto handle_examples(const Vocabularies &vocabularies) auto handle_format(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Format_Assertion, - make_set({JSON::Type::String}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Format_Annotation, - make_set({JSON::Type::String}), Annotation) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Format, - make_set({JSON::Type::String}), Annotation) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::String}), Other, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::String}), Other, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::String}), Other, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::String}), Other, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4, - make_set({JSON::Type::String}), Other, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_4_Hyper, - make_set({JSON::Type::String}), Other, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3, - make_set({JSON::Type::String}), Other, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::String}), Other, - "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::String}), - Other) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::String}), Other) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::String}), - Other) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::String}), Other) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::String}), - Other) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::String}), Other) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Format_Assertion, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Format_Annotation, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Annotation) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Format, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Annotation) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_4_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_3_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other, + "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), Other) return UNKNOWN_RESULT; } auto handle_contentSchema(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Content, - make_set({JSON::Type::String}), ApplicatorValueInPlaceOther) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Content, - make_set({JSON::Type::String}), ApplicatorValueInPlaceOther) + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Content, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + ApplicatorValueInPlaceOther) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Content, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + ApplicatorValueInPlaceOther) return UNKNOWN_RESULT; } auto handle_contentMediaType(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Content, - make_set({JSON::Type::String}), Annotation) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Content, - make_set({JSON::Type::String}), Annotation) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::String}), Comment, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::String}), Comment, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::String}), Comment, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::String}), Comment, - "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Content, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Annotation) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Content, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Annotation) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, "$ref") return UNKNOWN_RESULT; } auto handle_contentEncoding(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_2020_12_Content, - make_set({JSON::Type::String}), Annotation) - CHECK_VOCABULARY(Known::JSON_Schema_2019_09_Content, - make_set({JSON::Type::String}), Annotation) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7, - make_set({JSON::Type::String}), Comment, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_7_Hyper, - make_set({JSON::Type::String}), Comment, - "$ref") - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6, - make_set({JSON::Type::String}), Comment, - ("$ref")) - CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_6_Hyper, - make_set({JSON::Type::String}), Comment, - "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_2020_12_Content, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Annotation) + CHECK_VOCABULARY( + Known::JSON_Schema_2019_09_Content, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Annotation) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_7_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, "$ref") + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, ("$ref")) + CHECK_VOCABULARY_WITH_DEPENDENCIES( + Known::JSON_Schema_Draft_6_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES(Known::JSON_Schema_Draft_3_Hyper, {}, Other, "$ref") if (vocabularies.contains(Known::JSON_Schema_Draft_3) || vocabularies.contains(Known::JSON_Schema_Draft_4)) { return UNKNOWN_WITH_REF_RESULT; } - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::String}), - Comment) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::String}), Comment) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::String}), - Comment) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::String}), Comment) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::String}), - Comment) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::String}), Comment) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::String}), + Comment) return UNKNOWN_RESULT; } @@ -1722,98 +2192,173 @@ auto handle_divisibleBy(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") CHECK_VOCABULARY_WITH_DEPENDENCIES( Known::JSON_Schema_Draft_3_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion, "$ref") - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion, "$ref") + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) return UNKNOWN_RESULT; } auto handle_maximumCanEqual(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) return UNKNOWN_RESULT; } auto handle_minimumCanEqual(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Integer, JSON::Type::Real}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Integer, + sourcemeta::core::JSON::Type::Real}), + Assertion) return UNKNOWN_RESULT; } auto handle_requires(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::Object}), - ApplicatorValueTraverseParent) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Object}), - ApplicatorValueTraverseParent) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::Object}), - ApplicatorValueTraverseParent) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Object}), - ApplicatorValueTraverseParent) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::Object}), - ApplicatorValueTraverseParent) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Object}), - ApplicatorValueTraverseParent) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseParent) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseParent) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseParent) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseParent) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseParent) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + ApplicatorValueTraverseParent) return UNKNOWN_RESULT; } auto handle_optional(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2, make_set({JSON::Type::Object}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_2_Hyper, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::Object}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Object}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::Object}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Object}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_2_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Object}), + Assertion) return UNKNOWN_RESULT; } auto handle_maxDecimal(const Vocabularies &vocabularies) -> const SchemaWalkerResult & { - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1, make_set({JSON::Type::Real}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_1_Hyper, - make_set({JSON::Type::Real}), Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0, make_set({JSON::Type::Real}), - Assertion) - CHECK_VOCABULARY(Known::JSON_Schema_Draft_0_Hyper, - make_set({JSON::Type::Real}), Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_1_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Real}), + Assertion) + CHECK_VOCABULARY( + Known::JSON_Schema_Draft_0_Hyper, + sourcemeta::core::make_set({sourcemeta::core::JSON::Type::Real}), + Assertion) return UNKNOWN_RESULT; } @@ -2332,4 +2877,4 @@ auto schema_walker(const std::string_view keyword, return UNKNOWN_RESULT; } -} // namespace sourcemeta::core +} // namespace sourcemeta::blaze diff --git a/vendor/core/src/core/jsonschema/vocabularies.cc b/vendor/blaze/src/foundation/vocabularies.cc similarity index 85% rename from vendor/core/src/core/jsonschema/vocabularies.cc rename to vendor/blaze/src/foundation/vocabularies.cc index bd3ba45cc..62b9ad041 100644 --- a/vendor/core/src/core/jsonschema/vocabularies.cc +++ b/vendor/blaze/src/foundation/vocabularies.cc @@ -1,6 +1,6 @@ -#include +#include -#include +#include #include // assert #include // std::optional @@ -72,8 +72,8 @@ namespace { auto uri_to_known_vocabulary(const std::string_view uri) - -> std::optional { - using sourcemeta::core::Vocabularies; + -> std::optional { + using sourcemeta::blaze::Vocabularies; // NOLINTNEXTLINE(bugprone-macro-parentheses) #define X_URI_TO_ENUM(enumerator, uri_string) \ @@ -89,22 +89,23 @@ auto uri_to_known_vocabulary(const std::string_view uri) } } // anonymous namespace -sourcemeta::core::Vocabularies::Vocabularies( - std::initializer_list> init) { +sourcemeta::blaze::Vocabularies::Vocabularies( + std::initializer_list> + init) { for (const auto &entry : init) { this->insert(entry.first, entry.second); } } -sourcemeta::core::Vocabularies::Vocabularies( +sourcemeta::blaze::Vocabularies::Vocabularies( std::initializer_list> init) { for (const auto &entry : init) { this->insert(entry.first, entry.second); } } -auto sourcemeta::core::Vocabularies::contains( - const JSON::String &uri) const noexcept -> bool { +auto sourcemeta::blaze::Vocabularies::contains( + const sourcemeta::core::JSON::String &uri) const noexcept -> bool { if (this->unknown.has_value()) { if (this->unknown->contains(uri)) { return true; @@ -123,14 +124,14 @@ auto sourcemeta::core::Vocabularies::contains( return false; } -auto sourcemeta::core::Vocabularies::contains(Known vocabulary) const noexcept +auto sourcemeta::blaze::Vocabularies::contains(Known vocabulary) const noexcept -> bool { const auto index = std::to_underlying(vocabulary); // Use [] operator instead of test() to avoid exceptions in noexcept function return this->required_known[index] || this->optional_known[index]; } -auto sourcemeta::core::Vocabularies::contains_any( +auto sourcemeta::blaze::Vocabularies::contains_any( std::initializer_list vocabularies) const noexcept -> bool { for (const auto &vocabulary : vocabularies) { if (this->contains(vocabulary)) { @@ -141,8 +142,8 @@ auto sourcemeta::core::Vocabularies::contains_any( return false; } -auto sourcemeta::core::Vocabularies::insert(const JSON::String &uri, - bool required) noexcept -> void { +auto sourcemeta::blaze::Vocabularies::insert( + const sourcemeta::core::JSON::String &uri, bool required) noexcept -> void { // We NEED to allow official vocabulary string URIs here, as that's how // we construct the optimised version! const auto maybe_known = uri_to_known_vocabulary(uri); @@ -156,8 +157,8 @@ auto sourcemeta::core::Vocabularies::insert(const JSON::String &uri, } } -auto sourcemeta::core::Vocabularies::insert(Known vocabulary, - bool required) noexcept -> void { +auto sourcemeta::blaze::Vocabularies::insert(Known vocabulary, + bool required) noexcept -> void { const auto index = std::to_underlying(vocabulary); if (required) { this->required_known[index] = true; @@ -170,7 +171,8 @@ auto sourcemeta::core::Vocabularies::insert(Known vocabulary, assert((this->required_known & this->optional_known).none()); } -auto sourcemeta::core::Vocabularies::get(const JSON::String &uri) const noexcept +auto sourcemeta::blaze::Vocabularies::get( + const sourcemeta::core::JSON::String &uri) const noexcept -> std::optional { if (this->unknown.has_value()) { const auto iterator{this->unknown->find(uri)}; @@ -191,7 +193,7 @@ auto sourcemeta::core::Vocabularies::get(const JSON::String &uri) const noexcept return std::nullopt; } -auto sourcemeta::core::Vocabularies::get(Known vocabulary) const noexcept +auto sourcemeta::blaze::Vocabularies::get(Known vocabulary) const noexcept -> std::optional { const auto index = std::to_underlying(vocabulary); // Use [] operator instead of test() to avoid exceptions in noexcept function @@ -205,22 +207,22 @@ auto sourcemeta::core::Vocabularies::get(Known vocabulary) const noexcept return std::nullopt; } -auto sourcemeta::core::Vocabularies::size() const noexcept -> std::size_t { +auto sourcemeta::blaze::Vocabularies::size() const noexcept -> std::size_t { return (this->required_known | this->optional_known).count() + (this->unknown.has_value() ? this->unknown->size() : 0); } -auto sourcemeta::core::Vocabularies::empty() const noexcept -> bool { +auto sourcemeta::blaze::Vocabularies::empty() const noexcept -> bool { return this->required_known.none() && this->optional_known.none() && !this->has_unknown(); } -auto sourcemeta::core::Vocabularies::has_unknown() const noexcept -> bool { +auto sourcemeta::blaze::Vocabularies::has_unknown() const noexcept -> bool { return this->unknown.has_value() && !this->unknown.value().empty(); } -auto sourcemeta::core::operator<<(std::ostream &stream, - Vocabularies::Known vocabulary) +auto sourcemeta::blaze::operator<<(std::ostream &stream, + Vocabularies::Known vocabulary) -> std::ostream & { switch (vocabulary) { // NOLINTNEXTLINE(bugprone-macro-parentheses) @@ -237,7 +239,7 @@ auto sourcemeta::core::operator<<(std::ostream &stream, return stream; } -auto sourcemeta::core::to_string(Vocabularies::Known vocabulary) +auto sourcemeta::blaze::to_string(Vocabularies::Known vocabulary) -> std::string_view { switch (vocabulary) { // NOLINTNEXTLINE(bugprone-macro-parentheses) @@ -254,23 +256,23 @@ auto sourcemeta::core::to_string(Vocabularies::Known vocabulary) return {}; } -auto sourcemeta::core::to_string(const Vocabularies::URI &vocabulary) +auto sourcemeta::blaze::to_string(const Vocabularies::URI &vocabulary) -> std::string_view { const auto *known{std::get_if(&vocabulary)}; if (known) { return to_string(*known); } else { - return *std::get_if(&vocabulary); + return *std::get_if(&vocabulary); } } -auto sourcemeta::core::operator<<(std::ostream &stream, - const Vocabularies::URI &vocabulary) +auto sourcemeta::blaze::operator<<(std::ostream &stream, + const Vocabularies::URI &vocabulary) -> std::ostream & { return stream << to_string(vocabulary); } -auto sourcemeta::core::Vocabularies::throw_if_any_unsupported( +auto sourcemeta::blaze::Vocabularies::throw_if_any_unsupported( const std::unordered_set &supported, const char *message) const -> void { for (std::size_t index = 0; index < KNOWN_VOCABULARY_COUNT; ++index) { @@ -313,7 +315,7 @@ auto sourcemeta::core::Vocabularies::throw_if_any_unsupported( } } -auto sourcemeta::core::Vocabularies::throw_if_any_unknown_required( +auto sourcemeta::blaze::Vocabularies::throw_if_any_unknown_required( const char *message) const -> void { if (this->unknown.has_value()) { for (const auto &[uri, required] : this->unknown.value()) { diff --git a/vendor/core/src/core/jsonschema/walker.cc b/vendor/blaze/src/foundation/walker.cc similarity index 75% rename from vendor/core/src/core/jsonschema/walker.cc rename to vendor/blaze/src/foundation/walker.cc index 173f0ffcb..de982ce2e 100644 --- a/vendor/core/src/core/jsonschema/walker.cc +++ b/vendor/blaze/src/foundation/walker.cc @@ -1,4 +1,4 @@ -#include +#include #include "helpers.h" @@ -10,24 +10,24 @@ enum class SchemaWalkerType_t : std::uint8_t { Deep, Flat }; struct DialectInfo { std::string_view dialect; - sourcemeta::core::SchemaBaseDialect base_dialect; + sourcemeta::blaze::SchemaBaseDialect base_dialect; bool override_active; }; auto resolve_dialect_at( const sourcemeta::core::JSON &subschema, const std::string_view inherited_dialect, - const sourcemeta::core::SchemaBaseDialect inherited_base, - const sourcemeta::core::SchemaResolver &resolver, const std::size_t level, + const sourcemeta::blaze::SchemaBaseDialect inherited_base, + const sourcemeta::blaze::SchemaResolver &resolver, const std::size_t level, const bool allow_dialect_override) -> DialectInfo { - auto local{sourcemeta::core::dialect(subschema, inherited_dialect, - allow_dialect_override)}; + auto local{sourcemeta::blaze::dialect(subschema, inherited_dialect, + allow_dialect_override)}; const auto override_active{ - local != sourcemeta::core::dialect(subschema, inherited_dialect, false)}; - auto id{sourcemeta::core::identify(subschema, resolver, local, "", - allow_dialect_override)}; + local != sourcemeta::blaze::dialect(subschema, inherited_dialect, false)}; + auto id{sourcemeta::blaze::identify(subschema, resolver, local, "", + allow_dialect_override)}; if (id.empty() && local != inherited_dialect && !override_active) { - id = sourcemeta::core::identify(subschema, inherited_base); + id = sourcemeta::blaze::identify(subschema, inherited_base); if (!id.empty()) { local = inherited_dialect; } @@ -39,8 +39,8 @@ auto resolve_dialect_at( } const auto resolved_base{ local != inherited_dialect - ? sourcemeta::core::base_dialect(subschema, resolver, local, - allow_dialect_override) + ? sourcemeta::blaze::base_dialect(subschema, resolver, local, + allow_dialect_override) .value_or(inherited_base) : inherited_base}; return {.dialect = local, @@ -50,15 +50,15 @@ auto resolve_dialect_at( auto walk(const std::optional &parent, const sourcemeta::core::WeakPointer &pointer, - std::vector &subschemas, + std::vector &subschemas, const sourcemeta::core::JSON &subschema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const std::string_view dialect, - const sourcemeta::core::SchemaBaseDialect base_dialect, + const sourcemeta::blaze::SchemaBaseDialect base_dialect, const SchemaWalkerType_t type, const std::size_t level, const bool orphan, const bool property_name) -> void { - if (!is_schema(subschema)) { + if (!sourcemeta::blaze::is_schema(subschema)) { return; } @@ -78,7 +78,7 @@ auto walk(const std::optional &parent, const auto enclosing_ref_overrides{ subschema.is_object() && subschema.defines("$ref") && - sourcemeta::core::ref_overrides_adjacent_keywords(base_dialect)}; + sourcemeta::blaze::ref_overrides_adjacent_keywords(base_dialect)}; const auto entry{resolve_dialect_at(subschema, dialect, base_dialect, resolver, level, @@ -86,11 +86,11 @@ auto walk(const std::optional &parent, const auto current_dialect{entry.dialect}; const auto current_base_dialect{entry.base_dialect}; - const auto vocabularies{sourcemeta::core::vocabularies( + const auto vocabularies{sourcemeta::blaze::vocabularies( resolver, current_base_dialect, current_dialect)}; if (type == SchemaWalkerType_t::Deep || level > 0) { - sourcemeta::core::SchemaIteratorEntry iterator_entry{ + sourcemeta::blaze::SchemaIteratorEntry iterator_entry{ .parent = parent, .pointer = pointer, .dialect = current_dialect, @@ -117,7 +117,7 @@ auto walk(const std::optional &parent, const auto has_overriding_ref{ subschema.defines("$ref") && - sourcemeta::core::ref_overrides_adjacent_keywords(current_base_dialect)}; + sourcemeta::blaze::ref_overrides_adjacent_keywords(current_base_dialect)}; for (auto &pair : subschema.as_object()) { const auto &keyword_info{walker(pair.first, vocabularies)}; @@ -126,12 +126,12 @@ auto walk(const std::optional &parent, // top-level, `$schema`, or anything else to be purely compliant and avoid // lots of gray areas here if (has_overriding_ref && - keyword_info.type != sourcemeta::core::SchemaKeywordType::Reference) { + keyword_info.type != sourcemeta::blaze::SchemaKeywordType::Reference) { continue; } switch (keyword_info.type) { - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorValueTraverseSomeProperty: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); @@ -139,7 +139,7 @@ auto walk(const std::optional &parent, child_dialect, child_base_dialect, type, level + 1, orphan, false); } break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorValueTraverseAnyPropertyKey: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); @@ -147,7 +147,7 @@ auto walk(const std::optional &parent, child_dialect, child_base_dialect, type, level + 1, orphan, true); } break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorValueTraverseAnyItem: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); @@ -155,7 +155,7 @@ auto walk(const std::optional &parent, child_dialect, child_base_dialect, type, level + 1, orphan, false); } break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorValueTraverseSomeItem: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); @@ -163,14 +163,15 @@ auto walk(const std::optional &parent, child_dialect, child_base_dialect, type, level + 1, orphan, false); } break; - case sourcemeta::core::SchemaKeywordType::ApplicatorValueTraverseParent: { + case sourcemeta::blaze::SchemaKeywordType:: + ApplicatorValueTraverseParent: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); walk(pointer, new_pointer, subschemas, pair.second, walker, resolver, child_dialect, child_base_dialect, type, level + 1, orphan, false); } break; - case sourcemeta::core::SchemaKeywordType::ApplicatorValueInPlaceOther: { + case sourcemeta::blaze::SchemaKeywordType::ApplicatorValueInPlaceOther: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); walk(pointer, new_pointer, subschemas, pair.second, walker, resolver, @@ -178,7 +179,7 @@ auto walk(const std::optional &parent, property_name); } break; - case sourcemeta::core::SchemaKeywordType::ApplicatorValueInPlaceNegate: { + case sourcemeta::blaze::SchemaKeywordType::ApplicatorValueInPlaceNegate: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); walk(pointer, new_pointer, subschemas, pair.second, walker, resolver, @@ -186,7 +187,7 @@ auto walk(const std::optional &parent, property_name); } break; - case sourcemeta::core::SchemaKeywordType::ApplicatorValueInPlaceMaybe: { + case sourcemeta::blaze::SchemaKeywordType::ApplicatorValueInPlaceMaybe: { sourcemeta::core::WeakPointer new_pointer{pointer}; new_pointer.push_back(std::cref(pair.first)); walk(pointer, new_pointer, subschemas, pair.second, walker, resolver, @@ -194,7 +195,7 @@ auto walk(const std::optional &parent, property_name); } break; - case sourcemeta::core::SchemaKeywordType::ApplicatorElementsTraverseItem: + case sourcemeta::blaze::SchemaKeywordType::ApplicatorElementsTraverseItem: if (pair.second.is_array()) { for (std::size_t index = 0; index < pair.second.size(); index++) { sourcemeta::core::WeakPointer new_pointer{pointer}; @@ -208,7 +209,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType::ApplicatorElementsInPlace: + case sourcemeta::blaze::SchemaKeywordType::ApplicatorElementsInPlace: if (pair.second.is_array()) { for (std::size_t index = 0; index < pair.second.size(); index++) { sourcemeta::core::WeakPointer new_pointer{pointer}; @@ -222,7 +223,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType::ApplicatorElementsInPlaceSome: + case sourcemeta::blaze::SchemaKeywordType::ApplicatorElementsInPlaceSome: if (pair.second.is_array()) { for (std::size_t index = 0; index < pair.second.size(); index++) { sourcemeta::core::WeakPointer new_pointer{pointer}; @@ -236,7 +237,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorElementsInPlaceSomeNegate: if (pair.second.is_array()) { for (std::size_t index = 0; index < pair.second.size(); index++) { @@ -251,7 +252,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorMembersTraversePropertyStatic: if (pair.second.is_object()) { for (auto &subpair : pair.second.as_object()) { @@ -266,7 +267,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorMembersTraversePropertyRegex: if (pair.second.is_object()) { for (auto &subpair : pair.second.as_object()) { @@ -281,7 +282,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType::ApplicatorMembersInPlaceSome: + case sourcemeta::blaze::SchemaKeywordType::ApplicatorMembersInPlaceSome: if (pair.second.is_object()) { for (auto &subpair : pair.second.as_object()) { sourcemeta::core::WeakPointer new_pointer{pointer}; @@ -295,7 +296,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType::LocationMembers: + case sourcemeta::blaze::SchemaKeywordType::LocationMembers: if (pair.second.is_object()) { for (auto &subpair : pair.second.as_object()) { sourcemeta::core::WeakPointer new_pointer{pointer}; @@ -309,7 +310,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorValueOrElementsTraverseAnyItemOrItem: if (pair.second.is_array()) { for (std::size_t index = 0; index < pair.second.size(); index++) { @@ -330,7 +331,7 @@ auto walk(const std::optional &parent, break; - case sourcemeta::core::SchemaKeywordType:: + case sourcemeta::blaze::SchemaKeywordType:: ApplicatorValueOrElementsInPlace: if (pair.second.is_array()) { for (std::size_t index = 0; index < pair.second.size(); index++) { @@ -350,12 +351,12 @@ auto walk(const std::optional &parent, } break; - case sourcemeta::core::SchemaKeywordType::Assertion: - case sourcemeta::core::SchemaKeywordType::Annotation: - case sourcemeta::core::SchemaKeywordType::Reference: - case sourcemeta::core::SchemaKeywordType::Other: - case sourcemeta::core::SchemaKeywordType::Comment: - case sourcemeta::core::SchemaKeywordType::Unknown: + case sourcemeta::blaze::SchemaKeywordType::Assertion: + case sourcemeta::blaze::SchemaKeywordType::Annotation: + case sourcemeta::blaze::SchemaKeywordType::Reference: + case sourcemeta::blaze::SchemaKeywordType::Other: + case sourcemeta::blaze::SchemaKeywordType::Comment: + case sourcemeta::blaze::SchemaKeywordType::Unknown: break; } } @@ -365,31 +366,31 @@ auto walk(const std::optional &parent, // TODO: These iterators are not very efficient. They traverse once on // construction and then the client traverses again. -sourcemeta::core::SchemaIterator::SchemaIterator( +sourcemeta::blaze::SchemaIterator::SchemaIterator( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, std::string_view default_dialect) { const std::string_view resolved_dialect{ - sourcemeta::core::dialect(schema, default_dialect)}; + sourcemeta::blaze::dialect(schema, default_dialect)}; sourcemeta::core::WeakPointer pointer; // If the given schema declares no dialect and the user didn't // not pass a default, then there is nothing we can do. We know // the current schema is a subschema, but cannot walk any further. if (resolved_dialect.empty()) { - sourcemeta::core::SchemaIteratorEntry entry{.parent = std::nullopt, - .pointer = pointer, - .dialect = "", - .vocabularies = {}, - .base_dialect = std::nullopt, - .subschema = schema, - .orphan = false, - .property_name = false}; + sourcemeta::blaze::SchemaIteratorEntry entry{.parent = std::nullopt, + .pointer = pointer, + .dialect = "", + .vocabularies = {}, + .base_dialect = std::nullopt, + .subschema = schema, + .orphan = false, + .property_name = false}; this->subschemas.push_back(std::move(entry)); } else { const auto resolved_base_dialect{ - sourcemeta::core::base_dialect(schema, resolver, resolved_dialect)}; + sourcemeta::blaze::base_dialect(schema, resolver, resolved_dialect)}; assert(resolved_base_dialect.has_value()); walk(std::nullopt, pointer, this->subschemas, schema, walker, resolver, resolved_dialect, resolved_base_dialect.value(), @@ -397,17 +398,17 @@ sourcemeta::core::SchemaIterator::SchemaIterator( } } -sourcemeta::core::SchemaIteratorFlat::SchemaIteratorFlat( +sourcemeta::blaze::SchemaIteratorFlat::SchemaIteratorFlat( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const std::string_view default_dialect) { const std::string_view resolved_dialect{ - sourcemeta::core::dialect(schema, default_dialect)}; + sourcemeta::blaze::dialect(schema, default_dialect)}; if (!resolved_dialect.empty()) { sourcemeta::core::WeakPointer pointer; const auto resolved_base_dialect{ - sourcemeta::core::base_dialect(schema, resolver, resolved_dialect)}; + sourcemeta::blaze::base_dialect(schema, resolver, resolved_dialect)}; assert(resolved_base_dialect.has_value()); walk(std::nullopt, pointer, this->subschemas, schema, walker, resolver, resolved_dialect, resolved_base_dialect.value(), @@ -415,10 +416,10 @@ sourcemeta::core::SchemaIteratorFlat::SchemaIteratorFlat( } } -sourcemeta::core::SchemaKeywordIterator::SchemaKeywordIterator( +sourcemeta::blaze::SchemaKeywordIterator::SchemaKeywordIterator( const sourcemeta::core::JSON &schema, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const std::string_view default_dialect) { assert(is_schema(schema)); if (schema.is_boolean()) { @@ -426,14 +427,14 @@ sourcemeta::core::SchemaKeywordIterator::SchemaKeywordIterator( } const std::string_view resolved_dialect{ - sourcemeta::core::dialect(schema, default_dialect)}; + sourcemeta::blaze::dialect(schema, default_dialect)}; const auto maybe_base_dialect{ - sourcemeta::core::base_dialect(schema, resolver, resolved_dialect)}; + sourcemeta::blaze::base_dialect(schema, resolver, resolved_dialect)}; Vocabularies vocabularies{ maybe_base_dialect.has_value() && !resolved_dialect.empty() - ? sourcemeta::core::vocabularies(resolver, maybe_base_dialect.value(), - resolved_dialect) + ? sourcemeta::blaze::vocabularies( + resolver, maybe_base_dialect.value(), resolved_dialect) : Vocabularies{}}; // TODO: Use std::ranges::to() once libc++ supports it @@ -441,7 +442,7 @@ sourcemeta::core::SchemaKeywordIterator::SchemaKeywordIterator( for (const auto &entry : schema.as_object()) { sourcemeta::core::WeakPointer entry_pointer; entry_pointer.push_back(std::cref(entry.first)); - sourcemeta::core::SchemaIteratorEntry subschema_entry{ + sourcemeta::blaze::SchemaIteratorEntry subschema_entry{ .parent = std::nullopt, .pointer = std::move(entry_pointer), .dialect = resolved_dialect, @@ -479,41 +480,42 @@ sourcemeta::core::SchemaKeywordIterator::SchemaKeywordIterator( }); } -auto sourcemeta::core::SchemaIterator::begin() const -> const_iterator { +auto sourcemeta::blaze::SchemaIterator::begin() const -> const_iterator { return this->subschemas.begin(); } -auto sourcemeta::core::SchemaIterator::end() const -> const_iterator { +auto sourcemeta::blaze::SchemaIterator::end() const -> const_iterator { return this->subschemas.end(); } -auto sourcemeta::core::SchemaIterator::cbegin() const -> const_iterator { +auto sourcemeta::blaze::SchemaIterator::cbegin() const -> const_iterator { return this->subschemas.cbegin(); } -auto sourcemeta::core::SchemaIterator::cend() const -> const_iterator { +auto sourcemeta::blaze::SchemaIterator::cend() const -> const_iterator { return this->subschemas.cend(); } -auto sourcemeta::core::SchemaIteratorFlat::begin() const -> const_iterator { +auto sourcemeta::blaze::SchemaIteratorFlat::begin() const -> const_iterator { return this->subschemas.begin(); } -auto sourcemeta::core::SchemaIteratorFlat::end() const -> const_iterator { +auto sourcemeta::blaze::SchemaIteratorFlat::end() const -> const_iterator { return this->subschemas.end(); } -auto sourcemeta::core::SchemaIteratorFlat::cbegin() const -> const_iterator { +auto sourcemeta::blaze::SchemaIteratorFlat::cbegin() const -> const_iterator { return this->subschemas.cbegin(); } -auto sourcemeta::core::SchemaIteratorFlat::cend() const -> const_iterator { +auto sourcemeta::blaze::SchemaIteratorFlat::cend() const -> const_iterator { return this->subschemas.cend(); } -auto sourcemeta::core::SchemaKeywordIterator::begin() const -> const_iterator { +auto sourcemeta::blaze::SchemaKeywordIterator::begin() const -> const_iterator { return this->entries.begin(); } -auto sourcemeta::core::SchemaKeywordIterator::end() const -> const_iterator { +auto sourcemeta::blaze::SchemaKeywordIterator::end() const -> const_iterator { return this->entries.end(); } -auto sourcemeta::core::SchemaKeywordIterator::cbegin() const -> const_iterator { +auto sourcemeta::blaze::SchemaKeywordIterator::cbegin() const + -> const_iterator { return this->entries.cbegin(); } -auto sourcemeta::core::SchemaKeywordIterator::cend() const -> const_iterator { +auto sourcemeta::blaze::SchemaKeywordIterator::cend() const -> const_iterator { return this->entries.cend(); } diff --git a/vendor/blaze/src/output/CMakeLists.txt b/vendor/blaze/src/output/CMakeLists.txt index d2e559ef5..dc5a79336 100644 --- a/vendor/blaze/src/output/CMakeLists.txt +++ b/vendor/blaze/src/output/CMakeLists.txt @@ -15,7 +15,7 @@ target_link_libraries(sourcemeta_blaze_output PUBLIC target_link_libraries(sourcemeta_blaze_output PUBLIC sourcemeta::core::jsonpointer) target_link_libraries(sourcemeta_blaze_output PUBLIC - sourcemeta::core::jsonschema) + sourcemeta::blaze::foundation) target_link_libraries(sourcemeta_blaze_output PUBLIC sourcemeta::blaze::evaluator) diff --git a/vendor/blaze/src/output/include/sourcemeta/blaze/output_simple.h b/vendor/blaze/src/output/include/sourcemeta/blaze/output_simple.h index 990c8b60d..51d288142 100644 --- a/vendor/blaze/src/output/include/sourcemeta/blaze/output_simple.h +++ b/vendor/blaze/src/output/include/sourcemeta/blaze/output_simple.h @@ -5,9 +5,9 @@ #include #endif +#include #include #include -#include #include @@ -33,7 +33,7 @@ namespace sourcemeta::blaze { /// #include /// /// #include -/// #include +/// #include /// /// #include /// #include @@ -45,9 +45,9 @@ namespace sourcemeta::blaze { /// })JSON"); /// /// const auto schema_template{sourcemeta::blaze::compile( -/// schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver, -/// sourcemeta::core::default_schema_compiler)}; +/// schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver, +/// sourcemeta::blaze::default_schema_compiler)}; /// /// const sourcemeta::core::JSON instance{5}; /// diff --git a/vendor/blaze/src/output/include/sourcemeta/blaze/output_standard.h b/vendor/blaze/src/output/include/sourcemeta/blaze/output_standard.h index ecd91bffa..543c3ce76 100644 --- a/vendor/blaze/src/output/include/sourcemeta/blaze/output_standard.h +++ b/vendor/blaze/src/output/include/sourcemeta/blaze/output_standard.h @@ -38,7 +38,7 @@ enum class StandardOutput : std::uint8_t { /// #include /// /// #include -/// #include +/// #include /// /// #include /// #include @@ -50,9 +50,9 @@ enum class StandardOutput : std::uint8_t { /// })JSON"); /// /// const auto schema_template{sourcemeta::blaze::compile( -/// schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver, -/// sourcemeta::core::default_schema_compiler)}; +/// schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver, +/// sourcemeta::blaze::default_schema_compiler)}; /// /// const sourcemeta::core::JSON instance{"foo bar"}; /// diff --git a/vendor/blaze/src/output/include/sourcemeta/blaze/output_trace.h b/vendor/blaze/src/output/include/sourcemeta/blaze/output_trace.h index e849ea7d8..75aca202f 100644 --- a/vendor/blaze/src/output/include/sourcemeta/blaze/output_trace.h +++ b/vendor/blaze/src/output/include/sourcemeta/blaze/output_trace.h @@ -5,9 +5,9 @@ #include #endif +#include #include #include -#include #include @@ -29,7 +29,7 @@ namespace sourcemeta::blaze { /// #include /// /// #include -/// #include +/// #include /// /// #include /// #include @@ -42,15 +42,15 @@ namespace sourcemeta::blaze { /// })JSON"); /// /// const auto schema_template{sourcemeta::blaze::compile( -/// schema, sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver, -/// sourcemeta::core::default_schema_compiler)}; +/// schema, sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver, +/// sourcemeta::blaze::default_schema_compiler)}; /// /// const sourcemeta::core::JSON instance{5}; /// /// sourcemeta::blaze::TraceOutput output{ -/// sourcemeta::core::schema_walker, -/// sourcemeta::core::schema_resolver, +/// sourcemeta::blaze::schema_walker, +/// sourcemeta::blaze::schema_resolver, /// [](const sourcemeta::blaze::TraceOutput::Entry &entry) { /// std::cerr << entry.name << "\n"; /// }}; @@ -71,7 +71,7 @@ class SOURCEMETA_BLAZE_OUTPUT_EXPORT TraceOutput { const sourcemeta::core::WeakPointer &evaluate_path; const std::string_view keyword_location; const sourcemeta::core::JSON &annotation; - const std::pair> + const std::pair> &vocabulary; // NOLINTEND(cppcoreguidelines-avoid-const-or-ref-data-members) }; @@ -80,11 +80,11 @@ class SOURCEMETA_BLAZE_OUTPUT_EXPORT TraceOutput { using Callback = std::function; TraceOutput( - sourcemeta::core::SchemaWalker walker, - sourcemeta::core::SchemaResolver resolver, Callback callback, + sourcemeta::blaze::SchemaWalker walker, + sourcemeta::blaze::SchemaResolver resolver, Callback callback, sourcemeta::core::WeakPointer base = sourcemeta::core::empty_weak_pointer, const std::optional< - std::reference_wrapper> &frame = + std::reference_wrapper> &frame = std::nullopt); // Prevent accidental copies @@ -105,15 +105,15 @@ class SOURCEMETA_BLAZE_OUTPUT_EXPORT TraceOutput { #if defined(_MSC_VER) #pragma warning(disable : 4251) #endif - const sourcemeta::core::SchemaWalker walker_; - const sourcemeta::core::SchemaResolver resolver_; + const sourcemeta::blaze::SchemaWalker walker_; + const sourcemeta::blaze::SchemaResolver resolver_; const sourcemeta::core::WeakPointer base_; const std::optional< - std::reference_wrapper> + std::reference_wrapper> frame_; Callback callback_; std::vector< - std::pair>> + std::pair>> vocabulary_stack_; #if defined(_MSC_VER) #pragma warning(default : 4251) diff --git a/vendor/blaze/src/output/output_simple.cc b/vendor/blaze/src/output/output_simple.cc index c8c534152..c0c49f771 100644 --- a/vendor/blaze/src/output/output_simple.cc +++ b/vendor/blaze/src/output/output_simple.cc @@ -1,6 +1,6 @@ #include -#include +#include #include // std::any_of, std::sort #include // assert diff --git a/vendor/blaze/src/output/output_trace.cc b/vendor/blaze/src/output/output_trace.cc index 79c92c7bb..eb9fd0bfb 100644 --- a/vendor/blaze/src/output/output_trace.cc +++ b/vendor/blaze/src/output/output_trace.cc @@ -1,18 +1,18 @@ #include -#include +#include #include // std::move, std::to_underlying #include // std::visit static auto try_vocabulary( const std::optional< - std::reference_wrapper> &frame, + std::reference_wrapper> &frame, const sourcemeta::core::WeakPointer &evaluate_path, - const sourcemeta::core::SchemaWalker &walker, - const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::blaze::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &resolver, const std::string &keyword_location) - -> std::pair> { + -> std::pair> { if (!frame.has_value() || evaluate_path.empty() || !evaluate_path.back().is_property()) { return {false, std::nullopt}; @@ -32,11 +32,11 @@ static auto try_vocabulary( namespace sourcemeta::blaze { TraceOutput::TraceOutput( - sourcemeta::core::SchemaWalker walker, - sourcemeta::core::SchemaResolver resolver, Callback callback, + sourcemeta::blaze::SchemaWalker walker, + sourcemeta::blaze::SchemaResolver resolver, Callback callback, sourcemeta::core::WeakPointer base, const std::optional< - std::reference_wrapper> &frame) + std::reference_wrapper> &frame) : walker_{std::move(walker)}, resolver_{std::move(resolver)}, base_{std::move(base)}, frame_{frame}, callback_{std::move(callback)} {} diff --git a/vendor/blaze/src/test/CMakeLists.txt b/vendor/blaze/src/test/CMakeLists.txt index 865d55983..6303deca0 100644 --- a/vendor/blaze/src/test/CMakeLists.txt +++ b/vendor/blaze/src/test/CMakeLists.txt @@ -18,7 +18,7 @@ target_link_libraries(sourcemeta_blaze_test PUBLIC target_link_libraries(sourcemeta_blaze_test PUBLIC sourcemeta::core::jsonpointer) target_link_libraries(sourcemeta_blaze_test PUBLIC - sourcemeta::core::jsonschema) + sourcemeta::blaze::foundation) target_link_libraries(sourcemeta_blaze_test PUBLIC sourcemeta::blaze::compiler) target_link_libraries(sourcemeta_blaze_test PUBLIC diff --git a/vendor/blaze/src/test/include/sourcemeta/blaze/test.h b/vendor/blaze/src/test/include/sourcemeta/blaze/test.h index 32ae5f604..719343aef 100644 --- a/vendor/blaze/src/test/include/sourcemeta/blaze/test.h +++ b/vendor/blaze/src/test/include/sourcemeta/blaze/test.h @@ -10,9 +10,9 @@ #include #include +#include #include #include -#include #include // std::chrono::steady_clock #include // std::size_t @@ -120,7 +120,7 @@ struct SOURCEMETA_BLAZE_TEST_EXPORT TestSuite { /// /// #include /// #include - /// #include + /// #include /// /// #include /// @@ -143,8 +143,8 @@ struct SOURCEMETA_BLAZE_TEST_EXPORT TestSuite { /// /// auto suite{sourcemeta::blaze::TestSuite::parse( /// document, tracker, std::filesystem::current_path(), - /// sourcemeta::core::schema_resolver, - /// sourcemeta::core::schema_walker, + /// sourcemeta::blaze::schema_resolver, + /// sourcemeta::blaze::schema_walker, /// sourcemeta::blaze::default_schema_compiler)}; /// /// const auto result{suite.run( @@ -171,7 +171,7 @@ struct SOURCEMETA_BLAZE_TEST_EXPORT TestSuite { /// /// #include /// #include - /// #include + /// #include /// /// #include /// @@ -189,8 +189,8 @@ struct SOURCEMETA_BLAZE_TEST_EXPORT TestSuite { /// /// const auto suite{sourcemeta::blaze::TestSuite::parse( /// document, tracker, std::filesystem::current_path(), - /// sourcemeta::core::schema_resolver, - /// sourcemeta::core::schema_walker, + /// sourcemeta::blaze::schema_resolver, + /// sourcemeta::blaze::schema_walker, /// sourcemeta::blaze::default_schema_compiler)}; /// /// assert(suite.targets.size() == 1); @@ -202,8 +202,8 @@ struct SOURCEMETA_BLAZE_TEST_EXPORT TestSuite { parse(const sourcemeta::core::JSON &document, const sourcemeta::core::PointerPositionTracker &tracker, const std::filesystem::path &base_path, - const sourcemeta::core::SchemaResolver &schema_resolver, - const sourcemeta::core::SchemaWalker &walker, const Compiler &compiler, + const sourcemeta::blaze::SchemaResolver &schema_resolver, + const sourcemeta::blaze::SchemaWalker &walker, const Compiler &compiler, std::string_view default_dialect = "", std::string_view default_id = "", const std::optional &tweaks = std::nullopt) -> TestSuite; }; diff --git a/vendor/blaze/src/test/test_parser.cc b/vendor/blaze/src/test/test_parser.cc index 6120a64dd..6f0c25774 100644 --- a/vendor/blaze/src/test/test_parser.cc +++ b/vendor/blaze/src/test/test_parser.cc @@ -89,8 +89,8 @@ auto TestCase::parse( auto TestSuite::parse(const sourcemeta::core::JSON &document, const sourcemeta::core::PointerPositionTracker &tracker, const std::filesystem::path &base_path, - const sourcemeta::core::SchemaResolver &schema_resolver, - const sourcemeta::core::SchemaWalker &walker, + const sourcemeta::blaze::SchemaResolver &schema_resolver, + const sourcemeta::blaze::SchemaWalker &walker, const Compiler &compiler, const std::string_view default_dialect, const std::string_view default_id, @@ -158,7 +158,7 @@ auto TestSuite::parse(const sourcemeta::core::JSON &document, test_suite.schemas_exhaustive.reserve(test_suite.targets.size()); for (const auto &target : test_suite.targets) { - const auto target_schema{sourcemeta::core::wrap(target)}; + const auto target_schema{sourcemeta::blaze::wrap(target)}; try { test_suite.schemas_fast.push_back(compile( @@ -167,10 +167,10 @@ auto TestSuite::parse(const sourcemeta::core::JSON &document, test_suite.schemas_exhaustive.push_back( compile(target_schema, walker, schema_resolver, compiler, Mode::Exhaustive, default_dialect, default_id, "", tweaks)); - } catch (const sourcemeta::core::SchemaReferenceError &error) { + } catch (const sourcemeta::blaze::SchemaReferenceError &error) { if (error.location() == sourcemeta::core::Pointer{"$ref"} && error.identifier() == target) { - throw sourcemeta::core::SchemaResolutionError{ + throw sourcemeta::blaze::SchemaResolutionError{ target, "Could not resolve schema under test"}; } diff --git a/vendor/core/vendor/jsonschema-2019-09/hyper-schema.json b/vendor/blaze/vendor/jsonschema-2019-09/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-2019-09/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-2019-09/links.json b/vendor/blaze/vendor/jsonschema-2019-09/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/links.json rename to vendor/blaze/vendor/jsonschema-2019-09/links.json diff --git a/vendor/core/vendor/jsonschema-2019-09/meta/applicator.json b/vendor/blaze/vendor/jsonschema-2019-09/meta/applicator.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/meta/applicator.json rename to vendor/blaze/vendor/jsonschema-2019-09/meta/applicator.json diff --git a/vendor/core/vendor/jsonschema-2019-09/meta/content.json b/vendor/blaze/vendor/jsonschema-2019-09/meta/content.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/meta/content.json rename to vendor/blaze/vendor/jsonschema-2019-09/meta/content.json diff --git a/vendor/core/vendor/jsonschema-2019-09/meta/core.json b/vendor/blaze/vendor/jsonschema-2019-09/meta/core.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/meta/core.json rename to vendor/blaze/vendor/jsonschema-2019-09/meta/core.json diff --git a/vendor/core/vendor/jsonschema-2019-09/meta/format.json b/vendor/blaze/vendor/jsonschema-2019-09/meta/format.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/meta/format.json rename to vendor/blaze/vendor/jsonschema-2019-09/meta/format.json diff --git a/vendor/core/vendor/jsonschema-2019-09/meta/hyper-schema.json b/vendor/blaze/vendor/jsonschema-2019-09/meta/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/meta/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-2019-09/meta/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-2019-09/meta/meta-data.json b/vendor/blaze/vendor/jsonschema-2019-09/meta/meta-data.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/meta/meta-data.json rename to vendor/blaze/vendor/jsonschema-2019-09/meta/meta-data.json diff --git a/vendor/core/vendor/jsonschema-2019-09/meta/validation.json b/vendor/blaze/vendor/jsonschema-2019-09/meta/validation.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/meta/validation.json rename to vendor/blaze/vendor/jsonschema-2019-09/meta/validation.json diff --git a/vendor/core/vendor/jsonschema-2019-09/output/hyper-schema.json b/vendor/blaze/vendor/jsonschema-2019-09/output/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/output/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-2019-09/output/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-2019-09/output/schema.json b/vendor/blaze/vendor/jsonschema-2019-09/output/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/output/schema.json rename to vendor/blaze/vendor/jsonschema-2019-09/output/schema.json diff --git a/vendor/core/vendor/jsonschema-2019-09/schema.json b/vendor/blaze/vendor/jsonschema-2019-09/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2019-09/schema.json rename to vendor/blaze/vendor/jsonschema-2019-09/schema.json diff --git a/vendor/core/vendor/jsonschema-2020-12/hyper-schema.json b/vendor/blaze/vendor/jsonschema-2020-12/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-2020-12/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-2020-12/links.json b/vendor/blaze/vendor/jsonschema-2020-12/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/links.json rename to vendor/blaze/vendor/jsonschema-2020-12/links.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/applicator.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/applicator.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/applicator.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/applicator.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/content.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/content.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/content.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/content.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/core.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/core.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/core.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/core.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/format-annotation.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/format-annotation.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/format-annotation.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/format-annotation.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/format-assertion.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/format-assertion.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/format-assertion.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/format-assertion.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/hyper-schema.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/meta-data.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/meta-data.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/meta-data.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/meta-data.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/unevaluated.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/unevaluated.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/unevaluated.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/unevaluated.json diff --git a/vendor/core/vendor/jsonschema-2020-12/meta/validation.json b/vendor/blaze/vendor/jsonschema-2020-12/meta/validation.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/meta/validation.json rename to vendor/blaze/vendor/jsonschema-2020-12/meta/validation.json diff --git a/vendor/core/vendor/jsonschema-2020-12/output/schema.json b/vendor/blaze/vendor/jsonschema-2020-12/output/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/output/schema.json rename to vendor/blaze/vendor/jsonschema-2020-12/output/schema.json diff --git a/vendor/core/vendor/jsonschema-2020-12/schema.json b/vendor/blaze/vendor/jsonschema-2020-12/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-2020-12/schema.json rename to vendor/blaze/vendor/jsonschema-2020-12/schema.json diff --git a/vendor/core/vendor/jsonschema-draft0/hyper-schema.json b/vendor/blaze/vendor/jsonschema-draft0/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft0/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-draft0/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-draft0/json-ref.json b/vendor/blaze/vendor/jsonschema-draft0/json-ref.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft0/json-ref.json rename to vendor/blaze/vendor/jsonschema-draft0/json-ref.json diff --git a/vendor/core/vendor/jsonschema-draft0/links.json b/vendor/blaze/vendor/jsonschema-draft0/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft0/links.json rename to vendor/blaze/vendor/jsonschema-draft0/links.json diff --git a/vendor/core/vendor/jsonschema-draft0/schema.json b/vendor/blaze/vendor/jsonschema-draft0/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft0/schema.json rename to vendor/blaze/vendor/jsonschema-draft0/schema.json diff --git a/vendor/core/vendor/jsonschema-draft1/hyper-schema.json b/vendor/blaze/vendor/jsonschema-draft1/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft1/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-draft1/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-draft1/json-ref.json b/vendor/blaze/vendor/jsonschema-draft1/json-ref.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft1/json-ref.json rename to vendor/blaze/vendor/jsonschema-draft1/json-ref.json diff --git a/vendor/core/vendor/jsonschema-draft1/links.json b/vendor/blaze/vendor/jsonschema-draft1/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft1/links.json rename to vendor/blaze/vendor/jsonschema-draft1/links.json diff --git a/vendor/core/vendor/jsonschema-draft1/schema.json b/vendor/blaze/vendor/jsonschema-draft1/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft1/schema.json rename to vendor/blaze/vendor/jsonschema-draft1/schema.json diff --git a/vendor/core/vendor/jsonschema-draft2/hyper-schema.json b/vendor/blaze/vendor/jsonschema-draft2/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft2/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-draft2/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-draft2/json-ref.json b/vendor/blaze/vendor/jsonschema-draft2/json-ref.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft2/json-ref.json rename to vendor/blaze/vendor/jsonschema-draft2/json-ref.json diff --git a/vendor/core/vendor/jsonschema-draft2/links.json b/vendor/blaze/vendor/jsonschema-draft2/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft2/links.json rename to vendor/blaze/vendor/jsonschema-draft2/links.json diff --git a/vendor/core/vendor/jsonschema-draft2/schema.json b/vendor/blaze/vendor/jsonschema-draft2/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft2/schema.json rename to vendor/blaze/vendor/jsonschema-draft2/schema.json diff --git a/vendor/core/vendor/jsonschema-draft3/hyper-schema.json b/vendor/blaze/vendor/jsonschema-draft3/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft3/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-draft3/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-draft3/json-ref.json b/vendor/blaze/vendor/jsonschema-draft3/json-ref.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft3/json-ref.json rename to vendor/blaze/vendor/jsonschema-draft3/json-ref.json diff --git a/vendor/core/vendor/jsonschema-draft3/links.json b/vendor/blaze/vendor/jsonschema-draft3/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft3/links.json rename to vendor/blaze/vendor/jsonschema-draft3/links.json diff --git a/vendor/core/vendor/jsonschema-draft3/schema.json b/vendor/blaze/vendor/jsonschema-draft3/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft3/schema.json rename to vendor/blaze/vendor/jsonschema-draft3/schema.json diff --git a/vendor/core/vendor/jsonschema-draft4/hyper-schema.json b/vendor/blaze/vendor/jsonschema-draft4/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft4/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-draft4/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-draft4/links.json b/vendor/blaze/vendor/jsonschema-draft4/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft4/links.json rename to vendor/blaze/vendor/jsonschema-draft4/links.json diff --git a/vendor/core/vendor/jsonschema-draft4/schema.json b/vendor/blaze/vendor/jsonschema-draft4/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft4/schema.json rename to vendor/blaze/vendor/jsonschema-draft4/schema.json diff --git a/vendor/core/vendor/jsonschema-draft6/hyper-schema.json b/vendor/blaze/vendor/jsonschema-draft6/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft6/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-draft6/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-draft6/links.json b/vendor/blaze/vendor/jsonschema-draft6/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft6/links.json rename to vendor/blaze/vendor/jsonschema-draft6/links.json diff --git a/vendor/core/vendor/jsonschema-draft6/schema.json b/vendor/blaze/vendor/jsonschema-draft6/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft6/schema.json rename to vendor/blaze/vendor/jsonschema-draft6/schema.json diff --git a/vendor/core/vendor/jsonschema-draft7/hyper-schema-output.json b/vendor/blaze/vendor/jsonschema-draft7/hyper-schema-output.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft7/hyper-schema-output.json rename to vendor/blaze/vendor/jsonschema-draft7/hyper-schema-output.json diff --git a/vendor/core/vendor/jsonschema-draft7/hyper-schema.json b/vendor/blaze/vendor/jsonschema-draft7/hyper-schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft7/hyper-schema.json rename to vendor/blaze/vendor/jsonschema-draft7/hyper-schema.json diff --git a/vendor/core/vendor/jsonschema-draft7/links.json b/vendor/blaze/vendor/jsonschema-draft7/links.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft7/links.json rename to vendor/blaze/vendor/jsonschema-draft7/links.json diff --git a/vendor/core/vendor/jsonschema-draft7/schema.json b/vendor/blaze/vendor/jsonschema-draft7/schema.json similarity index 100% rename from vendor/core/vendor/jsonschema-draft7/schema.json rename to vendor/blaze/vendor/jsonschema-draft7/schema.json diff --git a/vendor/core/vendor/openapi/LICENSE b/vendor/blaze/vendor/openapi/LICENSE similarity index 100% rename from vendor/core/vendor/openapi/LICENSE rename to vendor/blaze/vendor/openapi/LICENSE diff --git a/vendor/core/vendor/openapi/oas/2.0/schema/2017-08-27 b/vendor/blaze/vendor/openapi/oas/2.0/schema/2017-08-27 similarity index 100% rename from vendor/core/vendor/openapi/oas/2.0/schema/2017-08-27 rename to vendor/blaze/vendor/openapi/oas/2.0/schema/2017-08-27 diff --git a/vendor/core/vendor/openapi/oas/3.0/schema/2021-09-28 b/vendor/blaze/vendor/openapi/oas/3.0/schema/2021-09-28 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.0/schema/2021-09-28 rename to vendor/blaze/vendor/openapi/oas/3.0/schema/2021-09-28 diff --git a/vendor/core/vendor/openapi/oas/3.0/schema/2024-10-18 b/vendor/blaze/vendor/openapi/oas/3.0/schema/2024-10-18 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.0/schema/2024-10-18 rename to vendor/blaze/vendor/openapi/oas/3.0/schema/2024-10-18 diff --git a/vendor/core/vendor/openapi/oas/3.1/dialect/2024-10-25 b/vendor/blaze/vendor/openapi/oas/3.1/dialect/2024-10-25 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/dialect/2024-10-25 rename to vendor/blaze/vendor/openapi/oas/3.1/dialect/2024-10-25 diff --git a/vendor/core/vendor/openapi/oas/3.1/dialect/2024-11-10 b/vendor/blaze/vendor/openapi/oas/3.1/dialect/2024-11-10 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/dialect/2024-11-10 rename to vendor/blaze/vendor/openapi/oas/3.1/dialect/2024-11-10 diff --git a/vendor/core/vendor/openapi/oas/3.1/dialect/base b/vendor/blaze/vendor/openapi/oas/3.1/dialect/base similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/dialect/base rename to vendor/blaze/vendor/openapi/oas/3.1/dialect/base diff --git a/vendor/core/vendor/openapi/oas/3.1/meta/2024-10-25 b/vendor/blaze/vendor/openapi/oas/3.1/meta/2024-10-25 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/meta/2024-10-25 rename to vendor/blaze/vendor/openapi/oas/3.1/meta/2024-10-25 diff --git a/vendor/core/vendor/openapi/oas/3.1/meta/2024-11-10 b/vendor/blaze/vendor/openapi/oas/3.1/meta/2024-11-10 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/meta/2024-11-10 rename to vendor/blaze/vendor/openapi/oas/3.1/meta/2024-11-10 diff --git a/vendor/core/vendor/openapi/oas/3.1/meta/base b/vendor/blaze/vendor/openapi/oas/3.1/meta/base similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/meta/base rename to vendor/blaze/vendor/openapi/oas/3.1/meta/base diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2021-03-02 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-03-02 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2021-03-02 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-03-02 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2021-04-15 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-04-15 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2021-04-15 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-04-15 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2021-05-20 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-05-20 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2021-05-20 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-05-20 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2021-09-28 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-09-28 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2021-09-28 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2021-09-28 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2022-02-27 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2022-02-27 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2022-02-27 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2022-02-27 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2022-10-07 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2022-10-07 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2022-10-07 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2022-10-07 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2024-11-14 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2024-11-14 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2024-11-14 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2024-11-14 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2025-02-13 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2025-02-13 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2025-02-13 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2025-02-13 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2025-08-31 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2025-08-31 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2025-08-31 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2025-08-31 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema-base/2025-09-15 b/vendor/blaze/vendor/openapi/oas/3.1/schema-base/2025-09-15 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema-base/2025-09-15 rename to vendor/blaze/vendor/openapi/oas/3.1/schema-base/2025-09-15 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2021-03-02 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2021-03-02 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2021-03-02 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2021-03-02 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2021-04-15 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2021-04-15 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2021-04-15 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2021-04-15 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2021-05-20 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2021-05-20 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2021-05-20 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2021-05-20 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2021-09-28 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2021-09-28 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2021-09-28 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2021-09-28 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2022-02-27 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2022-02-27 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2022-02-27 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2022-02-27 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2022-10-07 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2022-10-07 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2022-10-07 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2022-10-07 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2024-11-14 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2024-11-14 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2024-11-14 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2024-11-14 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2025-02-13 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2025-02-13 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2025-02-13 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2025-02-13 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2025-08-31 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2025-08-31 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2025-08-31 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2025-08-31 diff --git a/vendor/core/vendor/openapi/oas/3.1/schema/2025-09-15 b/vendor/blaze/vendor/openapi/oas/3.1/schema/2025-09-15 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.1/schema/2025-09-15 rename to vendor/blaze/vendor/openapi/oas/3.1/schema/2025-09-15 diff --git a/vendor/core/vendor/openapi/oas/3.2/dialect/2025-09-17 b/vendor/blaze/vendor/openapi/oas/3.2/dialect/2025-09-17 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.2/dialect/2025-09-17 rename to vendor/blaze/vendor/openapi/oas/3.2/dialect/2025-09-17 diff --git a/vendor/core/vendor/openapi/oas/3.2/meta/2025-09-17 b/vendor/blaze/vendor/openapi/oas/3.2/meta/2025-09-17 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.2/meta/2025-09-17 rename to vendor/blaze/vendor/openapi/oas/3.2/meta/2025-09-17 diff --git a/vendor/core/vendor/openapi/oas/3.2/schema-base/2025-09-17 b/vendor/blaze/vendor/openapi/oas/3.2/schema-base/2025-09-17 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.2/schema-base/2025-09-17 rename to vendor/blaze/vendor/openapi/oas/3.2/schema-base/2025-09-17 diff --git a/vendor/core/vendor/openapi/oas/3.2/schema/2025-09-17 b/vendor/blaze/vendor/openapi/oas/3.2/schema/2025-09-17 similarity index 100% rename from vendor/core/vendor/openapi/oas/3.2/schema/2025-09-17 rename to vendor/blaze/vendor/openapi/oas/3.2/schema/2025-09-17 diff --git a/vendor/core/CMakeLists.txt b/vendor/core/CMakeLists.txt index 304f556ec..6c8c05bce 100644 --- a/vendor/core/CMakeLists.txt +++ b/vendor/core/CMakeLists.txt @@ -10,6 +10,7 @@ option(SOURCEMETA_CORE_LANG_PARALLEL "Build the Sourcemeta Core language paralle option(SOURCEMETA_CORE_LANG_NUMERIC "Build the Sourcemeta Core language numeric library" ON) option(SOURCEMETA_CORE_LANG_ERROR "Build the Sourcemeta Core language error library" ON) option(SOURCEMETA_CORE_LANG_OPTIONS "Build the Sourcemeta Core Options library" ON) +option(SOURCEMETA_CORE_LANG_TEXT "Build the Sourcemeta Core language text library" ON) option(SOURCEMETA_CORE_UNICODE "Build the Sourcemeta Core Unicode library" ON) option(SOURCEMETA_CORE_PUNYCODE "Build the Sourcemeta Core Punycode library" ON) option(SOURCEMETA_CORE_TIME "Build the Sourcemeta Core time library" ON) @@ -18,18 +19,18 @@ option(SOURCEMETA_CORE_CRYPTO_USE_SYSTEM_OPENSSL "Use system OpenSSL for the Sou option(SOURCEMETA_CORE_REGEX "Build the Sourcemeta Core Regex library" ON) option(SOURCEMETA_CORE_IP "Build the Sourcemeta Core IP library" ON) option(SOURCEMETA_CORE_DNS "Build the Sourcemeta Core DNS library" ON) +option(SOURCEMETA_CORE_EMAIL "Build the Sourcemeta Core Email library" ON) option(SOURCEMETA_CORE_URI "Build the Sourcemeta Core URI library" ON) option(SOURCEMETA_CORE_URITEMPLATE "Build the Sourcemeta Core URI Template library" ON) option(SOURCEMETA_CORE_JSON "Build the Sourcemeta Core JSON library" ON) -option(SOURCEMETA_CORE_JSONSCHEMA "Build the Sourcemeta Core JSON Schema library" ON) option(SOURCEMETA_CORE_JSONPOINTER "Build the Sourcemeta Core JSON Pointer library" ON) option(SOURCEMETA_CORE_JSONL "Build the Sourcemeta Core JSONL library" ON) option(SOURCEMETA_CORE_YAML "Build the Sourcemeta Core YAML library" ON) +option(SOURCEMETA_CORE_JSONRPC "Build the Sourcemeta Core JSON-RPC library" ON) option(SOURCEMETA_CORE_SEMVER "Build the Sourcemeta Core SemVer library" ON) option(SOURCEMETA_CORE_GZIP "Build the Sourcemeta Core GZIP library" ON) option(SOURCEMETA_CORE_HTML "Build the Sourcemeta Core HTML library" ON) option(SOURCEMETA_CORE_MARKDOWN "Build the Sourcemeta Core Markdown library" ON) -option(SOURCEMETA_CORE_EXTENSION_EDITORSCHEMA "Build the Sourcemeta Core EditorSchema library" ON) option(SOURCEMETA_CORE_TESTS "Build the Sourcemeta Core tests" OFF) option(SOURCEMETA_CORE_BENCHMARK "Build the Sourcemeta Core benchmarks" OFF) option(SOURCEMETA_CORE_DOCS "Build the Sourcemeta Core docs" OFF) @@ -93,6 +94,10 @@ if(SOURCEMETA_CORE_LANG_OPTIONS) add_subdirectory(src/lang/options) endif() +if(SOURCEMETA_CORE_LANG_TEXT) + add_subdirectory(src/lang/text) +endif() + if(SOURCEMETA_CORE_UNICODE) add_subdirectory(src/core/unicode) endif() @@ -125,6 +130,10 @@ if(SOURCEMETA_CORE_DNS) add_subdirectory(src/core/dns) endif() +if(SOURCEMETA_CORE_EMAIL) + add_subdirectory(src/core/email) +endif() + if(SOURCEMETA_CORE_URI) add_subdirectory(src/core/uri) endif() @@ -141,10 +150,6 @@ if(SOURCEMETA_CORE_JSONPOINTER) add_subdirectory(src/core/jsonpointer) endif() -if(SOURCEMETA_CORE_JSONSCHEMA) - add_subdirectory(src/core/jsonschema) -endif() - if(SOURCEMETA_CORE_GZIP) find_package(LibDeflate REQUIRED) find_package(ZLIB REQUIRED) @@ -159,6 +164,10 @@ if(SOURCEMETA_CORE_YAML) add_subdirectory(src/core/yaml) endif() +if(SOURCEMETA_CORE_JSONRPC) + add_subdirectory(src/core/jsonrpc) +endif() + if(SOURCEMETA_CORE_SEMVER) add_subdirectory(src/core/semver) endif() @@ -172,10 +181,6 @@ if(SOURCEMETA_CORE_MARKDOWN) add_subdirectory(src/core/markdown) endif() -if(SOURCEMETA_CORE_EXTENSION_EDITORSCHEMA) - add_subdirectory(src/extension/editorschema) -endif() - if(SOURCEMETA_CORE_ADDRESS_SANITIZER) sourcemeta_sanitizer(TYPE address) elseif(SOURCEMETA_CORE_UNDEFINED_SANITIZER) @@ -231,6 +236,10 @@ if(SOURCEMETA_CORE_TESTS) add_subdirectory(test/options) endif() + if(SOURCEMETA_CORE_LANG_TEXT) + add_subdirectory(test/text) + endif() + if(SOURCEMETA_CORE_UNICODE) add_subdirectory(test/unicode) endif() @@ -259,6 +268,10 @@ if(SOURCEMETA_CORE_TESTS) add_subdirectory(test/dns) endif() + if(SOURCEMETA_CORE_EMAIL) + add_subdirectory(test/email) + endif() + if(SOURCEMETA_CORE_URI) add_subdirectory(test/uri) endif() @@ -275,10 +288,6 @@ if(SOURCEMETA_CORE_TESTS) add_subdirectory(test/jsonpointer) endif() - if(SOURCEMETA_CORE_JSONSCHEMA) - add_subdirectory(test/jsonschema) - endif() - if(SOURCEMETA_CORE_GZIP) add_subdirectory(test/gzip) endif() @@ -291,6 +300,10 @@ if(SOURCEMETA_CORE_TESTS) add_subdirectory(test/yaml) endif() + if(SOURCEMETA_CORE_JSONRPC) + add_subdirectory(test/jsonrpc) + endif() + if(SOURCEMETA_CORE_SEMVER) add_subdirectory(test/semver) endif() @@ -303,10 +316,6 @@ if(SOURCEMETA_CORE_TESTS) add_subdirectory(test/markdown) endif() - if(SOURCEMETA_CORE_EXTENSION_EDITORSCHEMA) - add_subdirectory(test/editorschema) - endif() - if(PROJECT_IS_TOP_LEVEL) # Otherwise we need the child project to link # against the sanitizers too. diff --git a/vendor/core/DEPENDENCIES b/vendor/core/DEPENDENCIES index 469212bdf..6e43cf6ba 100644 --- a/vendor/core/DEPENDENCIES +++ b/vendor/core/DEPENDENCIES @@ -3,17 +3,6 @@ jsontestsuite https://github.com/nst/JSONTestSuite d64aefb55228d9584d3e5b2433f72 yaml-test-suite https://github.com/yaml/yaml-test-suite data-2022-01-17 cmark-gfm https://github.com/github/cmark-gfm 587a12bb54d95ac37241377e6ddc93ea0e45439b zlib https://github.com/madler/zlib v1.3.2 -jsonschema-2020-12 https://github.com/json-schema-org/json-schema-spec 769daad75a9553562333a8937a187741cb708c72 -jsonschema-2019-09 https://github.com/json-schema-org/json-schema-spec 41014ea723120ce70b314d72f863c6929d9f3cfd -jsonschema-draft7 https://github.com/json-schema-org/json-schema-spec 567f768506aaa33a38e552c85bf0586029ef1b32 -jsonschema-draft6 https://github.com/json-schema-org/json-schema-spec 59ed5f6fc6f6386e23ca51d7f31d7fe9cf696713 -jsonschema-draft4 https://github.com/json-schema-org/json-schema-spec 955d185db846cfca84269d9d711b10f4f3353d38 -jsonschema-draft3 https://github.com/json-schema-org/json-schema-spec 89912ad69fe15e006e8336a59e93bf7a1e46fa54 -jsonschema-draft2 https://github.com/json-schema-org/json-schema-spec 707f65070d09fe5baa1315bce4d31a66ff124171 -jsonschema-draft1 https://github.com/json-schema-org/json-schema-spec 2072feec9fc7a7ff0b2bb5b02c2d6742c554cc4a -jsonschema-draft0 https://github.com/json-schema-org/json-schema-spec 7ea575aef8d5c0183acbe6ff65b4c98ee9c236ec -openapi https://github.com/OAI/OpenAPI-Specification 74906beddddab9e555337031b2a8d8e9338c4972 -referencing-suite https://github.com/python-jsonschema/referencing-suite 61c4cc202b1e96ed5adcaf4842a595f68d659212 uritemplate-test https://github.com/uri-templates/uritemplate-test 1eb27ab4462b9e5819dc47db99044f5fd1fa9bc7 pyca-cryptography https://github.com/pyca/cryptography c4935a7021af37c38e0684b0546c1b4378518342 pcre2 https://github.com/PCRE2Project/pcre2 pcre2-10.47 diff --git a/vendor/core/config.cmake.in b/vendor/core/config.cmake.in index 0dc4fca55..18a7effdb 100644 --- a/vendor/core/config.cmake.in +++ b/vendor/core/config.cmake.in @@ -16,20 +16,21 @@ if(NOT SOURCEMETA_CORE_COMPONENTS) list(APPEND SOURCEMETA_CORE_COMPONENTS regex) list(APPEND SOURCEMETA_CORE_COMPONENTS ip) list(APPEND SOURCEMETA_CORE_COMPONENTS dns) + list(APPEND SOURCEMETA_CORE_COMPONENTS email) list(APPEND SOURCEMETA_CORE_COMPONENTS uri) list(APPEND SOURCEMETA_CORE_COMPONENTS uritemplate) list(APPEND SOURCEMETA_CORE_COMPONENTS json) list(APPEND SOURCEMETA_CORE_COMPONENTS jsonl) list(APPEND SOURCEMETA_CORE_COMPONENTS jsonpointer) - list(APPEND SOURCEMETA_CORE_COMPONENTS jsonschema) list(APPEND SOURCEMETA_CORE_COMPONENTS yaml) + list(APPEND SOURCEMETA_CORE_COMPONENTS jsonrpc) list(APPEND SOURCEMETA_CORE_COMPONENTS semver) list(APPEND SOURCEMETA_CORE_COMPONENTS gzip) list(APPEND SOURCEMETA_CORE_COMPONENTS html) list(APPEND SOURCEMETA_CORE_COMPONENTS markdown) - list(APPEND SOURCEMETA_CORE_COMPONENTS editorschema) list(APPEND SOURCEMETA_CORE_COMPONENTS error) list(APPEND SOURCEMETA_CORE_COMPONENTS options) + list(APPEND SOURCEMETA_CORE_COMPONENTS text) endif() include(CMakeFindDependencyMacro) @@ -66,6 +67,10 @@ foreach(component ${SOURCEMETA_CORE_COMPONENTS}) include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_ip.cmake") elseif(component STREQUAL "dns") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_dns.cmake") + elseif(component STREQUAL "email") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_ip.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_dns.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_email.cmake") elseif(component STREQUAL "uri") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_io.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_ip.cmake") @@ -97,15 +102,6 @@ foreach(component ${SOURCEMETA_CORE_COMPONENTS}) include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_unicode.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_json.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_jsonpointer.cmake") - elseif(component STREQUAL "jsonschema") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_ip.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_uri.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_numeric.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_io.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_unicode.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_json.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_jsonpointer.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_jsonschema.cmake") elseif(component STREQUAL "yaml") find_dependency(PCRE2 CONFIG) include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_regex.cmake") @@ -117,6 +113,13 @@ foreach(component ${SOURCEMETA_CORE_COMPONENTS}) include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_json.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_jsonpointer.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_yaml.cmake") + elseif(component STREQUAL "jsonrpc") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_preprocessor.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_numeric.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_io.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_unicode.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_json.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_jsonrpc.cmake") elseif(component STREQUAL "semver") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_preprocessor.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_semver.cmake") @@ -130,20 +133,12 @@ foreach(component ${SOURCEMETA_CORE_COMPONENTS}) elseif(component STREQUAL "markdown") find_dependency(cmark_gfm CONFIG) include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_markdown.cmake") - elseif(component STREQUAL "editorschema") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_ip.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_uri.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_numeric.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_io.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_unicode.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_json.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_jsonpointer.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_jsonschema.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_editorschema.cmake") elseif(component STREQUAL "error") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_error.cmake") elseif(component STREQUAL "options") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_options.cmake") + elseif(component STREQUAL "text") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_text.cmake") else() message(FATAL_ERROR "Unknown Sourcemeta Core component: ${component}") endif() diff --git a/vendor/core/src/core/email/CMakeLists.txt b/vendor/core/src/core/email/CMakeLists.txt new file mode 100644 index 000000000..7330454c2 --- /dev/null +++ b/vendor/core/src/core/email/CMakeLists.txt @@ -0,0 +1,11 @@ +sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME email + SOURCES email.cc) + +if(SOURCEMETA_CORE_INSTALL) + sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME email) +endif() + +target_link_libraries(sourcemeta_core_email + PRIVATE sourcemeta::core::dns) +target_link_libraries(sourcemeta_core_email + PRIVATE sourcemeta::core::ip) diff --git a/vendor/core/src/core/email/email.cc b/vendor/core/src/core/email/email.cc new file mode 100644 index 000000000..12a15472f --- /dev/null +++ b/vendor/core/src/core/email/email.cc @@ -0,0 +1,208 @@ +#include + +#include +#include + +namespace sourcemeta::core { + +// RFC 5321 §4.1.2: atext = ALPHA / DIGIT / "!" / "#" / "$" / "%" / +// "&" / "'" / "*" / "+" / "-" / "/" / "=" / "?" / "^" / "_" / "`" / +// "{" / "|" / "}" / "~" +static constexpr auto is_atext(const char character) -> bool { + switch (character) { + case '!': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '*': + case '+': + case '-': + case '/': + case '=': + case '?': + case '^': + case '_': + case '`': + case '{': + case '|': + case '}': + case '~': + return true; + default: + return (character >= 'A' && character <= 'Z') || + (character >= 'a' && character <= 'z') || + (character >= '0' && character <= '9'); + } +} + +// RFC 5321 §4.1.2: qtextSMTP = %d32-33 / %d35-91 / %d93-126 +static constexpr auto is_qtext_smtp(const unsigned char character) -> bool { + return (character >= 32 && character <= 33) || + (character >= 35 && character <= 91) || + (character >= 93 && character <= 126); +} + +// RFC 5321 §4.1.2: Let-dig = ALPHA / DIGIT +static constexpr auto is_let_dig(const char character) -> bool { + return (character >= 'A' && character <= 'Z') || + (character >= 'a' && character <= 'z') || + (character >= '0' && character <= '9'); +} + +// RFC 5321 §4.1.3: dcontent = %d33-90 / %d94-126 +static constexpr auto is_dcontent(const unsigned char character) -> bool { + return (character >= 33 && character <= 90) || + (character >= 94 && character <= 126); +} + +// RFC 5321 §4.1.2: Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig +// RFC 5321 §4.1.3: Standardized-tag = Ldh-str +static constexpr auto is_ldh_str(const std::string_view value) -> bool { + if (value.empty() || !is_let_dig(value.back())) { + return false; + } + for (std::string_view::size_type position{0}; position + 1 < value.size(); + position += 1) { + const auto character{value[position]}; + if (!is_let_dig(character) && character != '-') { + return false; + } + } + return true; +} + +// RFC 5234 §2.3: ABNF literal strings are case-insensitive by default +// RFC 5321 §4.1.3: IPv6-address-literal prefix is the literal "IPv6:" +static constexpr auto matches_ipv6_tag(const std::string_view value) -> bool { + return value.size() >= 5 && (value[0] == 'I' || value[0] == 'i') && + (value[1] == 'P' || value[1] == 'p') && + (value[2] == 'v' || value[2] == 'V') && value[3] == '6' && + value[4] == ':'; +} + +// RFC 5321 §4.1.3: General-address-literal = Standardized-tag ":" 1*dcontent +static constexpr auto is_general_address_literal(const std::string_view value) + -> bool { + const auto colon_position{value.find(':')}; + if (colon_position == std::string_view::npos) { + return false; + } + if (!is_ldh_str(value.substr(0, colon_position))) { + return false; + } + const auto content{value.substr(colon_position + 1)}; + if (content.empty()) { + return false; + } + for (const auto character : content) { + if (!is_dcontent(static_cast(character))) { + return false; + } + } + return true; +} + +auto is_email(const std::string_view value) -> bool { + if (value.empty()) { + return false; + } + + std::string_view::size_type position{0}; + + if (value[0] == '"') { + // RFC 5321 §4.1.2: Quoted-string = DQUOTE *QcontentSMTP DQUOTE + position = 1; + while (position < value.size() && value[position] != '"') { + if (value[position] == '\\') { + // RFC 5321 §4.1.2: quoted-pairSMTP = %d92 %d32-126 + position += 1; + if (position >= value.size()) { + return false; + } + const auto body{static_cast(value[position])}; + if (body < 32 || body > 126) { + return false; + } + position += 1; + } else { + if (!is_qtext_smtp(static_cast(value[position]))) { + return false; + } + position += 1; + } + } + if (position >= value.size()) { + return false; + } + // value[position] is the closing DQUOTE + position += 1; + } else { + // RFC 5321 §4.1.2: Dot-string = Atom *("." Atom), Atom = 1*atext + bool previous_was_dot{false}; + bool atom_started{false}; + while (position < value.size() && value[position] != '@') { + const auto character{value[position]}; + if (character == '.') { + if (!atom_started || previous_was_dot) { + return false; + } + previous_was_dot = true; + atom_started = false; + } else if (is_atext(character)) { + previous_was_dot = false; + atom_started = true; + } else { + return false; + } + position += 1; + } + if (position == 0 || previous_was_dot) { + return false; + } + } + + // RFC 5321 §4.5.3.1.1: Local-part octet limit is 64 + if (position > 64) { + return false; + } + + // RFC 5321 §4.1.2: Mailbox = Local-part "@" ( Domain / address-literal ) + if (position >= value.size() || value[position] != '@') { + return false; + } + + const auto domain{value.substr(position + 1)}; + + // RFC 5321 §4.1.3: address-literal = "[" ( IPv4 / IPv6 / General ) "]" + if (!domain.empty() && domain.front() == '[') { + if (domain.back() != ']') { + return false; + } + // RFC 5321 §4.5.3.1.2: 255-octet cap on a domain "name or number" + if (domain.size() > 255) { + return false; + } + const auto inner{domain.substr(1, domain.size() - 2)}; + // RFC 5321 §4.1.3: IPv6-address-literal = "IPv6:" IPv6-addr + if (matches_ipv6_tag(inner) && is_ipv6(inner.substr(5))) { + return true; + } + // RFC 5234 §3.2: ABNF alternatives are unordered. A failed IPv6 match + // falls through to IPv4 or General-address-literal. + // RFC 5321 §4.1.3: IPv4-address-literal = Snum 3("." Snum) has no ":", + // General-address-literal requires ":" + if (inner.find(':') == std::string_view::npos) { + return is_ipv4(inner); + } + return is_general_address_literal(inner); + } + + // RFC 5321 §4.1.2 Domain matches is_hostname (RFC 1123 §2.1) by + // grammar, by 63-octet label cap (RFC 1035 §2.3.4), and by + // 255-octet total cap (RFC 5321 §4.5.3.1.2) + return is_hostname(domain); +} + +} // namespace sourcemeta::core diff --git a/vendor/core/src/core/email/include/sourcemeta/core/email.h b/vendor/core/src/core/email/include/sourcemeta/core/email.h new file mode 100644 index 000000000..d65b2847b --- /dev/null +++ b/vendor/core/src/core/email/include/sourcemeta/core/email.h @@ -0,0 +1,41 @@ +#ifndef SOURCEMETA_CORE_EMAIL_H_ +#define SOURCEMETA_CORE_EMAIL_H_ + +#ifndef SOURCEMETA_CORE_EMAIL_EXPORT +#include +#endif + +#include // std::string_view + +/// @defgroup email Email +/// @brief E-mail address validation per RFC 5321. +/// +/// This functionality is included as follows: +/// +/// ```cpp +/// #include +/// ``` + +namespace sourcemeta::core { + +/// @ingroup email +/// Check whether the given string is a valid `Mailbox` per RFC 5321 +/// Section 4.1.2, under the length constraints from Section 4.5.3.1. +/// For example: +/// +/// ```cpp +/// #include +/// +/// #include +/// +/// assert(sourcemeta::core::is_email("user@example.com")); +/// assert(sourcemeta::core::is_email("\"a b\"@example.com")); +/// assert(sourcemeta::core::is_email("user@[192.168.1.1]")); +/// assert(!sourcemeta::core::is_email("plain")); +/// ``` +SOURCEMETA_CORE_EMAIL_EXPORT +auto is_email(const std::string_view value) -> bool; + +} // namespace sourcemeta::core + +#endif diff --git a/vendor/core/src/core/jsonrpc/CMakeLists.txt b/vendor/core/src/core/jsonrpc/CMakeLists.txt new file mode 100644 index 000000000..436c7595c --- /dev/null +++ b/vendor/core/src/core/jsonrpc/CMakeLists.txt @@ -0,0 +1,8 @@ +sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME jsonrpc + SOURCES jsonrpc.cc) + +target_link_libraries(sourcemeta_core_jsonrpc PUBLIC sourcemeta::core::json) + +if(SOURCEMETA_CORE_INSTALL) + sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME jsonrpc) +endif() diff --git a/vendor/core/src/core/jsonrpc/include/sourcemeta/core/jsonrpc.h b/vendor/core/src/core/jsonrpc/include/sourcemeta/core/jsonrpc.h new file mode 100644 index 000000000..3ac86a8ae --- /dev/null +++ b/vendor/core/src/core/jsonrpc/include/sourcemeta/core/jsonrpc.h @@ -0,0 +1,312 @@ +#ifndef SOURCEMETA_CORE_JSONRPC_H_ +#define SOURCEMETA_CORE_JSONRPC_H_ + +#ifndef SOURCEMETA_CORE_JSONRPC_EXPORT +#include +#endif + +#include + +#include // std::int64_t +#include // std::optional, std::nullopt +#include // std::string_view + +/// @defgroup jsonrpc JSON-RPC +/// @brief An implementation of the JSON-RPC 2.0 specification. +/// +/// This functionality is included as follows: +/// +/// ```cpp +/// #include +/// ``` + +namespace sourcemeta::core { + +/// @ingroup jsonrpc +/// The pre-defined JSON-RPC 2.0 error code for invalid JSON received by the +/// server. +constexpr std::int64_t JSONRPC_CODE_PARSE = -32700; + +/// @ingroup jsonrpc +/// The pre-defined JSON-RPC 2.0 error code for a malformed request envelope. +constexpr std::int64_t JSONRPC_CODE_INVALID_REQUEST = -32600; + +/// @ingroup jsonrpc +/// The pre-defined JSON-RPC 2.0 error code for unknown methods. +constexpr std::int64_t JSONRPC_CODE_METHOD_NOT_FOUND = -32601; + +/// @ingroup jsonrpc +/// The pre-defined JSON-RPC 2.0 error code for invalid method parameters. +constexpr std::int64_t JSONRPC_CODE_INVALID_PARAMS = -32602; + +/// @ingroup jsonrpc +/// The pre-defined JSON-RPC 2.0 error code for internal server errors. +constexpr std::int64_t JSONRPC_CODE_INTERNAL = -32603; + +/// @ingroup jsonrpc +/// The lower bound of the JSON-RPC 2.0 reserved range for +/// implementation-defined server errors. +constexpr std::int64_t JSONRPC_CODE_SERVER_ERROR_MIN = -32099; + +/// @ingroup jsonrpc +/// The upper bound of the JSON-RPC 2.0 reserved range for +/// implementation-defined server errors. +constexpr std::int64_t JSONRPC_CODE_SERVER_ERROR_MAX = -32000; + +/// @ingroup jsonrpc +/// Check whether the given code lies within the JSON-RPC 2.0 reserved range +/// for implementation-defined server errors. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// assert(sourcemeta::core::jsonrpc_is_server_error(-32050)); +/// assert(!sourcemeta::core::jsonrpc_is_server_error(-32603)); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_is_server_error(const std::int64_t code) -> bool; + +/// @ingroup jsonrpc +/// Extract the request identifier from a JSON-RPC 2.0 envelope. Returns a +/// pointer to the identifier (string, number, or null per the specification) +/// or `nullptr` when the field is missing or not one of those types. For +/// example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto request{sourcemeta::core::parse_json( +/// R"({ "jsonrpc": "2.0", "id": 7, "method": "ping" })")}; +/// const auto *identifier{sourcemeta::core::jsonrpc_request_id(request)}; +/// assert(identifier != nullptr); +/// assert(identifier->to_integer() == 7); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_request_id(const sourcemeta::core::JSON &request) + -> const sourcemeta::core::JSON *; + +/// @ingroup jsonrpc +/// Check whether the given JSON value is a well-formed JSON-RPC 2.0 request. +/// For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto request{sourcemeta::core::parse_json( +/// R"({ "jsonrpc": "2.0", "id": 1, "method": "ping" })")}; +/// assert(sourcemeta::core::jsonrpc_is_request(request)); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_is_request(const sourcemeta::core::JSON &request) -> bool; + +/// @ingroup jsonrpc +/// Extract the method name from a JSON-RPC 2.0 envelope, or an empty view +/// when the method field is missing or not a string. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto request{sourcemeta::core::parse_json( +/// R"({ "jsonrpc": "2.0", "id": 1, "method": "ping" })")}; +/// assert(sourcemeta::core::jsonrpc_method(request) == "ping"); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_method(const sourcemeta::core::JSON &request) -> std::string_view; + +/// @ingroup jsonrpc +/// Extract the params from a JSON-RPC 2.0 envelope, or `nullptr` when the +/// value is missing or not an object or array. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto request{sourcemeta::core::parse_json(R"JSON({ +/// "jsonrpc": "2.0", +/// "id": 1, +/// "method": "subtract", +/// "params": [ 42, 23 ] +/// })JSON")}; +/// const auto *parameters{sourcemeta::core::jsonrpc_params(request)}; +/// assert(parameters != nullptr); +/// assert(parameters->is_array()); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_params(const sourcemeta::core::JSON &request) + -> const sourcemeta::core::JSON *; + +/// @ingroup jsonrpc +/// Check whether the given JSON value is a well-formed JSON-RPC 2.0 +/// notification (a request without an identifier). For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto request{sourcemeta::core::parse_json( +/// R"({ "jsonrpc": "2.0", "method": "notifications/initialized" })")}; +/// assert(sourcemeta::core::jsonrpc_is_notification(request)); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_is_notification(const sourcemeta::core::JSON &request) -> bool; + +/// @ingroup jsonrpc +/// Construct a successful JSON-RPC 2.0 response envelope with the given +/// identifier and result. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// #include +/// +/// const auto identifier{sourcemeta::core::JSON{1}}; +/// auto result{sourcemeta::core::JSON::make_object()}; +/// result.assign("foo", sourcemeta::core::JSON{42}); +/// const auto envelope{ +/// sourcemeta::core::jsonrpc_make_success(identifier, std::move(result))}; +/// assert(envelope.at("id").to_integer() == 1); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_success(const sourcemeta::core::JSON &identifier, + sourcemeta::core::JSON result) + -> sourcemeta::core::JSON; + +/// @ingroup jsonrpc +/// Construct a successful JSON-RPC 2.0 response envelope with the given +/// identifier and an empty object result. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto identifier{sourcemeta::core::JSON{1}}; +/// const auto envelope{ +/// sourcemeta::core::jsonrpc_make_success_empty(identifier)}; +/// assert(envelope.at("result").is_object()); +/// assert(envelope.at("result").empty()); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_success_empty(const sourcemeta::core::JSON &identifier) + -> sourcemeta::core::JSON; + +/// @ingroup jsonrpc +/// Construct a JSON-RPC 2.0 error response envelope. Passing `nullptr` for the +/// identifier writes an `"id": null` member, as the specification requires +/// when the originating request could not be parsed. The optional data +/// carries implementation-specific extra information. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto identifier{sourcemeta::core::JSON{1}}; +/// const auto envelope{sourcemeta::core::jsonrpc_make_error( +/// &identifier, -32000, "Server error")}; +/// assert(envelope.at("error").at("code").to_integer() == -32000); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_error(const sourcemeta::core::JSON *identifier, + const std::int64_t code, const std::string_view message, + std::optional data = + std::nullopt) -> sourcemeta::core::JSON; + +/// @ingroup jsonrpc +/// Get the canonical JSON-RPC 2.0 parse-error envelope. The returned reference +/// is to a static instance that lives for the duration of the program. For +/// example: +/// +/// ```cpp +/// #include +/// #include +/// +/// const auto &envelope{sourcemeta::core::jsonrpc_make_error_parse()}; +/// assert(envelope.at("error").at("code").to_integer() == -32700); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_error_parse() -> const sourcemeta::core::JSON &; + +/// @ingroup jsonrpc +/// Construct a JSON-RPC 2.0 invalid-request error envelope, optionally +/// carrying the offending request identifier. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// const auto envelope{sourcemeta::core::jsonrpc_make_error_invalid_request()}; +/// assert(envelope.at("error").at("code").to_integer() == -32600); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_error_invalid_request( + const sourcemeta::core::JSON *identifier = nullptr) + -> sourcemeta::core::JSON; + +/// @ingroup jsonrpc +/// Construct a JSON-RPC 2.0 method-not-found error envelope for the given +/// request identifier. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto identifier{sourcemeta::core::JSON{2}}; +/// const auto envelope{ +/// sourcemeta::core::jsonrpc_make_error_method_not_found(identifier)}; +/// assert(envelope.at("error").at("code").to_integer() == -32601); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_error_method_not_found( + const sourcemeta::core::JSON &identifier) -> sourcemeta::core::JSON; + +/// @ingroup jsonrpc +/// Construct a JSON-RPC 2.0 invalid-params error envelope for the given +/// request identifier, optionally carrying implementation-specific data. For +/// example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto identifier{sourcemeta::core::JSON{"req-7"}}; +/// const auto envelope{ +/// sourcemeta::core::jsonrpc_make_error_invalid_params(identifier)}; +/// assert(envelope.at("error").at("code").to_integer() == -32602); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_error_invalid_params( + const sourcemeta::core::JSON &identifier, + std::optional data = std::nullopt) + -> sourcemeta::core::JSON; + +/// @ingroup jsonrpc +/// Construct a JSON-RPC 2.0 internal-error envelope, optionally carrying the +/// offending request identifier. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// const auto envelope{sourcemeta::core::jsonrpc_make_error_internal()}; +/// assert(envelope.at("error").at("code").to_integer() == -32603); +/// ``` +SOURCEMETA_CORE_JSONRPC_EXPORT +auto jsonrpc_make_error_internal(const sourcemeta::core::JSON *identifier = + nullptr) -> sourcemeta::core::JSON; + +} // namespace sourcemeta::core + +#endif diff --git a/vendor/core/src/core/jsonrpc/jsonrpc.cc b/vendor/core/src/core/jsonrpc/jsonrpc.cc new file mode 100644 index 000000000..8aa10ade4 --- /dev/null +++ b/vendor/core/src/core/jsonrpc/jsonrpc.cc @@ -0,0 +1,198 @@ +#include + +#include + +#include // std::int64_t +#include // std::optional, std::nullopt +#include // std::string +#include // std::string_view +#include // std::move + +namespace { + +const auto JSONRPC_HASH_ID{ + sourcemeta::core::JSON::make_object().as_object().hash("id")}; +const auto JSONRPC_HASH_JSONRPC{ + sourcemeta::core::JSON::make_object().as_object().hash("jsonrpc")}; +const auto JSONRPC_HASH_METHOD{ + sourcemeta::core::JSON::make_object().as_object().hash("method")}; +const auto JSONRPC_HASH_RESULT{ + sourcemeta::core::JSON::make_object().as_object().hash("result")}; +const auto JSONRPC_HASH_ERROR{ + sourcemeta::core::JSON::make_object().as_object().hash("error")}; +const auto JSONRPC_HASH_CODE{ + sourcemeta::core::JSON::make_object().as_object().hash("code")}; +const auto JSONRPC_HASH_MESSAGE{ + sourcemeta::core::JSON::make_object().as_object().hash("message")}; +const auto JSONRPC_HASH_DATA{ + sourcemeta::core::JSON::make_object().as_object().hash("data")}; +const auto JSONRPC_HASH_PARAMS{ + sourcemeta::core::JSON::make_object().as_object().hash("params")}; + +} // namespace + +namespace sourcemeta::core { + +auto jsonrpc_is_server_error(const std::int64_t code) -> bool { + return code >= JSONRPC_CODE_SERVER_ERROR_MIN && + code <= JSONRPC_CODE_SERVER_ERROR_MAX; +} + +auto jsonrpc_request_id(const sourcemeta::core::JSON &request) + -> const sourcemeta::core::JSON * { + if (!request.is_object()) { + return nullptr; + } + const auto *identifier{request.try_at("id", JSONRPC_HASH_ID)}; + if (identifier == nullptr) { + return nullptr; + } + if (!identifier->is_string() && !identifier->is_number() && + !identifier->is_null()) { + return nullptr; + } + return identifier; +} + +auto jsonrpc_is_request(const sourcemeta::core::JSON &request) -> bool { + if (!request.is_object()) { + return false; + } + const auto *jsonrpc_field{request.try_at("jsonrpc", JSONRPC_HASH_JSONRPC)}; + if (jsonrpc_field == nullptr || !jsonrpc_field->is_string() || + jsonrpc_field->to_string() != "2.0" || + jsonrpc_request_id(request) == nullptr) { + return false; + } + const auto *parameters_field{request.try_at("params", JSONRPC_HASH_PARAMS)}; + if (parameters_field != nullptr && !parameters_field->is_object() && + !parameters_field->is_array()) { + return false; + } + const auto *method_field{request.try_at("method", JSONRPC_HASH_METHOD)}; + return method_field != nullptr && method_field->is_string(); +} + +auto jsonrpc_method(const sourcemeta::core::JSON &request) -> std::string_view { + if (!request.is_object()) { + return {}; + } + const auto *method_field{request.try_at("method", JSONRPC_HASH_METHOD)}; + if (method_field == nullptr || !method_field->is_string()) { + return {}; + } + return method_field->to_string(); +} + +auto jsonrpc_params(const sourcemeta::core::JSON &request) + -> const sourcemeta::core::JSON * { + if (!request.is_object()) { + return nullptr; + } + const auto *parameters{request.try_at("params", JSONRPC_HASH_PARAMS)}; + if (parameters == nullptr || + (!parameters->is_object() && !parameters->is_array())) { + return nullptr; + } + return parameters; +} + +auto jsonrpc_is_notification(const sourcemeta::core::JSON &request) -> bool { + if (!request.is_object()) { + return false; + } + const auto *jsonrpc_field{request.try_at("jsonrpc", JSONRPC_HASH_JSONRPC)}; + if (jsonrpc_field == nullptr || !jsonrpc_field->is_string() || + jsonrpc_field->to_string() != "2.0" || + request.try_at("id", JSONRPC_HASH_ID) != nullptr) { + return false; + } + const auto *parameters_field{request.try_at("params", JSONRPC_HASH_PARAMS)}; + if (parameters_field != nullptr && !parameters_field->is_object() && + !parameters_field->is_array()) { + return false; + } + const auto *method_field{request.try_at("method", JSONRPC_HASH_METHOD)}; + return method_field != nullptr && method_field->is_string(); +} + +auto jsonrpc_make_success(const sourcemeta::core::JSON &identifier, + sourcemeta::core::JSON result) + -> sourcemeta::core::JSON { + auto envelope{sourcemeta::core::JSON::make_object()}; + envelope.assign_assume_new(std::string{"jsonrpc"}, + sourcemeta::core::JSON{"2.0"}, + JSONRPC_HASH_JSONRPC); + envelope.assign_assume_new( + std::string{"id"}, sourcemeta::core::JSON{identifier}, JSONRPC_HASH_ID); + envelope.assign_assume_new(std::string{"result"}, std::move(result), + JSONRPC_HASH_RESULT); + return envelope; +} + +auto jsonrpc_make_success_empty(const sourcemeta::core::JSON &identifier) + -> sourcemeta::core::JSON { + return jsonrpc_make_success(identifier, + sourcemeta::core::JSON::make_object()); +} + +auto jsonrpc_make_error(const sourcemeta::core::JSON *identifier, + const std::int64_t code, const std::string_view message, + std::optional data) + -> sourcemeta::core::JSON { + auto envelope{sourcemeta::core::JSON::make_object()}; + envelope.assign_assume_new(std::string{"jsonrpc"}, + sourcemeta::core::JSON{"2.0"}, + JSONRPC_HASH_JSONRPC); + envelope.assign_assume_new(std::string{"id"}, + identifier != nullptr + ? sourcemeta::core::JSON{*identifier} + : sourcemeta::core::JSON{nullptr}, + JSONRPC_HASH_ID); + auto error{sourcemeta::core::JSON::make_object()}; + error.assign_assume_new(std::string{"code"}, sourcemeta::core::JSON{code}, + JSONRPC_HASH_CODE); + error.assign_assume_new(std::string{"message"}, + sourcemeta::core::JSON{message}, + JSONRPC_HASH_MESSAGE); + if (data.has_value()) { + error.assign_assume_new(std::string{"data"}, std::move(data.value()), + JSONRPC_HASH_DATA); + } + envelope.assign_assume_new(std::string{"error"}, std::move(error), + JSONRPC_HASH_ERROR); + return envelope; +} + +auto jsonrpc_make_error_parse() -> const sourcemeta::core::JSON & { + static const auto envelope{ + jsonrpc_make_error(nullptr, JSONRPC_CODE_PARSE, "Parse error")}; + return envelope; +} + +auto jsonrpc_make_error_invalid_request( + const sourcemeta::core::JSON *identifier) -> sourcemeta::core::JSON { + return jsonrpc_make_error(identifier, JSONRPC_CODE_INVALID_REQUEST, + "Invalid Request"); +} + +auto jsonrpc_make_error_method_not_found( + const sourcemeta::core::JSON &identifier) -> sourcemeta::core::JSON { + return jsonrpc_make_error(&identifier, JSONRPC_CODE_METHOD_NOT_FOUND, + "Method not found"); +} + +auto jsonrpc_make_error_invalid_params( + const sourcemeta::core::JSON &identifier, + std::optional data) -> sourcemeta::core::JSON { + return jsonrpc_make_error(&identifier, JSONRPC_CODE_INVALID_PARAMS, + "Invalid params", std::move(data)); +} + +auto jsonrpc_make_error_internal(const sourcemeta::core::JSON *identifier) + -> sourcemeta::core::JSON { + return jsonrpc_make_error(identifier, JSONRPC_CODE_INTERNAL, + "Internal error"); +} + +} // namespace sourcemeta::core diff --git a/vendor/core/src/core/time/rfc3339_datetime.cc b/vendor/core/src/core/time/rfc3339_datetime.cc index c36651bf6..8b614a023 100644 --- a/vendor/core/src/core/time/rfc3339_datetime.cc +++ b/vendor/core/src/core/time/rfc3339_datetime.cc @@ -148,9 +148,14 @@ auto is_rfc3339_datetime(const std::string_view value) -> bool { return false; } + char offset_sign{'+'}; + unsigned int offset_hour{0}; + unsigned int offset_minute{0}; + if (value[position] == 'Z' || value[position] == 'z') { position += 1; } else if (value[position] == '+' || value[position] == '-') { + offset_sign = value[position]; position += 1; // time-numoffset = ("+" / "-") time-hour ":" time-minute @@ -162,9 +167,8 @@ auto is_rfc3339_datetime(const std::string_view value) -> bool { if (!is_digit(value[position]) || !is_digit(value[position + 1])) { return false; } - const auto offset_hour{ - static_cast(value[position] - '0') * 10 + - static_cast(value[position + 1] - '0')}; + offset_hour = static_cast(value[position] - '0') * 10 + + static_cast(value[position + 1] - '0'); if (offset_hour > 23) { return false; } @@ -180,9 +184,8 @@ auto is_rfc3339_datetime(const std::string_view value) -> bool { if (!is_digit(value[position]) || !is_digit(value[position + 1])) { return false; } - const auto offset_minute{ - static_cast(value[position] - '0') * 10 + - static_cast(value[position + 1] - '0')}; + offset_minute = static_cast(value[position] - '0') * 10 + + static_cast(value[position + 1] - '0'); if (offset_minute > 59) { return false; } @@ -202,6 +205,59 @@ auto is_rfc3339_datetime(const std::string_view value) -> bool { return false; } + // --- Validate leap second (§5.7) --- + // The value 60 is only legal at the end of months in which a leap second + // occurs: June (XXXX-06-30T23:59:60Z) or December (XXXX-12-31T23:59:60Z), + // evaluated in UTC after applying the time offset + if (second == 60) { + const auto local_minute_of_day{hour * 60 + minute}; + const auto offset_total_minutes{offset_hour * 60 + offset_minute}; + + unsigned int utc_minute_of_day{0}; + bool previous_utc_day{false}; + + if (offset_sign == '+') { + if (local_minute_of_day >= offset_total_minutes) { + utc_minute_of_day = local_minute_of_day - offset_total_minutes; + } else { + utc_minute_of_day = local_minute_of_day + 1440 - offset_total_minutes; + previous_utc_day = true; + } + } else { + utc_minute_of_day = (local_minute_of_day + offset_total_minutes) % 1440; + } + + if (utc_minute_of_day != 23 * 60 + 59) { + return false; + } + + // A "next UTC day" shift cannot coexist with UTC time 23:59, since + // max(local) + max(offset) = 1439 + 1439 = 2878 < 1440 + 1439 + + unsigned int utc_month{month}; + unsigned int utc_day{day}; + if (previous_utc_day) { + if (utc_day > 1) { + utc_day -= 1; + } else if (utc_month > 1) { + utc_month -= 1; + utc_day = max_day_in_month(utc_month, year); + } else { + // Going back from year 0000 January 1 would yield year -1 + if (year == 0) { + return false; + } + utc_month = 12; + utc_day = 31; + } + } + + if (!((utc_month == 6 && utc_day == 30) || + (utc_month == 12 && utc_day == 31))) { + return false; + } + } + return true; } diff --git a/vendor/core/src/core/uri/CMakeLists.txt b/vendor/core/src/core/uri/CMakeLists.txt index aad7cc92f..5f9f83306 100644 --- a/vendor/core/src/core/uri/CMakeLists.txt +++ b/vendor/core/src/core/uri/CMakeLists.txt @@ -1,7 +1,8 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME uri PRIVATE_HEADERS error.h SOURCES uri.cc parse.cc accessors.cc setters.cc recompose.cc canonicalize.cc - resolution.cc filesystem.cc query.cc escaping.h normalize.h grammar.h) + resolution.cc filesystem.cc query.cc path.cc escaping.h normalize.h + grammar.h) if(SOURCEMETA_CORE_INSTALL) sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME uri) diff --git a/vendor/core/src/core/uri/filesystem.cc b/vendor/core/src/core/uri/filesystem.cc index d9d8da269..d1650cc24 100644 --- a/vendor/core/src/core/uri/filesystem.cc +++ b/vendor/core/src/core/uri/filesystem.cc @@ -2,10 +2,24 @@ #include "escaping.h" -#include // std::ranges::replace -#include // std::filesystem -#include // std::advance, std::next -#include // std::string +#include // std::ranges::equal, std::ranges::replace +#include // std::tolower +#include // std::filesystem +#include // std::advance, std::next +#include // std::string +#include // std::string_view + +namespace { + +auto is_localhost_host(const std::string_view host) -> bool { + constexpr std::string_view localhost{"localhost"}; + return std::ranges::equal( + host, localhost, [](const char left, const char right) { + return std::tolower(static_cast(left)) == right; + }); +} + +} // namespace namespace sourcemeta::core { @@ -17,6 +31,26 @@ auto URI::to_path() const -> std::filesystem::path { return path; } + // RFC 8089: a non-empty, non-localhost host on a file URI denotes a UNC + // server. The "localhost" host is equivalent to no host + const auto host_value = this->host(); + const auto is_unc = host_value.has_value() && !host_value->empty() && + !is_localhost_host(host_value.value()); + if (is_unc) { + if (!path.empty() && path.front() == '/') { + path.erase(0, 1); + } + std::ranges::replace(path, '/', '\\'); + uri_unescape_all_inplace(path); + std::string unc{"\\\\"}; + unc.append(host_value.value()); + if (!path.empty()) { + unc.push_back('\\'); + unc.append(path); + } + return unc; + } + // Check for Windows absolute path (e.g., /C:/) const auto is_windows_absolute = path.size() >= 3 && path[0] == '/' && path[2] == ':'; diff --git a/vendor/core/src/core/uri/include/sourcemeta/core/uri.h b/vendor/core/src/core/uri/include/sourcemeta/core/uri.h index 081f7222a..c081310fa 100644 --- a/vendor/core/src/core/uri/include/sourcemeta/core/uri.h +++ b/vendor/core/src/core/uri/include/sourcemeta/core/uri.h @@ -641,6 +641,37 @@ class SOURCEMETA_CORE_URI_EXPORT URI { [[nodiscard]] static auto is_uri_reference(std::string_view input) noexcept -> bool; + /// Strip a URI path prefix and return the remaining suffix. For example: + /// + /// ```cpp + /// #include + /// #include + /// + /// const auto result{ + /// sourcemeta::core::URI::strip_path_prefix("/foo/bar/baz", "/foo")}; + /// assert(result.has_value()); + /// assert(result.value() == "bar/baz"); + /// ``` + [[nodiscard]] static auto strip_path_prefix(std::string_view path, + std::string_view prefix) + -> std::optional; + + /// Replace a URI path prefix with a new prefix. For example: + /// + /// ```cpp + /// #include + /// #include + /// + /// const auto result{sourcemeta::core::URI::rebase_path( + /// "/foo/bar/baz", "/foo", "https://example.com")}; + /// assert(result.has_value()); + /// assert(result.value() == "https://example.com/bar/baz"); + /// ``` + [[nodiscard]] static auto rebase_path(std::string_view path, + std::string_view old_prefix, + std::string_view new_prefix) + -> std::optional; + private: auto parse(std::string_view input) -> void; diff --git a/vendor/core/src/core/uri/normalize.h b/vendor/core/src/core/uri/normalize.h index c032e3c03..25021605e 100644 --- a/vendor/core/src/core/uri/normalize.h +++ b/vendor/core/src/core/uri/normalize.h @@ -1,111 +1,77 @@ #ifndef SOURCEMETA_CORE_URI_NORMALIZE_H_ #define SOURCEMETA_CORE_URI_NORMALIZE_H_ -#include // std::string +#include // std::size_t +#include // std::string +#include // std::string_view namespace sourcemeta::core { -// Normalize a URI path by removing "." and ".." segments -// Updates the path in-place according to RFC 3986 path segment normalization -// Handles: -// - Removal of "." segments -// - Resolution of ".." segments with proper backtracking -// - Preservation of leading ".." for relative paths -// - Preservation of trailing slashes -// - Preservation of empty segments (consecutive slashes) +// Remove "." and ".." segments from a URI path per RFC 3986 Section 5.2.4 +// (Remove Dot Segments). For absolute paths this matches the specification +// verbatim. For relative paths, leading "../" blocks are preserved as an +// extension because the spec algorithm assumes a path that has already been +// merged with an absolute base; applied to a stand-alone relative path it +// would discard semantic intent that is needed at later resolution time. inline auto normalize_path(std::string &path) -> void { - if (path.empty() || path == "/") { - return; - } - - std::string canonical_path; - const auto had_leading_slash = path.starts_with("/"); - const auto had_trailing_slash = path.ends_with('/') && path != "/"; - bool last_segment_was_dot_or_dotdot{false}; - canonical_path.reserve(path.size()); - if (had_leading_slash) { - canonical_path = "/"; - } - - std::string::size_type minimum_position = had_leading_slash ? 1 : 0; - std::string::size_type read_position = had_leading_slash ? 1 : 0; - std::string::size_type segment_start = read_position; - - if (!had_leading_slash && read_position < path.size() && - path[read_position] == '.') { - if (read_position + 1 < path.size() && path[read_position + 1] == '/') { - read_position += 2; - segment_start = read_position; - } - } - - while (read_position <= path.size()) { - if (read_position == path.size() || path[read_position] == '/') { - const auto segment_length = read_position - segment_start; - if (segment_length == 0 && read_position == path.size() && - had_trailing_slash) { - break; - } - - if (segment_length == 2 && path[segment_start] == '.' && - path[segment_start + 1] == '.') { - last_segment_was_dot_or_dotdot = true; - if (canonical_path.size() > minimum_position) { - if (!canonical_path.empty() && canonical_path.back() == '/' && - (canonical_path.size() < 2 || - canonical_path[canonical_path.size() - 2] != '/')) { - canonical_path.pop_back(); - } - - while (canonical_path.size() > minimum_position && - canonical_path.back() != '/') { - canonical_path.pop_back(); - } - - if (!canonical_path.empty() && canonical_path.back() == '/' && - canonical_path.size() > minimum_position) { - canonical_path.pop_back(); - } - } else { - if (!had_leading_slash) { - if (canonical_path.size() > 0) { - canonical_path += '/'; - } - - canonical_path.append(".."); - minimum_position = canonical_path.size(); - } - } - } else if (segment_length == 1 && path[segment_start] == '.') { - last_segment_was_dot_or_dotdot = true; - } else if (segment_length == 0) { - last_segment_was_dot_or_dotdot = false; - if (canonical_path.size() >= minimum_position) { - canonical_path += '/'; + const std::string buffer{std::move(path)}; + std::string_view input{buffer}; + std::string output; + output.reserve(buffer.size()); + const bool is_absolute{!input.empty() && input.front() == '/'}; + + while (!input.empty()) { + if (input.starts_with("../")) { + output.append("../"); + input.remove_prefix(3); + } else if (input.starts_with("./") || input.starts_with("/./")) { + input.remove_prefix(2); + } else if (input == "/.") { + output.push_back('/'); + break; + } else if (input.starts_with("/../")) { + input.remove_prefix(3); + const auto last_slash{output.rfind('/')}; + if (last_slash == std::string::npos) { + output.clear(); + if (!is_absolute && !input.empty() && input.front() == '/') { + input.remove_prefix(1); } } else { - last_segment_was_dot_or_dotdot = false; - if (canonical_path.size() > 0 && - (canonical_path.size() > minimum_position || !had_leading_slash)) { - canonical_path += '/'; + output.resize(last_slash); + } + } else if (input == "/..") { + const auto last_slash{output.rfind('/')}; + if (last_slash == std::string::npos) { + output.clear(); + if (is_absolute) { + output.push_back('/'); } - canonical_path.append(path, segment_start, segment_length); + } else { + output.resize(last_slash); + output.push_back('/'); } - - ++read_position; - segment_start = read_position; + break; + } else if (input == ".") { + break; + } else if (input == "..") { + if (!is_absolute) { + output.append("../"); + } + break; } else { - ++read_position; + const std::size_t next_slash{input.starts_with('/') ? input.find('/', 1) + : input.find('/')}; + if (next_slash == std::string_view::npos) { + output.append(input); + break; + } + output.append(input.substr(0, next_slash)); + input.remove_prefix(next_slash); } } - if ((had_trailing_slash || last_segment_was_dot_or_dotdot) && - !canonical_path.empty() && canonical_path != "/" && - !canonical_path.ends_with('/')) { - canonical_path += '/'; - } - - path = std::move(canonical_path); + path = std::move(output); } } // namespace sourcemeta::core diff --git a/vendor/core/src/core/uri/path.cc b/vendor/core/src/core/uri/path.cc new file mode 100644 index 000000000..eb61bef60 --- /dev/null +++ b/vendor/core/src/core/uri/path.cc @@ -0,0 +1,102 @@ +#include + +#include "escaping.h" +#include "grammar.h" +#include "normalize.h" + +#include // std::size_t +#include // std::optional, std::nullopt +#include // std::string +#include // std::string_view + +namespace { + +auto canonicalize_path(const std::string_view input, std::string &output) + -> bool { + output.assign(input); + if (output.empty()) { + return true; + } + if (output.front() != sourcemeta::core::URI_SLASH) { + return false; + } + + for (std::size_t index{0}; index < output.size();) { + const auto character{output[index]}; + if (character == sourcemeta::core::URI_PERCENT) { + if (!sourcemeta::core::uri_is_percent_encoded(output, index)) { + return false; + } + index += 3; + } else if (character == sourcemeta::core::URI_SLASH || + sourcemeta::core::uri_is_pchar(character)) { + ++index; + } else { + return false; + } + } + + sourcemeta::core::uri_normalize_percent_encoding_inplace(output); + sourcemeta::core::uri_unescape_unreserved_inplace(output); + sourcemeta::core::normalize_path(output); + return true; +} + +} // namespace + +namespace sourcemeta::core { + +auto URI::strip_path_prefix(const std::string_view path, + const std::string_view prefix) + -> std::optional { + std::string path_canonical; + std::string prefix_canonical; + if (!canonicalize_path(path, path_canonical) || + !canonicalize_path(prefix, prefix_canonical)) { + return std::nullopt; + } + + std::size_t suffix_start{0}; + const bool prefix_provides_boundary{prefix_canonical.ends_with(URI_SLASH)}; + if (!prefix_canonical.empty()) { + if (!path_canonical.starts_with(prefix_canonical)) { + return std::nullopt; + } + if (!prefix_provides_boundary && + path_canonical.size() > prefix_canonical.size() && + path_canonical[prefix_canonical.size()] != URI_SLASH) { + return std::nullopt; + } + suffix_start = prefix_canonical.size(); + } + if (!prefix_provides_boundary && suffix_start < path_canonical.size() && + path_canonical[suffix_start] == URI_SLASH) { + ++suffix_start; + } + + path_canonical.erase(0, suffix_start); + return path_canonical; +} + +auto URI::rebase_path(const std::string_view path, + const std::string_view old_prefix, + const std::string_view new_prefix) + -> std::optional { + const auto suffix{URI::strip_path_prefix(path, old_prefix)}; + if (!suffix.has_value()) { + return std::nullopt; + } + const bool needs_separator{!suffix.value().empty() && !new_prefix.empty() && + !new_prefix.ends_with(URI_SLASH)}; + std::string result; + result.reserve(new_prefix.size() + (needs_separator ? 1 : 0) + + suffix.value().size()); + result.append(new_prefix); + if (needs_separator) { + result.push_back(URI_SLASH); + } + result.append(suffix.value()); + return result; +} + +} // namespace sourcemeta::core diff --git a/vendor/core/src/core/uri/resolution.cc b/vendor/core/src/core/uri/resolution.cc index 9982b1815..33cee4e4f 100644 --- a/vendor/core/src/core/uri/resolution.cc +++ b/vendor/core/src/core/uri/resolution.cc @@ -1,74 +1,17 @@ #include +#include "normalize.h" + #include // assert #include // std::optional #include // std::string namespace { -// RFC 3986 Section 5.2.4: Remove Dot Segments -// This algorithm removes the special "." and ".." segments from a path auto remove_dot_segments(const std::string &path) -> std::string { - std::string input = path; - std::string output; - - while (!input.empty()) { - // A: If the input buffer begins with a prefix of "../" or "./" - if (input.starts_with("../")) { - input = input.substr(3); - } else if (input.starts_with("./")) { - input = input.substr(2); - } - // B: If the input buffer begins with a prefix of "/./" or "/." - else if (input.starts_with("/./")) { - input = "/" + input.substr(3); - } else if (input == "/.") { - input = "/"; - } - // C: If the input buffer begins with a prefix of "/../" or "/.." - else if (input.starts_with("/../")) { - input = "/" + input.substr(4); - // Remove the last segment from output - const auto last_slash = output.rfind('/'); - if (last_slash != std::string::npos) { - output = output.substr(0, last_slash); - } else { - output.clear(); - } - } else if (input == "/..") { - input = "/"; - // Remove the last segment from output - const auto last_slash = output.rfind('/'); - if (last_slash != std::string::npos) { - output = output.substr(0, last_slash); - } else { - output.clear(); - } - } - // D: If the input buffer consists only of "." or ".." - else if (input == "." || input == "..") { - input.clear(); - } - // E: Move the first path segment to the end of output - else { - std::string::size_type next_slash; - if (input.starts_with('/')) { - next_slash = input.find('/', 1); - } else { - next_slash = input.find('/'); - } - - if (next_slash == std::string::npos) { - output += input; - input.clear(); - } else { - output += input.substr(0, next_slash); - input = input.substr(next_slash); - } - } - } - - return output; + std::string result{path}; + sourcemeta::core::normalize_path(result); + return result; } // Merge paths according to RFC 3986 Section 5.2.3 diff --git a/vendor/core/src/core/uritemplate/CMakeLists.txt b/vendor/core/src/core/uritemplate/CMakeLists.txt index cf03111b8..bbdf384c9 100644 --- a/vendor/core/src/core/uritemplate/CMakeLists.txt +++ b/vendor/core/src/core/uritemplate/CMakeLists.txt @@ -5,3 +5,6 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME uritemplate if(SOURCEMETA_CORE_INSTALL) sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME uritemplate) endif() + +target_link_libraries(sourcemeta_core_uritemplate PUBLIC sourcemeta::core::io) +target_link_libraries(sourcemeta_core_uritemplate PRIVATE sourcemeta::core::regex) diff --git a/vendor/core/src/core/uritemplate/helpers.h b/vendor/core/src/core/uritemplate/helpers.h index 5b84b56bd..a071ed5a0 100644 --- a/vendor/core/src/core/uritemplate/helpers.h +++ b/vendor/core/src/core/uritemplate/helpers.h @@ -177,9 +177,10 @@ inline auto parse_varname(const std::string_view input, std::size_t position) return position; } +template inline auto parse_variable_list(const std::string_view input, std::size_t position, - std::vector &variables) + std::vector *variables) -> std::size_t { while (true) { const auto start = position; @@ -189,9 +190,9 @@ parse_variable_list(const std::string_view input, std::size_t position, throw URITemplateParseError(position + 1); } - const auto name = input.substr(start, position - start); - std::uint16_t length = 0; - bool explode = false; + [[maybe_unused]] const auto name = input.substr(start, position - start); + [[maybe_unused]] std::uint16_t length = 0; + [[maybe_unused]] bool explode = false; if (position >= input.size()) { throw URITemplateParseError(1); @@ -225,14 +226,20 @@ parse_variable_list(const std::string_view input, std::size_t position, throw URITemplateParseError(prefix_start + 1); } - length = value; + if constexpr (!CheckOnly) { + length = value; + } } else if (input[position] == '*') { - explode = true; + if constexpr (!CheckOnly) { + explode = true; + } position++; } - variables.push_back(URITemplateVariableSpecification{ - .name = name, .length = length, .explode = explode}); + if constexpr (!CheckOnly) { + variables->push_back(URITemplateVariableSpecification{ + .name = name, .length = length, .explode = explode}); + } if (position >= input.size()) { throw URITemplateParseError(1); @@ -250,8 +257,10 @@ parse_variable_list(const std::string_view input, std::size_t position, return position; } -template -auto parse_expression(const std::string_view input) -> URITemplateParseResult { +template +auto parse_expression(const std::string_view input) + -> std::conditional_t, + URITemplateParseResult> { if constexpr (std::is_same_v) { if (input.empty() || input[0] == '{') { return std::nullopt; @@ -272,9 +281,13 @@ auto parse_expression(const std::string_view input) -> URITemplateParseResult { position++; } - return std::make_pair( - URITemplateToken{URITemplateTokenLiteral{input.substr(0, position)}}, - position); + if constexpr (CheckOnly) { + return position; + } else { + return std::make_pair( + URITemplateToken{URITemplateTokenLiteral{input.substr(0, position)}}, + position); + } } else { if (input.empty() || input[0] != '{') { return std::nullopt; @@ -297,10 +310,17 @@ auto parse_expression(const std::string_view input) -> URITemplateParseResult { var_start = 1; } - std::vector variables; - const auto end_position = parse_variable_list(input, var_start, variables); - return std::make_pair(URITemplateToken{T{std::move(variables)}}, - end_position + 1); + if constexpr (CheckOnly) { + const auto end_position = + parse_variable_list(input, var_start, nullptr); + return end_position + 1; + } else { + std::vector variables; + const auto end_position = + parse_variable_list(input, var_start, &variables); + return std::make_pair(URITemplateToken{T{std::move(variables)}}, + end_position + 1); + } } } diff --git a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h index 4f5540ff4..b4e7fc4b9 100644 --- a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h +++ b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h @@ -58,6 +58,21 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplate { /// ``` URITemplate(const std::string_view source); + /// Check whether the given string is a valid RFC 6570 URI Template + /// without building the parsed representation. For example: + /// + /// ```cpp + /// #include + /// + /// #include + /// + /// assert(sourcemeta::core::URITemplate::is_uritemplate( + /// "http://example.com/~{username}/")); + /// assert(!sourcemeta::core::URITemplate::is_uritemplate("{var")); + /// ``` + [[nodiscard]] static auto is_uritemplate(std::string_view input) noexcept + -> bool; + /// Get the number of tokens in the template [[nodiscard]] auto size() const noexcept -> std::uint64_t; diff --git a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h index 9a7b42d0d..683d8fcbd 100644 --- a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h +++ b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h @@ -102,6 +102,51 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouterInvalidSegmentError std::string segment_; }; +/// @ingroup uritemplate +/// An error that represents an operation identifier that does not match the +/// permitted format +class SOURCEMETA_CORE_URITEMPLATE_EXPORT + URITemplateRouterInvalidOperationIdError : public std::exception { +public: + URITemplateRouterInvalidOperationIdError(const std::string_view operation_id) + : operation_id_{operation_id} {} + + [[nodiscard]] auto what() const noexcept -> const char * override { + return "Invalid operation identifier"; + } + + /// Get the offending operation identifier + [[nodiscard]] auto operation_id() const noexcept -> const std::string & { + return this->operation_id_; + } + +private: + std::string operation_id_; +}; + +/// @ingroup uritemplate +/// An error that represents an operation identifier that conflicts with a +/// previously registered route +class SOURCEMETA_CORE_URITEMPLATE_EXPORT + URITemplateRouterDuplicateOperationIdError : public std::exception { +public: + URITemplateRouterDuplicateOperationIdError( + const std::string_view operation_id) + : operation_id_{operation_id} {} + + [[nodiscard]] auto what() const noexcept -> const char * override { + return "Duplicate operation identifier"; + } + + /// Get the conflicting operation identifier + [[nodiscard]] auto operation_id() const noexcept -> const std::string & { + return this->operation_id_; + } + +private: + std::string operation_id_; +}; + /// @ingroup uritemplate /// An error that represents a failure to save the router to disk class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouterSaveError diff --git a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_router.h b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_router.h index d4aad4f04..982a9613a 100644 --- a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_router.h +++ b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_router.h @@ -5,18 +5,21 @@ #include #endif +#include + #include // std::size_t #include // std::uint16_t, std::uint32_t, std::uint8_t, std::int64_t -#include // std::filesystem::path -#include // std::function -#include // std::unique_ptr -#include // std::span -#include // std::string -#include // std::string_view -#include // std::tuple -#include // std::pair -#include // std::variant -#include // std::vector +#include // std::filesystem::path +#include // std::function +#include // std::unique_ptr +#include // std::span +#include // std::string +#include // std::string_view +#include // std::tuple +#include // std::unordered_map +#include // std::pair +#include // std::variant +#include // std::vector namespace sourcemeta::core { @@ -27,8 +30,18 @@ namespace sourcemeta::core { /// @ingroup uritemplate /// A URI Template path router. Keep in mind that the URI Template specification -/// DOES NOT define expansion. So this is an opinionated non-standard adaptation -/// of URI Template for path routing purposes +/// DOES NOT define matching, only expansion. So this is an opinionated +/// non-standard adaptation of URI Template for path routing purposes. The +/// supported operators are: +/// +/// - `{var}` for a single path segment (RFC 6570 Level 1 simple expansion) +/// - `{+var}` for greedy capture to the end of the path, requiring at least +/// one trailing segment (RFC 6570 Level 2 reserved expansion) +/// - `{/var*}` for optional greedy capture to the end of the path, where +/// zero trailing segments are also allowed (RFC 6570 Level 3 path-segment +/// operator with Level 4 explode modifier). Must be the last component of +/// the template. The captured value is empty when no trailing segments +/// are present class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouter { friend class URITemplateRouterView; @@ -53,7 +66,8 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouter { Root = 0, Literal = 1, Variable = 2, - Expansion = 3 + Expansion = 3, + OptionalExpansion = 4 }; /// A node in the router trie @@ -74,8 +88,11 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouter { URITemplateRouter() = default; /// Construct a router with a base path prefix. During matching, the base - /// path is stripped from incoming request paths before matching - explicit URITemplateRouter(std::string_view base_path); + /// path is stripped from incoming request paths before matching. An optional + /// base URL can be associated with the router as opaque metadata, never used + /// for matching + explicit URITemplateRouter(std::string_view base_path, + std::string_view base_url = {}); // To avoid mistakes URITemplateRouter(const URITemplateRouter &) = delete; @@ -84,8 +101,11 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouter { auto operator=(URITemplateRouter &&) -> URITemplateRouter & = delete; /// Add a route to the router. Make sure the string lifetime survives the - /// router - auto add(const std::string_view uri_template, const Identifier identifier, + /// router. The operation identifier must match the regular expression + /// `^[a-zA-Z][a-zA-Z0-9_-]{0,63}$` and must be unique across all routes + /// registered on this router + auto add(const std::string_view uri_template, + const std::string_view operation_id, const Identifier identifier, const Identifier context = 0, const std::span arguments = {}) -> void; @@ -114,6 +134,9 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouter { /// Access the base path prefix [[nodiscard]] auto base_path() const noexcept -> std::string_view; + /// Access the base URL associated with the router + [[nodiscard]] auto base_url() const noexcept -> std::string_view; + /// Get the number of registered routes [[nodiscard]] auto size() const noexcept -> std::size_t; @@ -128,12 +151,26 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouter { /// for the given identifier [[nodiscard]] auto path(const Identifier identifier) const -> std::string; + /// Resolve an operation identifier to its registered route. Returns + /// `(identifier, context)` on hit and `(0, 0)` if no route is registered + /// under the given operation identifier + [[nodiscard]] auto operation(const std::string_view operation_id) const + -> std::pair; + + /// Get the operation identifier associated with a registered route + /// identifier + [[nodiscard]] auto operation_id(const Identifier identifier) const + -> std::string_view; + private: Node root_; Node otherwise_; std::string base_path_; + std::string base_url_; std::vector>> arguments_; std::vector> entries_; + std::unordered_map> + operations_; }; /// @ingroup uritemplate @@ -145,8 +182,13 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouterView { const std::filesystem::path &path) -> void; URITemplateRouterView(const std::filesystem::path &path); + + /// Construct a view over an externally-owned buffer. The buffer must + /// outlive the view URITemplateRouterView(const std::uint8_t *data, std::size_t size); + ~URITemplateRouterView(); + // To avoid mistakes URITemplateRouterView(const URITemplateRouterView &) = delete; URITemplateRouterView(URITemplateRouterView &&) = delete; @@ -169,9 +211,19 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouterView { /// Access the base path prefix [[nodiscard]] auto base_path() const noexcept -> std::string_view; + /// Access the base URL associated with the router + [[nodiscard]] auto base_url() const noexcept -> std::string_view; + /// Get the number of registered routes [[nodiscard]] auto size() const noexcept -> std::size_t; + /// Resolve an operation identifier to its registered route. Returns + /// `(identifier, context)` on hit and `(0, 0)` if no route is registered + /// under the given operation identifier + [[nodiscard]] auto operation(const std::string_view operation_id) const + -> std::pair; + /// Get the identifier of the route at the given positional index [[nodiscard]] auto at(const std::size_t index) const -> URITemplateRouter::Identifier; @@ -187,8 +239,16 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouterView { [[nodiscard]] auto path(const URITemplateRouter::Identifier identifier) const -> std::string; + /// Get the operation identifier associated with a registered route + /// identifier + [[nodiscard]] auto + operation_id(const URITemplateRouter::Identifier identifier) const + -> std::string_view; + private: - std::vector data_; + const std::uint8_t *data_{nullptr}; + std::size_t size_{0}; + std::unique_ptr owner_; }; #if defined(_MSC_VER) diff --git a/vendor/core/src/core/uritemplate/uritemplate.cc b/vendor/core/src/core/uritemplate/uritemplate.cc index 16ab67632..569b8ebf7 100644 --- a/vendor/core/src/core/uritemplate/uritemplate.cc +++ b/vendor/core/src/core/uritemplate/uritemplate.cc @@ -8,23 +8,28 @@ namespace sourcemeta::core { -template +template static auto try_parse(std::string_view &remaining, std::size_t &offset, - std::vector &tokens) -> bool { - if (auto result = parse_expression(remaining)) { - tokens.emplace_back(std::move(result->first)); - remaining.remove_prefix(result->second); - offset += result->second; + std::vector *tokens) -> bool { + if (auto result = parse_expression(remaining)) { + if constexpr (CheckOnly) { + remaining.remove_prefix(*result); + offset += *result; + } else { + tokens->emplace_back(std::move(result->first)); + remaining.remove_prefix(result->second); + offset += result->second; + } return true; } return false; } -template +template static auto try_parse_any(std::string_view &remaining, std::size_t &offset, - std::vector &tokens) -> bool { - return (try_parse(remaining, offset, tokens) || ...); + std::vector *tokens) -> bool { + return (try_parse(remaining, offset, tokens) || ...); } URITemplate::URITemplate(const std::string_view source) { @@ -33,7 +38,7 @@ URITemplate::URITemplate(const std::string_view source) { while (!remaining.empty()) { try { - if (!try_parse_any( - remaining, offset, this->tokens_)) { + remaining, offset, &this->tokens_)) { break; } } catch (URITemplateParseError &error) { @@ -50,6 +55,30 @@ URITemplate::URITemplate(const std::string_view source) { } } +auto URITemplate::is_uritemplate(const std::string_view input) noexcept + -> bool { + try { + std::string_view remaining{input}; + std::size_t offset = 0; + while (!remaining.empty()) { + if (!try_parse_any( + remaining, offset, nullptr)) { + return false; + } + } + return true; + } catch (...) { + return false; + } +} + auto URITemplate::size() const noexcept -> std::uint64_t { return static_cast(this->tokens_.size()); } diff --git a/vendor/core/src/core/uritemplate/uritemplate_router.cc b/vendor/core/src/core/uritemplate/uritemplate_router.cc index 0f8675fc9..a1e61c94f 100644 --- a/vendor/core/src/core/uritemplate/uritemplate_router.cc +++ b/vendor/core/src/core/uritemplate/uritemplate_router.cc @@ -1,8 +1,9 @@ +#include #include #include "helpers.h" -#include // std::ranges::lower_bound +#include // std::ranges::lower_bound, std::ranges::find_if #include // assert #include // std::numeric_limits #include // std::get, std::make_tuple @@ -44,9 +45,15 @@ auto find_or_create_literal_child(std::vector> &literals, return result; } +inline auto is_expansion_type(const NodeType type) noexcept -> bool { + return type == NodeType::Expansion || type == NodeType::OptionalExpansion; +} + auto find_or_create_variable_child(std::unique_ptr &variable, const std::string_view name, - const NodeType type) -> Node * { + const NodeType type, + const std::string_view expression) + -> Node * { if (!variable) { variable = std::make_unique(); variable->type = type; @@ -58,12 +65,19 @@ auto find_or_create_variable_child(std::unique_ptr &variable, throw URITemplateRouterVariableMismatchError{variable->value, name}; } - if (type == NodeType::Expansion) { + if (is_expansion_type(variable->type) && is_expansion_type(type) && + variable->type != type) { + throw URITemplateRouterInvalidSegmentError{ + "Conflicting expansion operators on the same path position", + expression}; + } + + if (is_expansion_type(type)) { if (variable->type == NodeType::Variable) { - variable->type = NodeType::Expansion; + variable->type = type; return variable.get(); } - } else if (variable->type == NodeType::Expansion) { + } else if (is_expansion_type(variable->type)) { return nullptr; } @@ -106,14 +120,22 @@ inline auto finalize_match(const Node &otherwise, } // namespace -URITemplateRouter::URITemplateRouter(const std::string_view base_path) - : base_path_{base_path} { +URITemplateRouter::URITemplateRouter(const std::string_view base_path, + const std::string_view base_url) + : base_path_{base_path}, base_url_{base_url} { assert(this->base_path_.empty() || this->base_path_.front() == '/'); - const auto last = this->base_path_.find_last_not_of('/'); - if (last == std::string::npos) { + const auto base_path_last = this->base_path_.find_last_not_of('/'); + if (base_path_last == std::string::npos) { this->base_path_.clear(); } else { - this->base_path_.erase(last + 1); + this->base_path_.erase(base_path_last + 1); + } + + const auto base_url_last = this->base_url_.find_last_not_of('/'); + if (base_url_last == std::string::npos) { + this->base_url_.clear(); + } else { + this->base_url_.erase(base_url_last + 1); } } @@ -121,6 +143,10 @@ auto URITemplateRouter::base_path() const noexcept -> std::string_view { return this->base_path_; } +auto URITemplateRouter::base_url() const noexcept -> std::string_view { + return this->base_url_; +} + auto URITemplateRouter::size() const noexcept -> std::size_t { return this->entries_.size(); } @@ -151,6 +177,30 @@ auto URITemplateRouter::path(const Identifier identifier) const -> std::string { return std::string{std::get<2>(*entry)}; } +auto URITemplateRouter::operation(const std::string_view operation_id) const + -> std::pair { + const auto iterator = this->operations_.find(operation_id); + if (iterator == this->operations_.end()) { + return {Identifier{0}, Identifier{0}}; + } + return iterator->second; +} + +auto URITemplateRouter::operation_id(const Identifier identifier) const + -> std::string_view { + if (identifier == 0) { + return {}; + } + const auto entry = + std::ranges::find_if(this->operations_, [&identifier](const auto &item) { + return item.second.first == identifier; + }); + if (entry == this->operations_.end()) { + return {}; + } + return entry->first; +} + auto URITemplateRouter::otherwise(const Identifier context, const std::span arguments) -> void { @@ -174,11 +224,23 @@ auto URITemplateRouter::otherwise(const Identifier context, } auto URITemplateRouter::add(const std::string_view uri_template, + const std::string_view operation_id, const Identifier identifier, const Identifier context, const std::span arguments) -> void { assert(identifier > 0); + static const Regex operation_id_regex = + to_regex("^[a-zA-Z][a-zA-Z0-9_-]{0,63}$").value(); + + if (!matches(operation_id_regex, operation_id)) { + throw URITemplateRouterInvalidOperationIdError{operation_id}; + } + + if (this->operations_.contains(operation_id)) { + throw URITemplateRouterDuplicateOperationIdError{operation_id}; + } + // Walk base path segments to establish the trie prefix Node *current = nullptr; if (!this->base_path_.empty()) { @@ -216,9 +278,15 @@ auto URITemplateRouter::add(const std::string_view uri_template, if (existing != this->entries_.end()) { *existing = std::make_tuple(identifier, context, uri_template); } + std::erase_if(this->operations_, + [&previous_identifier](const auto &entry) { + return entry.second.first == previous_identifier; + }); } target.identifier = identifier; target.context = context; + this->operations_.emplace( + operation_id, std::pair{identifier, context}); if (!arguments.empty()) { assert(std::ranges::none_of(this->arguments_, [&identifier](const auto &entry) { @@ -268,6 +336,7 @@ auto URITemplateRouter::add(const std::string_view uri_template, } NodeType type = NodeType::Variable; + bool path_segment_operator = false; if (*position == '+') { type = NodeType::Expansion; ++position; @@ -275,6 +344,13 @@ auto URITemplateRouter::add(const std::string_view uri_template, throw URITemplateRouterInvalidSegmentError{"Empty variable name", expression}; } + } else if (*position == '/') { + path_segment_operator = true; + ++position; + if (position >= end || *position == '}') { + throw URITemplateRouterInvalidSegmentError{"Empty variable name", + expression}; + } } else if (is_operator(*position) && *position != '+') { throw URITemplateRouterInvalidSegmentError{ "Unsupported URI Template operator", expression}; @@ -307,6 +383,8 @@ auto URITemplateRouter::add(const std::string_view uri_template, expression}; } + const char *const varname_end = position; + if (*position == ' ') { throw URITemplateRouterInvalidSegmentError{ "Space in variable expression", expression}; @@ -318,8 +396,25 @@ auto URITemplateRouter::add(const std::string_view uri_template, } if (*position == '*') { + if (!path_segment_operator) { + throw URITemplateRouterInvalidSegmentError{ + "Explode modifier not supported", expression}; + } + if (varname_end == varname_start) { + throw URITemplateRouterInvalidSegmentError{"Empty variable name", + expression}; + } + type = NodeType::OptionalExpansion; + ++position; + if (position >= end || *position != '}') { + throw URITemplateRouterInvalidSegmentError{ + "Unexpected characters after explode modifier", expression}; + } + } else if (path_segment_operator) { throw URITemplateRouterInvalidSegmentError{ - "Explode modifier not supported", expression}; + "Path-segment expansion without the explode modifier is not " + "supported", + expression}; } if (*position == ',') { @@ -328,23 +423,26 @@ auto URITemplateRouter::add(const std::string_view uri_template, } const std::string_view varname{ - varname_start, static_cast(position - varname_start)}; + varname_start, static_cast(varname_end - varname_start)}; ++position; // skip '}' if (position < end && *position != '/') { - throw URITemplateRouterInvalidSegmentError{ - "Path segment cannot mix literals and variables", - extract_segment(expression_start, end)}; + if (*position != '{' || position + 1 >= end || *(position + 1) != '/') { + throw URITemplateRouterInvalidSegmentError{ + "Path segment cannot mix literals and variables", + extract_segment(expression_start, end)}; + } } - if (type == NodeType::Expansion && position < end) { + if (is_expansion_type(type) && position < end) { throw URITemplateRouterInvalidSegmentError{ - "Reserved expansion must be the last segment", expression}; + "Expansion operator must be the last segment", expression}; } auto &variable = current ? current->variable : this->root_.variable; - auto *result = find_or_create_variable_child(variable, varname, type); + auto *result = + find_or_create_variable_child(variable, varname, type, expression); if (result == nullptr) { absorbed = true; } else { @@ -360,6 +458,14 @@ auto URITemplateRouter::add(const std::string_view uri_template, } if (position < end && *position == '{') { + if (position + 1 < end && *(position + 1) == '/') { + const std::string_view segment{ + segment_start, + static_cast(position - segment_start)}; + auto &literals = current ? current->literals : this->root_.literals; + current = &find_or_create_literal_child(literals, segment); + continue; + } const char *expr_end = find_expression_end(position, end); const char *seg_end = expr_end; while (seg_end < end && *seg_end != '/') { @@ -397,9 +503,15 @@ auto URITemplateRouter::add(const std::string_view uri_template, if (existing != this->entries_.end()) { *existing = std::make_tuple(identifier, context, uri_template); } + std::erase_if(this->operations_, + [&previous_identifier](const auto &entry) { + return entry.second.first == previous_identifier; + }); } current->identifier = identifier; current->context = context; + this->operations_.emplace( + operation_id, std::pair{identifier, context}); if (!arguments.empty()) { assert(std::ranges::none_of(this->arguments_, [&identifier](const auto &entry) { @@ -484,7 +596,7 @@ auto URITemplateRouter::match(const std::string_view path, } else if (*variable_child) { assert(variable_index <= std::numeric_limits::max()); - if ((*variable_child)->type == NodeType::Expansion) { + if (is_expansion_type((*variable_child)->type)) { const std::string_view remaining{ segment_start, static_cast(path_end - segment_start)}; callback(static_cast(variable_index), @@ -512,6 +624,16 @@ auto URITemplateRouter::match(const std::string_view path, ++position; } + if (current && current->identifier == 0 && current->variable && + current->variable->type == NodeType::OptionalExpansion) { + assert(variable_index <= + std::numeric_limits::max()); + callback(static_cast(variable_index), + current->variable->value, std::string_view{}); + return finalize_match(this->otherwise_, current->variable->identifier, + current->variable->context); + } + return current ? finalize_match(this->otherwise_, current->identifier, current->context) : finalize_match(this->otherwise_, this->root_.identifier, diff --git a/vendor/core/src/core/uritemplate/uritemplate_router_view.cc b/vendor/core/src/core/uritemplate/uritemplate_router_view.cc index 95cddc773..9025f7331 100644 --- a/vendor/core/src/core/uritemplate/uritemplate_router_view.cc +++ b/vendor/core/src/core/uritemplate/uritemplate_router_view.cc @@ -1,9 +1,11 @@ +#include #include +#include // std::ranges::sort #include // std::array #include // assert #include // std::memcmp, std::memcpy -#include // std::ofstream, std::ifstream +#include // std::ofstream #include // std::numeric_limits #include // std::queue #include // std::string @@ -17,7 +19,7 @@ namespace sourcemeta::core { namespace { constexpr std::uint32_t ROUTER_MAGIC = 0x52544552; // "RTER" -constexpr std::uint32_t ROUTER_VERSION = 5; +constexpr std::uint32_t ROUTER_VERSION = 9; constexpr std::uint32_t NO_CHILD = std::numeric_limits::max(); // Type tags for argument value serialization @@ -31,9 +33,13 @@ struct RouterHeader { std::uint32_t node_count; std::uint32_t string_table_offset; std::uint32_t arguments_offset; + std::uint32_t operations_offset; std::uint32_t base_path_offset; std::uint32_t base_path_length; std::uint32_t otherwise_context; + std::uint32_t base_url_offset; + std::uint32_t base_url_length; + std::uint32_t paths_offset; }; struct ArgumentEntryHeader { @@ -42,6 +48,30 @@ struct ArgumentEntryHeader { std::uint32_t blob_length; }; +constexpr std::size_t OPERATION_ENTRY_SIZE = + sizeof(std::uint32_t) + sizeof(std::uint32_t) + + sizeof(URITemplateRouter::Identifier) + + sizeof(URITemplateRouter::Identifier); + +struct OperationEntry { + std::uint32_t string_offset; + std::uint32_t string_length; + URITemplateRouter::Identifier identifier; + URITemplateRouter::Identifier context; +}; + +constexpr std::size_t PATH_ENTRY_SIZE = sizeof(URITemplateRouter::Identifier) + + sizeof(URITemplateRouter::Identifier) + + sizeof(std::uint32_t) + + sizeof(std::uint32_t); + +struct PathEntry { + URITemplateRouter::Identifier identifier; + URITemplateRouter::Identifier context; + std::uint32_t string_offset; + std::uint32_t string_length; +}; + struct alignas(8) SerializedNode { std::uint32_t string_offset; std::uint32_t string_length; @@ -67,99 +97,26 @@ finalize_match(const URITemplateRouter::Identifier otherwise_context, return {identifier, context}; } -inline auto count_base_path_segments(const std::string_view base_path) noexcept - -> std::uint32_t { - std::uint32_t count = 0; - std::size_t position = 0; - while (position < base_path.size()) { - while (position < base_path.size() && base_path[position] == '/') { - ++position; - } - if (position >= base_path.size()) { - break; - } - while (position < base_path.size() && base_path[position] != '/') { - ++position; - } - ++count; - } - return count; -} - -inline auto reconstruct_path_recursive( - const SerializedNode *nodes, const std::uint32_t node_count, - const char *string_table, const std::size_t string_table_size, - const std::uint32_t node_index, const std::uint32_t depth, - const std::uint32_t base_path_depth, - const URITemplateRouter::Identifier target, std::string &accumulator) +inline auto is_expansion_type(const URITemplateRouter::NodeType type) noexcept -> bool { - if (node_index >= node_count) { - return false; - } - - const auto &node = nodes[node_index]; - - if (node.string_offset > string_table_size || - node.string_length > string_table_size - node.string_offset) { - return false; - } - - const std::string_view value{string_table + node.string_offset, - node.string_length}; - - if (depth > base_path_depth) { - switch (node.type) { - case URITemplateRouter::NodeType::Literal: - accumulator += '/'; - accumulator.append(value.data(), value.size()); - break; - case URITemplateRouter::NodeType::Variable: - accumulator += "/{"; - accumulator.append(value.data(), value.size()); - accumulator += '}'; - break; - case URITemplateRouter::NodeType::Expansion: - accumulator += "/{+"; - accumulator.append(value.data(), value.size()); - accumulator += '}'; - break; - default: - break; - } - } - - if (node.identifier == target) { - return true; - } - - const auto saved_length = accumulator.size(); - - if (node.first_literal_child != NO_CHILD && - node.first_literal_child < node_count && - node.literal_child_count <= node_count - node.first_literal_child) { - for (std::uint32_t offset = 0; offset < node.literal_child_count; - ++offset) { - if (reconstruct_path_recursive( - nodes, node_count, string_table, string_table_size, - node.first_literal_child + offset, depth + 1, base_path_depth, - target, accumulator)) { - return true; - } - accumulator.resize(saved_length); - } - } - - if (node.variable_child != NO_CHILD && node.variable_child < node_count) { - if (reconstruct_path_recursive(nodes, node_count, string_table, - string_table_size, node.variable_child, - depth + 1, base_path_depth, target, - accumulator)) { - return true; - } - accumulator.resize(saved_length); - } + return type == URITemplateRouter::NodeType::Expansion || + type == URITemplateRouter::NodeType::OptionalExpansion; +} - return false; +inline auto read_path_entry(const std::uint8_t *data, const std::size_t offset) + -> PathEntry { + PathEntry entry{}; + std::memcpy(&entry.identifier, data + offset, sizeof(entry.identifier)); + std::memcpy(&entry.context, data + offset + sizeof(entry.identifier), + sizeof(entry.context)); + std::memcpy(&entry.string_offset, + data + offset + sizeof(entry.identifier) + sizeof(entry.context), + sizeof(entry.string_offset)); + std::memcpy(&entry.string_length, + data + offset + sizeof(entry.identifier) + sizeof(entry.context) + + sizeof(entry.string_offset), + sizeof(entry.string_length)); + return entry; } // Binary search for a literal child matching the given segment @@ -352,12 +309,55 @@ auto URITemplateRouterView::save(const URITemplateRouter &router, argument_entries.push_back(entry); } + std::vector operation_entries; + operation_entries.reserve(router.operations_.size()); + for (const auto &[operation_id, route] : router.operations_) { + OperationEntry entry{}; + entry.string_offset = static_cast(string_table.size()); + entry.string_length = static_cast(operation_id.size()); + entry.identifier = route.first; + entry.context = route.second; + string_table.append(operation_id.data(), operation_id.size()); + operation_entries.push_back(entry); + } + + std::ranges::sort( + operation_entries, {}, [&string_table](const OperationEntry &entry) { + return std::string_view{string_table.data() + entry.string_offset, + entry.string_length}; + }); + + assert(operation_entries.size() <= std::numeric_limits::max()); + const auto operation_count = + static_cast(operation_entries.size()); + + std::vector path_entries; + path_entries.reserve(router.entries_.size()); + for (const auto &[entry_identifier, entry_context, entry_path] : + router.entries_) { + PathEntry entry{}; + entry.identifier = entry_identifier; + entry.context = entry_context; + entry.string_offset = static_cast(string_table.size()); + entry.string_length = static_cast(entry_path.size()); + string_table.append(entry_path.data(), entry_path.size()); + path_entries.push_back(entry); + } + + assert(path_entries.size() <= std::numeric_limits::max()); + const auto path_count = static_cast(path_entries.size()); + // Append the base path to the string table const auto base_path_string_offset = static_cast(string_table.size()); const auto base_path_value = router.base_path(); string_table.append(base_path_value.data(), base_path_value.size()); + const auto base_url_string_offset = + static_cast(string_table.size()); + const auto base_url_value = router.base_url(); + string_table.append(base_url_value.data(), base_url_value.size()); + RouterHeader header{}; header.magic = ROUTER_MAGIC; header.version = ROUTER_VERSION; @@ -366,9 +366,19 @@ auto URITemplateRouterView::save(const URITemplateRouter &router, sizeof(RouterHeader) + nodes.size() * sizeof(SerializedNode)); header.arguments_offset = static_cast( header.string_table_offset + string_table.size()); + header.operations_offset = static_cast( + header.arguments_offset + sizeof(std::uint16_t) + + argument_entries.size() * (sizeof(std::uint16_t) + sizeof(std::uint32_t) + + sizeof(std::uint32_t)) + + argument_blob.size()); header.base_path_offset = base_path_string_offset; header.base_path_length = static_cast(base_path_value.size()); header.otherwise_context = router.otherwise_.context; + header.base_url_offset = base_url_string_offset; + header.base_url_length = static_cast(base_url_value.size()); + header.paths_offset = static_cast( + header.operations_offset + sizeof(std::uint16_t) + + operation_entries.size() * OPERATION_ENTRY_SIZE); std::ofstream file(path, std::ios::binary); if (!file) { @@ -398,6 +408,31 @@ auto URITemplateRouterView::save(const URITemplateRouter &router, static_cast(argument_blob.size())); } + file.write(reinterpret_cast(&operation_count), + sizeof(operation_count)); + for (const auto &entry : operation_entries) { + file.write(reinterpret_cast(&entry.string_offset), + sizeof(entry.string_offset)); + file.write(reinterpret_cast(&entry.string_length), + sizeof(entry.string_length)); + file.write(reinterpret_cast(&entry.identifier), + sizeof(entry.identifier)); + file.write(reinterpret_cast(&entry.context), + sizeof(entry.context)); + } + + file.write(reinterpret_cast(&path_count), sizeof(path_count)); + for (const auto &entry : path_entries) { + file.write(reinterpret_cast(&entry.identifier), + sizeof(entry.identifier)); + file.write(reinterpret_cast(&entry.context), + sizeof(entry.context)); + file.write(reinterpret_cast(&entry.string_offset), + sizeof(entry.string_offset)); + file.write(reinterpret_cast(&entry.string_length), + sizeof(entry.string_length)); + } + if (!file) { throw URITemplateRouterSaveError{path, "Failed to write router data to file"}; @@ -405,41 +440,30 @@ auto URITemplateRouterView::save(const URITemplateRouter &router, } URITemplateRouterView::URITemplateRouterView( - const std::filesystem::path &path) { - std::ifstream file(path, std::ios::binary | std::ios::ate); - if (!file) { - throw URITemplateRouterReadError{path}; - } - - const auto position = file.tellg(); - if (position < 0) { - throw URITemplateRouterReadError{path}; - } - - const auto size = static_cast(position); - file.seekg(0, std::ios::beg); - this->data_.resize(size); - file.read(reinterpret_cast(this->data_.data()), - static_cast(size)); - if (!file) { - throw URITemplateRouterReadError{path}; - } + const std::filesystem::path &path) try + : owner_{std::make_unique(path)} { + this->data_ = + this->owner_->size() > 0 ? this->owner_->as(0) : nullptr; + this->size_ = this->owner_->size(); +} catch (const FileViewError &) { + throw URITemplateRouterReadError{path}; } URITemplateRouterView::URITemplateRouterView(const std::uint8_t *data, const std::size_t size) - : data_{data, data + size} {} + : data_{data}, size_{size} {} + +URITemplateRouterView::~URITemplateRouterView() = default; auto URITemplateRouterView::match( const std::string_view path, const URITemplateRouter::Callback &callback) const -> std::pair { - if (this->data_.size() < sizeof(RouterHeader)) { + if (this->size_ < sizeof(RouterHeader)) { return {}; } - const auto *header = - reinterpret_cast(this->data_.data()); + const auto *header = reinterpret_cast(this->data_); if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { return {}; } @@ -448,28 +472,28 @@ auto URITemplateRouterView::match( static_cast(header->otherwise_context); if (header->node_count == 0 || - header->node_count > (this->data_.size() - sizeof(RouterHeader)) / - sizeof(SerializedNode)) { + header->node_count > + (this->size_ - sizeof(RouterHeader)) / sizeof(SerializedNode)) { return finalize_match(otherwise_context, 0, 0); } const auto *nodes = reinterpret_cast( - this->data_.data() + sizeof(RouterHeader)); + this->data_ + sizeof(RouterHeader)); const auto nodes_size = static_cast(header->node_count) * sizeof(SerializedNode); const auto expected_string_table_offset = sizeof(RouterHeader) + nodes_size; if (header->string_table_offset < expected_string_table_offset || - header->string_table_offset > this->data_.size()) { + header->string_table_offset > this->size_) { return finalize_match(otherwise_context, 0, 0); } if (header->arguments_offset < header->string_table_offset || - header->arguments_offset > this->data_.size()) { + header->arguments_offset > this->size_) { return finalize_match(otherwise_context, 0, 0); } - const auto *string_table = reinterpret_cast( - this->data_.data() + header->string_table_offset); + const auto *string_table = + reinterpret_cast(this->data_ + header->string_table_offset); const auto string_table_size = header->arguments_offset - header->string_table_offset; @@ -568,8 +592,9 @@ auto URITemplateRouterView::match( return finalize_match(otherwise_context, 0, 0); } - // Check if this is an expansion (catch-all) - if (variable_node.type == URITemplateRouter::NodeType::Expansion) { + // Both Expansion and OptionalExpansion consume the rest of the path + // verbatim + if (is_expansion_type(variable_node.type)) { const auto remaining_length = static_cast(path_end - segment_start); callback(static_cast(variable_index), @@ -598,26 +623,44 @@ auto URITemplateRouterView::match( return finalize_match(otherwise_context, 0, 0); } - return finalize_match(otherwise_context, nodes[current_node].identifier, - nodes[current_node].context); + const auto &final_node = nodes[current_node]; + if (final_node.identifier == 0 && final_node.variable_child != NO_CHILD && + final_node.variable_child < header->node_count) { + const auto &variable_node = nodes[final_node.variable_child]; + if (variable_node.type == URITemplateRouter::NodeType::OptionalExpansion) { + if (variable_node.string_offset > string_table_size || + variable_node.string_length > + string_table_size - variable_node.string_offset) { + return finalize_match(otherwise_context, 0, 0); + } + callback(static_cast(variable_index), + {string_table + variable_node.string_offset, + variable_node.string_length}, + std::string_view{}); + return finalize_match(otherwise_context, variable_node.identifier, + variable_node.context); + } + } + + return finalize_match(otherwise_context, final_node.identifier, + final_node.context); } auto URITemplateRouterView::arguments( const URITemplateRouter::Identifier identifier, const URITemplateRouter::ArgumentCallback &callback) const -> void { - if (this->data_.size() < sizeof(RouterHeader)) { + if (this->size_ < sizeof(RouterHeader)) { return; } - const auto *header = - reinterpret_cast(this->data_.data()); + const auto *header = reinterpret_cast(this->data_); if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { return; } const auto arguments_start = static_cast(header->arguments_offset); - const auto data_size = this->data_.size(); + const auto data_size = this->size_; if (arguments_start >= data_size) { return; } @@ -628,8 +671,7 @@ auto URITemplateRouterView::arguments( } std::uint16_t entry_count = 0; - std::memcpy(&entry_count, this->data_.data() + arguments_start, - sizeof(entry_count)); + std::memcpy(&entry_count, this->data_ + arguments_start, sizeof(entry_count)); if (entry_count == 0) { return; } @@ -648,7 +690,7 @@ auto URITemplateRouterView::arguments( const auto entry_offset = entries_offset + index * ENTRY_SIZE; std::uint16_t entry_identifier = 0; - std::memcpy(&entry_identifier, this->data_.data() + entry_offset, + std::memcpy(&entry_identifier, this->data_ + entry_offset, sizeof(entry_identifier)); if (entry_identifier != identifier) { continue; @@ -657,10 +699,10 @@ auto URITemplateRouterView::arguments( std::uint32_t blob_offset = 0; std::uint32_t blob_length = 0; std::memcpy(&blob_offset, - this->data_.data() + entry_offset + sizeof(std::uint16_t), + this->data_ + entry_offset + sizeof(std::uint16_t), sizeof(blob_offset)); std::memcpy(&blob_length, - this->data_.data() + entry_offset + sizeof(std::uint16_t) + + this->data_ + entry_offset + sizeof(std::uint16_t) + sizeof(std::uint32_t), sizeof(blob_length)); @@ -672,8 +714,7 @@ auto URITemplateRouterView::arguments( } std::uint16_t arg_count = 0; - std::memcpy(&arg_count, this->data_.data() + blob_abs_offset, - sizeof(arg_count)); + std::memcpy(&arg_count, this->data_ + blob_abs_offset, sizeof(arg_count)); auto cursor = blob_abs_offset + sizeof(arg_count); const auto blob_end = blob_abs_offset + blob_length; @@ -683,15 +724,14 @@ auto URITemplateRouterView::arguments( } std::uint16_t key_length = 0; - std::memcpy(&key_length, this->data_.data() + cursor, sizeof(key_length)); + std::memcpy(&key_length, this->data_ + cursor, sizeof(key_length)); cursor += sizeof(key_length); if (key_length > blob_end - cursor) { return; } const std::string_view name{ - reinterpret_cast(this->data_.data() + cursor), - key_length}; + reinterpret_cast(this->data_ + cursor), key_length}; cursor += key_length; if (cursor + sizeof(std::uint8_t) + sizeof(std::uint16_t) > blob_end) { @@ -701,8 +741,7 @@ auto URITemplateRouterView::arguments( const auto type_tag = this->data_[cursor]; cursor += sizeof(std::uint8_t); std::uint16_t value_length = 0; - std::memcpy(&value_length, this->data_.data() + cursor, - sizeof(value_length)); + std::memcpy(&value_length, this->data_ + cursor, sizeof(value_length)); cursor += sizeof(value_length); if (value_length > blob_end - cursor) { return; @@ -711,7 +750,7 @@ auto URITemplateRouterView::arguments( switch (type_tag) { case ARGUMENT_TYPE_STRING: { const std::string_view string_value{ - reinterpret_cast(this->data_.data() + cursor), + reinterpret_cast(this->data_ + cursor), value_length}; callback(name, string_value); break; @@ -723,7 +762,7 @@ auto URITemplateRouterView::arguments( } std::int64_t integer_value = 0; - std::memcpy(&integer_value, this->data_.data() + cursor, 8); + std::memcpy(&integer_value, this->data_ + cursor, 8); callback(name, integer_value); break; } @@ -749,12 +788,11 @@ auto URITemplateRouterView::arguments( } auto URITemplateRouterView::base_path() const noexcept -> std::string_view { - if (this->data_.size() < sizeof(RouterHeader)) { + if (this->size_ < sizeof(RouterHeader)) { return {}; } - const auto *header = - reinterpret_cast(this->data_.data()); + const auto *header = reinterpret_cast(this->data_); if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { return {}; } @@ -763,14 +801,14 @@ auto URITemplateRouterView::base_path() const noexcept -> std::string_view { return {}; } - if (header->string_table_offset > this->data_.size() || + if (header->string_table_offset > this->size_ || header->arguments_offset < header->string_table_offset || - header->arguments_offset > this->data_.size()) { + header->arguments_offset > this->size_) { return {}; } - const auto *string_table = reinterpret_cast( - this->data_.data() + header->string_table_offset); + const auto *string_table = + reinterpret_cast(this->data_ + header->string_table_offset); const auto string_table_size = header->arguments_offset - header->string_table_offset; if (header->base_path_offset > string_table_size || @@ -781,25 +819,56 @@ auto URITemplateRouterView::base_path() const noexcept -> std::string_view { return {string_table + header->base_path_offset, header->base_path_length}; } +auto URITemplateRouterView::base_url() const noexcept -> std::string_view { + if (this->size_ < sizeof(RouterHeader)) { + return {}; + } + + const auto *header = reinterpret_cast(this->data_); + if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { + return {}; + } + + if (header->base_url_length == 0) { + return {}; + } + + if (header->string_table_offset > this->size_ || + header->arguments_offset < header->string_table_offset || + header->arguments_offset > this->size_) { + return {}; + } + + const auto *string_table = + reinterpret_cast(this->data_ + header->string_table_offset); + const auto string_table_size = + header->arguments_offset - header->string_table_offset; + if (header->base_url_offset > string_table_size || + header->base_url_length > string_table_size - header->base_url_offset) { + return {}; + } + + return {string_table + header->base_url_offset, header->base_url_length}; +} + auto URITemplateRouterView::size() const noexcept -> std::size_t { - if (this->data_.size() < sizeof(RouterHeader)) { + if (this->size_ < sizeof(RouterHeader)) { return 0; } - const auto *header = - reinterpret_cast(this->data_.data()); + const auto *header = reinterpret_cast(this->data_); if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { return 0; } if (header->node_count == 0 || - header->node_count > (this->data_.size() - sizeof(RouterHeader)) / - sizeof(SerializedNode)) { + header->node_count > + (this->size_ - sizeof(RouterHeader)) / sizeof(SerializedNode)) { return 0; } const auto *nodes = reinterpret_cast( - this->data_.data() + sizeof(RouterHeader)); + this->data_ + sizeof(RouterHeader)); std::size_t count = 0; for (std::uint32_t index = 0; index < header->node_count; ++index) { @@ -811,93 +880,306 @@ auto URITemplateRouterView::size() const noexcept -> std::size_t { return count; } +auto URITemplateRouterView::operation(const std::string_view operation_id) const + -> std::pair { + constexpr std::pair + miss{URITemplateRouter::Identifier{0}, URITemplateRouter::Identifier{0}}; + + if (this->size_ < sizeof(RouterHeader)) { + return miss; + } + + const auto *header = reinterpret_cast(this->data_); + if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { + return miss; + } + + const auto operations_start = + static_cast(header->operations_offset); + if (operations_start > this->size_ || + this->size_ - operations_start < sizeof(std::uint16_t)) { + return miss; + } + + std::uint16_t entry_count = 0; + std::memcpy(&entry_count, this->data_ + operations_start, + sizeof(entry_count)); + if (entry_count == 0) { + return miss; + } + + const auto entries_offset = operations_start + sizeof(entry_count); + const auto entries_size = + static_cast(entry_count) * OPERATION_ENTRY_SIZE; + if (entries_size > this->size_ - entries_offset) { + return miss; + } + + if (header->string_table_offset > this->size_ || + header->arguments_offset < header->string_table_offset || + header->arguments_offset > this->size_) { + return miss; + } + + const auto *string_table = + reinterpret_cast(this->data_ + header->string_table_offset); + const auto string_table_size = + header->arguments_offset - header->string_table_offset; + + std::uint32_t low = 0; + std::uint32_t high = entry_count; + while (low < high) { + const auto middle = low + (high - low) / 2; + const auto entry_offset = + entries_offset + + static_cast(middle) * OPERATION_ENTRY_SIZE; + + OperationEntry entry{}; + std::memcpy(&entry.string_offset, this->data_ + entry_offset, + sizeof(entry.string_offset)); + std::memcpy(&entry.string_length, + this->data_ + entry_offset + sizeof(entry.string_offset), + sizeof(entry.string_length)); + std::memcpy(&entry.identifier, + this->data_ + entry_offset + sizeof(entry.string_offset) + + sizeof(entry.string_length), + sizeof(entry.identifier)); + std::memcpy(&entry.context, + this->data_ + entry_offset + sizeof(entry.string_offset) + + sizeof(entry.string_length) + sizeof(entry.identifier), + sizeof(entry.context)); + + if (entry.string_offset > string_table_size || + entry.string_length > string_table_size - entry.string_offset) { + return miss; + } + + const auto min_length = operation_id.size() < entry.string_length + ? operation_id.size() + : entry.string_length; + const auto content_comparison = std::memcmp( + operation_id.data(), string_table + entry.string_offset, min_length); + const auto comparison = content_comparison != 0 + ? content_comparison + : static_cast(operation_id.size()) - + static_cast(entry.string_length); + + if (comparison < 0) { + high = middle; + } else if (comparison > 0) { + low = middle + 1; + } else { + return {entry.identifier, entry.context}; + } + } + + return miss; +} + auto URITemplateRouterView::at(const std::size_t index) const -> URITemplateRouter::Identifier { - assert(this->data_.size() >= sizeof(RouterHeader)); - const auto *header = - reinterpret_cast(this->data_.data()); - assert(header->magic == ROUTER_MAGIC && header->version == ROUTER_VERSION); - assert(header->node_count > 0 && - header->node_count <= (this->data_.size() - sizeof(RouterHeader)) / - sizeof(SerializedNode)); + if (this->size_ < sizeof(RouterHeader)) { + return URITemplateRouter::Identifier{0}; + } - const auto *nodes = reinterpret_cast( - this->data_.data() + sizeof(RouterHeader)); + const auto *header = reinterpret_cast(this->data_); + if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { + return URITemplateRouter::Identifier{0}; + } - std::size_t count = 0; - for (std::uint32_t node_index = 0; node_index < header->node_count; - ++node_index) { - if (nodes[node_index].identifier != 0) { - if (count == index) { - return nodes[node_index].identifier; - } - ++count; - } + const auto paths_start = static_cast(header->paths_offset); + if (paths_start > this->size_ || + this->size_ - paths_start < sizeof(std::uint16_t)) { + return URITemplateRouter::Identifier{0}; + } + + std::uint16_t path_count = 0; + std::memcpy(&path_count, this->data_ + paths_start, sizeof(path_count)); + if (index >= path_count) { + return URITemplateRouter::Identifier{0}; + } + + const auto entries_offset = paths_start + sizeof(path_count); + const auto entries_size = + static_cast(path_count) * PATH_ENTRY_SIZE; + if (entries_size > this->size_ - entries_offset) { + return URITemplateRouter::Identifier{0}; } - assert(false); - return 0; + const auto entry_offset = entries_offset + index * PATH_ENTRY_SIZE; + const auto entry = read_path_entry(this->data_, entry_offset); + return entry.identifier; } auto URITemplateRouterView::context( const URITemplateRouter::Identifier identifier) const -> URITemplateRouter::Identifier { - assert(identifier > 0); - assert(this->data_.size() >= sizeof(RouterHeader)); - const auto *header = - reinterpret_cast(this->data_.data()); - assert(header->magic == ROUTER_MAGIC && header->version == ROUTER_VERSION); - assert(header->node_count > 0 && - header->node_count <= (this->data_.size() - sizeof(RouterHeader)) / - sizeof(SerializedNode)); + if (identifier == 0 || this->size_ < sizeof(RouterHeader)) { + return URITemplateRouter::Identifier{0}; + } - const auto *nodes = reinterpret_cast( - this->data_.data() + sizeof(RouterHeader)); + const auto *header = reinterpret_cast(this->data_); + if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { + return URITemplateRouter::Identifier{0}; + } + + const auto paths_start = static_cast(header->paths_offset); + if (paths_start > this->size_ || + this->size_ - paths_start < sizeof(std::uint16_t)) { + return URITemplateRouter::Identifier{0}; + } + + std::uint16_t path_count = 0; + std::memcpy(&path_count, this->data_ + paths_start, sizeof(path_count)); - for (std::uint32_t node_index = 0; node_index < header->node_count; - ++node_index) { - if (nodes[node_index].identifier == identifier) { - return nodes[node_index].context; + const auto entries_offset = paths_start + sizeof(path_count); + const auto entries_size = + static_cast(path_count) * PATH_ENTRY_SIZE; + if (entries_size > this->size_ - entries_offset) { + return URITemplateRouter::Identifier{0}; + } + + for (std::uint16_t index = 0; index < path_count; ++index) { + const auto entry_offset = entries_offset + index * PATH_ENTRY_SIZE; + const auto entry = read_path_entry(this->data_, entry_offset); + if (entry.identifier == identifier) { + return entry.context; } } - assert(false); - return 0; + return URITemplateRouter::Identifier{0}; } auto URITemplateRouterView::path( const URITemplateRouter::Identifier identifier) const -> std::string { - assert(identifier > 0); - assert(this->data_.size() >= sizeof(RouterHeader)); - const auto *header = - reinterpret_cast(this->data_.data()); - assert(header->magic == ROUTER_MAGIC && header->version == ROUTER_VERSION); - assert(header->node_count > 0 && - header->node_count <= (this->data_.size() - sizeof(RouterHeader)) / - sizeof(SerializedNode)); - assert(header->string_table_offset >= - sizeof(RouterHeader) + - header->node_count * sizeof(SerializedNode) && - header->string_table_offset <= this->data_.size()); - assert(header->arguments_offset >= header->string_table_offset && - header->arguments_offset <= this->data_.size()); + if (identifier == 0 || this->size_ < sizeof(RouterHeader)) { + return {}; + } - const auto *nodes = reinterpret_cast( - this->data_.data() + sizeof(RouterHeader)); - const auto *string_table = reinterpret_cast( - this->data_.data() + header->string_table_offset); + const auto *header = reinterpret_cast(this->data_); + if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { + return {}; + } + + const auto paths_start = static_cast(header->paths_offset); + if (paths_start > this->size_ || + this->size_ - paths_start < sizeof(std::uint16_t)) { + return {}; + } + + if (header->string_table_offset > this->size_ || + header->arguments_offset < header->string_table_offset || + header->arguments_offset > this->size_) { + return {}; + } + + const auto *string_table = + reinterpret_cast(this->data_ + header->string_table_offset); const auto string_table_size = header->arguments_offset - header->string_table_offset; - const auto base_path_depth = count_base_path_segments(this->base_path()); + std::uint16_t path_count = 0; + std::memcpy(&path_count, this->data_ + paths_start, sizeof(path_count)); + + const auto entries_offset = paths_start + sizeof(path_count); + const auto entries_size = + static_cast(path_count) * PATH_ENTRY_SIZE; + if (entries_size > this->size_ - entries_offset) { + return {}; + } + + for (std::uint16_t index = 0; index < path_count; ++index) { + const auto entry_offset = entries_offset + index * PATH_ENTRY_SIZE; + const auto entry = read_path_entry(this->data_, entry_offset); + if (entry.identifier == identifier) { + if (entry.string_offset > string_table_size || + entry.string_length > string_table_size - entry.string_offset) { + return {}; + } + return std::string{string_table + entry.string_offset, + entry.string_length}; + } + } + + return {}; +} + +auto URITemplateRouterView::operation_id( + const URITemplateRouter::Identifier identifier) const -> std::string_view { + if (identifier == 0) { + return {}; + } + + if (this->size_ < sizeof(RouterHeader)) { + return {}; + } - std::string accumulator; - [[maybe_unused]] const auto found = reconstruct_path_recursive( - nodes, header->node_count, string_table, string_table_size, 0, 0, - base_path_depth, identifier, accumulator); + const auto *header = reinterpret_cast(this->data_); + if (header->magic != ROUTER_MAGIC || header->version != ROUTER_VERSION) { + return {}; + } + + const auto operations_start = + static_cast(header->operations_offset); + if (operations_start > this->size_ || + this->size_ - operations_start < sizeof(std::uint16_t)) { + return {}; + } + + std::uint16_t entry_count = 0; + std::memcpy(&entry_count, this->data_ + operations_start, + sizeof(entry_count)); + if (entry_count == 0) { + return {}; + } + + const auto entries_offset = operations_start + sizeof(entry_count); + const auto entries_size = + static_cast(entry_count) * OPERATION_ENTRY_SIZE; + if (entries_size > this->size_ - entries_offset) { + return {}; + } + + if (header->string_table_offset > this->size_ || + header->arguments_offset < header->string_table_offset || + header->arguments_offset > this->size_) { + return {}; + } + + const auto *string_table = + reinterpret_cast(this->data_ + header->string_table_offset); + const auto string_table_size = + header->arguments_offset - header->string_table_offset; + + for (std::uint16_t index = 0; index < entry_count; ++index) { + const auto entry_offset = + entries_offset + static_cast(index) * OPERATION_ENTRY_SIZE; + + OperationEntry entry{}; + std::memcpy(&entry.string_offset, this->data_ + entry_offset, + sizeof(entry.string_offset)); + std::memcpy(&entry.string_length, + this->data_ + entry_offset + sizeof(entry.string_offset), + sizeof(entry.string_length)); + std::memcpy(&entry.identifier, + this->data_ + entry_offset + sizeof(entry.string_offset) + + sizeof(entry.string_length), + sizeof(entry.identifier)); + + if (entry.identifier != identifier) { + continue; + } + + if (entry.string_offset > string_table_size || + entry.string_length > string_table_size - entry.string_offset) { + return {}; + } + + return {string_table + entry.string_offset, entry.string_length}; + } - assert(found); - return accumulator; + return {}; } } // namespace sourcemeta::core diff --git a/vendor/core/src/extension/editorschema/CMakeLists.txt b/vendor/core/src/extension/editorschema/CMakeLists.txt deleted file mode 100644 index 2b665d8d8..000000000 --- a/vendor/core/src/extension/editorschema/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME editorschema - SOURCES editorschema.cc) - -if(SOURCEMETA_CORE_INSTALL) - sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME editorschema) -endif() - -target_link_libraries(sourcemeta_core_editorschema PUBLIC sourcemeta::core::jsonschema) diff --git a/vendor/core/src/lang/io/include/sourcemeta/core/io.h b/vendor/core/src/lang/io/include/sourcemeta/core/io.h index 0d1aac3e4..46c43b27c 100644 --- a/vendor/core/src/lang/io/include/sourcemeta/core/io.h +++ b/vendor/core/src/lang/io/include/sourcemeta/core/io.h @@ -13,12 +13,18 @@ #include // NOLINTEND(misc-include-cleaner) -#include // std::filesystem -#include // std::basic_ifstream -#include // std::cin -#include // std::basic_istream -#include // std::basic_ostringstream -#include // std::basic_string, std::char_traits, std::string +#include // std::byte +#include // std::filesystem +#include // std::basic_ifstream +#include // std::function +#include // std::cin +#include // std::basic_istream +#include // std::ostream +#include // std::span +#include // std::basic_ostringstream +#include // std::basic_string, std::char_traits, std::string +#include // std::string_view +#include // std::error_code /// @defgroup io I/O /// @brief A growing collection of I/O utilities @@ -64,18 +70,35 @@ auto weakly_canonical(const std::filesystem::path &path) /// @ingroup io /// -/// Check if a file path starts with another path. This function assumes the -/// paths are canonicalised. For example: +/// Check whether a path lies under another path, comparing component by +/// component after weak canonicalisation. For example: /// /// ```cpp /// #include /// #include /// -/// assert(sourcemeta::core::starts_with("/foo/bar", "/foo")); +/// assert(sourcemeta::core::is_under_path("/foo/bar/baz", "/foo")); /// ``` SOURCEMETA_CORE_IO_EXPORT -auto starts_with(const std::filesystem::path &path, - const std::filesystem::path &prefix) -> bool; +auto is_under_path(const std::filesystem::path &path, + const std::filesystem::path &prefix) -> bool; + +/// @ingroup io +/// +/// Return the portion of a path that follows a given prefix, or the path +/// unchanged if it does not lie under the prefix. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// assert(sourcemeta::core::strip_path_prefix("/foo/bar/baz", "/foo") == +/// "bar/baz"); +/// ``` +SOURCEMETA_CORE_IO_EXPORT +auto strip_path_prefix(const std::filesystem::path &path, + const std::filesystem::path &prefix) + -> std::filesystem::path; /// @ingroup io /// @@ -168,9 +191,17 @@ auto read_file_to_string(const std::filesystem::path &path) stream.exceptions(std::basic_ifstream::badbit); + // `file_size` only works on regular files, so when it cannot determine a + // size (FIFOs from process substitution, sockets, pipes, or any other + // stat failure) fall back to a streaming read on the already-open stream. + std::error_code file_size_error; + const auto size{std::filesystem::file_size(canonical_path, file_size_error)}; + if (file_size_error) { + return read_to_string(stream); + } + std::basic_string result; - result.resize( - static_cast(std::filesystem::file_size(canonical_path))); + result.resize(static_cast(size)); stream.read(result.data(), static_cast(result.size())); // Text-mode reads may return fewer characters than the byte count // (i.e. CRLF collapses to LF on Windows), so trim to actual. @@ -205,6 +236,53 @@ SOURCEMETA_CORE_IO_EXPORT auto hardlink_directory(const std::filesystem::path &source, const std::filesystem::path &destination) -> void; +/// @ingroup io +/// +/// Non-atomically write `contents` to `path`. For example: +/// +/// ```cpp +/// #include +/// +/// sourcemeta::core::write_file("/tmp/foo.json", "{\"a\":1}"); +/// ``` +SOURCEMETA_CORE_IO_EXPORT +auto write_file(const std::filesystem::path &path, + const std::string_view contents) -> void; + +/// @ingroup io +/// +/// Non-atomically write a byte span to `path`. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// constexpr std::array bytes{ +/// std::byte{0x41}, std::byte{0x42}, std::byte{0x43}}; +/// sourcemeta::core::write_file("/tmp/foo.bin", std::span{bytes}); +/// ``` +SOURCEMETA_CORE_IO_EXPORT +auto write_file(const std::filesystem::path &path, + const std::span contents) -> void; + +/// @ingroup io +/// +/// Callback variant of `write_file`. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// sourcemeta::core::write_file("/tmp/foo.json", +/// [&](std::ostream &stream) { +/// sourcemeta::core::prettify(document, stream); +/// stream << "\n"; +/// }); +/// ``` +SOURCEMETA_CORE_IO_EXPORT +auto write_file(const std::filesystem::path &path, + const std::function &writer) -> void; + /// @ingroup io /// /// Flush an existing file to disk, beyond just to the operating system. For diff --git a/vendor/core/src/lang/io/io.cc b/vendor/core/src/lang/io/io.cc index 9fa9a9663..6bf742eac 100644 --- a/vendor/core/src/lang/io/io.cc +++ b/vendor/core/src/lang/io/io.cc @@ -1,15 +1,91 @@ #include +#include // assert +#include // EACCES, errno +#include // std::byte +#include // std::filesystem +#include // std::ofstream +#include // std::function +#include // std::ios::binary, std::ios::trunc, std::ios::goodbit, std::streamsize +#include // std::ostream +#include // std::span +#include // std::string_view #include // std::error_code, std::system_category, std::generic_category #if defined(_WIN32) #include // HANDLE, CreateFileW, FlushFileBuffers, CloseHandle #else -#include // errno (for error codes) #include // open, O_RDWR, O_DIRECTORY, O_RDONLY #include // close, fsync #endif +namespace { + +class FileWriter { +public: + FileWriter(const std::filesystem::path &path) { + if (path.has_parent_path()) { + std::filesystem::create_directories(path.parent_path()); + } + + this->stream_.exceptions(std::ofstream::failbit | std::ofstream::badbit); + try { + this->stream_.open(path, std::ios::binary | std::ios::trunc); + } catch (...) { + // Capture before any other syscall can clobber errno + const auto open_errno{errno}; + if (open_errno == EACCES) { + throw sourcemeta::core::IOFilePermissionError{path}; + } + + throw; + } + } + + ~FileWriter() { + if (!this->committed_ && this->stream_.is_open()) { + this->stream_.exceptions(std::ios::goodbit); + this->stream_.close(); + } + } + + FileWriter(const FileWriter &) = delete; + FileWriter(FileWriter &&) = delete; + auto operator=(const FileWriter &) -> FileWriter & = delete; + auto operator=(FileWriter &&) -> FileWriter & = delete; + + [[nodiscard]] auto stream() -> std::ostream & { return this->stream_; } + + auto commit() -> void { + assert(!this->committed_); + this->stream_.flush(); + this->stream_.close(); + this->committed_ = true; + } + +private: + std::ofstream stream_; + bool committed_{false}; +}; + +auto normalize(const std::filesystem::path &canonical_path) + -> std::filesystem::path { + auto normalized{canonical_path.lexically_normal()}; + + // `lexically_normal` can leave a trailing separator behind (for example, + // `/foo/bar/.` becomes `/foo/bar/` and `/foo/bar/..` becomes `/foo/`). + // Strip it so the canonical form of a directory matches its non-trailing + // counterpart, while preserving the root path itself. + if (!normalized.empty() && !normalized.has_filename() && + normalized != normalized.root_path()) { + normalized = normalized.parent_path(); + } + + return normalized; +} + +} // namespace + namespace sourcemeta::core { auto canonical(const std::filesystem::path &path) -> std::filesystem::path { @@ -33,15 +109,19 @@ auto canonical(const std::filesystem::path &path) -> std::filesystem::path { auto weakly_canonical(const std::filesystem::path &path) -> std::filesystem::path { + if (path.empty()) { + return path; + } + // On Linux, FIFO files (like /dev/fd/XX due to process substitution) // cannot be made canonical // See https://github.com/sourcemeta/jsonschema/issues/252 if (std::filesystem::is_fifo(path)) { - return path; + return normalize(path); } try { - return std::filesystem::weakly_canonical(path); + return normalize(std::filesystem::weakly_canonical(path)); } catch (const std::filesystem::filesystem_error &error) { if (error.code() == std::errc::no_such_file_or_directory) { throw IOFileNotFoundError{path}; @@ -51,13 +131,17 @@ auto weakly_canonical(const std::filesystem::path &path) } } -auto starts_with(const std::filesystem::path &path, - const std::filesystem::path &prefix) -> bool { - auto path_iterator = path.begin(); - auto prefix_iterator = prefix.begin(); +auto is_under_path(const std::filesystem::path &path, + const std::filesystem::path &prefix) -> bool { + const auto canonical_path{sourcemeta::core::weakly_canonical(path)}; + const auto canonical_prefix{sourcemeta::core::weakly_canonical(prefix)}; + + auto path_iterator{canonical_path.begin()}; + auto prefix_iterator{canonical_prefix.begin()}; - while (prefix_iterator != prefix.end()) { - if (path_iterator == path.end() || *path_iterator != *prefix_iterator) { + while (prefix_iterator != canonical_prefix.end()) { + if (path_iterator == canonical_path.end() || + *path_iterator != *prefix_iterator) { return false; } @@ -68,12 +152,40 @@ auto starts_with(const std::filesystem::path &path, return true; } +auto strip_path_prefix(const std::filesystem::path &path, + const std::filesystem::path &prefix) + -> std::filesystem::path { + const auto canonical_path{sourcemeta::core::weakly_canonical(path)}; + const auto canonical_prefix{sourcemeta::core::weakly_canonical(prefix)}; + + auto path_iterator{canonical_path.begin()}; + auto prefix_iterator{canonical_prefix.begin()}; + + while (prefix_iterator != canonical_prefix.end()) { + if (path_iterator == canonical_path.end() || + *path_iterator != *prefix_iterator) { + return path; + } + + ++path_iterator; + ++prefix_iterator; + } + + std::filesystem::path result; + while (path_iterator != canonical_path.end()) { + result /= *path_iterator; + ++path_iterator; + } + + return result; +} + auto hardlink_directory(const std::filesystem::path &source, const std::filesystem::path &destination) -> void { assert(std::filesystem::is_directory(source)); assert(!std::filesystem::exists(destination) || std::filesystem::is_directory(destination)); - assert(!starts_with(destination, source)); + assert(!is_under_path(destination, source)); std::filesystem::create_directories(destination); for (const auto &entry : std::filesystem::recursive_directory_iterator{source}) { @@ -87,6 +199,29 @@ auto hardlink_directory(const std::filesystem::path &source, } } +auto write_file(const std::filesystem::path &path, + const std::string_view contents) -> void { + FileWriter file{path}; + file.stream().write(contents.data(), + static_cast(contents.size())); + file.commit(); +} + +auto write_file(const std::filesystem::path &path, + const std::span contents) -> void { + FileWriter file{path}; + file.stream().write(reinterpret_cast(contents.data()), + static_cast(contents.size())); + file.commit(); +} + +auto write_file(const std::filesystem::path &path, + const std::function &writer) -> void { + FileWriter file{path}; + writer(file.stream()); + file.commit(); +} + auto flush(const std::filesystem::path &path) -> void { #if defined(_WIN32) HANDLE hFile = diff --git a/vendor/core/src/lang/text/CMakeLists.txt b/vendor/core/src/lang/text/CMakeLists.txt new file mode 100644 index 000000000..3b8602d58 --- /dev/null +++ b/vendor/core/src/lang/text/CMakeLists.txt @@ -0,0 +1,6 @@ +sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME text + SOURCES text.cc) + +if(SOURCEMETA_CORE_INSTALL) + sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME text) +endif() diff --git a/vendor/core/src/lang/text/include/sourcemeta/core/text.h b/vendor/core/src/lang/text/include/sourcemeta/core/text.h new file mode 100644 index 000000000..c9851754c --- /dev/null +++ b/vendor/core/src/lang/text/include/sourcemeta/core/text.h @@ -0,0 +1,39 @@ +#ifndef SOURCEMETA_CORE_TEXT_H_ +#define SOURCEMETA_CORE_TEXT_H_ + +#ifndef SOURCEMETA_CORE_TEXT_EXPORT +#include +#endif + +#include // std::string + +/// @defgroup text Text +/// @brief A collection of general-purpose text manipulation utilities +/// +/// This functionality is included as follows: +/// +/// ```cpp +/// #include +/// ``` + +namespace sourcemeta::core { + +/// @ingroup text +/// +/// Convert a string to Title Case in place. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// std::string value{"hello_world"}; +/// sourcemeta::core::to_title_case(value); +/// assert(value == "Hello World"); +/// ``` +SOURCEMETA_CORE_TEXT_EXPORT +auto to_title_case(std::string &value) -> void; + +} // namespace sourcemeta::core + +#endif diff --git a/vendor/core/src/lang/text/text.cc b/vendor/core/src/lang/text/text.cc new file mode 100644 index 000000000..3c3b4ae5e --- /dev/null +++ b/vendor/core/src/lang/text/text.cc @@ -0,0 +1,37 @@ +#include + +#include // std::isalpha, std::toupper +#include // std::size_t + +namespace sourcemeta::core { + +auto to_title_case(std::string &value) -> void { + std::size_t write{0}; + bool capitalize_next{true}; + bool pending_separator{false}; + for (const char character : value) { + if (character == '_' || character == '-') { + if (write > 0) { + pending_separator = true; + } + } else { + if (pending_separator) { + value[write++] = ' '; + pending_separator = false; + capitalize_next = true; + } + if (capitalize_next) { + value[write++] = static_cast( + std::toupper(static_cast(character))); + if (std::isalpha(static_cast(character))) { + capitalize_next = false; + } + } else { + value[write++] = character; + } + } + } + value.resize(write); +} + +} // namespace sourcemeta::core