@mswjs/interceptors 0.34.1 → 0.34.2
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.
- package/lib/browser/{chunk-7A4UJNSW.mjs → chunk-73X2CAEH.mjs} +6 -6
- package/lib/browser/chunk-73X2CAEH.mjs.map +1 -0
- package/lib/browser/{chunk-ZXJSL23E.mjs → chunk-7BTAMQ4I.mjs} +119 -22
- package/lib/browser/chunk-7BTAMQ4I.mjs.map +1 -0
- package/lib/browser/{chunk-VRKVKT62.js → chunk-EJYZ4HR3.js} +6 -6
- package/lib/browser/chunk-EJYZ4HR3.js.map +1 -0
- package/lib/browser/{chunk-6MBJUL74.js → chunk-TPZUQHHY.js} +5 -5
- package/lib/browser/{chunk-NU2MPFD6.mjs → chunk-W7UG7MBM.mjs} +2 -2
- package/lib/browser/{chunk-LERABB57.js → chunk-YP3NI6UP.js} +121 -24
- package/lib/browser/chunk-YP3NI6UP.js.map +1 -0
- package/lib/browser/interceptors/XMLHttpRequest/index.js +3 -3
- package/lib/browser/interceptors/XMLHttpRequest/index.mjs +2 -2
- package/lib/browser/interceptors/fetch/index.js +3 -3
- package/lib/browser/interceptors/fetch/index.mjs +2 -2
- package/lib/browser/presets/browser.js +5 -5
- package/lib/browser/presets/browser.mjs +3 -3
- package/lib/node/RemoteHttpInterceptor.js +7 -7
- package/lib/node/RemoteHttpInterceptor.mjs +3 -3
- package/lib/node/{chunk-RJGP7FQP.mjs → chunk-3ROKKA34.mjs} +119 -22
- package/lib/node/chunk-3ROKKA34.mjs.map +1 -0
- package/lib/node/{chunk-I57YSVAV.js → chunk-CQAXV6QM.js} +5 -5
- package/lib/node/{chunk-RTGLFNO3.mjs → chunk-GILG336Y.mjs} +2 -2
- package/lib/node/{chunk-T34TGCMR.js → chunk-MFGG7XIP.js} +121 -24
- package/lib/node/chunk-MFGG7XIP.js.map +1 -0
- package/lib/node/{chunk-5WWNCLB3.js → chunk-TQD7SQGP.js} +6 -6
- package/lib/node/chunk-TQD7SQGP.js.map +1 -0
- package/lib/node/{chunk-UN335ZTD.js → chunk-W4AQXISM.js} +5 -5
- package/lib/node/{chunk-DCMEIPZN.mjs → chunk-WCTY6JTP.mjs} +2 -2
- package/lib/node/{chunk-KY3RJ2M3.mjs → chunk-XSXCGXEY.mjs} +6 -6
- package/lib/node/chunk-XSXCGXEY.mjs.map +1 -0
- package/lib/node/interceptors/ClientRequest/index.js +3 -3
- package/lib/node/interceptors/ClientRequest/index.mjs +2 -2
- package/lib/node/interceptors/XMLHttpRequest/index.js +3 -3
- package/lib/node/interceptors/XMLHttpRequest/index.mjs +2 -2
- package/lib/node/interceptors/fetch/index.js +3 -3
- package/lib/node/interceptors/fetch/index.mjs +2 -2
- package/lib/node/presets/node.js +7 -7
- package/lib/node/presets/node.mjs +4 -4
- package/package.json +3 -1
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts +159 -16
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts +2 -2
- package/src/interceptors/XMLHttpRequest/polyfills/EventPolyfill.ts +4 -4
- package/src/interceptors/XMLHttpRequest/utils/createEvent.ts +1 -1
- package/src/utils/handleRequest.ts +6 -6
- package/lib/browser/chunk-7A4UJNSW.mjs.map +0 -1
- package/lib/browser/chunk-LERABB57.js.map +0 -1
- package/lib/browser/chunk-VRKVKT62.js.map +0 -1
- package/lib/browser/chunk-ZXJSL23E.mjs.map +0 -1
- package/lib/node/chunk-5WWNCLB3.js.map +0 -1
- package/lib/node/chunk-KY3RJ2M3.mjs.map +0 -1
- package/lib/node/chunk-RJGP7FQP.mjs.map +0 -1
- package/lib/node/chunk-T34TGCMR.js.map +0 -1
- /package/lib/browser/{chunk-6MBJUL74.js.map → chunk-TPZUQHHY.js.map} +0 -0
- /package/lib/browser/{chunk-NU2MPFD6.mjs.map → chunk-W7UG7MBM.mjs.map} +0 -0
- /package/lib/node/{chunk-I57YSVAV.js.map → chunk-CQAXV6QM.js.map} +0 -0
- /package/lib/node/{chunk-RTGLFNO3.mjs.map → chunk-GILG336Y.mjs.map} +0 -0
- /package/lib/node/{chunk-UN335ZTD.js.map → chunk-W4AQXISM.js.map} +0 -0
- /package/lib/node/{chunk-DCMEIPZN.mjs.map → chunk-WCTY6JTP.mjs.map} +0 -0
|
@@ -6,7 +6,7 @@ var _chunkLK6DILFKjs = require('./chunk-LK6DILFK.js');
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkEJYZ4HR3js = require('./chunk-EJYZ4HR3.js');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
@@ -35,10 +35,10 @@ function concatArrayBuffer(left, right) {
|
|
|
35
35
|
// src/interceptors/XMLHttpRequest/polyfills/EventPolyfill.ts
|
|
36
36
|
var EventPolyfill = class {
|
|
37
37
|
constructor(type, options) {
|
|
38
|
-
this.AT_TARGET = 0;
|
|
39
|
-
this.BUBBLING_PHASE = 0;
|
|
40
|
-
this.CAPTURING_PHASE = 0;
|
|
41
38
|
this.NONE = 0;
|
|
39
|
+
this.CAPTURING_PHASE = 1;
|
|
40
|
+
this.AT_TARGET = 2;
|
|
41
|
+
this.BUBBLING_PHASE = 3;
|
|
42
42
|
this.type = "";
|
|
43
43
|
this.srcElement = null;
|
|
44
44
|
this.currentTarget = null;
|
|
@@ -236,6 +236,7 @@ var XMLHttpRequestController = class {
|
|
|
236
236
|
this.method = "GET";
|
|
237
237
|
this.url = null;
|
|
238
238
|
this.events = /* @__PURE__ */ new Map();
|
|
239
|
+
this.uploadEvents = /* @__PURE__ */ new Map();
|
|
239
240
|
this.requestId = _chunkTIPR373Rjs.createRequestId.call(void 0, );
|
|
240
241
|
this.requestHeaders = new Headers();
|
|
241
242
|
this.responseBuffer = new Uint8Array();
|
|
@@ -334,6 +335,39 @@ var XMLHttpRequestController = class {
|
|
|
334
335
|
}
|
|
335
336
|
}
|
|
336
337
|
});
|
|
338
|
+
define(
|
|
339
|
+
this.request,
|
|
340
|
+
"upload",
|
|
341
|
+
createProxy(this.request.upload, {
|
|
342
|
+
setProperty: ([propertyName, nextValue], invoke) => {
|
|
343
|
+
switch (propertyName) {
|
|
344
|
+
case "onloadstart":
|
|
345
|
+
case "onprogress":
|
|
346
|
+
case "onaboart":
|
|
347
|
+
case "onerror":
|
|
348
|
+
case "onload":
|
|
349
|
+
case "ontimeout":
|
|
350
|
+
case "onloadend": {
|
|
351
|
+
const eventName = propertyName.slice(
|
|
352
|
+
2
|
|
353
|
+
);
|
|
354
|
+
this.registerUploadEvent(eventName, nextValue);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return invoke();
|
|
358
|
+
},
|
|
359
|
+
methodCall: ([methodName, args], invoke) => {
|
|
360
|
+
switch (methodName) {
|
|
361
|
+
case "addEventListener": {
|
|
362
|
+
const [eventName, listener] = args;
|
|
363
|
+
this.registerUploadEvent(eventName, listener);
|
|
364
|
+
this.logger.info("upload.addEventListener", eventName, listener);
|
|
365
|
+
return invoke();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
})
|
|
370
|
+
);
|
|
337
371
|
}
|
|
338
372
|
registerEvent(eventName, listener) {
|
|
339
373
|
const prevEvents = this.events.get(eventName) || [];
|
|
@@ -341,11 +375,39 @@ var XMLHttpRequestController = class {
|
|
|
341
375
|
this.events.set(eventName, nextEvents);
|
|
342
376
|
this.logger.info('registered event "%s"', eventName, listener);
|
|
343
377
|
}
|
|
378
|
+
registerUploadEvent(eventName, listener) {
|
|
379
|
+
const prevEvents = this.uploadEvents.get(eventName) || [];
|
|
380
|
+
const nextEvents = prevEvents.concat(listener);
|
|
381
|
+
this.uploadEvents.set(eventName, nextEvents);
|
|
382
|
+
this.logger.info('registered upload event "%s"', eventName, listener);
|
|
383
|
+
}
|
|
344
384
|
/**
|
|
345
385
|
* Responds to the current request with the given
|
|
346
386
|
* Fetch API `Response` instance.
|
|
347
387
|
*/
|
|
348
|
-
respondWith(response) {
|
|
388
|
+
async respondWith(response) {
|
|
389
|
+
if (this.requestBody != null) {
|
|
390
|
+
const totalRequestBodyLength = this.requestHeaders.has("content-length") ? Number(this.requestHeaders.get("content-length")) : await getXMLHttpRequestBodyInitLength(
|
|
391
|
+
this.requestBody,
|
|
392
|
+
this.requestHeaders
|
|
393
|
+
);
|
|
394
|
+
this.trigger("loadstart", this.request.upload, {
|
|
395
|
+
loaded: 0,
|
|
396
|
+
total: totalRequestBodyLength
|
|
397
|
+
});
|
|
398
|
+
this.trigger("progress", this.request.upload, {
|
|
399
|
+
loaded: totalRequestBodyLength,
|
|
400
|
+
total: totalRequestBodyLength
|
|
401
|
+
});
|
|
402
|
+
this.trigger("load", this.request.upload, {
|
|
403
|
+
loaded: totalRequestBodyLength,
|
|
404
|
+
total: totalRequestBodyLength
|
|
405
|
+
});
|
|
406
|
+
this.trigger("loadend", this.request.upload, {
|
|
407
|
+
loaded: totalRequestBodyLength,
|
|
408
|
+
total: totalRequestBodyLength
|
|
409
|
+
});
|
|
410
|
+
}
|
|
349
411
|
this.logger.info(
|
|
350
412
|
"responding with a mocked response: %d %s",
|
|
351
413
|
response.status,
|
|
@@ -406,14 +468,14 @@ var XMLHttpRequestController = class {
|
|
|
406
468
|
get: () => this.responseXML
|
|
407
469
|
}
|
|
408
470
|
});
|
|
409
|
-
const totalResponseBodyLength = response.headers.has("
|
|
471
|
+
const totalResponseBodyLength = response.headers.has("content-length") ? Number(response.headers.get("Content-Length")) : (
|
|
410
472
|
/**
|
|
411
473
|
* @todo Infer the response body length from the response body.
|
|
412
474
|
*/
|
|
413
475
|
void 0
|
|
414
476
|
);
|
|
415
477
|
this.logger.info("calculated response body length", totalResponseBodyLength);
|
|
416
|
-
this.trigger("loadstart", {
|
|
478
|
+
this.trigger("loadstart", this.request, {
|
|
417
479
|
loaded: 0,
|
|
418
480
|
total: totalResponseBodyLength
|
|
419
481
|
});
|
|
@@ -422,11 +484,11 @@ var XMLHttpRequestController = class {
|
|
|
422
484
|
const finalizeResponse = () => {
|
|
423
485
|
this.logger.info("finalizing the mocked response...");
|
|
424
486
|
this.setReadyState(this.request.DONE);
|
|
425
|
-
this.trigger("load", {
|
|
487
|
+
this.trigger("load", this.request, {
|
|
426
488
|
loaded: this.responseBuffer.byteLength,
|
|
427
489
|
total: totalResponseBodyLength
|
|
428
490
|
});
|
|
429
|
-
this.trigger("loadend", {
|
|
491
|
+
this.trigger("loadend", this.request, {
|
|
430
492
|
loaded: this.responseBuffer.byteLength,
|
|
431
493
|
total: totalResponseBodyLength
|
|
432
494
|
});
|
|
@@ -444,7 +506,7 @@ var XMLHttpRequestController = class {
|
|
|
444
506
|
if (value) {
|
|
445
507
|
this.logger.info("read response body chunk:", value);
|
|
446
508
|
this.responseBuffer = concatArrayBuffer(this.responseBuffer, value);
|
|
447
|
-
this.trigger("progress", {
|
|
509
|
+
this.trigger("progress", this.request, {
|
|
448
510
|
loaded: this.responseBuffer.byteLength,
|
|
449
511
|
total: totalResponseBodyLength
|
|
450
512
|
});
|
|
@@ -539,8 +601,8 @@ var XMLHttpRequestController = class {
|
|
|
539
601
|
errorWith(error) {
|
|
540
602
|
this.logger.info("responding with an error");
|
|
541
603
|
this.setReadyState(this.request.DONE);
|
|
542
|
-
this.trigger("error");
|
|
543
|
-
this.trigger("loadend");
|
|
604
|
+
this.trigger("error", this.request);
|
|
605
|
+
this.trigger("loadend", this.request);
|
|
544
606
|
}
|
|
545
607
|
/**
|
|
546
608
|
* Transitions this request's `readyState` to the given one.
|
|
@@ -559,28 +621,29 @@ var XMLHttpRequestController = class {
|
|
|
559
621
|
this.logger.info("set readyState to: %d", nextReadyState);
|
|
560
622
|
if (nextReadyState !== this.request.UNSENT) {
|
|
561
623
|
this.logger.info('triggerring "readystatechange" event...');
|
|
562
|
-
this.trigger("readystatechange");
|
|
624
|
+
this.trigger("readystatechange", this.request);
|
|
563
625
|
}
|
|
564
626
|
}
|
|
565
627
|
/**
|
|
566
628
|
* Triggers given event on the `XMLHttpRequest` instance.
|
|
567
629
|
*/
|
|
568
|
-
trigger(eventName, options) {
|
|
569
|
-
const callback =
|
|
570
|
-
const event = createEvent(
|
|
630
|
+
trigger(eventName, target, options) {
|
|
631
|
+
const callback = target[`on${eventName}`];
|
|
632
|
+
const event = createEvent(target, eventName, options);
|
|
571
633
|
this.logger.info('trigger "%s"', eventName, options || "");
|
|
572
634
|
if (typeof callback === "function") {
|
|
573
635
|
this.logger.info('found a direct "%s" callback, calling...', eventName);
|
|
574
|
-
callback.call(
|
|
636
|
+
callback.call(target, event);
|
|
575
637
|
}
|
|
576
|
-
|
|
638
|
+
const events = target instanceof XMLHttpRequestUpload ? this.uploadEvents : this.events;
|
|
639
|
+
for (const [registeredEventName, listeners] of events) {
|
|
577
640
|
if (registeredEventName === eventName) {
|
|
578
641
|
this.logger.info(
|
|
579
642
|
'found %d listener(s) for "%s" event, calling...',
|
|
580
643
|
listeners.length,
|
|
581
644
|
eventName
|
|
582
645
|
);
|
|
583
|
-
listeners.forEach((listener) => listener.call(
|
|
646
|
+
listeners.forEach((listener) => listener.call(target, event));
|
|
584
647
|
}
|
|
585
648
|
}
|
|
586
649
|
}
|
|
@@ -637,6 +700,40 @@ function define(target, property, value) {
|
|
|
637
700
|
value
|
|
638
701
|
});
|
|
639
702
|
}
|
|
703
|
+
async function getXMLHttpRequestBodyInitLength(body, headers) {
|
|
704
|
+
if (typeof body === "object" && "byteLength" in body) {
|
|
705
|
+
return body.byteLength;
|
|
706
|
+
}
|
|
707
|
+
if (body instanceof Blob) {
|
|
708
|
+
return body.size;
|
|
709
|
+
}
|
|
710
|
+
if (body instanceof FormData) {
|
|
711
|
+
const lines = [];
|
|
712
|
+
const contentType = headers.get("content-type") || "application/octet-stream";
|
|
713
|
+
for (const [name, entry] of body) {
|
|
714
|
+
lines.push(`------WebKitFormBoundary1234567890123456`);
|
|
715
|
+
lines.push(`content-type: ${contentType}`);
|
|
716
|
+
if (typeof entry === "string") {
|
|
717
|
+
lines.push(`content-disposition: form-data; name="${name}"`);
|
|
718
|
+
lines.push(``);
|
|
719
|
+
lines.push(entry);
|
|
720
|
+
} else {
|
|
721
|
+
lines.push(
|
|
722
|
+
`content-disposition: form-data; name="${name}"; filename="${entry.name}"`
|
|
723
|
+
);
|
|
724
|
+
lines.push(``);
|
|
725
|
+
lines.push(await entry.text());
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
lines.push("------WebKitFormBoundary1234567890123456--");
|
|
729
|
+
lines.push(``);
|
|
730
|
+
return lines.join("\r\n").length;
|
|
731
|
+
}
|
|
732
|
+
if (body instanceof Document) {
|
|
733
|
+
return body.documentElement.innerHTML.length;
|
|
734
|
+
}
|
|
735
|
+
return body.toString().length;
|
|
736
|
+
}
|
|
640
737
|
|
|
641
738
|
// src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts
|
|
642
739
|
function createXMLHttpRequestProxy({
|
|
@@ -666,19 +763,19 @@ function createXMLHttpRequestProxy({
|
|
|
666
763
|
logger
|
|
667
764
|
);
|
|
668
765
|
xhrRequestController.onRequest = async function({ request, requestId }) {
|
|
669
|
-
const controller = new (0,
|
|
766
|
+
const controller = new (0, _chunkEJYZ4HR3js.RequestController)(request);
|
|
670
767
|
this.logger.info("awaiting mocked response...");
|
|
671
768
|
this.logger.info(
|
|
672
769
|
'emitting the "request" event for %s listener(s)...',
|
|
673
770
|
emitter.listenerCount("request")
|
|
674
771
|
);
|
|
675
|
-
const isRequestHandled = await
|
|
772
|
+
const isRequestHandled = await _chunkEJYZ4HR3js.handleRequest.call(void 0, {
|
|
676
773
|
request,
|
|
677
774
|
requestId,
|
|
678
775
|
controller,
|
|
679
776
|
emitter,
|
|
680
|
-
onResponse: (response) => {
|
|
681
|
-
this.respondWith(response);
|
|
777
|
+
onResponse: async (response) => {
|
|
778
|
+
await this.respondWith(response);
|
|
682
779
|
},
|
|
683
780
|
onRequestError: () => {
|
|
684
781
|
this.errorWith(new TypeError("Network error"));
|
|
@@ -766,4 +863,4 @@ XMLHttpRequestInterceptor.interceptorSymbol = Symbol("xhr");
|
|
|
766
863
|
|
|
767
864
|
|
|
768
865
|
exports.XMLHttpRequestInterceptor = XMLHttpRequestInterceptor;
|
|
769
|
-
//# sourceMappingURL=chunk-
|
|
866
|
+
//# sourceMappingURL=chunk-YP3NI6UP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/interceptors/XMLHttpRequest/index.ts","../../src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts","../../src/interceptors/XMLHttpRequest/utils/concatArrayBuffer.ts","../../src/interceptors/XMLHttpRequest/polyfills/EventPolyfill.ts","../../src/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.ts","../../src/interceptors/XMLHttpRequest/utils/createEvent.ts","../../src/utils/findPropertySource.ts","../../src/utils/createProxy.ts","../../src/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.ts","../../src/utils/parseJson.ts","../../src/interceptors/XMLHttpRequest/utils/createResponse.ts","../../src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts"],"names":["invariant","next"],"mappings":"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","sourcesContent":["import { invariant } from 'outvariant'\nimport { Emitter } from 'strict-event-emitter'\nimport { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary'\nimport { Interceptor } from '../../Interceptor'\nimport { createXMLHttpRequestProxy } from './XMLHttpRequestProxy'\n\nexport type XMLHttpRequestEmitter = Emitter<HttpRequestEventMap>\n\nexport class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap> {\n static interceptorSymbol = Symbol('xhr')\n\n constructor() {\n super(XMLHttpRequestInterceptor.interceptorSymbol)\n }\n\n protected checkEnvironment() {\n return typeof globalThis.XMLHttpRequest !== 'undefined'\n }\n\n protected setup() {\n const logger = this.logger.extend('setup')\n\n logger.info('patching \"XMLHttpRequest\" module...')\n\n const PureXMLHttpRequest = globalThis.XMLHttpRequest\n\n invariant(\n !(PureXMLHttpRequest as any)[IS_PATCHED_MODULE],\n 'Failed to patch the \"XMLHttpRequest\" module: already patched.'\n )\n\n globalThis.XMLHttpRequest = createXMLHttpRequestProxy({\n emitter: this.emitter,\n logger: this.logger,\n })\n\n logger.info(\n 'native \"XMLHttpRequest\" module patched!',\n globalThis.XMLHttpRequest.name\n )\n\n Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {\n enumerable: true,\n configurable: true,\n value: true,\n })\n\n this.subscriptions.push(() => {\n Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {\n value: undefined,\n })\n\n globalThis.XMLHttpRequest = PureXMLHttpRequest\n logger.info(\n 'native \"XMLHttpRequest\" module restored!',\n globalThis.XMLHttpRequest.name\n )\n })\n }\n}\n","import { invariant } from 'outvariant'\nimport { isNodeProcess } from 'is-node-process'\nimport type { Logger } from '@open-draft/logger'\nimport { concatArrayBuffer } from './utils/concatArrayBuffer'\nimport { createEvent } from './utils/createEvent'\nimport {\n decodeBuffer,\n encodeBuffer,\n toArrayBuffer,\n} from '../../utils/bufferUtils'\nimport { createProxy } from '../../utils/createProxy'\nimport { isDomParserSupportedType } from './utils/isDomParserSupportedType'\nimport { parseJson } from '../../utils/parseJson'\nimport { createResponse } from './utils/createResponse'\nimport { INTERNAL_REQUEST_ID_HEADER_NAME } from '../../Interceptor'\nimport { createRequestId } from '../../createRequestId'\n\nconst IS_MOCKED_RESPONSE = Symbol('isMockedResponse')\nconst IS_NODE = isNodeProcess()\n\n/**\n * An `XMLHttpRequest` instance controller that allows us\n * to handle any given request instance (e.g. responding to it).\n */\nexport class XMLHttpRequestController {\n public request: XMLHttpRequest\n public requestId: string\n public onRequest?: (\n this: XMLHttpRequestController,\n args: {\n request: Request\n requestId: string\n }\n ) => Promise<void>\n public onResponse?: (\n this: XMLHttpRequestController,\n args: {\n response: Response\n isMockedResponse: boolean\n request: Request\n requestId: string\n }\n ) => void\n\n private method: string = 'GET'\n private url: URL = null as any\n private requestHeaders: Headers\n private requestBody?: XMLHttpRequestBodyInit | Document | null\n private responseBuffer: Uint8Array\n private events: Map<keyof XMLHttpRequestEventTargetEventMap, Array<Function>>\n private uploadEvents: Map<\n keyof XMLHttpRequestEventTargetEventMap,\n Array<Function>\n >\n\n constructor(readonly initialRequest: XMLHttpRequest, public logger: Logger) {\n this.events = new Map()\n this.uploadEvents = new Map()\n this.requestId = createRequestId()\n this.requestHeaders = new Headers()\n this.responseBuffer = new Uint8Array()\n\n this.request = createProxy(initialRequest, {\n setProperty: ([propertyName, nextValue], invoke) => {\n switch (propertyName) {\n case 'ontimeout': {\n const eventName = propertyName.slice(\n 2\n ) as keyof XMLHttpRequestEventTargetEventMap\n\n /**\n * @note Proxy callbacks to event listeners because JSDOM has trouble\n * translating these properties to callbacks. It seemed to be operating\n * on events exclusively.\n */\n this.request.addEventListener(eventName, nextValue as any)\n\n return invoke()\n }\n\n default: {\n return invoke()\n }\n }\n },\n methodCall: ([methodName, args], invoke) => {\n switch (methodName) {\n case 'open': {\n const [method, url] = args as [string, string | undefined]\n\n if (typeof url === 'undefined') {\n this.method = 'GET'\n this.url = toAbsoluteUrl(method)\n } else {\n this.method = method\n this.url = toAbsoluteUrl(url)\n }\n\n this.logger = this.logger.extend(`${this.method} ${this.url.href}`)\n this.logger.info('open', this.method, this.url.href)\n\n return invoke()\n }\n\n case 'addEventListener': {\n const [eventName, listener] = args as [\n keyof XMLHttpRequestEventTargetEventMap,\n Function\n ]\n\n this.registerEvent(eventName, listener)\n this.logger.info('addEventListener', eventName, listener)\n\n return invoke()\n }\n\n case 'setRequestHeader': {\n const [name, value] = args as [string, string]\n this.requestHeaders.set(name, value)\n\n this.logger.info('setRequestHeader', name, value)\n\n return invoke()\n }\n\n case 'send': {\n const [body] = args as [\n body?: XMLHttpRequestBodyInit | Document | null\n ]\n\n if (body != null) {\n this.requestBody =\n typeof body === 'string' ? encodeBuffer(body) : body\n }\n\n this.request.addEventListener('load', () => {\n if (typeof this.onResponse !== 'undefined') {\n // Create a Fetch API Response representation of whichever\n // response this XMLHttpRequest received. Note those may\n // be either a mocked and the original response.\n const fetchResponse = createResponse(\n this.request,\n /**\n * The `response` property is the right way to read\n * the ambiguous response body, as the request's \"responseType\" may differ.\n * @see https://xhr.spec.whatwg.org/#the-response-attribute\n */\n this.request.response\n )\n\n // Notify the consumer about the response.\n this.onResponse.call(this, {\n response: fetchResponse,\n isMockedResponse: IS_MOCKED_RESPONSE in this.request,\n request: fetchRequest,\n requestId: this.requestId!,\n })\n }\n })\n\n // Delegate request handling to the consumer.\n const fetchRequest = this.toFetchApiRequest()\n const onceRequestSettled =\n this.onRequest?.call(this, {\n request: fetchRequest,\n requestId: this.requestId!,\n }) || Promise.resolve()\n\n onceRequestSettled.finally(() => {\n // If the consumer didn't handle the request perform it as-is.\n // Note that the request may not yet be DONE and may, in fact,\n // be LOADING while the \"respondWith\" method does its magic.\n if (this.request.readyState < this.request.LOADING) {\n this.logger.info(\n 'request callback settled but request has not been handled (readystate %d), performing as-is...',\n this.request.readyState\n )\n\n /**\n * @note Set the intercepted request ID on the original request in Node.js\n * so that if it triggers any other interceptors, they don't attempt\n * to process it once again.\n *\n * For instance, XMLHttpRequest is often implemented via \"http.ClientRequest\"\n * and we don't want for both XHR and ClientRequest interceptors to\n * handle the same request at the same time (e.g. emit the \"response\" event twice).\n */\n if (IS_NODE) {\n this.request.setRequestHeader(\n INTERNAL_REQUEST_ID_HEADER_NAME,\n this.requestId!\n )\n }\n\n return invoke()\n }\n })\n\n break\n }\n\n default: {\n return invoke()\n }\n }\n },\n })\n\n /**\n * Proxy the `.upload` property to gather the event listeners/callbacks.\n */\n define(\n this.request,\n 'upload',\n createProxy(this.request.upload, {\n setProperty: ([propertyName, nextValue], invoke) => {\n switch (propertyName) {\n case 'onloadstart':\n case 'onprogress':\n case 'onaboart':\n case 'onerror':\n case 'onload':\n case 'ontimeout':\n case 'onloadend': {\n const eventName = propertyName.slice(\n 2\n ) as keyof XMLHttpRequestEventTargetEventMap\n\n this.registerUploadEvent(eventName, nextValue as Function)\n }\n }\n\n return invoke()\n },\n methodCall: ([methodName, args], invoke) => {\n switch (methodName) {\n case 'addEventListener': {\n const [eventName, listener] = args as [\n keyof XMLHttpRequestEventTargetEventMap,\n Function\n ]\n this.registerUploadEvent(eventName, listener)\n this.logger.info('upload.addEventListener', eventName, listener)\n\n return invoke()\n }\n }\n },\n })\n )\n }\n\n private registerEvent(\n eventName: keyof XMLHttpRequestEventTargetEventMap,\n listener: Function\n ): void {\n const prevEvents = this.events.get(eventName) || []\n const nextEvents = prevEvents.concat(listener)\n this.events.set(eventName, nextEvents)\n\n this.logger.info('registered event \"%s\"', eventName, listener)\n }\n\n private registerUploadEvent(\n eventName: keyof XMLHttpRequestEventTargetEventMap,\n listener: Function\n ): void {\n const prevEvents = this.uploadEvents.get(eventName) || []\n const nextEvents = prevEvents.concat(listener)\n this.uploadEvents.set(eventName, nextEvents)\n\n this.logger.info('registered upload event \"%s\"', eventName, listener)\n }\n\n /**\n * Responds to the current request with the given\n * Fetch API `Response` instance.\n */\n public async respondWith(response: Response): Promise<void> {\n /**\n * Dispatch request upload events for requests with a body.\n * @see https://github.com/mswjs/interceptors/issues/573\n */\n if (this.requestBody != null) {\n const totalRequestBodyLength = this.requestHeaders.has('content-length')\n ? Number(this.requestHeaders.get('content-length'))\n : await getXMLHttpRequestBodyInitLength(\n this.requestBody,\n this.requestHeaders\n )\n\n this.trigger('loadstart', this.request.upload, {\n loaded: 0,\n total: totalRequestBodyLength,\n })\n this.trigger('progress', this.request.upload, {\n loaded: totalRequestBodyLength,\n total: totalRequestBodyLength,\n })\n this.trigger('load', this.request.upload, {\n loaded: totalRequestBodyLength,\n total: totalRequestBodyLength,\n })\n this.trigger('loadend', this.request.upload, {\n loaded: totalRequestBodyLength,\n total: totalRequestBodyLength,\n })\n }\n\n this.logger.info(\n 'responding with a mocked response: %d %s',\n response.status,\n response.statusText\n )\n\n /**\n * @note Since `XMLHttpRequestController` delegates the handling of the responses\n * to the \"load\" event listener that doesn't distinguish between the mocked and original\n * responses, mark the request that had a mocked response with a corresponding symbol.\n */\n define(this.request, IS_MOCKED_RESPONSE, true)\n\n define(this.request, 'status', response.status)\n define(this.request, 'statusText', response.statusText)\n define(this.request, 'responseURL', this.url.href)\n\n this.request.getResponseHeader = new Proxy(this.request.getResponseHeader, {\n apply: (_, __, args: [name: string]) => {\n this.logger.info('getResponseHeader', args[0])\n\n if (this.request.readyState < this.request.HEADERS_RECEIVED) {\n this.logger.info('headers not received yet, returning null')\n\n // Headers not received yet, nothing to return.\n return null\n }\n\n const headerValue = response.headers.get(args[0])\n this.logger.info(\n 'resolved response header \"%s\" to',\n args[0],\n headerValue\n )\n\n return headerValue\n },\n })\n\n this.request.getAllResponseHeaders = new Proxy(\n this.request.getAllResponseHeaders,\n {\n apply: () => {\n this.logger.info('getAllResponseHeaders')\n\n if (this.request.readyState < this.request.HEADERS_RECEIVED) {\n this.logger.info('headers not received yet, returning empty string')\n\n // Headers not received yet, nothing to return.\n return ''\n }\n\n const headersList = Array.from(response.headers.entries())\n const allHeaders = headersList\n .map(([headerName, headerValue]) => {\n return `${headerName}: ${headerValue}`\n })\n .join('\\r\\n')\n\n this.logger.info('resolved all response headers to', allHeaders)\n\n return allHeaders\n },\n }\n )\n\n // Update the response getters to resolve against the mocked response.\n Object.defineProperties(this.request, {\n response: {\n enumerable: true,\n configurable: false,\n get: () => this.response,\n },\n responseText: {\n enumerable: true,\n configurable: false,\n get: () => this.responseText,\n },\n responseXML: {\n enumerable: true,\n configurable: false,\n get: () => this.responseXML,\n },\n })\n\n const totalResponseBodyLength = response.headers.has('content-length')\n ? Number(response.headers.get('Content-Length'))\n : /**\n * @todo Infer the response body length from the response body.\n */\n undefined\n\n this.logger.info('calculated response body length', totalResponseBodyLength)\n\n this.trigger('loadstart', this.request, {\n loaded: 0,\n total: totalResponseBodyLength,\n })\n\n this.setReadyState(this.request.HEADERS_RECEIVED)\n this.setReadyState(this.request.LOADING)\n\n const finalizeResponse = () => {\n this.logger.info('finalizing the mocked response...')\n\n this.setReadyState(this.request.DONE)\n\n this.trigger('load', this.request, {\n loaded: this.responseBuffer.byteLength,\n total: totalResponseBodyLength,\n })\n\n this.trigger('loadend', this.request, {\n loaded: this.responseBuffer.byteLength,\n total: totalResponseBodyLength,\n })\n }\n\n if (response.body) {\n this.logger.info('mocked response has body, streaming...')\n\n const reader = response.body.getReader()\n\n const readNextResponseBodyChunk = async () => {\n const { value, done } = await reader.read()\n\n if (done) {\n this.logger.info('response body stream done!')\n finalizeResponse()\n return\n }\n\n if (value) {\n this.logger.info('read response body chunk:', value)\n this.responseBuffer = concatArrayBuffer(this.responseBuffer, value)\n\n this.trigger('progress', this.request, {\n loaded: this.responseBuffer.byteLength,\n total: totalResponseBodyLength,\n })\n }\n\n readNextResponseBodyChunk()\n }\n\n readNextResponseBodyChunk()\n } else {\n finalizeResponse()\n }\n }\n\n private responseBufferToText(): string {\n return decodeBuffer(this.responseBuffer)\n }\n\n get response(): unknown {\n this.logger.info(\n 'getResponse (responseType: %s)',\n this.request.responseType\n )\n\n if (this.request.readyState !== this.request.DONE) {\n return null\n }\n\n switch (this.request.responseType) {\n case 'json': {\n const responseJson = parseJson(this.responseBufferToText())\n this.logger.info('resolved response JSON', responseJson)\n\n return responseJson\n }\n\n case 'arraybuffer': {\n const arrayBuffer = toArrayBuffer(this.responseBuffer)\n this.logger.info('resolved response ArrayBuffer', arrayBuffer)\n\n return arrayBuffer\n }\n\n case 'blob': {\n const mimeType =\n this.request.getResponseHeader('Content-Type') || 'text/plain'\n const responseBlob = new Blob([this.responseBufferToText()], {\n type: mimeType,\n })\n\n this.logger.info(\n 'resolved response Blob (mime type: %s)',\n responseBlob,\n mimeType\n )\n\n return responseBlob\n }\n\n default: {\n const responseText = this.responseBufferToText()\n this.logger.info(\n 'resolving \"%s\" response type as text',\n this.request.responseType,\n responseText\n )\n\n return responseText\n }\n }\n }\n\n get responseText(): string {\n /**\n * Throw when trying to read the response body as text when the\n * \"responseType\" doesn't expect text. This just respects the spec better.\n * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n */\n invariant(\n this.request.responseType === '' || this.request.responseType === 'text',\n 'InvalidStateError: The object is in invalid state.'\n )\n\n if (\n this.request.readyState !== this.request.LOADING &&\n this.request.readyState !== this.request.DONE\n ) {\n return ''\n }\n\n const responseText = this.responseBufferToText()\n this.logger.info('getResponseText: \"%s\"', responseText)\n\n return responseText\n }\n\n get responseXML(): Document | null {\n invariant(\n this.request.responseType === '' ||\n this.request.responseType === 'document',\n 'InvalidStateError: The object is in invalid state.'\n )\n\n if (this.request.readyState !== this.request.DONE) {\n return null\n }\n\n const contentType = this.request.getResponseHeader('Content-Type') || ''\n\n if (typeof DOMParser === 'undefined') {\n console.warn(\n '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.'\n )\n return null\n }\n\n if (isDomParserSupportedType(contentType)) {\n return new DOMParser().parseFromString(\n this.responseBufferToText(),\n contentType\n )\n }\n\n return null\n }\n\n public errorWith(error?: Error): void {\n this.logger.info('responding with an error')\n\n this.setReadyState(this.request.DONE)\n this.trigger('error', this.request)\n this.trigger('loadend', this.request)\n }\n\n /**\n * Transitions this request's `readyState` to the given one.\n */\n private setReadyState(nextReadyState: number): void {\n this.logger.info(\n 'setReadyState: %d -> %d',\n this.request.readyState,\n nextReadyState\n )\n\n if (this.request.readyState === nextReadyState) {\n this.logger.info('ready state identical, skipping transition...')\n return\n }\n\n define(this.request, 'readyState', nextReadyState)\n\n this.logger.info('set readyState to: %d', nextReadyState)\n\n if (nextReadyState !== this.request.UNSENT) {\n this.logger.info('triggerring \"readystatechange\" event...')\n\n this.trigger('readystatechange', this.request)\n }\n }\n\n /**\n * Triggers given event on the `XMLHttpRequest` instance.\n */\n private trigger<\n EventName extends keyof (XMLHttpRequestEventTargetEventMap & {\n readystatechange: ProgressEvent<XMLHttpRequestEventTarget>\n })\n >(\n eventName: EventName,\n target: XMLHttpRequest | XMLHttpRequestUpload,\n options?: ProgressEventInit\n ): void {\n const callback = (target as XMLHttpRequest)[`on${eventName}`]\n const event = createEvent(target, eventName, options)\n\n this.logger.info('trigger \"%s\"', eventName, options || '')\n\n // Invoke direct callbacks.\n if (typeof callback === 'function') {\n this.logger.info('found a direct \"%s\" callback, calling...', eventName)\n callback.call(target as XMLHttpRequest, event)\n }\n\n // Invoke event listeners.\n const events =\n target instanceof XMLHttpRequestUpload ? this.uploadEvents : this.events\n\n for (const [registeredEventName, listeners] of events) {\n if (registeredEventName === eventName) {\n this.logger.info(\n 'found %d listener(s) for \"%s\" event, calling...',\n listeners.length,\n eventName\n )\n\n listeners.forEach((listener) => listener.call(target, event))\n }\n }\n }\n\n /**\n * Converts this `XMLHttpRequest` instance into a Fetch API `Request` instance.\n */\n private toFetchApiRequest(): Request {\n this.logger.info('converting request to a Fetch API Request...')\n\n const fetchRequest = new Request(this.url.href, {\n method: this.method,\n headers: this.requestHeaders,\n /**\n * @see https://xhr.spec.whatwg.org/#cross-origin-credentials\n */\n credentials: this.request.withCredentials ? 'include' : 'same-origin',\n body: ['GET', 'HEAD'].includes(this.method.toUpperCase())\n ? null\n : (this.requestBody as BodyInit),\n })\n\n const proxyHeaders = createProxy(fetchRequest.headers, {\n methodCall: ([methodName, args], invoke) => {\n // Forward the latest state of the internal request headers\n // because the interceptor might have modified them\n // without responding to the request.\n switch (methodName) {\n case 'append':\n case 'set': {\n const [headerName, headerValue] = args as [string, string]\n this.request.setRequestHeader(headerName, headerValue)\n break\n }\n\n case 'delete': {\n const [headerName] = args as [string]\n console.warn(\n `XMLHttpRequest: Cannot remove a \"${headerName}\" header from the Fetch API representation of the \"${fetchRequest.method} ${fetchRequest.url}\" request. XMLHttpRequest headers cannot be removed.`\n )\n break\n }\n }\n\n return invoke()\n },\n })\n define(fetchRequest, 'headers', proxyHeaders)\n\n this.logger.info('converted request to a Fetch API Request!', fetchRequest)\n\n return fetchRequest\n }\n}\n\nfunction toAbsoluteUrl(url: string | URL): URL {\n /**\n * @note XMLHttpRequest interceptor may run in environments\n * that implement XMLHttpRequest but don't implement \"location\"\n * (for example, React Native). If that's the case, return the\n * input URL as-is (nothing to be relative to).\n * @see https://github.com/mswjs/msw/issues/1777\n */\n if (typeof location === 'undefined') {\n return new URL(url)\n }\n\n return new URL(url.toString(), location.href)\n}\n\nfunction define(\n target: object,\n property: string | symbol,\n value: unknown\n): void {\n Reflect.defineProperty(target, property, {\n // Ensure writable properties to allow redefining readonly properties.\n writable: true,\n enumerable: true,\n value,\n })\n}\n\nasync function getXMLHttpRequestBodyInitLength(\n body: XMLHttpRequestBodyInit | Document,\n headers: Headers\n): Promise<number> {\n if (typeof body === 'object' && 'byteLength' in body) {\n return body.byteLength\n }\n\n if (body instanceof Blob) {\n return body.size\n }\n\n if (body instanceof FormData) {\n const lines: Array<string> = []\n const contentType =\n headers.get('content-type') || 'application/octet-stream'\n\n for (const [name, entry] of body) {\n lines.push(`------WebKitFormBoundary1234567890123456`)\n lines.push(`content-type: ${contentType}`)\n\n if (typeof entry === 'string') {\n lines.push(`content-disposition: form-data; name=\"${name}\"`)\n lines.push(``)\n lines.push(entry)\n } else {\n lines.push(\n `content-disposition: form-data; name=\"${name}\"; filename=\"${entry.name}\"`\n )\n lines.push(``)\n lines.push(await entry.text())\n }\n }\n\n lines.push('------WebKitFormBoundary1234567890123456--')\n lines.push(``)\n\n return lines.join('\\r\\n').length\n }\n\n if (body instanceof Document) {\n return body.documentElement.innerHTML.length\n }\n\n return body.toString().length\n}\n","/**\n * Concatenate two `Uint8Array` buffers.\n */\nexport function concatArrayBuffer(\n left: Uint8Array,\n right: Uint8Array\n): Uint8Array {\n const result = new Uint8Array(left.byteLength + right.byteLength)\n result.set(left, 0)\n result.set(right, left.byteLength)\n return result\n}\n","export class EventPolyfill implements Event {\n readonly NONE = 0\n readonly CAPTURING_PHASE = 1\n readonly AT_TARGET = 2\n readonly BUBBLING_PHASE = 3\n\n public type: string = ''\n public srcElement: EventTarget | null = null\n public target: EventTarget | null\n public currentTarget: EventTarget | null = null\n public eventPhase: number = 0\n public timeStamp: number\n public isTrusted: boolean = true\n public composed: boolean = false\n public cancelable: boolean = true\n public defaultPrevented: boolean = false\n public bubbles: boolean = true\n public lengthComputable: boolean = true\n public loaded: number = 0\n public total: number = 0\n\n cancelBubble: boolean = false\n returnValue: boolean = true\n\n constructor(\n type: string,\n options?: { target: EventTarget; currentTarget: EventTarget }\n ) {\n this.type = type\n this.target = options?.target || null\n this.currentTarget = options?.currentTarget || null\n this.timeStamp = Date.now()\n }\n\n public composedPath(): EventTarget[] {\n return []\n }\n\n public initEvent(type: string, bubbles?: boolean, cancelable?: boolean) {\n this.type = type\n this.bubbles = !!bubbles\n this.cancelable = !!cancelable\n }\n\n public preventDefault() {\n this.defaultPrevented = true\n }\n\n public stopPropagation() {}\n public stopImmediatePropagation() {}\n}\n","import { EventPolyfill } from './EventPolyfill'\n\nexport class ProgressEventPolyfill extends EventPolyfill {\n readonly lengthComputable: boolean\n readonly composed: boolean\n readonly loaded: number\n readonly total: number\n\n constructor(type: string, init?: ProgressEventInit) {\n super(type)\n\n this.lengthComputable = init?.lengthComputable || false\n this.composed = init?.composed || false\n this.loaded = init?.loaded || 0\n this.total = init?.total || 0\n }\n}\n","import { EventPolyfill } from '../polyfills/EventPolyfill'\nimport { ProgressEventPolyfill } from '../polyfills/ProgressEventPolyfill'\n\nconst SUPPORTS_PROGRESS_EVENT = typeof ProgressEvent !== 'undefined'\n\nexport function createEvent(\n target: XMLHttpRequest | XMLHttpRequestUpload,\n type: string,\n init?: ProgressEventInit\n): EventPolyfill {\n const progressEvents = [\n 'error',\n 'progress',\n 'loadstart',\n 'loadend',\n 'load',\n 'timeout',\n 'abort',\n ]\n\n /**\n * `ProgressEvent` is not supported in React Native.\n * @see https://github.com/mswjs/interceptors/issues/40\n */\n const ProgressEventClass = SUPPORTS_PROGRESS_EVENT\n ? ProgressEvent\n : ProgressEventPolyfill\n\n const event = progressEvents.includes(type)\n ? new ProgressEventClass(type, {\n lengthComputable: true,\n loaded: init?.loaded || 0,\n total: init?.total || 0,\n })\n : new EventPolyfill(type, {\n target,\n currentTarget: target,\n })\n\n return event\n}\n","/**\n * Returns the source object of the given property on the target object\n * (the target itself, any parent in its prototype, or null).\n */\nexport function findPropertySource(\n target: object,\n propertyName: string | symbol\n): object | null {\n if (!(propertyName in target)) {\n return null\n }\n\n const hasProperty = Object.prototype.hasOwnProperty.call(target, propertyName)\n if (hasProperty) {\n return target\n }\n\n const prototype = Reflect.getPrototypeOf(target)\n return prototype ? findPropertySource(prototype, propertyName) : null\n}\n","import { findPropertySource } from './findPropertySource'\n\nexport interface ProxyOptions<Target extends Record<string, any>> {\n constructorCall?(args: Array<unknown>, next: NextFunction<Target>): Target\n\n methodCall?<F extends keyof Target>(\n this: Target,\n data: [methodName: F, args: Array<unknown>],\n next: NextFunction<void>\n ): void\n\n setProperty?(\n data: [propertyName: string | symbol, nextValue: unknown],\n next: NextFunction<boolean>\n ): boolean\n\n getProperty?(\n data: [propertyName: string | symbol, receiver: Target],\n next: NextFunction<void>\n ): void\n}\n\nexport type NextFunction<ReturnType> = () => ReturnType\n\nexport function createProxy<Target extends object>(\n target: Target,\n options: ProxyOptions<Target>\n): Target {\n const proxy = new Proxy(target, optionsToProxyHandler(options))\n\n return proxy\n}\n\nfunction optionsToProxyHandler<T extends Record<string, any>>(\n options: ProxyOptions<T>\n): ProxyHandler<T> {\n const { constructorCall, methodCall, getProperty, setProperty } = options\n const handler: ProxyHandler<T> = {}\n\n if (typeof constructorCall !== 'undefined') {\n handler.construct = function (target, args, newTarget) {\n const next = Reflect.construct.bind(null, target as any, args, newTarget)\n return constructorCall.call(newTarget, args, next)\n }\n }\n\n handler.set = function (target, propertyName, nextValue) {\n const next = () => {\n const propertySource = findPropertySource(target, propertyName) || target\n const ownDescriptors = Reflect.getOwnPropertyDescriptor(\n propertySource,\n propertyName\n )\n\n // Respect any custom setters present for this property.\n if (typeof ownDescriptors?.set !== 'undefined') {\n ownDescriptors.set.apply(target, [nextValue])\n return true\n }\n\n // Otherwise, set the property on the source.\n return Reflect.defineProperty(propertySource, propertyName, {\n writable: true,\n enumerable: true,\n configurable: true,\n value: nextValue,\n })\n }\n\n if (typeof setProperty !== 'undefined') {\n return setProperty.call(target, [propertyName, nextValue], next)\n }\n\n return next()\n }\n\n handler.get = function (target, propertyName, receiver) {\n /**\n * @note Using `Reflect.get()` here causes \"TypeError: Illegal invocation\".\n */\n const next = () => target[propertyName as any]\n\n const value =\n typeof getProperty !== 'undefined'\n ? getProperty.call(target, [propertyName, receiver], next)\n : next()\n\n if (typeof value === 'function') {\n return (...args: Array<any>) => {\n const next = value.bind(target, ...args)\n\n if (typeof methodCall !== 'undefined') {\n return methodCall.call(target, [propertyName as any, args], next)\n }\n\n return next()\n }\n }\n\n return value\n }\n\n return handler\n}\n","export function isDomParserSupportedType(\n type: string\n): type is DOMParserSupportedType {\n const supportedTypes: Array<DOMParserSupportedType> = [\n 'application/xhtml+xml',\n 'application/xml',\n 'image/svg+xml',\n 'text/html',\n 'text/xml',\n ]\n return supportedTypes.some((supportedType) => {\n return type.startsWith(supportedType)\n })\n}\n","/**\n * Parses a given string into JSON.\n * Gracefully handles invalid JSON by returning `null`.\n */\nexport function parseJson(data: string): Record<string, unknown> | null {\n try {\n const json = JSON.parse(data)\n return json\n } catch (_) {\n return null\n }\n}\n","import { isResponseWithoutBody } from '../../../utils/responseUtils'\n\n/**\n * Creates a Fetch API `Response` instance from the given\n * `XMLHttpRequest` instance and a response body.\n */\nexport function createResponse(\n request: XMLHttpRequest,\n body: BodyInit | null\n): Response {\n /**\n * Handle XMLHttpRequest responses that must have null as the\n * response body when represented using Fetch API Response.\n * XMLHttpRequest response will always have an empty string\n * as the \"request.response\" in those cases, resulting in an error\n * when constructing a Response instance.\n * @see https://github.com/mswjs/interceptors/issues/379\n */\n const responseBodyOrNull = isResponseWithoutBody(request.status) ? null : body\n\n return new Response(responseBodyOrNull, {\n status: request.status,\n statusText: request.statusText,\n headers: createHeadersFromXMLHttpReqestHeaders(\n request.getAllResponseHeaders()\n ),\n })\n}\n\nfunction createHeadersFromXMLHttpReqestHeaders(headersString: string): Headers {\n const headers = new Headers()\n\n const lines = headersString.split(/[\\r\\n]+/)\n for (const line of lines) {\n if (line.trim() === '') {\n continue\n }\n\n const [name, ...parts] = line.split(': ')\n const value = parts.join(': ')\n\n headers.append(name, value)\n }\n\n return headers\n}\n","import type { Logger } from '@open-draft/logger'\nimport { XMLHttpRequestEmitter } from '.'\nimport { RequestController } from '../../RequestController'\nimport { XMLHttpRequestController } from './XMLHttpRequestController'\nimport { handleRequest } from '../../utils/handleRequest'\n\nexport interface XMLHttpRequestProxyOptions {\n emitter: XMLHttpRequestEmitter\n logger: Logger\n}\n\n/**\n * Create a proxied `XMLHttpRequest` class.\n * The proxied class establishes spies on certain methods,\n * allowing us to intercept requests and respond to them.\n */\nexport function createXMLHttpRequestProxy({\n emitter,\n logger,\n}: XMLHttpRequestProxyOptions) {\n const XMLHttpRequestProxy = new Proxy(globalThis.XMLHttpRequest, {\n construct(target, args, newTarget) {\n logger.info('constructed new XMLHttpRequest')\n\n const originalRequest = Reflect.construct(\n target,\n args,\n newTarget\n ) as XMLHttpRequest\n\n /**\n * @note Forward prototype descriptors onto the proxied object.\n * XMLHttpRequest is implemented in JSDOM in a way that assigns\n * a bunch of descriptors, like \"set responseType()\" on the prototype.\n * With this propagation, we make sure that those descriptors trigger\n * when the user operates with the proxied request instance.\n */\n const prototypeDescriptors = Object.getOwnPropertyDescriptors(\n target.prototype\n )\n for (const propertyName in prototypeDescriptors) {\n Reflect.defineProperty(\n originalRequest,\n propertyName,\n prototypeDescriptors[propertyName]\n )\n }\n\n const xhrRequestController = new XMLHttpRequestController(\n originalRequest,\n logger\n )\n\n xhrRequestController.onRequest = async function ({ request, requestId }) {\n const controller = new RequestController(request)\n\n this.logger.info('awaiting mocked response...')\n\n this.logger.info(\n 'emitting the \"request\" event for %s listener(s)...',\n emitter.listenerCount('request')\n )\n\n const isRequestHandled = await handleRequest({\n request,\n requestId,\n controller,\n emitter,\n onResponse: async (response) => {\n await this.respondWith(response)\n },\n onRequestError: () => {\n this.errorWith(new TypeError('Network error'))\n },\n onError: (error) => {\n this.logger.info('request errored!', { error })\n\n if (error instanceof Error) {\n this.errorWith(error)\n }\n },\n })\n\n if (!isRequestHandled) {\n this.logger.info(\n 'no mocked response received, performing request as-is...'\n )\n }\n }\n\n xhrRequestController.onResponse = async function ({\n response,\n isMockedResponse,\n request,\n requestId,\n }) {\n this.logger.info(\n 'emitting the \"response\" event for %s listener(s)...',\n emitter.listenerCount('response')\n )\n\n emitter.emit('response', {\n response,\n isMockedResponse,\n request,\n requestId,\n })\n }\n\n // Return the proxied request from the controller\n // so that the controller can react to the consumer's interactions\n // with this request (opening/sending/etc).\n return xhrRequestController.request\n },\n })\n\n return XMLHttpRequestProxy\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkYP3NI6UPjs = require('../../chunk-YP3NI6UP.js');
|
|
4
4
|
require('../../chunk-LK6DILFK.js');
|
|
5
|
-
require('../../chunk-
|
|
5
|
+
require('../../chunk-EJYZ4HR3.js');
|
|
6
6
|
require('../../chunk-FXSPMSSQ.js');
|
|
7
7
|
require('../../chunk-TIPR373R.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.XMLHttpRequestInterceptor =
|
|
10
|
+
exports.XMLHttpRequestInterceptor = _chunkYP3NI6UPjs.XMLHttpRequestInterceptor;
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
XMLHttpRequestInterceptor
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-7BTAMQ4I.mjs";
|
|
4
4
|
import "../../chunk-6HYIRFX2.mjs";
|
|
5
|
-
import "../../chunk-
|
|
5
|
+
import "../../chunk-73X2CAEH.mjs";
|
|
6
6
|
import "../../chunk-GGUENBDN.mjs";
|
|
7
7
|
import "../../chunk-QED3Q6Z2.mjs";
|
|
8
8
|
export {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../../chunk-
|
|
3
|
+
var _chunkTPZUQHHYjs = require('../../chunk-TPZUQHHY.js');
|
|
4
|
+
require('../../chunk-EJYZ4HR3.js');
|
|
5
5
|
require('../../chunk-FXSPMSSQ.js');
|
|
6
6
|
require('../../chunk-TIPR373R.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.FetchInterceptor =
|
|
9
|
+
exports.FetchInterceptor = _chunkTPZUQHHYjs.FetchInterceptor;
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkYP3NI6UPjs = require('../chunk-YP3NI6UP.js');
|
|
4
4
|
require('../chunk-LK6DILFK.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
8
|
-
require('../chunk-
|
|
7
|
+
var _chunkTPZUQHHYjs = require('../chunk-TPZUQHHY.js');
|
|
8
|
+
require('../chunk-EJYZ4HR3.js');
|
|
9
9
|
require('../chunk-FXSPMSSQ.js');
|
|
10
10
|
require('../chunk-TIPR373R.js');
|
|
11
11
|
|
|
12
12
|
// src/presets/browser.ts
|
|
13
13
|
var browser_default = [
|
|
14
|
-
new (0,
|
|
15
|
-
new (0,
|
|
14
|
+
new (0, _chunkTPZUQHHYjs.FetchInterceptor)(),
|
|
15
|
+
new (0, _chunkYP3NI6UPjs.XMLHttpRequestInterceptor)()
|
|
16
16
|
];
|
|
17
17
|
|
|
18
18
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
XMLHttpRequestInterceptor
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-7BTAMQ4I.mjs";
|
|
4
4
|
import "../chunk-6HYIRFX2.mjs";
|
|
5
5
|
import {
|
|
6
6
|
FetchInterceptor
|
|
7
|
-
} from "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
} from "../chunk-W7UG7MBM.mjs";
|
|
8
|
+
import "../chunk-73X2CAEH.mjs";
|
|
9
9
|
import "../chunk-GGUENBDN.mjs";
|
|
10
10
|
import "../chunk-QED3Q6Z2.mjs";
|
|
11
11
|
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
var _chunk42632LKHjs = require('./chunk-42632LKH.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkCQAXV6QMjs = require('./chunk-CQAXV6QM.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkMFGG7XIPjs = require('./chunk-MFGG7XIP.js');
|
|
10
10
|
require('./chunk-LK6DILFK.js');
|
|
11
11
|
require('./chunk-IDEEMJ3F.js');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkTQD7SQGPjs = require('./chunk-TQD7SQGP.js');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
var _chunkYGM3BCJUjs = require('./chunk-YGM3BCJU.js');
|
|
@@ -23,8 +23,8 @@ var RemoteHttpInterceptor = class extends _chunk42632LKHjs.BatchInterceptor {
|
|
|
23
23
|
super({
|
|
24
24
|
name: "remote-interceptor",
|
|
25
25
|
interceptors: [
|
|
26
|
-
new (0,
|
|
27
|
-
new (0,
|
|
26
|
+
new (0, _chunkCQAXV6QMjs.ClientRequestInterceptor)(),
|
|
27
|
+
new (0, _chunkMFGG7XIPjs.XMLHttpRequestInterceptor)()
|
|
28
28
|
]
|
|
29
29
|
});
|
|
30
30
|
}
|
|
@@ -119,8 +119,8 @@ var _RemoteHttpResolver = class extends _chunkYGM3BCJUjs.Interceptor {
|
|
|
119
119
|
credentials: requestJson.credentials,
|
|
120
120
|
body: requestJson.body
|
|
121
121
|
});
|
|
122
|
-
const controller = new (0,
|
|
123
|
-
await
|
|
122
|
+
const controller = new (0, _chunkTQD7SQGPjs.RequestController)(request);
|
|
123
|
+
await _chunkTQD7SQGPjs.handleRequest.call(void 0, {
|
|
124
124
|
request,
|
|
125
125
|
requestId: requestJson.id,
|
|
126
126
|
controller,
|
|
@@ -3,16 +3,16 @@ import {
|
|
|
3
3
|
} from "./chunk-HGQLG7KE.mjs";
|
|
4
4
|
import {
|
|
5
5
|
ClientRequestInterceptor
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WCTY6JTP.mjs";
|
|
7
7
|
import {
|
|
8
8
|
XMLHttpRequestInterceptor
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-3ROKKA34.mjs";
|
|
10
10
|
import "./chunk-6HYIRFX2.mjs";
|
|
11
11
|
import "./chunk-BZ3Y7YV5.mjs";
|
|
12
12
|
import {
|
|
13
13
|
RequestController,
|
|
14
14
|
handleRequest
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-XSXCGXEY.mjs";
|
|
16
16
|
import {
|
|
17
17
|
Interceptor
|
|
18
18
|
} from "./chunk-BUCULLYM.mjs";
|