export interface UnparsedJsonData {
data: unknown
_tag: "UnparsedJsonData"
}
export class JsonParseError extends Error {
_tag = "JsonParseError";
constructor(m?: string) {
super(m);
}
}
export const safeJson = (resp: Response) => TE.tryCatch<JsonParseError, UnparsedJsonData>(
() => resp.json().then(d => { return { data: d, _tag: "UnparsedJsonData" }}),
(e) => e instanceof Error ? new JsonParseError(e.message) : new JsonParseError(String(e))
);
export const
safeFetchJsonAlways =
(info: RequestInfo | URL, init?: RequestInit | undefined ) => pipe(
TE.tryCatch(
() => fetch(info, init),
e => e instanceof Error ? new FetchNetworkError(e.message) : new FetchNetworkError(String(e))
),
TE.bindTo('resp'),
TE.bindW('j', ({resp}) => safeJson(resp)),
TE.chainW(({resp, j}) => resp.ok ? TE.right(j) : TE.left(j)),
);
export interface UnparsedJsonData {
data: unknown
_tag: "UnparsedJsonData"
}
export class JsonParseError extends Error {
_tag = "JsonParseError";
constructor(m?: string) {
super(m);
}
}
export const safeJson = (resp: Response) => TE.tryCatch<JsonParseError, UnparsedJsonData>(
() => resp.json().then(d => { return { data: d, _tag: "UnparsedJsonData" }}),
(e) => e instanceof Error ? new JsonParseError(e.message) : new JsonParseError(String(e))
);
export const
safeFetchJsonAlways =
(info: RequestInfo | URL, init?: RequestInit | undefined ) => pipe(
TE.tryCatch(
() => fetch(info, init),
e => e instanceof Error ? new FetchNetworkError(e.message) : new FetchNetworkError(String(e))
),
TE.bindTo('resp'),
TE.bindW('j', ({resp}) => safeJson(resp)),
TE.chainW(({resp, j}) => resp.ok ? TE.right(j) : TE.left(j)),
);