From 43462b5dc89c682da627c19d8722c5f269bfdbce Mon Sep 17 00:00:00 2001 From: danielporterda Date: Wed, 1 Jul 2026 14:11:31 -0400 Subject: [PATCH] Render AsyncAPI union response variants Signed-off-by: danielporterda --- .../926/asyncapi-union-variants.png | Bin 0 -> 100205 bytes .../v2-commands-completions/subscribe.mdx | 392 ++++++++++++++++ .../v2-state-active-contracts/subscribe.mdx | 430 ++++++++++++++++++ .../operations/v2-updates-flats/subscribe.mdx | 394 ++++++++++++++++ .../operations/v2-updates-trees/subscribe.mdx | 338 ++++++++++++++ .../operations/v2-updates/subscribe.mdx | 394 ++++++++++++++++ docs-main/styles.css | 41 ++ src/x2mdx/asyncapi/lifecycle.py | 110 +++++ src/x2mdx/asyncapi/models.py | 9 + src/x2mdx/asyncapi/render.py | 22 +- src/x2mdx/reference_pages.py | 3 + .../templates/shared/reference_macros.md.j2 | 16 + tests/test_asyncapi.py | 85 ++++ 13 files changed, 2233 insertions(+), 1 deletion(-) create mode 100644 .github/pr-screenshots/926/asyncapi-union-variants.png diff --git a/.github/pr-screenshots/926/asyncapi-union-variants.png b/.github/pr-screenshots/926/asyncapi-union-variants.png new file mode 100644 index 0000000000000000000000000000000000000000..27504b68f166ccd24e3f5a652e10b6d137b4b680 GIT binary patch literal 100205 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 literal 0 HcmV?d00001 diff --git a/docs-main/reference/json-api-asyncapi-reference/operations/v2-commands-completions/subscribe.mdx b/docs-main/reference/json-api-asyncapi-reference/operations/v2-commands-completions/subscribe.mdx index 03eedc353..980aaf8ca 100644 --- a/docs-main/reference/json-api-asyncapi-reference/operations/v2-commands-completions/subscribe.mdx +++ b/docs-main/reference/json-api-asyncapi-reference/operations/v2-commands-completions/subscribe.mdx @@ -131,6 +131,18 @@ title: "Subscribe completions" +
+
Variants
+ +
+
+

CompletionStreamResponse

+ +

object

+ +
+ +
@@ -144,6 +156,190 @@ title: "Subscribe completions"
+
+
Variants
+ +
+
+

completionResponse

+ +

oneOf

+ +
+ + +
+ +
+
+ Completion + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

Completion

+ +

object

+ +
+ + +
+ +
+
+ Completion + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Empty

+ +

object

+ +
+ + +
+ +
+
+ Empty + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+
+

JsCantonError

+ +

object

+ +
+ + +
+ +
+
+ code + string + + required + +
+ +
+ +
+
+ cause + string + + required + +
+ +
+ +
+
+ context + object + + required + +
+ +
+ +
+
+ errorCategory + string + + required + +
+ +
+ +
+ + + +
+ +
@@ -175,6 +371,18 @@ title: "Subscribe completions"
+
+
Variants
+ +
+
+

CompletionStreamResponse

+ +

object

+ +
+ +
@@ -188,6 +396,190 @@ title: "Subscribe completions"
+
+
Variants
+ +
+
+

completionResponse

+ +

oneOf

+ +
+ + +
+ +
+
+ Completion + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

Completion

+ +

object

+ +
+ + +
+ +
+
+ Completion + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Empty

+ +

object

+ +
+ + +
+ +
+
+ Empty + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+
+

JsCantonError

+ +

object

