Skip to report

Browser and Node connect to a shared WebSocket core

Follow MSW’s WebSocket mocking introduction through shared handlers, browser and Node interception, and client management for broadcasts across browser runtimes.

mswjs/msw #2011 · PR by kettanaito · Merged

mswjs/msw 562fac96..773a6d28

base and head as given

  • WebSocket mocking entered the core API through a new ws namespace.
  • WebSocket client management entered the system as a new component.
  • Browser worker setup now depends on WebSocket interception.
  • Node server setup now depends on WebSocket interception.
files changed
63
in a component
27
lines in components
1,323
components
10
public routes changed
0
schema statements
0
new dependencies
3
excluded by role
36
Based on 12 of 27 eligible changed files

WebSocket mocking

Added
Before
WebSocket handler API did not exist
After
Handlers mock matching socket links

Applications can define URL-matched WebSocket links, receive connection events, send messages, and broadcast to connected clients. Browser and server setups enable interception, while browser runtimes share active clients for cross-runtime broadcasts.

In favour

  • In favour: Reuses URL matching for HTTP and WebSocket handlers
  • In favour: Shares clients across browser runtimes for link-wide broadcasts

The model found nothing to weigh against this.

Files changed in 10 components (6 shown). Dependencies shown: 4 new, 11 unchanged
unchanged · 11new · 41 component added

4 new dependencies between components — Setup Worker → WebSocket Support · WebSocket Support → Handlers · Node → WebSocket Support · Core → WebSocket Support

What else could behave differently

13 components · 43 files

These components import changed code, directly or through other files. A traced dependency is a place to review, not a confirmed runtime failure.

Reached 3

ComponentSymbolCited atFilesReached by
WebSocket Supportsrc/core/ws/Added 1 of 11 changed symbols reaching itsrc/core/handlers/WebSocketHandler.ts:2566 direct
Trace path

Shortest component path from the changed symbol:

  1. Handlers
  2. WebSocket Support

Later steps follow file imports; they do not prove this symbol is called.

Coresrc/core/Added 1 of 16 changed symbols reaching itsrc/core/handlers/WebSocketHandler.ts:16-1864 direct · 2 at two steps
Trace path

Shortest component path from the changed symbol:

  1. Handlers
  2. Core

Later steps follow file imports; they do not prove this symbol is called.

src/core/utils/internal/Signature changed src/core/utils/logging/getTimestamp.ts:8-171none direct · 1 at two steps
Trace path

Shortest component path from the changed symbol:

  1. Logging Utilities
  2. Handlers
  3. src/core/utils/internal/

Later steps follow file imports; they do not prove this symbol is called.

Ranked lower 10

ComponentFilesReached by
src/core/handlers/22 direct
src/core/utils/11 direct
src/browser/setupWorker/22 direct
src/node/55 direct
src/browser/11 direct
src/browser/utils/31 direct · 2 at two steps
src/native/11 direct
src/iife/1none direct · 1 at two steps
src/browser/setupWorker/start/127 direct · 5 at two steps
src/browser/setupWorker/stop/22 direct

Statements 3

Adding kDispatchEvent reached 6 WebSocket support files. 6
src/core/handlers/WebSocketHandler.ts:25
Adding WebSocketHandlerEventMap reached 6 Core files. 42
src/core/handlers/WebSocketHandler.ts:16-18
The getTimestamp signature change reached 1 internal utility file. 1
src/core/utils/logging/getTimestamp.ts:8-17

27 reached files belong to no component — tests, docs and config.

Routes, schema, dependencies

WhatObjectWhere
+ dependency@fastify/websocket@^8.3.1declared, and used by no file in any component
+ dependency@open-draft/deferred-promise@^2.2.0src/core/ws/WebSocketIndexedDBClientStore.ts:1
+ dependencyfastify@^4.26.0declared, and used by no file in any component
3 statements, with the lines behind them
Declared, and used by no file in any component.
@open-draft/deferred-promise ^2.2.0 was added as a dependency.
src/core/ws/WebSocketIndexedDBClientStore.ts:1
Declared, and used by no file in any component.

Inspect components, files and symbols

Component

WebSocket SupportAdded
src/core/ws/

10 files · 786 lines

dependency, 3 dependents

