Skip to content

Commit 81b65bc

Browse files
committed
fix: annotate life-cycle events correctly
1 parent e79b04f commit 81b65bc

File tree

4 files changed

+118
-3
lines changed

4 files changed

+118
-3
lines changed

src/browser/glossary.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,6 @@ export interface SetupWorker {
116116
* @see {@link https://mswjs.io/docs/api/life-cycle-events Life-cycle Events API reference}
117117
*/
118118
events: LifeCycleEventEmitter<
119-
HttpNetworkFrameEventMap | WebSocketNetworkFrameEventMap
119+
HttpNetworkFrameEventMap & WebSocketNetworkFrameEventMap
120120
>
121121
}

src/browser/setup-worker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class SetupWorkerApi implements SetupWorker {
131131
restoreHandlers: () => void
132132
listHandlers: () => ReadonlyArray<AnyHandler>
133133
events: LifeCycleEventEmitter<
134-
HttpNetworkFrameEventMap | WebSocketNetworkFrameEventMap
134+
HttpNetworkFrameEventMap & WebSocketNetworkFrameEventMap
135135
>
136136

137137
constructor() {

src/node/glossary.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export interface SetupServerCommon {
5656
* @see {@link https://mswjs.io/docs/api/life-cycle-events Life-cycle Events API reference}
5757
*/
5858
events: LifeCycleEventEmitter<
59-
HttpNetworkFrameEventMap | WebSocketNetworkFrameEventMap
59+
HttpNetworkFrameEventMap & WebSocketNetworkFrameEventMap
6060
>
6161
}
6262

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import { setupServer } from 'msw/node'
2+
import { setupWorker } from 'msw/browser'
3+
import {
4+
type HttpNetworkFrameEventMap,
5+
type WebSocketNetworkFrameEventMap,
6+
} from 'msw/experimental'
7+
8+
it('annotates life cycle event types (node)', () => {
9+
expectTypeOf(setupServer().events.on)
10+
.parameter(0)
11+
.toEqualTypeOf<
12+
'*' | keyof HttpNetworkFrameEventMap | keyof WebSocketNetworkFrameEventMap
13+
>()
14+
15+
expectTypeOf(setupServer().events.removeListener)
16+
.parameter(0)
17+
.toEqualTypeOf<
18+
'*' | keyof HttpNetworkFrameEventMap | keyof WebSocketNetworkFrameEventMap
19+
>()
20+
21+
expectTypeOf(setupServer().events.removeAllListeners)
22+
.parameter(0)
23+
.toEqualTypeOf<
24+
| '*'
25+
| keyof HttpNetworkFrameEventMap
26+
| keyof WebSocketNetworkFrameEventMap
27+
| undefined
28+
>()
29+
})
30+
31+
it('annotates life cycle event types (browser)', () => {
32+
expectTypeOf(setupWorker().events.on)
33+
.parameter(0)
34+
.toEqualTypeOf<
35+
'*' | keyof HttpNetworkFrameEventMap | keyof WebSocketNetworkFrameEventMap
36+
>()
37+
38+
expectTypeOf(setupWorker().events.removeListener)
39+
.parameter(0)
40+
.toEqualTypeOf<
41+
'*' | keyof HttpNetworkFrameEventMap | keyof WebSocketNetworkFrameEventMap
42+
>()
43+
44+
expectTypeOf(setupWorker().events.removeAllListeners)
45+
.parameter(0)
46+
.toEqualTypeOf<
47+
| '*'
48+
| keyof HttpNetworkFrameEventMap
49+
| keyof WebSocketNetworkFrameEventMap
50+
| undefined
51+
>()
52+
})
53+
54+
it('annotates event listener argument (node)', () => {
55+
const server = setupServer()
56+
server.events.on('request:start', (args) => {
57+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
58+
})
59+
server.events.on('request:match', (args) => {
60+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
61+
})
62+
server.events.on('request:unhandled', (args) => {
63+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
64+
})
65+
server.events.on('request:end', (args) => {
66+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
67+
})
68+
69+
server.events.on('response:bypass', (args) => {
70+
expectTypeOf(args).toExtend<{
71+
request: Request
72+
requestId: string
73+
response: Response
74+
}>()
75+
})
76+
server.events.on('response:mocked', (args) => {
77+
expectTypeOf(args).toExtend<{
78+
request: Request
79+
requestId: string
80+
response: Response
81+
}>()
82+
})
83+
})
84+
85+
it('annotates event listener argument (node)', () => {
86+
const worker = setupWorker()
87+
88+
worker.events.on('request:start', (args) => {
89+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
90+
})
91+
worker.events.on('request:match', (args) => {
92+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
93+
})
94+
worker.events.on('request:unhandled', (args) => {
95+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
96+
})
97+
worker.events.on('request:end', (args) => {
98+
expectTypeOf(args).toExtend<{ request: Request; requestId: string }>()
99+
})
100+
101+
worker.events.on('response:bypass', (args) => {
102+
expectTypeOf(args).toExtend<{
103+
request: Request
104+
requestId: string
105+
response: Response
106+
}>()
107+
})
108+
worker.events.on('response:mocked', (args) => {
109+
expectTypeOf(args).toExtend<{
110+
request: Request
111+
requestId: string
112+
response: Response
113+
}>()
114+
})
115+
})

0 commit comments

Comments
 (0)