@coolio/http
Version:
HTTP networking client
54 lines • 3.21 kB
JavaScript
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