msw 2.14.7 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/cli/init.js +12 -9
- package/cli/invariant.js +2 -2
- package/lib/_chunks/attach-sibling-handlers.js +360 -0
- package/lib/_chunks/attach-sibling-handlers.js.map +1 -0
- package/lib/_chunks/colors.js +18 -0
- package/lib/_chunks/colors.js.map +1 -0
- package/lib/_chunks/cookie-store.js +348 -0
- package/lib/_chunks/cookie-store.js.map +1 -0
- package/lib/_chunks/execute-handlers.js +29 -0
- package/lib/_chunks/execute-handlers.js.map +1 -0
- package/lib/_chunks/handlers-controller.d.ts +262 -0
- package/lib/_chunks/has-ref-counted.js +9 -0
- package/lib/_chunks/has-ref-counted.js.map +1 -0
- package/lib/_chunks/http-handler.d.ts +72 -0
- package/lib/_chunks/http-handler.js +182 -0
- package/lib/_chunks/http-handler.js.map +1 -0
- package/lib/_chunks/http-response.js +137 -0
- package/lib/_chunks/http-response.js.map +1 -0
- package/lib/{core → _chunks}/http.d.ts +15 -18
- package/lib/_chunks/http.js +30 -0
- package/lib/_chunks/http.js.map +1 -0
- package/lib/_chunks/interceptor-source.d.ts +163 -0
- package/lib/_chunks/interceptor-source.js +756 -0
- package/lib/_chunks/interceptor-source.js.map +1 -0
- package/lib/_chunks/is-object.js +11 -0
- package/lib/_chunks/is-object.js.map +1 -0
- package/lib/_chunks/match-request-url.d.ts +14 -0
- package/lib/_chunks/request-handler.d.ts +295 -0
- package/lib/_chunks/request-handler.js +369 -0
- package/lib/_chunks/request-handler.js.map +1 -0
- package/lib/_chunks/shared-options.d.ts +20 -0
- package/lib/_chunks/sse.d.ts +95 -0
- package/lib/_chunks/sse.js +599 -0
- package/lib/_chunks/sse.js.map +1 -0
- package/lib/_chunks/symbols.js +22 -0
- package/lib/_chunks/symbols.js.map +1 -0
- package/lib/_chunks/websocket-upgrade.js +46 -0
- package/lib/_chunks/websocket-upgrade.js.map +1 -0
- package/lib/_chunks/ws.d.ts +133 -0
- package/lib/_chunks/ws.js +293 -0
- package/lib/_chunks/ws.js.map +1 -0
- package/lib/browser/index.d.ts +225 -96
- package/lib/browser/index.js +555 -3694
- package/lib/browser/index.js.map +1 -1
- package/lib/core/experimental/index.d.ts +3 -17
- package/lib/core/experimental/index.js +2 -38
- package/lib/core/index.d.ts +15 -27
- package/lib/core/index.js +15 -64
- package/lib/graphql/index.d.ts +550 -0
- package/lib/graphql/index.js +1244 -0
- package/lib/graphql/index.js.map +1 -0
- package/lib/http/index.d.ts +4 -0
- package/lib/http/index.js +4 -0
- package/lib/iife/index.js +35857 -28289
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +204 -93
- package/lib/node/index.d.ts +79 -104
- package/lib/node/index.js +103 -201
- package/lib/node/index.js.map +1 -1
- package/lib/sse/index.d.ts +2 -0
- package/lib/sse/index.js +2 -0
- package/lib/{core → utils}/bypass.d.ts +5 -4
- package/lib/utils/bypass.js +41 -0
- package/lib/utils/bypass.js.map +1 -0
- package/lib/utils/delay.d.ts +15 -0
- package/lib/utils/delay.js +45 -0
- package/lib/utils/delay.js.map +1 -0
- package/lib/utils/get-clean-url-string.d.ts +9 -0
- package/lib/utils/get-clean-url-string.js +15 -0
- package/lib/utils/get-clean-url-string.js.map +1 -0
- package/lib/utils/get-response.d.ts +13 -0
- package/lib/utils/get-response.js +23 -0
- package/lib/utils/get-response.js.map +1 -0
- package/lib/utils/is-common-asset-request.d.ts +22 -0
- package/lib/utils/is-common-asset-request.js +31 -0
- package/lib/utils/is-common-asset-request.js.map +1 -0
- package/lib/utils/passthrough.d.ts +31 -0
- package/lib/utils/passthrough.js +41 -0
- package/lib/utils/passthrough.js.map +1 -0
- package/lib/vite/index.d.ts +44 -0
- package/lib/vite/index.js +90 -0
- package/lib/vite/index.js.map +1 -0
- package/lib/vite/runtime.d.ts +6 -0
- package/lib/vite/runtime.js +77 -0
- package/lib/vite/runtime.js.map +1 -0
- package/lib/ws/index.d.ts +4 -0
- package/lib/ws/index.js +4 -0
- package/package.json +93 -201
- package/src/browser/default-network-options.ts +31 -0
- package/src/browser/glossary.ts +11 -23
- package/src/browser/index.ts +5 -1
- package/src/browser/setup-worker.ts +15 -68
- package/src/browser/sources/fallback-http-source.ts +1 -1
- package/src/browser/sources/service-worker-source.ts +76 -69
- package/src/browser/tsconfig.browser.json +4 -2
- package/src/browser/utils/{deserializeRequest.ts → deserialize-request.ts} +3 -4
- package/src/browser/utils/{getAbsoluteWorkerUrl.test.ts → get-absolute-worker-url.test.ts} +3 -3
- package/src/browser/utils/get-worker-instance.ts +2 -2
- package/src/browser/utils/should-invalidate-worker.test.ts +11 -11
- package/src/browser/utils/should-invalidate-worker.ts +1 -1
- package/src/browser/utils/validate-worker-scope.ts +1 -1
- package/src/browser/utils/{workerChannel.ts → worker-channel.ts} +42 -20
- package/src/core/experimental/define-network.test.ts +43 -8
- package/src/core/experimental/define-network.ts +32 -13
- package/src/core/experimental/frames/http-frame.test.ts +15 -13
- package/src/core/experimental/frames/http-frame.ts +10 -9
- package/src/core/experimental/frames/websocket-frame.test.ts +129 -15
- package/src/core/experimental/frames/websocket-frame.ts +71 -20
- package/src/core/experimental/handlers-controller.test.ts +141 -34
- package/src/core/experimental/handlers-controller.ts +107 -30
- package/src/core/experimental/index.ts +1 -0
- package/src/core/experimental/on-unhandled-frame.test.ts +19 -19
- package/src/core/experimental/on-unhandled-frame.ts +7 -12
- package/src/core/experimental/request-utils.test.ts +4 -29
- package/src/core/experimental/request-utils.ts +0 -14
- package/src/core/experimental/sources/interceptor-source.ts +44 -29
- package/src/core/experimental/sources/network-source.test.ts +3 -3
- package/src/core/experimental/sources/network-source.ts +3 -3
- package/src/core/handlers/handler.ts +42 -0
- package/src/core/handlers/{RequestHandler.ts → request-handler.ts} +168 -73
- package/src/core/index.ts +35 -58
- package/src/core/shared-options.ts +21 -0
- package/src/core/type-utils.ts +18 -0
- package/src/core/utils/{cookieStore.ts → cookie-store.ts} +14 -9
- package/src/core/utils/{executeHandlers.ts → execute-handlers.ts} +2 -2
- package/src/core/utils/http-status-messages.ts +69 -0
- package/src/core/utils/internal/{attachSiblingHandlers.ts → attach-sibling-handlers.ts} +20 -0
- package/src/core/utils/internal/{devUtils.test.ts → dev-utils.test.ts} +3 -3
- package/src/core/utils/internal/{Disposable.ts → disposable.ts} +1 -1
- package/src/core/utils/internal/{getCallFrame.test.ts → get-call-frame.test.ts} +1 -1
- package/src/core/utils/internal/{getCallFrame.ts → get-call-frame.ts} +1 -1
- package/src/core/utils/internal/{hasRefCounted.test.ts → has-ref-counted.test.ts} +4 -4
- package/src/core/utils/internal/{hasRefCounted.ts → has-ref-counted.ts} +1 -1
- package/src/core/utils/internal/{isIterable.test.ts → is-iterable.test.ts} +1 -1
- package/src/core/utils/internal/is-iterable.ts +16 -0
- package/src/core/utils/internal/{isObject.test.ts → is-object.test.ts} +1 -1
- package/src/core/utils/internal/{isStringEqual.test.ts → is-string-equal.test.ts} +7 -7
- package/src/core/utils/internal/{jsonParse.test.ts → json-parse.test.ts} +1 -1
- package/src/core/utils/internal/observe-response-body-stream.test.ts +64 -0
- package/src/core/utils/internal/observe-response-body-stream.ts +76 -0
- package/src/core/utils/internal/{parseMultipartData.test.ts → parse-multipart-data.test.ts} +1 -1
- package/src/core/utils/internal/{parseMultipartData.ts → parse-multipart-data.ts} +1 -1
- package/src/core/utils/internal/{toReadonlyArray.test.ts → to-readonly-array.test.ts} +4 -4
- package/src/core/utils/logging/colors.ts +13 -0
- package/src/core/utils/logging/{getStatusCodeColor.test.ts → get-status-code-color.test.ts} +1 -1
- package/src/core/utils/logging/{getTimestamp.test.ts → get-timestamp.test.ts} +1 -1
- package/src/core/utils/logging/{serializeRequest.test.ts → serialize-request.test.ts} +1 -1
- package/src/core/utils/logging/{serializeResponse.test.ts → serialize-response.test.ts} +8 -10
- package/src/core/utils/logging/{serializeResponse.ts → serialize-response.ts} +2 -4
- package/src/core/utils/matching/match-request-url.test.ts +90 -0
- package/src/core/utils/matching/match-request-url.ts +45 -0
- package/src/core/utils/matching/{normalizePath.node.test.ts → normalize-path.node.test.ts} +2 -4
- package/src/core/utils/matching/{normalizePath.test.ts → normalize-path.test.ts} +2 -4
- package/src/core/utils/matching/{normalizePath.ts → normalize-path.ts} +8 -5
- package/src/core/utils/request/{getAllAcceptedMimeTypes.test.ts → get-all-accepted-mime-types.test.ts} +14 -14
- package/src/core/utils/request/get-request-cookies.ts +76 -0
- package/src/core/utils/request/store-response-cookies.ts +15 -0
- package/src/core/utils/request/{toPublicUrl.node.test.ts → to-public-url.node.test.ts} +1 -1
- package/src/core/utils/request/{toPublicUrl.test.ts → to-public-url.test.ts} +2 -2
- package/src/core/utils/{HttpResponse/decorators.ts → response-decorators.ts} +28 -9
- package/src/core/utils/url/{getAbsoluteUrl.node.test.ts → get-absolute-url.node.test.ts} +5 -7
- package/src/core/utils/url/{getAbsoluteUrl.test.ts → get-absolute-url.test.ts} +7 -7
- package/src/core/utils/url/{getAbsoluteUrl.ts → get-absolute-url.ts} +1 -1
- package/src/core/utils/url/is-absolute-url.test.ts +30 -0
- package/src/{core/handlers/GraphQLHandler.test.ts → graphql/graphql-handler.test.ts} +37 -36
- package/src/{core/handlers/GraphQLHandler.ts → graphql/graphql-handler.ts} +54 -41
- package/src/graphql/graphql-subscription-event.ts +39 -0
- package/src/graphql/graphql-subscription.test.ts +208 -0
- package/src/graphql/graphql-subscription.ts +1487 -0
- package/src/graphql/graphql.test.ts +14 -0
- package/src/graphql/graphql.ts +179 -0
- package/src/graphql/index.ts +34 -0
- package/src/{core/utils/internal/parseGraphQLRequest.test.ts → graphql/parse-graphql-request.test.ts} +47 -6
- package/src/{core/utils/internal/parseGraphQLRequest.ts → graphql/parse-graphql-request.ts} +59 -32
- package/src/{core/handlers/HttpHandler.test.ts → http/http-handler.test.ts} +107 -18
- package/src/{core/handlers/HttpHandler.ts → http/http-handler.ts} +16 -18
- package/src/{core/HttpResponse.test.ts → http/http-response.test.ts} +25 -27
- package/src/{core/HttpResponse.ts → http/http-response.ts} +15 -17
- package/src/{core → http}/http.ts +7 -7
- package/src/http/index.test.ts +19 -0
- package/src/http/index.ts +22 -0
- package/src/http/symbols.ts +19 -0
- package/src/iife/index.ts +2 -0
- package/src/mockServiceWorker.js +202 -91
- package/src/node/async-handlers-controller.test.ts +4 -4
- package/src/node/glossary.ts +8 -4
- package/src/node/index.ts +1 -6
- package/src/node/setup-server-common.ts +16 -73
- package/src/node/setup-server.ts +9 -40
- package/src/sse/index.test.ts +14 -0
- package/src/sse/index.ts +7 -0
- package/src/{core → sse}/sse.ts +105 -69
- package/src/tsconfig.core.build.json +5 -1
- package/src/tsconfig.core.json +8 -1
- package/src/tsconfig.node.json +1 -1
- package/src/tsconfig.src.json +1 -1
- package/src/{core → utils}/bypass.test.ts +22 -5
- package/src/{core → utils}/bypass.ts +11 -0
- package/src/{core → utils}/delay.ts +5 -5
- package/src/utils/get-clean-url-string.test.ts +24 -0
- package/src/utils/get-clean-url-string.ts +16 -0
- package/src/{core/getResponse.test.ts → utils/get-response.test.ts} +9 -9
- package/src/{core/getResponse.ts → utils/get-response.ts} +2 -2
- package/src/{core/isCommonAssetRequest.ts → utils/is-common-asset-request.ts} +4 -3
- package/src/utils/passthrough.test.ts +41 -0
- package/src/utils/passthrough.ts +46 -0
- package/src/vite/client.d.ts +16 -0
- package/src/vite/index.ts +4 -0
- package/src/vite/options.d.ts +5 -0
- package/src/vite/plugin.test.ts +918 -0
- package/src/vite/plugin.ts +133 -0
- package/src/vite/runtime.ts +117 -0
- package/src/vite/tsconfig.build.json +7 -0
- package/src/ws/index.ts +23 -0
- package/src/{core/ws/utils/attachWebSocketLogger.ts → ws/utils/attach-websocket-logger.ts} +45 -23
- package/src/{core/ws/utils/getMessageLength.test.ts → ws/utils/get-message-length.test.ts} +4 -4
- package/src/{core/ws/utils/getMessageLength.ts → ws/utils/get-message-length.ts} +1 -1
- package/src/{core/ws/utils/getPublicData.test.ts → ws/utils/get-public-data.test.ts} +7 -7
- package/src/ws/utils/get-public-data.ts +23 -0
- package/src/{core/ws/utils/truncateMessage.test.ts → ws/utils/truncate-message.test.ts} +3 -3
- package/src/{core/ws/WebSocketClientManager.test.ts → ws/websocket-client-manager.test.ts} +8 -9
- package/src/{core/ws/WebSocketClientManager.ts → ws/websocket-client-manager.ts} +24 -28
- package/src/{core/ws/WebSocketClientStore.ts → ws/websocket-client-store.ts} +2 -2
- package/src/{core/handlers/WebSocketHandler.test.ts → ws/websocket-handler.test.ts} +15 -15
- package/src/{core/handlers/WebSocketHandler.ts → ws/websocket-handler.ts} +144 -32
- package/src/{core/ws/WebSocketIndexedDBClientStore.ts → ws/websocket-indexeddb-client-store.ts} +12 -13
- package/src/{core/ws/WebSocketMemoryClientStore.ts → ws/websocket-memory-client-store.ts} +4 -4
- package/src/ws/websocket-upgrade.ts +83 -0
- package/src/{core → ws}/ws.test.ts +3 -4
- package/src/{core → ws}/ws.ts +106 -53
- package/browser/package.json +0 -31
- package/cli/package.json +0 -3
- package/config/package.json +0 -3
- package/config/scripts/postinstall.js +0 -36
- package/lib/browser/index.d.mts +0 -112
- package/lib/browser/index.mjs +0 -3706
- package/lib/browser/index.mjs.map +0 -1
- package/lib/core/HttpResponse-BTyqrRB6.d.mts +0 -371
- package/lib/core/HttpResponse-BXyXQFMJ.d.ts +0 -371
- package/lib/core/HttpResponse.d.mts +0 -6
- package/lib/core/HttpResponse.d.ts +0 -6
- package/lib/core/HttpResponse.js +0 -176
- package/lib/core/HttpResponse.js.map +0 -1
- package/lib/core/HttpResponse.mjs +0 -159
- package/lib/core/HttpResponse.mjs.map +0 -1
- package/lib/core/bypass.d.mts +0 -16
- package/lib/core/bypass.js +0 -42
- package/lib/core/bypass.js.map +0 -1
- package/lib/core/bypass.mjs +0 -22
- package/lib/core/bypass.mjs.map +0 -1
- package/lib/core/delay.d.mts +0 -18
- package/lib/core/delay.d.ts +0 -18
- package/lib/core/delay.js +0 -77
- package/lib/core/delay.js.map +0 -1
- package/lib/core/delay.mjs +0 -57
- package/lib/core/delay.mjs.map +0 -1
- package/lib/core/experimental/compat.d.mts +0 -17
- package/lib/core/experimental/compat.d.ts +0 -17
- package/lib/core/experimental/compat.js +0 -55
- package/lib/core/experimental/compat.js.map +0 -1
- package/lib/core/experimental/compat.mjs +0 -37
- package/lib/core/experimental/compat.mjs.map +0 -1
- package/lib/core/experimental/define-network.d.mts +0 -75
- package/lib/core/experimental/define-network.d.ts +0 -75
- package/lib/core/experimental/define-network.js +0 -134
- package/lib/core/experimental/define-network.js.map +0 -1
- package/lib/core/experimental/define-network.mjs +0 -119
- package/lib/core/experimental/define-network.mjs.map +0 -1
- package/lib/core/experimental/frames/http-frame.d.mts +0 -77
- package/lib/core/experimental/frames/http-frame.d.ts +0 -77
- package/lib/core/experimental/frames/http-frame.js +0 -197
- package/lib/core/experimental/frames/http-frame.js.map +0 -1
- package/lib/core/experimental/frames/http-frame.mjs +0 -181
- package/lib/core/experimental/frames/http-frame.mjs.map +0 -1
- package/lib/core/experimental/frames/network-frame.d.mts +0 -12
- package/lib/core/experimental/frames/network-frame.d.ts +0 -12
- package/lib/core/experimental/frames/network-frame.js +0 -35
- package/lib/core/experimental/frames/network-frame.js.map +0 -1
- package/lib/core/experimental/frames/network-frame.mjs +0 -15
- package/lib/core/experimental/frames/network-frame.mjs.map +0 -1
- package/lib/core/experimental/frames/websocket-frame.d.mts +0 -55
- package/lib/core/experimental/frames/websocket-frame.d.ts +0 -55
- package/lib/core/experimental/frames/websocket-frame.js +0 -131
- package/lib/core/experimental/frames/websocket-frame.js.map +0 -1
- package/lib/core/experimental/frames/websocket-frame.mjs +0 -118
- package/lib/core/experimental/frames/websocket-frame.mjs.map +0 -1
- package/lib/core/experimental/handlers-controller.d.mts +0 -36
- package/lib/core/experimental/handlers-controller.d.ts +0 -36
- package/lib/core/experimental/handlers-controller.js +0 -146
- package/lib/core/experimental/handlers-controller.js.map +0 -1
- package/lib/core/experimental/handlers-controller.mjs +0 -126
- package/lib/core/experimental/handlers-controller.mjs.map +0 -1
- package/lib/core/experimental/index.d.mts +0 -17
- package/lib/core/experimental/index.js.map +0 -1
- package/lib/core/experimental/index.mjs +0 -27
- package/lib/core/experimental/index.mjs.map +0 -1
- package/lib/core/experimental/on-unhandled-frame.d.mts +0 -12
- package/lib/core/experimental/on-unhandled-frame.d.ts +0 -12
- package/lib/core/experimental/on-unhandled-frame.js +0 -91
- package/lib/core/experimental/on-unhandled-frame.js.map +0 -1
- package/lib/core/experimental/on-unhandled-frame.mjs +0 -71
- package/lib/core/experimental/on-unhandled-frame.mjs.map +0 -1
- package/lib/core/experimental/request-utils.d.mts +0 -12
- package/lib/core/experimental/request-utils.d.ts +0 -12
- package/lib/core/experimental/request-utils.js +0 -50
- package/lib/core/experimental/request-utils.js.map +0 -1
- package/lib/core/experimental/request-utils.mjs +0 -30
- package/lib/core/experimental/request-utils.mjs.map +0 -1
- package/lib/core/experimental/setup-api.d.mts +0 -33
- package/lib/core/experimental/setup-api.d.ts +0 -33
- package/lib/core/experimental/setup-api.js +0 -58
- package/lib/core/experimental/setup-api.js.map +0 -1
- package/lib/core/experimental/setup-api.mjs +0 -40
- package/lib/core/experimental/setup-api.mjs.map +0 -1
- package/lib/core/experimental/sources/interceptor-source.d.mts +0 -28
- package/lib/core/experimental/sources/interceptor-source.d.ts +0 -28
- package/lib/core/experimental/sources/interceptor-source.js +0 -155
- package/lib/core/experimental/sources/interceptor-source.js.map +0 -1
- package/lib/core/experimental/sources/interceptor-source.mjs +0 -135
- package/lib/core/experimental/sources/interceptor-source.mjs.map +0 -1
- package/lib/core/experimental/sources/network-source.d.mts +0 -31
- package/lib/core/experimental/sources/network-source.d.ts +0 -31
- package/lib/core/experimental/sources/network-source.js +0 -51
- package/lib/core/experimental/sources/network-source.js.map +0 -1
- package/lib/core/experimental/sources/network-source.mjs +0 -32
- package/lib/core/experimental/sources/network-source.mjs.map +0 -1
- package/lib/core/getResponse.d.mts +0 -18
- package/lib/core/getResponse.d.ts +0 -18
- package/lib/core/getResponse.js +0 -35
- package/lib/core/getResponse.js.map +0 -1
- package/lib/core/getResponse.mjs +0 -17
- package/lib/core/getResponse.mjs.map +0 -1
- package/lib/core/graphql.d.mts +0 -76
- package/lib/core/graphql.d.ts +0 -76
- package/lib/core/graphql.js +0 -91
- package/lib/core/graphql.js.map +0 -1
- package/lib/core/graphql.mjs +0 -74
- package/lib/core/graphql.mjs.map +0 -1
- package/lib/core/handlers/GraphQLHandler.d.mts +0 -6
- package/lib/core/handlers/GraphQLHandler.d.ts +0 -6
- package/lib/core/handlers/GraphQLHandler.js +0 -232
- package/lib/core/handlers/GraphQLHandler.js.map +0 -1
- package/lib/core/handlers/GraphQLHandler.mjs +0 -221
- package/lib/core/handlers/GraphQLHandler.mjs.map +0 -1
- package/lib/core/handlers/HttpHandler.d.mts +0 -75
- package/lib/core/handlers/HttpHandler.d.ts +0 -75
- package/lib/core/handlers/HttpHandler.js +0 -129
- package/lib/core/handlers/HttpHandler.js.map +0 -1
- package/lib/core/handlers/HttpHandler.mjs +0 -113
- package/lib/core/handlers/HttpHandler.mjs.map +0 -1
- package/lib/core/handlers/RequestHandler.d.mts +0 -6
- package/lib/core/handlers/RequestHandler.d.ts +0 -6
- package/lib/core/handlers/RequestHandler.js +0 -300
- package/lib/core/handlers/RequestHandler.js.map +0 -1
- package/lib/core/handlers/RequestHandler.mjs +0 -283
- package/lib/core/handlers/RequestHandler.mjs.map +0 -1
- package/lib/core/handlers/WebSocketHandler.d.mts +0 -49
- package/lib/core/handlers/WebSocketHandler.d.ts +0 -49
- package/lib/core/handlers/WebSocketHandler.js +0 -178
- package/lib/core/handlers/WebSocketHandler.js.map +0 -1
- package/lib/core/handlers/WebSocketHandler.mjs +0 -160
- package/lib/core/handlers/WebSocketHandler.mjs.map +0 -1
- package/lib/core/http.d.mts +0 -31
- package/lib/core/http.js +0 -41
- package/lib/core/http.js.map +0 -1
- package/lib/core/http.mjs +0 -25
- package/lib/core/http.mjs.map +0 -1
- package/lib/core/index.d.mts +0 -27
- package/lib/core/index.js.map +0 -1
- package/lib/core/index.mjs +0 -52
- package/lib/core/index.mjs.map +0 -1
- package/lib/core/isCommonAssetRequest.d.mts +0 -20
- package/lib/core/isCommonAssetRequest.d.ts +0 -20
- package/lib/core/isCommonAssetRequest.js +0 -42
- package/lib/core/isCommonAssetRequest.js.map +0 -1
- package/lib/core/isCommonAssetRequest.mjs +0 -22
- package/lib/core/isCommonAssetRequest.mjs.map +0 -1
- package/lib/core/on-unhandled-frame-0KmwUmeV.d.ts +0 -56
- package/lib/core/on-unhandled-frame-gkokW4Rr.d.mts +0 -56
- package/lib/core/passthrough.d.mts +0 -24
- package/lib/core/passthrough.d.ts +0 -24
- package/lib/core/passthrough.js +0 -33
- package/lib/core/passthrough.js.map +0 -1
- package/lib/core/passthrough.mjs +0 -13
- package/lib/core/passthrough.mjs.map +0 -1
- package/lib/core/sharedOptions.d.mts +0 -68
- package/lib/core/sharedOptions.d.ts +0 -68
- package/lib/core/sharedOptions.js +0 -17
- package/lib/core/sharedOptions.js.map +0 -1
- package/lib/core/sharedOptions.mjs +0 -1
- package/lib/core/sharedOptions.mjs.map +0 -1
- package/lib/core/sse.d.mts +0 -102
- package/lib/core/sse.d.ts +0 -102
- package/lib/core/sse.js +0 -672
- package/lib/core/sse.js.map +0 -1
- package/lib/core/sse.mjs +0 -654
- package/lib/core/sse.mjs.map +0 -1
- package/lib/core/typeUtils.d.mts +0 -12
- package/lib/core/typeUtils.d.ts +0 -12
- package/lib/core/typeUtils.js +0 -17
- package/lib/core/typeUtils.js.map +0 -1
- package/lib/core/typeUtils.mjs +0 -1
- package/lib/core/typeUtils.mjs.map +0 -1
- package/lib/core/utils/HttpResponse/decorators.d.mts +0 -17
- package/lib/core/utils/HttpResponse/decorators.d.ts +0 -17
- package/lib/core/utils/HttpResponse/decorators.js +0 -71
- package/lib/core/utils/HttpResponse/decorators.js.map +0 -1
- package/lib/core/utils/HttpResponse/decorators.mjs +0 -41
- package/lib/core/utils/HttpResponse/decorators.mjs.map +0 -1
- package/lib/core/utils/cookieStore.d.mts +0 -13
- package/lib/core/utils/cookieStore.d.ts +0 -13
- package/lib/core/utils/cookieStore.js +0 -90
- package/lib/core/utils/cookieStore.js.map +0 -1
- package/lib/core/utils/cookieStore.mjs +0 -74
- package/lib/core/utils/cookieStore.mjs.map +0 -1
- package/lib/core/utils/executeHandlers.d.mts +0 -6
- package/lib/core/utils/executeHandlers.d.ts +0 -6
- package/lib/core/utils/executeHandlers.js +0 -51
- package/lib/core/utils/executeHandlers.js.map +0 -1
- package/lib/core/utils/executeHandlers.mjs +0 -31
- package/lib/core/utils/executeHandlers.mjs.map +0 -1
- package/lib/core/utils/handleRequest.d.mts +0 -30
- package/lib/core/utils/handleRequest.d.ts +0 -30
- package/lib/core/utils/handleRequest.js +0 -76
- package/lib/core/utils/handleRequest.js.map +0 -1
- package/lib/core/utils/handleRequest.mjs +0 -58
- package/lib/core/utils/handleRequest.mjs.map +0 -1
- package/lib/core/utils/internal/Disposable.d.mts +0 -7
- package/lib/core/utils/internal/Disposable.d.ts +0 -7
- package/lib/core/utils/internal/Disposable.js +0 -51
- package/lib/core/utils/internal/Disposable.js.map +0 -1
- package/lib/core/utils/internal/Disposable.mjs +0 -31
- package/lib/core/utils/internal/Disposable.mjs.map +0 -1
- package/lib/core/utils/internal/attachSiblingHandlers.d.mts +0 -15
- package/lib/core/utils/internal/attachSiblingHandlers.d.ts +0 -15
- package/lib/core/utils/internal/attachSiblingHandlers.js +0 -44
- package/lib/core/utils/internal/attachSiblingHandlers.js.map +0 -1
- package/lib/core/utils/internal/attachSiblingHandlers.mjs +0 -24
- package/lib/core/utils/internal/attachSiblingHandlers.mjs.map +0 -1
- package/lib/core/utils/internal/checkGlobals.d.mts +0 -3
- package/lib/core/utils/internal/checkGlobals.d.ts +0 -3
- package/lib/core/utils/internal/checkGlobals.js +0 -34
- package/lib/core/utils/internal/checkGlobals.js.map +0 -1
- package/lib/core/utils/internal/checkGlobals.mjs +0 -14
- package/lib/core/utils/internal/checkGlobals.mjs.map +0 -1
- package/lib/core/utils/internal/devUtils.d.mts +0 -28
- package/lib/core/utils/internal/devUtils.d.ts +0 -28
- package/lib/core/utils/internal/devUtils.js +0 -48
- package/lib/core/utils/internal/devUtils.js.map +0 -1
- package/lib/core/utils/internal/devUtils.mjs +0 -28
- package/lib/core/utils/internal/devUtils.mjs.map +0 -1
- package/lib/core/utils/internal/getCallFrame.d.mts +0 -6
- package/lib/core/utils/internal/getCallFrame.d.ts +0 -6
- package/lib/core/utils/internal/getCallFrame.js +0 -41
- package/lib/core/utils/internal/getCallFrame.js.map +0 -1
- package/lib/core/utils/internal/getCallFrame.mjs +0 -21
- package/lib/core/utils/internal/getCallFrame.mjs.map +0 -1
- package/lib/core/utils/internal/hasRefCounted.d.mts +0 -3
- package/lib/core/utils/internal/hasRefCounted.d.ts +0 -3
- package/lib/core/utils/internal/hasRefCounted.js +0 -34
- package/lib/core/utils/internal/hasRefCounted.js.map +0 -1
- package/lib/core/utils/internal/hasRefCounted.mjs +0 -14
- package/lib/core/utils/internal/hasRefCounted.mjs.map +0 -1
- package/lib/core/utils/internal/isHandlerKind.d.mts +0 -19
- package/lib/core/utils/internal/isHandlerKind.d.ts +0 -19
- package/lib/core/utils/internal/isHandlerKind.js +0 -30
- package/lib/core/utils/internal/isHandlerKind.js.map +0 -1
- package/lib/core/utils/internal/isHandlerKind.mjs +0 -10
- package/lib/core/utils/internal/isHandlerKind.mjs.map +0 -1
- package/lib/core/utils/internal/isIterable.d.mts +0 -20
- package/lib/core/utils/internal/isIterable.d.ts +0 -20
- package/lib/core/utils/internal/isIterable.js +0 -30
- package/lib/core/utils/internal/isIterable.js.map +0 -1
- package/lib/core/utils/internal/isIterable.mjs +0 -10
- package/lib/core/utils/internal/isIterable.mjs.map +0 -1
- package/lib/core/utils/internal/isObject.d.mts +0 -6
- package/lib/core/utils/internal/isObject.d.ts +0 -6
- package/lib/core/utils/internal/isObject.js +0 -27
- package/lib/core/utils/internal/isObject.js.map +0 -1
- package/lib/core/utils/internal/isObject.mjs +0 -7
- package/lib/core/utils/internal/isObject.mjs.map +0 -1
- package/lib/core/utils/internal/isStringEqual.d.mts +0 -6
- package/lib/core/utils/internal/isStringEqual.d.ts +0 -6
- package/lib/core/utils/internal/isStringEqual.js +0 -27
- package/lib/core/utils/internal/isStringEqual.js.map +0 -1
- package/lib/core/utils/internal/isStringEqual.mjs +0 -7
- package/lib/core/utils/internal/isStringEqual.mjs.map +0 -1
- package/lib/core/utils/internal/jsonParse.d.mts +0 -7
- package/lib/core/utils/internal/jsonParse.d.ts +0 -7
- package/lib/core/utils/internal/jsonParse.js +0 -31
- package/lib/core/utils/internal/jsonParse.js.map +0 -1
- package/lib/core/utils/internal/jsonParse.mjs +0 -11
- package/lib/core/utils/internal/jsonParse.mjs.map +0 -1
- package/lib/core/utils/internal/mergeRight.d.mts +0 -7
- package/lib/core/utils/internal/mergeRight.d.ts +0 -7
- package/lib/core/utils/internal/mergeRight.js +0 -43
- package/lib/core/utils/internal/mergeRight.js.map +0 -1
- package/lib/core/utils/internal/mergeRight.mjs +0 -23
- package/lib/core/utils/internal/mergeRight.mjs.map +0 -1
- package/lib/core/utils/internal/parseGraphQLRequest.d.mts +0 -6
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +0 -6
- package/lib/core/utils/internal/parseGraphQLRequest.js +0 -146
- package/lib/core/utils/internal/parseGraphQLRequest.js.map +0 -1
- package/lib/core/utils/internal/parseGraphQLRequest.mjs +0 -129
- package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +0 -1
- package/lib/core/utils/internal/parseMultipartData.d.mts +0 -14
- package/lib/core/utils/internal/parseMultipartData.d.ts +0 -14
- package/lib/core/utils/internal/parseMultipartData.js +0 -84
- package/lib/core/utils/internal/parseMultipartData.js.map +0 -1
- package/lib/core/utils/internal/parseMultipartData.mjs +0 -64
- package/lib/core/utils/internal/parseMultipartData.mjs.map +0 -1
- package/lib/core/utils/internal/pipeEvents.d.mts +0 -8
- package/lib/core/utils/internal/pipeEvents.d.ts +0 -8
- package/lib/core/utils/internal/pipeEvents.js +0 -37
- package/lib/core/utils/internal/pipeEvents.js.map +0 -1
- package/lib/core/utils/internal/pipeEvents.mjs +0 -17
- package/lib/core/utils/internal/pipeEvents.mjs.map +0 -1
- package/lib/core/utils/internal/toReadonlyArray.d.mts +0 -6
- package/lib/core/utils/internal/toReadonlyArray.d.ts +0 -6
- package/lib/core/utils/internal/toReadonlyArray.js +0 -29
- package/lib/core/utils/internal/toReadonlyArray.js.map +0 -1
- package/lib/core/utils/internal/toReadonlyArray.mjs +0 -9
- package/lib/core/utils/internal/toReadonlyArray.mjs.map +0 -1
- package/lib/core/utils/internal/tryCatch.d.mts +0 -3
- package/lib/core/utils/internal/tryCatch.d.ts +0 -3
- package/lib/core/utils/internal/tryCatch.js +0 -32
- package/lib/core/utils/internal/tryCatch.js.map +0 -1
- package/lib/core/utils/internal/tryCatch.mjs +0 -12
- package/lib/core/utils/internal/tryCatch.mjs.map +0 -1
- package/lib/core/utils/logging/getStatusCodeColor.d.mts +0 -11
- package/lib/core/utils/logging/getStatusCodeColor.d.ts +0 -11
- package/lib/core/utils/logging/getStatusCodeColor.js +0 -40
- package/lib/core/utils/logging/getStatusCodeColor.js.map +0 -1
- package/lib/core/utils/logging/getStatusCodeColor.mjs +0 -20
- package/lib/core/utils/logging/getStatusCodeColor.mjs.map +0 -1
- package/lib/core/utils/logging/getTimestamp.d.mts +0 -9
- package/lib/core/utils/logging/getTimestamp.d.ts +0 -9
- package/lib/core/utils/logging/getTimestamp.js +0 -32
- package/lib/core/utils/logging/getTimestamp.js.map +0 -1
- package/lib/core/utils/logging/getTimestamp.mjs +0 -12
- package/lib/core/utils/logging/getTimestamp.mjs.map +0 -1
- package/lib/core/utils/logging/serializeRequest.d.mts +0 -12
- package/lib/core/utils/logging/serializeRequest.d.ts +0 -12
- package/lib/core/utils/logging/serializeRequest.js +0 -34
- package/lib/core/utils/logging/serializeRequest.js.map +0 -1
- package/lib/core/utils/logging/serializeRequest.mjs +0 -14
- package/lib/core/utils/logging/serializeRequest.mjs.map +0 -1
- package/lib/core/utils/logging/serializeResponse.d.mts +0 -9
- package/lib/core/utils/logging/serializeResponse.d.ts +0 -9
- package/lib/core/utils/logging/serializeResponse.js +0 -48
- package/lib/core/utils/logging/serializeResponse.js.map +0 -1
- package/lib/core/utils/logging/serializeResponse.mjs +0 -18
- package/lib/core/utils/logging/serializeResponse.mjs.map +0 -1
- package/lib/core/utils/matching/matchRequestUrl.d.mts +0 -20
- package/lib/core/utils/matching/matchRequestUrl.d.ts +0 -20
- package/lib/core/utils/matching/matchRequestUrl.js +0 -55
- package/lib/core/utils/matching/matchRequestUrl.js.map +0 -1
- package/lib/core/utils/matching/matchRequestUrl.mjs +0 -35
- package/lib/core/utils/matching/matchRequestUrl.mjs.map +0 -1
- package/lib/core/utils/matching/normalizePath.d.mts +0 -13
- package/lib/core/utils/matching/normalizePath.d.ts +0 -13
- package/lib/core/utils/matching/normalizePath.js +0 -33
- package/lib/core/utils/matching/normalizePath.js.map +0 -1
- package/lib/core/utils/matching/normalizePath.mjs +0 -13
- package/lib/core/utils/matching/normalizePath.mjs.map +0 -1
- package/lib/core/utils/request/getAllAcceptedMimeTypes.d.mts +0 -14
- package/lib/core/utils/request/getAllAcceptedMimeTypes.d.ts +0 -14
- package/lib/core/utils/request/getAllAcceptedMimeTypes.js +0 -61
- package/lib/core/utils/request/getAllAcceptedMimeTypes.js.map +0 -1
- package/lib/core/utils/request/getAllAcceptedMimeTypes.mjs +0 -41
- package/lib/core/utils/request/getAllAcceptedMimeTypes.mjs.map +0 -1
- package/lib/core/utils/request/getRequestCookies.d.mts +0 -3
- package/lib/core/utils/request/getRequestCookies.d.ts +0 -3
- package/lib/core/utils/request/getRequestCookies.js +0 -79
- package/lib/core/utils/request/getRequestCookies.js.map +0 -1
- package/lib/core/utils/request/getRequestCookies.mjs +0 -62
- package/lib/core/utils/request/getRequestCookies.mjs.map +0 -1
- package/lib/core/utils/request/onUnhandledRequest.d.mts +0 -9
- package/lib/core/utils/request/onUnhandledRequest.d.ts +0 -9
- package/lib/core/utils/request/onUnhandledRequest.js +0 -76
- package/lib/core/utils/request/onUnhandledRequest.js.map +0 -1
- package/lib/core/utils/request/onUnhandledRequest.mjs +0 -56
- package/lib/core/utils/request/onUnhandledRequest.mjs.map +0 -1
- package/lib/core/utils/request/storeResponseCookies.d.mts +0 -3
- package/lib/core/utils/request/storeResponseCookies.d.ts +0 -3
- package/lib/core/utils/request/storeResponseCookies.js +0 -32
- package/lib/core/utils/request/storeResponseCookies.js.map +0 -1
- package/lib/core/utils/request/storeResponseCookies.mjs +0 -12
- package/lib/core/utils/request/storeResponseCookies.mjs.map +0 -1
- package/lib/core/utils/request/toPublicUrl.d.mts +0 -7
- package/lib/core/utils/request/toPublicUrl.d.ts +0 -7
- package/lib/core/utils/request/toPublicUrl.js +0 -31
- package/lib/core/utils/request/toPublicUrl.js.map +0 -1
- package/lib/core/utils/request/toPublicUrl.mjs +0 -11
- package/lib/core/utils/request/toPublicUrl.mjs.map +0 -1
- package/lib/core/utils/toResponseInit.d.mts +0 -3
- package/lib/core/utils/toResponseInit.d.ts +0 -3
- package/lib/core/utils/toResponseInit.js +0 -31
- package/lib/core/utils/toResponseInit.js.map +0 -1
- package/lib/core/utils/toResponseInit.mjs +0 -11
- package/lib/core/utils/toResponseInit.mjs.map +0 -1
- package/lib/core/utils/url/cleanUrl.d.mts +0 -7
- package/lib/core/utils/url/cleanUrl.d.ts +0 -7
- package/lib/core/utils/url/cleanUrl.js +0 -31
- package/lib/core/utils/url/cleanUrl.js.map +0 -1
- package/lib/core/utils/url/cleanUrl.mjs +0 -11
- package/lib/core/utils/url/cleanUrl.mjs.map +0 -1
- package/lib/core/utils/url/getAbsoluteUrl.d.mts +0 -6
- package/lib/core/utils/url/getAbsoluteUrl.d.ts +0 -6
- package/lib/core/utils/url/getAbsoluteUrl.js +0 -38
- package/lib/core/utils/url/getAbsoluteUrl.js.map +0 -1
- package/lib/core/utils/url/getAbsoluteUrl.mjs +0 -18
- package/lib/core/utils/url/getAbsoluteUrl.mjs.map +0 -1
- package/lib/core/utils/url/isAbsoluteUrl.d.mts +0 -6
- package/lib/core/utils/url/isAbsoluteUrl.d.ts +0 -6
- package/lib/core/utils/url/isAbsoluteUrl.js +0 -27
- package/lib/core/utils/url/isAbsoluteUrl.js.map +0 -1
- package/lib/core/utils/url/isAbsoluteUrl.mjs +0 -7
- package/lib/core/utils/url/isAbsoluteUrl.mjs.map +0 -1
- package/lib/core/ws/WebSocketClientManager.d.mts +0 -65
- package/lib/core/ws/WebSocketClientManager.d.ts +0 -65
- package/lib/core/ws/WebSocketClientManager.js +0 -163
- package/lib/core/ws/WebSocketClientManager.js.map +0 -1
- package/lib/core/ws/WebSocketClientManager.mjs +0 -143
- package/lib/core/ws/WebSocketClientManager.mjs.map +0 -1
- package/lib/core/ws/WebSocketClientStore.d.mts +0 -13
- package/lib/core/ws/WebSocketClientStore.d.ts +0 -13
- package/lib/core/ws/WebSocketClientStore.js +0 -26
- package/lib/core/ws/WebSocketClientStore.js.map +0 -1
- package/lib/core/ws/WebSocketClientStore.mjs +0 -6
- package/lib/core/ws/WebSocketClientStore.mjs.map +0 -1
- package/lib/core/ws/WebSocketIndexedDBClientStore.d.mts +0 -14
- package/lib/core/ws/WebSocketIndexedDBClientStore.d.ts +0 -14
- package/lib/core/ws/WebSocketIndexedDBClientStore.js +0 -131
- package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +0 -1
- package/lib/core/ws/WebSocketIndexedDBClientStore.mjs +0 -111
- package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +0 -1
- package/lib/core/ws/WebSocketMemoryClientStore.d.mts +0 -12
- package/lib/core/ws/WebSocketMemoryClientStore.d.ts +0 -12
- package/lib/core/ws/WebSocketMemoryClientStore.js +0 -42
- package/lib/core/ws/WebSocketMemoryClientStore.js.map +0 -1
- package/lib/core/ws/WebSocketMemoryClientStore.mjs +0 -22
- package/lib/core/ws/WebSocketMemoryClientStore.mjs.map +0 -1
- package/lib/core/ws/handleWebSocketEvent.d.mts +0 -20
- package/lib/core/ws/handleWebSocketEvent.d.ts +0 -20
- package/lib/core/ws/handleWebSocketEvent.js +0 -61
- package/lib/core/ws/handleWebSocketEvent.js.map +0 -1
- package/lib/core/ws/handleWebSocketEvent.mjs +0 -43
- package/lib/core/ws/handleWebSocketEvent.mjs.map +0 -1
- package/lib/core/ws/utils/attachWebSocketLogger.d.mts +0 -18
- package/lib/core/ws/utils/attachWebSocketLogger.d.ts +0 -18
- package/lib/core/ws/utils/attachWebSocketLogger.js +0 -228
- package/lib/core/ws/utils/attachWebSocketLogger.js.map +0 -1
- package/lib/core/ws/utils/attachWebSocketLogger.mjs +0 -208
- package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +0 -1
- package/lib/core/ws/utils/getMessageLength.d.mts +0 -11
- package/lib/core/ws/utils/getMessageLength.d.ts +0 -11
- package/lib/core/ws/utils/getMessageLength.js +0 -34
- package/lib/core/ws/utils/getMessageLength.js.map +0 -1
- package/lib/core/ws/utils/getMessageLength.mjs +0 -14
- package/lib/core/ws/utils/getMessageLength.mjs.map +0 -1
- package/lib/core/ws/utils/getPublicData.d.mts +0 -5
- package/lib/core/ws/utils/getPublicData.d.ts +0 -5
- package/lib/core/ws/utils/getPublicData.js +0 -37
- package/lib/core/ws/utils/getPublicData.js.map +0 -1
- package/lib/core/ws/utils/getPublicData.mjs +0 -17
- package/lib/core/ws/utils/getPublicData.mjs.map +0 -1
- package/lib/core/ws/utils/truncateMessage.d.mts +0 -3
- package/lib/core/ws/utils/truncateMessage.d.ts +0 -3
- package/lib/core/ws/utils/truncateMessage.js +0 -31
- package/lib/core/ws/utils/truncateMessage.js.map +0 -1
- package/lib/core/ws/utils/truncateMessage.mjs +0 -11
- package/lib/core/ws/utils/truncateMessage.mjs.map +0 -1
- package/lib/core/ws/webSocketInterceptor.d.mts +0 -5
- package/lib/core/ws/webSocketInterceptor.d.ts +0 -5
- package/lib/core/ws/webSocketInterceptor.js +0 -26
- package/lib/core/ws/webSocketInterceptor.js.map +0 -1
- package/lib/core/ws/webSocketInterceptor.mjs +0 -6
- package/lib/core/ws/webSocketInterceptor.mjs.map +0 -1
- package/lib/core/ws.d.mts +0 -88
- package/lib/core/ws.d.ts +0 -88
- package/lib/core/ws.js +0 -94
- package/lib/core/ws.js.map +0 -1
- package/lib/core/ws.mjs +0 -80
- package/lib/core/ws.mjs.map +0 -1
- package/lib/native/index.d.mts +0 -66
- package/lib/native/index.d.ts +0 -66
- package/lib/native/index.js +0 -88
- package/lib/native/index.js.map +0 -1
- package/lib/native/index.mjs +0 -67
- package/lib/native/index.mjs.map +0 -1
- package/lib/node/index.d.mts +0 -113
- package/lib/node/index.mjs +0 -185
- package/lib/node/index.mjs.map +0 -1
- package/lib/shims/cookie.d.mts +0 -7
- package/lib/shims/cookie.d.ts +0 -7
- package/lib/shims/cookie.js +0 -294
- package/lib/shims/cookie.mjs +0 -286
- package/lib/shims/statuses.d.mts +0 -6
- package/lib/shims/statuses.d.ts +0 -6
- package/lib/shims/statuses.js +0 -195
- package/lib/shims/statuses.mjs +0 -187
- package/native/package.json +0 -30
- package/node/package.json +0 -33
- package/src/browser/utils/pruneGetRequestBody.test.ts +0 -51
- package/src/browser/utils/pruneGetRequestBody.ts +0 -21
- package/src/core/experimental/compat.ts +0 -50
- package/src/core/experimental/setup-api.ts +0 -55
- package/src/core/graphql.test.ts +0 -11
- package/src/core/graphql.ts +0 -136
- package/src/core/passthrough.test.ts +0 -11
- package/src/core/passthrough.ts +0 -25
- package/src/core/sharedOptions.ts +0 -71
- package/src/core/typeUtils.ts +0 -26
- package/src/core/utils/handleRequest.test.ts +0 -574
- package/src/core/utils/handleRequest.ts +0 -117
- package/src/core/utils/internal/checkGlobals.ts +0 -17
- package/src/core/utils/internal/isHandlerKind.test.ts +0 -62
- package/src/core/utils/internal/isHandlerKind.ts +0 -17
- package/src/core/utils/internal/isIterable.ts +0 -32
- package/src/core/utils/internal/mergeRight.test.ts +0 -43
- package/src/core/utils/internal/mergeRight.ts +0 -30
- package/src/core/utils/internal/pipeEvents.test.ts +0 -14
- package/src/core/utils/internal/pipeEvents.ts +0 -26
- package/src/core/utils/internal/tryCatch.test.ts +0 -29
- package/src/core/utils/internal/tryCatch.ts +0 -11
- package/src/core/utils/matching/matchRequestUrl.test.ts +0 -267
- package/src/core/utils/matching/matchRequestUrl.ts +0 -77
- package/src/core/utils/request/getRequestCookies.ts +0 -88
- package/src/core/utils/request/onUnhandledRequest.node.test.ts +0 -62
- package/src/core/utils/request/onUnhandledRequest.test.ts +0 -226
- package/src/core/utils/request/onUnhandledRequest.ts +0 -81
- package/src/core/utils/request/storeResponseCookies.ts +0 -15
- package/src/core/utils/url/cleanUrl.test.ts +0 -22
- package/src/core/utils/url/cleanUrl.ts +0 -16
- package/src/core/utils/url/isAbsoluteUrl.test.ts +0 -32
- package/src/core/ws/handleWebSocketEvent.ts +0 -68
- package/src/core/ws/utils/getPublicData.ts +0 -18
- package/src/core/ws/webSocketInterceptor.ts +0 -3
- package/src/native/index.ts +0 -44
- package/src/package.json +0 -3
- package/src/shims/cookie.ts +0 -7
- package/src/shims/statuses.ts +0 -6
- /package/src/browser/utils/{getAbsoluteWorkerUrl.ts → get-absolute-worker-url.ts} +0 -0
- /package/src/core/utils/internal/{devUtils.ts → dev-utils.ts} +0 -0
- /package/src/core/utils/internal/{isObject.ts → is-object.ts} +0 -0
- /package/src/core/utils/internal/{isStringEqual.ts → is-string-equal.ts} +0 -0
- /package/src/core/utils/internal/{jsonParse.ts → json-parse.ts} +0 -0
- /package/src/core/utils/internal/{toReadonlyArray.ts → to-readonly-array.ts} +0 -0
- /package/src/core/utils/logging/{getStatusCodeColor.ts → get-status-code-color.ts} +0 -0
- /package/src/core/utils/logging/{getTimestamp.ts → get-timestamp.ts} +0 -0
- /package/src/core/utils/logging/{serializeRequest.ts → serialize-request.ts} +0 -0
- /package/src/core/utils/request/{getAllAcceptedMimeTypes.ts → get-all-accepted-mime-types.ts} +0 -0
- /package/src/core/utils/request/{toPublicUrl.ts → to-public-url.ts} +0 -0
- /package/src/core/utils/{toResponseInit.ts → to-response-init.ts} +0 -0
- /package/src/core/utils/url/{isAbsoluteUrl.ts → is-absolute-url.ts} +0 -0
- /package/src/{core → http}/http.test.ts +0 -0
- /package/src/{core/ws/utils/truncateMessage.ts → ws/utils/truncate-message.ts} +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/http/symbols.ts
|
|
2
|
+
/**
|
|
3
|
+
* Symbols of the `msw/http` module.
|
|
4
|
+
*
|
|
5
|
+
* @note A standalone module so consumers interested only in a symbol
|
|
6
|
+
* (e.g. `msw/graphql`) don't pull the modules that use it into
|
|
7
|
+
* their graph.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Marks a response whose `Content-Type` header was inferred by the
|
|
11
|
+
* library instead of being set explicitly by the developer.
|
|
12
|
+
*/
|
|
13
|
+
const kDefaultContentType = Symbol.for("kDefaultContentType");
|
|
14
|
+
/**
|
|
15
|
+
* Associates the mocked response body type with the response instance
|
|
16
|
+
* for stricter typing of the response resolvers.
|
|
17
|
+
*/
|
|
18
|
+
const bodyType = Symbol("bodyType");
|
|
19
|
+
//#endregion
|
|
20
|
+
export { kDefaultContentType as n, bodyType as t };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=symbols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.js","names":[],"sources":["../../src/http/symbols.ts"],"sourcesContent":["/**\n * Symbols of the `msw/http` module.\n *\n * @note A standalone module so consumers interested only in a symbol\n * (e.g. `msw/graphql`) don't pull the modules that use it into\n * their graph.\n */\n\n/**\n * Marks a response whose `Content-Type` header was inferred by the\n * library instead of being set explicitly by the developer.\n */\nexport const kDefaultContentType = Symbol.for('kDefaultContentType')\n\n/**\n * Associates the mocked response body type with the response instance\n * for stricter typing of the response resolvers.\n */\nexport const bodyType: unique symbol = Symbol('bodyType')\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,sBAAsB,OAAO,IAAI,qBAAqB;;;;;AAMnE,MAAa,WAA0B,OAAO,UAAU"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { a as matchRequestUrl } from "./cookie-store.js";
|
|
2
|
+
import { t as http } from "./http.js";
|
|
3
|
+
import { FetchResponse, resolveWebSocketUrl } from "@mswjs/interceptors";
|
|
4
|
+
//#region src/ws/websocket-upgrade.ts
|
|
5
|
+
const WEBSOCKET_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
6
|
+
/**
|
|
7
|
+
* Response resolver for the `upgrade` requests to the WebSocket protocol.
|
|
8
|
+
* This requires a WebSocket handler to be present to fire.
|
|
9
|
+
* @note This only affects Node.js as the `upgrade` request header is
|
|
10
|
+
* forbidden and cannot be read in the browser. Consider using the
|
|
11
|
+
* `WebSocket` API for establishing WebSocket connections in the browser.
|
|
12
|
+
*/
|
|
13
|
+
async function webSocketUpgrade({ request }) {
|
|
14
|
+
const key = request.headers.get("sec-websocket-key");
|
|
15
|
+
if (!key) return;
|
|
16
|
+
const keyBytes = new TextEncoder().encode(key + WEBSOCKET_GUID);
|
|
17
|
+
const digest = await crypto.subtle.digest("SHA-1", keyBytes);
|
|
18
|
+
const acceptValue = btoa(String.fromCharCode(...new Uint8Array(digest)));
|
|
19
|
+
const requestedProtocols = request.headers.get("sec-websocket-protocol")?.split(",").map((protocol) => protocol.trim());
|
|
20
|
+
new WebSocket(resolveWebSocketUrl(request.url), requestedProtocols);
|
|
21
|
+
const headers = new Headers({
|
|
22
|
+
upgrade: "websocket",
|
|
23
|
+
connection: "upgrade",
|
|
24
|
+
"sec-websocket-accept": acceptValue
|
|
25
|
+
});
|
|
26
|
+
if (requestedProtocols && requestedProtocols.length > 0) headers.set("sec-websocket-protocol", requestedProtocols[0]);
|
|
27
|
+
return new FetchResponse(null, {
|
|
28
|
+
status: 101,
|
|
29
|
+
headers
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a request handler that responds to WebSocket upgrade
|
|
34
|
+
* requests whose URL matches the given path.
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
function createWebSocketUpgradeHandler(url, resolver) {
|
|
39
|
+
return http.get(({ request }) => {
|
|
40
|
+
return request.headers.get("upgrade")?.toLowerCase() === "websocket" && matchRequestUrl(new URL(resolveWebSocketUrl(request.url)), url).matches;
|
|
41
|
+
}, resolver);
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { webSocketUpgrade as n, createWebSocketUpgradeHandler as t };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=websocket-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-upgrade.js","names":[],"sources":["../../src/ws/websocket-upgrade.ts"],"sourcesContent":["import { FetchResponse, resolveWebSocketUrl } from '@mswjs/interceptors'\nimport { http } from '#http/http'\nimport {\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '#core/utils/matching/match-request-url'\n\nconst WEBSOCKET_GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'\n\nexport interface WebSocketUpgradeRequestInfo {\n requestId: string\n request: Request\n params: PathParams\n}\n\n/**\n * Response resolver for the `upgrade` requests to the WebSocket protocol.\n * This requires a WebSocket handler to be present to fire.\n * @note This only affects Node.js as the `upgrade` request header is\n * forbidden and cannot be read in the browser. Consider using the\n * `WebSocket` API for establishing WebSocket connections in the browser.\n */\nexport async function webSocketUpgrade({\n request,\n}: WebSocketUpgradeRequestInfo): Promise<Response | undefined> {\n const key = request.headers.get('sec-websocket-key')\n\n if (!key) {\n return\n }\n\n const keyBytes = new TextEncoder().encode(key + WEBSOCKET_GUID)\n const digest = await crypto.subtle.digest('SHA-1', keyBytes)\n const acceptValue = btoa(String.fromCharCode(...new Uint8Array(digest)))\n\n // Forward the protocols requested by the client to the intercepted\n // connection so WebSocket handlers can match on them.\n const requestedProtocols = request.headers\n .get('sec-websocket-protocol')\n ?.split(',')\n .map((protocol) => protocol.trim())\n\n new WebSocket(resolveWebSocketUrl(request.url), requestedProtocols)\n\n const headers = new Headers({\n upgrade: 'websocket',\n connection: 'upgrade',\n 'sec-websocket-accept': acceptValue,\n })\n\n // Confirm the first requested protocol as the accepted one.\n // Clients that requested protocols are entitled to fail the\n // connection if the server confirms none (RFC 6455, section 4.1).\n if (requestedProtocols && requestedProtocols.length > 0) {\n headers.set('sec-websocket-protocol', requestedProtocols[0])\n }\n\n return new FetchResponse(null, {\n status: 101,\n headers,\n })\n}\n\n/**\n * Creates a request handler that responds to WebSocket upgrade\n * requests whose URL matches the given path.\n *\n * @internal\n */\nexport function createWebSocketUpgradeHandler(\n url: Path,\n resolver: (\n info: WebSocketUpgradeRequestInfo,\n ) => Promise<Response | undefined> | Response | undefined,\n) {\n return http.get(({ request }) => {\n return (\n request.headers.get('upgrade')?.toLowerCase() === 'websocket' &&\n matchRequestUrl(new URL(resolveWebSocketUrl(request.url)), url).matches\n )\n }, resolver)\n}\n"],"mappings":";;;;AAQA,MAAM,iBAAiB;;;;;;;;AAevB,eAAsB,iBAAiB,EACrC,WAC6D;CAC7D,MAAM,MAAM,QAAQ,QAAQ,IAAI,mBAAmB;CAEnD,IAAI,CAAC,KACH;CAGF,MAAM,WAAW,IAAI,YAAY,CAAC,CAAC,OAAO,MAAM,cAAc;CAC9D,MAAM,SAAS,MAAM,OAAO,OAAO,OAAO,SAAS,QAAQ;CAC3D,MAAM,cAAc,KAAK,OAAO,aAAa,GAAG,IAAI,WAAW,MAAM,CAAC,CAAC;CAIvE,MAAM,qBAAqB,QAAQ,QAChC,IAAI,wBAAwB,CAAC,EAC5B,MAAM,GAAG,CAAC,CACX,KAAK,aAAa,SAAS,KAAK,CAAC;CAEpC,IAAI,UAAU,oBAAoB,QAAQ,GAAG,GAAG,kBAAkB;CAElE,MAAM,UAAU,IAAI,QAAQ;EAC1B,SAAS;EACT,YAAY;EACZ,wBAAwB;CAC1B,CAAC;CAKD,IAAI,sBAAsB,mBAAmB,SAAS,GACpD,QAAQ,IAAI,0BAA0B,mBAAmB,EAAE;CAG7D,OAAO,IAAI,cAAc,MAAM;EAC7B,QAAQ;EACR;CACF,CAAC;AACH;;;;;;;AAQA,SAAgB,8BACd,KACA,UAGA;CACA,OAAO,KAAK,KAAK,EAAE,cAAc;EAC/B,OACE,QAAQ,QAAQ,IAAI,SAAS,CAAC,EAAE,YAAY,MAAM,eAClD,gBAAgB,IAAI,IAAI,oBAAoB,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;CAEpE,GAAG,QAAQ;AACb"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { b as UnionToIntersection } from "./request-handler.js";
|
|
2
|
+
import { c as WebSocketHandler, o as AnyWebSocketExtension, u as WebSocketHandlerEventMap } from "./handlers-controller.js";
|
|
3
|
+
import { n as Path, r as PathParams } from "./match-request-url.js";
|
|
4
|
+
import { EventMap } from "rettime";
|
|
5
|
+
import { WebSocketClientHandle, WebSocketData as WebSocketData$1, WebSocketExtension, WebSocketExtensionApi, WebSocketExtensionMessage } from "@mswjs/interceptors/WebSocket";
|
|
6
|
+
//#region src/ws/ws.d.ts
|
|
7
|
+
type WebSocketEventListener<EventType extends keyof WebSocketHandlerEventMap, Extension extends AnyWebSocketExtension = WebSocketExtension> = EventMap.Listener<WebSocketHandlerEventMap<Extension>, EventType>;
|
|
8
|
+
type WebSocketExtensions = ReadonlyArray<AnyWebSocketExtension>;
|
|
9
|
+
/**
|
|
10
|
+
* The messages and the API of each extension, boxed one extension at a
|
|
11
|
+
* time. Intersecting the boxes intersects the values of different
|
|
12
|
+
* extensions only, so a value that is itself a union (e.g. a message
|
|
13
|
+
* union) stays intact.
|
|
14
|
+
*/
|
|
15
|
+
type BoxedExtension<Extension> = Extension extends unknown ? {
|
|
16
|
+
message: WebSocketExtensionMessage<Extension>;
|
|
17
|
+
api: WebSocketExtensionApi<Extension>;
|
|
18
|
+
} : never;
|
|
19
|
+
type MergedExtension<Extension, Fallback extends {
|
|
20
|
+
message: unknown;
|
|
21
|
+
api: unknown;
|
|
22
|
+
}> = [Extension] extends [never] ? Fallback : UnionToIntersection<BoxedExtension<Extension>>;
|
|
23
|
+
/**
|
|
24
|
+
* The extensions of a link merged into a single extension:
|
|
25
|
+
* the connections speak the messages of every extension, and the
|
|
26
|
+
* connection event carries the APIs of every extension. A link
|
|
27
|
+
* without extensions speaks raw WebSocket data.
|
|
28
|
+
*/
|
|
29
|
+
type WebSocketLinkExtension<Extensions extends WebSocketExtensions> = MergedExtension<Extensions[number], {
|
|
30
|
+
message: WebSocketData$1;
|
|
31
|
+
api: {};
|
|
32
|
+
}> extends (infer Merged extends {
|
|
33
|
+
message: unknown;
|
|
34
|
+
api: unknown;
|
|
35
|
+
}) ? WebSocketExtension<Merged['message'], Merged['api']> : never;
|
|
36
|
+
interface WebSocketLinkOptions<Extensions extends WebSocketExtensions = []> {
|
|
37
|
+
/**
|
|
38
|
+
* Extensions applied to every connection intercepted by this link,
|
|
39
|
+
* left to right. Encoding and decoding happen behind the scenes:
|
|
40
|
+
* `client.send()`, `server.send()`, `broadcast()`, and the `message`
|
|
41
|
+
* events all operate on the extensions' messages, and each extension's
|
|
42
|
+
* own API is exposed on the connection event.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* const chat = ws.link('wss://chat.example.com', { extensions: [new SocketIo()] })
|
|
46
|
+
* chat.addEventListener('connection', ({ client, rooms }) => {
|
|
47
|
+
* client.send({ event: 'greeting', args: ['hello'] })
|
|
48
|
+
* })
|
|
49
|
+
*/
|
|
50
|
+
extensions?: Extensions;
|
|
51
|
+
}
|
|
52
|
+
type WebSocketLink<Extension extends AnyWebSocketExtension = WebSocketExtension> = {
|
|
53
|
+
/**
|
|
54
|
+
* A set of all WebSocket clients connected
|
|
55
|
+
* to this link.
|
|
56
|
+
*
|
|
57
|
+
* @see {@link https://mswjs.io/docs/api/ws#clients `clients` API reference}
|
|
58
|
+
*/
|
|
59
|
+
clients: Set<WebSocketClientHandle<WebSocketExtensionMessage<Extension>>>;
|
|
60
|
+
/**
|
|
61
|
+
* Adds an event listener to this WebSocket link.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* const chat = ws.link('wss://chat.example.com')
|
|
65
|
+
* chat.addEventListener('connection', listener)
|
|
66
|
+
*
|
|
67
|
+
* @see {@link https://mswjs.io/docs/api/ws#onevent-listener `on()` API reference}
|
|
68
|
+
*/
|
|
69
|
+
addEventListener: <EventType extends keyof WebSocketHandlerEventMap>(event: EventType, listener: WebSocketEventListener<EventType, Extension>) => WebSocketHandler<Extension>;
|
|
70
|
+
/**
|
|
71
|
+
* Broadcasts the given data to all WebSocket clients.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* const service = ws.link('wss://example.com')
|
|
75
|
+
* service.addEventListener('connection', () => {
|
|
76
|
+
* service.broadcast('hello, everyone!')
|
|
77
|
+
* })
|
|
78
|
+
*
|
|
79
|
+
* @see {@link https://mswjs.io/docs/api/ws#broadcastdata `broadcast()` API reference}
|
|
80
|
+
*/
|
|
81
|
+
broadcast: (data: WebSocketExtensionMessage<Extension>) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Broadcasts the given data to all WebSocket clients
|
|
84
|
+
* except the ones provided in the `clients` argument.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* const service = ws.link('wss://example.com')
|
|
88
|
+
* service.addEventListener('connection', ({ client }) => {
|
|
89
|
+
* service.broadcastExcept(client, 'hi, the rest of you!')
|
|
90
|
+
* })
|
|
91
|
+
*
|
|
92
|
+
* @see {@link https://mswjs.io/docs/api/ws#broadcastexceptclients-data `broadcast()` API reference}
|
|
93
|
+
*/
|
|
94
|
+
broadcastExcept: (clients: WebSocketClientHandle<WebSocketExtensionMessage<Extension>> | Array<WebSocketClientHandle<WebSocketExtensionMessage<Extension>>>, data: WebSocketExtensionMessage<Extension>) => void;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Intercepts outgoing WebSocket connections to the given URL.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* const chat = ws.link('wss://chat.example.com')
|
|
101
|
+
* chat.addEventListener('connection', ({ client }) => {
|
|
102
|
+
* client.send('hello from server!')
|
|
103
|
+
* })
|
|
104
|
+
*/
|
|
105
|
+
declare function createWebSocketLinkHandler<const Extensions extends WebSocketExtensions = []>(url: Path, options?: WebSocketLinkOptions<Extensions>): WebSocketLink<WebSocketLinkExtension<Extensions>>;
|
|
106
|
+
interface WebSocketNamespace {
|
|
107
|
+
link: typeof createWebSocketLinkHandler;
|
|
108
|
+
/**
|
|
109
|
+
* Request handler for the `upgrade` requests to the WebSocket protocol.
|
|
110
|
+
* This requires a WebSocket handler to be present to fire.
|
|
111
|
+
* @note This only affects Node.js as the `upgrade` request header is
|
|
112
|
+
* forbidden and cannot be read in the browser. Consider using the
|
|
113
|
+
* `WebSocket` API for establishing WebSocket connections in the browser.
|
|
114
|
+
*/
|
|
115
|
+
onUpgrade: (info: {
|
|
116
|
+
requestId: string;
|
|
117
|
+
request: Request;
|
|
118
|
+
params: PathParams;
|
|
119
|
+
}) => Promise<Response | undefined> | Response | undefined;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A namespace to intercept and mock WebSocket connections.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* const chat = ws.link('wss://chat.example.com')
|
|
126
|
+
*
|
|
127
|
+
* @see {@link https://mswjs.io/docs/api/ws `ws` API reference}
|
|
128
|
+
* @see {@link https://mswjs.io/docs/basics/handling-websocket-events Handling WebSocket events}
|
|
129
|
+
*/
|
|
130
|
+
declare const ws: WebSocketNamespace;
|
|
131
|
+
//#endregion
|
|
132
|
+
export { WebSocketLinkOptions as a, WebSocketLinkExtension as i, WebSocketEventListener as n, ws as o, WebSocketLink as r, WebSocketData$1 as t };
|
|
133
|
+
//# sourceMappingURL=ws.d.ts.map
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { i as isPath } from "./cookie-store.js";
|
|
2
|
+
import { a as WebSocketHandler, c as kEmitter, t as attachSiblingHandlers } from "./attach-sibling-handlers.js";
|
|
3
|
+
import { t as hasRefCounted } from "./has-ref-counted.js";
|
|
4
|
+
import { n as webSocketUpgrade, t as createWebSocketUpgradeHandler } from "./websocket-upgrade.js";
|
|
5
|
+
import { invariant } from "outvariant";
|
|
6
|
+
//#region src/ws/websocket-memory-client-store.ts
|
|
7
|
+
var WebSocketMemoryClientStore = class {
|
|
8
|
+
store;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.store = /* @__PURE__ */ new Map();
|
|
11
|
+
}
|
|
12
|
+
async add(client) {
|
|
13
|
+
this.store.set(client.id, {
|
|
14
|
+
id: client.id,
|
|
15
|
+
url: client.url.href
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
getAll() {
|
|
19
|
+
return Promise.resolve(Array.from(this.store.values()));
|
|
20
|
+
}
|
|
21
|
+
async deleteMany(clientIds) {
|
|
22
|
+
for (const clientId of clientIds) this.store.delete(clientId);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/ws/websocket-indexeddb-client-store.ts
|
|
27
|
+
const DB_NAME = "msw-websocket-clients";
|
|
28
|
+
const DB_STORE_NAME = "clients";
|
|
29
|
+
var WebSocketIndexedDBClientStore = class {
|
|
30
|
+
db;
|
|
31
|
+
constructor() {
|
|
32
|
+
this.db = this.createDatabase();
|
|
33
|
+
}
|
|
34
|
+
async add(client) {
|
|
35
|
+
const promise = Promise.withResolvers();
|
|
36
|
+
/**
|
|
37
|
+
* @note Use `.put()` instead of `.add()` to allow setting clients
|
|
38
|
+
* that already exist in the database. This can happen if a single page
|
|
39
|
+
* has multiple event handlers. Each handler will receive the "connection"
|
|
40
|
+
* event in parallel, and try to set that WebSocket client in the database.
|
|
41
|
+
*/
|
|
42
|
+
const request = (await this.getStore()).put({
|
|
43
|
+
id: client.id,
|
|
44
|
+
url: client.url.href
|
|
45
|
+
});
|
|
46
|
+
request.onsuccess = () => {
|
|
47
|
+
promise.resolve();
|
|
48
|
+
};
|
|
49
|
+
request.onerror = () => {
|
|
50
|
+
console.error(request.error);
|
|
51
|
+
promise.reject(/* @__PURE__ */ new Error(`Failed to add WebSocket client "${client.id}". There is likely an additional output above.`));
|
|
52
|
+
};
|
|
53
|
+
return promise.promise;
|
|
54
|
+
}
|
|
55
|
+
async getAll() {
|
|
56
|
+
const promise = Promise.withResolvers();
|
|
57
|
+
const request = (await this.getStore()).getAll();
|
|
58
|
+
request.onsuccess = () => {
|
|
59
|
+
promise.resolve(request.result);
|
|
60
|
+
};
|
|
61
|
+
request.onerror = () => {
|
|
62
|
+
console.error(request.error);
|
|
63
|
+
promise.reject(/* @__PURE__ */ new Error(`Failed to get all WebSocket clients. There is likely an additional output above.`));
|
|
64
|
+
};
|
|
65
|
+
return promise.promise;
|
|
66
|
+
}
|
|
67
|
+
async deleteMany(clientIds) {
|
|
68
|
+
const promise = Promise.withResolvers();
|
|
69
|
+
const store = await this.getStore();
|
|
70
|
+
for (const clientId of clientIds) store.delete(clientId);
|
|
71
|
+
store.transaction.oncomplete = () => {
|
|
72
|
+
promise.resolve();
|
|
73
|
+
};
|
|
74
|
+
store.transaction.onerror = () => {
|
|
75
|
+
console.error(store.transaction.error);
|
|
76
|
+
promise.reject(/* @__PURE__ */ new Error(`Failed to delete WebSocket clients [${clientIds.join(", ")}]. There is likely an additional output above.`));
|
|
77
|
+
};
|
|
78
|
+
return promise.promise;
|
|
79
|
+
}
|
|
80
|
+
async createDatabase() {
|
|
81
|
+
const promise = Promise.withResolvers();
|
|
82
|
+
const request = indexedDB.open(DB_NAME, 1);
|
|
83
|
+
request.onsuccess = ({ currentTarget }) => {
|
|
84
|
+
const db = Reflect.get(currentTarget, "result");
|
|
85
|
+
if (db.objectStoreNames.contains(DB_STORE_NAME)) return promise.resolve(db);
|
|
86
|
+
};
|
|
87
|
+
request.onupgradeneeded = async ({ currentTarget }) => {
|
|
88
|
+
const db = Reflect.get(currentTarget, "result");
|
|
89
|
+
if (db.objectStoreNames.contains(DB_STORE_NAME)) return;
|
|
90
|
+
const store = db.createObjectStore(DB_STORE_NAME, { keyPath: "id" });
|
|
91
|
+
store.transaction.oncomplete = () => {
|
|
92
|
+
promise.resolve(db);
|
|
93
|
+
};
|
|
94
|
+
store.transaction.onerror = () => {
|
|
95
|
+
console.error(store.transaction.error);
|
|
96
|
+
promise.reject(/* @__PURE__ */ new Error("Failed to create WebSocket client store. There is likely an additional output above."));
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
request.onerror = () => {
|
|
100
|
+
console.error(request.error);
|
|
101
|
+
promise.reject(/* @__PURE__ */ new Error("Failed to open an IndexedDB database. There is likely an additional output above."));
|
|
102
|
+
};
|
|
103
|
+
return promise.promise;
|
|
104
|
+
}
|
|
105
|
+
async getStore() {
|
|
106
|
+
return (await this.db).transaction(DB_STORE_NAME, "readwrite").objectStore(DB_STORE_NAME);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/ws/websocket-client-manager.ts
|
|
111
|
+
/**
|
|
112
|
+
* A manager responsible for accumulating WebSocket client
|
|
113
|
+
* connections across different browser runtimes.
|
|
114
|
+
*/
|
|
115
|
+
var WebSocketClientManager = class {
|
|
116
|
+
channel;
|
|
117
|
+
store;
|
|
118
|
+
runtimeClients;
|
|
119
|
+
allClients;
|
|
120
|
+
constructor(channel) {
|
|
121
|
+
this.channel = channel;
|
|
122
|
+
this.store = typeof indexedDB !== "undefined" ? new WebSocketIndexedDBClientStore() : new WebSocketMemoryClientStore();
|
|
123
|
+
this.runtimeClients = /* @__PURE__ */ new Map();
|
|
124
|
+
this.allClients = /* @__PURE__ */ new Set();
|
|
125
|
+
this.channel.addEventListener("message", (message) => {
|
|
126
|
+
if (message.data?.type === "db:update") this.flushDatabaseToMemory();
|
|
127
|
+
});
|
|
128
|
+
if (typeof window !== "undefined") window.addEventListener("message", async (message) => {
|
|
129
|
+
if (message.data?.type === "msw/worker:stop") await this.removeRuntimeClients();
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async flushDatabaseToMemory() {
|
|
133
|
+
const storedClients = await this.store.getAll();
|
|
134
|
+
this.allClients = new Set(storedClients.map((client) => {
|
|
135
|
+
const runtimeClient = this.runtimeClients.get(client.id);
|
|
136
|
+
/**
|
|
137
|
+
* @note For clients originating in this runtime, use their
|
|
138
|
+
* direct references. No need to wrap them in a remote connection.
|
|
139
|
+
*/
|
|
140
|
+
if (runtimeClient) return runtimeClient;
|
|
141
|
+
return new WebSocketRemoteClientConnection(client.id, new URL(client.url), this.channel);
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
async removeRuntimeClients() {
|
|
145
|
+
await this.store.deleteMany(Array.from(this.runtimeClients.keys()));
|
|
146
|
+
this.runtimeClients.clear();
|
|
147
|
+
await this.flushDatabaseToMemory();
|
|
148
|
+
this.notifyOthersAboutDatabaseUpdate();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* All active WebSocket client connections.
|
|
152
|
+
*/
|
|
153
|
+
get clients() {
|
|
154
|
+
return this.allClients;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Notify other runtimes about the database update
|
|
158
|
+
* using the shared `BroadcastChannel` instance.
|
|
159
|
+
*/
|
|
160
|
+
notifyOthersAboutDatabaseUpdate() {
|
|
161
|
+
this.channel.postMessage({ type: "db:update" });
|
|
162
|
+
}
|
|
163
|
+
async addClient(client) {
|
|
164
|
+
await this.store.add(client);
|
|
165
|
+
await this.flushDatabaseToMemory();
|
|
166
|
+
this.notifyOthersAboutDatabaseUpdate();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Adds the given `WebSocket` client connection to the set
|
|
170
|
+
* of all connections. The given connection is always the complete
|
|
171
|
+
* connection object because `addConnection()` is called only
|
|
172
|
+
* for the opened connections in the same runtime.
|
|
173
|
+
*/
|
|
174
|
+
async addConnection(client) {
|
|
175
|
+
this.runtimeClients.set(client.id, client);
|
|
176
|
+
await this.addClient(client);
|
|
177
|
+
const handleExtraneousMessage = (message) => {
|
|
178
|
+
const { type, payload } = message.data;
|
|
179
|
+
if (typeof payload === "object" && "clientId" in payload && payload.clientId !== client.id) return;
|
|
180
|
+
switch (type) {
|
|
181
|
+
case "extraneous:send":
|
|
182
|
+
client.send(payload.data);
|
|
183
|
+
break;
|
|
184
|
+
case "extraneous:close": client.close(payload.code, payload.reason);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const abortController = new AbortController();
|
|
188
|
+
this.channel.addEventListener("message", handleExtraneousMessage, { signal: abortController.signal });
|
|
189
|
+
client.addEventListener("close", () => abortController.abort(), { once: true });
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* A wrapper class to operate with WebSocket client connections
|
|
194
|
+
* from other runtimes. This class maintains 1-1 public API
|
|
195
|
+
* compatibility to the `WebSocketClientConnection` but relies
|
|
196
|
+
* on the given `BroadcastChannel` to communicate instructions
|
|
197
|
+
* with the client connections from other runtimes.
|
|
198
|
+
*/
|
|
199
|
+
var WebSocketRemoteClientConnection = class {
|
|
200
|
+
id;
|
|
201
|
+
url;
|
|
202
|
+
channel;
|
|
203
|
+
constructor(id, url, channel) {
|
|
204
|
+
this.id = id;
|
|
205
|
+
this.url = url;
|
|
206
|
+
this.channel = channel;
|
|
207
|
+
}
|
|
208
|
+
send(data) {
|
|
209
|
+
this.channel.postMessage({
|
|
210
|
+
type: "extraneous:send",
|
|
211
|
+
payload: {
|
|
212
|
+
clientId: this.id,
|
|
213
|
+
data
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
close(code, reason) {
|
|
218
|
+
this.channel.postMessage({
|
|
219
|
+
type: "extraneous:close",
|
|
220
|
+
payload: {
|
|
221
|
+
clientId: this.id,
|
|
222
|
+
code,
|
|
223
|
+
reason
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
addEventListener(_type, _listener, _options) {
|
|
228
|
+
throw new Error("WebSocketRemoteClientConnection.addEventListener is not supported");
|
|
229
|
+
}
|
|
230
|
+
removeEventListener(_event, _listener, _options) {
|
|
231
|
+
throw new Error("WebSocketRemoteClientConnection.removeEventListener is not supported");
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
//#endregion
|
|
235
|
+
//#region src/ws/ws.ts
|
|
236
|
+
const webSocketChannel = new BroadcastChannel("msw:websocket-client-manager");
|
|
237
|
+
if (hasRefCounted(webSocketChannel)) webSocketChannel.unref();
|
|
238
|
+
/**
|
|
239
|
+
* Intercepts outgoing WebSocket connections to the given URL.
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* const chat = ws.link('wss://chat.example.com')
|
|
243
|
+
* chat.addEventListener('connection', ({ client }) => {
|
|
244
|
+
* client.send('hello from server!')
|
|
245
|
+
* })
|
|
246
|
+
*/
|
|
247
|
+
function createWebSocketLinkHandler(url, options) {
|
|
248
|
+
invariant(url, "Expected a WebSocket server URL but got undefined");
|
|
249
|
+
invariant(isPath(url), "Expected a WebSocket server URL to be a valid path but got %s", typeof url);
|
|
250
|
+
const clientManager = new WebSocketClientManager(webSocketChannel);
|
|
251
|
+
const upgradeHandler = createWebSocketUpgradeHandler(url, (info) => {
|
|
252
|
+
return ws.onUpgrade(info);
|
|
253
|
+
});
|
|
254
|
+
return {
|
|
255
|
+
get clients() {
|
|
256
|
+
return clientManager.clients;
|
|
257
|
+
},
|
|
258
|
+
addEventListener(event, listener) {
|
|
259
|
+
const webSocketHandler = new WebSocketHandler(url, { extensions: options?.extensions });
|
|
260
|
+
webSocketHandler[kEmitter].on("connection", async ({ client }) => {
|
|
261
|
+
await clientManager.addConnection(client);
|
|
262
|
+
});
|
|
263
|
+
webSocketHandler[kEmitter].on(event, listener);
|
|
264
|
+
return attachSiblingHandlers(webSocketHandler, [upgradeHandler]);
|
|
265
|
+
},
|
|
266
|
+
broadcast(data) {
|
|
267
|
+
this.broadcastExcept([], data);
|
|
268
|
+
},
|
|
269
|
+
broadcastExcept(clients, data) {
|
|
270
|
+
const ignoreClients = Array.prototype.concat(clients).map((client) => client.id);
|
|
271
|
+
clientManager.clients.forEach((otherClient) => {
|
|
272
|
+
if (!ignoreClients.includes(otherClient.id)) otherClient.send(data);
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* A namespace to intercept and mock WebSocket connections.
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* const chat = ws.link('wss://chat.example.com')
|
|
282
|
+
*
|
|
283
|
+
* @see {@link https://mswjs.io/docs/api/ws `ws` API reference}
|
|
284
|
+
* @see {@link https://mswjs.io/docs/basics/handling-websocket-events Handling WebSocket events}
|
|
285
|
+
*/
|
|
286
|
+
const ws = {
|
|
287
|
+
link: createWebSocketLinkHandler,
|
|
288
|
+
onUpgrade: webSocketUpgrade
|
|
289
|
+
};
|
|
290
|
+
//#endregion
|
|
291
|
+
export { ws as t };
|
|
292
|
+
|
|
293
|
+
//# sourceMappingURL=ws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.js","names":[],"sources":["../../src/ws/websocket-memory-client-store.ts","../../src/ws/websocket-indexeddb-client-store.ts","../../src/ws/websocket-client-manager.ts","../../src/ws/ws.ts"],"sourcesContent":["import type { WebSocketClientHandle } from '@mswjs/interceptors/WebSocket'\nimport type { WebSocketClientStore } from './websocket-client-store'\nimport type { SerializedWebSocketClient } from './websocket-client-store'\n\nexport class WebSocketMemoryClientStore implements WebSocketClientStore {\n private store: Map<string, SerializedWebSocketClient>\n\n constructor() {\n this.store = new Map()\n }\n\n public async add(client: WebSocketClientHandle): Promise<void> {\n this.store.set(client.id, { id: client.id, url: client.url.href })\n }\n\n public getAll(): Promise<Array<SerializedWebSocketClient>> {\n return Promise.resolve(Array.from(this.store.values()))\n }\n\n public async deleteMany(clientIds: Array<string>): Promise<void> {\n for (const clientId of clientIds) {\n this.store.delete(clientId)\n }\n }\n}\n","import type { WebSocketClientHandle } from '@mswjs/interceptors/WebSocket'\nimport type { WebSocketClientStore } from './websocket-client-store'\nimport type { SerializedWebSocketClient } from './websocket-client-store'\n\nconst DB_NAME = 'msw-websocket-clients'\nconst DB_STORE_NAME = 'clients'\n\nexport class WebSocketIndexedDBClientStore implements WebSocketClientStore {\n private db: Promise<IDBDatabase>\n\n constructor() {\n this.db = this.createDatabase()\n }\n\n public async add(client: WebSocketClientHandle): Promise<void> {\n const promise = Promise.withResolvers<void>()\n const store = await this.getStore()\n\n /**\n * @note Use `.put()` instead of `.add()` to allow setting clients\n * that already exist in the database. This can happen if a single page\n * has multiple event handlers. Each handler will receive the \"connection\"\n * event in parallel, and try to set that WebSocket client in the database.\n */\n const request = store.put({\n id: client.id,\n url: client.url.href,\n } satisfies SerializedWebSocketClient)\n\n request.onsuccess = () => {\n promise.resolve()\n }\n request.onerror = () => {\n console.error(request.error)\n promise.reject(\n new Error(\n `Failed to add WebSocket client \"${client.id}\". There is likely an additional output above.`,\n ),\n )\n }\n\n return promise.promise\n }\n\n public async getAll(): Promise<Array<SerializedWebSocketClient>> {\n const promise = Promise.withResolvers<Array<SerializedWebSocketClient>>()\n const store = await this.getStore()\n const request = store.getAll() as IDBRequest<\n Array<SerializedWebSocketClient>\n >\n\n request.onsuccess = () => {\n promise.resolve(request.result)\n }\n request.onerror = () => {\n console.error(request.error)\n promise.reject(\n new Error(\n `Failed to get all WebSocket clients. There is likely an additional output above.`,\n ),\n )\n }\n\n return promise.promise\n }\n\n public async deleteMany(clientIds: Array<string>): Promise<void> {\n const promise = Promise.withResolvers<void>()\n const store = await this.getStore()\n\n for (const clientId of clientIds) {\n store.delete(clientId)\n }\n\n store.transaction.oncomplete = () => {\n promise.resolve()\n }\n store.transaction.onerror = () => {\n console.error(store.transaction.error)\n promise.reject(\n new Error(\n `Failed to delete WebSocket clients [${clientIds.join(', ')}]. There is likely an additional output above.`,\n ),\n )\n }\n\n return promise.promise\n }\n\n private async createDatabase(): Promise<IDBDatabase> {\n const promise = Promise.withResolvers<IDBDatabase>()\n const request = indexedDB.open(DB_NAME, 1)\n\n request.onsuccess = ({ currentTarget }) => {\n const db = Reflect.get(currentTarget!, 'result') as IDBDatabase\n\n if (db.objectStoreNames.contains(DB_STORE_NAME)) {\n return promise.resolve(db)\n }\n }\n\n request.onupgradeneeded = async ({ currentTarget }) => {\n const db = Reflect.get(currentTarget!, 'result') as IDBDatabase\n if (db.objectStoreNames.contains(DB_STORE_NAME)) {\n return\n }\n\n const store = db.createObjectStore(DB_STORE_NAME, { keyPath: 'id' })\n store.transaction.oncomplete = () => {\n promise.resolve(db)\n }\n store.transaction.onerror = () => {\n console.error(store.transaction.error)\n promise.reject(\n new Error(\n 'Failed to create WebSocket client store. There is likely an additional output above.',\n ),\n )\n }\n }\n request.onerror = () => {\n console.error(request.error)\n promise.reject(\n new Error(\n 'Failed to open an IndexedDB database. There is likely an additional output above.',\n ),\n )\n }\n\n return promise.promise\n }\n\n private async getStore(): Promise<IDBObjectStore> {\n const db = await this.db\n return db.transaction(DB_STORE_NAME, 'readwrite').objectStore(DB_STORE_NAME)\n }\n}\n","import type {\n WebSocketData,\n WebSocketClientHandle,\n WebSocketClientEventMap,\n} from '@mswjs/interceptors/WebSocket'\nimport type { WebSocketClientStore } from './websocket-client-store'\nimport { WebSocketMemoryClientStore } from './websocket-memory-client-store'\nimport { WebSocketIndexedDBClientStore } from './websocket-indexeddb-client-store'\n\nexport type WebSocketBroadcastChannelMessage<Message = WebSocketData> =\n | {\n type: 'extraneous:send'\n payload: {\n clientId: string\n data: Message\n }\n }\n | {\n type: 'extraneous:close'\n payload: {\n clientId: string\n code?: number\n reason?: string\n }\n }\n\n/**\n * A manager responsible for accumulating WebSocket client\n * connections across different browser runtimes.\n */\nexport class WebSocketClientManager<Message = WebSocketData> {\n private store: WebSocketClientStore\n private runtimeClients: Map<string, WebSocketClientHandle<Message>>\n private allClients: Set<WebSocketClientHandle<Message>>\n\n constructor(private channel: BroadcastChannel) {\n // Store the clients in the IndexedDB in the browser,\n // otherwise, store the clients in memory.\n this.store =\n typeof indexedDB !== 'undefined'\n ? new WebSocketIndexedDBClientStore()\n : new WebSocketMemoryClientStore()\n\n this.runtimeClients = new Map()\n this.allClients = new Set()\n\n this.channel.addEventListener('message', (message) => {\n if (message.data?.type === 'db:update') {\n this.flushDatabaseToMemory()\n }\n })\n\n if (typeof window !== 'undefined') {\n window.addEventListener('message', async (message) => {\n if (message.data?.type === 'msw/worker:stop') {\n await this.removeRuntimeClients()\n }\n })\n }\n }\n\n private async flushDatabaseToMemory() {\n const storedClients = await this.store.getAll()\n\n this.allClients = new Set(\n storedClients.map((client) => {\n const runtimeClient = this.runtimeClients.get(client.id)\n\n /**\n * @note For clients originating in this runtime, use their\n * direct references. No need to wrap them in a remote connection.\n */\n if (runtimeClient) {\n return runtimeClient\n }\n\n return new WebSocketRemoteClientConnection<Message>(\n client.id,\n new URL(client.url),\n this.channel,\n )\n }),\n )\n }\n\n private async removeRuntimeClients(): Promise<void> {\n await this.store.deleteMany(Array.from(this.runtimeClients.keys()))\n this.runtimeClients.clear()\n await this.flushDatabaseToMemory()\n this.notifyOthersAboutDatabaseUpdate()\n }\n\n /**\n * All active WebSocket client connections.\n */\n get clients(): Set<WebSocketClientHandle<Message>> {\n return this.allClients\n }\n\n /**\n * Notify other runtimes about the database update\n * using the shared `BroadcastChannel` instance.\n */\n private notifyOthersAboutDatabaseUpdate(): void {\n this.channel.postMessage({ type: 'db:update' })\n }\n\n private async addClient(client: WebSocketClientHandle): Promise<void> {\n await this.store.add(client)\n // Sync the in-memory clients in this runtime with the\n // updated database. This pulls in all the stored clients.\n await this.flushDatabaseToMemory()\n this.notifyOthersAboutDatabaseUpdate()\n }\n\n /**\n * Adds the given `WebSocket` client connection to the set\n * of all connections. The given connection is always the complete\n * connection object because `addConnection()` is called only\n * for the opened connections in the same runtime.\n */\n public async addConnection(client: WebSocketClientHandle): Promise<void> {\n // Store this client in the map of clients created in this runtime.\n // This way, the manager can distinguish between this runtime clients\n // and extraneous runtime clients when synchronizing clients storage.\n this.runtimeClients.set(client.id, client)\n\n // Add the new client to the storage.\n await this.addClient(client)\n\n // Handle the incoming BroadcastChannel messages from other runtimes\n // that attempt to control this runtime (via a remote connection wrapper).\n // E.g. another runtime calling `client.send()` for the client in this runtime.\n const handleExtraneousMessage = (\n message: MessageEvent<WebSocketBroadcastChannelMessage<Message>>,\n ) => {\n const { type, payload } = message.data\n\n // Ignore broadcasted messages for other clients.\n if (\n typeof payload === 'object' &&\n 'clientId' in payload &&\n payload.clientId !== client.id\n ) {\n return\n }\n\n switch (type) {\n case 'extraneous:send': {\n client.send(payload.data)\n break\n }\n\n case 'extraneous:close': {\n client.close(payload.code, payload.reason)\n break\n }\n }\n }\n\n const abortController = new AbortController()\n\n this.channel.addEventListener('message', handleExtraneousMessage, {\n signal: abortController.signal,\n })\n\n // Once closed, this connection cannot be operated on.\n // This must include the extraneous runtimes as well.\n client.addEventListener('close', () => abortController.abort(), {\n once: true,\n })\n }\n}\n\n/**\n * A wrapper class to operate with WebSocket client connections\n * from other runtimes. This class maintains 1-1 public API\n * compatibility to the `WebSocketClientConnection` but relies\n * on the given `BroadcastChannel` to communicate instructions\n * with the client connections from other runtimes.\n */\nclass WebSocketRemoteClientConnection<\n Message = WebSocketData,\n> implements WebSocketClientHandle<Message> {\n constructor(\n public readonly id: string,\n public readonly url: URL,\n private channel: BroadcastChannel,\n ) {}\n\n send(data: Message): void {\n this.channel.postMessage({\n type: 'extraneous:send',\n payload: {\n clientId: this.id,\n data,\n },\n } as WebSocketBroadcastChannelMessage<Message>)\n }\n\n close(code?: number | undefined, reason?: string | undefined): void {\n this.channel.postMessage({\n type: 'extraneous:close',\n payload: {\n clientId: this.id,\n code,\n reason,\n },\n } as WebSocketBroadcastChannelMessage<Message>)\n }\n\n addEventListener<EventType extends keyof WebSocketClientEventMap<Message>>(\n _type: EventType,\n _listener: (\n this: WebSocket,\n event: WebSocketClientEventMap<Message>[EventType],\n ) => void,\n _options?: AddEventListenerOptions | boolean,\n ): void {\n throw new Error(\n 'WebSocketRemoteClientConnection.addEventListener is not supported',\n )\n }\n\n removeEventListener<EventType extends keyof WebSocketClientEventMap<Message>>(\n _event: EventType,\n _listener: (\n this: WebSocket,\n event: WebSocketClientEventMap<Message>[EventType],\n ) => void,\n _options?: EventListenerOptions | boolean,\n ): void {\n throw new Error(\n 'WebSocketRemoteClientConnection.removeEventListener is not supported',\n )\n }\n}\n","import { invariant } from 'outvariant'\nimport type { EventMap } from 'rettime'\nimport type {\n WebSocketData,\n WebSocketExtension,\n WebSocketExtensionMessage,\n WebSocketExtensionApi,\n WebSocketClientHandle,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n WebSocketHandler,\n kEmitter,\n type AnyWebSocketExtension,\n type WebSocketHandlerEventMap,\n} from './websocket-handler'\nimport { hasRefCounted } from '#core/utils/internal/has-ref-counted'\nimport type { UnionToIntersection } from '#core/type-utils'\nimport {\n type Path,\n type PathParams,\n isPath,\n} from '#core/utils/matching/match-request-url'\nimport { attachSiblingHandlers } from '#core/utils/internal/attach-sibling-handlers'\nimport {\n createWebSocketUpgradeHandler,\n webSocketUpgrade,\n} from './websocket-upgrade'\nimport { WebSocketClientManager } from './websocket-client-manager'\n\nconst webSocketChannel = new BroadcastChannel('msw:websocket-client-manager')\n\nif (hasRefCounted(webSocketChannel)) {\n // Allows the Node.js thread to exit if it is the only active handle in the event system.\n // https://nodejs.org/api/worker_threads.html#broadcastchannelunref\n webSocketChannel.unref()\n}\n\nexport type WebSocketEventListener<\n EventType extends keyof WebSocketHandlerEventMap,\n Extension extends AnyWebSocketExtension = WebSocketExtension,\n> = EventMap.Listener<WebSocketHandlerEventMap<Extension>, EventType>\n\ntype WebSocketExtensions = ReadonlyArray<AnyWebSocketExtension>\n\n/**\n * The messages and the API of each extension, boxed one extension at a\n * time. Intersecting the boxes intersects the values of different\n * extensions only, so a value that is itself a union (e.g. a message\n * union) stays intact.\n */\ntype BoxedExtension<Extension> = Extension extends unknown\n ? {\n message: WebSocketExtensionMessage<Extension>\n api: WebSocketExtensionApi<Extension>\n }\n : never\n\ntype MergedExtension<\n Extension,\n Fallback extends { message: unknown; api: unknown },\n> = [Extension] extends [never]\n ? Fallback\n : UnionToIntersection<BoxedExtension<Extension>>\n\n/**\n * The extensions of a link merged into a single extension:\n * the connections speak the messages of every extension, and the\n * connection event carries the APIs of every extension. A link\n * without extensions speaks raw WebSocket data.\n */\nexport type WebSocketLinkExtension<Extensions extends WebSocketExtensions> =\n MergedExtension<\n Extensions[number],\n { message: WebSocketData; api: {} }\n > extends infer Merged extends { message: unknown; api: unknown }\n ? WebSocketExtension<Merged['message'], Merged['api']>\n : never\n\nexport interface WebSocketLinkOptions<\n Extensions extends WebSocketExtensions = [],\n> {\n /**\n * Extensions applied to every connection intercepted by this link,\n * left to right. Encoding and decoding happen behind the scenes:\n * `client.send()`, `server.send()`, `broadcast()`, and the `message`\n * events all operate on the extensions' messages, and each extension's\n * own API is exposed on the connection event.\n *\n * @example\n * const chat = ws.link('wss://chat.example.com', { extensions: [new SocketIo()] })\n * chat.addEventListener('connection', ({ client, rooms }) => {\n * client.send({ event: 'greeting', args: ['hello'] })\n * })\n */\n extensions?: Extensions\n}\n\nexport type WebSocketLink<\n Extension extends AnyWebSocketExtension = WebSocketExtension,\n> = {\n /**\n * A set of all WebSocket clients connected\n * to this link.\n *\n * @see {@link https://mswjs.io/docs/api/ws#clients `clients` API reference}\n */\n clients: Set<WebSocketClientHandle<WebSocketExtensionMessage<Extension>>>\n\n /**\n * Adds an event listener to this WebSocket link.\n *\n * @example\n * const chat = ws.link('wss://chat.example.com')\n * chat.addEventListener('connection', listener)\n *\n * @see {@link https://mswjs.io/docs/api/ws#onevent-listener `on()` API reference}\n */\n addEventListener: <EventType extends keyof WebSocketHandlerEventMap>(\n event: EventType,\n listener: WebSocketEventListener<EventType, Extension>,\n ) => WebSocketHandler<Extension>\n\n /**\n * Broadcasts the given data to all WebSocket clients.\n *\n * @example\n * const service = ws.link('wss://example.com')\n * service.addEventListener('connection', () => {\n * service.broadcast('hello, everyone!')\n * })\n *\n * @see {@link https://mswjs.io/docs/api/ws#broadcastdata `broadcast()` API reference}\n */\n broadcast: (data: WebSocketExtensionMessage<Extension>) => void\n\n /**\n * Broadcasts the given data to all WebSocket clients\n * except the ones provided in the `clients` argument.\n *\n * @example\n * const service = ws.link('wss://example.com')\n * service.addEventListener('connection', ({ client }) => {\n * service.broadcastExcept(client, 'hi, the rest of you!')\n * })\n *\n * @see {@link https://mswjs.io/docs/api/ws#broadcastexceptclients-data `broadcast()` API reference}\n */\n broadcastExcept: (\n clients:\n | WebSocketClientHandle<WebSocketExtensionMessage<Extension>>\n | Array<WebSocketClientHandle<WebSocketExtensionMessage<Extension>>>,\n data: WebSocketExtensionMessage<Extension>,\n ) => void\n}\n\n/**\n * Intercepts outgoing WebSocket connections to the given URL.\n *\n * @example\n * const chat = ws.link('wss://chat.example.com')\n * chat.addEventListener('connection', ({ client }) => {\n * client.send('hello from server!')\n * })\n */\nfunction createWebSocketLinkHandler<\n const Extensions extends WebSocketExtensions = [],\n>(\n url: Path,\n options?: WebSocketLinkOptions<Extensions>,\n): WebSocketLink<WebSocketLinkExtension<Extensions>> {\n invariant(url, 'Expected a WebSocket server URL but got undefined')\n\n invariant(\n isPath(url),\n 'Expected a WebSocket server URL to be a valid path but got %s',\n typeof url,\n )\n\n const clientManager = new WebSocketClientManager<\n WebSocketExtensionMessage<WebSocketLinkExtension<Extensions>>\n >(webSocketChannel)\n\n // The same upgrade handler instance is attached as a sibling to every\n // WebSocketHandler returned by this link. `groupHandlersByKind` dedupes\n // by reference, so it lands in the `request` bucket exactly once regardless\n // of which subset of WS handlers the user ends up registering.\n const upgradeHandler = createWebSocketUpgradeHandler(url, (info) => {\n // Read `ws.onUpgrade` at request time so that overriding it\n // (e.g. in runtimes with a custom upgrade flow) takes effect\n // regardless of when the link was created.\n return ws.onUpgrade(info)\n })\n\n return {\n get clients() {\n return clientManager.clients\n },\n addEventListener(event, listener) {\n const webSocketHandler = new WebSocketHandler<\n WebSocketLinkExtension<Extensions>\n >(url, {\n extensions: options?.extensions,\n })\n\n // Add the connection event listener for when the\n // handler matches and emits a connection event.\n // When that happens, store that connection in the\n // set of all connections for reference.\n webSocketHandler[kEmitter].on('connection', async ({ client }) => {\n await clientManager.addConnection(client)\n })\n\n // The WebSocket network frame invokes the \"run()\" method\n // on the WebSocketHandler when resolving a connection.\n // If the handler matches, it will emit the \"connection\"\n // event. Attach the user-defined listener to that event.\n webSocketHandler[kEmitter].on(event, listener)\n\n return attachSiblingHandlers(webSocketHandler, [upgradeHandler])\n },\n\n broadcast(data) {\n // This will invoke \"send()\" on the immediate clients\n // in this runtime and post a message to the broadcast channel\n // to trigger send for the clients in other runtimes.\n this.broadcastExcept([], data)\n },\n\n broadcastExcept(clients, data) {\n const ignoreClients = Array.prototype\n .concat(clients)\n .map((client) => client.id)\n\n clientManager.clients.forEach((otherClient) => {\n if (!ignoreClients.includes(otherClient.id)) {\n otherClient.send(data)\n }\n })\n },\n }\n}\n\ninterface WebSocketNamespace {\n link: typeof createWebSocketLinkHandler\n /**\n * Request handler for the `upgrade` requests to the WebSocket protocol.\n * This requires a WebSocket handler to be present to fire.\n * @note This only affects Node.js as the `upgrade` request header is\n * forbidden and cannot be read in the browser. Consider using the\n * `WebSocket` API for establishing WebSocket connections in the browser.\n */\n onUpgrade: (info: {\n requestId: string\n request: Request\n params: PathParams\n }) => Promise<Response | undefined> | Response | undefined\n}\n\n/**\n * A namespace to intercept and mock WebSocket connections.\n *\n * @example\n * const chat = ws.link('wss://chat.example.com')\n *\n * @see {@link https://mswjs.io/docs/api/ws `ws` API reference}\n * @see {@link https://mswjs.io/docs/basics/handling-websocket-events Handling WebSocket events}\n */\nexport const ws: WebSocketNamespace = {\n link: createWebSocketLinkHandler,\n onUpgrade: webSocketUpgrade,\n}\n\nexport { type WebSocketData }\n"],"mappings":"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"}
|