msw 2.11.5 → 2.12.0
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/index.js +365 -308
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +365 -308
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/index.d.mts +1 -0
- package/lib/core/index.d.ts +1 -0
- package/lib/core/index.js +2 -0
- package/lib/core/index.js.map +1 -1
- package/lib/core/index.mjs +4 -0
- package/lib/core/index.mjs.map +1 -1
- package/lib/core/sse.d.mts +116 -0
- package/lib/core/sse.d.ts +116 -0
- package/lib/core/sse.js +599 -0
- package/lib/core/sse.js.map +1 -0
- package/lib/core/sse.mjs +581 -0
- package/lib/core/sse.mjs.map +1 -0
- package/lib/core/utils/internal/isObject.d.mts +1 -1
- package/lib/core/utils/internal/isObject.d.ts +1 -1
- package/lib/core/utils/internal/isObject.js.map +1 -1
- package/lib/core/utils/internal/isObject.mjs.map +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.d.mts +7 -1
- package/lib/core/ws/utils/attachWebSocketLogger.d.ts +7 -1
- package/lib/core/ws/utils/attachWebSocketLogger.js +1 -0
- package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.mjs +1 -0
- package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -1
- package/lib/core/ws/utils/getMessageLength.js +2 -1
- package/lib/core/ws/utils/getMessageLength.js.map +1 -1
- package/lib/core/ws/utils/getMessageLength.mjs +2 -1
- package/lib/core/ws/utils/getMessageLength.mjs.map +1 -1
- package/lib/core/ws/utils/getPublicData.js +2 -1
- package/lib/core/ws/utils/getPublicData.js.map +1 -1
- package/lib/core/ws/utils/getPublicData.mjs +2 -1
- package/lib/core/ws/utils/getPublicData.mjs.map +1 -1
- package/lib/iife/index.js +1367 -746
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/package.json +6 -4
- package/src/browser/tsconfig.browser.json +1 -1
- package/src/core/index.ts +9 -0
- package/src/core/sse.ts +897 -0
- package/src/core/utils/internal/isObject.ts +1 -1
- package/src/core/ws/utils/attachWebSocketLogger.ts +1 -1
- package/src/core/ws/utils/getMessageLength.ts +2 -1
- package/src/core/ws/utils/getPublicData.ts +3 -2
package/lib/browser/index.mjs
CHANGED
|
@@ -464,7 +464,7 @@ You can also automate this process and make the worker script update automatical
|
|
|
464
464
|
return integrityCheckPromise;
|
|
465
465
|
}
|
|
466
466
|
|
|
467
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
467
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/chunk-6HYIRFX2.mjs
|
|
468
468
|
var encoder = new TextEncoder();
|
|
469
469
|
function encodeBuffer(text) {
|
|
470
470
|
return encoder.encode(text);
|
|
@@ -480,100 +480,6 @@ function toArrayBuffer(array) {
|
|
|
480
480
|
);
|
|
481
481
|
}
|
|
482
482
|
|
|
483
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.39.1/node_modules/@mswjs/interceptors/lib/browser/chunk-3RXCRGL2.mjs
|
|
484
|
-
var IS_PATCHED_MODULE = Symbol("isPatchedModule");
|
|
485
|
-
function canParseUrl(url) {
|
|
486
|
-
try {
|
|
487
|
-
new URL(url);
|
|
488
|
-
return true;
|
|
489
|
-
} catch (_error) {
|
|
490
|
-
return false;
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
function getValueBySymbol(symbolName, source) {
|
|
494
|
-
const ownSymbols = Object.getOwnPropertySymbols(source);
|
|
495
|
-
const symbol = ownSymbols.find((symbol2) => {
|
|
496
|
-
return symbol2.description === symbolName;
|
|
497
|
-
});
|
|
498
|
-
if (symbol) {
|
|
499
|
-
return Reflect.get(source, symbol);
|
|
500
|
-
}
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
var _FetchResponse = class extends Response {
|
|
504
|
-
static isConfigurableStatusCode(status) {
|
|
505
|
-
return status >= 200 && status <= 599;
|
|
506
|
-
}
|
|
507
|
-
static isRedirectResponse(status) {
|
|
508
|
-
return _FetchResponse.STATUS_CODES_WITH_REDIRECT.includes(status);
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Returns a boolean indicating whether the given response status
|
|
512
|
-
* code represents a response that can have a body.
|
|
513
|
-
*/
|
|
514
|
-
static isResponseWithBody(status) {
|
|
515
|
-
return !_FetchResponse.STATUS_CODES_WITHOUT_BODY.includes(status);
|
|
516
|
-
}
|
|
517
|
-
static setUrl(url, response) {
|
|
518
|
-
if (!url || url === "about:" || !canParseUrl(url)) {
|
|
519
|
-
return;
|
|
520
|
-
}
|
|
521
|
-
const state = getValueBySymbol("state", response);
|
|
522
|
-
if (state) {
|
|
523
|
-
state.urlList.push(new URL(url));
|
|
524
|
-
} else {
|
|
525
|
-
Object.defineProperty(response, "url", {
|
|
526
|
-
value: url,
|
|
527
|
-
enumerable: true,
|
|
528
|
-
configurable: true,
|
|
529
|
-
writable: false
|
|
530
|
-
});
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* Parses the given raw HTTP headers into a Fetch API `Headers` instance.
|
|
535
|
-
*/
|
|
536
|
-
static parseRawHeaders(rawHeaders) {
|
|
537
|
-
const headers = new Headers();
|
|
538
|
-
for (let line = 0; line < rawHeaders.length; line += 2) {
|
|
539
|
-
headers.append(rawHeaders[line], rawHeaders[line + 1]);
|
|
540
|
-
}
|
|
541
|
-
return headers;
|
|
542
|
-
}
|
|
543
|
-
constructor(body, init = {}) {
|
|
544
|
-
var _a;
|
|
545
|
-
const status = (_a = init.status) != null ? _a : 200;
|
|
546
|
-
const safeStatus = _FetchResponse.isConfigurableStatusCode(status) ? status : 200;
|
|
547
|
-
const finalBody = _FetchResponse.isResponseWithBody(status) ? body : null;
|
|
548
|
-
super(finalBody, {
|
|
549
|
-
status: safeStatus,
|
|
550
|
-
statusText: init.statusText,
|
|
551
|
-
headers: init.headers
|
|
552
|
-
});
|
|
553
|
-
if (status !== safeStatus) {
|
|
554
|
-
const state = getValueBySymbol("state", this);
|
|
555
|
-
if (state) {
|
|
556
|
-
state.status = status;
|
|
557
|
-
} else {
|
|
558
|
-
Object.defineProperty(this, "status", {
|
|
559
|
-
value: status,
|
|
560
|
-
enumerable: true,
|
|
561
|
-
configurable: true,
|
|
562
|
-
writable: false
|
|
563
|
-
});
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
_FetchResponse.setUrl(init.url, this);
|
|
567
|
-
}
|
|
568
|
-
};
|
|
569
|
-
var FetchResponse = _FetchResponse;
|
|
570
|
-
FetchResponse.STATUS_CODES_WITHOUT_BODY = [101, 103, 204, 205, 304];
|
|
571
|
-
FetchResponse.STATUS_CODES_WITH_REDIRECT = [301, 302, 303, 307, 308];
|
|
572
|
-
var kRawRequest = Symbol("kRawRequest");
|
|
573
|
-
function setRawRequest(request, rawRequest) {
|
|
574
|
-
Reflect.set(request, kRawRequest, rawRequest);
|
|
575
|
-
}
|
|
576
|
-
|
|
577
483
|
// node_modules/.pnpm/@open-draft+logger@0.3.0/node_modules/@open-draft/logger/lib/index.mjs
|
|
578
484
|
var __defProp = Object.defineProperty;
|
|
579
485
|
var __export = (target, all) => {
|
|
@@ -1011,7 +917,20 @@ var _Emitter = class {
|
|
|
1011
917
|
var Emitter = _Emitter;
|
|
1012
918
|
Emitter.defaultMaxListeners = 10;
|
|
1013
919
|
|
|
1014
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
920
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/chunk-Z5TSB3T6.mjs
|
|
921
|
+
var __accessCheck = (obj, member, msg) => {
|
|
922
|
+
if (!member.has(obj))
|
|
923
|
+
throw TypeError("Cannot " + msg);
|
|
924
|
+
};
|
|
925
|
+
var __privateGet = (obj, member, getter) => {
|
|
926
|
+
__accessCheck(obj, member, "read from private field");
|
|
927
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
928
|
+
};
|
|
929
|
+
var __privateAdd = (obj, member, value) => {
|
|
930
|
+
if (member.has(obj))
|
|
931
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
932
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
933
|
+
};
|
|
1015
934
|
var INTERNAL_REQUEST_ID_HEADER_NAME = "x-interceptors-internal-request-id";
|
|
1016
935
|
function getGlobalSymbol(symbol) {
|
|
1017
936
|
return (
|
|
@@ -1159,7 +1078,188 @@ function createRequestId() {
|
|
|
1159
1078
|
return Math.random().toString(16).slice(2);
|
|
1160
1079
|
}
|
|
1161
1080
|
|
|
1162
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
1081
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/chunk-LIKZF2VU.mjs
|
|
1082
|
+
var IS_PATCHED_MODULE = Symbol("isPatchedModule");
|
|
1083
|
+
var InterceptorError = class extends Error {
|
|
1084
|
+
constructor(message) {
|
|
1085
|
+
super(message);
|
|
1086
|
+
this.name = "InterceptorError";
|
|
1087
|
+
Object.setPrototypeOf(this, InterceptorError.prototype);
|
|
1088
|
+
}
|
|
1089
|
+
};
|
|
1090
|
+
var _handled;
|
|
1091
|
+
var handled_get;
|
|
1092
|
+
var _RequestController = class {
|
|
1093
|
+
constructor(request, source) {
|
|
1094
|
+
this.request = request;
|
|
1095
|
+
this.source = source;
|
|
1096
|
+
__privateAdd(this, _handled);
|
|
1097
|
+
this.readyState = _RequestController.PENDING;
|
|
1098
|
+
this.handled = new DeferredPromise();
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Perform this request as-is.
|
|
1102
|
+
*/
|
|
1103
|
+
async passthrough() {
|
|
1104
|
+
invariant.as(
|
|
1105
|
+
InterceptorError,
|
|
1106
|
+
this.readyState === _RequestController.PENDING,
|
|
1107
|
+
'Failed to passthrough the "%s %s" request: the request has already been handled',
|
|
1108
|
+
this.request.method,
|
|
1109
|
+
this.request.url
|
|
1110
|
+
);
|
|
1111
|
+
this.readyState = _RequestController.PASSTHROUGH;
|
|
1112
|
+
await this.source.passthrough();
|
|
1113
|
+
__privateGet(this, _handled, handled_get).resolve();
|
|
1114
|
+
}
|
|
1115
|
+
/**
|
|
1116
|
+
* Respond to this request with the given `Response` instance.
|
|
1117
|
+
*
|
|
1118
|
+
* @example
|
|
1119
|
+
* controller.respondWith(new Response())
|
|
1120
|
+
* controller.respondWith(Response.json({ id }))
|
|
1121
|
+
* controller.respondWith(Response.error())
|
|
1122
|
+
*/
|
|
1123
|
+
respondWith(response) {
|
|
1124
|
+
invariant.as(
|
|
1125
|
+
InterceptorError,
|
|
1126
|
+
this.readyState === _RequestController.PENDING,
|
|
1127
|
+
'Failed to respond to the "%s %s" request with "%d %s": the request has already been handled (%d)',
|
|
1128
|
+
this.request.method,
|
|
1129
|
+
this.request.url,
|
|
1130
|
+
response.status,
|
|
1131
|
+
response.statusText || "OK",
|
|
1132
|
+
this.readyState
|
|
1133
|
+
);
|
|
1134
|
+
this.readyState = _RequestController.RESPONSE;
|
|
1135
|
+
__privateGet(this, _handled, handled_get).resolve();
|
|
1136
|
+
this.source.respondWith(response);
|
|
1137
|
+
}
|
|
1138
|
+
/**
|
|
1139
|
+
* Error this request with the given reason.
|
|
1140
|
+
*
|
|
1141
|
+
* @example
|
|
1142
|
+
* controller.errorWith()
|
|
1143
|
+
* controller.errorWith(new Error('Oops!'))
|
|
1144
|
+
* controller.errorWith({ message: 'Oops!'})
|
|
1145
|
+
*/
|
|
1146
|
+
errorWith(reason) {
|
|
1147
|
+
invariant.as(
|
|
1148
|
+
InterceptorError,
|
|
1149
|
+
this.readyState === _RequestController.PENDING,
|
|
1150
|
+
'Failed to error the "%s %s" request with "%s": the request has already been handled (%d)',
|
|
1151
|
+
this.request.method,
|
|
1152
|
+
this.request.url,
|
|
1153
|
+
reason == null ? void 0 : reason.toString(),
|
|
1154
|
+
this.readyState
|
|
1155
|
+
);
|
|
1156
|
+
this.readyState = _RequestController.ERROR;
|
|
1157
|
+
this.source.errorWith(reason);
|
|
1158
|
+
__privateGet(this, _handled, handled_get).resolve();
|
|
1159
|
+
}
|
|
1160
|
+
};
|
|
1161
|
+
var RequestController = _RequestController;
|
|
1162
|
+
_handled = /* @__PURE__ */ new WeakSet();
|
|
1163
|
+
handled_get = function() {
|
|
1164
|
+
return this.handled;
|
|
1165
|
+
};
|
|
1166
|
+
RequestController.PENDING = 0;
|
|
1167
|
+
RequestController.PASSTHROUGH = 1;
|
|
1168
|
+
RequestController.RESPONSE = 2;
|
|
1169
|
+
RequestController.ERROR = 3;
|
|
1170
|
+
function canParseUrl(url) {
|
|
1171
|
+
try {
|
|
1172
|
+
new URL(url);
|
|
1173
|
+
return true;
|
|
1174
|
+
} catch (_error) {
|
|
1175
|
+
return false;
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
function getValueBySymbol(symbolName, source) {
|
|
1179
|
+
const ownSymbols = Object.getOwnPropertySymbols(source);
|
|
1180
|
+
const symbol = ownSymbols.find((symbol2) => {
|
|
1181
|
+
return symbol2.description === symbolName;
|
|
1182
|
+
});
|
|
1183
|
+
if (symbol) {
|
|
1184
|
+
return Reflect.get(source, symbol);
|
|
1185
|
+
}
|
|
1186
|
+
return;
|
|
1187
|
+
}
|
|
1188
|
+
var _FetchResponse = class extends Response {
|
|
1189
|
+
static isConfigurableStatusCode(status) {
|
|
1190
|
+
return status >= 200 && status <= 599;
|
|
1191
|
+
}
|
|
1192
|
+
static isRedirectResponse(status) {
|
|
1193
|
+
return _FetchResponse.STATUS_CODES_WITH_REDIRECT.includes(status);
|
|
1194
|
+
}
|
|
1195
|
+
/**
|
|
1196
|
+
* Returns a boolean indicating whether the given response status
|
|
1197
|
+
* code represents a response that can have a body.
|
|
1198
|
+
*/
|
|
1199
|
+
static isResponseWithBody(status) {
|
|
1200
|
+
return !_FetchResponse.STATUS_CODES_WITHOUT_BODY.includes(status);
|
|
1201
|
+
}
|
|
1202
|
+
static setUrl(url, response) {
|
|
1203
|
+
if (!url || url === "about:" || !canParseUrl(url)) {
|
|
1204
|
+
return;
|
|
1205
|
+
}
|
|
1206
|
+
const state = getValueBySymbol("state", response);
|
|
1207
|
+
if (state) {
|
|
1208
|
+
state.urlList.push(new URL(url));
|
|
1209
|
+
} else {
|
|
1210
|
+
Object.defineProperty(response, "url", {
|
|
1211
|
+
value: url,
|
|
1212
|
+
enumerable: true,
|
|
1213
|
+
configurable: true,
|
|
1214
|
+
writable: false
|
|
1215
|
+
});
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
/**
|
|
1219
|
+
* Parses the given raw HTTP headers into a Fetch API `Headers` instance.
|
|
1220
|
+
*/
|
|
1221
|
+
static parseRawHeaders(rawHeaders) {
|
|
1222
|
+
const headers = new Headers();
|
|
1223
|
+
for (let line = 0; line < rawHeaders.length; line += 2) {
|
|
1224
|
+
headers.append(rawHeaders[line], rawHeaders[line + 1]);
|
|
1225
|
+
}
|
|
1226
|
+
return headers;
|
|
1227
|
+
}
|
|
1228
|
+
constructor(body, init = {}) {
|
|
1229
|
+
var _a;
|
|
1230
|
+
const status = (_a = init.status) != null ? _a : 200;
|
|
1231
|
+
const safeStatus = _FetchResponse.isConfigurableStatusCode(status) ? status : 200;
|
|
1232
|
+
const finalBody = _FetchResponse.isResponseWithBody(status) ? body : null;
|
|
1233
|
+
super(finalBody, {
|
|
1234
|
+
status: safeStatus,
|
|
1235
|
+
statusText: init.statusText,
|
|
1236
|
+
headers: init.headers
|
|
1237
|
+
});
|
|
1238
|
+
if (status !== safeStatus) {
|
|
1239
|
+
const state = getValueBySymbol("state", this);
|
|
1240
|
+
if (state) {
|
|
1241
|
+
state.status = status;
|
|
1242
|
+
} else {
|
|
1243
|
+
Object.defineProperty(this, "status", {
|
|
1244
|
+
value: status,
|
|
1245
|
+
enumerable: true,
|
|
1246
|
+
configurable: true,
|
|
1247
|
+
writable: false
|
|
1248
|
+
});
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
_FetchResponse.setUrl(init.url, this);
|
|
1252
|
+
}
|
|
1253
|
+
};
|
|
1254
|
+
var FetchResponse = _FetchResponse;
|
|
1255
|
+
FetchResponse.STATUS_CODES_WITHOUT_BODY = [101, 103, 204, 205, 304];
|
|
1256
|
+
FetchResponse.STATUS_CODES_WITH_REDIRECT = [301, 302, 303, 307, 308];
|
|
1257
|
+
var kRawRequest = Symbol("kRawRequest");
|
|
1258
|
+
function setRawRequest(request, rawRequest) {
|
|
1259
|
+
Reflect.set(request, kRawRequest, rawRequest);
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/index.mjs
|
|
1163
1263
|
var BatchInterceptor = class extends Interceptor {
|
|
1164
1264
|
constructor(options) {
|
|
1165
1265
|
BatchInterceptor.symbol = Symbol(options.name);
|
|
@@ -1635,6 +1735,36 @@ var WorkerChannel = class extends Emitter2 {
|
|
|
1635
1735
|
}
|
|
1636
1736
|
};
|
|
1637
1737
|
|
|
1738
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/chunk-VYSDLBSS.mjs
|
|
1739
|
+
async function emitAsync(emitter, eventName, ...data) {
|
|
1740
|
+
const listeners = emitter.listeners(eventName);
|
|
1741
|
+
if (listeners.length === 0) {
|
|
1742
|
+
return;
|
|
1743
|
+
}
|
|
1744
|
+
for (const listener of listeners) {
|
|
1745
|
+
await listener.apply(emitter, data);
|
|
1746
|
+
}
|
|
1747
|
+
}
|
|
1748
|
+
function hasConfigurableGlobal(propertyName) {
|
|
1749
|
+
const descriptor = Object.getOwnPropertyDescriptor(globalThis, propertyName);
|
|
1750
|
+
if (typeof descriptor === "undefined") {
|
|
1751
|
+
return false;
|
|
1752
|
+
}
|
|
1753
|
+
if (typeof descriptor.get === "function" && typeof descriptor.get() === "undefined") {
|
|
1754
|
+
return false;
|
|
1755
|
+
}
|
|
1756
|
+
if (typeof descriptor.get === "undefined" && descriptor.value == null) {
|
|
1757
|
+
return false;
|
|
1758
|
+
}
|
|
1759
|
+
if (typeof descriptor.set === "undefined" && !descriptor.configurable) {
|
|
1760
|
+
console.error(
|
|
1761
|
+
`[MSW] Failed to apply interceptor: the global \`${propertyName}\` property is non-configurable. This is likely an issue with your environment. If you are using a framework, please open an issue about this in their repository.`
|
|
1762
|
+
);
|
|
1763
|
+
return false;
|
|
1764
|
+
}
|
|
1765
|
+
return true;
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1638
1768
|
// node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/lib/index.mjs
|
|
1639
1769
|
var until2 = async (promise) => {
|
|
1640
1770
|
try {
|
|
@@ -1647,69 +1777,7 @@ var until2 = async (promise) => {
|
|
|
1647
1777
|
}
|
|
1648
1778
|
};
|
|
1649
1779
|
|
|
1650
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
1651
|
-
var InterceptorError = class extends Error {
|
|
1652
|
-
constructor(message) {
|
|
1653
|
-
super(message);
|
|
1654
|
-
this.name = "InterceptorError";
|
|
1655
|
-
Object.setPrototypeOf(this, InterceptorError.prototype);
|
|
1656
|
-
}
|
|
1657
|
-
};
|
|
1658
|
-
var kRequestHandled = Symbol("kRequestHandled");
|
|
1659
|
-
var kResponsePromise = Symbol("kResponsePromise");
|
|
1660
|
-
var RequestController = class {
|
|
1661
|
-
constructor(request) {
|
|
1662
|
-
this.request = request;
|
|
1663
|
-
this[kRequestHandled] = false;
|
|
1664
|
-
this[kResponsePromise] = new DeferredPromise();
|
|
1665
|
-
}
|
|
1666
|
-
/**
|
|
1667
|
-
* Respond to this request with the given `Response` instance.
|
|
1668
|
-
* @example
|
|
1669
|
-
* controller.respondWith(new Response())
|
|
1670
|
-
* controller.respondWith(Response.json({ id }))
|
|
1671
|
-
* controller.respondWith(Response.error())
|
|
1672
|
-
*/
|
|
1673
|
-
respondWith(response) {
|
|
1674
|
-
invariant.as(
|
|
1675
|
-
InterceptorError,
|
|
1676
|
-
!this[kRequestHandled],
|
|
1677
|
-
'Failed to respond to the "%s %s" request: the "request" event has already been handled.',
|
|
1678
|
-
this.request.method,
|
|
1679
|
-
this.request.url
|
|
1680
|
-
);
|
|
1681
|
-
this[kRequestHandled] = true;
|
|
1682
|
-
this[kResponsePromise].resolve(response);
|
|
1683
|
-
}
|
|
1684
|
-
/**
|
|
1685
|
-
* Error this request with the given reason.
|
|
1686
|
-
*
|
|
1687
|
-
* @example
|
|
1688
|
-
* controller.errorWith()
|
|
1689
|
-
* controller.errorWith(new Error('Oops!'))
|
|
1690
|
-
* controller.errorWith({ message: 'Oops!'})
|
|
1691
|
-
*/
|
|
1692
|
-
errorWith(reason) {
|
|
1693
|
-
invariant.as(
|
|
1694
|
-
InterceptorError,
|
|
1695
|
-
!this[kRequestHandled],
|
|
1696
|
-
'Failed to error the "%s %s" request: the "request" event has already been handled.',
|
|
1697
|
-
this.request.method,
|
|
1698
|
-
this.request.url
|
|
1699
|
-
);
|
|
1700
|
-
this[kRequestHandled] = true;
|
|
1701
|
-
this[kResponsePromise].resolve(reason);
|
|
1702
|
-
}
|
|
1703
|
-
};
|
|
1704
|
-
async function emitAsync(emitter, eventName, ...data) {
|
|
1705
|
-
const listners = emitter.listeners(eventName);
|
|
1706
|
-
if (listners.length === 0) {
|
|
1707
|
-
return;
|
|
1708
|
-
}
|
|
1709
|
-
for (const listener of listners) {
|
|
1710
|
-
await listener.apply(emitter, data);
|
|
1711
|
-
}
|
|
1712
|
-
}
|
|
1780
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/chunk-VOUOVDAW.mjs
|
|
1713
1781
|
function isObject2(value, loose = false) {
|
|
1714
1782
|
return loose ? Object.prototype.toString.call(value).startsWith("[object ") : Object.prototype.toString.call(value) === "[object Object]";
|
|
1715
1783
|
}
|
|
@@ -1757,19 +1825,19 @@ function isNodeLikeError(error2) {
|
|
|
1757
1825
|
async function handleRequest2(options) {
|
|
1758
1826
|
const handleResponse = async (response) => {
|
|
1759
1827
|
if (response instanceof Error) {
|
|
1760
|
-
options.
|
|
1828
|
+
await options.controller.errorWith(response);
|
|
1761
1829
|
return true;
|
|
1762
1830
|
}
|
|
1763
1831
|
if (isResponseError(response)) {
|
|
1764
|
-
options.
|
|
1832
|
+
await options.controller.respondWith(response);
|
|
1765
1833
|
return true;
|
|
1766
1834
|
}
|
|
1767
1835
|
if (isResponseLike(response)) {
|
|
1768
|
-
await options.
|
|
1836
|
+
await options.controller.respondWith(response);
|
|
1769
1837
|
return true;
|
|
1770
1838
|
}
|
|
1771
1839
|
if (isObject2(response)) {
|
|
1772
|
-
options.
|
|
1840
|
+
await options.controller.errorWith(response);
|
|
1773
1841
|
return true;
|
|
1774
1842
|
}
|
|
1775
1843
|
return false;
|
|
@@ -1779,7 +1847,7 @@ async function handleRequest2(options) {
|
|
|
1779
1847
|
throw result.error;
|
|
1780
1848
|
}
|
|
1781
1849
|
if (isNodeLikeError(error2)) {
|
|
1782
|
-
options.
|
|
1850
|
+
await options.controller.errorWith(error2);
|
|
1783
1851
|
return true;
|
|
1784
1852
|
}
|
|
1785
1853
|
if (error2 instanceof Response) {
|
|
@@ -1787,27 +1855,19 @@ async function handleRequest2(options) {
|
|
|
1787
1855
|
}
|
|
1788
1856
|
return false;
|
|
1789
1857
|
};
|
|
1790
|
-
options.emitter.once("request", ({ requestId: pendingRequestId }) => {
|
|
1791
|
-
if (pendingRequestId !== options.requestId) {
|
|
1792
|
-
return;
|
|
1793
|
-
}
|
|
1794
|
-
if (options.controller[kResponsePromise].state === "pending") {
|
|
1795
|
-
options.controller[kResponsePromise].resolve(void 0);
|
|
1796
|
-
}
|
|
1797
|
-
});
|
|
1798
1858
|
const requestAbortPromise = new DeferredPromise();
|
|
1799
1859
|
if (options.request.signal) {
|
|
1800
1860
|
if (options.request.signal.aborted) {
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
options.request.signal.addEventListener(
|
|
1804
|
-
"abort",
|
|
1805
|
-
() => {
|
|
1806
|
-
requestAbortPromise.reject(options.request.signal.reason);
|
|
1807
|
-
},
|
|
1808
|
-
{ once: true }
|
|
1809
|
-
);
|
|
1861
|
+
await options.controller.errorWith(options.request.signal.reason);
|
|
1862
|
+
return;
|
|
1810
1863
|
}
|
|
1864
|
+
options.request.signal.addEventListener(
|
|
1865
|
+
"abort",
|
|
1866
|
+
() => {
|
|
1867
|
+
requestAbortPromise.reject(options.request.signal.reason);
|
|
1868
|
+
},
|
|
1869
|
+
{ once: true }
|
|
1870
|
+
);
|
|
1811
1871
|
}
|
|
1812
1872
|
const result = await until2(async () => {
|
|
1813
1873
|
const requestListenersPromise = emitAsync(options.emitter, "request", {
|
|
@@ -1819,73 +1879,58 @@ async function handleRequest2(options) {
|
|
|
1819
1879
|
// Short-circuit the request handling promise if the request gets aborted.
|
|
1820
1880
|
requestAbortPromise,
|
|
1821
1881
|
requestListenersPromise,
|
|
1822
|
-
options.controller
|
|
1882
|
+
options.controller.handled
|
|
1823
1883
|
]);
|
|
1824
|
-
return await options.controller[kResponsePromise];
|
|
1825
1884
|
});
|
|
1826
1885
|
if (requestAbortPromise.state === "rejected") {
|
|
1827
|
-
options.
|
|
1828
|
-
return
|
|
1886
|
+
await options.controller.errorWith(requestAbortPromise.rejectionReason);
|
|
1887
|
+
return;
|
|
1829
1888
|
}
|
|
1830
1889
|
if (result.error) {
|
|
1831
1890
|
if (await handleResponseError(result.error)) {
|
|
1832
|
-
return
|
|
1891
|
+
return;
|
|
1833
1892
|
}
|
|
1834
1893
|
if (options.emitter.listenerCount("unhandledException") > 0) {
|
|
1835
1894
|
const unhandledExceptionController = new RequestController(
|
|
1836
|
-
options.request
|
|
1895
|
+
options.request,
|
|
1896
|
+
{
|
|
1897
|
+
/**
|
|
1898
|
+
* @note Intentionally empty passthrough handle.
|
|
1899
|
+
* This controller is created within another controller and we only need
|
|
1900
|
+
* to know if `unhandledException` listeners handled the request.
|
|
1901
|
+
*/
|
|
1902
|
+
passthrough() {
|
|
1903
|
+
},
|
|
1904
|
+
async respondWith(response) {
|
|
1905
|
+
await handleResponse(response);
|
|
1906
|
+
},
|
|
1907
|
+
async errorWith(reason) {
|
|
1908
|
+
await options.controller.errorWith(reason);
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1837
1911
|
);
|
|
1838
1912
|
await emitAsync(options.emitter, "unhandledException", {
|
|
1839
1913
|
error: result.error,
|
|
1840
1914
|
request: options.request,
|
|
1841
1915
|
requestId: options.requestId,
|
|
1842
1916
|
controller: unhandledExceptionController
|
|
1843
|
-
}).then(() => {
|
|
1844
|
-
if (unhandledExceptionController[kResponsePromise].state === "pending") {
|
|
1845
|
-
unhandledExceptionController[kResponsePromise].resolve(void 0);
|
|
1846
|
-
}
|
|
1847
1917
|
});
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
);
|
|
1851
|
-
if (nextResult.error) {
|
|
1852
|
-
return handleResponseError(nextResult.error);
|
|
1853
|
-
}
|
|
1854
|
-
if (nextResult.data) {
|
|
1855
|
-
return handleResponse(nextResult.data);
|
|
1918
|
+
if (unhandledExceptionController.readyState !== RequestController.PENDING) {
|
|
1919
|
+
return;
|
|
1856
1920
|
}
|
|
1857
1921
|
}
|
|
1858
|
-
options.
|
|
1859
|
-
|
|
1860
|
-
}
|
|
1861
|
-
if (result.data) {
|
|
1862
|
-
return handleResponse(result.data);
|
|
1863
|
-
}
|
|
1864
|
-
return false;
|
|
1865
|
-
}
|
|
1866
|
-
|
|
1867
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.39.1/node_modules/@mswjs/interceptors/lib/browser/chunk-TX5GBTFY.mjs
|
|
1868
|
-
function hasConfigurableGlobal(propertyName) {
|
|
1869
|
-
const descriptor = Object.getOwnPropertyDescriptor(globalThis, propertyName);
|
|
1870
|
-
if (typeof descriptor === "undefined") {
|
|
1871
|
-
return false;
|
|
1872
|
-
}
|
|
1873
|
-
if (typeof descriptor.get === "function" && typeof descriptor.get() === "undefined") {
|
|
1874
|
-
return false;
|
|
1875
|
-
}
|
|
1876
|
-
if (typeof descriptor.get === "undefined" && descriptor.value == null) {
|
|
1877
|
-
return false;
|
|
1878
|
-
}
|
|
1879
|
-
if (typeof descriptor.set === "undefined" && !descriptor.configurable) {
|
|
1880
|
-
console.error(
|
|
1881
|
-
`[MSW] Failed to apply interceptor: the global \`${propertyName}\` property is non-configurable. This is likely an issue with your environment. If you are using a framework, please open an issue about this in their repository.`
|
|
1922
|
+
await options.controller.respondWith(
|
|
1923
|
+
createServerErrorResponse(result.error)
|
|
1882
1924
|
);
|
|
1883
|
-
return
|
|
1925
|
+
return;
|
|
1884
1926
|
}
|
|
1885
|
-
|
|
1927
|
+
if (options.controller.readyState === RequestController.PENDING) {
|
|
1928
|
+
return await options.controller.passthrough();
|
|
1929
|
+
}
|
|
1930
|
+
return options.controller.handled;
|
|
1886
1931
|
}
|
|
1887
1932
|
|
|
1888
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
1933
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/chunk-WOWPV4GR.mjs
|
|
1889
1934
|
function createNetworkError(cause) {
|
|
1890
1935
|
return Object.assign(new TypeError("Failed to fetch"), {
|
|
1891
1936
|
cause
|
|
@@ -1941,7 +1986,12 @@ async function followFetchRedirect(request, response) {
|
|
|
1941
1986
|
request.headers.delete("host");
|
|
1942
1987
|
}
|
|
1943
1988
|
requestInit.headers = request.headers;
|
|
1944
|
-
|
|
1989
|
+
const finalResponse = await fetch(new Request(locationUrl, requestInit));
|
|
1990
|
+
Object.defineProperty(finalResponse, "redirected", {
|
|
1991
|
+
value: true,
|
|
1992
|
+
configurable: true
|
|
1993
|
+
});
|
|
1994
|
+
return finalResponse;
|
|
1945
1995
|
}
|
|
1946
1996
|
function sameOrigin(left, right) {
|
|
1947
1997
|
if (left.origin === right.origin && left.origin === "null") {
|
|
@@ -2039,19 +2089,35 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
2039
2089
|
setRawRequest(request, input);
|
|
2040
2090
|
}
|
|
2041
2091
|
const responsePromise = new DeferredPromise();
|
|
2042
|
-
const controller = new RequestController(request
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2092
|
+
const controller = new RequestController(request, {
|
|
2093
|
+
passthrough: async () => {
|
|
2094
|
+
this.logger.info("request has not been handled, passthrough...");
|
|
2095
|
+
const requestCloneForResponseEvent = request.clone();
|
|
2096
|
+
const { error: responseError, data: originalResponse } = await until2(
|
|
2097
|
+
() => pureFetch(request)
|
|
2098
|
+
);
|
|
2099
|
+
if (responseError) {
|
|
2100
|
+
return responsePromise.reject(responseError);
|
|
2101
|
+
}
|
|
2102
|
+
this.logger.info("original fetch performed", originalResponse);
|
|
2103
|
+
if (this.emitter.listenerCount("response") > 0) {
|
|
2104
|
+
this.logger.info('emitting the "response" event...');
|
|
2105
|
+
const responseClone = originalResponse.clone();
|
|
2106
|
+
await emitAsync(this.emitter, "response", {
|
|
2107
|
+
response: responseClone,
|
|
2108
|
+
isMockedResponse: false,
|
|
2109
|
+
request: requestCloneForResponseEvent,
|
|
2110
|
+
requestId
|
|
2111
|
+
});
|
|
2112
|
+
}
|
|
2113
|
+
responsePromise.resolve(originalResponse);
|
|
2114
|
+
},
|
|
2115
|
+
respondWith: async (rawResponse) => {
|
|
2116
|
+
if (isResponseError(rawResponse)) {
|
|
2117
|
+
this.logger.info("request has errored!", { response: rawResponse });
|
|
2118
|
+
responsePromise.reject(createNetworkError(rawResponse));
|
|
2119
|
+
return;
|
|
2120
|
+
}
|
|
2055
2121
|
this.logger.info("received mocked response!", {
|
|
2056
2122
|
rawResponse
|
|
2057
2123
|
});
|
|
@@ -2089,37 +2155,24 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
2089
2155
|
}
|
|
2090
2156
|
responsePromise.resolve(response);
|
|
2091
2157
|
},
|
|
2092
|
-
|
|
2093
|
-
this.logger.info("request has
|
|
2094
|
-
responsePromise.reject(
|
|
2095
|
-
},
|
|
2096
|
-
onError: (error2) => {
|
|
2097
|
-
this.logger.info("request has been aborted!", { error: error2 });
|
|
2098
|
-
responsePromise.reject(error2);
|
|
2158
|
+
errorWith: (reason) => {
|
|
2159
|
+
this.logger.info("request has been aborted!", { reason });
|
|
2160
|
+
responsePromise.reject(reason);
|
|
2099
2161
|
}
|
|
2100
2162
|
});
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
return responsePromise;
|
|
2104
|
-
}
|
|
2163
|
+
this.logger.info("[%s] %s", request.method, request.url);
|
|
2164
|
+
this.logger.info("awaiting for the mocked response...");
|
|
2105
2165
|
this.logger.info(
|
|
2106
|
-
|
|
2166
|
+
'emitting the "request" event for %s listener(s)...',
|
|
2167
|
+
this.emitter.listenerCount("request")
|
|
2107
2168
|
);
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
const responseClone = response.clone();
|
|
2114
|
-
await emitAsync(this.emitter, "response", {
|
|
2115
|
-
response: responseClone,
|
|
2116
|
-
isMockedResponse: false,
|
|
2117
|
-
request: requestCloneForResponseEvent,
|
|
2118
|
-
requestId
|
|
2119
|
-
});
|
|
2120
|
-
}
|
|
2121
|
-
return response;
|
|
2169
|
+
await handleRequest2({
|
|
2170
|
+
request,
|
|
2171
|
+
requestId,
|
|
2172
|
+
emitter: this.emitter,
|
|
2173
|
+
controller
|
|
2122
2174
|
});
|
|
2175
|
+
return responsePromise;
|
|
2123
2176
|
};
|
|
2124
2177
|
Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {
|
|
2125
2178
|
enumerable: true,
|
|
@@ -2141,7 +2194,7 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
2141
2194
|
var FetchInterceptor = _FetchInterceptor;
|
|
2142
2195
|
FetchInterceptor.symbol = Symbol("fetch");
|
|
2143
2196
|
|
|
2144
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
2197
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.40.0/node_modules/@mswjs/interceptors/lib/browser/chunk-WADP6VHN.mjs
|
|
2145
2198
|
function concatArrayBuffer(left, right) {
|
|
2146
2199
|
const result = new Uint8Array(left.byteLength + right.byteLength);
|
|
2147
2200
|
result.set(left, 0);
|
|
@@ -2309,12 +2362,12 @@ function createResponse(request, body) {
|
|
|
2309
2362
|
url: request.responseURL,
|
|
2310
2363
|
status: request.status,
|
|
2311
2364
|
statusText: request.statusText,
|
|
2312
|
-
headers:
|
|
2365
|
+
headers: createHeadersFromXMLHttpRequestHeaders(
|
|
2313
2366
|
request.getAllResponseHeaders()
|
|
2314
2367
|
)
|
|
2315
2368
|
});
|
|
2316
2369
|
}
|
|
2317
|
-
function
|
|
2370
|
+
function createHeadersFromXMLHttpRequestHeaders(headersString) {
|
|
2318
2371
|
const headers = new Headers();
|
|
2319
2372
|
const lines = headersString.split(/[\r\n]+/);
|
|
2320
2373
|
for (const line of lines) {
|
|
@@ -2366,7 +2419,6 @@ var XMLHttpRequestController = class {
|
|
|
2366
2419
|
}
|
|
2367
2420
|
},
|
|
2368
2421
|
methodCall: ([methodName, args], invoke) => {
|
|
2369
|
-
var _a;
|
|
2370
2422
|
switch (methodName) {
|
|
2371
2423
|
case "open": {
|
|
2372
2424
|
const [method, url] = args;
|
|
@@ -2417,24 +2469,27 @@ var XMLHttpRequestController = class {
|
|
|
2417
2469
|
const requestBody = typeof body === "string" ? encodeBuffer(body) : body;
|
|
2418
2470
|
const fetchRequest = this.toFetchApiRequest(requestBody);
|
|
2419
2471
|
this[kFetchRequest] = fetchRequest.clone();
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
this.
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
this.request.setRequestHeader(
|
|
2432
|
-
INTERNAL_REQUEST_ID_HEADER_NAME,
|
|
2433
|
-
this.requestId
|
|
2472
|
+
queueMicrotask(() => {
|
|
2473
|
+
var _a;
|
|
2474
|
+
const onceRequestSettled = ((_a = this.onRequest) == null ? void 0 : _a.call(this, {
|
|
2475
|
+
request: fetchRequest,
|
|
2476
|
+
requestId: this.requestId
|
|
2477
|
+
})) || Promise.resolve();
|
|
2478
|
+
onceRequestSettled.finally(() => {
|
|
2479
|
+
if (!this[kIsRequestHandled]) {
|
|
2480
|
+
this.logger.info(
|
|
2481
|
+
"request callback settled but request has not been handled (readystate %d), performing as-is...",
|
|
2482
|
+
this.request.readyState
|
|
2434
2483
|
);
|
|
2484
|
+
if (IS_NODE2) {
|
|
2485
|
+
this.request.setRequestHeader(
|
|
2486
|
+
INTERNAL_REQUEST_ID_HEADER_NAME,
|
|
2487
|
+
this.requestId
|
|
2488
|
+
);
|
|
2489
|
+
}
|
|
2490
|
+
return invoke();
|
|
2435
2491
|
}
|
|
2436
|
-
|
|
2437
|
-
}
|
|
2492
|
+
});
|
|
2438
2493
|
});
|
|
2439
2494
|
break;
|
|
2440
2495
|
}
|
|
@@ -2724,7 +2779,7 @@ var XMLHttpRequestController = class {
|
|
|
2724
2779
|
define(this.request, "readyState", nextReadyState);
|
|
2725
2780
|
this.logger.info("set readyState to: %d", nextReadyState);
|
|
2726
2781
|
if (nextReadyState !== this.request.UNSENT) {
|
|
2727
|
-
this.logger.info('
|
|
2782
|
+
this.logger.info('triggering "readystatechange" event...');
|
|
2728
2783
|
this.trigger("readystatechange", this.request);
|
|
2729
2784
|
}
|
|
2730
2785
|
}
|
|
@@ -2833,35 +2888,37 @@ function createXMLHttpRequestProxy({
|
|
|
2833
2888
|
logger
|
|
2834
2889
|
);
|
|
2835
2890
|
xhrRequestController.onRequest = async function({ request, requestId }) {
|
|
2836
|
-
const controller = new RequestController(request
|
|
2891
|
+
const controller = new RequestController(request, {
|
|
2892
|
+
passthrough: () => {
|
|
2893
|
+
this.logger.info(
|
|
2894
|
+
"no mocked response received, performing request as-is..."
|
|
2895
|
+
);
|
|
2896
|
+
},
|
|
2897
|
+
respondWith: async (response) => {
|
|
2898
|
+
if (isResponseError(response)) {
|
|
2899
|
+
this.errorWith(new TypeError("Network error"));
|
|
2900
|
+
return;
|
|
2901
|
+
}
|
|
2902
|
+
await this.respondWith(response);
|
|
2903
|
+
},
|
|
2904
|
+
errorWith: (reason) => {
|
|
2905
|
+
this.logger.info("request errored!", { error: reason });
|
|
2906
|
+
if (reason instanceof Error) {
|
|
2907
|
+
this.errorWith(reason);
|
|
2908
|
+
}
|
|
2909
|
+
}
|
|
2910
|
+
});
|
|
2837
2911
|
this.logger.info("awaiting mocked response...");
|
|
2838
2912
|
this.logger.info(
|
|
2839
2913
|
'emitting the "request" event for %s listener(s)...',
|
|
2840
2914
|
emitter.listenerCount("request")
|
|
2841
2915
|
);
|
|
2842
|
-
|
|
2916
|
+
await handleRequest2({
|
|
2843
2917
|
request,
|
|
2844
2918
|
requestId,
|
|
2845
2919
|
controller,
|
|
2846
|
-
emitter
|
|
2847
|
-
onResponse: async (response) => {
|
|
2848
|
-
await this.respondWith(response);
|
|
2849
|
-
},
|
|
2850
|
-
onRequestError: () => {
|
|
2851
|
-
this.errorWith(new TypeError("Network error"));
|
|
2852
|
-
},
|
|
2853
|
-
onError: (error2) => {
|
|
2854
|
-
this.logger.info("request errored!", { error: error2 });
|
|
2855
|
-
if (error2 instanceof Error) {
|
|
2856
|
-
this.errorWith(error2);
|
|
2857
|
-
}
|
|
2858
|
-
}
|
|
2920
|
+
emitter
|
|
2859
2921
|
});
|
|
2860
|
-
if (!isRequestHandled) {
|
|
2861
|
-
this.logger.info(
|
|
2862
|
-
"no mocked response received, performing request as-is..."
|
|
2863
|
-
);
|
|
2864
|
-
}
|
|
2865
2922
|
};
|
|
2866
2923
|
xhrRequestController.onResponse = async function({
|
|
2867
2924
|
response,
|