+ +
+ + +
+ +
+
+ code + string + + required + +
+ +
+ +
+
+ cause + string + + required + +
+ +
+ +
+
+ context + object + + required + +
+ +
+ +
+
+ errorCategory + string + + required + +
+ +
+ +
+ + + +
+ +
diff --git a/docs-main/reference/json-api-asyncapi-reference/operations/v2-state-active-contracts/subscribe.mdx b/docs-main/reference/json-api-asyncapi-reference/operations/v2-state-active-contracts/subscribe.mdx index 9a6103b4d..7cae38995 100644 --- a/docs-main/reference/json-api-asyncapi-reference/operations/v2-state-active-contracts/subscribe.mdx +++ b/docs-main/reference/json-api-asyncapi-reference/operations/v2-state-active-contracts/subscribe.mdx @@ -131,6 +131,18 @@ title: "Subscribe active contracts" +
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -138,6 +150,8 @@ title: "Subscribe active contracts" code string + required +
@@ -147,6 +161,8 @@ title: "Subscribe active contracts" cause string + required +
@@ -156,6 +172,8 @@ title: "Subscribe active contracts" context object + required +
@@ -165,6 +183,132 @@ title: "Subscribe active contracts" errorCategory string + required + + + + + + + + + + + +
+
+

JsGetActiveContractsResponse

+ +

object

+ +
+ + +
+ +
+
+ workflowId + string + +
+ +
+ +
+
+ contractEntry + object + +
+ +
+ +
+
+ streamContinuationToken + string + +
+ +
+ +
+ +
+
Variants
+ +
+
+

contractEntry

+ +

oneOf

+ +
+ + +
+ +
+
+ JsActiveContract + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

JsActiveContract

+ +

object

+ +
+ + +
+ +
+
+ JsActiveContract + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

JsEmpty

+ +

object

+ +
+ + +
+ +
+
+ JsEmpty + object + + required +
@@ -173,6 +317,77 @@ title: "Subscribe active contracts" +
+ +
+
+

JsIncompleteAssigned

+ +

object

+ +
+ + +
+ +
+
+ JsIncompleteAssigned + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

JsIncompleteUnassigned

+ +

object

+ +
+ + +
+ +
+
+ JsIncompleteUnassigned + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + @@ -202,6 +417,18 @@ title: "Subscribe active contracts"
+
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -209,6 +436,8 @@ title: "Subscribe active contracts" code string + required +
@@ -218,6 +447,8 @@ title: "Subscribe active contracts" cause string + required +
@@ -227,6 +458,8 @@ title: "Subscribe active contracts" context object + required +
@@ -236,6 +469,132 @@ title: "Subscribe active contracts" errorCategory string + required + + + + + + + + + + + +
+
+

JsGetActiveContractsResponse

+ +

object

+ +
+ + +
+ +
+
+ workflowId + string + +
+ +
+ +
+
+ contractEntry + object + +
+ +
+ +
+
+ streamContinuationToken + string + +
+ +
+ +
+ +
+
Variants
+ +
+
+

contractEntry

+ +

oneOf

+ +
+ + +
+ +
+
+ JsActiveContract + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

JsActiveContract

+ +

object

+ +
+ + +
+ +
+
+ JsActiveContract + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

JsEmpty

+ +

object

+ +
+ + +
+ +
+
+ JsEmpty + object + + required +
@@ -244,6 +603,77 @@ title: "Subscribe active contracts" +
+ +
+
+

JsIncompleteAssigned

+ +

object

+ +
+ + +
+ +
+
+ JsIncompleteAssigned + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

JsIncompleteUnassigned

+ +

object

+ +
+ + +
+ +
+
+ JsIncompleteUnassigned + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + diff --git a/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-flats/subscribe.mdx b/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-flats/subscribe.mdx index 5c7b7c409..ef9e109d4 100644 --- a/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-flats/subscribe.mdx +++ b/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-flats/subscribe.mdx @@ -131,6 +131,18 @@ title: "Subscribe flats" +
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -138,6 +150,8 @@ title: "Subscribe flats" code string + required +
@@ -147,6 +161,8 @@ title: "Subscribe flats" cause string + required +
@@ -156,6 +172,8 @@ title: "Subscribe flats" context object + required + @@ -165,6 +183,142 @@ title: "Subscribe flats" errorCategory string + required + + + + + + + + + + + +
+
+

