@krebinkkj/safe-fetch
Version:
A fetch wrapper on top of Rust's Result
88 lines (84 loc) • 2.93 kB
JavaScript
;
var result = require('@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", result.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 = result.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 result.ok(response);
return result.err(new HttpError(response, await response.text()));
} catch (error) {
return result.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");
exports.ArrayBuffer = ArrayBuffer;
exports.Blob = Blob;
exports.FormData = FormData;
exports.HttpError = HttpError;
exports.Json = Json;
exports.Text = Text;
exports.isAbortError = isAbortError;
exports.safeFetch = safeFetch;
exports.safeTimedFetch = safeTimedFetch;
//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map