@depup/msw 2.13.2-depup.0 → 2.15.0-depup.6
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 +9 -12
- package/changes.json +14 -26
- package/cli/init.js +1 -1
- package/lib/browser/index.js +547 -177
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +547 -177
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/{HttpResponse-DlRR1D-f.d.mts → HttpResponse-BE_Y2Ak9.d.mts} +52 -1
- package/lib/core/{HttpResponse-CksOMVAa.d.ts → HttpResponse-DL-P1EeG.d.ts} +52 -1
- package/lib/core/HttpResponse.d.mts +1 -1
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/HttpResponse.js +2 -2
- package/lib/core/HttpResponse.js.map +1 -1
- package/lib/core/HttpResponse.mjs +2 -2
- package/lib/core/HttpResponse.mjs.map +1 -1
- package/lib/core/experimental/compat.d.mts +2 -2
- package/lib/core/experimental/compat.d.ts +2 -2
- package/lib/core/experimental/compat.js +1 -0
- package/lib/core/experimental/compat.js.map +1 -1
- package/lib/core/experimental/compat.mjs +1 -0
- package/lib/core/experimental/compat.mjs.map +1 -1
- package/lib/core/experimental/define-network.d.mts +2 -2
- package/lib/core/experimental/define-network.d.ts +2 -2
- package/lib/core/experimental/define-network.js +21 -11
- package/lib/core/experimental/define-network.js.map +1 -1
- package/lib/core/experimental/define-network.mjs +23 -11
- package/lib/core/experimental/define-network.mjs.map +1 -1
- package/lib/core/experimental/frames/http-frame.d.mts +2 -2
- package/lib/core/experimental/frames/http-frame.d.ts +2 -2
- package/lib/core/experimental/frames/http-frame.js +5 -2
- package/lib/core/experimental/frames/http-frame.js.map +1 -1
- package/lib/core/experimental/frames/http-frame.mjs +8 -3
- package/lib/core/experimental/frames/http-frame.mjs.map +1 -1
- package/lib/core/experimental/frames/network-frame.d.mts +2 -2
- package/lib/core/experimental/frames/network-frame.d.ts +2 -2
- package/lib/core/experimental/frames/network-frame.js +2 -0
- package/lib/core/experimental/frames/network-frame.js.map +1 -1
- package/lib/core/experimental/frames/network-frame.mjs +2 -0
- package/lib/core/experimental/frames/network-frame.mjs.map +1 -1
- package/lib/core/experimental/frames/websocket-frame.d.mts +2 -2
- package/lib/core/experimental/frames/websocket-frame.d.ts +2 -2
- package/lib/core/experimental/frames/websocket-frame.js +2 -0
- package/lib/core/experimental/frames/websocket-frame.js.map +1 -1
- package/lib/core/experimental/frames/websocket-frame.mjs +2 -0
- package/lib/core/experimental/frames/websocket-frame.mjs.map +1 -1
- package/lib/core/experimental/handlers-controller.d.mts +2 -1
- package/lib/core/experimental/handlers-controller.d.ts +2 -1
- package/lib/core/experimental/handlers-controller.js +31 -6
- package/lib/core/experimental/handlers-controller.js.map +1 -1
- package/lib/core/experimental/handlers-controller.mjs +31 -6
- package/lib/core/experimental/handlers-controller.mjs.map +1 -1
- package/lib/core/experimental/index.d.mts +5 -5
- package/lib/core/experimental/index.d.ts +5 -5
- package/lib/core/experimental/index.js +3 -1
- package/lib/core/experimental/index.js.map +1 -1
- package/lib/core/experimental/index.mjs +9 -2
- package/lib/core/experimental/index.mjs.map +1 -1
- package/lib/core/experimental/on-unhandled-frame.d.mts +2 -2
- package/lib/core/experimental/on-unhandled-frame.d.ts +2 -2
- package/lib/core/experimental/on-unhandled-frame.js +1 -0
- package/lib/core/experimental/on-unhandled-frame.js.map +1 -1
- package/lib/core/experimental/on-unhandled-frame.mjs +1 -0
- package/lib/core/experimental/on-unhandled-frame.mjs.map +1 -1
- package/lib/core/experimental/setup-api.d.mts +1 -1
- package/lib/core/experimental/setup-api.d.ts +1 -1
- package/lib/core/experimental/setup-api.js +2 -5
- package/lib/core/experimental/setup-api.js.map +1 -1
- package/lib/core/experimental/setup-api.mjs +2 -5
- package/lib/core/experimental/setup-api.mjs.map +1 -1
- package/lib/core/experimental/sources/interceptor-source.d.mts +2 -2
- package/lib/core/experimental/sources/interceptor-source.d.ts +2 -2
- package/lib/core/experimental/sources/interceptor-source.js +23 -10
- package/lib/core/experimental/sources/interceptor-source.js.map +1 -1
- package/lib/core/experimental/sources/interceptor-source.mjs +24 -13
- package/lib/core/experimental/sources/interceptor-source.mjs.map +1 -1
- package/lib/core/experimental/sources/network-source.d.mts +3 -3
- package/lib/core/experimental/sources/network-source.d.ts +3 -3
- package/lib/core/experimental/sources/network-source.js +1 -0
- package/lib/core/experimental/sources/network-source.js.map +1 -1
- package/lib/core/experimental/sources/network-source.mjs +2 -0
- package/lib/core/experimental/sources/network-source.mjs.map +1 -1
- package/lib/core/getResponse.d.mts +1 -1
- package/lib/core/getResponse.d.ts +1 -1
- package/lib/core/graphql.d.mts +1 -1
- package/lib/core/graphql.d.ts +1 -1
- package/lib/core/graphql.js +1 -0
- package/lib/core/graphql.js.map +1 -1
- package/lib/core/graphql.mjs +2 -0
- package/lib/core/graphql.mjs.map +1 -1
- package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
- package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
- package/lib/core/handlers/GraphQLHandler.js +1 -0
- package/lib/core/handlers/GraphQLHandler.js.map +1 -1
- package/lib/core/handlers/GraphQLHandler.mjs +4 -1
- package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
- package/lib/core/handlers/HttpHandler.d.mts +1 -1
- package/lib/core/handlers/HttpHandler.d.ts +1 -1
- package/lib/core/handlers/HttpHandler.js +1 -0
- package/lib/core/handlers/HttpHandler.js.map +1 -1
- package/lib/core/handlers/HttpHandler.mjs +1 -0
- package/lib/core/handlers/HttpHandler.mjs.map +1 -1
- package/lib/core/handlers/RequestHandler.d.mts +1 -1
- package/lib/core/handlers/RequestHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.js +197 -4
- package/lib/core/handlers/RequestHandler.js.map +1 -1
- package/lib/core/handlers/RequestHandler.mjs +198 -4
- package/lib/core/handlers/RequestHandler.mjs.map +1 -1
- package/lib/core/handlers/WebSocketHandler.d.mts +5 -2
- package/lib/core/handlers/WebSocketHandler.d.ts +5 -2
- package/lib/core/handlers/WebSocketHandler.js +30 -12
- package/lib/core/handlers/WebSocketHandler.js.map +1 -1
- package/lib/core/handlers/WebSocketHandler.mjs +30 -12
- package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
- package/lib/core/http.d.mts +1 -1
- package/lib/core/http.d.ts +1 -1
- package/lib/core/http.js +1 -0
- package/lib/core/http.js.map +1 -1
- package/lib/core/http.mjs +2 -0
- package/lib/core/http.mjs.map +1 -1
- package/lib/core/index.d.mts +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/{network-frame-usYiHS0K.d.ts → on-unhandled-frame-0KmwUmeV.d.ts} +13 -13
- package/lib/core/{network-frame-B7A0ggXE.d.mts → on-unhandled-frame-gkokW4Rr.d.mts} +13 -13
- package/lib/core/passthrough.d.mts +1 -1
- package/lib/core/passthrough.d.ts +1 -1
- package/lib/core/sse.d.mts +4 -18
- package/lib/core/sse.d.ts +4 -18
- package/lib/core/sse.js +149 -66
- package/lib/core/sse.js.map +1 -1
- package/lib/core/sse.mjs +149 -66
- package/lib/core/sse.mjs.map +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.mts +9 -4
- package/lib/core/utils/HttpResponse/decorators.d.ts +9 -4
- package/lib/core/utils/HttpResponse/decorators.js +18 -11
- package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
- package/lib/core/utils/HttpResponse/decorators.mjs +18 -11
- package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
- package/lib/core/utils/cookieStore.js.map +1 -1
- package/lib/core/utils/cookieStore.mjs.map +1 -1
- package/lib/core/utils/executeHandlers.d.mts +1 -1
- package/lib/core/utils/executeHandlers.d.ts +1 -1
- package/lib/core/utils/executeHandlers.js +1 -0
- package/lib/core/utils/executeHandlers.js.map +1 -1
- package/lib/core/utils/executeHandlers.mjs +1 -0
- package/lib/core/utils/executeHandlers.mjs.map +1 -1
- package/lib/core/utils/handleRequest.d.mts +1 -1
- package/lib/core/utils/handleRequest.d.ts +1 -1
- package/lib/core/utils/handleRequest.js.map +1 -1
- package/lib/core/utils/handleRequest.mjs.map +1 -1
- package/lib/core/utils/internal/Disposable.js +19 -1
- package/lib/core/utils/internal/Disposable.js.map +1 -1
- package/lib/core/utils/internal/Disposable.mjs +19 -1
- package/lib/core/utils/internal/Disposable.mjs.map +1 -1
- package/lib/core/utils/internal/attachSiblingHandlers.d.mts +15 -0
- package/lib/core/utils/internal/attachSiblingHandlers.d.ts +15 -0
- package/lib/core/utils/internal/attachSiblingHandlers.js +44 -0
- package/lib/core/utils/internal/attachSiblingHandlers.js.map +1 -0
- package/lib/core/utils/internal/attachSiblingHandlers.mjs +24 -0
- package/lib/core/utils/internal/attachSiblingHandlers.mjs.map +1 -0
- package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
- package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
- package/lib/core/utils/internal/observe-response-body-stream.d.mts +18 -0
- package/lib/core/utils/internal/observe-response-body-stream.d.ts +18 -0
- package/lib/core/utils/internal/observe-response-body-stream.js +64 -0
- package/lib/core/utils/internal/observe-response-body-stream.js.map +1 -0
- package/lib/core/utils/internal/observe-response-body-stream.mjs +44 -0
- package/lib/core/utils/internal/observe-response-body-stream.mjs.map +1 -0
- package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
- package/lib/core/utils/internal/parseMultipartData.js +1 -0
- package/lib/core/utils/internal/parseMultipartData.js.map +1 -1
- package/lib/core/utils/internal/parseMultipartData.mjs +1 -0
- package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -1
- package/lib/core/utils/internal/pipeEvents.js +1 -0
- package/lib/core/utils/internal/pipeEvents.js.map +1 -1
- package/lib/core/utils/internal/pipeEvents.mjs +1 -0
- package/lib/core/utils/internal/pipeEvents.mjs.map +1 -1
- package/lib/core/utils/request/storeResponseCookies.js +1 -1
- package/lib/core/utils/request/storeResponseCookies.js.map +1 -1
- package/lib/core/utils/request/storeResponseCookies.mjs +2 -2
- package/lib/core/utils/request/storeResponseCookies.mjs.map +1 -1
- package/lib/core/ws/WebSocketClientManager.js +4 -0
- package/lib/core/ws/WebSocketClientManager.js.map +1 -1
- package/lib/core/ws/WebSocketClientManager.mjs +4 -0
- package/lib/core/ws/WebSocketClientManager.mjs.map +1 -1
- package/lib/core/ws/WebSocketIndexedDBClientStore.js +1 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -1
- package/lib/core/ws/WebSocketIndexedDBClientStore.mjs +1 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -1
- package/lib/core/ws/WebSocketMemoryClientStore.js +1 -0
- package/lib/core/ws/WebSocketMemoryClientStore.js.map +1 -1
- package/lib/core/ws/WebSocketMemoryClientStore.mjs +1 -0
- package/lib/core/ws/WebSocketMemoryClientStore.mjs.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
- package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
- package/lib/core/ws/handleWebSocketEvent.js.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -1
- package/lib/core/ws.d.mts +17 -4
- package/lib/core/ws.d.ts +17 -4
- package/lib/core/ws.js +30 -5
- package/lib/core/ws.js.map +1 -1
- package/lib/core/ws.mjs +34 -6
- package/lib/core/ws.mjs.map +1 -1
- package/lib/iife/index.js +10138 -6034
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +21 -9
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.d.mts +1 -1
- package/lib/node/index.d.ts +1 -1
- package/lib/node/index.js +2 -0
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +1 -0
- package/lib/node/index.mjs.map +1 -1
- package/lib/shims/cookie.js +152 -62
- package/lib/shims/cookie.mjs +152 -62
- package/package.json +50 -69
- package/src/browser/glossary.ts +1 -1
- package/src/browser/setup-worker.ts +2 -2
- package/src/browser/sources/service-worker-source.ts +142 -40
- package/src/browser/utils/deserializeRequest.ts +2 -2
- package/src/browser/utils/pruneGetRequestBody.ts +3 -3
- package/src/browser/utils/should-invalidate-worker.test.ts +122 -0
- package/src/browser/utils/should-invalidate-worker.ts +13 -0
- package/src/browser/utils/workerChannel.ts +43 -21
- package/src/core/experimental/define-network.ts +44 -15
- package/src/core/experimental/frames/http-frame.test.ts +8 -2
- package/src/core/experimental/frames/http-frame.ts +12 -4
- package/src/core/experimental/frames/websocket-frame.test.ts +2 -4
- package/src/core/experimental/frames/websocket-frame.ts +3 -2
- package/src/core/experimental/handlers-controller.test.ts +139 -5
- package/src/core/experimental/handlers-controller.ts +39 -10
- package/src/core/experimental/index.ts +11 -1
- package/src/core/experimental/on-unhandled-frame.test.ts +2 -4
- package/src/core/experimental/setup-api.ts +4 -8
- package/src/core/experimental/sources/interceptor-source.ts +36 -16
- package/src/core/experimental/sources/network-source.ts +1 -1
- package/src/core/graphql.ts +8 -8
- package/src/core/handlers/GraphQLHandler.test.ts +3 -4
- package/src/core/handlers/GraphQLHandler.ts +15 -11
- package/src/core/handlers/HttpHandler.test.ts +92 -2
- package/src/core/handlers/HttpHandler.ts +7 -7
- package/src/core/handlers/RequestHandler.ts +329 -22
- package/src/core/handlers/WebSocketHandler.test.ts +58 -0
- package/src/core/handlers/WebSocketHandler.ts +37 -8
- package/src/core/http.ts +5 -5
- package/src/core/sse.ts +217 -73
- package/src/core/utils/HttpResponse/decorators.ts +28 -22
- package/src/core/utils/cookieStore.ts +1 -1
- package/src/core/utils/executeHandlers.ts +2 -4
- package/src/core/utils/handleRequest.test.ts +5 -4
- package/src/core/utils/handleRequest.ts +3 -3
- package/src/core/utils/internal/Disposable.ts +22 -1
- package/src/core/utils/internal/attachSiblingHandlers.ts +28 -0
- package/src/core/utils/internal/observe-response-body-stream.test.ts +64 -0
- package/src/core/utils/internal/observe-response-body-stream.ts +77 -0
- package/src/core/utils/internal/parseGraphQLRequest.test.ts +2 -4
- package/src/core/utils/internal/parseMultipartData.ts +1 -1
- package/src/core/utils/internal/pipeEvents.ts +2 -1
- package/src/core/utils/request/onUnhandledRequest.test.ts +2 -4
- package/src/core/utils/request/storeResponseCookies.ts +2 -4
- package/src/core/ws/WebSocketClientManager.test.ts +2 -4
- package/src/core/ws/WebSocketClientManager.ts +1 -1
- package/src/core/ws/WebSocketIndexedDBClientStore.ts +3 -5
- package/src/core/ws/WebSocketMemoryClientStore.ts +3 -5
- package/src/core/ws/handleWebSocketEvent.ts +3 -3
- package/src/core/ws.ts +66 -7
- package/src/mockServiceWorker.js +19 -7
- package/src/native/index.ts +2 -2
- package/src/node/async-handlers-controller.ts +2 -2
- package/src/node/index.ts +1 -0
- package/src/node/setup-server-common.ts +4 -4
- package/src/node/setup-server.ts +2 -2
- package/lib/core/utils/internal/requestHandlerUtils.d.mts +0 -12
- package/lib/core/utils/internal/requestHandlerUtils.d.ts +0 -12
- package/lib/core/utils/internal/requestHandlerUtils.js +0 -37
- package/lib/core/utils/internal/requestHandlerUtils.js.map +0 -1
- package/lib/core/utils/internal/requestHandlerUtils.mjs +0 -17
- package/lib/core/utils/internal/requestHandlerUtils.mjs.map +0 -1
- package/src/core/utils/internal/requestHandlerUtils.ts +0 -21
package/lib/browser/index.js
CHANGED
|
@@ -561,7 +561,7 @@ var _Emitter = class {
|
|
|
561
561
|
var Emitter = _Emitter;
|
|
562
562
|
Emitter.defaultMaxListeners = 10;
|
|
563
563
|
|
|
564
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
564
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/createRequestId-DYCsFHOi.mjs
|
|
565
565
|
var INTERNAL_REQUEST_ID_HEADER_NAME = "x-interceptors-internal-request-id";
|
|
566
566
|
function getGlobalSymbol(symbol) {
|
|
567
567
|
return globalThis[symbol] || void 0;
|
|
@@ -710,7 +710,7 @@ function createRequestId() {
|
|
|
710
710
|
return Math.random().toString(16).slice(2);
|
|
711
711
|
}
|
|
712
712
|
|
|
713
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
713
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs
|
|
714
714
|
function resolveWebSocketUrl(url) {
|
|
715
715
|
if (typeof url === "string") return resolveWebSocketUrl(new URL(url, typeof location !== "undefined" ? location.href : void 0));
|
|
716
716
|
if (url.protocol === "http:") url.protocol = "ws:";
|
|
@@ -721,15 +721,72 @@ function resolveWebSocketUrl(url) {
|
|
|
721
721
|
return url.href;
|
|
722
722
|
}
|
|
723
723
|
|
|
724
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
724
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs
|
|
725
725
|
async function emitAsync(emitter, eventName, ...data) {
|
|
726
726
|
const listeners = emitter.listeners(eventName);
|
|
727
727
|
if (listeners.length === 0) return;
|
|
728
728
|
for (const listener of listeners) await listener.apply(emitter, data);
|
|
729
729
|
}
|
|
730
|
+
var PatchesRegistry = class {
|
|
731
|
+
#replacements = /* @__PURE__ */ new Map();
|
|
732
|
+
applyPatch(owner, key, getNextValue) {
|
|
733
|
+
const ownerReplacements = this.#replacements.get(owner);
|
|
734
|
+
invariant(!ownerReplacements?.has(key), `Failed to replace a global value at "${String(key)}": already replaced.`);
|
|
735
|
+
const match = getDeepPropertyDescriptor(owner, key);
|
|
736
|
+
if (typeof match === "undefined") {
|
|
737
|
+
console.warn(`Failed to replace a global value at "${String(key)}": not a global value.`);
|
|
738
|
+
return () => {
|
|
739
|
+
};
|
|
740
|
+
}
|
|
741
|
+
if (match.descriptor.configurable) Object.defineProperty(owner, key, {
|
|
742
|
+
value: getNextValue(owner[key]),
|
|
743
|
+
enumerable: true,
|
|
744
|
+
configurable: true
|
|
745
|
+
});
|
|
746
|
+
else if (match.descriptor.writable) owner[key] = getNextValue(owner[key]);
|
|
747
|
+
else throw new Error(`Failed to patch a non-configurable non-writable property "${key.toString()}"`);
|
|
748
|
+
const restorePatch = () => {
|
|
749
|
+
const currentReplacements = this.#replacements.get(owner);
|
|
750
|
+
if (!currentReplacements?.has(key)) return;
|
|
751
|
+
if (match.owner === owner)
|
|
752
|
+
Object.defineProperty(match.owner, key, match.descriptor);
|
|
753
|
+
else
|
|
754
|
+
Reflect.deleteProperty(owner, key);
|
|
755
|
+
currentReplacements.delete(key);
|
|
756
|
+
if (currentReplacements.size === 0) this.#replacements.delete(owner);
|
|
757
|
+
};
|
|
758
|
+
if (ownerReplacements) ownerReplacements.set(key, restorePatch);
|
|
759
|
+
else this.#replacements.set(owner, /* @__PURE__ */ new Map([[key, restorePatch]]));
|
|
760
|
+
return restorePatch;
|
|
761
|
+
}
|
|
762
|
+
restoreAllPatches() {
|
|
763
|
+
const errors = [];
|
|
764
|
+
for (const [, ownerReplacements] of this.#replacements) for (const [, restorePatch] of ownerReplacements) try {
|
|
765
|
+
restorePatch();
|
|
766
|
+
} catch (error2) {
|
|
767
|
+
if (error2 instanceof Error) errors.push(error2);
|
|
768
|
+
else throw error2;
|
|
769
|
+
}
|
|
770
|
+
if (errors.length > 0) throw new AggregateError(errors, "FOO!");
|
|
771
|
+
}
|
|
772
|
+
};
|
|
773
|
+
var patchesRegistry = new PatchesRegistry();
|
|
774
|
+
function getDeepPropertyDescriptor(owner, key) {
|
|
775
|
+
let currentOwner = owner;
|
|
776
|
+
let descriptor;
|
|
777
|
+
while (currentOwner) {
|
|
778
|
+
descriptor = Object.getOwnPropertyDescriptor(currentOwner, key);
|
|
779
|
+
if (descriptor) return {
|
|
780
|
+
owner: currentOwner,
|
|
781
|
+
descriptor
|
|
782
|
+
};
|
|
783
|
+
currentOwner = Object.getPrototypeOf(currentOwner);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
730
786
|
function hasConfigurableGlobal(propertyName) {
|
|
731
|
-
const
|
|
732
|
-
if (typeof
|
|
787
|
+
const match = getDeepPropertyDescriptor(globalThis, propertyName);
|
|
788
|
+
if (typeof match === "undefined") return false;
|
|
789
|
+
const { descriptor } = match;
|
|
733
790
|
if (typeof descriptor.get === "function" && typeof descriptor.get() === "undefined") return false;
|
|
734
791
|
if (typeof descriptor.get === "undefined" && descriptor.value == null) return false;
|
|
735
792
|
if (typeof descriptor.set === "undefined" && !descriptor.configurable) {
|
|
@@ -805,7 +862,7 @@ var DeferredPromise = class extends Promise {
|
|
|
805
862
|
}
|
|
806
863
|
};
|
|
807
864
|
|
|
808
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
865
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
|
|
809
866
|
function bindEvent(target, event) {
|
|
810
867
|
Object.defineProperties(event, {
|
|
811
868
|
target: {
|
|
@@ -821,8 +878,8 @@ function bindEvent(target, event) {
|
|
|
821
878
|
});
|
|
822
879
|
return event;
|
|
823
880
|
}
|
|
824
|
-
var kCancelable = Symbol("kCancelable");
|
|
825
|
-
var kDefaultPrevented = Symbol("kDefaultPrevented");
|
|
881
|
+
var kCancelable = /* @__PURE__ */ Symbol("kCancelable");
|
|
882
|
+
var kDefaultPrevented = /* @__PURE__ */ Symbol("kDefaultPrevented");
|
|
826
883
|
var CancelableMessageEvent = class extends MessageEvent {
|
|
827
884
|
constructor(type, init) {
|
|
828
885
|
super(type, init);
|
|
@@ -875,8 +932,8 @@ var CancelableCloseEvent = class extends CloseEvent {
|
|
|
875
932
|
if (this.cancelable && !this[kDefaultPrevented]) this[kDefaultPrevented] = true;
|
|
876
933
|
}
|
|
877
934
|
};
|
|
878
|
-
var kEmitter$1 = Symbol("kEmitter");
|
|
879
|
-
var kBoundListener$1 = Symbol("kBoundListener");
|
|
935
|
+
var kEmitter$1 = /* @__PURE__ */ Symbol("kEmitter");
|
|
936
|
+
var kBoundListener$1 = /* @__PURE__ */ Symbol("kBoundListener");
|
|
880
937
|
var WebSocketClientConnection = class {
|
|
881
938
|
constructor(socket, transport) {
|
|
882
939
|
this.socket = socket;
|
|
@@ -933,9 +990,9 @@ var WebSocketClientConnection = class {
|
|
|
933
990
|
}
|
|
934
991
|
};
|
|
935
992
|
var WEBSOCKET_CLOSE_CODE_RANGE_ERROR = "InvalidAccessError: close code out of user configurable range";
|
|
936
|
-
var kPassthroughPromise = Symbol("kPassthroughPromise");
|
|
937
|
-
var kOnSend = Symbol("kOnSend");
|
|
938
|
-
var kClose = Symbol("kClose");
|
|
993
|
+
var kPassthroughPromise = /* @__PURE__ */ Symbol("kPassthroughPromise");
|
|
994
|
+
var kOnSend = /* @__PURE__ */ Symbol("kOnSend");
|
|
995
|
+
var kClose = /* @__PURE__ */ Symbol("kClose");
|
|
939
996
|
var WebSocketOverride = class extends EventTarget {
|
|
940
997
|
static {
|
|
941
998
|
this.CONNECTING = 0;
|
|
@@ -1055,9 +1112,9 @@ function getDataSize(data) {
|
|
|
1055
1112
|
if (data instanceof Blob) return data.size;
|
|
1056
1113
|
return data.byteLength;
|
|
1057
1114
|
}
|
|
1058
|
-
var kEmitter = Symbol("kEmitter");
|
|
1059
|
-
var kBoundListener = Symbol("kBoundListener");
|
|
1060
|
-
var kSend = Symbol("kSend");
|
|
1115
|
+
var kEmitter = /* @__PURE__ */ Symbol("kEmitter");
|
|
1116
|
+
var kBoundListener = /* @__PURE__ */ Symbol("kBoundListener");
|
|
1117
|
+
var kSend = /* @__PURE__ */ Symbol("kSend");
|
|
1061
1118
|
var WebSocketServerConnection = class {
|
|
1062
1119
|
constructor(client, transport, createConnection) {
|
|
1063
1120
|
this.client = client;
|
|
@@ -1257,7 +1314,7 @@ var WebSocketClassTransport = class extends EventTarget {
|
|
|
1257
1314
|
};
|
|
1258
1315
|
var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
|
|
1259
1316
|
static {
|
|
1260
|
-
this.symbol = Symbol("websocket");
|
|
1317
|
+
this.symbol = /* @__PURE__ */ Symbol.for("websocket-interceptor");
|
|
1261
1318
|
}
|
|
1262
1319
|
constructor() {
|
|
1263
1320
|
super(WebSocketInterceptor2.symbol);
|
|
@@ -1266,7 +1323,7 @@ var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
|
|
|
1266
1323
|
return hasConfigurableGlobal("WebSocket");
|
|
1267
1324
|
}
|
|
1268
1325
|
setup() {
|
|
1269
|
-
const
|
|
1326
|
+
const logger = this.logger.extend("setup");
|
|
1270
1327
|
const WebSocketProxy = new Proxy(globalThis.WebSocket, { construct: (target, args, newTarget) => {
|
|
1271
1328
|
const [url, protocols] = args;
|
|
1272
1329
|
const createConnection = () => {
|
|
@@ -1302,13 +1359,9 @@ var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
|
|
|
1302
1359
|
});
|
|
1303
1360
|
return socket;
|
|
1304
1361
|
} });
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
});
|
|
1309
|
-
this.subscriptions.push(() => {
|
|
1310
|
-
Object.defineProperty(globalThis, "WebSocket", originalWebSocketDescriptor);
|
|
1311
|
-
});
|
|
1362
|
+
logger.info("patching global WebSocket...");
|
|
1363
|
+
this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "WebSocket", () => WebSocketProxy));
|
|
1364
|
+
logger.info("global WebSocket patched!", globalThis.WebSocket.name);
|
|
1312
1365
|
}
|
|
1313
1366
|
};
|
|
1314
1367
|
|
|
@@ -1335,8 +1388,73 @@ function supportsReadableStreamTransfer() {
|
|
|
1335
1388
|
}
|
|
1336
1389
|
}
|
|
1337
1390
|
|
|
1338
|
-
// node_modules/.pnpm/@
|
|
1339
|
-
|
|
1391
|
+
// node_modules/.pnpm/@open-draft+deferred-promise@3.0.0/node_modules/@open-draft/deferred-promise/build/index.mjs
|
|
1392
|
+
function createDeferredExecutor2() {
|
|
1393
|
+
const executor = ((resolve, reject) => {
|
|
1394
|
+
executor.state = "pending";
|
|
1395
|
+
executor.resolve = (data) => {
|
|
1396
|
+
if (executor.state !== "pending") return;
|
|
1397
|
+
executor.result = data;
|
|
1398
|
+
const onFulfilled = (value) => {
|
|
1399
|
+
executor.state = "fulfilled";
|
|
1400
|
+
return value;
|
|
1401
|
+
};
|
|
1402
|
+
return resolve(data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled));
|
|
1403
|
+
};
|
|
1404
|
+
executor.reject = (reason) => {
|
|
1405
|
+
if (executor.state !== "pending") return;
|
|
1406
|
+
queueMicrotask(() => {
|
|
1407
|
+
executor.state = "rejected";
|
|
1408
|
+
});
|
|
1409
|
+
return reject(executor.rejectionReason = reason);
|
|
1410
|
+
};
|
|
1411
|
+
});
|
|
1412
|
+
return executor;
|
|
1413
|
+
}
|
|
1414
|
+
var DeferredPromise2 = class extends Promise {
|
|
1415
|
+
#executor;
|
|
1416
|
+
resolve;
|
|
1417
|
+
reject;
|
|
1418
|
+
constructor(executor = null) {
|
|
1419
|
+
const deferredExecutor = createDeferredExecutor2();
|
|
1420
|
+
super((originalResolve, originalReject) => {
|
|
1421
|
+
deferredExecutor(originalResolve, originalReject);
|
|
1422
|
+
executor?.(deferredExecutor.resolve, deferredExecutor.reject);
|
|
1423
|
+
});
|
|
1424
|
+
this.#executor = deferredExecutor;
|
|
1425
|
+
this.resolve = this.#executor.resolve;
|
|
1426
|
+
this.reject = this.#executor.reject;
|
|
1427
|
+
}
|
|
1428
|
+
get state() {
|
|
1429
|
+
return this.#executor.state;
|
|
1430
|
+
}
|
|
1431
|
+
get rejectionReason() {
|
|
1432
|
+
return this.#executor.rejectionReason;
|
|
1433
|
+
}
|
|
1434
|
+
then(onFulfilled, onRejected) {
|
|
1435
|
+
return this.#decorate(super.then(onFulfilled, onRejected));
|
|
1436
|
+
}
|
|
1437
|
+
catch(onRejected) {
|
|
1438
|
+
return this.#decorate(super.catch(onRejected));
|
|
1439
|
+
}
|
|
1440
|
+
finally(onfinally) {
|
|
1441
|
+
return this.#decorate(super.finally(onfinally));
|
|
1442
|
+
}
|
|
1443
|
+
#decorate(promise) {
|
|
1444
|
+
return Object.defineProperties(promise, {
|
|
1445
|
+
resolve: {
|
|
1446
|
+
configurable: true,
|
|
1447
|
+
value: this.resolve
|
|
1448
|
+
},
|
|
1449
|
+
reject: {
|
|
1450
|
+
configurable: true,
|
|
1451
|
+
value: this.reject
|
|
1452
|
+
}
|
|
1453
|
+
});
|
|
1454
|
+
}
|
|
1455
|
+
};
|
|
1456
|
+
|
|
1457
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/getRawRequest-B1BqgWG6.mjs
|
|
1340
1458
|
var InterceptorError = class InterceptorError2 extends Error {
|
|
1341
1459
|
constructor(message) {
|
|
1342
1460
|
super(message);
|
|
@@ -1418,6 +1536,68 @@ function getValueBySymbol(symbolName, source) {
|
|
|
1418
1536
|
});
|
|
1419
1537
|
if (symbol) return Reflect.get(source, symbol);
|
|
1420
1538
|
}
|
|
1539
|
+
var FetchRequest = class FetchRequest2 extends Request {
|
|
1540
|
+
static #resolveProperty(input, init = {}, key) {
|
|
1541
|
+
return init[key] ?? (input instanceof Request ? input[key] : void 0);
|
|
1542
|
+
}
|
|
1543
|
+
/**
|
|
1544
|
+
* Check if the given request method is configurable.
|
|
1545
|
+
* @see https://fetch.spec.whatwg.org/#methods
|
|
1546
|
+
*/
|
|
1547
|
+
static isConfigurableMethod(method) {
|
|
1548
|
+
return method !== "CONNECT" && method !== "TRACE" && method !== "TRACK";
|
|
1549
|
+
}
|
|
1550
|
+
static isMethodWithBody(method) {
|
|
1551
|
+
return method !== "HEAD" && method !== "GET" && FetchRequest2.isConfigurableMethod(method);
|
|
1552
|
+
}
|
|
1553
|
+
/**
|
|
1554
|
+
* Check if the given request `mode` is configurable.
|
|
1555
|
+
* @see https://fetch.spec.whatwg.org/#concept-request-mode
|
|
1556
|
+
*/
|
|
1557
|
+
static isConfigurableMode(mode) {
|
|
1558
|
+
return mode !== "navigate" && mode !== "websocket" && mode !== "webtransport";
|
|
1559
|
+
}
|
|
1560
|
+
constructor(input, init) {
|
|
1561
|
+
const method = FetchRequest2.#resolveProperty(input, init, "method") || "GET";
|
|
1562
|
+
const safeMethod = FetchRequest2.isConfigurableMethod(method) ? method : "GET";
|
|
1563
|
+
const hasExplicitBody = init != null && "body" in init;
|
|
1564
|
+
const bodyInit = !FetchRequest2.isMethodWithBody(method) ? { body: void 0 } : hasExplicitBody ? { body: init.body } : {};
|
|
1565
|
+
const mode = FetchRequest2.#resolveProperty(input, init, "mode") ?? void 0;
|
|
1566
|
+
const safeMode = FetchRequest2.isConfigurableMode(mode) ? mode : void 0;
|
|
1567
|
+
super(input, {
|
|
1568
|
+
...init || {},
|
|
1569
|
+
method: safeMethod,
|
|
1570
|
+
mode: safeMode,
|
|
1571
|
+
duplex: init?.duplex ?? (FetchRequest2.isMethodWithBody(method) ? "half" : void 0),
|
|
1572
|
+
...bodyInit
|
|
1573
|
+
});
|
|
1574
|
+
if (method !== safeMethod) this.#setInternalProperty("method", method);
|
|
1575
|
+
if (method === "CONNECT") {
|
|
1576
|
+
const url = new URL(input instanceof Request ? input.url : input);
|
|
1577
|
+
let authority;
|
|
1578
|
+
if (url.protocol === "localhost:") authority = url.href;
|
|
1579
|
+
else authority = url.pathname.replace(/^\/+/, "");
|
|
1580
|
+
Object.defineProperty(this, "url", {
|
|
1581
|
+
get: () => authority,
|
|
1582
|
+
enumerable: true,
|
|
1583
|
+
configurable: true
|
|
1584
|
+
});
|
|
1585
|
+
}
|
|
1586
|
+
if (mode != null && mode !== safeMode) this.#setInternalProperty("mode", mode);
|
|
1587
|
+
}
|
|
1588
|
+
#setInternalProperty(key, value) {
|
|
1589
|
+
const internalState = getValueBySymbol("state", this);
|
|
1590
|
+
if (internalState) Reflect.set(internalState, key, value);
|
|
1591
|
+
else Object.defineProperty(this, key, {
|
|
1592
|
+
value,
|
|
1593
|
+
enumerable: true,
|
|
1594
|
+
configurable: true,
|
|
1595
|
+
writable: false
|
|
1596
|
+
});
|
|
1597
|
+
}
|
|
1598
|
+
};
|
|
1599
|
+
var kStatus = /* @__PURE__ */ Symbol("kStatus");
|
|
1600
|
+
var kUrl = /* @__PURE__ */ Symbol("kUrl");
|
|
1421
1601
|
var FetchResponse = class FetchResponse2 extends Response {
|
|
1422
1602
|
static {
|
|
1423
1603
|
this.STATUS_CODES_WITHOUT_BODY = [
|
|
@@ -1450,6 +1630,20 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1450
1630
|
static isResponseWithBody(status) {
|
|
1451
1631
|
return !FetchResponse2.STATUS_CODES_WITHOUT_BODY.includes(status);
|
|
1452
1632
|
}
|
|
1633
|
+
static setStatus(status, response) {
|
|
1634
|
+
const internalState = getValueBySymbol("state", response);
|
|
1635
|
+
if (internalState) internalState.status = status;
|
|
1636
|
+
else Object.defineProperty(response, "status", {
|
|
1637
|
+
value: status,
|
|
1638
|
+
enumerable: true,
|
|
1639
|
+
configurable: true,
|
|
1640
|
+
writable: false
|
|
1641
|
+
});
|
|
1642
|
+
Object.defineProperty(response, kStatus, {
|
|
1643
|
+
value: status,
|
|
1644
|
+
enumerable: false
|
|
1645
|
+
});
|
|
1646
|
+
}
|
|
1453
1647
|
static setUrl(url, response) {
|
|
1454
1648
|
if (!url || url === "about:" || !canParseUrl(url)) return;
|
|
1455
1649
|
const state = getValueBySymbol("state", response);
|
|
@@ -1460,6 +1654,10 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1460
1654
|
configurable: true,
|
|
1461
1655
|
writable: false
|
|
1462
1656
|
});
|
|
1657
|
+
Object.defineProperty(response, kUrl, {
|
|
1658
|
+
value: url,
|
|
1659
|
+
enumerable: false
|
|
1660
|
+
});
|
|
1463
1661
|
}
|
|
1464
1662
|
/**
|
|
1465
1663
|
* Parses the given raw HTTP headers into a Fetch API `Headers` instance.
|
|
@@ -1469,6 +1667,27 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1469
1667
|
for (let line = 0; line < rawHeaders.length; line += 2) headers.append(rawHeaders[line], rawHeaders[line + 1]);
|
|
1470
1668
|
return headers;
|
|
1471
1669
|
}
|
|
1670
|
+
/**
|
|
1671
|
+
* Safely clones the given `Response`.
|
|
1672
|
+
* Coerces response clone exceptions into 500 mocked responses.
|
|
1673
|
+
* Handy in the environments that introduce arbitrary response
|
|
1674
|
+
* cloning restrictions, like "101 Switching Protocols" cloning
|
|
1675
|
+
* in "miniflare".
|
|
1676
|
+
*/
|
|
1677
|
+
static clone(response) {
|
|
1678
|
+
try {
|
|
1679
|
+
return response.clone();
|
|
1680
|
+
} catch (error2) {
|
|
1681
|
+
return Response.json(error2 instanceof Error ? {
|
|
1682
|
+
name: error2.name,
|
|
1683
|
+
message: error2.message,
|
|
1684
|
+
stack: error2.stack
|
|
1685
|
+
} : {}, {
|
|
1686
|
+
status: 500,
|
|
1687
|
+
statusText: "Unclonable Response"
|
|
1688
|
+
});
|
|
1689
|
+
}
|
|
1690
|
+
}
|
|
1472
1691
|
constructor(body, init = {}) {
|
|
1473
1692
|
const status = init.status ?? 200;
|
|
1474
1693
|
const safeStatus = FetchResponse2.isConfigurableStatusCode(status) ? status : 200;
|
|
@@ -1478,25 +1697,24 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1478
1697
|
statusText: init.statusText,
|
|
1479
1698
|
headers: init.headers
|
|
1480
1699
|
});
|
|
1481
|
-
if (status !== safeStatus)
|
|
1482
|
-
const state = getValueBySymbol("state", this);
|
|
1483
|
-
if (state) state.status = status;
|
|
1484
|
-
else Object.defineProperty(this, "status", {
|
|
1485
|
-
value: status,
|
|
1486
|
-
enumerable: true,
|
|
1487
|
-
configurable: true,
|
|
1488
|
-
writable: false
|
|
1489
|
-
});
|
|
1490
|
-
}
|
|
1700
|
+
if (status !== safeStatus) FetchResponse2.setStatus(status, this);
|
|
1491
1701
|
FetchResponse2.setUrl(init.url, this);
|
|
1492
1702
|
}
|
|
1703
|
+
clone() {
|
|
1704
|
+
const clonedResponse = super.clone();
|
|
1705
|
+
const customStatus = Reflect.get(this, kStatus);
|
|
1706
|
+
if (customStatus) FetchResponse2.setStatus(customStatus, clonedResponse);
|
|
1707
|
+
const customUrl = Reflect.get(this, kUrl);
|
|
1708
|
+
if (customUrl) FetchResponse2.setUrl(customUrl, clonedResponse);
|
|
1709
|
+
return clonedResponse;
|
|
1710
|
+
}
|
|
1493
1711
|
};
|
|
1494
|
-
var kRawRequest = Symbol("kRawRequest");
|
|
1712
|
+
var kRawRequest = /* @__PURE__ */ Symbol("kRawRequest");
|
|
1495
1713
|
function setRawRequest(request, rawRequest) {
|
|
1496
1714
|
Reflect.set(request, kRawRequest, rawRequest);
|
|
1497
1715
|
}
|
|
1498
1716
|
|
|
1499
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
1717
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/bufferUtils-BiiO6HZv.mjs
|
|
1500
1718
|
var encoder = new TextEncoder();
|
|
1501
1719
|
function encodeBuffer(text) {
|
|
1502
1720
|
return encoder.encode(text);
|
|
@@ -1605,7 +1823,7 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
|
|
|
1605
1823
|
return registrationResult;
|
|
1606
1824
|
};
|
|
1607
1825
|
|
|
1608
|
-
// node_modules/.pnpm/rettime@0.
|
|
1826
|
+
// node_modules/.pnpm/rettime@0.11.11/node_modules/rettime/build/lens-list.mjs
|
|
1609
1827
|
var LensList = class {
|
|
1610
1828
|
#list;
|
|
1611
1829
|
#lens;
|
|
@@ -1647,11 +1865,17 @@ var LensList = class {
|
|
|
1647
1865
|
}
|
|
1648
1866
|
/**
|
|
1649
1867
|
* Delete the value belonging to the given key.
|
|
1868
|
+
* Returns `true` if the value was present and removed, `false` otherwise.
|
|
1650
1869
|
*/
|
|
1651
1870
|
delete(key, value) {
|
|
1652
|
-
if (this.size === 0) return;
|
|
1653
|
-
|
|
1654
|
-
|
|
1871
|
+
if (this.size === 0) return false;
|
|
1872
|
+
const values = this.#lens.get(key);
|
|
1873
|
+
if (!values) return false;
|
|
1874
|
+
const index = values.indexOf(value);
|
|
1875
|
+
if (index === -1) return false;
|
|
1876
|
+
values.splice(index, 1);
|
|
1877
|
+
this.#list.splice(this.#list.findIndex((item) => item[0] === key && item[1] === value), 1);
|
|
1878
|
+
return true;
|
|
1655
1879
|
}
|
|
1656
1880
|
/**
|
|
1657
1881
|
* Delete all values belogning to the given key.
|
|
@@ -1674,10 +1898,10 @@ var LensList = class {
|
|
|
1674
1898
|
}
|
|
1675
1899
|
};
|
|
1676
1900
|
|
|
1677
|
-
// node_modules/.pnpm/rettime@0.
|
|
1678
|
-
var kDefaultPrevented2 = Symbol("kDefaultPrevented");
|
|
1679
|
-
var kPropagationStopped = Symbol("kPropagationStopped");
|
|
1680
|
-
var kImmediatePropagationStopped = Symbol("kImmediatePropagationStopped");
|
|
1901
|
+
// node_modules/.pnpm/rettime@0.11.11/node_modules/rettime/build/index.mjs
|
|
1902
|
+
var kDefaultPrevented2 = /* @__PURE__ */ Symbol("kDefaultPrevented");
|
|
1903
|
+
var kPropagationStopped = /* @__PURE__ */ Symbol("kPropagationStopped");
|
|
1904
|
+
var kImmediatePropagationStopped = /* @__PURE__ */ Symbol("kImmediatePropagationStopped");
|
|
1681
1905
|
var TypedEvent = class extends MessageEvent {
|
|
1682
1906
|
/**
|
|
1683
1907
|
* @note Keep a placeholder property with the return type
|
|
@@ -1704,11 +1928,68 @@ var TypedEvent = class extends MessageEvent {
|
|
|
1704
1928
|
this[kImmediatePropagationStopped] = true;
|
|
1705
1929
|
}
|
|
1706
1930
|
};
|
|
1707
|
-
var kListenerOptions = Symbol("kListenerOptions");
|
|
1708
1931
|
var Emitter2 = class {
|
|
1709
1932
|
#listeners;
|
|
1933
|
+
#listenerOptions;
|
|
1934
|
+
#listenerAbortCleanups;
|
|
1935
|
+
#typelessListeners;
|
|
1936
|
+
#hookListeners;
|
|
1937
|
+
#hookListenerOptions;
|
|
1938
|
+
#hookListenerAbortCleanups;
|
|
1939
|
+
hooks;
|
|
1710
1940
|
constructor() {
|
|
1711
1941
|
this.#listeners = new LensList();
|
|
1942
|
+
this.#listenerOptions = /* @__PURE__ */ new WeakMap();
|
|
1943
|
+
this.#listenerAbortCleanups = /* @__PURE__ */ new WeakMap();
|
|
1944
|
+
this.#typelessListeners = /* @__PURE__ */ new WeakSet();
|
|
1945
|
+
this.#hookListeners = new LensList();
|
|
1946
|
+
this.#hookListenerOptions = /* @__PURE__ */ new WeakMap();
|
|
1947
|
+
this.#hookListenerAbortCleanups = /* @__PURE__ */ new WeakMap();
|
|
1948
|
+
this.hooks = {
|
|
1949
|
+
on: (hook, callback, options) => {
|
|
1950
|
+
if (options?.signal?.aborted) return;
|
|
1951
|
+
if (options?.once) {
|
|
1952
|
+
const original = callback;
|
|
1953
|
+
const wrapper = ((...args) => {
|
|
1954
|
+
this.#deleteHookListener(hook, wrapper);
|
|
1955
|
+
return original(...args);
|
|
1956
|
+
});
|
|
1957
|
+
callback = wrapper;
|
|
1958
|
+
}
|
|
1959
|
+
this.#hookListeners.append(hook, callback);
|
|
1960
|
+
if (options) this.#hookListenerOptions.set(callback, options);
|
|
1961
|
+
if (options?.signal) {
|
|
1962
|
+
const { signal } = options;
|
|
1963
|
+
const onAbort = () => {
|
|
1964
|
+
this.#deleteHookListener(hook, callback);
|
|
1965
|
+
};
|
|
1966
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1967
|
+
this.#hookListenerAbortCleanups.set(callback, () => {
|
|
1968
|
+
signal.removeEventListener("abort", onAbort);
|
|
1969
|
+
});
|
|
1970
|
+
}
|
|
1971
|
+
},
|
|
1972
|
+
removeListener: (hook, callback) => {
|
|
1973
|
+
this.#deleteHookListener(hook, callback);
|
|
1974
|
+
}
|
|
1975
|
+
};
|
|
1976
|
+
}
|
|
1977
|
+
#deleteHookListener(hook, callback) {
|
|
1978
|
+
this.#hookListeners.delete(hook, callback);
|
|
1979
|
+
const cleanup = this.#hookListenerAbortCleanups.get(callback);
|
|
1980
|
+
if (cleanup) {
|
|
1981
|
+
cleanup();
|
|
1982
|
+
this.#hookListenerAbortCleanups.delete(callback);
|
|
1983
|
+
}
|
|
1984
|
+
}
|
|
1985
|
+
#deleteListener(type, listener) {
|
|
1986
|
+
const removed = this.#listeners.delete(type, listener);
|
|
1987
|
+
const cleanup = this.#listenerAbortCleanups.get(listener);
|
|
1988
|
+
if (cleanup) {
|
|
1989
|
+
cleanup();
|
|
1990
|
+
this.#listenerAbortCleanups.delete(listener);
|
|
1991
|
+
}
|
|
1992
|
+
return removed;
|
|
1712
1993
|
}
|
|
1713
1994
|
/**
|
|
1714
1995
|
* Adds a listener for the given event type.
|
|
@@ -1810,7 +2091,9 @@ var Emitter2 = class {
|
|
|
1810
2091
|
* Removes a listener for the given event type.
|
|
1811
2092
|
*/
|
|
1812
2093
|
removeListener(type, listener) {
|
|
1813
|
-
this.#
|
|
2094
|
+
const options = this.#listenerOptions.get(listener);
|
|
2095
|
+
if (!this.#deleteListener(type, listener)) return;
|
|
2096
|
+
for (const hook of this.#hookListeners.get("removeListener").slice()) hook(type, listener, options);
|
|
1814
2097
|
}
|
|
1815
2098
|
/**
|
|
1816
2099
|
* Removes all listeners for the given event type.
|
|
@@ -1818,10 +2101,12 @@ var Emitter2 = class {
|
|
|
1818
2101
|
*/
|
|
1819
2102
|
removeAllListeners(type) {
|
|
1820
2103
|
if (type == null) {
|
|
1821
|
-
this.#listeners.
|
|
2104
|
+
for (const [listenerType, listeners$1] of this.#listeners.entries()) while (listeners$1.length > 0) this.removeListener(listenerType, listeners$1[0]);
|
|
2105
|
+
for (const [hookType, hookListener] of [...this.#hookListeners]) if (!this.#hookListenerOptions.get(hookListener)?.persist) this.#deleteHookListener(hookType, hookListener);
|
|
1822
2106
|
return;
|
|
1823
2107
|
}
|
|
1824
|
-
this
|
|
2108
|
+
const listeners = this.listeners(type);
|
|
2109
|
+
while (listeners.length > 0) this.removeListener(type, listeners[0]);
|
|
1825
2110
|
}
|
|
1826
2111
|
/**
|
|
1827
2112
|
* Returns the list of listeners for the given event type.
|
|
@@ -1840,25 +2125,31 @@ var Emitter2 = class {
|
|
|
1840
2125
|
return this.listeners(type).length;
|
|
1841
2126
|
}
|
|
1842
2127
|
#addListener(type, listener, options, insertMode = "append") {
|
|
2128
|
+
if (options?.signal?.aborted) return;
|
|
2129
|
+
for (const hook of this.#hookListeners.get("newListener").slice()) hook(type, listener, options);
|
|
2130
|
+
if (type === "*") this.#typelessListeners.add(listener);
|
|
1843
2131
|
if (insertMode === "prepend") this.#listeners.prepend(type, listener);
|
|
1844
2132
|
else this.#listeners.append(type, listener);
|
|
1845
2133
|
if (options) {
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
2134
|
+
this.#listenerOptions.set(listener, options);
|
|
2135
|
+
if (options.signal) {
|
|
2136
|
+
const { signal } = options;
|
|
2137
|
+
const onAbort = () => {
|
|
2138
|
+
this.removeListener(type, listener);
|
|
2139
|
+
};
|
|
2140
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
2141
|
+
this.#listenerAbortCleanups.set(listener, () => {
|
|
2142
|
+
signal.removeEventListener("abort", onAbort);
|
|
2143
|
+
});
|
|
2144
|
+
}
|
|
1854
2145
|
}
|
|
1855
2146
|
}
|
|
1856
2147
|
#proxyEvent(event) {
|
|
1857
2148
|
const { stopPropagation } = event;
|
|
1858
|
-
event.stopPropagation =
|
|
2149
|
+
event.stopPropagation = () => {
|
|
1859
2150
|
event[kPropagationStopped] = this;
|
|
1860
|
-
|
|
1861
|
-
}
|
|
2151
|
+
stopPropagation.call(event);
|
|
2152
|
+
};
|
|
1862
2153
|
return {
|
|
1863
2154
|
event,
|
|
1864
2155
|
revoke() {
|
|
@@ -1867,22 +2158,30 @@ var Emitter2 = class {
|
|
|
1867
2158
|
};
|
|
1868
2159
|
}
|
|
1869
2160
|
#callListener(event, listener) {
|
|
2161
|
+
for (const hook of this.#hookListeners.get("beforeEmit").slice()) if (hook(event) === false) return;
|
|
1870
2162
|
const returnValue = listener.call(this, event);
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
this.#
|
|
2163
|
+
const options = this.#listenerOptions.get(listener);
|
|
2164
|
+
if (options?.once) {
|
|
2165
|
+
const type = this.#isTypelessListener(listener) ? "*" : event.type;
|
|
2166
|
+
if (this.#deleteListener(type, listener)) for (const hook of this.#hookListeners.get("removeListener").slice()) hook(type, listener, options);
|
|
1874
2167
|
}
|
|
1875
2168
|
return returnValue;
|
|
1876
2169
|
}
|
|
1877
2170
|
/**
|
|
1878
2171
|
* Return a list of all event listeners relevant for the given event type.
|
|
1879
2172
|
* This includes the explicit event listeners and also typeless event listeners.
|
|
2173
|
+
*
|
|
2174
|
+
* @note Snapshot the matching listeners before yielding. Listeners can add or
|
|
2175
|
+
* remove other listeners during emission (e.g. `earlyOn` unshifts `#list`),
|
|
2176
|
+
* which would otherwise shift the live iterator and re-yield prior entries.
|
|
1880
2177
|
*/
|
|
1881
2178
|
*#matchListeners(type) {
|
|
1882
|
-
|
|
2179
|
+
const snapshot = [];
|
|
2180
|
+
for (const [key, listener] of this.#listeners) if (key === "*" || key === type) snapshot.push(listener);
|
|
2181
|
+
yield* snapshot;
|
|
1883
2182
|
}
|
|
1884
2183
|
#isTypelessListener(listener) {
|
|
1885
|
-
return this.#
|
|
2184
|
+
return this.#typelessListeners.has(listener);
|
|
1886
2185
|
}
|
|
1887
2186
|
};
|
|
1888
2187
|
|
|
@@ -1915,21 +2214,31 @@ var WorkerEvent = class extends TypedEvent {
|
|
|
1915
2214
|
}
|
|
1916
2215
|
};
|
|
1917
2216
|
var WorkerChannel = class extends Emitter2 {
|
|
2217
|
+
#getWorker;
|
|
2218
|
+
#controller;
|
|
1918
2219
|
constructor(options) {
|
|
1919
2220
|
super();
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
2221
|
+
invariant(
|
|
2222
|
+
SUPPORTS_SERVICE_WORKER,
|
|
2223
|
+
"Failed to open a WorkerChannel: Service Worker is not supported in this environment."
|
|
2224
|
+
);
|
|
2225
|
+
this.#getWorker = options.getWorker;
|
|
2226
|
+
this.#controller = new AbortController();
|
|
2227
|
+
navigator.serviceWorker.addEventListener(
|
|
2228
|
+
"message",
|
|
2229
|
+
async (event) => {
|
|
2230
|
+
const worker = await this.#getWorker();
|
|
2231
|
+
if (event.source != null && event.source !== worker) {
|
|
2232
|
+
return;
|
|
2233
|
+
}
|
|
2234
|
+
if (event.data && (0, import_isObject.isObject)(event.data) && "type" in event.data) {
|
|
2235
|
+
this.emit(new WorkerEvent(event));
|
|
2236
|
+
}
|
|
2237
|
+
},
|
|
2238
|
+
{
|
|
2239
|
+
signal: this.#controller.signal
|
|
1931
2240
|
}
|
|
1932
|
-
|
|
2241
|
+
);
|
|
1933
2242
|
}
|
|
1934
2243
|
/**
|
|
1935
2244
|
* Send data to the Service Worker controlling this client.
|
|
@@ -1938,12 +2247,20 @@ var WorkerChannel = class extends Emitter2 {
|
|
|
1938
2247
|
postMessage(type) {
|
|
1939
2248
|
invariant(
|
|
1940
2249
|
SUPPORTS_SERVICE_WORKER,
|
|
1941
|
-
"Failed to post message on a WorkerChannel: the Service Worker API is unavailable in this
|
|
2250
|
+
"Failed to post message on a WorkerChannel: the Service Worker API is unavailable in this environment. This is likely an issue with MSW. Please report it on GitHub: https://github.com/mswjs/msw/issues"
|
|
1942
2251
|
);
|
|
1943
|
-
this.
|
|
2252
|
+
this.#getWorker().then((worker) => {
|
|
1944
2253
|
worker.postMessage(type);
|
|
1945
2254
|
});
|
|
1946
2255
|
}
|
|
2256
|
+
/**
|
|
2257
|
+
* Terminal teardown. Removes the `navigator.serviceWorker` message listener
|
|
2258
|
+
* and all emitter subscriptions. The channel is not usable afterwards.
|
|
2259
|
+
*/
|
|
2260
|
+
terminate() {
|
|
2261
|
+
this.#controller.abort();
|
|
2262
|
+
this.removeAllListeners();
|
|
2263
|
+
}
|
|
1947
2264
|
};
|
|
1948
2265
|
|
|
1949
2266
|
// src/browser/utils/pruneGetRequestBody.ts
|
|
@@ -1975,40 +2292,63 @@ function validateWorkerScope(registration) {
|
|
|
1975
2292
|
}
|
|
1976
2293
|
}
|
|
1977
2294
|
|
|
2295
|
+
// src/browser/utils/should-invalidate-worker.ts
|
|
2296
|
+
function shouldInvalidateWorker(prevOptions, nextOptions) {
|
|
2297
|
+
return prevOptions.findWorker !== nextOptions.findWorker || prevOptions.serviceWorker.url !== nextOptions.serviceWorker.url || JSON.stringify(prevOptions.serviceWorker.options) !== JSON.stringify(nextOptions.serviceWorker.options);
|
|
2298
|
+
}
|
|
2299
|
+
|
|
1978
2300
|
// src/browser/sources/service-worker-source.ts
|
|
1979
|
-
var ServiceWorkerSource = class extends import_network_source.NetworkSource {
|
|
2301
|
+
var ServiceWorkerSource = class _ServiceWorkerSource extends import_network_source.NetworkSource {
|
|
2302
|
+
static #current;
|
|
2303
|
+
/**
|
|
2304
|
+
* Create a new Service Worker source or reuse an existing one.
|
|
2305
|
+
* These sources act as a singleton and only get recreated if the options change.
|
|
2306
|
+
*/
|
|
2307
|
+
static async from(options) {
|
|
2308
|
+
if (_ServiceWorkerSource.#current == null) {
|
|
2309
|
+
_ServiceWorkerSource.#current = new _ServiceWorkerSource(options);
|
|
2310
|
+
} else if (shouldInvalidateWorker(_ServiceWorkerSource.#current.#options, options)) {
|
|
2311
|
+
await _ServiceWorkerSource.#current.terminate();
|
|
2312
|
+
_ServiceWorkerSource.#current = new _ServiceWorkerSource(options);
|
|
2313
|
+
}
|
|
2314
|
+
return _ServiceWorkerSource.#current;
|
|
2315
|
+
}
|
|
2316
|
+
#options;
|
|
2317
|
+
#frames;
|
|
2318
|
+
#channel;
|
|
2319
|
+
#listenerController;
|
|
2320
|
+
#clientPromise;
|
|
2321
|
+
#keepAliveInterval;
|
|
2322
|
+
#stoppedAt;
|
|
2323
|
+
workerPromise;
|
|
1980
2324
|
constructor(options) {
|
|
1981
2325
|
super();
|
|
1982
|
-
this.options = options;
|
|
1983
2326
|
invariant(
|
|
1984
2327
|
supportsServiceWorker(),
|
|
1985
2328
|
"Failed to use Service Worker as the network source: the Service Worker API is not supported in this environment"
|
|
1986
2329
|
);
|
|
2330
|
+
this.#options = options;
|
|
1987
2331
|
this.#frames = /* @__PURE__ */ new Map();
|
|
1988
|
-
this.workerPromise = new
|
|
2332
|
+
this.workerPromise = new DeferredPromise2();
|
|
1989
2333
|
this.#channel = new WorkerChannel({
|
|
1990
|
-
|
|
2334
|
+
getWorker: () => this.workerPromise.then(([worker]) => worker)
|
|
1991
2335
|
});
|
|
1992
2336
|
}
|
|
1993
|
-
#frames;
|
|
1994
|
-
#channel;
|
|
1995
|
-
#clientPromise;
|
|
1996
|
-
#keepAliveInterval;
|
|
1997
|
-
#stoppedAt;
|
|
1998
|
-
workerPromise;
|
|
1999
2337
|
async enable() {
|
|
2000
|
-
this.#stoppedAt
|
|
2001
|
-
if (this.workerPromise.state !== "pending") {
|
|
2338
|
+
if (this.workerPromise.state === "fulfilled" && typeof this.#stoppedAt == "undefined") {
|
|
2002
2339
|
import_devUtils3.devUtils.warn(
|
|
2003
2340
|
'Found a redundant "worker.start()" call. Note that starting the worker while mocking is already enabled will have no effect. Consider removing this "worker.start()" call.'
|
|
2004
2341
|
);
|
|
2005
2342
|
return this.workerPromise.then(([, registration2]) => registration2);
|
|
2006
2343
|
}
|
|
2344
|
+
this.#stoppedAt = void 0;
|
|
2007
2345
|
this.#channel.removeAllListeners();
|
|
2346
|
+
this.#frames.clear();
|
|
2347
|
+
this.#listenerController = new AbortController();
|
|
2008
2348
|
const [worker, registration] = await this.#startWorker();
|
|
2009
2349
|
if (worker.state !== "activated") {
|
|
2010
2350
|
const controller = new AbortController();
|
|
2011
|
-
const activationPromise = new
|
|
2351
|
+
const activationPromise = new DeferredPromise2();
|
|
2012
2352
|
activationPromise.then(() => controller.abort());
|
|
2013
2353
|
worker.addEventListener(
|
|
2014
2354
|
"statechange",
|
|
@@ -2017,18 +2357,20 @@ var ServiceWorkerSource = class extends import_network_source.NetworkSource {
|
|
|
2017
2357
|
activationPromise.resolve();
|
|
2018
2358
|
}
|
|
2019
2359
|
},
|
|
2020
|
-
{
|
|
2360
|
+
{
|
|
2361
|
+
signal: controller.signal
|
|
2362
|
+
}
|
|
2021
2363
|
);
|
|
2022
2364
|
await activationPromise;
|
|
2023
2365
|
}
|
|
2024
2366
|
this.#channel.postMessage("MOCK_ACTIVATE");
|
|
2025
|
-
const clientConfirmationPromise = new
|
|
2367
|
+
const clientConfirmationPromise = new DeferredPromise2();
|
|
2026
2368
|
this.#clientPromise = clientConfirmationPromise;
|
|
2027
2369
|
this.#channel.once("MOCKING_ENABLED", (event) => {
|
|
2028
2370
|
clientConfirmationPromise.resolve(event.data.client);
|
|
2029
2371
|
});
|
|
2030
2372
|
await clientConfirmationPromise;
|
|
2031
|
-
if (!this
|
|
2373
|
+
if (!this.#options.quiet) {
|
|
2032
2374
|
this.#printStartMessage();
|
|
2033
2375
|
}
|
|
2034
2376
|
return registration;
|
|
@@ -2041,24 +2383,47 @@ var ServiceWorkerSource = class extends import_network_source.NetworkSource {
|
|
|
2041
2383
|
return;
|
|
2042
2384
|
}
|
|
2043
2385
|
this.#stoppedAt = Date.now();
|
|
2044
|
-
this.#
|
|
2045
|
-
this
|
|
2046
|
-
|
|
2386
|
+
this.#listenerController?.abort();
|
|
2387
|
+
this.#listenerController = void 0;
|
|
2388
|
+
this.#channel.postMessage("CLIENT_CLOSED");
|
|
2389
|
+
if (!this.#options.quiet) {
|
|
2047
2390
|
this.#printStopMessage();
|
|
2048
2391
|
}
|
|
2049
2392
|
}
|
|
2393
|
+
/**
|
|
2394
|
+
* Terminal teardown. Unregisters the Service Worker, tears down the channel,
|
|
2395
|
+
* and clears timers. Called when the singleton is being replaced with one
|
|
2396
|
+
* that has different options. The instance is not usable afterwards.
|
|
2397
|
+
*/
|
|
2398
|
+
async terminate() {
|
|
2399
|
+
if (this.#keepAliveInterval != null) {
|
|
2400
|
+
clearInterval(this.#keepAliveInterval);
|
|
2401
|
+
this.#keepAliveInterval = void 0;
|
|
2402
|
+
}
|
|
2403
|
+
this.#frames.clear();
|
|
2404
|
+
this.#channel.terminate();
|
|
2405
|
+
this.#listenerController?.abort();
|
|
2406
|
+
this.#listenerController = void 0;
|
|
2407
|
+
if (this.workerPromise.state === "fulfilled") {
|
|
2408
|
+
const [, registration] = await this.workerPromise;
|
|
2409
|
+
await registration.unregister();
|
|
2410
|
+
}
|
|
2411
|
+
if (_ServiceWorkerSource.#current === this) {
|
|
2412
|
+
_ServiceWorkerSource.#current = void 0;
|
|
2413
|
+
}
|
|
2414
|
+
}
|
|
2050
2415
|
async #startWorker() {
|
|
2051
2416
|
if (this.#keepAliveInterval) {
|
|
2052
2417
|
clearInterval(this.#keepAliveInterval);
|
|
2053
2418
|
}
|
|
2054
|
-
const workerUrl = this
|
|
2419
|
+
const workerUrl = this.#options.serviceWorker.url;
|
|
2055
2420
|
const [worker, registration] = await getWorkerInstance(
|
|
2056
2421
|
workerUrl,
|
|
2057
|
-
this
|
|
2058
|
-
this
|
|
2422
|
+
this.#options.serviceWorker.options,
|
|
2423
|
+
this.#options.findWorker || this.#defaultFindWorker
|
|
2059
2424
|
);
|
|
2060
2425
|
if (worker == null) {
|
|
2061
|
-
const missingWorkerMessage = this
|
|
2426
|
+
const missingWorkerMessage = this.#options?.findWorker ? import_devUtils3.devUtils.formatMessage(
|
|
2062
2427
|
`Failed to locate the Service Worker registration using a custom "findWorker" predicate.
|
|
2063
2428
|
|
|
2064
2429
|
Please ensure that the custom predicate properly locates the Service Worker registration at "%s".
|
|
@@ -2076,16 +2441,28 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2076
2441
|
);
|
|
2077
2442
|
throw new Error(missingWorkerMessage);
|
|
2078
2443
|
}
|
|
2079
|
-
this.workerPromise.
|
|
2444
|
+
if (this.workerPromise.state === "pending") {
|
|
2445
|
+
this.workerPromise.resolve([worker, registration]);
|
|
2446
|
+
} else {
|
|
2447
|
+
this.workerPromise = new DeferredPromise2((resolve) => {
|
|
2448
|
+
resolve([worker, registration]);
|
|
2449
|
+
});
|
|
2450
|
+
}
|
|
2080
2451
|
this.#channel.on("REQUEST", this.#handleRequest.bind(this));
|
|
2081
2452
|
this.#channel.on("RESPONSE", this.#handleResponse.bind(this));
|
|
2082
|
-
window.addEventListener(
|
|
2083
|
-
|
|
2084
|
-
|
|
2453
|
+
window.addEventListener(
|
|
2454
|
+
"beforeunload",
|
|
2455
|
+
() => {
|
|
2456
|
+
if (worker.state !== "redundant") {
|
|
2457
|
+
this.#channel.postMessage("CLIENT_CLOSED");
|
|
2458
|
+
}
|
|
2459
|
+
clearInterval(this.#keepAliveInterval);
|
|
2460
|
+
window.postMessage({ type: "msw/worker:stop" });
|
|
2461
|
+
},
|
|
2462
|
+
{
|
|
2463
|
+
signal: this.#listenerController?.signal
|
|
2085
2464
|
}
|
|
2086
|
-
|
|
2087
|
-
window.postMessage({ type: "msw/worker:stop" });
|
|
2088
|
-
});
|
|
2465
|
+
);
|
|
2089
2466
|
await this.#checkWorkerIntegrity().catch((error2) => {
|
|
2090
2467
|
import_devUtils3.devUtils.error(
|
|
2091
2468
|
"Error while checking the worker script integrity. Please report this on GitHub (https://github.com/mswjs/msw/issues) and include the original error below."
|
|
@@ -2095,7 +2472,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2095
2472
|
this.#keepAliveInterval = window.setInterval(() => {
|
|
2096
2473
|
this.#channel.postMessage("KEEPALIVE_REQUEST");
|
|
2097
2474
|
}, 5e3);
|
|
2098
|
-
if (!this
|
|
2475
|
+
if (!this.#options.quiet) {
|
|
2099
2476
|
validateWorkerScope(registration);
|
|
2100
2477
|
}
|
|
2101
2478
|
return [worker, registration];
|
|
@@ -2115,11 +2492,12 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2115
2492
|
}
|
|
2116
2493
|
async #handleResponse(event) {
|
|
2117
2494
|
const { request, response, isMockedResponse } = event.data;
|
|
2495
|
+
const frame = this.#frames.get(request.id);
|
|
2118
2496
|
if (response.type?.includes("opaque")) {
|
|
2119
2497
|
this.#frames.delete(request.id);
|
|
2498
|
+
frame?.events.removeAllListeners();
|
|
2120
2499
|
return;
|
|
2121
2500
|
}
|
|
2122
|
-
const frame = this.#frames.get(request.id);
|
|
2123
2501
|
this.#frames.delete(request.id);
|
|
2124
2502
|
if (frame == null) {
|
|
2125
2503
|
return;
|
|
@@ -2143,27 +2521,31 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2143
2521
|
url: request.url
|
|
2144
2522
|
}
|
|
2145
2523
|
);
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2524
|
+
try {
|
|
2525
|
+
frame.events.emit(
|
|
2526
|
+
new import_http_frame.ResponseEvent(
|
|
2527
|
+
isMockedResponse ? "response:mocked" : "response:bypass",
|
|
2528
|
+
{
|
|
2529
|
+
requestId: frame.data.id,
|
|
2530
|
+
request: fetchRequest,
|
|
2531
|
+
response: fetchResponse,
|
|
2532
|
+
isMockedResponse
|
|
2533
|
+
}
|
|
2534
|
+
)
|
|
2535
|
+
);
|
|
2536
|
+
} finally {
|
|
2537
|
+
frame.events.removeAllListeners();
|
|
2538
|
+
}
|
|
2157
2539
|
}
|
|
2158
2540
|
#defaultFindWorker = (workerUrl, mockServiceWorkerUrl) => {
|
|
2159
2541
|
return workerUrl === mockServiceWorkerUrl;
|
|
2160
2542
|
};
|
|
2161
2543
|
async #checkWorkerIntegrity() {
|
|
2162
|
-
const integrityCheckPromise = new
|
|
2544
|
+
const integrityCheckPromise = new DeferredPromise2();
|
|
2163
2545
|
this.#channel.postMessage("INTEGRITY_CHECK_REQUEST");
|
|
2164
2546
|
this.#channel.once("INTEGRITY_CHECK_RESPONSE", (event) => {
|
|
2165
2547
|
const { checksum, packageVersion } = event.data;
|
|
2166
|
-
if (checksum !== "
|
|
2548
|
+
if (checksum !== "03cb67ac84128e63d7cd722a6e5b7f1e") {
|
|
2167
2549
|
import_devUtils3.devUtils.warn(
|
|
2168
2550
|
`The currently registered Service Worker has been generated by a different version of MSW (${packageVersion}) and may not be fully compatible with the installed version.
|
|
2169
2551
|
|
|
@@ -2283,7 +2665,7 @@ var until2 = async (promise) => {
|
|
|
2283
2665
|
}
|
|
2284
2666
|
};
|
|
2285
2667
|
|
|
2286
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
2668
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/handleRequest-CPPgsG7s.mjs
|
|
2287
2669
|
function isObject2(value, loose = false) {
|
|
2288
2670
|
return loose ? Object.prototype.toString.call(value).startsWith("[object ") : Object.prototype.toString.call(value) === "[object Object]";
|
|
2289
2671
|
}
|
|
@@ -2347,14 +2729,15 @@ async function handleRequest(options) {
|
|
|
2347
2729
|
return false;
|
|
2348
2730
|
};
|
|
2349
2731
|
const requestAbortPromise = new DeferredPromise();
|
|
2732
|
+
const onAbort = () => {
|
|
2733
|
+
requestAbortPromise.reject(options.request.signal?.reason);
|
|
2734
|
+
};
|
|
2350
2735
|
if (options.request.signal) {
|
|
2351
2736
|
if (options.request.signal.aborted) {
|
|
2352
2737
|
await options.controller.errorWith(options.request.signal.reason);
|
|
2353
2738
|
return;
|
|
2354
2739
|
}
|
|
2355
|
-
options.request.signal.addEventListener("abort",
|
|
2356
|
-
requestAbortPromise.reject(options.request.signal.reason);
|
|
2357
|
-
}, { once: true });
|
|
2740
|
+
options.request.signal.addEventListener("abort", onAbort, { once: true });
|
|
2358
2741
|
}
|
|
2359
2742
|
const result = await until2(async () => {
|
|
2360
2743
|
const requestListenersPromise = emitAsync(options.emitter, "request", {
|
|
@@ -2368,6 +2751,7 @@ async function handleRequest(options) {
|
|
|
2368
2751
|
options.controller.handled
|
|
2369
2752
|
]);
|
|
2370
2753
|
});
|
|
2754
|
+
options.request.signal?.removeEventListener("abort", onAbort);
|
|
2371
2755
|
if (requestAbortPromise.state === "rejected") {
|
|
2372
2756
|
await options.controller.errorWith(requestAbortPromise.rejectionReason);
|
|
2373
2757
|
return;
|
|
@@ -2400,7 +2784,7 @@ async function handleRequest(options) {
|
|
|
2400
2784
|
return options.controller.handled;
|
|
2401
2785
|
}
|
|
2402
2786
|
|
|
2403
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
2787
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/fetch-5IMPqr9e.mjs
|
|
2404
2788
|
function createNetworkError(cause) {
|
|
2405
2789
|
return Object.assign(/* @__PURE__ */ new TypeError("Failed to fetch"), { cause });
|
|
2406
2790
|
}
|
|
@@ -2411,7 +2795,7 @@ var REQUEST_BODY_HEADERS = [
|
|
|
2411
2795
|
"content-type",
|
|
2412
2796
|
"content-length"
|
|
2413
2797
|
];
|
|
2414
|
-
var kRedirectCount = Symbol("kRedirectCount");
|
|
2798
|
+
var kRedirectCount = /* @__PURE__ */ Symbol("kRedirectCount");
|
|
2415
2799
|
async function followFetchRedirect(request, response) {
|
|
2416
2800
|
if (response.status !== 303 && request.body != null) return Promise.reject(createNetworkError());
|
|
2417
2801
|
const requestUrl = new URL(request.url);
|
|
@@ -2493,7 +2877,7 @@ function decompressResponse(response) {
|
|
|
2493
2877
|
}
|
|
2494
2878
|
var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
2495
2879
|
static {
|
|
2496
|
-
this.symbol = Symbol("fetch");
|
|
2880
|
+
this.symbol = /* @__PURE__ */ Symbol.for("fetch-interceptor");
|
|
2497
2881
|
}
|
|
2498
2882
|
constructor() {
|
|
2499
2883
|
super(FetchInterceptor2.symbol);
|
|
@@ -2502,12 +2886,11 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2502
2886
|
return hasConfigurableGlobal("fetch");
|
|
2503
2887
|
}
|
|
2504
2888
|
async setup() {
|
|
2889
|
+
const logger = this.logger.extend("setup");
|
|
2505
2890
|
const pureFetch = globalThis.fetch;
|
|
2506
|
-
|
|
2507
|
-
globalThis.fetch = async (input, init) => {
|
|
2891
|
+
const fetchProxy = async (input, init) => {
|
|
2508
2892
|
const requestId = createRequestId();
|
|
2509
|
-
const
|
|
2510
|
-
const request = new Request(resolvedInput, init);
|
|
2893
|
+
const request = new FetchRequest(typeof input === "string" && typeof location !== "undefined" && !canParseUrl(input) ? new URL(input, location.href) : input, init);
|
|
2511
2894
|
if (input instanceof Request) setRawRequest(request, input);
|
|
2512
2895
|
const responsePromise = new DeferredPromise();
|
|
2513
2896
|
const controller = new RequestController(request, {
|
|
@@ -2519,7 +2902,7 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2519
2902
|
this.logger.info("original fetch performed", originalResponse);
|
|
2520
2903
|
if (this.emitter.listenerCount("response") > 0) {
|
|
2521
2904
|
this.logger.info('emitting the "response" event...');
|
|
2522
|
-
const responseClone =
|
|
2905
|
+
const responseClone = FetchResponse.clone(originalResponse);
|
|
2523
2906
|
await emitAsync(this.emitter, "response", {
|
|
2524
2907
|
response: responseClone,
|
|
2525
2908
|
isMockedResponse: false,
|
|
@@ -2536,9 +2919,12 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2536
2919
|
return;
|
|
2537
2920
|
}
|
|
2538
2921
|
this.logger.info("received mocked response!", { rawResponse });
|
|
2539
|
-
const
|
|
2540
|
-
|
|
2541
|
-
|
|
2922
|
+
const response = new FetchResponse(decompressResponse(rawResponse) || rawResponse.body, {
|
|
2923
|
+
url: request.url,
|
|
2924
|
+
status: rawResponse.status,
|
|
2925
|
+
statusText: rawResponse.statusText,
|
|
2926
|
+
headers: rawResponse.headers
|
|
2927
|
+
});
|
|
2542
2928
|
if (FetchResponse.isRedirectResponse(response.status)) {
|
|
2543
2929
|
if (request.redirect === "error") {
|
|
2544
2930
|
responsePromise.reject(createNetworkError("unexpected redirect"));
|
|
@@ -2556,7 +2942,7 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2556
2942
|
if (this.emitter.listenerCount("response") > 0) {
|
|
2557
2943
|
this.logger.info('emitting the "response" event...');
|
|
2558
2944
|
await emitAsync(this.emitter, "response", {
|
|
2559
|
-
response:
|
|
2945
|
+
response: FetchResponse.clone(response),
|
|
2560
2946
|
isMockedResponse: true,
|
|
2561
2947
|
request,
|
|
2562
2948
|
requestId
|
|
@@ -2580,20 +2966,13 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2580
2966
|
});
|
|
2581
2967
|
return responsePromise;
|
|
2582
2968
|
};
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
value: true
|
|
2587
|
-
});
|
|
2588
|
-
this.subscriptions.push(() => {
|
|
2589
|
-
Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, { value: void 0 });
|
|
2590
|
-
globalThis.fetch = pureFetch;
|
|
2591
|
-
this.logger.info('restored native "globalThis.fetch"!', globalThis.fetch.name);
|
|
2592
|
-
});
|
|
2969
|
+
logger.info("patching global fetch...");
|
|
2970
|
+
this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "fetch", () => fetchProxy));
|
|
2971
|
+
logger.info("global fetch patched!", globalThis.fetch.name);
|
|
2593
2972
|
}
|
|
2594
2973
|
};
|
|
2595
2974
|
|
|
2596
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
2975
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/XMLHttpRequest-DrZAf3w6.mjs
|
|
2597
2976
|
function concatArrayBuffer(left, right) {
|
|
2598
2977
|
const result = new Uint8Array(left.byteLength + right.byteLength);
|
|
2599
2978
|
result.set(left, 0);
|
|
@@ -2759,9 +3138,9 @@ async function getBodyByteLength(input) {
|
|
|
2759
3138
|
if (explicitContentLength != null && explicitContentLength !== "") return Number(explicitContentLength);
|
|
2760
3139
|
return (await input.arrayBuffer()).byteLength;
|
|
2761
3140
|
}
|
|
2762
|
-
var kIsRequestHandled = Symbol("kIsRequestHandled");
|
|
3141
|
+
var kIsRequestHandled = /* @__PURE__ */ Symbol("kIsRequestHandled");
|
|
2763
3142
|
var IS_NODE2 = isNodeProcess();
|
|
2764
|
-
var kFetchRequest = Symbol("kFetchRequest");
|
|
3143
|
+
var kFetchRequest = /* @__PURE__ */ Symbol("kFetchRequest");
|
|
2765
3144
|
var XMLHttpRequestController = class {
|
|
2766
3145
|
constructor(initialRequest, logger) {
|
|
2767
3146
|
this.initialRequest = initialRequest;
|
|
@@ -3099,7 +3478,7 @@ var XMLHttpRequestController = class {
|
|
|
3099
3478
|
toFetchApiRequest(body) {
|
|
3100
3479
|
this.logger.info("converting request to a Fetch API Request...");
|
|
3101
3480
|
const resolvedBody = body instanceof Document ? body.documentElement.innerText : body;
|
|
3102
|
-
const fetchRequest = new
|
|
3481
|
+
const fetchRequest = new FetchRequest(this.url.href, {
|
|
3103
3482
|
method: this.method,
|
|
3104
3483
|
headers: this.requestHeaders,
|
|
3105
3484
|
credentials: this.request.withCredentials ? "include" : "same-origin",
|
|
@@ -3184,34 +3563,24 @@ function createXMLHttpRequestProxy({ emitter, logger }) {
|
|
|
3184
3563
|
}
|
|
3185
3564
|
var XMLHttpRequestInterceptor = class XMLHttpRequestInterceptor2 extends Interceptor {
|
|
3186
3565
|
static {
|
|
3187
|
-
this.
|
|
3566
|
+
this.symbol = /* @__PURE__ */ Symbol.for("xhr-interceptor");
|
|
3188
3567
|
}
|
|
3189
3568
|
constructor() {
|
|
3190
|
-
super(XMLHttpRequestInterceptor2.
|
|
3569
|
+
super(XMLHttpRequestInterceptor2.symbol);
|
|
3191
3570
|
}
|
|
3192
3571
|
checkEnvironment() {
|
|
3193
3572
|
return hasConfigurableGlobal("XMLHttpRequest");
|
|
3194
3573
|
}
|
|
3195
3574
|
setup() {
|
|
3196
3575
|
const logger = this.logger.extend("setup");
|
|
3197
|
-
logger.info(
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
});
|
|
3204
|
-
logger.info(
|
|
3205
|
-
Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {
|
|
3206
|
-
enumerable: true,
|
|
3207
|
-
configurable: true,
|
|
3208
|
-
value: true
|
|
3209
|
-
});
|
|
3210
|
-
this.subscriptions.push(() => {
|
|
3211
|
-
Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, { value: void 0 });
|
|
3212
|
-
globalThis.XMLHttpRequest = PureXMLHttpRequest;
|
|
3213
|
-
logger.info('native "XMLHttpRequest" module restored!', globalThis.XMLHttpRequest.name);
|
|
3214
|
-
});
|
|
3576
|
+
logger.info("patching global XMLHttpRequest...");
|
|
3577
|
+
this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "XMLHttpRequest", () => {
|
|
3578
|
+
return createXMLHttpRequestProxy({
|
|
3579
|
+
emitter: this.emitter,
|
|
3580
|
+
logger: this.logger
|
|
3581
|
+
});
|
|
3582
|
+
}));
|
|
3583
|
+
logger.info("global XMLHttpRequest patched!", globalThis.XMLHttpRequest.name);
|
|
3215
3584
|
}
|
|
3216
3585
|
};
|
|
3217
3586
|
|
|
@@ -3225,6 +3594,7 @@ var FallbackHttpSource = class extends import_interceptor_source.InterceptorSour
|
|
|
3225
3594
|
});
|
|
3226
3595
|
this.options = options;
|
|
3227
3596
|
}
|
|
3597
|
+
options;
|
|
3228
3598
|
enable() {
|
|
3229
3599
|
super.enable();
|
|
3230
3600
|
if (!this.options.quiet) {
|
|
@@ -3284,7 +3654,7 @@ function setupWorker(...handlers) {
|
|
|
3284
3654
|
);
|
|
3285
3655
|
return;
|
|
3286
3656
|
}
|
|
3287
|
-
const httpSource = supportsServiceWorker() ?
|
|
3657
|
+
const httpSource = supportsServiceWorker() ? await ServiceWorkerSource.from({
|
|
3288
3658
|
serviceWorker: {
|
|
3289
3659
|
url: options?.serviceWorker?.url?.toString() || DEFAULT_WORKER_URL,
|
|
3290
3660
|
options: options?.serviceWorker?.options
|