@aspida/fetch
Version:
fetch client for aspida
44 lines • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HTTPError = void 0;
const aspida_1 = require("aspida");
class HTTPError extends Error {
constructor(response) {
super(`HTTP Error: ${response.status} ${response.statusText}`);
this.response = response;
Object.setPrototypeOf(this, new.target.prototype);
}
}
exports.HTTPError = HTTPError;
exports.default = (client = fetch, config) => ({
baseURL: config === null || config === void 0 ? void 0 : config.baseURL,
fetch(baseURL, url, method, params, type) {
const send = (fn) => async () => {
var _a, _b, _c;
const request = (0, aspida_1.optionToRequest)(params, type);
const serializer = (config === null || config === void 0 ? void 0 : config.paramsSerializer) || aspida_1.dataToURLString;
const res = await client(`${(_b = (_a = request === null || request === void 0 ? void 0 : request.config) === null || _a === void 0 ? void 0 : _a.baseURL) !== null && _b !== void 0 ? _b : baseURL}${url}${(request === null || request === void 0 ? void 0 : request.query) ? `?${serializer(request.query)}` : ''}`, {
method,
...config,
...request === null || request === void 0 ? void 0 : request.config,
body: request === null || request === void 0 ? void 0 : request.httpBody,
headers: { ...config === null || config === void 0 ? void 0 : config.headers, ...(_c = request === null || request === void 0 ? void 0 : request.config) === null || _c === void 0 ? void 0 : _c.headers, ...request === null || request === void 0 ? void 0 : request.headers },
}).then(res => !res.ok && (config === null || config === void 0 ? void 0 : config.throwHttpErrors) ? Promise.reject(new HTTPError(res)) : res);
return {
status: res.status,
headers: (0, aspida_1.headersToObject)(res.headers),
originalResponse: res,
body: await fn(res),
};
};
return {
send: send(() => Promise.resolve()),
json: send(res => res.json()),
text: send(res => res.text()),
arrayBuffer: send(res => res.arrayBuffer()),
blob: send(res => res.blob()),
formData: send(res => res.formData()),
};
},
});
//# sourceMappingURL=index.js.map