msw 2.3.0-ws.rc-6 → 2.3.0-ws.rc-7
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/README.md +3 -9
- package/lib/browser/index.js +160 -64
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +160 -64
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/handlers/WebSocketHandler.js +1 -2
- package/lib/core/handlers/WebSocketHandler.js.map +1 -1
- package/lib/core/handlers/WebSocketHandler.mjs +1 -2
- package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
- package/lib/core/utils/internal/Disposable.d.mts +2 -2
- package/lib/core/utils/internal/Disposable.d.ts +2 -2
- package/lib/core/utils/internal/Disposable.js +5 -2
- package/lib/core/utils/internal/Disposable.js.map +1 -1
- package/lib/core/utils/internal/Disposable.mjs +5 -2
- package/lib/core/utils/internal/Disposable.mjs.map +1 -1
- package/lib/core/utils/internal/devUtils.d.mts +10 -1
- package/lib/core/utils/internal/devUtils.d.ts +10 -1
- package/lib/core/utils/internal/devUtils.js +7 -0
- package/lib/core/utils/internal/devUtils.js.map +1 -1
- package/lib/core/utils/internal/devUtils.mjs +7 -0
- package/lib/core/utils/internal/devUtils.mjs.map +1 -1
- package/lib/core/utils/matching/normalizePath.d.mts +1 -0
- package/lib/core/utils/matching/normalizePath.d.ts +1 -0
- package/lib/core/utils/matching/normalizePath.js.map +1 -1
- package/lib/core/utils/matching/normalizePath.mjs.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.js +3 -3
- package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.mjs +4 -4
- package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
- package/lib/core/utils/url/cleanUrl.d.mts +2 -1
- package/lib/core/utils/url/cleanUrl.d.ts +2 -1
- package/lib/core/utils/url/cleanUrl.js +3 -0
- package/lib/core/utils/url/cleanUrl.js.map +1 -1
- package/lib/core/utils/url/cleanUrl.mjs +3 -0
- package/lib/core/utils/url/cleanUrl.mjs.map +1 -1
- package/lib/core/ws/WebSocketClientManager.js.map +1 -1
- package/lib/core/ws/WebSocketClientManager.mjs.map +1 -1
- package/lib/iife/index.js +204 -79
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.js +5 -0
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +6 -1
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.js +5 -0
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +6 -1
- package/lib/node/index.mjs.map +1 -1
- package/package.json +17 -5
- package/src/browser/setupWorker/start/createStartHandler.ts +6 -0
- package/src/core/handlers/WebSocketHandler.ts +1 -2
- package/src/core/utils/internal/Disposable.ts +6 -3
- package/src/core/utils/internal/devUtils.test.ts +21 -0
- package/src/core/utils/internal/devUtils.ts +13 -0
- package/src/core/utils/matching/matchRequestUrl.test.ts +11 -0
- package/src/core/utils/matching/normalizePath.test.ts +7 -1
- package/src/core/utils/matching/normalizePath.ts +1 -0
- package/src/core/utils/request/onUnhandledRequest.test.ts +30 -4
- package/src/core/utils/request/onUnhandledRequest.ts +4 -4
- package/src/core/utils/url/cleanUrl.test.ts +8 -3
- package/src/core/utils/url/cleanUrl.ts +9 -1
- package/src/core/utils/url/getAbsoluteUrl.node.test.ts +3 -3
- package/src/core/utils/url/getAbsoluteUrl.test.ts +5 -5
- package/src/core/utils/url/isAbsoluteUrl.test.ts +7 -7
- package/src/core/ws/WebSocketClientManager.ts +1 -2
- package/src/node/SetupServerCommonApi.ts +7 -1
package/lib/browser/index.mjs
CHANGED
|
@@ -97,6 +97,7 @@ function isNodeProcess() {
|
|
|
97
97
|
|
|
98
98
|
// src/browser/setupWorker/start/createStartHandler.ts
|
|
99
99
|
import { devUtils as devUtils7 } from '../core/utils/internal/devUtils.mjs';
|
|
100
|
+
import { MSW_WEBSOCKET_CLIENTS_KEY } from '../core/ws/WebSocketClientManager.mjs';
|
|
100
101
|
|
|
101
102
|
// node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/lib/index.mjs
|
|
102
103
|
var until = async (promise) => {
|
|
@@ -370,7 +371,7 @@ You can also automate this process and make the worker script update automatical
|
|
|
370
371
|
}
|
|
371
372
|
}
|
|
372
373
|
|
|
373
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
374
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-6HYIRFX2.mjs
|
|
374
375
|
var encoder = new TextEncoder();
|
|
375
376
|
function encodeBuffer(text) {
|
|
376
377
|
return encoder.encode(text);
|
|
@@ -385,6 +386,17 @@ function toArrayBuffer(array) {
|
|
|
385
386
|
array.byteOffset + array.byteLength
|
|
386
387
|
);
|
|
387
388
|
}
|
|
389
|
+
|
|
390
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-OMISYKWR.mjs
|
|
391
|
+
var IS_PATCHED_MODULE = Symbol("isPatchedModule");
|
|
392
|
+
function isPropertyAccessible(obj, key) {
|
|
393
|
+
try {
|
|
394
|
+
obj[key];
|
|
395
|
+
return true;
|
|
396
|
+
} catch (e) {
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
388
400
|
var RESPONSE_STATUS_CODES_WITHOUT_BODY = /* @__PURE__ */ new Set([
|
|
389
401
|
101,
|
|
390
402
|
103,
|
|
@@ -395,9 +407,27 @@ var RESPONSE_STATUS_CODES_WITHOUT_BODY = /* @__PURE__ */ new Set([
|
|
|
395
407
|
function isResponseWithoutBody(status) {
|
|
396
408
|
return RESPONSE_STATUS_CODES_WITHOUT_BODY.has(status);
|
|
397
409
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
410
|
+
function createServerErrorResponse(body) {
|
|
411
|
+
return new Response(
|
|
412
|
+
JSON.stringify(
|
|
413
|
+
body instanceof Error ? {
|
|
414
|
+
name: body.name,
|
|
415
|
+
message: body.message,
|
|
416
|
+
stack: body.stack
|
|
417
|
+
} : body
|
|
418
|
+
),
|
|
419
|
+
{
|
|
420
|
+
status: 500,
|
|
421
|
+
statusText: "Unhandled Exception",
|
|
422
|
+
headers: {
|
|
423
|
+
"Content-Type": "application/json"
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
);
|
|
427
|
+
}
|
|
428
|
+
function isResponseError(response) {
|
|
429
|
+
return isPropertyAccessible(response, "type") && response.type === "error";
|
|
430
|
+
}
|
|
401
431
|
|
|
402
432
|
// node_modules/.pnpm/@open-draft+logger@0.3.0/node_modules/@open-draft/logger/lib/index.mjs
|
|
403
433
|
var __defProp = Object.defineProperty;
|
|
@@ -836,7 +866,7 @@ var _Emitter = class {
|
|
|
836
866
|
var Emitter = _Emitter;
|
|
837
867
|
Emitter.defaultMaxListeners = 10;
|
|
838
868
|
|
|
839
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
869
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-QED3Q6Z2.mjs
|
|
840
870
|
var INTERNAL_REQUEST_ID_HEADER_NAME = "x-interceptors-internal-request-id";
|
|
841
871
|
function getGlobalSymbol(symbol) {
|
|
842
872
|
return (
|
|
@@ -984,7 +1014,7 @@ function createRequestId() {
|
|
|
984
1014
|
return Math.random().toString(16).slice(2);
|
|
985
1015
|
}
|
|
986
1016
|
|
|
987
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
1017
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/index.mjs
|
|
988
1018
|
var BatchInterceptor = class extends Interceptor {
|
|
989
1019
|
constructor(options) {
|
|
990
1020
|
BatchInterceptor.symbol = Symbol(options.name);
|
|
@@ -1120,6 +1150,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
1120
1150
|
context.workerChannel.send("CLIENT_CLOSED");
|
|
1121
1151
|
}
|
|
1122
1152
|
window.clearInterval(context.keepAliveInterval);
|
|
1153
|
+
localStorage.removeItem(MSW_WEBSOCKET_CLIENTS_KEY);
|
|
1123
1154
|
});
|
|
1124
1155
|
await checkWorkerIntegrity(context).catch((error2) => {
|
|
1125
1156
|
devUtils7.error(
|
|
@@ -1158,7 +1189,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
1158
1189
|
|
|
1159
1190
|
// src/browser/setupWorker/stop/createStop.ts
|
|
1160
1191
|
import { devUtils as devUtils9 } from '../core/utils/internal/devUtils.mjs';
|
|
1161
|
-
import { MSW_WEBSOCKET_CLIENTS_KEY } from '../core/ws/WebSocketClientManager.mjs';
|
|
1192
|
+
import { MSW_WEBSOCKET_CLIENTS_KEY as MSW_WEBSOCKET_CLIENTS_KEY2 } from '../core/ws/WebSocketClientManager.mjs';
|
|
1162
1193
|
|
|
1163
1194
|
// src/browser/setupWorker/stop/utils/printStopMessage.ts
|
|
1164
1195
|
import { devUtils as devUtils8 } from '../core/utils/internal/devUtils.mjs';
|
|
@@ -1184,7 +1215,7 @@ var createStop = (context) => {
|
|
|
1184
1215
|
context.workerChannel.send("MOCK_DEACTIVATE");
|
|
1185
1216
|
context.isMockingEnabled = false;
|
|
1186
1217
|
window.clearInterval(context.keepAliveInterval);
|
|
1187
|
-
localStorage.removeItem(
|
|
1218
|
+
localStorage.removeItem(MSW_WEBSOCKET_CLIENTS_KEY2);
|
|
1188
1219
|
printStopMessage({ quiet: context.startOptions?.quiet });
|
|
1189
1220
|
};
|
|
1190
1221
|
};
|
|
@@ -1270,7 +1301,7 @@ var DeferredPromise = class extends Promise {
|
|
|
1270
1301
|
}
|
|
1271
1302
|
};
|
|
1272
1303
|
|
|
1273
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
1304
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-OUWBQF3Z.mjs
|
|
1274
1305
|
var RequestController = class {
|
|
1275
1306
|
constructor(request) {
|
|
1276
1307
|
this.request = request;
|
|
@@ -1308,15 +1339,7 @@ async function emitAsync(emitter, eventName, ...data) {
|
|
|
1308
1339
|
}
|
|
1309
1340
|
}
|
|
1310
1341
|
|
|
1311
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
1312
|
-
function isPropertyAccessible(obj, key) {
|
|
1313
|
-
try {
|
|
1314
|
-
obj[key];
|
|
1315
|
-
return true;
|
|
1316
|
-
} catch (e) {
|
|
1317
|
-
return false;
|
|
1318
|
-
}
|
|
1319
|
-
}
|
|
1342
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-MAEPOYB6.mjs
|
|
1320
1343
|
function canParseUrl(url) {
|
|
1321
1344
|
try {
|
|
1322
1345
|
new URL(url);
|
|
@@ -1369,64 +1392,113 @@ var _FetchInterceptor = class extends Interceptor {
|
|
|
1369
1392
|
{ once: true }
|
|
1370
1393
|
);
|
|
1371
1394
|
}
|
|
1372
|
-
const
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1395
|
+
const responsePromise = new DeferredPromise();
|
|
1396
|
+
const respondWith = (response) => {
|
|
1397
|
+
this.logger.info("responding with a mock response:", response);
|
|
1398
|
+
if (this.emitter.listenerCount("response") > 0) {
|
|
1399
|
+
this.logger.info('emitting the "response" event...');
|
|
1400
|
+
const responseClone = response.clone();
|
|
1401
|
+
this.emitter.emit("response", {
|
|
1402
|
+
response: responseClone,
|
|
1403
|
+
isMockedResponse: true,
|
|
1404
|
+
request: interactiveRequest,
|
|
1405
|
+
requestId
|
|
1406
|
+
});
|
|
1407
|
+
}
|
|
1408
|
+
Object.defineProperty(response, "url", {
|
|
1409
|
+
writable: false,
|
|
1410
|
+
enumerable: true,
|
|
1411
|
+
configurable: false,
|
|
1412
|
+
value: request.url
|
|
1376
1413
|
});
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1414
|
+
responsePromise.resolve(response);
|
|
1415
|
+
};
|
|
1416
|
+
const errorWith = (reason) => {
|
|
1417
|
+
responsePromise.reject(reason);
|
|
1418
|
+
};
|
|
1419
|
+
const resolverResult = await until(
|
|
1420
|
+
async () => {
|
|
1421
|
+
const listenersFinished = emitAsync(this.emitter, "request", {
|
|
1422
|
+
request: interactiveRequest,
|
|
1423
|
+
requestId
|
|
1424
|
+
});
|
|
1425
|
+
await Promise.race([
|
|
1426
|
+
requestAborted,
|
|
1427
|
+
// Put the listeners invocation Promise in the same race condition
|
|
1428
|
+
// with the request abort Promise because otherwise awaiting the listeners
|
|
1429
|
+
// would always yield some response (or undefined).
|
|
1430
|
+
listenersFinished,
|
|
1431
|
+
requestController.responsePromise
|
|
1432
|
+
]);
|
|
1433
|
+
this.logger.info("all request listeners have been resolved!");
|
|
1434
|
+
const mockedResponse2 = await requestController.responsePromise;
|
|
1435
|
+
this.logger.info("event.respondWith called with:", mockedResponse2);
|
|
1436
|
+
return mockedResponse2;
|
|
1437
|
+
}
|
|
1438
|
+
);
|
|
1390
1439
|
if (requestAborted.state === "rejected") {
|
|
1391
|
-
|
|
1440
|
+
this.logger.info(
|
|
1441
|
+
"request has been aborted:",
|
|
1442
|
+
requestAborted.rejectionReason
|
|
1443
|
+
);
|
|
1444
|
+
responsePromise.reject(requestAborted.rejectionReason);
|
|
1445
|
+
return responsePromise;
|
|
1392
1446
|
}
|
|
1393
1447
|
if (resolverResult.error) {
|
|
1394
|
-
|
|
1448
|
+
this.logger.info(
|
|
1449
|
+
"request listerner threw an error:",
|
|
1450
|
+
resolverResult.error
|
|
1451
|
+
);
|
|
1452
|
+
if (resolverResult.error instanceof Response) {
|
|
1453
|
+
if (isResponseError(resolverResult.error)) {
|
|
1454
|
+
errorWith(createNetworkError(resolverResult.error));
|
|
1455
|
+
} else {
|
|
1456
|
+
respondWith(resolverResult.error);
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
if (this.emitter.listenerCount("unhandledException") > 0) {
|
|
1460
|
+
await emitAsync(this.emitter, "unhandledException", {
|
|
1461
|
+
error: resolverResult.error,
|
|
1462
|
+
request,
|
|
1463
|
+
requestId,
|
|
1464
|
+
controller: {
|
|
1465
|
+
respondWith,
|
|
1466
|
+
errorWith
|
|
1467
|
+
}
|
|
1468
|
+
});
|
|
1469
|
+
if (responsePromise.state !== "pending") {
|
|
1470
|
+
return responsePromise;
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
respondWith(createServerErrorResponse(resolverResult.error));
|
|
1474
|
+
return responsePromise;
|
|
1395
1475
|
}
|
|
1396
1476
|
const mockedResponse = resolverResult.data;
|
|
1397
1477
|
if (mockedResponse && !((_a = request.signal) == null ? void 0 : _a.aborted)) {
|
|
1398
1478
|
this.logger.info("received mocked response:", mockedResponse);
|
|
1399
|
-
if (
|
|
1479
|
+
if (isResponseError(mockedResponse)) {
|
|
1400
1480
|
this.logger.info(
|
|
1401
1481
|
"received a network error response, rejecting the request promise..."
|
|
1402
1482
|
);
|
|
1403
|
-
|
|
1483
|
+
errorWith(createNetworkError(mockedResponse));
|
|
1484
|
+
} else {
|
|
1485
|
+
respondWith(mockedResponse);
|
|
1404
1486
|
}
|
|
1405
|
-
|
|
1406
|
-
this.emitter.emit("response", {
|
|
1407
|
-
response: responseClone,
|
|
1408
|
-
isMockedResponse: true,
|
|
1409
|
-
request: interactiveRequest,
|
|
1410
|
-
requestId
|
|
1411
|
-
});
|
|
1412
|
-
Object.defineProperty(mockedResponse, "url", {
|
|
1413
|
-
writable: false,
|
|
1414
|
-
enumerable: true,
|
|
1415
|
-
configurable: false,
|
|
1416
|
-
value: request.url
|
|
1417
|
-
});
|
|
1418
|
-
return mockedResponse;
|
|
1487
|
+
return responsePromise;
|
|
1419
1488
|
}
|
|
1420
1489
|
this.logger.info("no mocked response received!");
|
|
1421
1490
|
return pureFetch(request).then((response) => {
|
|
1422
|
-
|
|
1423
|
-
this.
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1491
|
+
this.logger.info("original fetch performed", response);
|
|
1492
|
+
if (this.emitter.listenerCount("response") > 0) {
|
|
1493
|
+
this.logger.info('emitting the "response" event...');
|
|
1494
|
+
const responseClone = response.clone();
|
|
1495
|
+
this.emitter.emit("response", {
|
|
1496
|
+
response: responseClone,
|
|
1497
|
+
isMockedResponse: false,
|
|
1498
|
+
request: interactiveRequest,
|
|
1499
|
+
requestId
|
|
1500
|
+
});
|
|
1501
|
+
}
|
|
1430
1502
|
return response;
|
|
1431
1503
|
});
|
|
1432
1504
|
};
|
|
@@ -1455,7 +1527,7 @@ function createNetworkError(cause) {
|
|
|
1455
1527
|
});
|
|
1456
1528
|
}
|
|
1457
1529
|
|
|
1458
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.
|
|
1530
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-732REFPX.mjs
|
|
1459
1531
|
function concatArrayBuffer(left, right) {
|
|
1460
1532
|
const result = new Uint8Array(left.byteLength + right.byteLength);
|
|
1461
1533
|
result.set(left, 0);
|
|
@@ -2106,7 +2178,31 @@ function createXMLHttpRequestProxy({
|
|
|
2106
2178
|
"request listener threw an exception, aborting request...",
|
|
2107
2179
|
resolverResult.error
|
|
2108
2180
|
);
|
|
2109
|
-
|
|
2181
|
+
if (resolverResult.error instanceof Response) {
|
|
2182
|
+
if (isResponseError(resolverResult.error)) {
|
|
2183
|
+
xhrRequestController.errorWith(new TypeError("Network error"));
|
|
2184
|
+
} else {
|
|
2185
|
+
this.respondWith(resolverResult.error);
|
|
2186
|
+
}
|
|
2187
|
+
return;
|
|
2188
|
+
}
|
|
2189
|
+
if (emitter.listenerCount("unhandledException") > 0) {
|
|
2190
|
+
await emitAsync(emitter, "unhandledException", {
|
|
2191
|
+
error: resolverResult.error,
|
|
2192
|
+
request,
|
|
2193
|
+
requestId,
|
|
2194
|
+
controller: {
|
|
2195
|
+
respondWith: xhrRequestController.respondWith.bind(xhrRequestController),
|
|
2196
|
+
errorWith: xhrRequestController.errorWith.bind(xhrRequestController)
|
|
2197
|
+
}
|
|
2198
|
+
});
|
|
2199
|
+
if (originalRequest.readyState > XMLHttpRequest.OPENED) {
|
|
2200
|
+
return;
|
|
2201
|
+
}
|
|
2202
|
+
}
|
|
2203
|
+
xhrRequestController.respondWith(
|
|
2204
|
+
createServerErrorResponse(resolverResult.error)
|
|
2205
|
+
);
|
|
2110
2206
|
return;
|
|
2111
2207
|
}
|
|
2112
2208
|
const mockedResponse = resolverResult.data;
|
|
@@ -2116,7 +2212,7 @@ function createXMLHttpRequestProxy({
|
|
|
2116
2212
|
mockedResponse.status,
|
|
2117
2213
|
mockedResponse.statusText
|
|
2118
2214
|
);
|
|
2119
|
-
if (mockedResponse
|
|
2215
|
+
if (isResponseError(mockedResponse)) {
|
|
2120
2216
|
this.logger.info(
|
|
2121
2217
|
"received a network error response, rejecting the request promise..."
|
|
2122
2218
|
);
|