UNPKG

@typed/http

Version:

HTTP requests for node and browsers

51 lines 1.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createHttpEnv = void 0; const disposable_1 = require("@typed/disposable"); const withHttpManagement_1 = require("./withHttpManagement"); const headerSeparator = ': '; const newLineRegex = /[\r\n]+/; /** * Creates an Http Environment that works in browser and node. */ function createHttpEnv(options) { const env = { http }; return options ? withHttpManagement_1.withHttpManagement(options, env) : env; } exports.createHttpEnv = createHttpEnv; function http(url, options, callbacks) { const { success, failure } = callbacks; const { method = 'GET', headers, body } = options; const request = new XMLHttpRequest(); const disposable = disposable_1.Disposable.lazy(); request.onerror = () => disposable.addDisposable(failure(new Error(request.statusText))); request.addEventListener('load', () => { const headers = request.getAllResponseHeaders(); // Convert the header string into an array // of individual headers const arr = headers.trim().split(newLineRegex); // Create a map of header names to values const headerMap = {}; arr.forEach((line) => { const parts = line.split(headerSeparator); const header = parts.shift(); const value = parts.join(headerSeparator); headerMap[header] = value; }); disposable.addDisposable(success({ responseText: request.responseText, status: request.status, statusText: request.statusText, headers: headerMap, })); }); request.open(method, url); if (headers) { Object.keys(headers).forEach((header) => { request.setRequestHeader(header, headers[header] || ''); }); } request.send(body); return disposable; } //# sourceMappingURL=createHttpEnv.js.map