diff --git a/layouts/partials/json-schema/resolve-additional-types.html b/layouts/partials/json-schema/resolve-additional-types.html index c5d420b6..54e3366e 100644 --- a/layouts/partials/json-schema/resolve-additional-types.html +++ b/layouts/partials/json-schema/resolve-additional-types.html @@ -1,5 +1,4 @@ -{{/* - +/* Finds and returns all objects, including nested ones, given a dict containing: * `schema`: a JSON schema object * `anchor_base`: a prefix to add to the HTML anchors generated for each object. If nil, no anchors are generated. @@ -19,8 +18,7 @@ * anchor: a string suitable for using as an html anchor for this object (if `anchor_base` was set, and the object has a title) Note that the returned array contains only unique objects. - -*/}} +*/ {{ $this_object := .schema }} {{ $anchor_base := .anchor_base }} @@ -28,19 +26,15 @@ {{ $name := .name | default $this_object.title | default "" }} {{ if eq $this_object.type "object" }} - {{/* give this object an anchor, if it has a name */}} + /* Give this object an anchor, if it has a name */ {{ if (and $anchor_base $this_object.title) }} {{ $this_object = merge $this_object (dict "anchor" (printf "%s_%s" $anchor_base (anchorize $this_object.title))) }} {{ end }} - {{/* - Add the object we were passed into the $all_objects array - */}} + /* Add the object we were passed into the $all_objects array */ {{ $all_objects = $all_objects | append $this_object }} - {{/* - Add any nested objects referenced in this object's `additionalProperties` - */}} + /* Add any nested objects referenced in this object's `additionalProperties` */ {{ if $this_object.additionalProperties }} {{ if reflect.IsMap $this_object.additionalProperties }} {{ $all_objects = partial "get-additional-objects" (dict @@ -52,9 +46,7 @@ {{ end }} {{ end }} - {{/* - Add any nested objects referenced in this object's `patternProperties` - */}} + /* Add any nested objects referenced in this object's `patternProperties` */ {{ if $this_object.patternProperties }} {{ range $pattern, $object := $this_object.patternProperties}} {{ $all_objects = partial "get-additional-objects" (dict @@ -66,9 +58,7 @@ {{ end }} {{ end }} - {{/* - Add any nested objects referenced in this object's `properties` - */}} + /* Add any nested objects referenced in this object's `properties` */ {{ range $key, $property := $this_object.properties}} {{ $all_objects = partial "get-additional-objects" (dict "this_object" $property @@ -77,13 +67,10 @@ "name" (printf "%s.%s" $name $key) ) }} {{ end }} - {{ end }} {{ if eq $this_object.type "array" }} - {{/* - Add any nested objects referenced in this object's `items` - */}} + /* Add any nested objects referenced in this object's `items` */ {{ if $this_object.items.anyOf }} {{ range $idx, $item := $this_object.items.anyOf }} {{ $all_objects = partial "get-additional-objects" (dict @@ -105,10 +92,10 @@ {{ end }} {{ end }} -{{/* +/* Handle object schemas using the `oneOf` keyword (https://json-schema.org/understanding-json-schema/reference/combining.html#oneof) -*/}} +*/ {{ if $this_object.oneOf }} {{ range $idx, $item := $this_object.oneOf }} {{ $all_objects = partial "get-additional-objects" (dict @@ -123,11 +110,11 @@ {{ return uniq $all_objects }} -{{/* +/* This actually makes the recursive call and adds the returned objects to the array -*/}} +*/ {{ define "partials/get-additional-objects" }} - {{/* .name is the name of the object for logging purposes */}} + /* .name is the name of the object for logging purposes */ {{ $name := .name }} {{ $all_objects := .all_objects }} @@ -142,20 +129,17 @@ {{ $this_object := partial "json-schema/resolve-allof" .this_object }} {{ $more_objects := partial "json-schema/resolve-additional-types" (dict "schema" $this_object "anchor_base" .anchor_base "name" $name) }} - {{/* - As far as I know we don't have something like Array.concat(), so add them one at a time - */}} {{ range $more_objects}} {{ $all_objects = $all_objects | append (partial "clean-object" .) }} {{ end }} {{ return $all_objects }} {{ end }} -{{/* +/* Only copy the bits of the object that we actually care about. This is needed for uniqify to work - otherwise objects that are the same but with (for example) different examples will be considered different. -*/}} +*/ {{ define "partials/clean-object" }} {{ return (dict "title" .title "properties" .properties "required" .required "enum" .enum "anchor" .anchor) }} {{ end }}