@saberhq/sail
Version:
Account caching and batched loading for React-based Solana applications.
42 lines (39 loc) • 875 B
text/typescript
/**
* Performs a GET request, returning `null` if 404.
*
* @param url
* @param signal
* @returns
*/
export const fetchNullable = async <T>(
url: string,
signal?: AbortSignal
): Promise<T | null> => {
const resp = await fetch(url, { signal });
if (resp.status === 404) {
return null;
}
const info = (await resp.json()) as T;
return info;
};
const sessionCache: Record<string, unknown> = {};
/**
* Performs a GET request with a cache, returning `null` if 404.
*
* The cache expires on browser reload.
*
* @param url
* @param signal
* @returns
*/
export const fetchNullableWithSessionCache = async <T>(
url: string,
signal?: AbortSignal
): Promise<T | null> => {
if (sessionCache[url]) {
return sessionCache[url] as T | null;
}
const result = await fetchNullable<T>(url, signal);
sessionCache[url] = result;
return result;
};