UNPKG

@krebinkkj/safe-fetch

Version:

A fetch wrapper on top of Rust's Result

78 lines (75 loc) 2.73 kB
import { some, ok, err, none } from '@sapphire/result'; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); var _HttpError = class _HttpError extends Error { constructor(response, body) { super("Received a non-OK HTTP response code"); __publicField(this, "response"); __publicField(this, "body"); __publicField(this, "json", none); this.response = response; this.body = body; } get url() { return this.response.url; } get code() { return this.response.status; } get jsonBody() { return this.json.match({ some: /* @__PURE__ */ __name((value) => value, "some"), none: /* @__PURE__ */ __name(() => this.json = some(JSON.parse(this.body)).unwrap(), "none") }); } }; __name(_HttpError, "HttpError"); var HttpError = _HttpError; // src/lib/fetch.ts async function safeFetch(input, init) { try { const response = await fetch(input, init); if (response.ok) return ok(response); return err(new HttpError(response, await response.text())); } catch (error) { return err(error); } } __name(safeFetch, "safeFetch"); async function safeTimedFetch(input, ms, init) { const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), ms); const result = await safeFetch(input, { ...init, signal: controller.signal }); clearTimeout(timer); return result; } __name(safeTimedFetch, "safeTimedFetch"); async function Text(result) { return (await result).map((response) => response.text()).intoPromise(); } __name(Text, "Text"); async function Json(result) { return (await result).map((response) => response.json()).intoPromise(); } __name(Json, "Json"); async function Blob(result) { return (await result).map((response) => response.blob()).intoPromise(); } __name(Blob, "Blob"); async function ArrayBuffer(result) { return (await result).map((response) => response.arrayBuffer()).intoPromise(); } __name(ArrayBuffer, "ArrayBuffer"); async function FormData(result) { return (await result).map((response) => response.formData()).intoPromise(); } __name(FormData, "FormData"); function isAbortError(error) { return error.name === "AbortError"; } __name(isAbortError, "isAbortError"); export { ArrayBuffer, Blob, FormData, HttpError, Json, Text, isAbortError, safeFetch, safeTimedFetch }; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map