From ccc09752405b8f644282e83b0abf84229f92ff16 Mon Sep 17 00:00:00 2001 From: conico974 Date: Fri, 5 Sep 2025 16:17:50 +0200 Subject: [PATCH] Fix error on parameters being an object instead of an array (#3623) Co-authored-by: Nicolas Dorseuil --- .../react-openapi/src/OpenAPICodeSample.tsx | 6 +++++- packages/react-openapi/src/OpenAPISpec.tsx | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/react-openapi/src/OpenAPICodeSample.tsx b/packages/react-openapi/src/OpenAPICodeSample.tsx index 7120debd5..cc21da1f3 100644 --- a/packages/react-openapi/src/OpenAPICodeSample.tsx +++ b/packages/react-openapi/src/OpenAPICodeSample.tsx @@ -66,7 +66,11 @@ function generateCodeSamples(props: { const searchParams = new URLSearchParams(); const headersObject: { [k: string]: string } = {}; - data.operation.parameters?.forEach((param) => { + // The parser can sometimes returns invalid parameters (an object instead of an array). + // It should get fixed in scalar, but in the meantime we just ignore the parameters in that case. + const params = Array.isArray(data.operation.parameters) ? data.operation.parameters : []; + + params.forEach((param) => { if (!param) { return; } diff --git a/packages/react-openapi/src/OpenAPISpec.tsx b/packages/react-openapi/src/OpenAPISpec.tsx index 1e6e56269..1144c83ba 100644 --- a/packages/react-openapi/src/OpenAPISpec.tsx +++ b/packages/react-openapi/src/OpenAPISpec.tsx @@ -117,19 +117,22 @@ function getParameterGroupName(paramIn: string, context: OpenAPIClientContext): /** Deduplicate parameters by name and in. * Some specs have both parameters define at path and operation level. * We only want to display one of them. + * Parameters can have the wrong type (object instead of array) sometimes, we just return an empty array in that case. */ function deduplicateParameters(parameters: OpenAPI.Parameters): OpenAPI.Parameters { const seen = new Set(); - return parameters.filter((param) => { - const key = `${param.name}:${param.in}`; + return Array.isArray(parameters) + ? parameters.filter((param) => { + const key = `${param.name}:${param.in}`; - if (seen.has(key)) { - return false; - } + if (seen.has(key)) { + return false; + } - seen.add(key); + seen.add(key); - return true; - }); + return true; + }) + : []; }