UNPKG

@moeenn/fetch

Version:

Native Fetch with better ergonomics and error reporting

74 lines (73 loc) 2.46 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { fetchJSON: () => fetchJSON }); module.exports = __toCommonJS(src_exports); var DEFAULT_TIMEOUT = 1e4; async function fetchJSON(url, options) { const headers = new Headers(options.headers); if (!headers.has("Content-Type") && !(options.body instanceof FormData)) { headers.set("Content-Type", "application/json"); } let res; try { res = await fetch(url, { ...options, headers, signal: AbortSignal.timeout(options.timeout || DEFAULT_TIMEOUT) }); } catch (err) { if (err instanceof DOMException) { throw new Error("The request to the server timed-out"); } throw err; } let parseError = null; let parsedResponse; try { parsedResponse = await res.json(); } catch (err) { parseError = err; } if (!res.ok) { if (parseError !== null) { throw new Error("Unexpected response sent from the server"); } if (typeof parsedResponse === "object" && parsedResponse != null) { if ("message" in parsedResponse && typeof parsedResponse.message === "string") { throw new Error(parsedResponse.message); } if ("error" in parsedResponse && typeof parsedResponse.error === "string") { throw new Error(parsedResponse.error); } } throw new Error(`${res.status} ${res.statusText}`); } return parsedResponse; } __name(fetchJSON, "fetchJSON"); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { fetchJSON }); //# sourceMappingURL=index.js.map