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}`);
+ }
+ }
+}