JsGetUpdatesResponse

+ +

object

+ +
+ + +
+ +
+
+ update + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

update

+ +

oneOf

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Reassignment

+ +

object

+ +
+ + +
+ +
+
+ Reassignment + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

TopologyTransaction

+ +

object

+ +
+ + +
+ +
+
+ TopologyTransaction + object + + required +
@@ -173,6 +327,49 @@ title: "Subscribe flats" +
+ +
+
+

Transaction

+ +

object

+ +
+ + +
+ +
+
+ Transaction + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + @@ -202,6 +399,18 @@ title: "Subscribe flats"
+
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -209,6 +418,8 @@ title: "Subscribe flats" code string + required +
@@ -218,6 +429,8 @@ title: "Subscribe flats" cause string + required +
@@ -227,6 +440,8 @@ title: "Subscribe flats" context object + required +
@@ -236,6 +451,142 @@ title: "Subscribe flats" errorCategory string + required + + + + + + + + + + + +
+
+

JsGetUpdatesResponse

+ +

object

+ +
+ + +
+ +
+
+ update + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

update

+ +

oneOf

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Reassignment

+ +

object

+ +
+ + +
+ +
+
+ Reassignment + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

TopologyTransaction

+ +

object

+ +
+ + +
+ +
+
+ TopologyTransaction + object + + required +
@@ -244,6 +595,49 @@ title: "Subscribe flats" +
+ +
+
+

Transaction

+ +

object

+ +
+ + +
+ +
+
+ Transaction + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + diff --git a/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-trees/subscribe.mdx b/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-trees/subscribe.mdx index c9c889e4e..1dfa0446b 100644 --- a/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-trees/subscribe.mdx +++ b/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates-trees/subscribe.mdx @@ -131,6 +131,18 @@ title: "Subscribe trees" +
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -138,6 +150,8 @@ title: "Subscribe trees" code string + required +
@@ -147,6 +161,8 @@ title: "Subscribe trees" cause string + required +
@@ -156,6 +172,8 @@ title: "Subscribe trees" context object + required + @@ -165,6 +183,8 @@ title: "Subscribe trees" errorCategory string + required + @@ -173,6 +193,155 @@ title: "Subscribe trees" + + +
+
+

JsGetUpdateTreesResponse

+ +

object

+ +
+ + +
+ +
+
+ update + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

update

+ +

oneOf

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Reassignment

+ +

object

+ +
+ + +
+ +
+
+ Reassignment + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

TransactionTree

+ +

object

+ +
+ + +
+ +
+
+ TransactionTree + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ + + + @@ -202,6 +371,18 @@ title: "Subscribe trees"
+
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -209,6 +390,8 @@ title: "Subscribe trees" code string + required +
@@ -218,6 +401,8 @@ title: "Subscribe trees" cause string + required +
@@ -227,6 +412,8 @@ title: "Subscribe trees" context object + required +
@@ -236,6 +423,8 @@ title: "Subscribe trees" errorCategory string + required + @@ -244,6 +433,155 @@ title: "Subscribe trees" + + +
+
+

JsGetUpdateTreesResponse

+ +

object

+ +
+ + +
+ +
+
+ update + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

update

+ +

oneOf

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Reassignment

+ +

object

+ +
+ + +
+ +
+
+ Reassignment + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

TransactionTree

+ +

object

