From b9e110b9ebdc171e19423eca87e90d0347f56182 Mon Sep 17 00:00:00 2001 From: Nolann Biron Date: Wed, 30 Jul 2025 15:02:20 +0200 Subject: [PATCH] Fix merge logic for allOf alternatives --- .changeset/tame-months-knock.md | 5 +++++ packages/react-openapi/src/OpenAPISchema.tsx | 18 +++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 .changeset/tame-months-knock.md diff --git a/.changeset/tame-months-knock.md b/.changeset/tame-months-knock.md new file mode 100644 index 0000000000..5f2d1457b2 --- /dev/null +++ b/.changeset/tame-months-knock.md @@ -0,0 +1,5 @@ +--- +'@gitbook/react-openapi': patch +--- + +Fix merge logic for allOf alternatives diff --git a/packages/react-openapi/src/OpenAPISchema.tsx b/packages/react-openapi/src/OpenAPISchema.tsx index 7c5e71d812..ee808f3a0a 100644 --- a/packages/react-openapi/src/OpenAPISchema.tsx +++ b/packages/react-openapi/src/OpenAPISchema.tsx @@ -556,8 +556,10 @@ function mergeAlternatives( schemaOrRef.enum ) { const keys = Object.keys(schemaOrRef); - if (keys.every((key) => ['type', 'enum', 'nullable'].includes(key))) { - latest.enum = Array.from(new Set([...latest.enum, ...schemaOrRef.enum])); + if (keys.some((key) => ['type', 'enum', 'nullable'].includes(key))) { + latest.enum = Array.from( + new Set([...(latest.enum || []), ...(schemaOrRef.enum || [])]) + ); latest.nullable = latest.nullable || schemaOrRef.nullable; return acc; } @@ -566,18 +568,20 @@ function mergeAlternatives( if (latest && latest.type === 'object' && schemaOrRef.type === 'object') { const keys = Object.keys(schemaOrRef); if ( - keys.every((key) => + keys.some((key) => ['type', 'properties', 'required', 'nullable'].includes(key) ) ) { latest.properties = { - ...latest.properties, - ...schemaOrRef.properties, + ...(latest.properties || {}), + ...(schemaOrRef.properties || {}), }; latest.required = Array.from( new Set([ - ...(Array.isArray(latest.required) ? latest.required : []), - ...(Array.isArray(schemaOrRef.required) + ...(latest.required && Array.isArray(latest.required) + ? latest.required + : []), + ...(schemaOrRef.required && Array.isArray(schemaOrRef.required) ? schemaOrRef.required : []), ])