@depup/msw 2.13.2-depup.0 → 2.15.0-depup.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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.mjs
CHANGED
|
@@ -534,7 +534,7 @@ var _Emitter = class {
|
|
|
534
534
|
var Emitter = _Emitter;
|
|
535
535
|
Emitter.defaultMaxListeners = 10;
|
|
536
536
|
|
|
537
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
537
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/createRequestId-DYCsFHOi.mjs
|
|
538
538
|
var INTERNAL_REQUEST_ID_HEADER_NAME = "x-interceptors-internal-request-id";
|
|
539
539
|
function getGlobalSymbol(symbol) {
|
|
540
540
|
return globalThis[symbol] || void 0;
|
|
@@ -683,7 +683,7 @@ function createRequestId() {
|
|
|
683
683
|
return Math.random().toString(16).slice(2);
|
|
684
684
|
}
|
|
685
685
|
|
|
686
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
686
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs
|
|
687
687
|
function resolveWebSocketUrl(url) {
|
|
688
688
|
if (typeof url === "string") return resolveWebSocketUrl(new URL(url, typeof location !== "undefined" ? location.href : void 0));
|
|
689
689
|
if (url.protocol === "http:") url.protocol = "ws:";
|
|
@@ -694,15 +694,72 @@ function resolveWebSocketUrl(url) {
|
|
|
694
694
|
return url.href;
|
|
695
695
|
}
|
|
696
696
|
|
|
697
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
697
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs
|
|
698
698
|
async function emitAsync(emitter, eventName, ...data) {
|
|
699
699
|
const listeners = emitter.listeners(eventName);
|
|
700
700
|
if (listeners.length === 0) return;
|
|
701
701
|
for (const listener of listeners) await listener.apply(emitter, data);
|
|
702
702
|
}
|
|
703
|
+
var PatchesRegistry = class {
|
|
704
|
+
#replacements = /* @__PURE__ */ new Map();
|
|
705
|
+
applyPatch(owner, key, getNextValue) {
|
|
706
|
+
const ownerReplacements = this.#replacements.get(owner);
|
|
707
|
+
invariant(!ownerReplacements?.has(key), `Failed to replace a global value at "${String(key)}": already replaced.`);
|
|
708
|
+
const match = getDeepPropertyDescriptor(owner, key);
|
|
709
|
+
if (typeof match === "undefined") {
|
|
710
|
+
console.warn(`Failed to replace a global value at "${String(key)}": not a global value.`);
|
|
711
|
+
return () => {
|
|
712
|
+
};
|
|
713
|
+
}
|
|
714
|
+
if (match.descriptor.configurable) Object.defineProperty(owner, key, {
|
|
715
|
+
value: getNextValue(owner[key]),
|
|
716
|
+
enumerable: true,
|
|
717
|
+
configurable: true
|
|
718
|
+
});
|
|
719
|
+
else if (match.descriptor.writable) owner[key] = getNextValue(owner[key]);
|
|
720
|
+
else throw new Error(`Failed to patch a non-configurable non-writable property "${key.toString()}"`);
|
|
721
|
+
const restorePatch = () => {
|
|
722
|
+
const currentReplacements = this.#replacements.get(owner);
|
|
723
|
+
if (!currentReplacements?.has(key)) return;
|
|
724
|
+
if (match.owner === owner)
|
|
725
|
+
Object.defineProperty(match.owner, key, match.descriptor);
|
|
726
|
+
else
|
|
727
|
+
Reflect.deleteProperty(owner, key);
|
|
728
|
+
currentReplacements.delete(key);
|
|
729
|
+
if (currentReplacements.size === 0) this.#replacements.delete(owner);
|
|
730
|
+
};
|
|
731
|
+
if (ownerReplacements) ownerReplacements.set(key, restorePatch);
|
|
732
|
+
else this.#replacements.set(owner, /* @__PURE__ */ new Map([[key, restorePatch]]));
|
|
733
|
+
return restorePatch;
|
|
734
|
+
}
|
|
735
|
+
restoreAllPatches() {
|
|
736
|
+
const errors = [];
|
|
737
|
+
for (const [, ownerReplacements] of this.#replacements) for (const [, restorePatch] of ownerReplacements) try {
|
|
738
|
+
restorePatch();
|
|
739
|
+
} catch (error2) {
|
|
740
|
+
if (error2 instanceof Error) errors.push(error2);
|
|
741
|
+
else throw error2;
|
|
742
|
+
}
|
|
743
|
+
if (errors.length > 0) throw new AggregateError(errors, "FOO!");
|
|
744
|
+
}
|
|
745
|
+
};
|
|
746
|
+
var patchesRegistry = new PatchesRegistry();
|
|
747
|
+
function getDeepPropertyDescriptor(owner, key) {
|
|
748
|
+
let currentOwner = owner;
|
|
749
|
+
let descriptor;
|
|
750
|
+
while (currentOwner) {
|
|
751
|
+
descriptor = Object.getOwnPropertyDescriptor(currentOwner, key);
|
|
752
|
+
if (descriptor) return {
|
|
753
|
+
owner: currentOwner,
|
|
754
|
+
descriptor
|
|
755
|
+
};
|
|
756
|
+
currentOwner = Object.getPrototypeOf(currentOwner);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
703
759
|
function hasConfigurableGlobal(propertyName) {
|
|
704
|
-
const
|
|
705
|
-
if (typeof
|
|
760
|
+
const match = getDeepPropertyDescriptor(globalThis, propertyName);
|
|
761
|
+
if (typeof match === "undefined") return false;
|
|
762
|
+
const { descriptor } = match;
|
|
706
763
|
if (typeof descriptor.get === "function" && typeof descriptor.get() === "undefined") return false;
|
|
707
764
|
if (typeof descriptor.get === "undefined" && descriptor.value == null) return false;
|
|
708
765
|
if (typeof descriptor.set === "undefined" && !descriptor.configurable) {
|
|
@@ -778,7 +835,7 @@ var DeferredPromise = class extends Promise {
|
|
|
778
835
|
}
|
|
779
836
|
};
|
|
780
837
|
|
|
781
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
838
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
|
|
782
839
|
function bindEvent(target, event) {
|
|
783
840
|
Object.defineProperties(event, {
|
|
784
841
|
target: {
|
|
@@ -794,8 +851,8 @@ function bindEvent(target, event) {
|
|
|
794
851
|
});
|
|
795
852
|
return event;
|
|
796
853
|
}
|
|
797
|
-
var kCancelable = Symbol("kCancelable");
|
|
798
|
-
var kDefaultPrevented = Symbol("kDefaultPrevented");
|
|
854
|
+
var kCancelable = /* @__PURE__ */ Symbol("kCancelable");
|
|
855
|
+
var kDefaultPrevented = /* @__PURE__ */ Symbol("kDefaultPrevented");
|
|
799
856
|
var CancelableMessageEvent = class extends MessageEvent {
|
|
800
857
|
constructor(type, init) {
|
|
801
858
|
super(type, init);
|
|
@@ -848,8 +905,8 @@ var CancelableCloseEvent = class extends CloseEvent {
|
|
|
848
905
|
if (this.cancelable && !this[kDefaultPrevented]) this[kDefaultPrevented] = true;
|
|
849
906
|
}
|
|
850
907
|
};
|
|
851
|
-
var kEmitter$1 = Symbol("kEmitter");
|
|
852
|
-
var kBoundListener$1 = Symbol("kBoundListener");
|
|
908
|
+
var kEmitter$1 = /* @__PURE__ */ Symbol("kEmitter");
|
|
909
|
+
var kBoundListener$1 = /* @__PURE__ */ Symbol("kBoundListener");
|
|
853
910
|
var WebSocketClientConnection = class {
|
|
854
911
|
constructor(socket, transport) {
|
|
855
912
|
this.socket = socket;
|
|
@@ -906,9 +963,9 @@ var WebSocketClientConnection = class {
|
|
|
906
963
|
}
|
|
907
964
|
};
|
|
908
965
|
var WEBSOCKET_CLOSE_CODE_RANGE_ERROR = "InvalidAccessError: close code out of user configurable range";
|
|
909
|
-
var kPassthroughPromise = Symbol("kPassthroughPromise");
|
|
910
|
-
var kOnSend = Symbol("kOnSend");
|
|
911
|
-
var kClose = Symbol("kClose");
|
|
966
|
+
var kPassthroughPromise = /* @__PURE__ */ Symbol("kPassthroughPromise");
|
|
967
|
+
var kOnSend = /* @__PURE__ */ Symbol("kOnSend");
|
|
968
|
+
var kClose = /* @__PURE__ */ Symbol("kClose");
|
|
912
969
|
var WebSocketOverride = class extends EventTarget {
|
|
913
970
|
static {
|
|
914
971
|
this.CONNECTING = 0;
|
|
@@ -1028,9 +1085,9 @@ function getDataSize(data) {
|
|
|
1028
1085
|
if (data instanceof Blob) return data.size;
|
|
1029
1086
|
return data.byteLength;
|
|
1030
1087
|
}
|
|
1031
|
-
var kEmitter = Symbol("kEmitter");
|
|
1032
|
-
var kBoundListener = Symbol("kBoundListener");
|
|
1033
|
-
var kSend = Symbol("kSend");
|
|
1088
|
+
var kEmitter = /* @__PURE__ */ Symbol("kEmitter");
|
|
1089
|
+
var kBoundListener = /* @__PURE__ */ Symbol("kBoundListener");
|
|
1090
|
+
var kSend = /* @__PURE__ */ Symbol("kSend");
|
|
1034
1091
|
var WebSocketServerConnection = class {
|
|
1035
1092
|
constructor(client, transport, createConnection) {
|
|
1036
1093
|
this.client = client;
|
|
@@ -1230,7 +1287,7 @@ var WebSocketClassTransport = class extends EventTarget {
|
|
|
1230
1287
|
};
|
|
1231
1288
|
var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
|
|
1232
1289
|
static {
|
|
1233
|
-
this.symbol = Symbol("websocket");
|
|
1290
|
+
this.symbol = /* @__PURE__ */ Symbol.for("websocket-interceptor");
|
|
1234
1291
|
}
|
|
1235
1292
|
constructor() {
|
|
1236
1293
|
super(WebSocketInterceptor2.symbol);
|
|
@@ -1239,7 +1296,7 @@ var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
|
|
|
1239
1296
|
return hasConfigurableGlobal("WebSocket");
|
|
1240
1297
|
}
|
|
1241
1298
|
setup() {
|
|
1242
|
-
const
|
|
1299
|
+
const logger = this.logger.extend("setup");
|
|
1243
1300
|
const WebSocketProxy = new Proxy(globalThis.WebSocket, { construct: (target, args, newTarget) => {
|
|
1244
1301
|
const [url, protocols] = args;
|
|
1245
1302
|
const createConnection = () => {
|
|
@@ -1275,13 +1332,9 @@ var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
|
|
|
1275
1332
|
});
|
|
1276
1333
|
return socket;
|
|
1277
1334
|
} });
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
});
|
|
1282
|
-
this.subscriptions.push(() => {
|
|
1283
|
-
Object.defineProperty(globalThis, "WebSocket", originalWebSocketDescriptor);
|
|
1284
|
-
});
|
|
1335
|
+
logger.info("patching global WebSocket...");
|
|
1336
|
+
this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "WebSocket", () => WebSocketProxy));
|
|
1337
|
+
logger.info("global WebSocket patched!", globalThis.WebSocket.name);
|
|
1285
1338
|
}
|
|
1286
1339
|
};
|
|
1287
1340
|
|
|
@@ -1311,8 +1364,73 @@ function supportsReadableStreamTransfer() {
|
|
|
1311
1364
|
}
|
|
1312
1365
|
}
|
|
1313
1366
|
|
|
1314
|
-
// node_modules/.pnpm/@
|
|
1315
|
-
|
|
1367
|
+
// node_modules/.pnpm/@open-draft+deferred-promise@3.0.0/node_modules/@open-draft/deferred-promise/build/index.mjs
|
|
1368
|
+
function createDeferredExecutor2() {
|
|
1369
|
+
const executor = ((resolve, reject) => {
|
|
1370
|
+
executor.state = "pending";
|
|
1371
|
+
executor.resolve = (data) => {
|
|
1372
|
+
if (executor.state !== "pending") return;
|
|
1373
|
+
executor.result = data;
|
|
1374
|
+
const onFulfilled = (value) => {
|
|
1375
|
+
executor.state = "fulfilled";
|
|
1376
|
+
return value;
|
|
1377
|
+
};
|
|
1378
|
+
return resolve(data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled));
|
|
1379
|
+
};
|
|
1380
|
+
executor.reject = (reason) => {
|
|
1381
|
+
if (executor.state !== "pending") return;
|
|
1382
|
+
queueMicrotask(() => {
|
|
1383
|
+
executor.state = "rejected";
|
|
1384
|
+
});
|
|
1385
|
+
return reject(executor.rejectionReason = reason);
|
|
1386
|
+
};
|
|
1387
|
+
});
|
|
1388
|
+
return executor;
|
|
1389
|
+
}
|
|
1390
|
+
var DeferredPromise2 = class extends Promise {
|
|
1391
|
+
#executor;
|
|
1392
|
+
resolve;
|
|
1393
|
+
reject;
|
|
1394
|
+
constructor(executor = null) {
|
|
1395
|
+
const deferredExecutor = createDeferredExecutor2();
|
|
1396
|
+
super((originalResolve, originalReject) => {
|
|
1397
|
+
deferredExecutor(originalResolve, originalReject);
|
|
1398
|
+
executor?.(deferredExecutor.resolve, deferredExecutor.reject);
|
|
1399
|
+
});
|
|
1400
|
+
this.#executor = deferredExecutor;
|
|
1401
|
+
this.resolve = this.#executor.resolve;
|
|
1402
|
+
this.reject = this.#executor.reject;
|
|
1403
|
+
}
|
|
1404
|
+
get state() {
|
|
1405
|
+
return this.#executor.state;
|
|
1406
|
+
}
|
|
1407
|
+
get rejectionReason() {
|
|
1408
|
+
return this.#executor.rejectionReason;
|
|
1409
|
+
}
|
|
1410
|
+
then(onFulfilled, onRejected) {
|
|
1411
|
+
return this.#decorate(super.then(onFulfilled, onRejected));
|
|
1412
|
+
}
|
|
1413
|
+
catch(onRejected) {
|
|
1414
|
+
return this.#decorate(super.catch(onRejected));
|
|
1415
|
+
}
|
|
1416
|
+
finally(onfinally) {
|
|
1417
|
+
return this.#decorate(super.finally(onfinally));
|
|
1418
|
+
}
|
|
1419
|
+
#decorate(promise) {
|
|
1420
|
+
return Object.defineProperties(promise, {
|
|
1421
|
+
resolve: {
|
|
1422
|
+
configurable: true,
|
|
1423
|
+
value: this.resolve
|
|
1424
|
+
},
|
|
1425
|
+
reject: {
|
|
1426
|
+
configurable: true,
|
|
1427
|
+
value: this.reject
|
|
1428
|
+
}
|
|
1429
|
+
});
|
|
1430
|
+
}
|
|
1431
|
+
};
|
|
1432
|
+
|
|
1433
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/getRawRequest-B1BqgWG6.mjs
|
|
1316
1434
|
var InterceptorError = class InterceptorError2 extends Error {
|
|
1317
1435
|
constructor(message) {
|
|
1318
1436
|
super(message);
|
|
@@ -1394,6 +1512,68 @@ function getValueBySymbol(symbolName, source) {
|
|
|
1394
1512
|
});
|
|
1395
1513
|
if (symbol) return Reflect.get(source, symbol);
|
|
1396
1514
|
}
|
|
1515
|
+
var FetchRequest = class FetchRequest2 extends Request {
|
|
1516
|
+
static #resolveProperty(input, init = {}, key) {
|
|
1517
|
+
return init[key] ?? (input instanceof Request ? input[key] : void 0);
|
|
1518
|
+
}
|
|
1519
|
+
/**
|
|
1520
|
+
* Check if the given request method is configurable.
|
|
1521
|
+
* @see https://fetch.spec.whatwg.org/#methods
|
|
1522
|
+
*/
|
|
1523
|
+
static isConfigurableMethod(method) {
|
|
1524
|
+
return method !== "CONNECT" && method !== "TRACE" && method !== "TRACK";
|
|
1525
|
+
}
|
|
1526
|
+
static isMethodWithBody(method) {
|
|
1527
|
+
return method !== "HEAD" && method !== "GET" && FetchRequest2.isConfigurableMethod(method);
|
|
1528
|
+
}
|
|
1529
|
+
/**
|
|
1530
|
+
* Check if the given request `mode` is configurable.
|
|
1531
|
+
* @see https://fetch.spec.whatwg.org/#concept-request-mode
|
|
1532
|
+
*/
|
|
1533
|
+
static isConfigurableMode(mode) {
|
|
1534
|
+
return mode !== "navigate" && mode !== "websocket" && mode !== "webtransport";
|
|
1535
|
+
}
|
|
1536
|
+
constructor(input, init) {
|
|
1537
|
+
const method = FetchRequest2.#resolveProperty(input, init, "method") || "GET";
|
|
1538
|
+
const safeMethod = FetchRequest2.isConfigurableMethod(method) ? method : "GET";
|
|
1539
|
+
const hasExplicitBody = init != null && "body" in init;
|
|
1540
|
+
const bodyInit = !FetchRequest2.isMethodWithBody(method) ? { body: void 0 } : hasExplicitBody ? { body: init.body } : {};
|
|
1541
|
+
const mode = FetchRequest2.#resolveProperty(input, init, "mode") ?? void 0;
|
|
1542
|
+
const safeMode = FetchRequest2.isConfigurableMode(mode) ? mode : void 0;
|
|
1543
|
+
super(input, {
|
|
1544
|
+
...init || {},
|
|
1545
|
+
method: safeMethod,
|
|
1546
|
+
mode: safeMode,
|
|
1547
|
+
duplex: init?.duplex ?? (FetchRequest2.isMethodWithBody(method) ? "half" : void 0),
|
|
1548
|
+
...bodyInit
|
|
1549
|
+
});
|
|
1550
|
+
if (method !== safeMethod) this.#setInternalProperty("method", method);
|
|
1551
|
+
if (method === "CONNECT") {
|
|
1552
|
+
const url = new URL(input instanceof Request ? input.url : input);
|
|
1553
|
+
let authority;
|
|
1554
|
+
if (url.protocol === "localhost:") authority = url.href;
|
|
1555
|
+
else authority = url.pathname.replace(/^\/+/, "");
|
|
1556
|
+
Object.defineProperty(this, "url", {
|
|
1557
|
+
get: () => authority,
|
|
1558
|
+
enumerable: true,
|
|
1559
|
+
configurable: true
|
|
1560
|
+
});
|
|
1561
|
+
}
|
|
1562
|
+
if (mode != null && mode !== safeMode) this.#setInternalProperty("mode", mode);
|
|
1563
|
+
}
|
|
1564
|
+
#setInternalProperty(key, value) {
|
|
1565
|
+
const internalState = getValueBySymbol("state", this);
|
|
1566
|
+
if (internalState) Reflect.set(internalState, key, value);
|
|
1567
|
+
else Object.defineProperty(this, key, {
|
|
1568
|
+
value,
|
|
1569
|
+
enumerable: true,
|
|
1570
|
+
configurable: true,
|
|
1571
|
+
writable: false
|
|
1572
|
+
});
|
|
1573
|
+
}
|
|
1574
|
+
};
|
|
1575
|
+
var kStatus = /* @__PURE__ */ Symbol("kStatus");
|
|
1576
|
+
var kUrl = /* @__PURE__ */ Symbol("kUrl");
|
|
1397
1577
|
var FetchResponse = class FetchResponse2 extends Response {
|
|
1398
1578
|
static {
|
|
1399
1579
|
this.STATUS_CODES_WITHOUT_BODY = [
|
|
@@ -1426,6 +1606,20 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1426
1606
|
static isResponseWithBody(status) {
|
|
1427
1607
|
return !FetchResponse2.STATUS_CODES_WITHOUT_BODY.includes(status);
|
|
1428
1608
|
}
|
|
1609
|
+
static setStatus(status, response) {
|
|
1610
|
+
const internalState = getValueBySymbol("state", response);
|
|
1611
|
+
if (internalState) internalState.status = status;
|
|
1612
|
+
else Object.defineProperty(response, "status", {
|
|
1613
|
+
value: status,
|
|
1614
|
+
enumerable: true,
|
|
1615
|
+
configurable: true,
|
|
1616
|
+
writable: false
|
|
1617
|
+
});
|
|
1618
|
+
Object.defineProperty(response, kStatus, {
|
|
1619
|
+
value: status,
|
|
1620
|
+
enumerable: false
|
|
1621
|
+
});
|
|
1622
|
+
}
|
|
1429
1623
|
static setUrl(url, response) {
|
|
1430
1624
|
if (!url || url === "about:" || !canParseUrl(url)) return;
|
|
1431
1625
|
const state = getValueBySymbol("state", response);
|
|
@@ -1436,6 +1630,10 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1436
1630
|
configurable: true,
|
|
1437
1631
|
writable: false
|
|
1438
1632
|
});
|
|
1633
|
+
Object.defineProperty(response, kUrl, {
|
|
1634
|
+
value: url,
|
|
1635
|
+
enumerable: false
|
|
1636
|
+
});
|
|
1439
1637
|
}
|
|
1440
1638
|
/**
|
|
1441
1639
|
* Parses the given raw HTTP headers into a Fetch API `Headers` instance.
|
|
@@ -1445,6 +1643,27 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1445
1643
|
for (let line = 0; line < rawHeaders.length; line += 2) headers.append(rawHeaders[line], rawHeaders[line + 1]);
|
|
1446
1644
|
return headers;
|
|
1447
1645
|
}
|
|
1646
|
+
/**
|
|
1647
|
+
* Safely clones the given `Response`.
|
|
1648
|
+
* Coerces response clone exceptions into 500 mocked responses.
|
|
1649
|
+
* Handy in the environments that introduce arbitrary response
|
|
1650
|
+
* cloning restrictions, like "101 Switching Protocols" cloning
|
|
1651
|
+
* in "miniflare".
|
|
1652
|
+
*/
|
|
1653
|
+
static clone(response) {
|
|
1654
|
+
try {
|
|
1655
|
+
return response.clone();
|
|
1656
|
+
} catch (error2) {
|
|
1657
|
+
return Response.json(error2 instanceof Error ? {
|
|
1658
|
+
name: error2.name,
|
|
1659
|
+
message: error2.message,
|
|
1660
|
+
stack: error2.stack
|
|
1661
|
+
} : {}, {
|
|
1662
|
+
status: 500,
|
|
1663
|
+
statusText: "Unclonable Response"
|
|
1664
|
+
});
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1448
1667
|
constructor(body, init = {}) {
|
|
1449
1668
|
const status = init.status ?? 200;
|
|
1450
1669
|
const safeStatus = FetchResponse2.isConfigurableStatusCode(status) ? status : 200;
|
|
@@ -1454,25 +1673,24 @@ var FetchResponse = class FetchResponse2 extends Response {
|
|
|
1454
1673
|
statusText: init.statusText,
|
|
1455
1674
|
headers: init.headers
|
|
1456
1675
|
});
|
|
1457
|
-
if (status !== safeStatus)
|
|
1458
|
-
const state = getValueBySymbol("state", this);
|
|
1459
|
-
if (state) state.status = status;
|
|
1460
|
-
else Object.defineProperty(this, "status", {
|
|
1461
|
-
value: status,
|
|
1462
|
-
enumerable: true,
|
|
1463
|
-
configurable: true,
|
|
1464
|
-
writable: false
|
|
1465
|
-
});
|
|
1466
|
-
}
|
|
1676
|
+
if (status !== safeStatus) FetchResponse2.setStatus(status, this);
|
|
1467
1677
|
FetchResponse2.setUrl(init.url, this);
|
|
1468
1678
|
}
|
|
1679
|
+
clone() {
|
|
1680
|
+
const clonedResponse = super.clone();
|
|
1681
|
+
const customStatus = Reflect.get(this, kStatus);
|
|
1682
|
+
if (customStatus) FetchResponse2.setStatus(customStatus, clonedResponse);
|
|
1683
|
+
const customUrl = Reflect.get(this, kUrl);
|
|
1684
|
+
if (customUrl) FetchResponse2.setUrl(customUrl, clonedResponse);
|
|
1685
|
+
return clonedResponse;
|
|
1686
|
+
}
|
|
1469
1687
|
};
|
|
1470
|
-
var kRawRequest = Symbol("kRawRequest");
|
|
1688
|
+
var kRawRequest = /* @__PURE__ */ Symbol("kRawRequest");
|
|
1471
1689
|
function setRawRequest(request, rawRequest) {
|
|
1472
1690
|
Reflect.set(request, kRawRequest, rawRequest);
|
|
1473
1691
|
}
|
|
1474
1692
|
|
|
1475
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
1693
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/bufferUtils-BiiO6HZv.mjs
|
|
1476
1694
|
var encoder = new TextEncoder();
|
|
1477
1695
|
function encodeBuffer(text) {
|
|
1478
1696
|
return encoder.encode(text);
|
|
@@ -1584,7 +1802,7 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
|
|
|
1584
1802
|
return registrationResult;
|
|
1585
1803
|
};
|
|
1586
1804
|
|
|
1587
|
-
// node_modules/.pnpm/rettime@0.
|
|
1805
|
+
// node_modules/.pnpm/rettime@0.11.11/node_modules/rettime/build/lens-list.mjs
|
|
1588
1806
|
var LensList = class {
|
|
1589
1807
|
#list;
|
|
1590
1808
|
#lens;
|
|
@@ -1626,11 +1844,17 @@ var LensList = class {
|
|
|
1626
1844
|
}
|
|
1627
1845
|
/**
|
|
1628
1846
|
* Delete the value belonging to the given key.
|
|
1847
|
+
* Returns `true` if the value was present and removed, `false` otherwise.
|
|
1629
1848
|
*/
|
|
1630
1849
|
delete(key, value) {
|
|
1631
|
-
if (this.size === 0) return;
|
|
1632
|
-
|
|
1633
|
-
|
|
1850
|
+
if (this.size === 0) return false;
|
|
1851
|
+
const values = this.#lens.get(key);
|
|
1852
|
+
if (!values) return false;
|
|
1853
|
+
const index = values.indexOf(value);
|
|
1854
|
+
if (index === -1) return false;
|
|
1855
|
+
values.splice(index, 1);
|
|
1856
|
+
this.#list.splice(this.#list.findIndex((item) => item[0] === key && item[1] === value), 1);
|
|
1857
|
+
return true;
|
|
1634
1858
|
}
|
|
1635
1859
|
/**
|
|
1636
1860
|
* Delete all values belogning to the given key.
|
|
@@ -1653,10 +1877,10 @@ var LensList = class {
|
|
|
1653
1877
|
}
|
|
1654
1878
|
};
|
|
1655
1879
|
|
|
1656
|
-
// node_modules/.pnpm/rettime@0.
|
|
1657
|
-
var kDefaultPrevented2 = Symbol("kDefaultPrevented");
|
|
1658
|
-
var kPropagationStopped = Symbol("kPropagationStopped");
|
|
1659
|
-
var kImmediatePropagationStopped = Symbol("kImmediatePropagationStopped");
|
|
1880
|
+
// node_modules/.pnpm/rettime@0.11.11/node_modules/rettime/build/index.mjs
|
|
1881
|
+
var kDefaultPrevented2 = /* @__PURE__ */ Symbol("kDefaultPrevented");
|
|
1882
|
+
var kPropagationStopped = /* @__PURE__ */ Symbol("kPropagationStopped");
|
|
1883
|
+
var kImmediatePropagationStopped = /* @__PURE__ */ Symbol("kImmediatePropagationStopped");
|
|
1660
1884
|
var TypedEvent = class extends MessageEvent {
|
|
1661
1885
|
/**
|
|
1662
1886
|
* @note Keep a placeholder property with the return type
|
|
@@ -1683,11 +1907,68 @@ var TypedEvent = class extends MessageEvent {
|
|
|
1683
1907
|
this[kImmediatePropagationStopped] = true;
|
|
1684
1908
|
}
|
|
1685
1909
|
};
|
|
1686
|
-
var kListenerOptions = Symbol("kListenerOptions");
|
|
1687
1910
|
var Emitter2 = class {
|
|
1688
1911
|
#listeners;
|
|
1912
|
+
#listenerOptions;
|
|
1913
|
+
#listenerAbortCleanups;
|
|
1914
|
+
#typelessListeners;
|
|
1915
|
+
#hookListeners;
|
|
1916
|
+
#hookListenerOptions;
|
|
1917
|
+
#hookListenerAbortCleanups;
|
|
1918
|
+
hooks;
|
|
1689
1919
|
constructor() {
|
|
1690
1920
|
this.#listeners = new LensList();
|
|
1921
|
+
this.#listenerOptions = /* @__PURE__ */ new WeakMap();
|
|
1922
|
+
this.#listenerAbortCleanups = /* @__PURE__ */ new WeakMap();
|
|
1923
|
+
this.#typelessListeners = /* @__PURE__ */ new WeakSet();
|
|
1924
|
+
this.#hookListeners = new LensList();
|
|
1925
|
+
this.#hookListenerOptions = /* @__PURE__ */ new WeakMap();
|
|
1926
|
+
this.#hookListenerAbortCleanups = /* @__PURE__ */ new WeakMap();
|
|
1927
|
+
this.hooks = {
|
|
1928
|
+
on: (hook, callback, options) => {
|
|
1929
|
+
if (options?.signal?.aborted) return;
|
|
1930
|
+
if (options?.once) {
|
|
1931
|
+
const original = callback;
|
|
1932
|
+
const wrapper = ((...args) => {
|
|
1933
|
+
this.#deleteHookListener(hook, wrapper);
|
|
1934
|
+
return original(...args);
|
|
1935
|
+
});
|
|
1936
|
+
callback = wrapper;
|
|
1937
|
+
}
|
|
1938
|
+
this.#hookListeners.append(hook, callback);
|
|
1939
|
+
if (options) this.#hookListenerOptions.set(callback, options);
|
|
1940
|
+
if (options?.signal) {
|
|
1941
|
+
const { signal } = options;
|
|
1942
|
+
const onAbort = () => {
|
|
1943
|
+
this.#deleteHookListener(hook, callback);
|
|
1944
|
+
};
|
|
1945
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1946
|
+
this.#hookListenerAbortCleanups.set(callback, () => {
|
|
1947
|
+
signal.removeEventListener("abort", onAbort);
|
|
1948
|
+
});
|
|
1949
|
+
}
|
|
1950
|
+
},
|
|
1951
|
+
removeListener: (hook, callback) => {
|
|
1952
|
+
this.#deleteHookListener(hook, callback);
|
|
1953
|
+
}
|
|
1954
|
+
};
|
|
1955
|
+
}
|
|
1956
|
+
#deleteHookListener(hook, callback) {
|
|
1957
|
+
this.#hookListeners.delete(hook, callback);
|
|
1958
|
+
const cleanup = this.#hookListenerAbortCleanups.get(callback);
|
|
1959
|
+
if (cleanup) {
|
|
1960
|
+
cleanup();
|
|
1961
|
+
this.#hookListenerAbortCleanups.delete(callback);
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
#deleteListener(type, listener) {
|
|
1965
|
+
const removed = this.#listeners.delete(type, listener);
|
|
1966
|
+
const cleanup = this.#listenerAbortCleanups.get(listener);
|
|
1967
|
+
if (cleanup) {
|
|
1968
|
+
cleanup();
|
|
1969
|
+
this.#listenerAbortCleanups.delete(listener);
|
|
1970
|
+
}
|
|
1971
|
+
return removed;
|
|
1691
1972
|
}
|
|
1692
1973
|
/**
|
|
1693
1974
|
* Adds a listener for the given event type.
|
|
@@ -1789,7 +2070,9 @@ var Emitter2 = class {
|
|
|
1789
2070
|
* Removes a listener for the given event type.
|
|
1790
2071
|
*/
|
|
1791
2072
|
removeListener(type, listener) {
|
|
1792
|
-
this.#
|
|
2073
|
+
const options = this.#listenerOptions.get(listener);
|
|
2074
|
+
if (!this.#deleteListener(type, listener)) return;
|
|
2075
|
+
for (const hook of this.#hookListeners.get("removeListener").slice()) hook(type, listener, options);
|
|
1793
2076
|
}
|
|
1794
2077
|
/**
|
|
1795
2078
|
* Removes all listeners for the given event type.
|
|
@@ -1797,10 +2080,12 @@ var Emitter2 = class {
|
|
|
1797
2080
|
*/
|
|
1798
2081
|
removeAllListeners(type) {
|
|
1799
2082
|
if (type == null) {
|
|
1800
|
-
this.#listeners.
|
|
2083
|
+
for (const [listenerType, listeners$1] of this.#listeners.entries()) while (listeners$1.length > 0) this.removeListener(listenerType, listeners$1[0]);
|
|
2084
|
+
for (const [hookType, hookListener] of [...this.#hookListeners]) if (!this.#hookListenerOptions.get(hookListener)?.persist) this.#deleteHookListener(hookType, hookListener);
|
|
1801
2085
|
return;
|
|
1802
2086
|
}
|
|
1803
|
-
this
|
|
2087
|
+
const listeners = this.listeners(type);
|
|
2088
|
+
while (listeners.length > 0) this.removeListener(type, listeners[0]);
|
|
1804
2089
|
}
|
|
1805
2090
|
/**
|
|
1806
2091
|
* Returns the list of listeners for the given event type.
|
|
@@ -1819,25 +2104,31 @@ var Emitter2 = class {
|
|
|
1819
2104
|
return this.listeners(type).length;
|
|
1820
2105
|
}
|
|
1821
2106
|
#addListener(type, listener, options, insertMode = "append") {
|
|
2107
|
+
if (options?.signal?.aborted) return;
|
|
2108
|
+
for (const hook of this.#hookListeners.get("newListener").slice()) hook(type, listener, options);
|
|
2109
|
+
if (type === "*") this.#typelessListeners.add(listener);
|
|
1822
2110
|
if (insertMode === "prepend") this.#listeners.prepend(type, listener);
|
|
1823
2111
|
else this.#listeners.append(type, listener);
|
|
1824
2112
|
if (options) {
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
2113
|
+
this.#listenerOptions.set(listener, options);
|
|
2114
|
+
if (options.signal) {
|
|
2115
|
+
const { signal } = options;
|
|
2116
|
+
const onAbort = () => {
|
|
2117
|
+
this.removeListener(type, listener);
|
|
2118
|
+
};
|
|
2119
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
2120
|
+
this.#listenerAbortCleanups.set(listener, () => {
|
|
2121
|
+
signal.removeEventListener("abort", onAbort);
|
|
2122
|
+
});
|
|
2123
|
+
}
|
|
1833
2124
|
}
|
|
1834
2125
|
}
|
|
1835
2126
|
#proxyEvent(event) {
|
|
1836
2127
|
const { stopPropagation } = event;
|
|
1837
|
-
event.stopPropagation =
|
|
2128
|
+
event.stopPropagation = () => {
|
|
1838
2129
|
event[kPropagationStopped] = this;
|
|
1839
|
-
|
|
1840
|
-
}
|
|
2130
|
+
stopPropagation.call(event);
|
|
2131
|
+
};
|
|
1841
2132
|
return {
|
|
1842
2133
|
event,
|
|
1843
2134
|
revoke() {
|
|
@@ -1846,22 +2137,30 @@ var Emitter2 = class {
|
|
|
1846
2137
|
};
|
|
1847
2138
|
}
|
|
1848
2139
|
#callListener(event, listener) {
|
|
2140
|
+
for (const hook of this.#hookListeners.get("beforeEmit").slice()) if (hook(event) === false) return;
|
|
1849
2141
|
const returnValue = listener.call(this, event);
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
this.#
|
|
2142
|
+
const options = this.#listenerOptions.get(listener);
|
|
2143
|
+
if (options?.once) {
|
|
2144
|
+
const type = this.#isTypelessListener(listener) ? "*" : event.type;
|
|
2145
|
+
if (this.#deleteListener(type, listener)) for (const hook of this.#hookListeners.get("removeListener").slice()) hook(type, listener, options);
|
|
1853
2146
|
}
|
|
1854
2147
|
return returnValue;
|
|
1855
2148
|
}
|
|
1856
2149
|
/**
|
|
1857
2150
|
* Return a list of all event listeners relevant for the given event type.
|
|
1858
2151
|
* This includes the explicit event listeners and also typeless event listeners.
|
|
2152
|
+
*
|
|
2153
|
+
* @note Snapshot the matching listeners before yielding. Listeners can add or
|
|
2154
|
+
* remove other listeners during emission (e.g. `earlyOn` unshifts `#list`),
|
|
2155
|
+
* which would otherwise shift the live iterator and re-yield prior entries.
|
|
1859
2156
|
*/
|
|
1860
2157
|
*#matchListeners(type) {
|
|
1861
|
-
|
|
2158
|
+
const snapshot = [];
|
|
2159
|
+
for (const [key, listener] of this.#listeners) if (key === "*" || key === type) snapshot.push(listener);
|
|
2160
|
+
yield* snapshot;
|
|
1862
2161
|
}
|
|
1863
2162
|
#isTypelessListener(listener) {
|
|
1864
|
-
return this.#
|
|
2163
|
+
return this.#typelessListeners.has(listener);
|
|
1865
2164
|
}
|
|
1866
2165
|
};
|
|
1867
2166
|
|
|
@@ -1894,21 +2193,31 @@ var WorkerEvent = class extends TypedEvent {
|
|
|
1894
2193
|
}
|
|
1895
2194
|
};
|
|
1896
2195
|
var WorkerChannel = class extends Emitter2 {
|
|
2196
|
+
#getWorker;
|
|
2197
|
+
#controller;
|
|
1897
2198
|
constructor(options) {
|
|
1898
2199
|
super();
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
2200
|
+
invariant(
|
|
2201
|
+
SUPPORTS_SERVICE_WORKER,
|
|
2202
|
+
"Failed to open a WorkerChannel: Service Worker is not supported in this environment."
|
|
2203
|
+
);
|
|
2204
|
+
this.#getWorker = options.getWorker;
|
|
2205
|
+
this.#controller = new AbortController();
|
|
2206
|
+
navigator.serviceWorker.addEventListener(
|
|
2207
|
+
"message",
|
|
2208
|
+
async (event) => {
|
|
2209
|
+
const worker = await this.#getWorker();
|
|
2210
|
+
if (event.source != null && event.source !== worker) {
|
|
2211
|
+
return;
|
|
2212
|
+
}
|
|
2213
|
+
if (event.data && isObject(event.data) && "type" in event.data) {
|
|
2214
|
+
this.emit(new WorkerEvent(event));
|
|
2215
|
+
}
|
|
2216
|
+
},
|
|
2217
|
+
{
|
|
2218
|
+
signal: this.#controller.signal
|
|
1910
2219
|
}
|
|
1911
|
-
|
|
2220
|
+
);
|
|
1912
2221
|
}
|
|
1913
2222
|
/**
|
|
1914
2223
|
* Send data to the Service Worker controlling this client.
|
|
@@ -1917,12 +2226,20 @@ var WorkerChannel = class extends Emitter2 {
|
|
|
1917
2226
|
postMessage(type) {
|
|
1918
2227
|
invariant(
|
|
1919
2228
|
SUPPORTS_SERVICE_WORKER,
|
|
1920
|
-
"Failed to post message on a WorkerChannel: the Service Worker API is unavailable in this
|
|
2229
|
+
"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"
|
|
1921
2230
|
);
|
|
1922
|
-
this.
|
|
2231
|
+
this.#getWorker().then((worker) => {
|
|
1923
2232
|
worker.postMessage(type);
|
|
1924
2233
|
});
|
|
1925
2234
|
}
|
|
2235
|
+
/**
|
|
2236
|
+
* Terminal teardown. Removes the `navigator.serviceWorker` message listener
|
|
2237
|
+
* and all emitter subscriptions. The channel is not usable afterwards.
|
|
2238
|
+
*/
|
|
2239
|
+
terminate() {
|
|
2240
|
+
this.#controller.abort();
|
|
2241
|
+
this.removeAllListeners();
|
|
2242
|
+
}
|
|
1926
2243
|
};
|
|
1927
2244
|
|
|
1928
2245
|
// src/browser/utils/pruneGetRequestBody.ts
|
|
@@ -1954,40 +2271,63 @@ function validateWorkerScope(registration) {
|
|
|
1954
2271
|
}
|
|
1955
2272
|
}
|
|
1956
2273
|
|
|
2274
|
+
// src/browser/utils/should-invalidate-worker.ts
|
|
2275
|
+
function shouldInvalidateWorker(prevOptions, nextOptions) {
|
|
2276
|
+
return prevOptions.findWorker !== nextOptions.findWorker || prevOptions.serviceWorker.url !== nextOptions.serviceWorker.url || JSON.stringify(prevOptions.serviceWorker.options) !== JSON.stringify(nextOptions.serviceWorker.options);
|
|
2277
|
+
}
|
|
2278
|
+
|
|
1957
2279
|
// src/browser/sources/service-worker-source.ts
|
|
1958
|
-
var ServiceWorkerSource = class extends NetworkSource {
|
|
2280
|
+
var ServiceWorkerSource = class _ServiceWorkerSource extends NetworkSource {
|
|
2281
|
+
static #current;
|
|
2282
|
+
/**
|
|
2283
|
+
* Create a new Service Worker source or reuse an existing one.
|
|
2284
|
+
* These sources act as a singleton and only get recreated if the options change.
|
|
2285
|
+
*/
|
|
2286
|
+
static async from(options) {
|
|
2287
|
+
if (_ServiceWorkerSource.#current == null) {
|
|
2288
|
+
_ServiceWorkerSource.#current = new _ServiceWorkerSource(options);
|
|
2289
|
+
} else if (shouldInvalidateWorker(_ServiceWorkerSource.#current.#options, options)) {
|
|
2290
|
+
await _ServiceWorkerSource.#current.terminate();
|
|
2291
|
+
_ServiceWorkerSource.#current = new _ServiceWorkerSource(options);
|
|
2292
|
+
}
|
|
2293
|
+
return _ServiceWorkerSource.#current;
|
|
2294
|
+
}
|
|
2295
|
+
#options;
|
|
2296
|
+
#frames;
|
|
2297
|
+
#channel;
|
|
2298
|
+
#listenerController;
|
|
2299
|
+
#clientPromise;
|
|
2300
|
+
#keepAliveInterval;
|
|
2301
|
+
#stoppedAt;
|
|
2302
|
+
workerPromise;
|
|
1959
2303
|
constructor(options) {
|
|
1960
2304
|
super();
|
|
1961
|
-
this.options = options;
|
|
1962
2305
|
invariant(
|
|
1963
2306
|
supportsServiceWorker(),
|
|
1964
2307
|
"Failed to use Service Worker as the network source: the Service Worker API is not supported in this environment"
|
|
1965
2308
|
);
|
|
2309
|
+
this.#options = options;
|
|
1966
2310
|
this.#frames = /* @__PURE__ */ new Map();
|
|
1967
|
-
this.workerPromise = new
|
|
2311
|
+
this.workerPromise = new DeferredPromise2();
|
|
1968
2312
|
this.#channel = new WorkerChannel({
|
|
1969
|
-
|
|
2313
|
+
getWorker: () => this.workerPromise.then(([worker]) => worker)
|
|
1970
2314
|
});
|
|
1971
2315
|
}
|
|
1972
|
-
#frames;
|
|
1973
|
-
#channel;
|
|
1974
|
-
#clientPromise;
|
|
1975
|
-
#keepAliveInterval;
|
|
1976
|
-
#stoppedAt;
|
|
1977
|
-
workerPromise;
|
|
1978
2316
|
async enable() {
|
|
1979
|
-
this.#stoppedAt
|
|
1980
|
-
if (this.workerPromise.state !== "pending") {
|
|
2317
|
+
if (this.workerPromise.state === "fulfilled" && typeof this.#stoppedAt == "undefined") {
|
|
1981
2318
|
devUtils3.warn(
|
|
1982
2319
|
'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.'
|
|
1983
2320
|
);
|
|
1984
2321
|
return this.workerPromise.then(([, registration2]) => registration2);
|
|
1985
2322
|
}
|
|
2323
|
+
this.#stoppedAt = void 0;
|
|
1986
2324
|
this.#channel.removeAllListeners();
|
|
2325
|
+
this.#frames.clear();
|
|
2326
|
+
this.#listenerController = new AbortController();
|
|
1987
2327
|
const [worker, registration] = await this.#startWorker();
|
|
1988
2328
|
if (worker.state !== "activated") {
|
|
1989
2329
|
const controller = new AbortController();
|
|
1990
|
-
const activationPromise = new
|
|
2330
|
+
const activationPromise = new DeferredPromise2();
|
|
1991
2331
|
activationPromise.then(() => controller.abort());
|
|
1992
2332
|
worker.addEventListener(
|
|
1993
2333
|
"statechange",
|
|
@@ -1996,18 +2336,20 @@ var ServiceWorkerSource = class extends NetworkSource {
|
|
|
1996
2336
|
activationPromise.resolve();
|
|
1997
2337
|
}
|
|
1998
2338
|
},
|
|
1999
|
-
{
|
|
2339
|
+
{
|
|
2340
|
+
signal: controller.signal
|
|
2341
|
+
}
|
|
2000
2342
|
);
|
|
2001
2343
|
await activationPromise;
|
|
2002
2344
|
}
|
|
2003
2345
|
this.#channel.postMessage("MOCK_ACTIVATE");
|
|
2004
|
-
const clientConfirmationPromise = new
|
|
2346
|
+
const clientConfirmationPromise = new DeferredPromise2();
|
|
2005
2347
|
this.#clientPromise = clientConfirmationPromise;
|
|
2006
2348
|
this.#channel.once("MOCKING_ENABLED", (event) => {
|
|
2007
2349
|
clientConfirmationPromise.resolve(event.data.client);
|
|
2008
2350
|
});
|
|
2009
2351
|
await clientConfirmationPromise;
|
|
2010
|
-
if (!this
|
|
2352
|
+
if (!this.#options.quiet) {
|
|
2011
2353
|
this.#printStartMessage();
|
|
2012
2354
|
}
|
|
2013
2355
|
return registration;
|
|
@@ -2020,24 +2362,47 @@ var ServiceWorkerSource = class extends NetworkSource {
|
|
|
2020
2362
|
return;
|
|
2021
2363
|
}
|
|
2022
2364
|
this.#stoppedAt = Date.now();
|
|
2023
|
-
this.#
|
|
2024
|
-
this
|
|
2025
|
-
|
|
2365
|
+
this.#listenerController?.abort();
|
|
2366
|
+
this.#listenerController = void 0;
|
|
2367
|
+
this.#channel.postMessage("CLIENT_CLOSED");
|
|
2368
|
+
if (!this.#options.quiet) {
|
|
2026
2369
|
this.#printStopMessage();
|
|
2027
2370
|
}
|
|
2028
2371
|
}
|
|
2372
|
+
/**
|
|
2373
|
+
* Terminal teardown. Unregisters the Service Worker, tears down the channel,
|
|
2374
|
+
* and clears timers. Called when the singleton is being replaced with one
|
|
2375
|
+
* that has different options. The instance is not usable afterwards.
|
|
2376
|
+
*/
|
|
2377
|
+
async terminate() {
|
|
2378
|
+
if (this.#keepAliveInterval != null) {
|
|
2379
|
+
clearInterval(this.#keepAliveInterval);
|
|
2380
|
+
this.#keepAliveInterval = void 0;
|
|
2381
|
+
}
|
|
2382
|
+
this.#frames.clear();
|
|
2383
|
+
this.#channel.terminate();
|
|
2384
|
+
this.#listenerController?.abort();
|
|
2385
|
+
this.#listenerController = void 0;
|
|
2386
|
+
if (this.workerPromise.state === "fulfilled") {
|
|
2387
|
+
const [, registration] = await this.workerPromise;
|
|
2388
|
+
await registration.unregister();
|
|
2389
|
+
}
|
|
2390
|
+
if (_ServiceWorkerSource.#current === this) {
|
|
2391
|
+
_ServiceWorkerSource.#current = void 0;
|
|
2392
|
+
}
|
|
2393
|
+
}
|
|
2029
2394
|
async #startWorker() {
|
|
2030
2395
|
if (this.#keepAliveInterval) {
|
|
2031
2396
|
clearInterval(this.#keepAliveInterval);
|
|
2032
2397
|
}
|
|
2033
|
-
const workerUrl = this
|
|
2398
|
+
const workerUrl = this.#options.serviceWorker.url;
|
|
2034
2399
|
const [worker, registration] = await getWorkerInstance(
|
|
2035
2400
|
workerUrl,
|
|
2036
|
-
this
|
|
2037
|
-
this
|
|
2401
|
+
this.#options.serviceWorker.options,
|
|
2402
|
+
this.#options.findWorker || this.#defaultFindWorker
|
|
2038
2403
|
);
|
|
2039
2404
|
if (worker == null) {
|
|
2040
|
-
const missingWorkerMessage = this
|
|
2405
|
+
const missingWorkerMessage = this.#options?.findWorker ? devUtils3.formatMessage(
|
|
2041
2406
|
`Failed to locate the Service Worker registration using a custom "findWorker" predicate.
|
|
2042
2407
|
|
|
2043
2408
|
Please ensure that the custom predicate properly locates the Service Worker registration at "%s".
|
|
@@ -2055,16 +2420,28 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2055
2420
|
);
|
|
2056
2421
|
throw new Error(missingWorkerMessage);
|
|
2057
2422
|
}
|
|
2058
|
-
this.workerPromise.
|
|
2423
|
+
if (this.workerPromise.state === "pending") {
|
|
2424
|
+
this.workerPromise.resolve([worker, registration]);
|
|
2425
|
+
} else {
|
|
2426
|
+
this.workerPromise = new DeferredPromise2((resolve) => {
|
|
2427
|
+
resolve([worker, registration]);
|
|
2428
|
+
});
|
|
2429
|
+
}
|
|
2059
2430
|
this.#channel.on("REQUEST", this.#handleRequest.bind(this));
|
|
2060
2431
|
this.#channel.on("RESPONSE", this.#handleResponse.bind(this));
|
|
2061
|
-
window.addEventListener(
|
|
2062
|
-
|
|
2063
|
-
|
|
2432
|
+
window.addEventListener(
|
|
2433
|
+
"beforeunload",
|
|
2434
|
+
() => {
|
|
2435
|
+
if (worker.state !== "redundant") {
|
|
2436
|
+
this.#channel.postMessage("CLIENT_CLOSED");
|
|
2437
|
+
}
|
|
2438
|
+
clearInterval(this.#keepAliveInterval);
|
|
2439
|
+
window.postMessage({ type: "msw/worker:stop" });
|
|
2440
|
+
},
|
|
2441
|
+
{
|
|
2442
|
+
signal: this.#listenerController?.signal
|
|
2064
2443
|
}
|
|
2065
|
-
|
|
2066
|
-
window.postMessage({ type: "msw/worker:stop" });
|
|
2067
|
-
});
|
|
2444
|
+
);
|
|
2068
2445
|
await this.#checkWorkerIntegrity().catch((error2) => {
|
|
2069
2446
|
devUtils3.error(
|
|
2070
2447
|
"Error while checking the worker script integrity. Please report this on GitHub (https://github.com/mswjs/msw/issues) and include the original error below."
|
|
@@ -2074,7 +2451,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2074
2451
|
this.#keepAliveInterval = window.setInterval(() => {
|
|
2075
2452
|
this.#channel.postMessage("KEEPALIVE_REQUEST");
|
|
2076
2453
|
}, 5e3);
|
|
2077
|
-
if (!this
|
|
2454
|
+
if (!this.#options.quiet) {
|
|
2078
2455
|
validateWorkerScope(registration);
|
|
2079
2456
|
}
|
|
2080
2457
|
return [worker, registration];
|
|
@@ -2094,11 +2471,12 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2094
2471
|
}
|
|
2095
2472
|
async #handleResponse(event) {
|
|
2096
2473
|
const { request, response, isMockedResponse } = event.data;
|
|
2474
|
+
const frame = this.#frames.get(request.id);
|
|
2097
2475
|
if (response.type?.includes("opaque")) {
|
|
2098
2476
|
this.#frames.delete(request.id);
|
|
2477
|
+
frame?.events.removeAllListeners();
|
|
2099
2478
|
return;
|
|
2100
2479
|
}
|
|
2101
|
-
const frame = this.#frames.get(request.id);
|
|
2102
2480
|
this.#frames.delete(request.id);
|
|
2103
2481
|
if (frame == null) {
|
|
2104
2482
|
return;
|
|
@@ -2122,27 +2500,31 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
2122
2500
|
url: request.url
|
|
2123
2501
|
}
|
|
2124
2502
|
);
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2503
|
+
try {
|
|
2504
|
+
frame.events.emit(
|
|
2505
|
+
new ResponseEvent(
|
|
2506
|
+
isMockedResponse ? "response:mocked" : "response:bypass",
|
|
2507
|
+
{
|
|
2508
|
+
requestId: frame.data.id,
|
|
2509
|
+
request: fetchRequest,
|
|
2510
|
+
response: fetchResponse,
|
|
2511
|
+
isMockedResponse
|
|
2512
|
+
}
|
|
2513
|
+
)
|
|
2514
|
+
);
|
|
2515
|
+
} finally {
|
|
2516
|
+
frame.events.removeAllListeners();
|
|
2517
|
+
}
|
|
2136
2518
|
}
|
|
2137
2519
|
#defaultFindWorker = (workerUrl, mockServiceWorkerUrl) => {
|
|
2138
2520
|
return workerUrl === mockServiceWorkerUrl;
|
|
2139
2521
|
};
|
|
2140
2522
|
async #checkWorkerIntegrity() {
|
|
2141
|
-
const integrityCheckPromise = new
|
|
2523
|
+
const integrityCheckPromise = new DeferredPromise2();
|
|
2142
2524
|
this.#channel.postMessage("INTEGRITY_CHECK_REQUEST");
|
|
2143
2525
|
this.#channel.once("INTEGRITY_CHECK_RESPONSE", (event) => {
|
|
2144
2526
|
const { checksum, packageVersion } = event.data;
|
|
2145
|
-
if (checksum !== "
|
|
2527
|
+
if (checksum !== "03cb67ac84128e63d7cd722a6e5b7f1e") {
|
|
2146
2528
|
devUtils3.warn(
|
|
2147
2529
|
`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.
|
|
2148
2530
|
|
|
@@ -2262,7 +2644,7 @@ var until2 = async (promise) => {
|
|
|
2262
2644
|
}
|
|
2263
2645
|
};
|
|
2264
2646
|
|
|
2265
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
2647
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/handleRequest-CPPgsG7s.mjs
|
|
2266
2648
|
function isObject2(value, loose = false) {
|
|
2267
2649
|
return loose ? Object.prototype.toString.call(value).startsWith("[object ") : Object.prototype.toString.call(value) === "[object Object]";
|
|
2268
2650
|
}
|
|
@@ -2326,14 +2708,15 @@ async function handleRequest(options) {
|
|
|
2326
2708
|
return false;
|
|
2327
2709
|
};
|
|
2328
2710
|
const requestAbortPromise = new DeferredPromise();
|
|
2711
|
+
const onAbort = () => {
|
|
2712
|
+
requestAbortPromise.reject(options.request.signal?.reason);
|
|
2713
|
+
};
|
|
2329
2714
|
if (options.request.signal) {
|
|
2330
2715
|
if (options.request.signal.aborted) {
|
|
2331
2716
|
await options.controller.errorWith(options.request.signal.reason);
|
|
2332
2717
|
return;
|
|
2333
2718
|
}
|
|
2334
|
-
options.request.signal.addEventListener("abort",
|
|
2335
|
-
requestAbortPromise.reject(options.request.signal.reason);
|
|
2336
|
-
}, { once: true });
|
|
2719
|
+
options.request.signal.addEventListener("abort", onAbort, { once: true });
|
|
2337
2720
|
}
|
|
2338
2721
|
const result = await until2(async () => {
|
|
2339
2722
|
const requestListenersPromise = emitAsync(options.emitter, "request", {
|
|
@@ -2347,6 +2730,7 @@ async function handleRequest(options) {
|
|
|
2347
2730
|
options.controller.handled
|
|
2348
2731
|
]);
|
|
2349
2732
|
});
|
|
2733
|
+
options.request.signal?.removeEventListener("abort", onAbort);
|
|
2350
2734
|
if (requestAbortPromise.state === "rejected") {
|
|
2351
2735
|
await options.controller.errorWith(requestAbortPromise.rejectionReason);
|
|
2352
2736
|
return;
|
|
@@ -2379,7 +2763,7 @@ async function handleRequest(options) {
|
|
|
2379
2763
|
return options.controller.handled;
|
|
2380
2764
|
}
|
|
2381
2765
|
|
|
2382
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
2766
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/fetch-5IMPqr9e.mjs
|
|
2383
2767
|
function createNetworkError(cause) {
|
|
2384
2768
|
return Object.assign(/* @__PURE__ */ new TypeError("Failed to fetch"), { cause });
|
|
2385
2769
|
}
|
|
@@ -2390,7 +2774,7 @@ var REQUEST_BODY_HEADERS = [
|
|
|
2390
2774
|
"content-type",
|
|
2391
2775
|
"content-length"
|
|
2392
2776
|
];
|
|
2393
|
-
var kRedirectCount = Symbol("kRedirectCount");
|
|
2777
|
+
var kRedirectCount = /* @__PURE__ */ Symbol("kRedirectCount");
|
|
2394
2778
|
async function followFetchRedirect(request, response) {
|
|
2395
2779
|
if (response.status !== 303 && request.body != null) return Promise.reject(createNetworkError());
|
|
2396
2780
|
const requestUrl = new URL(request.url);
|
|
@@ -2472,7 +2856,7 @@ function decompressResponse(response) {
|
|
|
2472
2856
|
}
|
|
2473
2857
|
var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
2474
2858
|
static {
|
|
2475
|
-
this.symbol = Symbol("fetch");
|
|
2859
|
+
this.symbol = /* @__PURE__ */ Symbol.for("fetch-interceptor");
|
|
2476
2860
|
}
|
|
2477
2861
|
constructor() {
|
|
2478
2862
|
super(FetchInterceptor2.symbol);
|
|
@@ -2481,12 +2865,11 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2481
2865
|
return hasConfigurableGlobal("fetch");
|
|
2482
2866
|
}
|
|
2483
2867
|
async setup() {
|
|
2868
|
+
const logger = this.logger.extend("setup");
|
|
2484
2869
|
const pureFetch = globalThis.fetch;
|
|
2485
|
-
|
|
2486
|
-
globalThis.fetch = async (input, init) => {
|
|
2870
|
+
const fetchProxy = async (input, init) => {
|
|
2487
2871
|
const requestId = createRequestId();
|
|
2488
|
-
const
|
|
2489
|
-
const request = new Request(resolvedInput, init);
|
|
2872
|
+
const request = new FetchRequest(typeof input === "string" && typeof location !== "undefined" && !canParseUrl(input) ? new URL(input, location.href) : input, init);
|
|
2490
2873
|
if (input instanceof Request) setRawRequest(request, input);
|
|
2491
2874
|
const responsePromise = new DeferredPromise();
|
|
2492
2875
|
const controller = new RequestController(request, {
|
|
@@ -2498,7 +2881,7 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2498
2881
|
this.logger.info("original fetch performed", originalResponse);
|
|
2499
2882
|
if (this.emitter.listenerCount("response") > 0) {
|
|
2500
2883
|
this.logger.info('emitting the "response" event...');
|
|
2501
|
-
const responseClone =
|
|
2884
|
+
const responseClone = FetchResponse.clone(originalResponse);
|
|
2502
2885
|
await emitAsync(this.emitter, "response", {
|
|
2503
2886
|
response: responseClone,
|
|
2504
2887
|
isMockedResponse: false,
|
|
@@ -2515,9 +2898,12 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2515
2898
|
return;
|
|
2516
2899
|
}
|
|
2517
2900
|
this.logger.info("received mocked response!", { rawResponse });
|
|
2518
|
-
const
|
|
2519
|
-
|
|
2520
|
-
|
|
2901
|
+
const response = new FetchResponse(decompressResponse(rawResponse) || rawResponse.body, {
|
|
2902
|
+
url: request.url,
|
|
2903
|
+
status: rawResponse.status,
|
|
2904
|
+
statusText: rawResponse.statusText,
|
|
2905
|
+
headers: rawResponse.headers
|
|
2906
|
+
});
|
|
2521
2907
|
if (FetchResponse.isRedirectResponse(response.status)) {
|
|
2522
2908
|
if (request.redirect === "error") {
|
|
2523
2909
|
responsePromise.reject(createNetworkError("unexpected redirect"));
|
|
@@ -2535,7 +2921,7 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2535
2921
|
if (this.emitter.listenerCount("response") > 0) {
|
|
2536
2922
|
this.logger.info('emitting the "response" event...');
|
|
2537
2923
|
await emitAsync(this.emitter, "response", {
|
|
2538
|
-
response:
|
|
2924
|
+
response: FetchResponse.clone(response),
|
|
2539
2925
|
isMockedResponse: true,
|
|
2540
2926
|
request,
|
|
2541
2927
|
requestId
|
|
@@ -2559,20 +2945,13 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
|
|
|
2559
2945
|
});
|
|
2560
2946
|
return responsePromise;
|
|
2561
2947
|
};
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
value: true
|
|
2566
|
-
});
|
|
2567
|
-
this.subscriptions.push(() => {
|
|
2568
|
-
Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, { value: void 0 });
|
|
2569
|
-
globalThis.fetch = pureFetch;
|
|
2570
|
-
this.logger.info('restored native "globalThis.fetch"!', globalThis.fetch.name);
|
|
2571
|
-
});
|
|
2948
|
+
logger.info("patching global fetch...");
|
|
2949
|
+
this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "fetch", () => fetchProxy));
|
|
2950
|
+
logger.info("global fetch patched!", globalThis.fetch.name);
|
|
2572
2951
|
}
|
|
2573
2952
|
};
|
|
2574
2953
|
|
|
2575
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.41.
|
|
2954
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/XMLHttpRequest-DrZAf3w6.mjs
|
|
2576
2955
|
function concatArrayBuffer(left, right) {
|
|
2577
2956
|
const result = new Uint8Array(left.byteLength + right.byteLength);
|
|
2578
2957
|
result.set(left, 0);
|
|
@@ -2738,9 +3117,9 @@ async function getBodyByteLength(input) {
|
|
|
2738
3117
|
if (explicitContentLength != null && explicitContentLength !== "") return Number(explicitContentLength);
|
|
2739
3118
|
return (await input.arrayBuffer()).byteLength;
|
|
2740
3119
|
}
|
|
2741
|
-
var kIsRequestHandled = Symbol("kIsRequestHandled");
|
|
3120
|
+
var kIsRequestHandled = /* @__PURE__ */ Symbol("kIsRequestHandled");
|
|
2742
3121
|
var IS_NODE2 = isNodeProcess();
|
|
2743
|
-
var kFetchRequest = Symbol("kFetchRequest");
|
|
3122
|
+
var kFetchRequest = /* @__PURE__ */ Symbol("kFetchRequest");
|
|
2744
3123
|
var XMLHttpRequestController = class {
|
|
2745
3124
|
constructor(initialRequest, logger) {
|
|
2746
3125
|
this.initialRequest = initialRequest;
|
|
@@ -3078,7 +3457,7 @@ var XMLHttpRequestController = class {
|
|
|
3078
3457
|
toFetchApiRequest(body) {
|
|
3079
3458
|
this.logger.info("converting request to a Fetch API Request...");
|
|
3080
3459
|
const resolvedBody = body instanceof Document ? body.documentElement.innerText : body;
|
|
3081
|
-
const fetchRequest = new
|
|
3460
|
+
const fetchRequest = new FetchRequest(this.url.href, {
|
|
3082
3461
|
method: this.method,
|
|
3083
3462
|
headers: this.requestHeaders,
|
|
3084
3463
|
credentials: this.request.withCredentials ? "include" : "same-origin",
|
|
@@ -3163,34 +3542,24 @@ function createXMLHttpRequestProxy({ emitter, logger }) {
|
|
|
3163
3542
|
}
|
|
3164
3543
|
var XMLHttpRequestInterceptor = class XMLHttpRequestInterceptor2 extends Interceptor {
|
|
3165
3544
|
static {
|
|
3166
|
-
this.
|
|
3545
|
+
this.symbol = /* @__PURE__ */ Symbol.for("xhr-interceptor");
|
|
3167
3546
|
}
|
|
3168
3547
|
constructor() {
|
|
3169
|
-
super(XMLHttpRequestInterceptor2.
|
|
3548
|
+
super(XMLHttpRequestInterceptor2.symbol);
|
|
3170
3549
|
}
|
|
3171
3550
|
checkEnvironment() {
|
|
3172
3551
|
return hasConfigurableGlobal("XMLHttpRequest");
|
|
3173
3552
|
}
|
|
3174
3553
|
setup() {
|
|
3175
3554
|
const logger = this.logger.extend("setup");
|
|
3176
|
-
logger.info(
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
});
|
|
3183
|
-
logger.info(
|
|
3184
|
-
Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {
|
|
3185
|
-
enumerable: true,
|
|
3186
|
-
configurable: true,
|
|
3187
|
-
value: true
|
|
3188
|
-
});
|
|
3189
|
-
this.subscriptions.push(() => {
|
|
3190
|
-
Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, { value: void 0 });
|
|
3191
|
-
globalThis.XMLHttpRequest = PureXMLHttpRequest;
|
|
3192
|
-
logger.info('native "XMLHttpRequest" module restored!', globalThis.XMLHttpRequest.name);
|
|
3193
|
-
});
|
|
3555
|
+
logger.info("patching global XMLHttpRequest...");
|
|
3556
|
+
this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "XMLHttpRequest", () => {
|
|
3557
|
+
return createXMLHttpRequestProxy({
|
|
3558
|
+
emitter: this.emitter,
|
|
3559
|
+
logger: this.logger
|
|
3560
|
+
});
|
|
3561
|
+
}));
|
|
3562
|
+
logger.info("global XMLHttpRequest patched!", globalThis.XMLHttpRequest.name);
|
|
3194
3563
|
}
|
|
3195
3564
|
};
|
|
3196
3565
|
|
|
@@ -3204,6 +3573,7 @@ var FallbackHttpSource = class extends InterceptorSource {
|
|
|
3204
3573
|
});
|
|
3205
3574
|
this.options = options;
|
|
3206
3575
|
}
|
|
3576
|
+
options;
|
|
3207
3577
|
enable() {
|
|
3208
3578
|
super.enable();
|
|
3209
3579
|
if (!this.options.quiet) {
|
|
@@ -3263,7 +3633,7 @@ function setupWorker(...handlers) {
|
|
|
3263
3633
|
);
|
|
3264
3634
|
return;
|
|
3265
3635
|
}
|
|
3266
|
-
const httpSource = supportsServiceWorker() ?
|
|
3636
|
+
const httpSource = supportsServiceWorker() ? await ServiceWorkerSource.from({
|
|
3267
3637
|
serviceWorker: {
|
|
3268
3638
|
url: options?.serviceWorker?.url?.toString() || DEFAULT_WORKER_URL,
|
|
3269
3639
|
options: options?.serviceWorker?.options
|