+ +
+ + +
+ +
+
+ TransactionTree + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates/subscribe.mdx b/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates/subscribe.mdx index 368afad16..a49ae0d0d 100644 --- a/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates/subscribe.mdx +++ b/docs-main/reference/json-api-asyncapi-reference/operations/v2-updates/subscribe.mdx @@ -131,6 +131,18 @@ title: "Subscribe updates" +
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -138,6 +150,8 @@ title: "Subscribe updates" code string + required +
@@ -147,6 +161,8 @@ title: "Subscribe updates" cause string + required +
@@ -156,6 +172,8 @@ title: "Subscribe updates" context object + required + @@ -165,6 +183,142 @@ title: "Subscribe updates" errorCategory string + required + + + + + + + + + + + +
+
+

JsGetUpdatesResponse

+ +

object

+ +
+ + +
+ +
+
+ update + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

update

+ +

oneOf

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Reassignment

+ +

object

+ +
+ + +
+ +
+
+ Reassignment + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

TopologyTransaction

+ +

object

+ +
+ + +
+ +
+
+ TopologyTransaction + object + + required +
@@ -173,6 +327,49 @@ title: "Subscribe updates" +
+ +
+
+

Transaction

+ +

object

+ +
+ + +
+ +
+
+ Transaction + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + @@ -202,6 +399,18 @@ title: "Subscribe updates"
+
+
Variants
+ +
+
+

JsCantonError

+ +

object

+ +
+ +
@@ -209,6 +418,8 @@ title: "Subscribe updates" code string + required +
@@ -218,6 +429,8 @@ title: "Subscribe updates" cause string + required +
@@ -227,6 +440,8 @@ title: "Subscribe updates" context object + required +
@@ -236,6 +451,142 @@ title: "Subscribe updates" errorCategory string + required + + + + + + + + + + + +
+
+

JsGetUpdatesResponse

+ +

object

+ +
+ + +
+ +
+
+ update + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

update

+ +

oneOf

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + +
+ +
+ +
+ +
+
Variants
+ +
+
+

OffsetCheckpoint

+ +

object

+ +
+ + +
+ +
+
+ OffsetCheckpoint + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

Reassignment

+ +

object

+ +
+ + +
+ +
+
+ Reassignment + object + + required + +
+ +
+ +
+ + + +
+ +
+
+

TopologyTransaction

+ +

object

+ +
+ + +
+ +
+
+ TopologyTransaction + object + + required +
@@ -244,6 +595,49 @@ title: "Subscribe updates" +
+ +
+
+

Transaction

+ +

object

