msw 2.11.6 → 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/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 +815 -252
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/package.json +4 -3
- 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/iife/index.js
CHANGED
|
@@ -13447,6 +13447,7 @@ ${operationTypes.join("\n")}
|
|
|
13447
13447
|
onUnhandledRequest: () => onUnhandledRequest,
|
|
13448
13448
|
passthrough: () => passthrough,
|
|
13449
13449
|
setupWorker: () => setupWorker,
|
|
13450
|
+
sse: () => sse,
|
|
13450
13451
|
ws: () => ws
|
|
13451
13452
|
});
|
|
13452
13453
|
|
|
@@ -19288,6 +19289,820 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
19288
19289
|
link: createWebSocketLinkHandler
|
|
19289
19290
|
};
|
|
19290
19291
|
|
|
19292
|
+
// src/core/delay.ts
|
|
19293
|
+
var SET_TIMEOUT_MAX_ALLOWED_INT = 2147483647;
|
|
19294
|
+
var MIN_SERVER_RESPONSE_TIME = 100;
|
|
19295
|
+
var MAX_SERVER_RESPONSE_TIME = 400;
|
|
19296
|
+
var NODE_SERVER_RESPONSE_TIME = 5;
|
|
19297
|
+
function getRealisticResponseTime() {
|
|
19298
|
+
if (isNodeProcess()) {
|
|
19299
|
+
return NODE_SERVER_RESPONSE_TIME;
|
|
19300
|
+
}
|
|
19301
|
+
return Math.floor(
|
|
19302
|
+
Math.random() * (MAX_SERVER_RESPONSE_TIME - MIN_SERVER_RESPONSE_TIME) + MIN_SERVER_RESPONSE_TIME
|
|
19303
|
+
);
|
|
19304
|
+
}
|
|
19305
|
+
async function delay(durationOrMode) {
|
|
19306
|
+
let delayTime;
|
|
19307
|
+
if (typeof durationOrMode === "string") {
|
|
19308
|
+
switch (durationOrMode) {
|
|
19309
|
+
case "infinite": {
|
|
19310
|
+
delayTime = SET_TIMEOUT_MAX_ALLOWED_INT;
|
|
19311
|
+
break;
|
|
19312
|
+
}
|
|
19313
|
+
case "real": {
|
|
19314
|
+
delayTime = getRealisticResponseTime();
|
|
19315
|
+
break;
|
|
19316
|
+
}
|
|
19317
|
+
default: {
|
|
19318
|
+
throw new Error(
|
|
19319
|
+
`Failed to delay a response: unknown delay mode "${durationOrMode}". Please make sure you provide one of the supported modes ("real", "infinite") or a number.`
|
|
19320
|
+
);
|
|
19321
|
+
}
|
|
19322
|
+
}
|
|
19323
|
+
} else if (typeof durationOrMode === "undefined") {
|
|
19324
|
+
delayTime = getRealisticResponseTime();
|
|
19325
|
+
} else {
|
|
19326
|
+
if (durationOrMode > SET_TIMEOUT_MAX_ALLOWED_INT) {
|
|
19327
|
+
throw new Error(
|
|
19328
|
+
`Failed to delay a response: provided delay duration (${durationOrMode}) exceeds the maximum allowed duration for "setTimeout" (${SET_TIMEOUT_MAX_ALLOWED_INT}). This will cause the response to be returned immediately. Please use a number within the allowed range to delay the response by exact duration, or consider the "infinite" delay mode to delay the response indefinitely.`
|
|
19329
|
+
);
|
|
19330
|
+
}
|
|
19331
|
+
delayTime = durationOrMode;
|
|
19332
|
+
}
|
|
19333
|
+
return new Promise((resolve) => setTimeout(resolve, delayTime));
|
|
19334
|
+
}
|
|
19335
|
+
|
|
19336
|
+
// src/core/utils/internal/isObject.ts
|
|
19337
|
+
function isObject2(value) {
|
|
19338
|
+
return value != null && typeof value === "object" && !Array.isArray(value);
|
|
19339
|
+
}
|
|
19340
|
+
|
|
19341
|
+
// src/core/ws/utils/getMessageLength.ts
|
|
19342
|
+
function getMessageLength(data) {
|
|
19343
|
+
if (data instanceof Blob) {
|
|
19344
|
+
return data.size;
|
|
19345
|
+
}
|
|
19346
|
+
if (isObject2(data) && "byteLength" in data) {
|
|
19347
|
+
return data.byteLength;
|
|
19348
|
+
}
|
|
19349
|
+
return new Blob([data]).size;
|
|
19350
|
+
}
|
|
19351
|
+
|
|
19352
|
+
// src/core/ws/utils/truncateMessage.ts
|
|
19353
|
+
var MAX_LENGTH = 24;
|
|
19354
|
+
function truncateMessage(message4) {
|
|
19355
|
+
if (message4.length <= MAX_LENGTH) {
|
|
19356
|
+
return message4;
|
|
19357
|
+
}
|
|
19358
|
+
return `${message4.slice(0, MAX_LENGTH)}\u2026`;
|
|
19359
|
+
}
|
|
19360
|
+
|
|
19361
|
+
// src/core/ws/utils/getPublicData.ts
|
|
19362
|
+
async function getPublicData(data) {
|
|
19363
|
+
if (data instanceof Blob) {
|
|
19364
|
+
const text = await data.text();
|
|
19365
|
+
return `Blob(${truncateMessage(text)})`;
|
|
19366
|
+
}
|
|
19367
|
+
if (isObject2(data)) {
|
|
19368
|
+
const text = new TextDecoder().decode(data);
|
|
19369
|
+
return `ArrayBuffer(${truncateMessage(text)})`;
|
|
19370
|
+
}
|
|
19371
|
+
return truncateMessage(data);
|
|
19372
|
+
}
|
|
19373
|
+
|
|
19374
|
+
// src/core/ws/utils/attachWebSocketLogger.ts
|
|
19375
|
+
var colors = {
|
|
19376
|
+
system: "#3b82f6",
|
|
19377
|
+
outgoing: "#22c55e",
|
|
19378
|
+
incoming: "#ef4444",
|
|
19379
|
+
mocked: "#ff6a33"
|
|
19380
|
+
};
|
|
19381
|
+
function attachWebSocketLogger(connection) {
|
|
19382
|
+
const { client, server } = connection;
|
|
19383
|
+
logConnectionOpen(client);
|
|
19384
|
+
client.addEventListener("message", (event) => {
|
|
19385
|
+
logOutgoingClientMessage(event);
|
|
19386
|
+
});
|
|
19387
|
+
client.addEventListener("close", (event) => {
|
|
19388
|
+
logConnectionClose(event);
|
|
19389
|
+
});
|
|
19390
|
+
client.socket.addEventListener("error", (event) => {
|
|
19391
|
+
logClientError(event);
|
|
19392
|
+
});
|
|
19393
|
+
client.send = new Proxy(client.send, {
|
|
19394
|
+
apply(target, thisArg, args) {
|
|
19395
|
+
const [data] = args;
|
|
19396
|
+
const messageEvent = new MessageEvent("message", { data });
|
|
19397
|
+
Object.defineProperties(messageEvent, {
|
|
19398
|
+
currentTarget: {
|
|
19399
|
+
enumerable: true,
|
|
19400
|
+
writable: false,
|
|
19401
|
+
value: client.socket
|
|
19402
|
+
},
|
|
19403
|
+
target: {
|
|
19404
|
+
enumerable: true,
|
|
19405
|
+
writable: false,
|
|
19406
|
+
value: client.socket
|
|
19407
|
+
}
|
|
19408
|
+
});
|
|
19409
|
+
queueMicrotask(() => {
|
|
19410
|
+
logIncomingMockedClientMessage(messageEvent);
|
|
19411
|
+
});
|
|
19412
|
+
return Reflect.apply(target, thisArg, args);
|
|
19413
|
+
}
|
|
19414
|
+
});
|
|
19415
|
+
server.addEventListener(
|
|
19416
|
+
"open",
|
|
19417
|
+
() => {
|
|
19418
|
+
server.addEventListener("message", (event) => {
|
|
19419
|
+
logIncomingServerMessage(event);
|
|
19420
|
+
});
|
|
19421
|
+
},
|
|
19422
|
+
{ once: true }
|
|
19423
|
+
);
|
|
19424
|
+
server.send = new Proxy(server.send, {
|
|
19425
|
+
apply(target, thisArg, args) {
|
|
19426
|
+
const [data] = args;
|
|
19427
|
+
const messageEvent = new MessageEvent("message", { data });
|
|
19428
|
+
Object.defineProperties(messageEvent, {
|
|
19429
|
+
currentTarget: {
|
|
19430
|
+
enumerable: true,
|
|
19431
|
+
writable: false,
|
|
19432
|
+
value: server.socket
|
|
19433
|
+
},
|
|
19434
|
+
target: {
|
|
19435
|
+
enumerable: true,
|
|
19436
|
+
writable: false,
|
|
19437
|
+
value: server.socket
|
|
19438
|
+
}
|
|
19439
|
+
});
|
|
19440
|
+
logOutgoingMockedClientMessage(messageEvent);
|
|
19441
|
+
return Reflect.apply(target, thisArg, args);
|
|
19442
|
+
}
|
|
19443
|
+
});
|
|
19444
|
+
}
|
|
19445
|
+
function logConnectionOpen(client) {
|
|
19446
|
+
const publicUrl = toPublicUrl(client.url);
|
|
19447
|
+
console.groupCollapsed(
|
|
19448
|
+
devUtils.formatMessage(`${getTimestamp()} %c\u25B6%c ${publicUrl}`),
|
|
19449
|
+
`color:${colors.system}`,
|
|
19450
|
+
"color:inherit"
|
|
19451
|
+
);
|
|
19452
|
+
console.log("Client:", client.socket);
|
|
19453
|
+
console.groupEnd();
|
|
19454
|
+
}
|
|
19455
|
+
function logConnectionClose(event) {
|
|
19456
|
+
const target = event.target;
|
|
19457
|
+
const publicUrl = toPublicUrl(target.url);
|
|
19458
|
+
console.groupCollapsed(
|
|
19459
|
+
devUtils.formatMessage(
|
|
19460
|
+
`${getTimestamp({ milliseconds: true })} %c\u25A0%c ${publicUrl}`
|
|
19461
|
+
),
|
|
19462
|
+
`color:${colors.system}`,
|
|
19463
|
+
"color:inherit"
|
|
19464
|
+
);
|
|
19465
|
+
console.log(event);
|
|
19466
|
+
console.groupEnd();
|
|
19467
|
+
}
|
|
19468
|
+
function logClientError(event) {
|
|
19469
|
+
const socket = event.target;
|
|
19470
|
+
const publicUrl = toPublicUrl(socket.url);
|
|
19471
|
+
console.groupCollapsed(
|
|
19472
|
+
devUtils.formatMessage(
|
|
19473
|
+
`${getTimestamp({ milliseconds: true })} %c\xD7%c ${publicUrl}`
|
|
19474
|
+
),
|
|
19475
|
+
`color:${colors.system}`,
|
|
19476
|
+
"color:inherit"
|
|
19477
|
+
);
|
|
19478
|
+
console.log(event);
|
|
19479
|
+
console.groupEnd();
|
|
19480
|
+
}
|
|
19481
|
+
async function logOutgoingClientMessage(event) {
|
|
19482
|
+
const byteLength = getMessageLength(event.data);
|
|
19483
|
+
const publicData = await getPublicData(event.data);
|
|
19484
|
+
const arrow = event.defaultPrevented ? "\u21E1" : "\u2B06";
|
|
19485
|
+
console.groupCollapsed(
|
|
19486
|
+
devUtils.formatMessage(
|
|
19487
|
+
`${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`
|
|
19488
|
+
),
|
|
19489
|
+
`color:${colors.outgoing}`,
|
|
19490
|
+
"color:inherit",
|
|
19491
|
+
"color:gray;font-weight:normal",
|
|
19492
|
+
"color:inherit;font-weight:inherit"
|
|
19493
|
+
);
|
|
19494
|
+
console.log(event);
|
|
19495
|
+
console.groupEnd();
|
|
19496
|
+
}
|
|
19497
|
+
async function logOutgoingMockedClientMessage(event) {
|
|
19498
|
+
const byteLength = getMessageLength(event.data);
|
|
19499
|
+
const publicData = await getPublicData(event.data);
|
|
19500
|
+
console.groupCollapsed(
|
|
19501
|
+
devUtils.formatMessage(
|
|
19502
|
+
`${getTimestamp({ milliseconds: true })} %c\u2B06%c ${publicData} %c${byteLength}%c`
|
|
19503
|
+
),
|
|
19504
|
+
`color:${colors.mocked}`,
|
|
19505
|
+
"color:inherit",
|
|
19506
|
+
"color:gray;font-weight:normal",
|
|
19507
|
+
"color:inherit;font-weight:inherit"
|
|
19508
|
+
);
|
|
19509
|
+
console.log(event);
|
|
19510
|
+
console.groupEnd();
|
|
19511
|
+
}
|
|
19512
|
+
async function logIncomingMockedClientMessage(event) {
|
|
19513
|
+
const byteLength = getMessageLength(event.data);
|
|
19514
|
+
const publicData = await getPublicData(event.data);
|
|
19515
|
+
console.groupCollapsed(
|
|
19516
|
+
devUtils.formatMessage(
|
|
19517
|
+
`${getTimestamp({ milliseconds: true })} %c\u2B07%c ${publicData} %c${byteLength}%c`
|
|
19518
|
+
),
|
|
19519
|
+
`color:${colors.mocked}`,
|
|
19520
|
+
"color:inherit",
|
|
19521
|
+
"color:gray;font-weight:normal",
|
|
19522
|
+
"color:inherit;font-weight:inherit"
|
|
19523
|
+
);
|
|
19524
|
+
console.log(event);
|
|
19525
|
+
console.groupEnd();
|
|
19526
|
+
}
|
|
19527
|
+
async function logIncomingServerMessage(event) {
|
|
19528
|
+
const byteLength = getMessageLength(event.data);
|
|
19529
|
+
const publicData = await getPublicData(event.data);
|
|
19530
|
+
const arrow = event.defaultPrevented ? "\u21E3" : "\u2B07";
|
|
19531
|
+
console.groupCollapsed(
|
|
19532
|
+
devUtils.formatMessage(
|
|
19533
|
+
`${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`
|
|
19534
|
+
),
|
|
19535
|
+
`color:${colors.incoming}`,
|
|
19536
|
+
"color:inherit",
|
|
19537
|
+
"color:gray;font-weight:normal",
|
|
19538
|
+
"color:inherit;font-weight:inherit"
|
|
19539
|
+
);
|
|
19540
|
+
console.log(event);
|
|
19541
|
+
console.groupEnd();
|
|
19542
|
+
}
|
|
19543
|
+
|
|
19544
|
+
// src/core/sse.ts
|
|
19545
|
+
var sse = (path, resolver) => {
|
|
19546
|
+
return new ServerSentEventHandler(path, resolver);
|
|
19547
|
+
};
|
|
19548
|
+
var ServerSentEventHandler = class extends HttpHandler {
|
|
19549
|
+
constructor(path, resolver) {
|
|
19550
|
+
invariant(
|
|
19551
|
+
typeof EventSource !== "undefined",
|
|
19552
|
+
'Failed to construct a Server-Sent Event handler for path "%s": the EventSource API is not supported in this environment',
|
|
19553
|
+
path
|
|
19554
|
+
);
|
|
19555
|
+
const clientEmitter = new Emitter();
|
|
19556
|
+
super("GET", path, async (info) => {
|
|
19557
|
+
const responseInit = {
|
|
19558
|
+
headers: {
|
|
19559
|
+
"content-type": "text/event-stream",
|
|
19560
|
+
"cache-control": "no-cache",
|
|
19561
|
+
connection: "keep-alive"
|
|
19562
|
+
}
|
|
19563
|
+
};
|
|
19564
|
+
await super.log({
|
|
19565
|
+
request: info.request,
|
|
19566
|
+
/**
|
|
19567
|
+
* @note Construct a placeholder response since SSE response
|
|
19568
|
+
* is being streamed and cannot be cloned/consumed for logging.
|
|
19569
|
+
*/
|
|
19570
|
+
response: new Response("[streaming]", responseInit)
|
|
19571
|
+
});
|
|
19572
|
+
this.#attachClientLogger(info.request, clientEmitter);
|
|
19573
|
+
const stream = new ReadableStream({
|
|
19574
|
+
async start(controller) {
|
|
19575
|
+
const client = new ServerSentEventClient({
|
|
19576
|
+
controller,
|
|
19577
|
+
emitter: clientEmitter
|
|
19578
|
+
});
|
|
19579
|
+
const server = new ServerSentEventServer({
|
|
19580
|
+
request: info.request,
|
|
19581
|
+
client
|
|
19582
|
+
});
|
|
19583
|
+
await resolver({
|
|
19584
|
+
...info,
|
|
19585
|
+
client,
|
|
19586
|
+
server
|
|
19587
|
+
});
|
|
19588
|
+
}
|
|
19589
|
+
});
|
|
19590
|
+
return new Response(stream, responseInit);
|
|
19591
|
+
});
|
|
19592
|
+
}
|
|
19593
|
+
async predicate(args) {
|
|
19594
|
+
if (args.request.headers.get("accept") !== "text/event-stream") {
|
|
19595
|
+
return false;
|
|
19596
|
+
}
|
|
19597
|
+
return super.predicate(args);
|
|
19598
|
+
}
|
|
19599
|
+
async log(_args) {
|
|
19600
|
+
return;
|
|
19601
|
+
}
|
|
19602
|
+
#attachClientLogger(request, emitter) {
|
|
19603
|
+
const publicUrl = toPublicUrl(request.url);
|
|
19604
|
+
emitter.on("message", (payload) => {
|
|
19605
|
+
console.groupCollapsed(
|
|
19606
|
+
devUtils.formatMessage(
|
|
19607
|
+
`${getTimestamp()} SSE %s %c\u21E3%c ${payload.event}`
|
|
19608
|
+
),
|
|
19609
|
+
publicUrl,
|
|
19610
|
+
`color:${colors.mocked}`,
|
|
19611
|
+
"color:inherit"
|
|
19612
|
+
);
|
|
19613
|
+
console.log(payload.frames);
|
|
19614
|
+
console.groupEnd();
|
|
19615
|
+
});
|
|
19616
|
+
emitter.on("error", () => {
|
|
19617
|
+
console.groupCollapsed(
|
|
19618
|
+
devUtils.formatMessage(`${getTimestamp()} SSE %s %c\xD7%c error`),
|
|
19619
|
+
publicUrl,
|
|
19620
|
+
`color: ${colors.system}`,
|
|
19621
|
+
"color:inherit"
|
|
19622
|
+
);
|
|
19623
|
+
console.log("Handler:", this);
|
|
19624
|
+
console.groupEnd();
|
|
19625
|
+
});
|
|
19626
|
+
emitter.on("close", () => {
|
|
19627
|
+
console.groupCollapsed(
|
|
19628
|
+
devUtils.formatMessage(`${getTimestamp()} SSE %s %c\u25A0%c close`),
|
|
19629
|
+
publicUrl,
|
|
19630
|
+
`colors:${colors.system}`,
|
|
19631
|
+
"color:inherit"
|
|
19632
|
+
);
|
|
19633
|
+
console.log("Handler:", this);
|
|
19634
|
+
console.groupEnd();
|
|
19635
|
+
});
|
|
19636
|
+
}
|
|
19637
|
+
};
|
|
19638
|
+
var ServerSentEventClient = class {
|
|
19639
|
+
#encoder;
|
|
19640
|
+
#controller;
|
|
19641
|
+
#emitter;
|
|
19642
|
+
constructor(args) {
|
|
19643
|
+
this.#encoder = new TextEncoder();
|
|
19644
|
+
this.#controller = args.controller;
|
|
19645
|
+
this.#emitter = args.emitter;
|
|
19646
|
+
}
|
|
19647
|
+
/**
|
|
19648
|
+
* Sends the given payload to the intercepted `EventSource`.
|
|
19649
|
+
*/
|
|
19650
|
+
send(payload) {
|
|
19651
|
+
if ("retry" in payload && payload.retry != null) {
|
|
19652
|
+
this.#sendRetry(payload.retry);
|
|
19653
|
+
return;
|
|
19654
|
+
}
|
|
19655
|
+
this.#sendMessage({
|
|
19656
|
+
id: payload.id,
|
|
19657
|
+
event: payload.event,
|
|
19658
|
+
data: typeof payload.data === "object" ? JSON.stringify(payload.data) : payload.data
|
|
19659
|
+
});
|
|
19660
|
+
}
|
|
19661
|
+
/**
|
|
19662
|
+
* Dispatches the given event on the intercepted `EventSource`.
|
|
19663
|
+
*/
|
|
19664
|
+
dispatchEvent(event) {
|
|
19665
|
+
if (event instanceof MessageEvent) {
|
|
19666
|
+
this.#sendMessage({
|
|
19667
|
+
id: event.lastEventId || void 0,
|
|
19668
|
+
event: event.type === "message" ? void 0 : event.type,
|
|
19669
|
+
data: event.data
|
|
19670
|
+
});
|
|
19671
|
+
return;
|
|
19672
|
+
}
|
|
19673
|
+
if (event.type === "error") {
|
|
19674
|
+
this.error();
|
|
19675
|
+
return;
|
|
19676
|
+
}
|
|
19677
|
+
if (event.type === "close") {
|
|
19678
|
+
this.close();
|
|
19679
|
+
return;
|
|
19680
|
+
}
|
|
19681
|
+
}
|
|
19682
|
+
/**
|
|
19683
|
+
* Errors the underlying `EventSource`, closing the connection with an error.
|
|
19684
|
+
* This is equivalent to aborting the connection and will produce a `TypeError: Failed to fetch`
|
|
19685
|
+
* error.
|
|
19686
|
+
*/
|
|
19687
|
+
error() {
|
|
19688
|
+
this.#controller.error();
|
|
19689
|
+
this.#emitter.emit("error");
|
|
19690
|
+
}
|
|
19691
|
+
/**
|
|
19692
|
+
* Closes the underlying `EventSource`, closing the connection.
|
|
19693
|
+
*/
|
|
19694
|
+
close() {
|
|
19695
|
+
this.#controller.close();
|
|
19696
|
+
this.#emitter.emit("close");
|
|
19697
|
+
}
|
|
19698
|
+
#sendRetry(retry) {
|
|
19699
|
+
if (typeof retry === "number") {
|
|
19700
|
+
this.#controller.enqueue(this.#encoder.encode(`retry:${retry}
|
|
19701
|
+
|
|
19702
|
+
`));
|
|
19703
|
+
}
|
|
19704
|
+
}
|
|
19705
|
+
#sendMessage(message4) {
|
|
19706
|
+
const frames = [];
|
|
19707
|
+
if (message4.id) {
|
|
19708
|
+
frames.push(`id:${message4.id}`);
|
|
19709
|
+
}
|
|
19710
|
+
if (message4.event) {
|
|
19711
|
+
frames.push(`event:${message4.event?.toString()}`);
|
|
19712
|
+
}
|
|
19713
|
+
frames.push(`data:${message4.data}`);
|
|
19714
|
+
frames.push("", "");
|
|
19715
|
+
this.#controller.enqueue(this.#encoder.encode(frames.join("\n")));
|
|
19716
|
+
this.#emitter.emit("message", {
|
|
19717
|
+
id: message4.id,
|
|
19718
|
+
event: message4.event?.toString() || "message",
|
|
19719
|
+
data: message4.data,
|
|
19720
|
+
frames
|
|
19721
|
+
});
|
|
19722
|
+
}
|
|
19723
|
+
};
|
|
19724
|
+
var ServerSentEventServer = class {
|
|
19725
|
+
#request;
|
|
19726
|
+
#client;
|
|
19727
|
+
constructor(args) {
|
|
19728
|
+
this.#request = args.request;
|
|
19729
|
+
this.#client = args.client;
|
|
19730
|
+
}
|
|
19731
|
+
/**
|
|
19732
|
+
* Establishes the actual connection for this SSE request
|
|
19733
|
+
* and returns the `EventSource` instance.
|
|
19734
|
+
*/
|
|
19735
|
+
connect() {
|
|
19736
|
+
const source = new ObservableEventSource(this.#request.url, {
|
|
19737
|
+
withCredentials: this.#request.credentials === "include",
|
|
19738
|
+
headers: {
|
|
19739
|
+
/**
|
|
19740
|
+
* @note Mark this request as passthrough so it doesn't trigger
|
|
19741
|
+
* an infinite loop matching against the existing request handler.
|
|
19742
|
+
*/
|
|
19743
|
+
accept: "msw/passthrough"
|
|
19744
|
+
}
|
|
19745
|
+
});
|
|
19746
|
+
source[kOnAnyMessage] = (event) => {
|
|
19747
|
+
Object.defineProperties(event, {
|
|
19748
|
+
target: {
|
|
19749
|
+
value: this,
|
|
19750
|
+
enumerable: true,
|
|
19751
|
+
writable: true,
|
|
19752
|
+
configurable: true
|
|
19753
|
+
}
|
|
19754
|
+
});
|
|
19755
|
+
queueMicrotask(() => {
|
|
19756
|
+
if (!event.defaultPrevented) {
|
|
19757
|
+
this.#client.dispatchEvent(event);
|
|
19758
|
+
}
|
|
19759
|
+
});
|
|
19760
|
+
};
|
|
19761
|
+
source.addEventListener("error", (event) => {
|
|
19762
|
+
Object.defineProperties(event, {
|
|
19763
|
+
target: {
|
|
19764
|
+
value: this,
|
|
19765
|
+
enumerable: true,
|
|
19766
|
+
writable: true,
|
|
19767
|
+
configurable: true
|
|
19768
|
+
}
|
|
19769
|
+
});
|
|
19770
|
+
queueMicrotask(() => {
|
|
19771
|
+
if (!event.defaultPrevented) {
|
|
19772
|
+
this.#client.dispatchEvent(event);
|
|
19773
|
+
}
|
|
19774
|
+
});
|
|
19775
|
+
});
|
|
19776
|
+
return source;
|
|
19777
|
+
}
|
|
19778
|
+
};
|
|
19779
|
+
var kRequest = Symbol("kRequest");
|
|
19780
|
+
var kReconnectionTime = Symbol("kReconnectionTime");
|
|
19781
|
+
var kLastEventId = Symbol("kLastEventId");
|
|
19782
|
+
var kAbortController = Symbol("kAbortController");
|
|
19783
|
+
var kOnOpen = Symbol("kOnOpen");
|
|
19784
|
+
var kOnMessage = Symbol("kOnMessage");
|
|
19785
|
+
var kOnAnyMessage = Symbol("kOnAnyMessage");
|
|
19786
|
+
var kOnError = Symbol("kOnError");
|
|
19787
|
+
var ObservableEventSource = class _ObservableEventSource extends EventTarget {
|
|
19788
|
+
static CONNECTING = 0;
|
|
19789
|
+
static OPEN = 1;
|
|
19790
|
+
static CLOSED = 2;
|
|
19791
|
+
CONNECTING = _ObservableEventSource.CONNECTING;
|
|
19792
|
+
OPEN = _ObservableEventSource.OPEN;
|
|
19793
|
+
CLOSED = _ObservableEventSource.CLOSED;
|
|
19794
|
+
readyState;
|
|
19795
|
+
url;
|
|
19796
|
+
withCredentials;
|
|
19797
|
+
[kRequest];
|
|
19798
|
+
[kReconnectionTime];
|
|
19799
|
+
[kLastEventId];
|
|
19800
|
+
[kAbortController];
|
|
19801
|
+
[kOnOpen] = null;
|
|
19802
|
+
[kOnMessage] = null;
|
|
19803
|
+
[kOnAnyMessage] = null;
|
|
19804
|
+
[kOnError] = null;
|
|
19805
|
+
constructor(url, init) {
|
|
19806
|
+
super();
|
|
19807
|
+
this.url = new URL(url).href;
|
|
19808
|
+
this.withCredentials = init?.withCredentials ?? false;
|
|
19809
|
+
this.readyState = this.CONNECTING;
|
|
19810
|
+
const headers = new Headers(init?.headers || {});
|
|
19811
|
+
headers.append("accept", "text/event-stream");
|
|
19812
|
+
this[kAbortController] = new AbortController();
|
|
19813
|
+
this[kReconnectionTime] = 2e3;
|
|
19814
|
+
this[kLastEventId] = "";
|
|
19815
|
+
this[kRequest] = new Request(this.url, {
|
|
19816
|
+
method: "GET",
|
|
19817
|
+
headers,
|
|
19818
|
+
credentials: this.withCredentials ? "include" : "omit",
|
|
19819
|
+
signal: this[kAbortController].signal
|
|
19820
|
+
});
|
|
19821
|
+
this.connect();
|
|
19822
|
+
}
|
|
19823
|
+
get onopen() {
|
|
19824
|
+
return this[kOnOpen];
|
|
19825
|
+
}
|
|
19826
|
+
set onopen(handler) {
|
|
19827
|
+
if (this[kOnOpen]) {
|
|
19828
|
+
this.removeEventListener("open", this[kOnOpen]);
|
|
19829
|
+
}
|
|
19830
|
+
this[kOnOpen] = handler.bind(this);
|
|
19831
|
+
this.addEventListener("open", this[kOnOpen]);
|
|
19832
|
+
}
|
|
19833
|
+
get onmessage() {
|
|
19834
|
+
return this[kOnMessage];
|
|
19835
|
+
}
|
|
19836
|
+
set onmessage(handler) {
|
|
19837
|
+
if (this[kOnMessage]) {
|
|
19838
|
+
this.removeEventListener("message", { handleEvent: this[kOnMessage] });
|
|
19839
|
+
}
|
|
19840
|
+
this[kOnMessage] = handler.bind(this);
|
|
19841
|
+
this.addEventListener("message", { handleEvent: this[kOnMessage] });
|
|
19842
|
+
}
|
|
19843
|
+
get onerror() {
|
|
19844
|
+
return this[kOnError];
|
|
19845
|
+
}
|
|
19846
|
+
set oneerror(handler) {
|
|
19847
|
+
if (this[kOnError]) {
|
|
19848
|
+
this.removeEventListener("error", { handleEvent: this[kOnError] });
|
|
19849
|
+
}
|
|
19850
|
+
this[kOnError] = handler.bind(this);
|
|
19851
|
+
this.addEventListener("error", { handleEvent: this[kOnError] });
|
|
19852
|
+
}
|
|
19853
|
+
addEventListener(type, listener, options) {
|
|
19854
|
+
super.addEventListener(
|
|
19855
|
+
type,
|
|
19856
|
+
listener,
|
|
19857
|
+
options
|
|
19858
|
+
);
|
|
19859
|
+
}
|
|
19860
|
+
removeEventListener(type, listener, options) {
|
|
19861
|
+
super.removeEventListener(
|
|
19862
|
+
type,
|
|
19863
|
+
listener,
|
|
19864
|
+
options
|
|
19865
|
+
);
|
|
19866
|
+
}
|
|
19867
|
+
dispatchEvent(event) {
|
|
19868
|
+
return super.dispatchEvent(event);
|
|
19869
|
+
}
|
|
19870
|
+
close() {
|
|
19871
|
+
this[kAbortController].abort();
|
|
19872
|
+
this.readyState = this.CLOSED;
|
|
19873
|
+
}
|
|
19874
|
+
async connect() {
|
|
19875
|
+
await fetch(this[kRequest]).then((response) => {
|
|
19876
|
+
this.processResponse(response);
|
|
19877
|
+
}).catch(() => {
|
|
19878
|
+
this.failConnection();
|
|
19879
|
+
});
|
|
19880
|
+
}
|
|
19881
|
+
processResponse(response) {
|
|
19882
|
+
if (!response.body) {
|
|
19883
|
+
this.failConnection();
|
|
19884
|
+
return;
|
|
19885
|
+
}
|
|
19886
|
+
if (isNetworkError(response)) {
|
|
19887
|
+
this.reestablishConnection();
|
|
19888
|
+
return;
|
|
19889
|
+
}
|
|
19890
|
+
if (response.status !== 200 || response.headers.get("content-type") !== "text/event-stream") {
|
|
19891
|
+
this.failConnection();
|
|
19892
|
+
return;
|
|
19893
|
+
}
|
|
19894
|
+
this.announceConnection();
|
|
19895
|
+
this.interpretResponseBody(response);
|
|
19896
|
+
}
|
|
19897
|
+
announceConnection() {
|
|
19898
|
+
queueMicrotask(() => {
|
|
19899
|
+
if (this.readyState !== this.CLOSED) {
|
|
19900
|
+
this.readyState = this.OPEN;
|
|
19901
|
+
this.dispatchEvent(new Event("open"));
|
|
19902
|
+
}
|
|
19903
|
+
});
|
|
19904
|
+
}
|
|
19905
|
+
interpretResponseBody(response) {
|
|
19906
|
+
const parsingStream = new EventSourceParsingStream({
|
|
19907
|
+
message: (message4) => {
|
|
19908
|
+
if (message4.id) {
|
|
19909
|
+
this[kLastEventId] = message4.id;
|
|
19910
|
+
}
|
|
19911
|
+
if (message4.retry) {
|
|
19912
|
+
this[kReconnectionTime] = message4.retry;
|
|
19913
|
+
}
|
|
19914
|
+
const messageEvent = new MessageEvent(
|
|
19915
|
+
message4.event ? message4.event : "message",
|
|
19916
|
+
{
|
|
19917
|
+
data: message4.data,
|
|
19918
|
+
origin: this[kRequest].url,
|
|
19919
|
+
lastEventId: this[kLastEventId],
|
|
19920
|
+
cancelable: true
|
|
19921
|
+
}
|
|
19922
|
+
);
|
|
19923
|
+
this[kOnAnyMessage]?.(messageEvent);
|
|
19924
|
+
this.dispatchEvent(messageEvent);
|
|
19925
|
+
},
|
|
19926
|
+
abort: () => {
|
|
19927
|
+
throw new Error("Stream abort is not implemented");
|
|
19928
|
+
},
|
|
19929
|
+
close: () => {
|
|
19930
|
+
this.failConnection();
|
|
19931
|
+
}
|
|
19932
|
+
});
|
|
19933
|
+
response.body.pipeTo(parsingStream).then(() => {
|
|
19934
|
+
this.processResponseEndOfBody(response);
|
|
19935
|
+
}).catch(() => {
|
|
19936
|
+
this.failConnection();
|
|
19937
|
+
});
|
|
19938
|
+
}
|
|
19939
|
+
processResponseEndOfBody(response) {
|
|
19940
|
+
if (!isNetworkError(response)) {
|
|
19941
|
+
this.reestablishConnection();
|
|
19942
|
+
}
|
|
19943
|
+
}
|
|
19944
|
+
async reestablishConnection() {
|
|
19945
|
+
queueMicrotask(() => {
|
|
19946
|
+
if (this.readyState === this.CLOSED) {
|
|
19947
|
+
return;
|
|
19948
|
+
}
|
|
19949
|
+
this.readyState = this.CONNECTING;
|
|
19950
|
+
this.dispatchEvent(new Event("error"));
|
|
19951
|
+
});
|
|
19952
|
+
await delay(this[kReconnectionTime]);
|
|
19953
|
+
queueMicrotask(async () => {
|
|
19954
|
+
if (this.readyState !== this.CONNECTING) {
|
|
19955
|
+
return;
|
|
19956
|
+
}
|
|
19957
|
+
if (this[kLastEventId] !== "") {
|
|
19958
|
+
this[kRequest].headers.set("last-event-id", this[kLastEventId]);
|
|
19959
|
+
}
|
|
19960
|
+
await this.connect();
|
|
19961
|
+
});
|
|
19962
|
+
}
|
|
19963
|
+
failConnection() {
|
|
19964
|
+
queueMicrotask(() => {
|
|
19965
|
+
if (this.readyState !== this.CLOSED) {
|
|
19966
|
+
this.readyState = this.CLOSED;
|
|
19967
|
+
this.dispatchEvent(new Event("error"));
|
|
19968
|
+
}
|
|
19969
|
+
});
|
|
19970
|
+
}
|
|
19971
|
+
};
|
|
19972
|
+
function isNetworkError(response) {
|
|
19973
|
+
return response.type === "error" && response.status === 0 && response.statusText === "" && Array.from(response.headers.entries()).length === 0 && response.body === null;
|
|
19974
|
+
}
|
|
19975
|
+
var EventSourceParsingStream = class extends WritableStream {
|
|
19976
|
+
constructor(underlyingSink) {
|
|
19977
|
+
super({
|
|
19978
|
+
write: (chunk) => {
|
|
19979
|
+
this.processResponseBodyChunk(chunk);
|
|
19980
|
+
},
|
|
19981
|
+
abort: (reason) => {
|
|
19982
|
+
this.underlyingSink.abort?.(reason);
|
|
19983
|
+
},
|
|
19984
|
+
close: () => {
|
|
19985
|
+
this.underlyingSink.close?.();
|
|
19986
|
+
}
|
|
19987
|
+
});
|
|
19988
|
+
this.underlyingSink = underlyingSink;
|
|
19989
|
+
this.decoder = new TextDecoder();
|
|
19990
|
+
this.position = 0;
|
|
19991
|
+
}
|
|
19992
|
+
decoder;
|
|
19993
|
+
buffer;
|
|
19994
|
+
position;
|
|
19995
|
+
fieldLength;
|
|
19996
|
+
discardTrailingNewline = false;
|
|
19997
|
+
message = {
|
|
19998
|
+
id: void 0,
|
|
19999
|
+
event: void 0,
|
|
20000
|
+
data: void 0,
|
|
20001
|
+
retry: void 0
|
|
20002
|
+
};
|
|
20003
|
+
resetMessage() {
|
|
20004
|
+
this.message = {
|
|
20005
|
+
id: void 0,
|
|
20006
|
+
event: void 0,
|
|
20007
|
+
data: void 0,
|
|
20008
|
+
retry: void 0
|
|
20009
|
+
};
|
|
20010
|
+
}
|
|
20011
|
+
processResponseBodyChunk(chunk) {
|
|
20012
|
+
if (this.buffer == null) {
|
|
20013
|
+
this.buffer = chunk;
|
|
20014
|
+
this.position = 0;
|
|
20015
|
+
this.fieldLength = -1;
|
|
20016
|
+
} else {
|
|
20017
|
+
const nextBuffer = new Uint8Array(this.buffer.length + chunk.length);
|
|
20018
|
+
nextBuffer.set(this.buffer);
|
|
20019
|
+
nextBuffer.set(chunk, this.buffer.length);
|
|
20020
|
+
this.buffer = nextBuffer;
|
|
20021
|
+
}
|
|
20022
|
+
const bufferLength = this.buffer.length;
|
|
20023
|
+
let lineStart = 0;
|
|
20024
|
+
while (this.position < bufferLength) {
|
|
20025
|
+
if (this.discardTrailingNewline) {
|
|
20026
|
+
if (this.buffer[this.position] === 10 /* NewLine */) {
|
|
20027
|
+
lineStart = ++this.position;
|
|
20028
|
+
}
|
|
20029
|
+
this.discardTrailingNewline = false;
|
|
20030
|
+
}
|
|
20031
|
+
let lineEnd = -1;
|
|
20032
|
+
for (; this.position < bufferLength && lineEnd === -1; ++this.position) {
|
|
20033
|
+
switch (this.buffer[this.position]) {
|
|
20034
|
+
case 58 /* Colon */: {
|
|
20035
|
+
if (this.fieldLength === -1) {
|
|
20036
|
+
this.fieldLength = this.position - lineStart;
|
|
20037
|
+
}
|
|
20038
|
+
break;
|
|
20039
|
+
}
|
|
20040
|
+
case 13 /* CarriageReturn */: {
|
|
20041
|
+
this.discardTrailingNewline = true;
|
|
20042
|
+
break;
|
|
20043
|
+
}
|
|
20044
|
+
case 10 /* NewLine */: {
|
|
20045
|
+
lineEnd = this.position;
|
|
20046
|
+
break;
|
|
20047
|
+
}
|
|
20048
|
+
}
|
|
20049
|
+
}
|
|
20050
|
+
if (lineEnd === -1) {
|
|
20051
|
+
break;
|
|
20052
|
+
}
|
|
20053
|
+
this.processLine(
|
|
20054
|
+
this.buffer.subarray(lineStart, lineEnd),
|
|
20055
|
+
this.fieldLength
|
|
20056
|
+
);
|
|
20057
|
+
lineStart = this.position;
|
|
20058
|
+
this.fieldLength = -1;
|
|
20059
|
+
}
|
|
20060
|
+
if (lineStart === bufferLength) {
|
|
20061
|
+
this.buffer = void 0;
|
|
20062
|
+
} else if (lineStart !== 0) {
|
|
20063
|
+
this.buffer = this.buffer.subarray(lineStart);
|
|
20064
|
+
this.position -= lineStart;
|
|
20065
|
+
}
|
|
20066
|
+
}
|
|
20067
|
+
processLine(line, fieldLength) {
|
|
20068
|
+
if (line.length === 0) {
|
|
20069
|
+
if (this.message.data === void 0) {
|
|
20070
|
+
this.message.event = void 0;
|
|
20071
|
+
return;
|
|
20072
|
+
}
|
|
20073
|
+
this.underlyingSink.message(this.message);
|
|
20074
|
+
this.resetMessage();
|
|
20075
|
+
return;
|
|
20076
|
+
}
|
|
20077
|
+
if (fieldLength > 0) {
|
|
20078
|
+
const field = this.decoder.decode(line.subarray(0, fieldLength));
|
|
20079
|
+
const valueOffset = fieldLength + (line[fieldLength + 1] === 32 /* Space */ ? 2 : 1);
|
|
20080
|
+
const value = this.decoder.decode(line.subarray(valueOffset));
|
|
20081
|
+
switch (field) {
|
|
20082
|
+
case "data": {
|
|
20083
|
+
this.message.data = this.message.data ? this.message.data + "\n" + value : value;
|
|
20084
|
+
break;
|
|
20085
|
+
}
|
|
20086
|
+
case "event": {
|
|
20087
|
+
this.message.event = value;
|
|
20088
|
+
break;
|
|
20089
|
+
}
|
|
20090
|
+
case "id": {
|
|
20091
|
+
this.message.id = value;
|
|
20092
|
+
break;
|
|
20093
|
+
}
|
|
20094
|
+
case "retry": {
|
|
20095
|
+
const retry = parseInt(value, 10);
|
|
20096
|
+
if (!isNaN(retry)) {
|
|
20097
|
+
this.message.retry = retry;
|
|
20098
|
+
}
|
|
20099
|
+
break;
|
|
20100
|
+
}
|
|
20101
|
+
}
|
|
20102
|
+
}
|
|
20103
|
+
}
|
|
20104
|
+
};
|
|
20105
|
+
|
|
19291
20106
|
// node_modules/.pnpm/until-async@3.0.2/node_modules/until-async/lib/index.js
|
|
19292
20107
|
async function until(callback) {
|
|
19293
20108
|
try {
|
|
@@ -19617,50 +20432,6 @@ Read more: https://mswjs.io/docs/http/intercepting-requests`;
|
|
|
19617
20432
|
}
|
|
19618
20433
|
};
|
|
19619
20434
|
|
|
19620
|
-
// src/core/delay.ts
|
|
19621
|
-
var SET_TIMEOUT_MAX_ALLOWED_INT = 2147483647;
|
|
19622
|
-
var MIN_SERVER_RESPONSE_TIME = 100;
|
|
19623
|
-
var MAX_SERVER_RESPONSE_TIME = 400;
|
|
19624
|
-
var NODE_SERVER_RESPONSE_TIME = 5;
|
|
19625
|
-
function getRealisticResponseTime() {
|
|
19626
|
-
if (isNodeProcess()) {
|
|
19627
|
-
return NODE_SERVER_RESPONSE_TIME;
|
|
19628
|
-
}
|
|
19629
|
-
return Math.floor(
|
|
19630
|
-
Math.random() * (MAX_SERVER_RESPONSE_TIME - MIN_SERVER_RESPONSE_TIME) + MIN_SERVER_RESPONSE_TIME
|
|
19631
|
-
);
|
|
19632
|
-
}
|
|
19633
|
-
async function delay(durationOrMode) {
|
|
19634
|
-
let delayTime;
|
|
19635
|
-
if (typeof durationOrMode === "string") {
|
|
19636
|
-
switch (durationOrMode) {
|
|
19637
|
-
case "infinite": {
|
|
19638
|
-
delayTime = SET_TIMEOUT_MAX_ALLOWED_INT;
|
|
19639
|
-
break;
|
|
19640
|
-
}
|
|
19641
|
-
case "real": {
|
|
19642
|
-
delayTime = getRealisticResponseTime();
|
|
19643
|
-
break;
|
|
19644
|
-
}
|
|
19645
|
-
default: {
|
|
19646
|
-
throw new Error(
|
|
19647
|
-
`Failed to delay a response: unknown delay mode "${durationOrMode}". Please make sure you provide one of the supported modes ("real", "infinite") or a number.`
|
|
19648
|
-
);
|
|
19649
|
-
}
|
|
19650
|
-
}
|
|
19651
|
-
} else if (typeof durationOrMode === "undefined") {
|
|
19652
|
-
delayTime = getRealisticResponseTime();
|
|
19653
|
-
} else {
|
|
19654
|
-
if (durationOrMode > SET_TIMEOUT_MAX_ALLOWED_INT) {
|
|
19655
|
-
throw new Error(
|
|
19656
|
-
`Failed to delay a response: provided delay duration (${durationOrMode}) exceeds the maximum allowed duration for "setTimeout" (${SET_TIMEOUT_MAX_ALLOWED_INT}). This will cause the response to be returned immediately. Please use a number within the allowed range to delay the response by exact duration, or consider the "infinite" delay mode to delay the response indefinitely.`
|
|
19657
|
-
);
|
|
19658
|
-
}
|
|
19659
|
-
delayTime = durationOrMode;
|
|
19660
|
-
}
|
|
19661
|
-
return new Promise((resolve) => setTimeout(resolve, delayTime));
|
|
19662
|
-
}
|
|
19663
|
-
|
|
19664
20435
|
// src/core/bypass.ts
|
|
19665
20436
|
function bypass(input, init) {
|
|
19666
20437
|
const request = new Request(
|
|
@@ -19694,11 +20465,6 @@ Read more: https://mswjs.io/docs/http/intercepting-requests`;
|
|
|
19694
20465
|
// src/core/index.ts
|
|
19695
20466
|
checkGlobals();
|
|
19696
20467
|
|
|
19697
|
-
// src/core/utils/internal/isObject.ts
|
|
19698
|
-
function isObject2(value) {
|
|
19699
|
-
return value != null && typeof value === "object" && !Array.isArray(value);
|
|
19700
|
-
}
|
|
19701
|
-
|
|
19702
20468
|
// src/core/utils/internal/mergeRight.ts
|
|
19703
20469
|
function mergeRight(left, right) {
|
|
19704
20470
|
return Object.entries(right).reduce(
|
|
@@ -20889,209 +21655,6 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
20889
21655
|
});
|
|
20890
21656
|
}
|
|
20891
21657
|
|
|
20892
|
-
// src/core/ws/utils/getMessageLength.ts
|
|
20893
|
-
function getMessageLength(data) {
|
|
20894
|
-
if (data instanceof Blob) {
|
|
20895
|
-
return data.size;
|
|
20896
|
-
}
|
|
20897
|
-
if (data instanceof ArrayBuffer) {
|
|
20898
|
-
return data.byteLength;
|
|
20899
|
-
}
|
|
20900
|
-
return new Blob([data]).size;
|
|
20901
|
-
}
|
|
20902
|
-
|
|
20903
|
-
// src/core/ws/utils/truncateMessage.ts
|
|
20904
|
-
var MAX_LENGTH = 24;
|
|
20905
|
-
function truncateMessage(message4) {
|
|
20906
|
-
if (message4.length <= MAX_LENGTH) {
|
|
20907
|
-
return message4;
|
|
20908
|
-
}
|
|
20909
|
-
return `${message4.slice(0, MAX_LENGTH)}\u2026`;
|
|
20910
|
-
}
|
|
20911
|
-
|
|
20912
|
-
// src/core/ws/utils/getPublicData.ts
|
|
20913
|
-
async function getPublicData(data) {
|
|
20914
|
-
if (data instanceof Blob) {
|
|
20915
|
-
const text = await data.text();
|
|
20916
|
-
return `Blob(${truncateMessage(text)})`;
|
|
20917
|
-
}
|
|
20918
|
-
if (typeof data === "object" && "byteLength" in data) {
|
|
20919
|
-
const text = new TextDecoder().decode(data);
|
|
20920
|
-
return `ArrayBuffer(${truncateMessage(text)})`;
|
|
20921
|
-
}
|
|
20922
|
-
return truncateMessage(data);
|
|
20923
|
-
}
|
|
20924
|
-
|
|
20925
|
-
// src/core/ws/utils/attachWebSocketLogger.ts
|
|
20926
|
-
var colors = {
|
|
20927
|
-
system: "#3b82f6",
|
|
20928
|
-
outgoing: "#22c55e",
|
|
20929
|
-
incoming: "#ef4444",
|
|
20930
|
-
mocked: "#ff6a33"
|
|
20931
|
-
};
|
|
20932
|
-
function attachWebSocketLogger(connection) {
|
|
20933
|
-
const { client, server } = connection;
|
|
20934
|
-
logConnectionOpen(client);
|
|
20935
|
-
client.addEventListener("message", (event) => {
|
|
20936
|
-
logOutgoingClientMessage(event);
|
|
20937
|
-
});
|
|
20938
|
-
client.addEventListener("close", (event) => {
|
|
20939
|
-
logConnectionClose(event);
|
|
20940
|
-
});
|
|
20941
|
-
client.socket.addEventListener("error", (event) => {
|
|
20942
|
-
logClientError(event);
|
|
20943
|
-
});
|
|
20944
|
-
client.send = new Proxy(client.send, {
|
|
20945
|
-
apply(target, thisArg, args) {
|
|
20946
|
-
const [data] = args;
|
|
20947
|
-
const messageEvent = new MessageEvent("message", { data });
|
|
20948
|
-
Object.defineProperties(messageEvent, {
|
|
20949
|
-
currentTarget: {
|
|
20950
|
-
enumerable: true,
|
|
20951
|
-
writable: false,
|
|
20952
|
-
value: client.socket
|
|
20953
|
-
},
|
|
20954
|
-
target: {
|
|
20955
|
-
enumerable: true,
|
|
20956
|
-
writable: false,
|
|
20957
|
-
value: client.socket
|
|
20958
|
-
}
|
|
20959
|
-
});
|
|
20960
|
-
queueMicrotask(() => {
|
|
20961
|
-
logIncomingMockedClientMessage(messageEvent);
|
|
20962
|
-
});
|
|
20963
|
-
return Reflect.apply(target, thisArg, args);
|
|
20964
|
-
}
|
|
20965
|
-
});
|
|
20966
|
-
server.addEventListener(
|
|
20967
|
-
"open",
|
|
20968
|
-
() => {
|
|
20969
|
-
server.addEventListener("message", (event) => {
|
|
20970
|
-
logIncomingServerMessage(event);
|
|
20971
|
-
});
|
|
20972
|
-
},
|
|
20973
|
-
{ once: true }
|
|
20974
|
-
);
|
|
20975
|
-
server.send = new Proxy(server.send, {
|
|
20976
|
-
apply(target, thisArg, args) {
|
|
20977
|
-
const [data] = args;
|
|
20978
|
-
const messageEvent = new MessageEvent("message", { data });
|
|
20979
|
-
Object.defineProperties(messageEvent, {
|
|
20980
|
-
currentTarget: {
|
|
20981
|
-
enumerable: true,
|
|
20982
|
-
writable: false,
|
|
20983
|
-
value: server.socket
|
|
20984
|
-
},
|
|
20985
|
-
target: {
|
|
20986
|
-
enumerable: true,
|
|
20987
|
-
writable: false,
|
|
20988
|
-
value: server.socket
|
|
20989
|
-
}
|
|
20990
|
-
});
|
|
20991
|
-
logOutgoingMockedClientMessage(messageEvent);
|
|
20992
|
-
return Reflect.apply(target, thisArg, args);
|
|
20993
|
-
}
|
|
20994
|
-
});
|
|
20995
|
-
}
|
|
20996
|
-
function logConnectionOpen(client) {
|
|
20997
|
-
const publicUrl = toPublicUrl(client.url);
|
|
20998
|
-
console.groupCollapsed(
|
|
20999
|
-
devUtils.formatMessage(`${getTimestamp()} %c\u25B6%c ${publicUrl}`),
|
|
21000
|
-
`color:${colors.system}`,
|
|
21001
|
-
"color:inherit"
|
|
21002
|
-
);
|
|
21003
|
-
console.log("Client:", client.socket);
|
|
21004
|
-
console.groupEnd();
|
|
21005
|
-
}
|
|
21006
|
-
function logConnectionClose(event) {
|
|
21007
|
-
const target = event.target;
|
|
21008
|
-
const publicUrl = toPublicUrl(target.url);
|
|
21009
|
-
console.groupCollapsed(
|
|
21010
|
-
devUtils.formatMessage(
|
|
21011
|
-
`${getTimestamp({ milliseconds: true })} %c\u25A0%c ${publicUrl}`
|
|
21012
|
-
),
|
|
21013
|
-
`color:${colors.system}`,
|
|
21014
|
-
"color:inherit"
|
|
21015
|
-
);
|
|
21016
|
-
console.log(event);
|
|
21017
|
-
console.groupEnd();
|
|
21018
|
-
}
|
|
21019
|
-
function logClientError(event) {
|
|
21020
|
-
const socket = event.target;
|
|
21021
|
-
const publicUrl = toPublicUrl(socket.url);
|
|
21022
|
-
console.groupCollapsed(
|
|
21023
|
-
devUtils.formatMessage(
|
|
21024
|
-
`${getTimestamp({ milliseconds: true })} %c\xD7%c ${publicUrl}`
|
|
21025
|
-
),
|
|
21026
|
-
`color:${colors.system}`,
|
|
21027
|
-
"color:inherit"
|
|
21028
|
-
);
|
|
21029
|
-
console.log(event);
|
|
21030
|
-
console.groupEnd();
|
|
21031
|
-
}
|
|
21032
|
-
async function logOutgoingClientMessage(event) {
|
|
21033
|
-
const byteLength = getMessageLength(event.data);
|
|
21034
|
-
const publicData = await getPublicData(event.data);
|
|
21035
|
-
const arrow = event.defaultPrevented ? "\u21E1" : "\u2B06";
|
|
21036
|
-
console.groupCollapsed(
|
|
21037
|
-
devUtils.formatMessage(
|
|
21038
|
-
`${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`
|
|
21039
|
-
),
|
|
21040
|
-
`color:${colors.outgoing}`,
|
|
21041
|
-
"color:inherit",
|
|
21042
|
-
"color:gray;font-weight:normal",
|
|
21043
|
-
"color:inherit;font-weight:inherit"
|
|
21044
|
-
);
|
|
21045
|
-
console.log(event);
|
|
21046
|
-
console.groupEnd();
|
|
21047
|
-
}
|
|
21048
|
-
async function logOutgoingMockedClientMessage(event) {
|
|
21049
|
-
const byteLength = getMessageLength(event.data);
|
|
21050
|
-
const publicData = await getPublicData(event.data);
|
|
21051
|
-
console.groupCollapsed(
|
|
21052
|
-
devUtils.formatMessage(
|
|
21053
|
-
`${getTimestamp({ milliseconds: true })} %c\u2B06%c ${publicData} %c${byteLength}%c`
|
|
21054
|
-
),
|
|
21055
|
-
`color:${colors.mocked}`,
|
|
21056
|
-
"color:inherit",
|
|
21057
|
-
"color:gray;font-weight:normal",
|
|
21058
|
-
"color:inherit;font-weight:inherit"
|
|
21059
|
-
);
|
|
21060
|
-
console.log(event);
|
|
21061
|
-
console.groupEnd();
|
|
21062
|
-
}
|
|
21063
|
-
async function logIncomingMockedClientMessage(event) {
|
|
21064
|
-
const byteLength = getMessageLength(event.data);
|
|
21065
|
-
const publicData = await getPublicData(event.data);
|
|
21066
|
-
console.groupCollapsed(
|
|
21067
|
-
devUtils.formatMessage(
|
|
21068
|
-
`${getTimestamp({ milliseconds: true })} %c\u2B07%c ${publicData} %c${byteLength}%c`
|
|
21069
|
-
),
|
|
21070
|
-
`color:${colors.mocked}`,
|
|
21071
|
-
"color:inherit",
|
|
21072
|
-
"color:gray;font-weight:normal",
|
|
21073
|
-
"color:inherit;font-weight:inherit"
|
|
21074
|
-
);
|
|
21075
|
-
console.log(event);
|
|
21076
|
-
console.groupEnd();
|
|
21077
|
-
}
|
|
21078
|
-
async function logIncomingServerMessage(event) {
|
|
21079
|
-
const byteLength = getMessageLength(event.data);
|
|
21080
|
-
const publicData = await getPublicData(event.data);
|
|
21081
|
-
const arrow = event.defaultPrevented ? "\u21E3" : "\u2B07";
|
|
21082
|
-
console.groupCollapsed(
|
|
21083
|
-
devUtils.formatMessage(
|
|
21084
|
-
`${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`
|
|
21085
|
-
),
|
|
21086
|
-
`color:${colors.incoming}`,
|
|
21087
|
-
"color:inherit",
|
|
21088
|
-
"color:gray;font-weight:normal",
|
|
21089
|
-
"color:inherit;font-weight:inherit"
|
|
21090
|
-
);
|
|
21091
|
-
console.log(event);
|
|
21092
|
-
console.groupEnd();
|
|
21093
|
-
}
|
|
21094
|
-
|
|
21095
21658
|
// node_modules/.pnpm/rettime@0.7.0/node_modules/rettime/build/index.js
|
|
21096
21659
|
var kDefaultPrevented2 = Symbol("kDefaultPrevented");
|
|
21097
21660
|
var kPropagationStopped = Symbol("kPropagationStopped");
|