@@ -704,6 +704,13 @@ auto walk_properties(const sourcemeta::core::JSON &schema,
704704 frame, root, visited, next_identifier);
705705 walk_wildcard_keyword (resolved, " unevaluatedProperties" , path, rows,
706706 frame, root, visited, next_identifier);
707+ if (!resolved.defines (" additionalProperties" ) &&
708+ !resolved.defines (" unevaluatedProperties" )) {
709+ auto open_path{path};
710+ open_path.push_back (make_path_segment (" wildcard" , " *" ));
711+ emit_row (sourcemeta::core::JSON{true }, std::move (open_path), rows,
712+ frame, root, visited, next_identifier);
713+ }
707714 visited.erase (&resolved);
708715 } else if (resolved_type == " array" && resolved.defines (" items" ) &&
709716 resolved.at (" items" ).is_object () &&
@@ -732,6 +739,13 @@ auto walk_properties(const sourcemeta::core::JSON &schema,
732739 walk_wildcard_keyword (items_schema, " unevaluatedProperties" ,
733740 wildcard_path, rows, frame, root, visited,
734741 next_identifier);
742+ if (!items_schema.defines (" additionalProperties" ) &&
743+ !items_schema.defines (" unevaluatedProperties" )) {
744+ auto open_path{wildcard_path};
745+ open_path.push_back (make_path_segment (" wildcard" , " *" ));
746+ emit_row (sourcemeta::core::JSON{true }, std::move (open_path), rows,
747+ frame, root, visited, next_identifier);
748+ }
735749 visited.erase (&items_schema);
736750 }
737751 }
@@ -1225,6 +1239,15 @@ auto walk_schema(const sourcemeta::core::JSON &schema, const bool include_root,
12251239 next_identifier);
12261240 walk_wildcard_keyword (schema, " additionalProperties" , empty_path, rows, frame,
12271241 root, visited, next_identifier);
1242+ if (schema.defines (" type" ) && schema.at (" type" ).is_string () &&
1243+ schema.at (" type" ).to_string () == " object" &&
1244+ !schema.defines (" additionalProperties" ) &&
1245+ !schema.defines (" unevaluatedProperties" )) {
1246+ auto open_path{empty_path};
1247+ open_path.push_back (make_path_segment (" wildcard" , " *" ));
1248+ emit_row (sourcemeta::core::JSON{true }, std::move (open_path), rows, frame,
1249+ root, visited, next_identifier);
1250+ }
12281251 walk_prefix_items (schema, empty_path, rows, doc_children, frame, root,
12291252 visited, next_identifier);
12301253
@@ -1252,6 +1275,13 @@ auto walk_schema(const sourcemeta::core::JSON &schema, const bool include_root,
12521275 walk_wildcard_keyword (items_schema, " unevaluatedProperties" ,
12531276 wildcard_path, rows, frame, root, visited,
12541277 next_identifier);
1278+ if (!items_schema.defines (" additionalProperties" ) &&
1279+ !items_schema.defines (" unevaluatedProperties" )) {
1280+ auto open_path{wildcard_path};
1281+ open_path.push_back (make_path_segment (" wildcard" , " *" ));
1282+ emit_row (sourcemeta::core::JSON{true }, std::move (open_path), rows,
1283+ frame, root, visited, next_identifier);
1284+ }
12551285 visited.erase (&items_schema);
12561286 }
12571287 }
0 commit comments