+ +
+ + +
+ +
+
+ Transaction + object + + required + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + diff --git a/docs-main/styles.css b/docs-main/styles.css index e174f4d38..12f9adb0f 100644 --- a/docs-main/styles.css +++ b/docs-main/styles.css @@ -970,6 +970,47 @@ body:has(.x2mdx-ref-page--operation) [aria-label="Table of contents"] { overflow-wrap: anywhere; } +.x2mdx-ref-schema-variants { + display: grid; + gap: 0.8rem; + margin-top: 0.9rem; +} + +.x2mdx-ref-schema-variant-label { + font-size: 0.77rem; + font-weight: 700; + text-transform: uppercase; + color: rgb(107, 114, 128); +} + +.x2mdx-ref-schema-variant { + display: grid; + gap: 0.65rem; + min-width: 0; + padding: 0.85rem; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 0.65rem; + background: rgba(248, 250, 252, 0.72); +} + +:root.dark .x2mdx-ref-schema-variant, +[data-theme="dark"] .x2mdx-ref-schema-variant { + border-color: rgba(255, 255, 255, 0.08); + background: rgba(17, 24, 39, 0.58); +} + +.x2mdx-ref-schema-variant-head { + display: grid; + gap: 0.25rem; +} + +.x2mdx-ref-schema-variant-head h4 { + margin: 0; + font-size: 0.94rem; + line-height: 1.3; + overflow-wrap: anywhere; +} + body:has(.x2mdx-ref-hero) #table-of-contents-content a, body:has(.x2mdx-ref-hero) [aria-label="Table of contents"] a { overflow-wrap: anywhere; diff --git a/src/x2mdx/asyncapi/lifecycle.py b/src/x2mdx/asyncapi/lifecycle.py index 56763c721..a9e693e6c 100644 --- a/src/x2mdx/asyncapi/lifecycle.py +++ b/src/x2mdx/asyncapi/lifecycle.py @@ -17,6 +17,7 @@ AsyncApiChannelLifecycle, AsyncApiMessageDetail, AsyncApiReport, + AsyncApiSchemaVariantDetail, AsyncApiSourceSnapshot, ) from x2mdx.types import JsonObject, JsonValue @@ -312,6 +313,113 @@ def schema_sample_value( return schema_type_token(doc, resolved) +def schema_variant_name(doc: AsyncApiDocument, schema: JsonValue | None, *, index: int) -> str: + ref_name = local_ref_name(schema, prefix="components/schemas") + if ref_name: + return ref_name + + resolved = resolve_local_ref(doc, schema) + if not isinstance(resolved, dict): + return f"Variant {index + 1}" + + title = resolved.get("title") + if isinstance(title, str) and title.strip(): + return title.strip() + + properties = resolved.get("properties") + if isinstance(properties, dict) and len(properties) == 1: + return str(next(iter(properties))) + + required = resolved.get("required") + if isinstance(required, list) and len(required) == 1: + return str(required[0]) + + return f"Variant {index + 1}" + + +def schema_variants( + doc: AsyncApiDocument, + schema: JsonValue | None, + *, + max_depth: int = REQUEST_SAMPLE_MAX_DEPTH, + seen_refs: set[str] | None = None, +) -> list[AsyncApiSchemaVariantDetail]: + if max_depth <= 0: + return [] + + if seen_refs is None: + seen_refs = set() + + if isinstance(schema, dict): + ref = schema.get("$ref") + if isinstance(ref, str): + if ref in seen_refs: + return [] + return schema_variants( + doc, + resolve_local_ref(doc, schema), + max_depth=max_depth, + seen_refs=seen_refs | {ref}, + ) + + resolved = resolve_local_ref(doc, schema) + if not isinstance(resolved, dict): + return [] + + raw_variants = resolved.get("oneOf") + if not isinstance(raw_variants, list): + raw_variants = resolved.get("anyOf") + if not isinstance(raw_variants, list): + property_variants: list[AsyncApiSchemaVariantDetail] = [] + properties, required = object_schema_properties_and_required(doc, resolved, max_depth=max_depth) + for property_name, property_schema in properties.items(): + nested_variants = schema_variants( + doc, + property_schema, + max_depth=max_depth - 1, + seen_refs=seen_refs, + ) + if nested_variants: + property_variants.append( + { + "name": property_name, + "payload_schema": schema_brief(doc, property_schema), + "required_fields": [property_name] if property_name in required else [], + "sample": schema_sample_value( + doc, + property_schema, + max_depth=max_depth, + seen_refs=seen_refs, + ), + "variants": nested_variants, + } + ) + return property_variants + + variants: list[AsyncApiSchemaVariantDetail] = [] + for index, variant_schema in enumerate(raw_variants): + variants.append( + { + "name": schema_variant_name(doc, variant_schema, index=index), + "payload_schema": schema_brief(doc, variant_schema), + "required_fields": schema_required_field_names(doc, variant_schema), + "sample": schema_sample_value( + doc, + variant_schema, + max_depth=max_depth, + seen_refs=seen_refs, + ), + "variants": schema_variants( + doc, + variant_schema, + max_depth=max_depth - 1, + seen_refs=seen_refs, + ), + } + ) + return variants + + def extract_message_detail(doc: AsyncApiDocument, message_node: JsonValue | None) -> AsyncApiMessageDetail: resolved_message = resolve_local_ref(doc, message_node) message_name = local_ref_name(message_node, prefix="components/messages") @@ -322,6 +430,7 @@ def extract_message_detail(doc: AsyncApiDocument, message_node: JsonValue | None "payload_schema": "-", "required_fields": [], "sample": None, + "variants": [], } payload = resolved_message.get("payload") @@ -331,6 +440,7 @@ def extract_message_detail(doc: AsyncApiDocument, message_node: JsonValue | None "payload_schema": schema_brief(doc, payload) if payload is not None else "-", "required_fields": schema_required_field_names(doc, payload) if payload is not None else [], "sample": schema_sample_value(doc, payload) if payload is not None else None, + "variants": schema_variants(doc, payload) if payload is not None else [], } diff --git a/src/x2mdx/asyncapi/models.py b/src/x2mdx/asyncapi/models.py index 1da10c837..5fb68faab 100644 --- a/src/x2mdx/asyncapi/models.py +++ b/src/x2mdx/asyncapi/models.py @@ -15,12 +15,21 @@ class AsyncApiDocument(TypedDict, total=False): components: JsonObject +class AsyncApiSchemaVariantDetail(TypedDict): + name: str + payload_schema: str + required_fields: list[str] + sample: JsonValue | None + variants: list["AsyncApiSchemaVariantDetail"] + + class AsyncApiMessageDetail(TypedDict): name: str content_type: str payload_schema: str required_fields: list[str] sample: JsonValue | None + variants: list[AsyncApiSchemaVariantDetail] class AsyncApiActionDetail(TypedDict): diff --git a/src/x2mdx/asyncapi/render.py b/src/x2mdx/asyncapi/render.py index b18ed2d75..6cd6acdfb 100644 --- a/src/x2mdx/asyncapi/render.py +++ b/src/x2mdx/asyncapi/render.py @@ -18,6 +18,7 @@ ReferenceMetaItem, ReferenceOperationPage, ReferencePanel, + ReferenceSchema, ReferenceSection, compact_text, markdown_page_from_template, @@ -109,8 +110,17 @@ def action_schema(action: dict[str, Any], *, anchor: str): message = dict(action.get("message") or {}) sample = message.get("sample") required_fields = list(message.get("required_fields") or []) - if sample is None and not required_fields: + variant_schemas = [schema_from_variant(variant) for variant in message.get("variants") or []] + if sample is None and not required_fields and not variant_schemas: return None + if variant_schemas: + return ReferenceSchema( + name=str(message.get("name") or action["action"]), + summary=str(message.get("payload_schema") or "-"), + description=str(action.get("description") or ""), + anchor=anchor, + variants=variant_schemas, + ) return schema_from_sample( name=str(message.get("name") or action["action"]), sample=sample, @@ -121,6 +131,16 @@ def action_schema(action: dict[str, Any], *, anchor: str): ) +def schema_from_variant(variant: dict[str, Any]) -> ReferenceSchema: + return schema_from_sample( + name=str(variant.get("name") or "Variant"), + sample=variant.get("sample"), + required_fields=list(variant.get("required_fields") or []), + summary=str(variant.get("payload_schema") or "-"), + variants=[schema_from_variant(child) for child in variant.get("variants") or []], + ) + + def wscat_example(action: dict[str, Any]) -> str: sample = action["message"].get("sample") if action["action"] == "publish" and sample is not None: diff --git a/src/x2mdx/reference_pages.py b/src/x2mdx/reference_pages.py index 920dc90cc..53adbf2fb 100644 --- a/src/x2mdx/reference_pages.py +++ b/src/x2mdx/reference_pages.py @@ -55,6 +55,7 @@ class ReferenceSchema: description: str = "" anchor: str | None = None fields: list[ReferenceField] = field(default_factory=list) + variants: list["ReferenceSchema"] = field(default_factory=list) enum_values: list[str] = field(default_factory=list) example: ReferenceExample | None = None @@ -233,6 +234,7 @@ def schema_from_sample( description: str = "", summary: str = "", anchor: str | None = None, + variants: list[ReferenceSchema] | None = None, ) -> ReferenceSchema: required = set(required_fields or []) fields: list[ReferenceField] = [] @@ -261,5 +263,6 @@ def schema_from_sample( description=description, anchor=anchor, fields=fields, + variants=variants or [], example=example, ) diff --git a/src/x2mdx/templates/shared/reference_macros.md.j2 b/src/x2mdx/templates/shared/reference_macros.md.j2 index 4b17d7377..d8a0f0b6d 100644 --- a/src/x2mdx/templates/shared/reference_macros.md.j2 +++ b/src/x2mdx/templates/shared/reference_macros.md.j2 @@ -145,6 +145,22 @@

