@aspida/fetch
Version:
fetch client for aspida
40 lines • 2.31 kB
JavaScript
import { dataToURLString, headersToObject, optionToRequest, } from 'aspida';
export class HTTPError extends Error {
constructor(response) {
super(`HTTP Error: ${response.status} ${response.statusText}`);
this.response = response;
Object.setPrototypeOf(this, new.target.prototype);
}
}
export 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 = optionToRequest(params, type);
const serializer = (config === null || config === void 0 ? void 0 : config.paramsSerializer) || 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: 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