Mirror of static site repo git.pfy.ch/pfych/static
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041import { err, ok, Result, ResultAsync } from 'neverthrow';import { ClientErrors, ErrorCodes, ErrorWithCode, newError,} from '../types/errors';
export const safeDecode = ResultAsync.fromThrowable( <T>(response: Response) => response.json() as Promise<T>, (error): ErrorWithCode<ClientErrors> => newError('DecodeError', 'Unable to decode response', { error, }),);
export const safeFetch = async <T, E extends ErrorCodes>( input: string | URL | globalThis.Request, init?: RequestInit,): Promise<Result<T, ErrorWithCode<E | ClientErrors>>> => { const response = await fetch(input, init);
if (!response.ok) { const notOkDecodeResult = await safeDecode<ErrorWithCode<E>>(response);
if (notOkDecodeResult.isErr()) { return err(notOkDecodeResult.error); }
return err(notOkDecodeResult.value); }
const okDecodeResult = await safeDecode<T>(response);
if (okDecodeResult.isErr()) { return err(okDecodeResult.error); }
return ok(okDecodeResult.value);};