refactor(lib): extract shared image constants and JSON parsing utilities

Move image extensions, MIME types, and size limit into a dedicated
constants module. Extract JSON-from-text parsing into a pure utility
function for reuse across the codebase.
This commit is contained in:
2026-04-07 13:10:59 -04:00
parent a0a7e021a8
commit dc4204a740
2 changed files with 28 additions and 0 deletions

19
src/lib/json-utils.ts Normal file
View File

@@ -0,0 +1,19 @@
/**
* Extract JSON from text that may contain prose, markdown code blocks, or raw JSON.
* Pure function — same input = same output, no side effects.
*/
export const extractJsonFromText = (text: string): unknown => {
try {
return JSON.parse(text);
} catch {
const codeBlockMatch = text.match(/```(?:json)?\s*([\s\S]*?)```/);
if (codeBlockMatch) {
return JSON.parse(codeBlockMatch[1].trim());
}
const arrayMatch = text.match(/\[[\s\S]*\]/);
if (arrayMatch) {
return JSON.parse(arrayMatch[0]);
}
throw new Error("No JSON found in response");
}
};