From 237b703a6c4383b45154f290bdaca2f0aa1a5fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Fri, 6 Sep 2024 16:55:04 +0200 Subject: [PATCH] Fix crash in OpenAPI block because of undefined examples (#2458) --- .changeset/silent-donuts-love.md | 5 +++++ .../react-openapi/src/OpenAPICodeSample.tsx | 18 +++++++++++++----- .../src/OpenAPIResponseExample.tsx | 4 ++++ 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 .changeset/silent-donuts-love.md diff --git a/.changeset/silent-donuts-love.md b/.changeset/silent-donuts-love.md new file mode 100644 index 000000000..8f145edc0 --- /dev/null +++ b/.changeset/silent-donuts-love.md @@ -0,0 +1,5 @@ +--- +'@gitbook/react-openapi': patch +--- + +Fix crash when `example` is undefined for a response diff --git a/packages/react-openapi/src/OpenAPICodeSample.tsx b/packages/react-openapi/src/OpenAPICodeSample.tsx index d26a6f3b8..62628671e 100644 --- a/packages/react-openapi/src/OpenAPICodeSample.tsx +++ b/packages/react-openapi/src/OpenAPICodeSample.tsx @@ -69,11 +69,19 @@ export function OpenAPICodeSample(props: { (['x-custom-examples', 'x-code-samples', 'x-codeSamples'] as const).forEach((key) => { const customSamples = data.operation[key]; if (customSamples && Array.isArray(customSamples)) { - customCodeSamples = customSamples.map((sample) => ({ - key: `redocly-${sample.lang}`, - label: sample.label, - body: , - })); + customCodeSamples = customSamples + .filter((sample) => { + return ( + typeof sample.label === 'string' && + typeof sample.source === 'string' && + typeof sample.lang === 'string' + ); + }) + .map((sample) => ({ + key: `redocly-${sample.lang}`, + label: sample.label, + body: , + })); } }); diff --git a/packages/react-openapi/src/OpenAPIResponseExample.tsx b/packages/react-openapi/src/OpenAPIResponseExample.tsx index 9aa5a2690..e88434d4f 100644 --- a/packages/react-openapi/src/OpenAPIResponseExample.tsx +++ b/packages/react-openapi/src/OpenAPIResponseExample.tsx @@ -53,6 +53,10 @@ export function OpenAPIResponseExample(props: { } const example = generateSchemaExample(schema); + if (example === undefined) { + return null; + } + return { key: `${response[0]}`, label: `${response[0]}`,