requester-browser-xhr.cjs.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. function createBrowserXhrRequester() {
  4. return {
  5. send(request) {
  6. return new Promise((resolve) => {
  7. const baseRequester = new XMLHttpRequest();
  8. baseRequester.open(request.method, request.url, true);
  9. Object.keys(request.headers).forEach(key => baseRequester.setRequestHeader(key, request.headers[key]));
  10. const createTimeout = (timeout, content) => {
  11. return setTimeout(() => {
  12. baseRequester.abort();
  13. resolve({
  14. status: 0,
  15. content,
  16. isTimedOut: true,
  17. });
  18. }, timeout * 1000);
  19. };
  20. const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');
  21. // eslint-disable-next-line functional/no-let
  22. let responseTimeout;
  23. // eslint-disable-next-line functional/immutable-data
  24. baseRequester.onreadystatechange = () => {
  25. if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) {
  26. clearTimeout(connectTimeout);
  27. responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');
  28. }
  29. };
  30. // eslint-disable-next-line functional/immutable-data
  31. baseRequester.onerror = () => {
  32. // istanbul ignore next
  33. if (baseRequester.status === 0) {
  34. clearTimeout(connectTimeout);
  35. clearTimeout(responseTimeout);
  36. resolve({
  37. content: baseRequester.responseText || 'Network request failed',
  38. status: baseRequester.status,
  39. isTimedOut: false,
  40. });
  41. }
  42. };
  43. // eslint-disable-next-line functional/immutable-data
  44. baseRequester.onload = () => {
  45. clearTimeout(connectTimeout);
  46. clearTimeout(responseTimeout);
  47. resolve({
  48. content: baseRequester.responseText,
  49. status: baseRequester.status,
  50. isTimedOut: false,
  51. });
  52. };
  53. baseRequester.send(request.data);
  54. });
  55. },
  56. };
  57. }
  58. exports.createBrowserXhrRequester = createBrowserXhrRequester;