From 071c1e6fab9cbdea26629eaca2d39d15571c2e01 Mon Sep 17 00:00:00 2001 From: Arjun Vijay Prakash Date: Wed, 1 Oct 2025 10:34:56 +0530 Subject: [PATCH] fix(json): enhance JSON error handling in createFromUrlOrRawJson - Add JSON parsing validation to throw a specific error for invalid JSON syntax - Update error handling in createFromUrl action to provide clearer feedback for invalid JSON errors - Maintain existing functionality while improving user feedback on errors --- app/jsonDoc.server.ts | 13 +++++++++++-- app/routes/actions/createFromUrl.ts | 6 +++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/jsonDoc.server.ts b/app/jsonDoc.server.ts index a3b82f9d9..378c7d02a 100644 --- a/app/jsonDoc.server.ts +++ b/app/jsonDoc.server.ts @@ -45,6 +45,15 @@ export async function createFromUrlOrRawJson( if (isXML(urlOrJson)) { return createFromRawXml("Untitled", urlOrJson); } + + try { + JSON.parse(urlOrJson); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : "Invalid JSON format"; + throw new Error(`Invalid JSON syntax: ${errorMessage}`); + } + + return undefined; } export async function createFromUrl( @@ -158,7 +167,7 @@ function isJSON(possibleJson: string): boolean { try { JSON.parse(possibleJson); return true; - } catch (e: any) { - throw new Error(e.message); + } catch { + return false; } } diff --git a/app/routes/actions/createFromUrl.ts b/app/routes/actions/createFromUrl.ts index 9e02761b9..22ece58d0 100644 --- a/app/routes/actions/createFromUrl.ts +++ b/app/routes/actions/createFromUrl.ts @@ -58,7 +58,11 @@ export let action: ActionFunction = async ({ request, context }) => { return redirect(`/j/${doc.id}`); } catch (e) { if (e instanceof Error) { - setErrorMessage(toastCookie, e.message, "Something went wrong"); + if (e.message.includes("Invalid JSON syntax")) { + setErrorMessage(toastCookie, "Invalid JSON", e.message); + } else { + setErrorMessage(toastCookie, e.message, "Something went wrong"); + } } else { setErrorMessage(toastCookie, "Unknown error", "Something went wrong"); }