UNPKG

@coolio/http

Version:
54 lines 3.21 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { HttpResponseHeaders } from '../httpResponseHeaders'; import { HttpRequestError } from '../httpRequestError'; import { sanitizeHeaders } from '../helpers'; import { CFormData } from '../formData'; export const fetchRequestHandler = (fetchRequestHandlerOptions = {}) => { if ((typeof AbortController === 'undefined') || (typeof fetch === 'undefined') || (typeof Headers === 'undefined')) { throw new Error('Fetch API and/or AbortController are not present. ' + 'Prior to using fetchRequestHandler, make sure that you included necessary polyfills, ' + 'which are required for old browsers and Node.js.'); } return (requestOptions) => __awaiter(void 0, void 0, void 0, function* () { const abortController = new AbortController(); const response = yield new Promise((resolve, reject) => { var _a; const timer = setTimeout(() => { abortController.abort(); reject(new HttpRequestError(requestOptions, `Request timed out after ${requestOptions.timeout}ms.`)); }, requestOptions.timeout); const isFormData = CFormData.isFormData(requestOptions.body); const body = isFormData ? CFormData.from(requestOptions.body, { forceImplementation: 'native' }) : requestOptions.body; const formDataHeaderOverride = isFormData ? { 'content-type': undefined } : undefined; fetch(requestOptions.url, Object.assign(Object.assign(Object.assign({}, fetchRequestHandlerOptions.defaultRequestOptions), requestOptions), { body, headers: sanitizeHeaders((_a = fetchRequestHandlerOptions.defaultRequestOptions) === null || _a === void 0 ? void 0 : _a.headers, requestOptions.headers, formDataHeaderOverride), signal: abortController.signal })).then(response => { clearTimeout(timer); resolve(response); }, error => { clearTimeout(timer); reject(error); }); }); return { arrayBuffer: () => response.arrayBuffer(), text: () => response.text(), ok: response.ok, headers: new HttpResponseHeaders(response.headers), redirected: response.redirected, status: response.status, statusText: response.statusText, url: response.url, abort: () => abortController.abort(), }; }); }; //# sourceMappingURL=fetch.requestHandler.js.map