xhr.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.XHRClient = void 0;
  4. const base_js_1 = require("./base.js");
  5. const utils_js_1 = require("../../utils.js");
  6. class XHRResponse extends base_js_1.BaseResponse {
  7. /**
  8. * BaseResponse facade for XMLHttpRequest
  9. * @param {XMLHttpRequest} xhr
  10. * @param {ArrayBuffer} data
  11. */
  12. constructor(xhr, data) {
  13. super();
  14. this.xhr = xhr;
  15. this.data = data;
  16. }
  17. get status() {
  18. return this.xhr.status;
  19. }
  20. getHeader(name) {
  21. return this.xhr.getResponseHeader(name);
  22. }
  23. async getData() {
  24. return this.data;
  25. }
  26. }
  27. class XHRClient extends base_js_1.BaseClient {
  28. constructRequest(headers, signal) {
  29. return new Promise((resolve, reject) => {
  30. const xhr = new XMLHttpRequest();
  31. xhr.open('GET', this.url);
  32. xhr.responseType = 'arraybuffer';
  33. for (const [key, value] of Object.entries(headers)) {
  34. xhr.setRequestHeader(key, value);
  35. }
  36. // hook signals
  37. xhr.onload = () => {
  38. const data = xhr.response;
  39. resolve(new XHRResponse(xhr, data));
  40. };
  41. xhr.onerror = reject;
  42. xhr.onabort = () => reject(new utils_js_1.AbortError('Request aborted'));
  43. xhr.send();
  44. if (signal) {
  45. if (signal.aborted) {
  46. xhr.abort();
  47. }
  48. signal.addEventListener('abort', () => xhr.abort());
  49. }
  50. });
  51. }
  52. async request({ headers, signal } = {}) {
  53. const response = await this.constructRequest(headers, signal);
  54. return response;
  55. }
  56. }
  57. exports.XHRClient = XHRClient;
  58. //# sourceMappingURL=xhr.js.map