@mswjs/interceptors 0.19.4 → 0.19.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/lib/BatchInterceptor.d.ts +5 -5
  2. package/lib/BatchInterceptor.js +14 -59
  3. package/lib/BatchInterceptor.js.map +1 -1
  4. package/lib/Interceptor.d.ts +7 -6
  5. package/lib/Interceptor.js +39 -64
  6. package/lib/Interceptor.js.map +1 -1
  7. package/lib/RemoteHttpInterceptor.js +115 -209
  8. package/lib/RemoteHttpInterceptor.js.map +1 -1
  9. package/lib/glossary.d.ts +2 -2
  10. package/lib/interceptors/ClientRequest/NodeClientRequest.js +141 -278
  11. package/lib/interceptors/ClientRequest/NodeClientRequest.js.map +1 -1
  12. package/lib/interceptors/ClientRequest/http.get.js +5 -34
  13. package/lib/interceptors/ClientRequest/http.get.js.map +1 -1
  14. package/lib/interceptors/ClientRequest/http.request.js +6 -35
  15. package/lib/interceptors/ClientRequest/http.request.js.map +1 -1
  16. package/lib/interceptors/ClientRequest/index.js +22 -82
  17. package/lib/interceptors/ClientRequest/index.js.map +1 -1
  18. package/lib/interceptors/ClientRequest/utils/cloneIncomingMessage.js +18 -62
  19. package/lib/interceptors/ClientRequest/utils/cloneIncomingMessage.js.map +1 -1
  20. package/lib/interceptors/ClientRequest/utils/createRequest.js +10 -32
  21. package/lib/interceptors/ClientRequest/utils/createRequest.js.map +1 -1
  22. package/lib/interceptors/ClientRequest/utils/createResponse.js +6 -6
  23. package/lib/interceptors/ClientRequest/utils/createResponse.js.map +1 -1
  24. package/lib/interceptors/ClientRequest/utils/getIncomingMessageBody.js +12 -12
  25. package/lib/interceptors/ClientRequest/utils/getIncomingMessageBody.js.map +1 -1
  26. package/lib/interceptors/ClientRequest/utils/normalizeClientRequestArgs.js +21 -52
  27. package/lib/interceptors/ClientRequest/utils/normalizeClientRequestArgs.js.map +1 -1
  28. package/lib/interceptors/ClientRequest/utils/normalizeClientRequestEndArgs.js +5 -9
  29. package/lib/interceptors/ClientRequest/utils/normalizeClientRequestEndArgs.js.map +1 -1
  30. package/lib/interceptors/ClientRequest/utils/normalizeClientRequestWriteArgs.js +6 -6
  31. package/lib/interceptors/ClientRequest/utils/normalizeClientRequestWriteArgs.js.map +1 -1
  32. package/lib/interceptors/XMLHttpRequest/XMLHttpRequestOverride.js +213 -338
  33. package/lib/interceptors/XMLHttpRequest/XMLHttpRequestOverride.js.map +1 -1
  34. package/lib/interceptors/XMLHttpRequest/index.js +16 -33
  35. package/lib/interceptors/XMLHttpRequest/index.js.map +1 -1
  36. package/lib/interceptors/XMLHttpRequest/polyfills/EventPolyfill.js +11 -12
  37. package/lib/interceptors/XMLHttpRequest/polyfills/EventPolyfill.js.map +1 -1
  38. package/lib/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.js +9 -27
  39. package/lib/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.js.map +1 -1
  40. package/lib/interceptors/XMLHttpRequest/utils/concatArrayBuffer.js +1 -1
  41. package/lib/interceptors/XMLHttpRequest/utils/concatArrayBuffer.js.map +1 -1
  42. package/lib/interceptors/XMLHttpRequest/utils/createEvent.js +7 -7
  43. package/lib/interceptors/XMLHttpRequest/utils/createEvent.js.map +1 -1
  44. package/lib/interceptors/XMLHttpRequest/utils/createResponse.js +2 -2
  45. package/lib/interceptors/XMLHttpRequest/utils/createResponse.js.map +1 -1
  46. package/lib/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.js +2 -2
  47. package/lib/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.js.map +1 -1
  48. package/lib/interceptors/fetch/index.js +52 -125
  49. package/lib/interceptors/fetch/index.js.map +1 -1
  50. package/lib/presets/browser.js +2 -2
  51. package/lib/presets/browser.js.map +1 -1
  52. package/lib/presets/node.js +2 -2
  53. package/lib/presets/node.js.map +1 -1
  54. package/lib/utils/AsyncEventEmitter.d.ts +9 -8
  55. package/lib/utils/AsyncEventEmitter.js +84 -190
  56. package/lib/utils/AsyncEventEmitter.js.map +1 -1
  57. package/lib/utils/bufferUtils.js +3 -3
  58. package/lib/utils/bufferUtils.js.map +1 -1
  59. package/lib/utils/cloneObject.js +2 -19
  60. package/lib/utils/cloneObject.js.map +1 -1
  61. package/lib/utils/createLazyCallback.js +14 -49
  62. package/lib/utils/createLazyCallback.js.map +1 -1
  63. package/lib/utils/getCleanUrl.js +1 -2
  64. package/lib/utils/getCleanUrl.js.map +1 -1
  65. package/lib/utils/getRequestOptionsByUrl.js +3 -3
  66. package/lib/utils/getRequestOptionsByUrl.js.map +1 -1
  67. package/lib/utils/getUrlByRequestOptions.js +23 -39
  68. package/lib/utils/getUrlByRequestOptions.js.map +1 -1
  69. package/lib/utils/nextTick.js +2 -2
  70. package/lib/utils/nextTick.js.map +1 -1
  71. package/lib/utils/parseJson.js +1 -1
  72. package/lib/utils/parseJson.js.map +1 -1
  73. package/lib/utils/toInteractiveRequest.js +3 -3
  74. package/lib/utils/toInteractiveRequest.js.map +1 -1
  75. package/lib/utils/uuid.js +2 -2
  76. package/lib/utils/uuid.js.map +1 -1
  77. package/package.json +2 -2
  78. package/src/BatchInterceptor.test.ts +2 -2
  79. package/src/BatchInterceptor.ts +14 -13
  80. package/src/Interceptor.ts +12 -11
  81. package/src/glossary.ts +2 -6
  82. package/src/utils/AsyncEventEmitter.test.ts +6 -6
  83. package/src/utils/AsyncEventEmitter.ts +60 -50