WebSocket support exported SerializedWebSocketClient, WebSocketBroadcastChannelMessage, WebSocketClientManager, WebSocketClientStore, WebSocketIndexedDBClientStore, WebSocketMemoryClientStore, WebSocketRemoteClientConnection, attachWebSocketLogger, getMessageLength, getPublicData, handleWebSocketEvent, logConnectionOpen, truncateMessage, and webSocketInterceptor.
CoreModified
src/core/

3 files · 226 lines

7 dependents

Core exported WebSocketData, WebSocketEventListener, WebSocketHandler, WebSocketHandlerConnection, WebSocketHandlerEventMap, WebSocketLink, and ws.
HandlersModified
src/core/handlers/

1 file · 142 lines

8 dependents

Handlers exported WebSocketHandler, WebSocketHandlerConnection, WebSocketHandlerEventMap, kDispatchEvent, kEmitter, and kSender.
Core UtilitiesModified
src/core/utils/

2 files · 10 lines

5 dependents

Setup WorkerModified
src/browser/setupWorker/

2 files · 55 lines

4 dependents

NodeModified
src/node/

4 files · 64 lines

1 dependent

Matching UtilitiesModified
src/core/utils/matching/

1 file · 4 lines

3 dependents

ranked lower · 0.13

Matching utilities exported isPath.
Logging UtilitiesModified
src/core/utils/logging/

1 file · 17 lines

2 dependents

ranked lower · 0.11

Worker StartModified
src/browser/setupWorker/start/

2 files · 13 lines

1 dependent

ranked lower · 0.08

Worker StopModified
src/browser/setupWorker/stop/

1 file · 6 lines

1 dependent

ranked lower · 0.08

File

WebSocket Supportsrc/core/ws/
src/core/ws/utils/attachWebSocketLogger.ts

+259 −0

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketClientManager.ts

+211 −0

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketIndexedDBClientStore.ts

+145 −0

WebSocket Supportsrc/core/ws/
src/core/ws/handleWebSocketEvent.ts

+82 −0

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketMemoryClientStore.ts

+27 −0

WebSocket Supportsrc/core/ws/
src/core/ws/utils/getMessageLength.ts

+19 −0

WebSocket Supportsrc/core/ws/
src/core/ws/utils/getPublicData.ts

+17 −0

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketClientStore.ts

+14 −0

WebSocket Supportsrc/core/ws/
src/core/ws/utils/truncateMessage.ts

+9 −0

WebSocket Supportsrc/core/ws/
src/core/ws/webSocketInterceptor.ts

+3 −0

Coresrc/core/
src/core/ws.ts

+166 −0

Coresrc/core/
src/core/SetupApi.ts

+28 −20

Coresrc/core/
src/core/index.ts

+11 −1

Handlerssrc/core/handlers/
src/core/handlers/WebSocketHandler.ts

+142 −0

Core Utilitiessrc/core/utils/
src/core/utils/executeHandlers.ts

+6 −2

Core Utilitiessrc/core/utils/
src/core/utils/handleRequest.ts

+1 −1

Setup Workersrc/browser/setupWorker/
src/browser/setupWorker/setupWorker.ts

+32 −3

Setup Workersrc/browser/setupWorker/
src/browser/setupWorker/glossary.ts

+10 −10

Nodesrc/node/
src/node/SetupServerCommonApi.ts

+29 −5

Nodesrc/node/
src/node/SetupServerApi.ts

+8 −7

Nodesrc/node/
src/node/glossary.ts

+5 −7

Nodesrc/node/
src/node/setupServer.ts

+2 −1

Matching Utilitiessrc/core/utils/matching/
src/core/utils/matching/matchRequestUrl.ts

+4 −0

Logging Utilitiessrc/core/utils/logging/
src/core/utils/logging/getTimestamp.ts

+11 −6

Worker Startsrc/browser/setupWorker/start/
src/browser/setupWorker/start/createRequestListener.ts

+7 −1

Worker Startsrc/browser/setupWorker/start/
src/browser/setupWorker/start/createStartHandler.ts

+5 −0

Worker Stopsrc/browser/setupWorker/stop/
src/browser/setupWorker/stop/createStop.ts

+6 −0

Function

imports what changeddownstream of it, one mark per step

SetupWorkerInternalContext()src/browser/setupWorker/glossary.ts

reaches 4 components

