@krebinkkj/safe-fetch
Version:
A fetch wrapper on top of Rust's Result
78 lines (75 loc) • 2.73 kB
JavaScript
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