From 373183a2cd77076ef87228bd9b741ded20fbb0f3 Mon Sep 17 00:00:00 2001 From: "Nolann B." <100787331+nolannbiron@users.noreply.github.com> Date: Wed, 26 Mar 2025 13:55:22 +0100 Subject: [PATCH] Safe parse OpenAPI JSON schema (#3046) --- .changeset/little-wombats-visit.md | 5 ++++ packages/react-openapi/src/OpenAPISchema.tsx | 25 ++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 .changeset/little-wombats-visit.md diff --git a/.changeset/little-wombats-visit.md b/.changeset/little-wombats-visit.md new file mode 100644 index 000000000..4755a0314 --- /dev/null +++ b/.changeset/little-wombats-visit.md @@ -0,0 +1,5 @@ +--- +'@gitbook/react-openapi': patch +--- + +Safe parse OpenAPI JSON schema diff --git a/packages/react-openapi/src/OpenAPISchema.tsx b/packages/react-openapi/src/OpenAPISchema.tsx index 298f1d82b..65ee7c546 100644 --- a/packages/react-openapi/src/OpenAPISchema.tsx +++ b/packages/react-openapi/src/OpenAPISchema.tsx @@ -122,7 +122,7 @@ export function OpenAPISchemaPropertiesFromServer(props: { return ( ); @@ -172,12 +172,7 @@ export function OpenAPIRootSchemaFromServer(props: { schema: string; context: OpenAPIClientContext; }) { - return ( - - ); + return ; } /** @@ -465,3 +460,19 @@ function getDisclosureLabel(schema: OpenAPIV3.SchemaObject): string { return schema.title || 'child attributes'; } + +/** + * Safely parse a JSON string using retrocycle. + * If parsing fails, it falls back to standard JSON.parse. + */ +function safeJSONParse(jsonString: string) { + try { + return JSON.parse(jsonString, retrocycle()); + } catch { + try { + return JSON.parse(jsonString); + } catch (fallbackError) { + throw new Error(`Failed to parse JSON string: ${fallbackError}`); + } + } +}