@typed/http
Version:
HTTP requests for node and browsers
37 lines • 1.35 kB
JavaScript
import { Disposable } from '@typed/disposable';
import { withHttpManagement } from './withHttpManagement';
export function createFetchHttpEnv(options) {
const env = { http };
return options ? withHttpManagement(options, env) : env;
}
function http(url, options, callbacks) {
const { success, failure } = callbacks;
const { method = 'GET', headers = {}, body } = options;
const disposable = Disposable.lazy();
const abortController = new AbortController();
disposable.addDisposable({
dispose: () => abortController.abort(),
});
const init = {
method,
headers: Object.entries(headers).map(([key, value = '']) => [key, value]),
body,
signal: abortController.signal,
};
const request = fetch(url, init);
request.then((response) => response.text().then((responseText) => {
const headers = {};
response.headers.forEach((value, key) => {
headers[key] = value;
});
const httpResponse = {
status: response.status,
statusText: response.statusText,
responseText,
headers,
};
return disposable.addDisposable(success(httpResponse));
}), (error) => disposable.addDisposable(failure(error)));
return disposable;
}
//# sourceMappingURL=createFetchHttpEnv.js.map