chat-ui / src /lib /utils /fetchJSON.ts
nsarrazin's picture
refactor: new API & universal load functions (pt. 2) (#1847)
7d7a53f unverified
raw
history blame
672 Bytes
import type { Serialize } from "./serialize";
export async function fetchJSON<T>(
url: string,
options?: {
fetch?: typeof window.fetch;
allowNull?: boolean;
}
): Promise<Serialize<T>> {
const response = await (options?.fetch ?? fetch)(url);
if (!response.ok) {
throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);
}
// Handle empty responses (which parse to null)
const text = await response.text();
if (!text || text.trim() === "") {
if (options?.allowNull) {
return null as Serialize<T>;
}
throw new Error(`Received empty response from ${url} but allowNull is not set to true`);
}
return JSON.parse(text);
}