UNPKG

@absmartly/javascript-sdk

Version:

A/B Smartly Javascript SDK

71 lines (70 loc) 2.26 kB
"use strict"; require("core-js/modules/es.promise.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.string.replace.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.fetch = void 0; const errors_1 = require("./errors"); function fetch(url, options) { options = options || {}; return new Promise((resolve, reject) => { const request = new XMLHttpRequest(); const _keys = []; const all = []; const headers = {}; const abort = () => { request.abort(); }; const cleanup = options.signal ? () => { var _a; return (_a = options.signal) === null || _a === void 0 ? void 0 : _a.removeEventListener("abort", abort); } : () => {}; const response = () => ({ ok: (request.status / 100 | 0) === 2, statusText: request.statusText, status: request.status, url: request.responseURL, text: () => Promise.resolve(request.responseText), json: () => Promise.resolve(JSON.parse(request.responseText)), blob: () => Promise.resolve(new Blob([request.response])), clone: response, headers: { keys: () => _keys, entries: () => all, get: n => headers[n.toLowerCase()], has: n => n.toLowerCase() in headers } }); request.open(options.method || "get", url, true); request.onload = () => { request.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm, (m, key, value) => { _keys.push(key = key.toLowerCase()); all.push([key, value]); headers[key] = headers[key] ? `${headers[key]},${value}` : value; return m; }); cleanup(); resolve(response()); }; if (options.signal) { options.signal.addEventListener("abort", abort); } request.onerror = error => { cleanup(); reject(error); }; request.onabort = () => { cleanup(); reject(new errors_1.AbortError("The user aborted a request.")); }; request.withCredentials = options.credentials === "include"; for (const i in options.headers) { request.setRequestHeader(i, options.headers[i]); } request.send(options.body || null); }); } exports.fetch = fetch; exports.default = fetch;