UNPKG

@aspida/fetch

Version:
40 lines 2.31 kB
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