The SetupWorkerInternalContext signature change reached 2 setup-worker files. 2
src/browser/setupWorker/glossary.ts:88-143
The SetupWorkerInternalContext signature change reached 3 browser utility files. 12
src/browser/setupWorker/glossary.ts:88-143
The SetupWorkerInternalContext signature change reached 12 worker-start files. 75
src/browser/setupWorker/glossary.ts:88-143
The SetupWorkerInternalContext signature change reached 2 worker-stop files. 2
src/browser/setupWorker/glossary.ts:88-143

Diff

WebSocket Supportsrc/core/ws/
src/core/ws/utils/attachWebSocketLogger.ts

1–259

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketClientManager.ts

1–211

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketIndexedDBClientStore.ts

1–145

WebSocket Supportsrc/core/ws/
src/core/ws/handleWebSocketEvent.ts

1–82

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketMemoryClientStore.ts

1–27

WebSocket Supportsrc/core/ws/
src/core/ws/utils/getMessageLength.ts

1–19

WebSocket Supportsrc/core/ws/
src/core/ws/utils/getPublicData.ts

1–17

WebSocket Supportsrc/core/ws/
src/core/ws/WebSocketClientStore.ts

1–14

WebSocket Supportsrc/core/ws/
src/core/ws/utils/truncateMessage.ts

1–9

WebSocket Supportsrc/core/ws/
src/core/ws/webSocketInterceptor.ts

1–3

Coresrc/core/
src/core/ws.ts

1–166

Coresrc/core/
src/core/SetupApi.ts

3–3, 9–9, 12–16 and 11 more spans

Coresrc/core/
src/core/index.ts

5–5, 12–19, 56–57

Handlerssrc/core/handlers/
src/core/handlers/WebSocketHandler.ts

1–142

Core Utilitiessrc/core/utils/
src/core/utils/executeHandlers.ts

3–3, 21–21, 36–39

Core Utilitiessrc/core/utils/
src/core/utils/handleRequest.ts

3–3, 5–5

Setup Workersrc/browser/setupWorker/
src/browser/setupWorker/setupWorker.ts

21–22, 25–27, 44–44 and 2 more spans

Setup Workersrc/browser/setupWorker/
src/browser/setupWorker/glossary.ts

8–8, 10–12, 93–93 and 3 more spans

Nodesrc/node/
src/node/SetupServerCommonApi.ts

17–19, 23–24, 42–42 and 4 more spans

Nodesrc/node/
src/node/SetupServerApi.ts

7–7, 14–15, 26–26 and 4 more spans

Nodesrc/node/
src/node/glossary.ts

2–3, 30–30, 44–44 and 1 more span

Nodesrc/node/
src/node/setupServer.ts

2–2, 12–12

Matching Utilitiessrc/core/utils/matching/
src/core/utils/matching/matchRequestUrl.ts

74–77

Logging Utilitiessrc/core/utils/logging/
src/core/utils/logging/getTimestamp.ts

1–4, 8–8, 10–14 and 1 more span

Worker Startsrc/browser/setupWorker/start/
src/browser/setupWorker/start/createRequestListener.ts

12–13, 48–52

Worker Startsrc/browser/setupWorker/start/
src/browser/setupWorker/start/createStartHandler.ts

74–78

Worker Stopsrc/browser/setupWorker/stop/
src/browser/setupWorker/stop/createStop.ts

27–32

Analysis scope

554 → 10
  1. 554
    files at head
  2. 24
    components
  3. 10
    changed by this change
  4. 6
    shown above of 10

Where the new files landed

12 new files
New fileBelongs toUsed byCallsServes
src/core/ws/10 new filesimports 1 package this change added
WebSocket Supportnew territory
Setup WorkerCoreNode
Handlerssrc/core/utils/internal/Logging Utilitiessrc/core/utils/request/
src/core/ws.ts
Corebase frame
HandlersMatching UtilitiesWebSocket Support
./core/ws
src/core/handlers/WebSocketHandler.ts
Handlersbase frame
Setup WorkerCoreWebSocket SupportNode
src/core/utils/internal/Matching Utilities

28 added files carry no component — 28 test.

10components changed
5reached, not changed
1components added/removed
7dependencies added between components
0dependencies removed between components
0files moved to another path

63 files changed, 30 claims stated. 13 components reached in total.

naming: “model

narrative: “model

analyzer 0.2.0, config v1.9.0-phase8

Every line above is derived from 562fac96..773a6d28 and nothing else.