2021-11-11 23:37:42 +01:00
|
|
|
import { writable } from "svelte/store";
|
|
|
|
|
|
|
|
// stale shim until https://github.com/ConsoleTVs/sswr/issues/24 is resolved
|
|
|
|
export type SWRKey = string;
|
|
|
|
export function useSWR<D = unknown, E = Error>(
|
|
|
|
key: SWRKey | undefined | (() => SWRKey | undefined)
|
|
|
|
) {
|
|
|
|
const data = writable<D | undefined>();
|
2021-12-27 13:13:11 +01:00
|
|
|
const error = writable<E | undefined>();
|
2021-11-11 23:37:42 +01:00
|
|
|
|
2021-12-27 13:13:11 +01:00
|
|
|
async function doFetch() {
|
2022-01-28 16:46:08 +01:00
|
|
|
const keyString = typeof key === "string" ? key : key();
|
2021-12-27 13:13:11 +01:00
|
|
|
try {
|
|
|
|
const response = await fetch(keyString);
|
|
|
|
if (response.ok) {
|
2021-11-11 23:37:42 +01:00
|
|
|
data.set(await response.json());
|
2021-12-27 13:13:11 +01:00
|
|
|
} else {
|
|
|
|
throw new Error(await response.json());
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
error.set(err);
|
|
|
|
}
|
2021-11-11 23:37:42 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
doFetch();
|
|
|
|
|
|
|
|
return {
|
|
|
|
data,
|
|
|
|
error,
|
|
|
|
revalidate: doFetch,
|
|
|
|
};
|
|
|
|
}
|