{{ escape_mdx_html_text(inline_text(schema.description)) }}

{% endif %} {{ fields_table(schema.fields) }} +{%- if schema.variants %} +
+
Variants
+ {% for variant in schema.variants %} +
+
+

{{ escape_mdx_html_text(inline_text(variant.name)) }}

+ {% if variant.summary %} +

{{ escape_mdx_html_text(inline_text(variant.summary)) }}

+ {% endif %} +
+ {{ schema_body(variant, render_example=render_example, render_description=render_description) }} +
+ {% endfor %} +
+{%- endif %} {% if schema.enum_values %}
    {% for value in schema.enum_values %} diff --git a/tests/test_asyncapi.py b/tests/test_asyncapi.py index 35321f497..6053b9f51 100644 --- a/tests/test_asyncapi.py +++ b/tests/test_asyncapi.py @@ -490,3 +490,88 @@ def test_action_adapter_builds_operation_page_context(self) -> None: self.assertEqual(operation.outputs[0].schema.name, "-") self.assertEqual(operation.examples[0].title, "wscat") self.assertIn("npx wscat -c ", operation.examples[0].body) + + def test_action_adapter_preserves_oneof_response_variants(self) -> None: + channel = build_asyncapi_report_from_sources( + [ + self._snapshot( + "1.1.0", + "published/1.1.0/asyncapi.yaml", + """ + asyncapi: 2.6.0 + info: + title: Sample WebSocket API + version: 1.1.0 + channels: + /updates: + subscribe: + operationId: onUpdates + bindings: + ws: + method: GET + message: + $ref: '#/components/messages/Either_Error_UpdateResponse' + components: + schemas: + Either_Error_UpdateResponse: + title: Either_Error_UpdateResponse + oneOf: + - $ref: '#/components/schemas/Error' + - $ref: '#/components/schemas/UpdateResponse' + Error: + type: object + required: [code] + properties: + code: + type: string + UpdateResponse: + type: object + properties: + update: + $ref: '#/components/schemas/Update' + Update: + title: Update + oneOf: + - type: object + required: [Checkpoint] + properties: + Checkpoint: + type: object + required: [offset] + properties: + offset: + type: string + - type: object + required: [Transaction] + properties: + Transaction: + type: object + required: [updateId] + properties: + updateId: + type: string + messages: + Either_Error_UpdateResponse: + contentType: application/json + payload: + $ref: '#/components/schemas/Either_Error_UpdateResponse' + """, + ) + ], + source_name="unit test fixtures", + version_filter="unit test versions", + publish_version="1.1.0", + ).channels[0] + + action = channel.latest["actions"][0] + operation = build_action_operation(channel, action, output_dir=None) + schema = operation.outputs[0].schema + + self.assertIsNotNone(schema) + assert schema is not None + self.assertEqual([variant.name for variant in schema.variants], ["Error", "UpdateResponse"]) + self.assertEqual(schema.variants[0].fields[0].name, "code") + self.assertEqual(schema.variants[1].fields[0].name, "update") + nested_groups = schema.variants[1].variants + self.assertEqual([variant.name for variant in nested_groups], ["update"]) + self.assertEqual([variant.name for variant in nested_groups[0].variants], ["Checkpoint", "Transaction"])