@@ -8,78 +8,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __values = (this && this.__values) || function(o) {
39
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
- if (m) return m.call(o);
41
- if (o && typeof o.length === "number") return {
42
- next: function () {
43
- if (o && i >= o.length) o = void 0;
44
- return { value: o && o[i++], done: !o };
45
- }
46
- };
47
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
- };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
- }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
62
- }
63
- return ar;
64
- };
65
11
  Object.defineProperty(exports, "__esModule", { value: true });
66
12
  exports.createXMLHttpRequestOverride = void 0;
67
- var until_1 = require("@open-draft/until");
68
- var web_fetch_1 = require("@remix-run/web-fetch");
69
- var headers_polyfill_1 = require("headers-polyfill");
70
- var parseJson_1 = require("../../utils/parseJson");
71
- var createEvent_1 = require("./utils/createEvent");
72
- var bufferUtils_1 = require("../../utils/bufferUtils");
73
- var createResponse_1 = require("./utils/createResponse");
74
- var concatArrayBuffer_1 = require("./utils/concatArrayBuffer");
75
- var toInteractiveRequest_1 = require("../../utils/toInteractiveRequest");
76
- var uuid_1 = require("../../utils/uuid");
77
- var isDomParserSupportedType_1 = require("./utils/isDomParserSupportedType");
78
- var createXMLHttpRequestOverride = function (options) {
13
+ const until_1 = require("@open-draft/until");
14
+ const web_fetch_1 = require("@remix-run/web-fetch");
15
+ const headers_polyfill_1 = require("headers-polyfill");
16
+ const parseJson_1 = require("../../utils/parseJson");
17
+ const createEvent_1 = require("./utils/createEvent");
18
+ const bufferUtils_1 = require("../../utils/bufferUtils");
19
+ const createResponse_1 = require("./utils/createResponse");
20
+ const concatArrayBuffer_1 = require("./utils/concatArrayBuffer");
21
+ const toInteractiveRequest_1 = require("../../utils/toInteractiveRequest");
22
+ const uuid_1 = require("../../utils/uuid");
23
+ const isDomParserSupportedType_1 = require("./utils/isDomParserSupportedType");
24
+ const createXMLHttpRequestOverride = (options) => {
79
25
  var _a;
80
- var XMLHttpRequest = options.XMLHttpRequest, emitter = options.emitter, log = options.log;
81
- return _a = /** @class */ (function () {
82
- function XMLHttpRequestOverride() {
26
+ const { XMLHttpRequest, emitter, log } = options;
27
+ return _a = class XMLHttpRequestOverride {
28
+ constructor() {
83
29
  // Collection of events modified by `addEventListener`/`removeEventListener` calls.
84
30
  this._events = [];
85
31
  this.log = log;
@@ -111,7 +57,7 @@ var createXMLHttpRequestOverride = function (options) {
111
57
  this._responseBuffer = new Uint8Array();
112
58
  this._responseHeaders = new headers_polyfill_1.Headers();
113
59
  }
114
- XMLHttpRequestOverride.prototype.setReadyState = function (nextState) {
60
+ setReadyState(nextState) {
115
61
  if (nextState === this.readyState) {
116
62
  return;
117
63
  }
@@ -121,36 +67,25 @@ var createXMLHttpRequestOverride = function (options) {
121
67
  this.log('triggering readystate change...');
122
68
  this.trigger('readystatechange');
123
69
  }
124
- };
70
+ }
125
71
  /**
126
72
  * Triggers both direct callback and attached event listeners
127
73
  * for the given event.
128
74
  */
129
- XMLHttpRequestOverride.prototype.trigger = function (eventName, options) {
130
- var e_1, _a;
75
+ trigger(eventName, options) {
131
76
  this.log('trigger "%s" (%d)', eventName, this.readyState);
132
77
  this.log('resolve listener for event "%s"', eventName);
133
- var callback = this["on" + eventName];
78
+ const callback = this[`on${eventName}`];
134
79
  callback === null || callback === void 0 ? void 0 : callback.call(this, (0, createEvent_1.createEvent)(this, eventName, options));
135
- try {
136
- for (var _b = __values(this._events), _c = _b.next(); !_c.done; _c = _b.next()) {
137
- var event_1 = _c.value;
138
- if (event_1.name === eventName) {
139
- log('calling mock event listener "%s" (%d)', eventName, this.readyState);
140
- event_1.listener.call(this, (0, createEvent_1.createEvent)(this, eventName, options));
141
- }
80
+ for (const event of this._events) {
81
+ if (event.name === eventName) {
82
+ log('calling mock event listener "%s" (%d)', eventName, this.readyState);
83
+ event.listener.call(this, (0, createEvent_1.createEvent)(this, eventName, options));
142
84
  }
143
85
  }
144
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
145
- finally {
146
- try {
147
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
148
- }
149
- finally { if (e_1) throw e_1.error; }
150
- }
151
86
  return this;
152
- };
153
- XMLHttpRequestOverride.prototype.reset = function () {
87
+ }
88
+ reset() {
154
89
  this.log('reset');
155
90
  this.setReadyState(this.UNSENT);
156
91
  this.status = 0;
@@ -158,35 +93,30 @@ var createXMLHttpRequestOverride = function (options) {
158
93
  this._responseBuffer = new Uint8Array();
159
94
  this._requestHeaders = new headers_polyfill_1.Headers();
160
95
  this._responseHeaders = new headers_polyfill_1.Headers();
161
- };
162
- XMLHttpRequestOverride.prototype.open = function (method, url, async, user, password) {
163
- if (async === void 0) { async = true; }
164
- return __awaiter(this, void 0, void 0, function () {
165
- return __generator(this, function (_a) {
166
- this.log = this.log.extend("request " + method + " " + url);
167
- this.log('open', { method: method, url: url, async: async, user: user, password: password });
168
- this.reset();
169
- this.setReadyState(this.OPENED);
170
- if (typeof url === 'undefined') {
171
- this.url = method;
172
- this.method = 'GET';
173
- }
174
- else {
175
- this.url = url;
176
- this.method = method;
177
- this.async = async;
178
- this.user = user;
179
- this.password = password;
180
- }
181
- return [2 /*return*/];
182
- });
96
+ }
97
+ open(method, url, async = true, user, password) {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ this.log = this.log.extend(`request ${method} ${url}`);
100
+ this.log('open', { method, url, async, user, password });
101
+ this.reset();
102
+ this.setReadyState(this.OPENED);
103
+ if (typeof url === 'undefined') {
104
+ this.url = method;
105
+ this.method = 'GET';
106
+ }
107
+ else {
108
+ this.url = url;
109
+ this.method = method;
110
+ this.async = async;
111
+ this.user = user;
112
+ this.password = password;
113
+ }
183
114
  });
184
- };
185
- XMLHttpRequestOverride.prototype.send = function (data) {
186
- var _this = this;
115
+ }
116
+ send(data) {
187
117
  this.log('send %s %s', this.method, this.url);
188
- var requestBuffer = typeof data === 'string' ? (0, bufferUtils_1.encodeBuffer)(data) : data;
189
- var url;
118
+ const requestBuffer = typeof data === 'string' ? (0, bufferUtils_1.encodeBuffer)(data) : data;
119
+ let url;
190
120
  try {
191
121
  url = new URL(this.url);
192
122
  }
@@ -198,176 +128,157 @@ var createXMLHttpRequestOverride = function (options) {
198
128
  }
199
129
  this.log('request headers', this._requestHeaders);
200
130
  // Create an intercepted request instance exposed to the request intercepting middleware.
201
- var requestId = (0, uuid_1.uuidv4)();
202
- var capturedRequest = new web_fetch_1.Request(url, {
131
+ const requestId = (0, uuid_1.uuidv4)();
132
+ const capturedRequest = new web_fetch_1.Request(url, {
203
133
  method: this.method,
204
134
  headers: this._requestHeaders,
205
135
  credentials: this.withCredentials ? 'include' : 'omit',
206
136
  body: requestBuffer,
207
137
  });
208
- var interactiveRequest = (0, toInteractiveRequest_1.toInteractiveRequest)(capturedRequest);
138
+ const interactiveRequest = (0, toInteractiveRequest_1.toInteractiveRequest)(capturedRequest);
209
139
  this.log('emitting the "request" event for %d listener(s)...', emitter.listenerCount('request'));
210
140
  emitter.emit('request', interactiveRequest, requestId);
211
141
  this.log('awaiting mocked response...');
212
- Promise.resolve((0, until_1.until)(function () { return __awaiter(_this, void 0, void 0, function () {
213
- var _a, mockedResponse;
214
- return __generator(this, function (_b) {
215
- switch (_b.label) {
216
- case 0: return [4 /*yield*/, emitter.untilIdle('request', function (_a) {
217
- var _b = __read(_a.args, 2), pendingRequestId = _b[1];
218
- return pendingRequestId === requestId;
219
- })];
220
- case 1:
221
- _b.sent();
222
- this.log('all request listeners have been resolved!');
223
- return [4 /*yield*/, interactiveRequest.respondWith.invoked()];
224
- case 2:
225
- _a = __read.apply(void 0, [_b.sent(), 1]), mockedResponse = _a[0];
226
- this.log('event.respondWith called with:', mockedResponse);
227
- return [2 /*return*/, mockedResponse];
228
- }
142
+ Promise.resolve((0, until_1.until)(() => __awaiter(this, void 0, void 0, function* () {
143
+ yield emitter.untilIdle('request', ({ args: [, pendingRequestId] }) => {
144
+ return pendingRequestId === requestId;
229
145
  });
230
- }); })).then(function (_a) {
231
- var _b, _c;
232
- var _d = __read(_a, 2), middlewareException = _d[0], mockedResponse = _d[1];
146
+ this.log('all request listeners have been resolved!');
147
+ const [mockedResponse] = yield interactiveRequest.respondWith.invoked();
148
+ this.log('event.respondWith called with:', mockedResponse);
149
+ return mockedResponse;
150
+ }))).then(([middlewareException, mockedResponse]) => {
151
+ var _a, _b;
233
152
  // When the request middleware throws an exception, error the request.
234
153
  // This cancels the request and is similar to a network error.
235
154
  if (middlewareException) {
236
- _this.log('middleware function threw an exception!', middlewareException);
155
+ this.log('middleware function threw an exception!', middlewareException);
237
156
  // Mark the request as complete.
238
- _this.setReadyState(_this.DONE);
157
+ this.setReadyState(this.DONE);
239
158
  // No way to propagate the actual error message.
240
- _this.trigger('error');
159
+ this.trigger('error');
241
160
  // Emit the "loadend" event to notify that the request has settled.
242
161
  // In this case, there's been an error with the request so
243
162
  // we must not emit the "load" event.
244
- _this.trigger('loadend');
163
+ this.trigger('loadend');
245
164
  // Abort must not be called when request fails!
246
165
  // this.abort()
247
166
  return;
248
167
  }
249
168
  // Forward request headers modified in the "request" listener.
250
- _this._requestHeaders = new headers_polyfill_1.Headers(capturedRequest.headers);
169
+ this._requestHeaders = new headers_polyfill_1.Headers(capturedRequest.headers);
251
170
  // Return a mocked response, if provided in the middleware.
252
171
  if (mockedResponse) {
253
- var responseClone_1 = mockedResponse.clone();
254
- _this.log('received mocked response', mockedResponse);
255
- _this.status = (_b = mockedResponse.status) !== null && _b !== void 0 ? _b : 200;
256
- _this.statusText = mockedResponse.statusText || 'OK';
257
- _this.log('set response status', _this.status, _this.statusText);
258
- _this._responseHeaders = new headers_polyfill_1.Headers(mockedResponse.headers || {});
259
- _this.log('set response headers', _this._responseHeaders);
260
- _this.log('response type', _this.responseType);
261
- _this.responseURL = _this.url;
262
- var totalLength_1 = _this._responseHeaders.has('Content-Length')
263
- ? Number(_this._responseHeaders.get('Content-Length'))
172
+ const responseClone = mockedResponse.clone();
173
+ this.log('received mocked response', mockedResponse);
174
+ this.status = (_a = mockedResponse.status) !== null && _a !== void 0 ? _a : 200;
175
+ this.statusText = mockedResponse.statusText || 'OK';
176
+ this.log('set response status', this.status, this.statusText);
177
+ this._responseHeaders = new headers_polyfill_1.Headers(mockedResponse.headers || {});
178
+ this.log('set response headers', this._responseHeaders);
179
+ this.log('response type', this.responseType);
180
+ this.responseURL = this.url;
181
+ const totalLength = this._responseHeaders.has('Content-Length')
182
+ ? Number(this._responseHeaders.get('Content-Length'))
264
183
  : undefined;
265
184
  // Trigger a loadstart event to indicate the initialization of the fetch.
266
- _this.trigger('loadstart', { loaded: 0, total: totalLength_1 });
185
+ this.trigger('loadstart', { loaded: 0, total: totalLength });
267
186
  // Mark that response headers has been received
268
187
  // and trigger a ready state event to reflect received headers
269
188
  // in a custom "onreadystatechange" callback.
270
- _this.setReadyState(_this.HEADERS_RECEIVED);
271
- _this.setReadyState(_this.LOADING);
272
- var closeResponseStream_1 = function () {
189
+ this.setReadyState(this.HEADERS_RECEIVED);
190
+ this.setReadyState(this.LOADING);
191
+ const closeResponseStream = () => {
273
192
  /**
274
193
  * Explicitly mark the request as done so its response never hangs.
275
194
  * @see https://github.com/mswjs/interceptors/issues/13
276
195
  */
277
- _this.setReadyState(_this.DONE);
196
+ this.setReadyState(this.DONE);
278
197
  // Always trigger the "load" event because at this point
279
198
  // the request has been performed successfully.
280
- _this.trigger('load', {
281
- loaded: _this._responseBuffer.byteLength,
282
- total: totalLength_1,
199
+ this.trigger('load', {
200
+ loaded: this._responseBuffer.byteLength,
201
+ total: totalLength,
283
202
  });
284
203
  // Trigger a loadend event to indicate the fetch has completed.
285
- _this.trigger('loadend', {
286
- loaded: _this._responseBuffer.byteLength,
287
- total: totalLength_1,
204
+ this.trigger('loadend', {
205
+ loaded: this._responseBuffer.byteLength,
206
+ total: totalLength,
288
207
  });
289
- emitter.emit('response', responseClone_1, capturedRequest, requestId);
208
+ emitter.emit('response', responseClone, capturedRequest, requestId);
290
209
  };
291
210
  if (mockedResponse.body) {
292
- var reader_1 = mockedResponse.body.getReader();
293
- var readNextChunk_1 = function () { return __awaiter(_this, void 0, void 0, function () {
294
- var _a, value, done;
295
- return __generator(this, function (_b) {
296
- switch (_b.label) {
297
- case 0: return [4 /*yield*/, reader_1.read()];
298
- case 1:
299
- _a = _b.sent(), value = _a.value, done = _a.done;
300
- if (done) {
301
- closeResponseStream_1();
302
- return [2 /*return*/];
303
- }
304
- if (value) {
305
- this._responseBuffer = (0, concatArrayBuffer_1.concatArrayBuffer)(this._responseBuffer, value);
306
- this.trigger('progress', {
307
- loaded: this._responseBuffer.byteLength,
308
- total: totalLength_1,
309
- });
310
- }
311
- readNextChunk_1();
312
- return [2 /*return*/];
313
- }
314
- });
315
- }); };
316
- readNextChunk_1();
211
+ const reader = mockedResponse.body.getReader();
212
+ const readNextChunk = () => __awaiter(this, void 0, void 0, function* () {
213
+ const { value, done } = yield reader.read();
214
+ if (done) {
215
+ closeResponseStream();
216
+ return;
217
+ }
218
+ if (value) {
219
+ this._responseBuffer = (0, concatArrayBuffer_1.concatArrayBuffer)(this._responseBuffer, value);
220
+ this.trigger('progress', {
221
+ loaded: this._responseBuffer.byteLength,
222
+ total: totalLength,
223
+ });
224
+ }
225
+ readNextChunk();
226
+ });
227
+ readNextChunk();
317
228
  }
318
229
  else {
319
- closeResponseStream_1();
230
+ closeResponseStream();
320
231
  }
321
232
  }
322
233
  else {
323
- _this.log('no mocked response received!');
234
+ this.log('no mocked response received!');
324
235
  // Perform an original request, when the request middleware returned no mocked response.
325
- var originalRequest_1 = new XMLHttpRequest();
326
- _this.log('opening an original request %s %s', _this.method, _this.url);
327
- originalRequest_1.open(_this.method, _this.url, (_c = _this.async) !== null && _c !== void 0 ? _c : true, _this.user, _this.password);
328
- originalRequest_1.addEventListener('readystatechange', function () {
236
+ const originalRequest = new XMLHttpRequest();
237
+ this.log('opening an original request %s %s', this.method, this.url);
238
+ originalRequest.open(this.method, this.url, (_b = this.async) !== null && _b !== void 0 ? _b : true, this.user, this.password);
239
+ originalRequest.addEventListener('readystatechange', () => {
329
240
  // Forward the original response headers to the patched instance
330
241
  // immediately as they are received.
331
- if (originalRequest_1.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
332
- var responseHeaders = originalRequest_1.getAllResponseHeaders();
333
- _this.log('original response headers:\n', responseHeaders);
334
- _this._responseHeaders = (0, headers_polyfill_1.stringToHeaders)(responseHeaders);
335
- _this.log('original response headers (normalized)', _this._responseHeaders);
242
+ if (originalRequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
243
+ const responseHeaders = originalRequest.getAllResponseHeaders();
244
+ this.log('original response headers:\n', responseHeaders);
245
+ this._responseHeaders = (0, headers_polyfill_1.stringToHeaders)(responseHeaders);
246
+ this.log('original response headers (normalized)', this._responseHeaders);
336
247
  }
337
248
  });
338
- originalRequest_1.addEventListener('loadstart', function () {
249
+ originalRequest.addEventListener('loadstart', () => {
339
250
  // Forward the response type to the patched instance immediately.
340
251
  // Response type affects how response reading properties are resolved.
341
- _this.responseType = originalRequest_1.responseType;
252
+ this.responseType = originalRequest.responseType;
342
253
  });
343
- originalRequest_1.addEventListener('progress', function () {
344
- _this._responseBuffer = (0, concatArrayBuffer_1.concatArrayBuffer)(_this._responseBuffer, (0, bufferUtils_1.encodeBuffer)(originalRequest_1.responseText));
254
+ originalRequest.addEventListener('progress', () => {
255
+ this._responseBuffer = (0, concatArrayBuffer_1.concatArrayBuffer)(this._responseBuffer, (0, bufferUtils_1.encodeBuffer)(originalRequest.responseText));
345
256
  });
346
- originalRequest_1.addEventListener('load', function () {
347
- _this.status = originalRequest_1.status;
348
- _this.statusText = originalRequest_1.statusText;
349
- _this.responseURL = originalRequest_1.responseURL;
350
- _this.log('received original response', _this.status, _this.statusText);
257
+ originalRequest.addEventListener('load', () => {
258
+ this.status = originalRequest.status;
259
+ this.statusText = originalRequest.statusText;
260
+ this.responseURL = originalRequest.responseURL;
261
+ this.log('received original response', this.status, this.statusText);
351
262
  // Explicitly mark the mocked request instance as done
352
263
  // so the response never hangs.
353
- _this.setReadyState(_this.DONE);
354
- _this.log('set mock request readyState to DONE');
355
- _this.log('original response body:', _this.response);
356
- _this.log('original response finished!');
264
+ this.setReadyState(this.DONE);
265
+ this.log('set mock request readyState to DONE');
266
+ this.log('original response body:', this.response);
267
+ this.log('original response finished!');
357
268
  });
358
269
  // Update the patched instance on the "loadend" event
359
270
  // because it fires when the request settles (succeeds/errors).
360
- originalRequest_1.addEventListener('loadend', function () {
361
- _this.log('original "loadend"');
362
- emitter.emit('response', (0, createResponse_1.createResponse)(originalRequest_1, _this._responseBuffer), capturedRequest, requestId);
271
+ originalRequest.addEventListener('loadend', () => {
272
+ this.log('original "loadend"');
273
+ emitter.emit('response', (0, createResponse_1.createResponse)(originalRequest, this._responseBuffer), capturedRequest, requestId);
363
274
  });
364
- _this.propagateHeaders(originalRequest_1, _this._requestHeaders);
275
+ this.propagateHeaders(originalRequest, this._requestHeaders);
365
276
  // Assign callbacks and event listeners from the intercepted XHR instance
366
277
  // to the original XHR instance.
367
- _this.propagateCallbacks(originalRequest_1);
368
- _this.propagateListeners(originalRequest_1);
369
- if (_this.async) {
370
- originalRequest_1.timeout = _this.timeout;
278
+ this.propagateCallbacks(originalRequest);
279
+ this.propagateListeners(originalRequest);
280
+ if (this.async) {
281
+ originalRequest.timeout = this.timeout;
371
282
  }
372
283
  /**
373
284
  * @note Set the intercepted request ID on the original request
@@ -375,120 +286,107 @@ var createXMLHttpRequestOverride = function (options) {
375
286
  * to process it once again. This happens when bypassing XMLHttpRequest
376
287
  * because it's polyfilled with "http.ClientRequest" in JSDOM.
377
288
  */
378
- originalRequest_1.setRequestHeader('X-Request-Id', requestId);
379
- _this.log('send', data);
380
- originalRequest_1.send(data);
289
+ originalRequest.setRequestHeader('X-Request-Id', requestId);
290
+ this.log('send', data);
291
+ originalRequest.send(data);
381
292
  }
382
293
  });
383
- };
384
- Object.defineProperty(XMLHttpRequestOverride.prototype, "responseText", {
385
- get: function () {
386
- this.log('responseText()');
387
- return (0, bufferUtils_1.decodeBuffer)(this._responseBuffer);
388
- },
389
- enumerable: false,
390
- configurable: true
391
- });
392
- Object.defineProperty(XMLHttpRequestOverride.prototype, "response", {
393
- get: function () {
394
- switch (this.responseType) {
395
- case 'json': {
396
- this.log('resolving response body as JSON');
397
- return (0, parseJson_1.parseJson)(this.responseText);
398
- }
399
- case 'arraybuffer': {
400
- this.log('resolving response body as ArrayBuffer');
401
- return (0, bufferUtils_1.toArrayBuffer)(this._responseBuffer);
402
- }
403
- case 'blob': {
404
- var mimeType = this.getResponseHeader('content-type') || 'text/plain';
405
- this.log('resolving response body as blog (%s)', mimeType);
406
- return new Blob([this.responseText], { type: mimeType });
407
- }
408
- case 'document': {
409
- this.log('resolving response body as XML');
410
- return this.responseXML;
411
- }
412
- default: {
413
- return this.responseText;
414
- }
294
+ }
295
+ get responseText() {
296
+ this.log('responseText()');
297
+ return (0, bufferUtils_1.decodeBuffer)(this._responseBuffer);
298
+ }
299
+ get response() {
300
+ switch (this.responseType) {
301
+ case 'json': {
302
+ this.log('resolving response body as JSON');
303
+ return (0, parseJson_1.parseJson)(this.responseText);
304
+ }
305
+ case 'arraybuffer': {
306
+ this.log('resolving response body as ArrayBuffer');
307
+ return (0, bufferUtils_1.toArrayBuffer)(this._responseBuffer);
308
+ }
309
+ case 'blob': {
310
+ const mimeType = this.getResponseHeader('content-type') || 'text/plain';
311
+ this.log('resolving response body as blog (%s)', mimeType);
312
+ return new Blob([this.responseText], { type: mimeType });
415
313
  }
416
- },
417
- enumerable: false,
418
- configurable: true
419
- });
420
- Object.defineProperty(XMLHttpRequestOverride.prototype, "responseXML", {
421
- get: function () {
422
- var contentType = this.getResponseHeader('content-type') || '';
423
- this.log('responseXML() %s', contentType);
424
- if (typeof DOMParser === 'undefined') {
425
- console.warn('Cannot retrieve XMLHttpRequest response body as XML: DOMParser is not defined. You are likely using an environment that is not browser or does not polyfill browser globals correctly.');
426
- return null;
314
+ case 'document': {
315
+ this.log('resolving response body as XML');
316
+ return this.responseXML;
427
317
  }
428
- if ((0, isDomParserSupportedType_1.isDomParserSupportedType)(contentType)) {
429
- this.log('response content-type is XML, parsing...');
430
- return new DOMParser().parseFromString(this.responseText, contentType);
318
+ default: {
319
+ return this.responseText;
431
320
  }
432
- this.log('response content type is not XML, returning null...');
321
+ }
322
+ }
323
+ get responseXML() {
324
+ const contentType = this.getResponseHeader('content-type') || '';
325
+ this.log('responseXML() %s', contentType);
326
+ if (typeof DOMParser === 'undefined') {
327
+ console.warn('Cannot retrieve XMLHttpRequest response body as XML: DOMParser is not defined. You are likely using an environment that is not browser or does not polyfill browser globals correctly.');
433
328
  return null;
434
- },
435
- enumerable: false,
436
- configurable: true
437
- });
438
- XMLHttpRequestOverride.prototype.abort = function () {
329
+ }
330
+ if ((0, isDomParserSupportedType_1.isDomParserSupportedType)(contentType)) {
331
+ this.log('response content-type is XML, parsing...');
332
+ return new DOMParser().parseFromString(this.responseText, contentType);
333
+ }
334
+ this.log('response content type is not XML, returning null...');
335
+ return null;
336
+ }
337
+ abort() {
439
338
  this.log('abort()');
440
339
  if (this.readyState > this.UNSENT && this.readyState < this.DONE) {
441
340
  this.reset();
442
341
  this.trigger('abort');
443
342
  }
444
- };
445
- XMLHttpRequestOverride.prototype.dispatchEvent = function () {
343
+ }
344
+ dispatchEvent() {
446
345
  return false;
447
- };
448
- XMLHttpRequestOverride.prototype.setRequestHeader = function (name, value) {
346
+ }
347
+ setRequestHeader(name, value) {
449
348
  this.log('setRequestHeader() "%s" to "%s"', name, value);
450
349
  this._requestHeaders.append(name, value);
451
- };
452
- XMLHttpRequestOverride.prototype.getResponseHeader = function (name) {
350
+ }
351
+ getResponseHeader(name) {
453
352
  this.log('getResponseHeader() "%s"', name);
454
353
  if (this.readyState < this.HEADERS_RECEIVED) {
455
354
  this.log('cannot return a header: headers not received (state: %s)', this.readyState);
456
355
  return null;
457
356
  }
458
- var headerValue = this._responseHeaders.get(name);
357
+ const headerValue = this._responseHeaders.get(name);
459
358
  this.log('resolved response header "%s" to "%s"', name, headerValue, this._responseHeaders);
460
359
  return headerValue;
461
- };
462
- XMLHttpRequestOverride.prototype.getAllResponseHeaders = function () {
360
+ }
361
+ getAllResponseHeaders() {
463
362
  this.log('getAllResponseHeaders()');
464
363
  if (this.readyState < this.HEADERS_RECEIVED) {
465
364
  this.log('cannot return headers: headers not received (state: %s)', this.readyState);
466
365
  return '';
467
366
  }
468
367
  return (0, headers_polyfill_1.headersToString)(this._responseHeaders);
469
- };
470
- XMLHttpRequestOverride.prototype.addEventListener = function (event, listener) {
368
+ }
369
+ addEventListener(event, listener) {
471
370
  this.log('addEventListener', event, listener);
472
371
  this._events.push({
473
372
  name: event,
474
- listener: listener,
373
+ listener,
475
374
  });
476
- };
477
- XMLHttpRequestOverride.prototype.removeEventListener = function (event, listener) {
375
+ }
376
+ removeEventListener(event, listener) {
478
377
  this.log('removeEventListener', name, listener);
479
- this._events = this._events.filter(function (storedEvent) {
378
+ this._events = this._events.filter((storedEvent) => {
480
379
  return storedEvent.name !== event && storedEvent.listener !== listener;
481
380
  });
482
- };
483
- XMLHttpRequestOverride.prototype.overrideMimeType = function () { };
381
+ }
382
+ overrideMimeType() { }
484
383
  /**
485
384
  * Propagates mock XMLHttpRequest instance callbacks
486
385
  * to the given XMLHttpRequest instance.
487
386
  */
488
- XMLHttpRequestOverride.prototype.propagateCallbacks = function (request) {
489
- var e_2, _a;
387
+ propagateCallbacks(request) {
490
388
  this.log('propagating request callbacks to the original request');
491
- var callbackNames = [
389
+ const callbackNames = [
492
390
  'abort',
493
391
  'onerror',
494
392
  'ontimeout',
@@ -498,23 +396,13 @@ var createXMLHttpRequestOverride = function (options) {
498
396
  'onprogress',
499
397
  'onreadystatechange',
500
398
  ];
501
- try {
502
- for (var callbackNames_1 = __values(callbackNames), callbackNames_1_1 = callbackNames_1.next(); !callbackNames_1_1.done; callbackNames_1_1 = callbackNames_1.next()) {
503
- var callbackName = callbackNames_1_1.value;
504
- var callback = this[callbackName];
505
- if (callback) {
506
- request[callbackName] = this[callbackName];
507
- this.log('propagated the "%s" callback', callbackName, callback);
508
- }
399
+ for (const callbackName of callbackNames) {
400
+ const callback = this[callbackName];
401
+ if (callback) {
402
+ request[callbackName] = this[callbackName];
403
+ this.log('propagated the "%s" callback', callbackName, callback);
509
404
  }
510
405
  }
511
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
512
- finally {
513
- try {
514
- if (callbackNames_1_1 && !callbackNames_1_1.done && (_a = callbackNames_1.return)) _a.call(callbackNames_1);
515
- }
516
- finally { if (e_2) throw e_2.error; }
517
- }
518
406
  request.onabort = this.abort;
519
407
  request.onerror = this.onerror;
520
408
  request.ontimeout = this.ontimeout;
@@ -523,38 +411,25 @@ var createXMLHttpRequestOverride = function (options) {
523
411
  request.onloadend = this.onloadend;
524
412
  request.onprogress = this.onprogress;
525
413
  request.onreadystatechange = this.onreadystatechange;
526
- };
414
+ }
527
415
  /**
528
416
  * Propagates the mock XMLHttpRequest instance listeners
529
417
  * to the given XMLHttpRequest instance.
530
418
  */
531
- XMLHttpRequestOverride.prototype.propagateListeners = function (request) {
419
+ propagateListeners(request) {
532
420
  this.log('propagating request listeners (%d) to the original request', this._events.length, this._events);
533
- this._events.forEach(function (_a) {
534
- var name = _a.name, listener = _a.listener;
421
+ this._events.forEach(({ name, listener }) => {
535
422
  request.addEventListener(name, listener);
536
423
  });
537
- };
538
- XMLHttpRequestOverride.prototype.propagateHeaders = function (request, headers) {
539
- var e_3, _a;
424
+ }
425
+ propagateHeaders(request, headers) {
540
426
  this.log('propagating request headers to the original request', headers);
541
- try {
542
- for (var headers_1 = __values(headers), headers_1_1 = headers_1.next(); !headers_1_1.done; headers_1_1 = headers_1.next()) {
543
- var _b = __read(headers_1_1.value, 2), headerName = _b[0], headerValue = _b[1];
544
- this.log('setting "%s" (%s) header on the original request', headerName, headerValue);
545
- request.setRequestHeader(headerName, headerValue);
546
- }
427
+ for (const [headerName, headerValue] of headers) {
428
+ this.log('setting "%s" (%s) header on the original request', headerName, headerValue);
429
+ request.setRequestHeader(headerName, headerValue);
547
430
  }
548
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
549
- finally {
550
- try {
551
- if (headers_1_1 && !headers_1_1.done && (_a = headers_1.return)) _a.call(headers_1);
552
- }
553
- finally { if (e_3) throw e_3.error; }
554
- }
555
- };
556
- return XMLHttpRequestOverride;
557
- }()),
431
+ }
432
+ },
558
433
  /* Request state */
559
434
  _a.UNSENT = 0,
560
435
  _a.OPENED = 1,