From 590820adab13b7428e0a7d77178017e3497e4d2f Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Thu, 30 Jan 2025 14:39:48 -0400 Subject: [PATCH] Upgrade Core to `47ba2307b9bfab9fb378386207b3172c97ed1363` (#373) Signed-off-by: Juan Cruz Viotti --- DEPENDENCIES | 2 +- benchmark/compiler_2019_09.cc | 2 +- benchmark/compiler_draft6.cc | 2 +- benchmark/evaluator_2019_09.cc | 4 +- benchmark/evaluator_2020_12.cc | 8 +- benchmark/evaluator_draft4.cc | 40 +++---- benchmark/evaluator_draft6.cc | 2 +- benchmark/evaluator_draft7.cc | 12 +- contrib/perf.cc | 2 +- contrib/trace.cc | 2 +- contrib/validate.cc | 2 +- .../include/sourcemeta/blaze/compiler.h | 2 +- .../sourcemeta/blaze/compiler_output.h | 4 +- .../include/sourcemeta/blaze/evaluator.h | 4 +- test/compiler/compiler_output_error_test.cc | 22 ++-- test/compiler/compiler_output_trace_test.cc | 4 +- test/evaluator/evaluator_2019_09_test.cc | 8 +- test/evaluator/evaluator_2020_12_test.cc | 8 +- test/evaluator/evaluator_draft4_test.cc | 34 +++--- test/evaluator/evaluator_draft6_test.cc | 14 +-- test/evaluator/evaluator_draft7_test.cc | 14 +-- test/evaluator/evaluator_test.cc | 8 +- test/evaluator/evaluator_utils.h | 8 +- test/evaluator/officialsuite.cc | 2 +- test/packaging/find_package/hello.cc | 2 +- .../core/src/core/jsonschema/CMakeLists.txt | 2 +- vendor/core/src/core/jsonschema/bundle.cc | 2 +- .../include/sourcemeta/core/jsonschema.h | 112 +++++++++++++----- .../sourcemeta/core/jsonschema_bundle.h | 4 +- .../sourcemeta/core/jsonschema_frame.h | 2 +- .../sourcemeta/core/jsonschema_resolver.h | 8 +- .../sourcemeta/core/jsonschema_transform.h | 2 +- .../sourcemeta/core/jsonschema_unevaluated.h | 4 +- .../sourcemeta/core/jsonschema_walker.h | 8 +- vendor/core/src/core/jsonschema/jsonschema.cc | 80 ++++++++++++- .../core/jsonschema/official_resolver.in.cc | 2 +- vendor/core/src/core/jsonschema/relativize.cc | 49 -------- vendor/core/src/core/jsonschema/resolver.cc | 15 ++- .../include/sourcemeta/core/alterschema.h | 2 +- 39 files changed, 296 insertions(+), 208 deletions(-) delete mode 100644 vendor/core/src/core/jsonschema/relativize.cc diff --git a/DEPENDENCIES b/DEPENDENCIES index a1db1eca..1eb1eae5 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -1,3 +1,3 @@ vendorpull https://github.com/sourcemeta/vendorpull dea311b5bfb53b6926a4140267959ae334d3ecf4 -core https://github.com/sourcemeta/core 1257bcddc2797de7c95dedefebf6c2fb1e00717a +core https://github.com/sourcemeta/core 47ba2307b9bfab9fb378386207b3172c97ed1363 jsonschema-test-suite https://github.com/json-schema-org/JSON-Schema-Test-Suite 4ba013d58e747ecaf48c8bb7cf248cb0d564afbc diff --git a/benchmark/compiler_2019_09.cc b/benchmark/compiler_2019_09.cc index ccf191a6..8958732a 100644 --- a/benchmark/compiler_2019_09.cc +++ b/benchmark/compiler_2019_09.cc @@ -15,7 +15,7 @@ static void Compiler_2019_09_OMC_JSON_V2(benchmark::State &state) { for (auto _ : state) { auto result{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; assert(!result.instructions.empty()); benchmark::DoNotOptimize(result.instructions); diff --git a/benchmark/compiler_draft6.cc b/benchmark/compiler_draft6.cc index 787520fd..28b71d83 100644 --- a/benchmark/compiler_draft6.cc +++ b/benchmark/compiler_draft6.cc @@ -15,7 +15,7 @@ static void Compiler_Draft6_AdaptiveCard(benchmark::State &state) { for (auto _ : state) { auto result{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; assert(!result.instructions.empty()); benchmark::DoNotOptimize(result.instructions); diff --git a/benchmark/evaluator_2019_09.cc b/benchmark/evaluator_2019_09.cc index 14d17a8f..a053b8d7 100644 --- a/benchmark/evaluator_2019_09.cc +++ b/benchmark/evaluator_2019_09.cc @@ -35,7 +35,7 @@ static void Evaluator_2019_09_Unevaluated_Properties(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -56,7 +56,7 @@ static void Evaluator_2019_09_OMC_JSON_V2_1(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { diff --git a/benchmark/evaluator_2020_12.cc b/benchmark/evaluator_2020_12.cc index 9c73ab09..c44be64f 100644 --- a/benchmark/evaluator_2020_12.cc +++ b/benchmark/evaluator_2020_12.cc @@ -59,7 +59,7 @@ static void Evaluator_2020_12_Dynamic_Ref(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -86,7 +86,7 @@ static void Evaluator_2020_12_Dynamic_Ref_Single(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -107,7 +107,7 @@ static void Evaluator_2020_12_CQL_1(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -128,7 +128,7 @@ static void Evaluator_2020_12_OpenAPI(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { diff --git a/benchmark/evaluator_draft4.cc b/benchmark/evaluator_draft4.cc index 3d83118a..56bf3db9 100644 --- a/benchmark/evaluator_draft4.cc +++ b/benchmark/evaluator_draft4.cc @@ -18,10 +18,10 @@ static void Evaluator_Draft4_Meta_1_No_Callback(benchmark::State &state) { })JSON")}; const auto metaschema{sourcemeta::core::metaschema( - schema, sourcemeta::core::official_resolver)}; + schema, sourcemeta::core::schema_official_resolver)}; const auto metaschema_template{sourcemeta::blaze::compile( metaschema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -101,7 +101,7 @@ static void Evaluator_Draft4_Required_Properties(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -152,7 +152,7 @@ static void Evaluator_Draft4_Many_Optional_Properties_Minimal_Match( const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -203,7 +203,7 @@ static void Evaluator_Draft4_Few_Optional_Properties_Minimal_Match( const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -281,7 +281,7 @@ static void Evaluator_Draft4_Items_Schema(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -417,7 +417,7 @@ static void Evaluator_Draft4_Nested_Object(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -460,7 +460,7 @@ Evaluator_Draft4_Properties_Triad_Optional(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -504,7 +504,7 @@ Evaluator_Draft4_Properties_Triad_Required(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -543,7 +543,7 @@ static void Evaluator_Draft4_Properties_Triad_Closed(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -589,7 +589,7 @@ static void Evaluator_Draft4_Properties_Closed(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -634,7 +634,7 @@ static void Evaluator_Draft4_Non_Recursive_Ref(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -674,7 +674,7 @@ static void Evaluator_Draft4_Pattern_Properties_True(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -732,7 +732,7 @@ static void Evaluator_Draft4_Ref_To_Single_Property(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -781,7 +781,7 @@ Evaluator_Draft4_Additional_Properties_Type(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; @@ -823,7 +823,7 @@ static void Evaluator_Draft4_Nested_Oneof(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -843,7 +843,7 @@ static void Evaluator_Draft4_Short_Enum(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -905,7 +905,7 @@ static void Evaluator_Draft4_Long_Enum(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -967,7 +967,7 @@ static void Evaluator_Draft4_Long_Enum_Short_Strings(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -987,7 +987,7 @@ static void Evaluator_Draft4_Type_Object(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { diff --git a/benchmark/evaluator_draft6.cc b/benchmark/evaluator_draft6.cc index a1546b89..2949f147 100644 --- a/benchmark/evaluator_draft6.cc +++ b/benchmark/evaluator_draft6.cc @@ -47,7 +47,7 @@ static void Evaluator_Draft6_Property_Names(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { diff --git a/benchmark/evaluator_draft7.cc b/benchmark/evaluator_draft7.cc index 98fa22fa..966ef7d1 100644 --- a/benchmark/evaluator_draft7.cc +++ b/benchmark/evaluator_draft7.cc @@ -30,7 +30,7 @@ static void Evaluator_Draft7_If_Then_Else(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -51,7 +51,7 @@ static void Evaluator_Draft7_Vercel_1(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -72,7 +72,7 @@ static void Evaluator_Draft7_Helm_Chart_Lock_1(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -93,7 +93,7 @@ static void Evaluator_Draft7_Helm_Chart_Lock_2(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -114,7 +114,7 @@ static void Evaluator_Draft7_Jasmine_1(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { @@ -135,7 +135,7 @@ static void Evaluator_Draft7_Dependabot_1(benchmark::State &state) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; for (auto _ : state) { diff --git a/contrib/perf.cc b/contrib/perf.cc index 03362e86..7236cf2c 100644 --- a/contrib/perf.cc +++ b/contrib/perf.cc @@ -180,7 +180,7 @@ auto main(int argc, char **argv) noexcept -> int { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler, sourcemeta::blaze::Mode::FastValidation)}; diff --git a/contrib/trace.cc b/contrib/trace.cc index cb820663..ef6d3c68 100644 --- a/contrib/trace.cc +++ b/contrib/trace.cc @@ -42,7 +42,7 @@ auto main(int argc, char **argv) noexcept -> int { const auto schema{sourcemeta::core::read_json(argv[1])}; const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const std::filesystem::path instance_path{argv[2]}; const auto instance{sourcemeta::core::read_json(instance_path)}; diff --git a/contrib/validate.cc b/contrib/validate.cc index a603f973..4aca3907 100644 --- a/contrib/validate.cc +++ b/contrib/validate.cc @@ -27,7 +27,7 @@ auto main(int argc, char **argv) noexcept -> int { const auto compile_start{std::chrono::high_resolution_clock::now()}; const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const auto compile_end{std::chrono::high_resolution_clock::now()}; const auto compile_duration{ diff --git a/src/compiler/include/sourcemeta/blaze/compiler.h b/src/compiler/include/sourcemeta/blaze/compiler.h index 37ba1706..6c9f9e72 100644 --- a/src/compiler/include/sourcemeta/blaze/compiler.h +++ b/src/compiler/include/sourcemeta/blaze/compiler.h @@ -136,7 +136,7 @@ auto SOURCEMETA_BLAZE_COMPILER_EXPORT default_schema_compiler( /// /// const auto schema_template{sourcemeta::blaze::compile( /// schema, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver, +/// sourcemeta::core::schema_official_resolver, /// sourcemeta::core::default_schema_compiler)}; /// /// // Evaluate or encode diff --git a/src/compiler/include/sourcemeta/blaze/compiler_output.h b/src/compiler/include/sourcemeta/blaze/compiler_output.h index ad87b8b5..1c307071 100644 --- a/src/compiler/include/sourcemeta/blaze/compiler_output.h +++ b/src/compiler/include/sourcemeta/blaze/compiler_output.h @@ -40,7 +40,7 @@ namespace sourcemeta::blaze { /// /// const auto schema_template{sourcemeta::blaze::compile( /// schema, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver, +/// sourcemeta::core::schema_official_resolver, /// sourcemeta::core::default_schema_compiler)}; /// /// const sourcemeta::core::JSON instance{5}; @@ -127,7 +127,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT ErrorOutput { /// /// const auto schema_template{sourcemeta::blaze::compile( /// schema, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver, +/// sourcemeta::core::schema_official_resolver, /// sourcemeta::core::default_schema_compiler)}; /// /// const sourcemeta::core::JSON instance{5}; diff --git a/src/evaluator/include/sourcemeta/blaze/evaluator.h b/src/evaluator/include/sourcemeta/blaze/evaluator.h index dbfa131d..25c5a1ef 100644 --- a/src/evaluator/include/sourcemeta/blaze/evaluator.h +++ b/src/evaluator/include/sourcemeta/blaze/evaluator.h @@ -80,7 +80,7 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT Evaluator { /// /// const auto schema_template{sourcemeta::blaze::compile( /// schema, sourcemeta::core::schema_official_walker, - /// sourcemeta::core::official_resolver, + /// sourcemeta::core::schema_official_resolver, /// sourcemeta::core::default_schema_compiler)}; /// /// sourcemeta::blaze::Evaluator evaluator; @@ -112,7 +112,7 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT Evaluator { /// /// const auto schema_template{sourcemeta::blaze::compile( /// schema, sourcemeta::core::schema_official_walker, - /// sourcemeta::core::official_resolver, + /// sourcemeta::core::schema_official_resolver, /// sourcemeta::core::default_schema_compiler)}; /// /// static auto callback( diff --git a/test/compiler/compiler_output_error_test.cc b/test/compiler/compiler_output_error_test.cc index d8f74ecf..9e84d3c0 100644 --- a/test/compiler/compiler_output_error_test.cc +++ b/test/compiler/compiler_output_error_test.cc @@ -23,7 +23,7 @@ TEST(Compiler_output_error, success_string_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{"foo"}; @@ -57,7 +57,7 @@ TEST(Compiler_output_error, fail_meaningless_if_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{sourcemeta::core::parse_json(R"JSON({ @@ -98,7 +98,7 @@ TEST(Compiler_output_error, success_dynamic_anchor_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{"foo"}; @@ -125,7 +125,7 @@ TEST(Compiler_output_error, success_oneof_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{"fo"}; @@ -149,7 +149,7 @@ TEST(Compiler_output_error, fail_string) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{5}; @@ -182,7 +182,7 @@ TEST(Compiler_output_error, fail_string_over_ref) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{5}; @@ -215,7 +215,7 @@ TEST(Compiler_output_error, fail_string_with_matching_base) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{5}; @@ -250,7 +250,7 @@ TEST(Compiler_output_error, fail_string_with_non_matching_base) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{5}; @@ -282,7 +282,7 @@ TEST(Compiler_output_error, fail_oneof_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{"foo"}; @@ -312,7 +312,7 @@ TEST(Compiler_output_error, fail_not_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{"foo"}; @@ -344,7 +344,7 @@ TEST(Compiler_output_error, fail_not_not_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{1}; diff --git a/test/compiler/compiler_output_trace_test.cc b/test/compiler/compiler_output_trace_test.cc index 81b4d087..6f1f2739 100644 --- a/test/compiler/compiler_output_trace_test.cc +++ b/test/compiler/compiler_output_trace_test.cc @@ -32,7 +32,7 @@ TEST(Compiler_output_trace, pass_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{sourcemeta::core::parse_json(R"JSON({ @@ -78,7 +78,7 @@ TEST(Compiler_output_trace, pass_with_matching_prefix_1) { const auto schema_template{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{sourcemeta::core::parse_json(R"JSON({ diff --git a/test/evaluator/evaluator_2019_09_test.cc b/test/evaluator/evaluator_2019_09_test.cc index 645ea96a..df457d91 100644 --- a/test/evaluator/evaluator_2019_09_test.cc +++ b/test/evaluator/evaluator_2019_09_test.cc @@ -9,7 +9,7 @@ #include "evaluator_utils.h" TEST(Evaluator_2019_09, metaschema_1) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "https://json-schema.org/draft/2019-09/schema")}; EXPECT_TRUE(metaschema.has_value()); @@ -26,14 +26,14 @@ TEST(Evaluator_2019_09, metaschema_1) { } TEST(Evaluator_2019_09, metaschema_hyper_self) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "https://json-schema.org/draft/2019-09/hyper-schema")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_FAST_SUCCESS(metaschema.value(), metaschema.value(), 92); } TEST(Evaluator_2019_09, metaschema_hyper_self_exhaustive) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "https://json-schema.org/draft/2019-09/hyper-schema")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(metaschema.value(), metaschema.value(), @@ -5209,7 +5209,7 @@ TEST(Evaluator_2019_09, reference_from_unknown_keyword) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.id(), "#/properties/baz"); diff --git a/test/evaluator/evaluator_2020_12_test.cc b/test/evaluator/evaluator_2020_12_test.cc index b041c2e5..40847e4d 100644 --- a/test/evaluator/evaluator_2020_12_test.cc +++ b/test/evaluator/evaluator_2020_12_test.cc @@ -19,7 +19,7 @@ TEST(Evaluator_2020_12, unknown_1) { } TEST(Evaluator_2020_12, metaschema_hyper_1) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "https://json-schema.org/draft/2020-12/hyper-schema")}; EXPECT_TRUE(metaschema.has_value()); const auto instance{sourcemeta::core::parse_json(R"JSON({})JSON")}; @@ -27,14 +27,14 @@ TEST(Evaluator_2020_12, metaschema_hyper_1) { } TEST(Evaluator_2020_12, metaschema_hyper_self) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "https://json-schema.org/draft/2020-12/hyper-schema")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_FAST_SUCCESS(metaschema.value(), metaschema.value(), 112); } TEST(Evaluator_2020_12, metaschema_hyper_self_exhaustive) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "https://json-schema.org/draft/2020-12/hyper-schema")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(metaschema.value(), metaschema.value(), @@ -1204,7 +1204,7 @@ TEST(Evaluator_2020_12, reference_from_unknown_keyword) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.id(), "#/properties/baz"); diff --git a/test/evaluator/evaluator_draft4_test.cc b/test/evaluator/evaluator_draft4_test.cc index 15a2d7ed..674c2cec 100644 --- a/test/evaluator/evaluator_draft4_test.cc +++ b/test/evaluator/evaluator_draft4_test.cc @@ -9,7 +9,7 @@ #include "evaluator_utils.h" TEST(Evaluator_draft4, metaschema_1) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-04/schema#")}; EXPECT_TRUE(metaschema.has_value()); @@ -18,7 +18,7 @@ TEST(Evaluator_draft4, metaschema_1) { } TEST(Evaluator_draft4, metaschema_2) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-04/schema#")}; EXPECT_TRUE(metaschema.has_value()); @@ -35,14 +35,14 @@ TEST(Evaluator_draft4, metaschema_2) { } TEST(Evaluator_draft4, metaschema_hyper_self) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-04/hyper-schema#")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_FAST_SUCCESS(metaschema.value(), metaschema.value(), 770); } TEST(Evaluator_draft4, metaschema_hyper_self_exhaustive) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-04/hyper-schema#")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(metaschema.value(), metaschema.value(), @@ -782,7 +782,7 @@ TEST(Evaluator_draft4, ref_11) { EXPECT_THROW(sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler), sourcemeta::core::SchemaReferenceError); } @@ -802,7 +802,7 @@ TEST(Evaluator_draft4, ref_12) { })JSON"); } - return sourcemeta::core::official_resolver(identifier); + return sourcemeta::core::schema_official_resolver(identifier); }; EXPECT_THROW(sourcemeta::blaze::compile( @@ -826,7 +826,7 @@ TEST(Evaluator_draft4, ref_13) { })JSON"); } - return sourcemeta::core::official_resolver(identifier); + return sourcemeta::core::schema_official_resolver(identifier); }; EXPECT_THROW(sourcemeta::blaze::compile( @@ -847,7 +847,7 @@ TEST(Evaluator_draft4, ref_14) { const auto compiled_schema{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{true}; @@ -1618,7 +1618,7 @@ TEST(Evaluator_draft4, pattern_4) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); // The pattern might succeed in some standard library implementations SUCCEED(); @@ -1645,7 +1645,7 @@ TEST(Evaluator_draft4, pattern_5) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); // The pattern might succeed in some standard library implementations SUCCEED(); @@ -1674,7 +1674,7 @@ TEST(Evaluator_draft4, pattern_6) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); // The pattern might succeed in some standard library implementations SUCCEED(); @@ -1970,7 +1970,7 @@ TEST(Evaluator_draft4, patternProperties_9) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); // The pattern might succeed in some standard library implementations SUCCEED(); @@ -5802,7 +5802,7 @@ TEST(Evaluator_draft4, invalid_ref_top_level) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), sourcemeta::core::Pointer({"$ref"})); @@ -5824,7 +5824,7 @@ TEST(Evaluator_draft4, invalid_ref_nested) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), @@ -5854,7 +5854,7 @@ TEST(Evaluator_draft4, invalid_ref_embedded) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), @@ -5913,7 +5913,7 @@ TEST(Evaluator_draft4, reference_from_unknown_keyword) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.id(), "#/properties/baz"); @@ -5988,7 +5988,7 @@ TEST(Evaluator_draft4, ref_to_non_schema) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); FAIL() << "The compile function was expected to throw"; } catch (const sourcemeta::core::SchemaReferenceError &error) { diff --git a/test/evaluator/evaluator_draft6_test.cc b/test/evaluator/evaluator_draft6_test.cc index 28f3a8f3..8c6deaa0 100644 --- a/test/evaluator/evaluator_draft6_test.cc +++ b/test/evaluator/evaluator_draft6_test.cc @@ -9,7 +9,7 @@ #include "evaluator_utils.h" TEST(Evaluator_draft6, metaschema) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-06/schema#")}; EXPECT_TRUE(metaschema.has_value()); @@ -18,14 +18,14 @@ TEST(Evaluator_draft6, metaschema) { } TEST(Evaluator_draft6, metaschema_hyper_self) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-06/hyper-schema#")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_FAST_SUCCESS(metaschema.value(), metaschema.value(), 863); } TEST(Evaluator_draft6, metaschema_hyper_self_exhaustive) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-06/hyper-schema#")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(metaschema.value(), metaschema.value(), @@ -830,7 +830,7 @@ TEST(Evaluator_draft6, invalid_ref_top_level) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), sourcemeta::core::Pointer({"$ref"})); @@ -852,7 +852,7 @@ TEST(Evaluator_draft6, invalid_ref_nested) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), @@ -882,7 +882,7 @@ TEST(Evaluator_draft6, invalid_ref_embedded) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), @@ -942,7 +942,7 @@ TEST(Evaluator_draft6, reference_from_unknown_keyword) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.id(), "#/properties/baz"); diff --git a/test/evaluator/evaluator_draft7_test.cc b/test/evaluator/evaluator_draft7_test.cc index febda532..007c2c87 100644 --- a/test/evaluator/evaluator_draft7_test.cc +++ b/test/evaluator/evaluator_draft7_test.cc @@ -9,7 +9,7 @@ #include "evaluator_utils.h" TEST(Evaluator_draft7, metaschema) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-07/schema#")}; EXPECT_TRUE(metaschema.has_value()); @@ -18,14 +18,14 @@ TEST(Evaluator_draft7, metaschema) { } TEST(Evaluator_draft7, metaschema_hyper_self) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-07/hyper-schema#")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_FAST_SUCCESS(metaschema.value(), metaschema.value(), 462); } TEST(Evaluator_draft7, metaschema_hyper_self_exhaustive) { - const auto metaschema{sourcemeta::core::official_resolver( + const auto metaschema{sourcemeta::core::schema_official_resolver( "http://json-schema.org/draft-07/hyper-schema#")}; EXPECT_TRUE(metaschema.has_value()); EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(metaschema.value(), metaschema.value(), @@ -360,7 +360,7 @@ TEST(Evaluator_draft7, invalid_ref_top_level) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), sourcemeta::core::Pointer({"$ref"})); @@ -382,7 +382,7 @@ TEST(Evaluator_draft7, invalid_ref_nested) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), @@ -412,7 +412,7 @@ TEST(Evaluator_draft7, invalid_ref_embedded) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.location(), @@ -485,7 +485,7 @@ TEST(Evaluator_draft7, reference_from_unknown_keyword) { try { sourcemeta::blaze::compile(schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler); } catch (const sourcemeta::core::SchemaReferenceError &error) { EXPECT_EQ(error.id(), "#/properties/baz"); diff --git a/test/evaluator/evaluator_test.cc b/test/evaluator/evaluator_test.cc index 10f6c01f..1b6bb3c1 100644 --- a/test/evaluator/evaluator_test.cc +++ b/test/evaluator/evaluator_test.cc @@ -20,7 +20,7 @@ static auto test_resolver(std::string_view identifier) } })JSON"); } else { - return sourcemeta::core::official_resolver(identifier); + return sourcemeta::core::schema_official_resolver(identifier); } } @@ -47,7 +47,7 @@ TEST(Evaluator, boolean_true) { const auto compiled_schema{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler, sourcemeta::blaze::Mode::FastValidation, "https://json-schema.org/draft/2020-12/schema")}; @@ -62,7 +62,7 @@ TEST(Evaluator, boolean_false) { const auto compiled_schema{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler, sourcemeta::blaze::Mode::FastValidation, "https://json-schema.org/draft/2020-12/schema")}; @@ -87,7 +87,7 @@ TEST(Evaluator, reusable_evaluator) { const auto compiled_schema{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; sourcemeta::blaze::Evaluator evaluator; diff --git a/test/evaluator/evaluator_utils.h b/test/evaluator/evaluator_utils.h index 54b4553b..9029ef06 100644 --- a/test/evaluator/evaluator_utils.h +++ b/test/evaluator/evaluator_utils.h @@ -43,7 +43,7 @@ inline auto FIRST_PROPERTY_IS(const sourcemeta::core::JSON &document, #define EVALUATE_WITH_TRACE_FAST_SUCCESS(schema, instance, count) \ const auto compiled_schema{sourcemeta::blaze::compile( \ schema, sourcemeta::core::schema_official_walker, \ - sourcemeta::core::official_resolver, \ + sourcemeta::core::schema_official_resolver, \ sourcemeta::blaze::default_schema_compiler, \ sourcemeta::blaze::Mode::FastValidation)}; \ EVALUATE_WITH_TRACE(compiled_schema, instance, count) \ @@ -52,7 +52,7 @@ inline auto FIRST_PROPERTY_IS(const sourcemeta::core::JSON &document, #define EVALUATE_WITH_TRACE_FAST_FAILURE(schema, instance, count) \ const auto compiled_schema{sourcemeta::blaze::compile( \ schema, sourcemeta::core::schema_official_walker, \ - sourcemeta::core::official_resolver, \ + sourcemeta::core::schema_official_resolver, \ sourcemeta::blaze::default_schema_compiler, \ sourcemeta::blaze::Mode::FastValidation)}; \ EVALUATE_WITH_TRACE(compiled_schema, instance, count) \ @@ -61,7 +61,7 @@ inline auto FIRST_PROPERTY_IS(const sourcemeta::core::JSON &document, #define EVALUATE_WITH_TRACE_EXHAUSTIVE_SUCCESS(schema, instance, count) \ const auto compiled_schema{sourcemeta::blaze::compile( \ schema, sourcemeta::core::schema_official_walker, \ - sourcemeta::core::official_resolver, \ + sourcemeta::core::schema_official_resolver, \ sourcemeta::blaze::default_schema_compiler, \ sourcemeta::blaze::Mode::Exhaustive)}; \ EVALUATE_WITH_TRACE(compiled_schema, instance, count) \ @@ -70,7 +70,7 @@ inline auto FIRST_PROPERTY_IS(const sourcemeta::core::JSON &document, #define EVALUATE_WITH_TRACE_EXHAUSTIVE_FAILURE(schema, instance, count) \ const auto compiled_schema{sourcemeta::blaze::compile( \ schema, sourcemeta::core::schema_official_walker, \ - sourcemeta::core::official_resolver, \ + sourcemeta::core::schema_official_resolver, \ sourcemeta::blaze::default_schema_compiler, \ sourcemeta::blaze::Mode::Exhaustive)}; \ EVALUATE_WITH_TRACE(compiled_schema, instance, count) \ diff --git a/test/evaluator/officialsuite.cc b/test/evaluator/officialsuite.cc index 7051e752..3bc0ce09 100644 --- a/test/evaluator/officialsuite.cc +++ b/test/evaluator/officialsuite.cc @@ -196,7 +196,7 @@ static auto test_resolver(std::string_view identifier) #undef READ_SCHEMA_FILE - return sourcemeta::core::official_resolver(identifier); + return sourcemeta::core::schema_official_resolver(identifier); } static auto slugify(const std::string &input, std::ostream &output) -> void { diff --git a/test/packaging/find_package/hello.cc b/test/packaging/find_package/hello.cc index d9efeb81..818ed848 100644 --- a/test/packaging/find_package/hello.cc +++ b/test/packaging/find_package/hello.cc @@ -15,7 +15,7 @@ auto main() -> int { const auto compiled_schema{sourcemeta::blaze::compile( schema, sourcemeta::core::schema_official_walker, - sourcemeta::core::official_resolver, + sourcemeta::core::schema_official_resolver, sourcemeta::blaze::default_schema_compiler)}; const sourcemeta::core::JSON instance{"foo"}; diff --git a/vendor/core/src/core/jsonschema/CMakeLists.txt b/vendor/core/src/core/jsonschema/CMakeLists.txt index 228b279a..34ce2640 100644 --- a/vendor/core/src/core/jsonschema/CMakeLists.txt +++ b/vendor/core/src/core/jsonschema/CMakeLists.txt @@ -8,7 +8,7 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME jsonschema keywords.h transform.h SOURCES jsonschema.cc default_walker.cc frame.cc resolver.cc walker.cc bundle.cc - unevaluated.cc relativize.cc unidentify.cc + unevaluated.cc unidentify.cc transform_rule.cc transformer.cc "${CMAKE_CURRENT_BINARY_DIR}/official_resolver.cc") diff --git a/vendor/core/src/core/jsonschema/bundle.cc b/vendor/core/src/core/jsonschema/bundle.cc index 11e4fdb2..9db37f51 100644 --- a/vendor/core/src/core/jsonschema/bundle.cc +++ b/vendor/core/src/core/jsonschema/bundle.cc @@ -48,7 +48,7 @@ auto is_official_metaschema_reference(const sourcemeta::core::Pointer &pointer, const std::string &destination) -> bool { return !pointer.empty() && pointer.back().is_property() && pointer.back().to_property() == "$schema" && - sourcemeta::core::official_resolver(destination).has_value(); + sourcemeta::core::schema_official_resolver(destination).has_value(); } auto bundle_schema(sourcemeta::core::JSON &root, const std::string &container, diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema.h index cd54175c..b36615a6 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema.h @@ -15,9 +15,10 @@ #include #include -#include // std::map -#include // std::optional -#include // std::string +#include // std::function +#include // std::map +#include // std::optional +#include // std::string /// @defgroup jsonschema JSON Schema /// @brief A set of JSON Schema utilities across draft versions. @@ -73,7 +74,7 @@ enum class SchemaIdentificationStrategy : std::uint8_t { /// })JSON"); /// /// std::optional id{sourcemeta::core::identify( -/// document, sourcemeta::core::official_resolver)}; +/// document, sourcemeta::core::schema_official_resolver)}; /// assert(id.has_value()); /// assert(id.value() == "https://sourcemeta.com/example-schema"); /// ``` @@ -120,7 +121,7 @@ auto identify(const JSON &schema, const std::string &base_dialect, /// "https://json-schema.org/draft/2020-12/schema"); /// /// std::optional id{sourcemeta::core::identify( -/// document, sourcemeta::core::official_resolver)}; +/// document, sourcemeta::core::schema_official_resolver)}; /// assert(!id.has_value()); /// ``` SOURCEMETA_CORE_JSONSCHEMA_EXPORT @@ -144,10 +145,10 @@ auto anonymize(JSON &schema, const std::string &base_dialect) -> void; /// /// sourcemeta::core::reidentify(document, /// "https://example.com/my-new-id", -/// sourcemeta::core::official_resolver); +/// sourcemeta::core::schema_official_resolver); /// /// std::optional id{sourcemeta::core::identify( -/// document, sourcemeta::core::official_resolver)}; +/// document, sourcemeta::core::schema_official_resolver)}; /// assert(id.has_value()); /// assert(id.value() == "https://example.com/my-new-id"); /// ``` @@ -209,7 +210,7 @@ auto dialect(const JSON &schema, /// /// const sourcemeta::core::JSON metaschema{ /// sourcemeta::core::metaschema( -/// document, sourcemeta::core::official_resolver)}; +/// document, sourcemeta::core::schema_official_resolver)}; /// /// sourcemeta::core::prettify(metaschema, std::cout); /// std::cout << std::endl; @@ -241,7 +242,7 @@ auto metaschema( /// /// const std::optional base_dialect{ /// sourcemeta::core::base_dialect( -/// document, sourcemeta::core::official_resolver)}; +/// document, sourcemeta::core::schema_official_resolver)}; /// /// assert(base_dialect.has_value()); /// assert(base_dialect.value() == @@ -274,7 +275,7 @@ auto base_dialect(const JSON &schema, const SchemaResolver &resolver, /// /// const std::map vocabularies{ /// sourcemeta::core::vocabularies( -/// document, sourcemeta::core::official_resolver)}; +/// document, sourcemeta::core::schema_official_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")); @@ -323,8 +324,8 @@ auto schema_format_compare(const JSON::String &left, const JSON::String &right) /// @ingroup jsonschema /// -/// Try to turn every possible absolute reference in a schema into a relative -/// one. For example: +/// Remove every identifer from a schema, rephrasing references (if any) as +/// needed. For example: /// /// ```cpp /// #include @@ -335,32 +336,42 @@ auto schema_format_compare(const JSON::String &left, const JSON::String &right) /// sourcemeta::core::parse_json(R"JSON({ /// "$id": "https://www.example.com/schema", /// "$schema": "https://json-schema.org/draft/2020-12/schema", -/// "$ref": "https://www.example.com/another", +/// "$ref": "another", /// })JSON"); /// -/// sourcemeta::core::relativize(schema, +/// sourcemeta::core::unidentify(schema, /// sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver); +/// sourcemeta::core::schema_official_resolver); /// /// const sourcemeta::core::JSON expected = /// sourcemeta::core::parse_json(R"JSON({ -/// "$id": "https://www.example.com/schema", /// "$schema": "https://json-schema.org/draft/2020-12/schema", -/// "$ref": "another", +/// "$ref": "https://www.example.com/another", /// })JSON"); /// /// assert(schema == expected); /// ``` SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto relativize( +auto unidentify( JSON &schema, const SchemaWalker &walker, const SchemaResolver &resolver, - const std::optional &default_dialect = std::nullopt, - const std::optional &default_id = std::nullopt) -> void; + const std::optional &default_dialect = std::nullopt) -> void; /// @ingroup jsonschema /// -/// Remove every identifer from a schema, rephrasing references (if any) as -/// needed. For example: +/// Visit every reference in a schema. The arguments are as follows: +/// +/// - The current subschema +/// - The base URI of the current subschema +/// - The reference vocabulary +/// - The reference keyword name +/// - The reference reference destination +using SchemaVisitorReference = std::function; + +/// @ingroup jsonschema +/// +/// A reference visitor to try to turn every possible absolute reference in a +/// schema into a relative one. For example: /// /// ```cpp /// #include @@ -371,25 +382,70 @@ auto relativize( /// sourcemeta::core::parse_json(R"JSON({ /// "$id": "https://www.example.com/schema", /// "$schema": "https://json-schema.org/draft/2020-12/schema", -/// "$ref": "another", +/// "$ref": "https://www.example.com/another", /// })JSON"); /// -/// sourcemeta::core::unidentify(schema, +/// sourcemeta::core::reference_visit(schema, /// sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver); +/// sourcemeta::core::schema_official_resolver, +/// sourcemeta::core::reference_visitor_relativize); /// /// const sourcemeta::core::JSON expected = /// sourcemeta::core::parse_json(R"JSON({ +/// "$id": "https://www.example.com/schema", /// "$schema": "https://json-schema.org/draft/2020-12/schema", -/// "$ref": "https://www.example.com/another", +/// "$ref": "another", /// })JSON"); /// /// assert(schema == expected); /// ``` SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto unidentify( +auto reference_visitor_relativize(JSON &subschema, const URI &base, + const JSON::String &vocabulary, + const JSON::String &keyword, URI &value) + -> void; + +/// @ingroup jsonschema +/// +/// A utility function to loop over every reference in a schema, allowing +/// modifications to their subschemas if desired. Note that the consumer is +/// responsible for not making the schema invalid. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// sourcemeta::core::JSON schema = +/// sourcemeta::core::parse_json(R"JSON({ +/// "$id": "https://www.example.com/schema", +/// "$schema": "https://json-schema.org/draft/2020-12/schema", +/// "$ref": "https://www.example.com/another", +/// })JSON"); +/// +/// static auto visitor(JSON &subschema, +/// const URI &base, +/// const JSON::String &vocabulary, +/// const JSON::String &keyword, +/// URI &value) -> void { +/// sourcemeta::core::prettify(subschema, std::cerr); +/// std::cerr << "\n"; +/// std::cerr << base.recompose() << "\n"; +/// std::cerr << vocabulary << "\n"; +/// std::cerr << keyword << "\n"; +/// std::cerr << value.recompose() << "\n"; +/// } +/// +/// sourcemeta::core::reference_visit(schema, +/// sourcemeta::core::schema_official_walker, +/// sourcemeta::core::schema_official_resolver, +/// visitor); +/// ``` +SOURCEMETA_CORE_JSONSCHEMA_EXPORT +auto reference_visit( JSON &schema, const SchemaWalker &walker, const SchemaResolver &resolver, - const std::optional &default_dialect = std::nullopt) -> void; + const SchemaVisitorReference &callback, + const std::optional &default_dialect = std::nullopt, + const std::optional &default_id = std::nullopt) -> void; } // namespace sourcemeta::core diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h index 0003ff6f..cff5c3d7 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h @@ -38,7 +38,7 @@ namespace sourcemeta::core { /// "type": "string" /// })JSON"); /// } else { -/// return sourcemeta::core::official_resolver(identifier); +/// return sourcemeta::core::schema_official_resolver(identifier); /// } /// } /// @@ -94,7 +94,7 @@ auto bundle(sourcemeta::core::JSON &schema, const SchemaWalker &walker, /// "type": "string" /// })JSON"); /// } else { -/// return sourcemeta::core::official_resolver(identifier); +/// return sourcemeta::core::schema_official_resolver(identifier); /// } /// } /// diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h index 98adfda7..e302fff8 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h @@ -47,7 +47,7 @@ namespace sourcemeta::core { /// sourcemeta::core::SchemaSchemaFrame frame; /// frame.analyse(document, /// sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver); +/// sourcemeta::core::schema_official_resolver); /// /// // IDs /// assert(frame.locations().contains({sourcemeta::core::SchemaReferenceType::Static, diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_resolver.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_resolver.h index a7270870..16d75e3c 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_resolver.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_resolver.h @@ -24,7 +24,7 @@ namespace sourcemeta::core { /// /// For convenience, we provide the following default resolvers: /// -/// - sourcemeta::core::official_resolver +/// - sourcemeta::core::schema_official_resolver /// /// You can implement resolvers to read from a local storage, to send HTTP /// requests, or anything your application might require. Unless your resolver @@ -35,7 +35,7 @@ using SchemaResolver = std::function(std::string_view)>; /// @ingroup jsonschema /// A default resolver that relies on built-in official schemas. SOURCEMETA_CORE_JSONSCHEMA_EXPORT -auto official_resolver(std::string_view identifier) +auto schema_official_resolver(std::string_view identifier) -> std::optional; /// @ingroup jsonschema @@ -48,7 +48,7 @@ auto official_resolver(std::string_view identifier) /// /// // (1) Create a map resolver that falls back to the official resolver /// sourcemeta::core::SchemaMapResolver -/// resolver{sourcemeta::core::official_resolver}; +/// resolver{sourcemeta::core::schema_official_resolver}; /// /// const sourcemeta::core::JSON schema = /// sourcemeta::core::parse_json(R"JSON({ @@ -105,7 +105,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaMapResolver { /// /// // (1) Create a flat file resolver that falls back to the official resolver /// sourcemeta::core::SchemaFlatFileResolver -/// resolver{sourcemeta::core::official_resolver}; +/// resolver{sourcemeta::core::schema_official_resolver}; /// /// // (2) Register a schema by path /// resolver.add("path/to/example.schema.json"); diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h index 33a67d58..862ebb2d 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h @@ -164,7 +164,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaTransformRule { /// /// // Apply the transformation bundle to the schema /// bundle.apply(schema, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver); +/// sourcemeta::core::schema_official_resolver); /// /// // `foo` keywords are gone /// assert(!schema.defines("foo")); diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_unevaluated.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_unevaluated.h index 674b6d97..b8cee855 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_unevaluated.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_unevaluated.h @@ -57,11 +57,11 @@ using SchemaUnevaluatedEntries = std::map; /// sourcemeta::core::SchemaSchemaFrame frame; /// frame.analyse(document, /// sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver); +/// sourcemeta::core::schema_official_resolver); /// const auto result{sourcemeta::core::unevaluated( /// schema, frame, /// sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver)}; +/// sourcemeta::core::schema_official_resolver)}; /// /// assert(result.contains("#/unevaluatedProperties")); /// assert(!result.at("#/unevaluatedProperties").dynamic); diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h index 1da28dbe..c8d7706d 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h @@ -97,7 +97,7 @@ struct SchemaIteratorEntry { /// for (const auto &entry : /// sourcemeta::core::SchemaIterator{ /// document, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver}) { +/// sourcemeta::core::schema_official_resolver}) { /// sourcemeta::core::prettify( /// sourcemeta::core::get(document, entry.pointer), std::cout); /// std::cout << "\n"; @@ -164,7 +164,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIterator { /// for (const auto &entry : /// sourcemeta::core::SchemaIteratorFlat{ /// document, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver}) { +/// sourcemeta::core::schema_official_resolver}) { /// sourcemeta::core::prettify( /// sourcemeta::core::get(document, entry.pointer), std::cout); /// std::cout << "\n"; @@ -222,7 +222,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIteratorFlat { /// /// const auto vocabularies{ /// sourcemeta::core::vocabularies( -/// document, sourcemeta::core::official_resolver)}; +/// document, sourcemeta::core::schema_official_resolver)}; /// /// assert(sourcemeta::core::schema_keyword_priority( /// "prefixItems", vocabularies, @@ -261,7 +261,7 @@ auto SOURCEMETA_CORE_JSONSCHEMA_EXPORT schema_keyword_priority( /// for (const auto &entry : /// sourcemeta::core::SchemaKeywordIterator{ /// document, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver}) { +/// sourcemeta::core::schema_official_resolver}) { /// sourcemeta::core::stringify(entry.pointer, std::cout); /// std::cout << "\n"; /// } diff --git a/vendor/core/src/core/jsonschema/jsonschema.cc b/vendor/core/src/core/jsonschema/jsonschema.cc index 34e2d596..cbda45b6 100644 --- a/vendor/core/src/core/jsonschema/jsonschema.cc +++ b/vendor/core/src/core/jsonschema/jsonschema.cc @@ -9,6 +9,8 @@ #include // std::remove_reference_t #include // std::move +#include + auto sourcemeta::core::is_schema(const sourcemeta::core::JSON &schema) -> bool { return schema.is_object() || schema.is_boolean(); } @@ -96,7 +98,17 @@ auto sourcemeta::core::identify( return default_id; } - return identify(schema, maybe_base_dialect.value(), default_id); + const auto result{identify(schema, maybe_base_dialect.value(), default_id)}; + + // A last shot supporting identifiers alongside `$ref` in loose mode + if (!result.has_value() && strategy == SchemaIdentificationStrategy::Loose) { + const auto keyword{id_keyword(maybe_base_dialect.value())}; + if (schema.defines(keyword) && schema.at(keyword).is_string()) { + return schema.at(keyword).to_string(); + } + } + + return result; } auto sourcemeta::core::identify(const JSON &schema, @@ -108,6 +120,7 @@ auto sourcemeta::core::identify(const JSON &schema, } const auto keyword{id_keyword(base_dialect)}; + if (!schema.defines(keyword)) { return default_id; } @@ -547,3 +560,68 @@ auto sourcemeta::core::schema_format_compare( return left < right; } } + +auto sourcemeta::core::reference_visit( + sourcemeta::core::JSON &schema, + const sourcemeta::core::SchemaWalker &walker, + const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::core::SchemaVisitorReference &callback, + const std::optional &default_dialect, + const std::optional &default_id) -> void { + sourcemeta::core::SchemaFrame frame; + frame.analyse(schema, walker, resolver, default_dialect, default_id); + for (const auto &entry : frame.locations()) { + if (entry.second.type != + sourcemeta::core::SchemaFrame::LocationType::Resource && + entry.second.type != + sourcemeta::core::SchemaFrame::LocationType::Subschema) { + continue; + } + + auto &subschema{sourcemeta::core::get(schema, entry.second.pointer)}; + assert(sourcemeta::core::is_schema(subschema)); + if (!subschema.is_object()) { + continue; + } + + const sourcemeta::core::URI base{entry.second.base}; + // Assume the base is canonicalized already + assert( + sourcemeta::core::URI{entry.second.base}.canonicalize().recompose() == + base.recompose()); + for (const auto &property : subschema.as_object()) { + const auto walker_result{ + walker(property.first, frame.vocabularies(entry.second, resolver))}; + if (walker_result.type != + sourcemeta::core::SchemaKeywordType::Reference || + !property.second.is_string()) { + continue; + } + + assert(property.second.is_string()); + assert(walker_result.vocabulary.has_value()); + sourcemeta::core::URI reference{property.second.to_string()}; + callback(subschema, base, walker_result.vocabulary.value(), + property.first, reference); + } + } +} + +auto sourcemeta::core::reference_visitor_relativize( + sourcemeta::core::JSON &subschema, const sourcemeta::core::URI &base, + const sourcemeta::core::JSON::String &vocabulary, + const sourcemeta::core::JSON::String &keyword, URI &reference) -> void { + // In 2019-09, `$recursiveRef` can only be `#`, so there + // is nothing else we can possibly do + if (vocabulary == "https://json-schema.org/draft/2019-09/vocab/core" && + keyword == "$recursiveRef") { + return; + } + + reference.relative_to(base); + reference.canonicalize(); + + if (reference.is_relative()) { + subschema.assign(keyword, sourcemeta::core::JSON{reference.recompose()}); + } +} diff --git a/vendor/core/src/core/jsonschema/official_resolver.in.cc b/vendor/core/src/core/jsonschema/official_resolver.in.cc index 91fbbe62..64e77595 100644 --- a/vendor/core/src/core/jsonschema/official_resolver.in.cc +++ b/vendor/core/src/core/jsonschema/official_resolver.in.cc @@ -1,6 +1,6 @@ #include -auto sourcemeta::core::official_resolver(std::string_view identifier) +auto sourcemeta::core::schema_official_resolver(std::string_view identifier) -> std::optional { // JSON Schema 2020-12 if (identifier == "https://json-schema.org/draft/2020-12/schema") { diff --git a/vendor/core/src/core/jsonschema/relativize.cc b/vendor/core/src/core/jsonschema/relativize.cc deleted file mode 100644 index 809dccaa..00000000 --- a/vendor/core/src/core/jsonschema/relativize.cc +++ /dev/null @@ -1,49 +0,0 @@ -#include - -namespace sourcemeta::core { - -auto relativize(JSON &schema, const SchemaWalker &walker, - const SchemaResolver &resolver, - const std::optional &default_dialect, - const std::optional &default_id) -> void { - SchemaFrame frame; - frame.analyse(schema, walker, resolver, default_dialect, default_id); - - for (const auto &entry : frame.locations()) { - if (entry.second.type != SchemaFrame::LocationType::Resource && - entry.second.type != SchemaFrame::LocationType::Subschema) { - continue; - } - - auto &subschema{get(schema, entry.second.pointer)}; - assert(is_schema(subschema)); - if (!subschema.is_object()) { - continue; - } - - const auto base{URI{entry.second.base}.canonicalize()}; - for (const auto &property : subschema.as_object()) { - if (walker(property.first, frame.vocabularies(entry.second, resolver)) - .type != SchemaKeywordType::Reference || - !property.second.is_string()) { - continue; - } - - // In 2019-09, `$recursiveRef` can only be `#`, so there - // is nothing else we can possibly do - if (property.first == "$recursiveRef") { - continue; - } - - URI reference{property.second.to_string()}; - reference.relative_to(base); - reference.canonicalize(); - - if (reference.is_relative()) { - subschema.assign(property.first, JSON{reference.recompose()}); - } - } - } -} - -} // namespace sourcemeta::core diff --git a/vendor/core/src/core/jsonschema/resolver.cc b/vendor/core/src/core/jsonschema/resolver.cc index 4b70602c..eec5bc33 100644 --- a/vendor/core/src/core/jsonschema/resolver.cc +++ b/vendor/core/src/core/jsonschema/resolver.cc @@ -101,7 +101,7 @@ auto SchemaFlatFileResolver::add( const auto identifier{sourcemeta::core::identify( schema, *this, SchemaIdentificationStrategy::Loose, default_dialect, default_id)}; - if (!identifier.has_value()) { + if (!identifier.has_value() && !default_id.has_value()) { std::ostringstream error; error << "Cannot identify schema: " << canonical.string(); throw SchemaError(error.str()); @@ -109,7 +109,9 @@ auto SchemaFlatFileResolver::add( // Filesystems behave differently with regards to casing. To unify // them, assume they are case-insensitive. - const auto effective_identifier{to_lowercase(identifier.value())}; + const auto effective_identifier{to_lowercase( + default_id.has_value() ? identifier.value_or(default_id.value()) + : identifier.value())}; const auto result{this->schemas.emplace( effective_identifier, @@ -117,7 +119,7 @@ auto SchemaFlatFileResolver::add( if (!result.second && result.first->second.path != canonical) { std::ostringstream error; error << "Cannot register the same identifier twice: " - << identifier.value(); + << effective_identifier; throw SchemaError(error.str()); } @@ -150,9 +152,10 @@ auto SchemaFlatFileResolver::operator()(std::string_view identifier) const *this, result->second.default_dialect); // Because we allow re-identification, we can get into issues unless we // always try to relativize references - sourcemeta::core::relativize(schema, schema_official_walker, *this, - result->second.default_dialect, - result->second.original_identifier); + sourcemeta::core::reference_visit( + schema, schema_official_walker, *this, + sourcemeta::core::reference_visitor_relativize, + result->second.default_dialect, result->second.original_identifier); sourcemeta::core::reidentify(schema, result->first, *this, result->second.default_dialect); diff --git a/vendor/core/src/extension/alterschema/include/sourcemeta/core/alterschema.h b/vendor/core/src/extension/alterschema/include/sourcemeta/core/alterschema.h index 09798fa9..8c4bf3e5 100644 --- a/vendor/core/src/extension/alterschema/include/sourcemeta/core/alterschema.h +++ b/vendor/core/src/extension/alterschema/include/sourcemeta/core/alterschema.h @@ -78,7 +78,7 @@ enum class AlterSchemaCategory { /// })JSON"); /// /// bundle.apply(schema, sourcemeta::core::schema_official_walker, -/// sourcemeta::core::official_resolver); +/// sourcemeta::core::schema_official_resolver); /// ``` SOURCEMETA_CORE_ALTERSCHEMA_EXPORT auto add(SchemaTransformer &bundle, const AlterSchemaCategory category) -> void;