msw 2.0.13 → 2.1.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.
Files changed (142) hide show
  1. package/cli/index.js +11 -3
  2. package/cli/init.js +126 -73
  3. package/config/scripts/postinstall.js +8 -20
  4. package/lib/browser/index.js +111 -176
  5. package/lib/browser/index.js.map +1 -1
  6. package/lib/browser/index.mjs +111 -179
  7. package/lib/browser/index.mjs.map +1 -1
  8. package/lib/core/{GraphQLHandler-SHlRCcy4.d.ts → GraphQLHandler-LZ8jH42-.d.ts} +4 -2
  9. package/lib/core/{GraphQLHandler-zlmUDnN6.d.mts → GraphQLHandler-c0pfLv8e.d.mts} +4 -2
  10. package/lib/core/HttpResponse.d.mts +1 -1
  11. package/lib/core/HttpResponse.d.ts +1 -1
  12. package/lib/core/{RequestHandler-rBDJQrEf.d.ts → RequestHandler-SdFwV297.d.ts} +11 -4
  13. package/lib/core/{RequestHandler-vxZdj6Tw.d.mts → RequestHandler-hEwneHZE.d.mts} +11 -4
  14. package/lib/core/SetupApi.d.mts +1 -1
  15. package/lib/core/SetupApi.d.ts +1 -1
  16. package/lib/core/SetupApi.js +5 -0
  17. package/lib/core/SetupApi.js.map +1 -1
  18. package/lib/core/SetupApi.mjs +5 -0
  19. package/lib/core/SetupApi.mjs.map +1 -1
  20. package/lib/core/delay.js +24 -46
  21. package/lib/core/delay.js.map +1 -1
  22. package/lib/core/delay.mjs +24 -46
  23. package/lib/core/delay.mjs.map +1 -1
  24. package/lib/core/graphql.d.mts +11 -9
  25. package/lib/core/graphql.d.ts +11 -9
  26. package/lib/core/graphql.js +3 -19
  27. package/lib/core/graphql.js.map +1 -1
  28. package/lib/core/graphql.mjs +3 -21
  29. package/lib/core/graphql.mjs.map +1 -1
  30. package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
  31. package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
  32. package/lib/core/handlers/GraphQLHandler.js +52 -77
  33. package/lib/core/handlers/GraphQLHandler.js.map +1 -1
  34. package/lib/core/handlers/GraphQLHandler.mjs +52 -77
  35. package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
  36. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  37. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  38. package/lib/core/handlers/HttpHandler.js +29 -55
  39. package/lib/core/handlers/HttpHandler.js.map +1 -1
  40. package/lib/core/handlers/HttpHandler.mjs +29 -55
  41. package/lib/core/handlers/HttpHandler.mjs.map +1 -1
  42. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  43. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  44. package/lib/core/handlers/RequestHandler.js +79 -103
  45. package/lib/core/handlers/RequestHandler.js.map +1 -1
  46. package/lib/core/handlers/RequestHandler.mjs +79 -105
  47. package/lib/core/handlers/RequestHandler.mjs.map +1 -1
  48. package/lib/core/http.d.mts +13 -11
  49. package/lib/core/http.d.ts +13 -11
  50. package/lib/core/http.js.map +1 -1
  51. package/lib/core/http.mjs.map +1 -1
  52. package/lib/core/index.d.mts +4 -4
  53. package/lib/core/index.d.ts +4 -4
  54. package/lib/core/index.js.map +1 -1
  55. package/lib/core/index.mjs.map +1 -1
  56. package/lib/core/sharedOptions.d.mts +1 -1
  57. package/lib/core/sharedOptions.d.ts +1 -1
  58. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  59. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  60. package/lib/core/utils/HttpResponse/decorators.js +7 -24
  61. package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
  62. package/lib/core/utils/HttpResponse/decorators.mjs +7 -26
  63. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
  64. package/lib/core/utils/getResponse.d.mts +1 -1
  65. package/lib/core/utils/getResponse.d.ts +1 -1
  66. package/lib/core/utils/getResponse.js +11 -26
  67. package/lib/core/utils/getResponse.js.map +1 -1
  68. package/lib/core/utils/getResponse.mjs +11 -26
  69. package/lib/core/utils/getResponse.mjs.map +1 -1
  70. package/lib/core/utils/handleRequest.d.mts +1 -1
  71. package/lib/core/utils/handleRequest.d.ts +1 -1
  72. package/lib/core/utils/handleRequest.js +49 -72
  73. package/lib/core/utils/handleRequest.js.map +1 -1
  74. package/lib/core/utils/handleRequest.mjs +49 -72
  75. package/lib/core/utils/handleRequest.mjs.map +1 -1
  76. package/lib/core/utils/internal/Disposable.js +3 -27
  77. package/lib/core/utils/internal/Disposable.js.map +1 -1
  78. package/lib/core/utils/internal/Disposable.mjs +3 -27
  79. package/lib/core/utils/internal/Disposable.mjs.map +1 -1
  80. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
  81. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  82. package/lib/core/utils/internal/parseGraphQLRequest.js +72 -112
  83. package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -1
  84. package/lib/core/utils/internal/parseGraphQLRequest.mjs +72 -113
  85. package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -1
  86. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  87. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  88. package/lib/core/utils/internal/parseMultipartData.js +3 -4
  89. package/lib/core/utils/internal/parseMultipartData.js.map +1 -1
  90. package/lib/core/utils/internal/parseMultipartData.mjs +3 -4
  91. package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -1
  92. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  93. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  94. package/lib/core/utils/internal/tryCatch.js +1 -1
  95. package/lib/core/utils/internal/tryCatch.js.map +1 -1
  96. package/lib/core/utils/internal/tryCatch.mjs +1 -1
  97. package/lib/core/utils/internal/tryCatch.mjs.map +1 -1
  98. package/lib/core/utils/logging/serializeRequest.js +9 -31
  99. package/lib/core/utils/logging/serializeRequest.js.map +1 -1
  100. package/lib/core/utils/logging/serializeRequest.mjs +9 -31
  101. package/lib/core/utils/logging/serializeRequest.mjs.map +1 -1
  102. package/lib/core/utils/logging/serializeResponse.js +11 -33
  103. package/lib/core/utils/logging/serializeResponse.js.map +1 -1
  104. package/lib/core/utils/logging/serializeResponse.mjs +11 -33
  105. package/lib/core/utils/logging/serializeResponse.mjs.map +1 -1
  106. package/lib/core/utils/request/getRequestCookies.js +9 -18
  107. package/lib/core/utils/request/getRequestCookies.js.map +1 -1
  108. package/lib/core/utils/request/getRequestCookies.mjs +9 -20
  109. package/lib/core/utils/request/getRequestCookies.mjs.map +1 -1
  110. package/lib/core/utils/request/onUnhandledRequest.d.mts +1 -1
  111. package/lib/core/utils/request/onUnhandledRequest.d.ts +1 -1
  112. package/lib/core/utils/request/onUnhandledRequest.js +62 -84
  113. package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
  114. package/lib/core/utils/request/onUnhandledRequest.mjs +62 -84
  115. package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
  116. package/lib/core/utils/request/readResponseCookies.js +1 -18
  117. package/lib/core/utils/request/readResponseCookies.js.map +1 -1
  118. package/lib/core/utils/request/readResponseCookies.mjs +1 -20
  119. package/lib/core/utils/request/readResponseCookies.mjs.map +1 -1
  120. package/lib/iife/index.js +679 -958
  121. package/lib/iife/index.js.map +1 -1
  122. package/lib/mockServiceWorker.js +2 -2
  123. package/lib/native/index.js +5 -23
  124. package/lib/native/index.js.map +1 -1
  125. package/lib/native/index.mjs +5 -24
  126. package/lib/native/index.mjs.map +1 -1
  127. package/lib/node/index.js +5 -23
  128. package/lib/node/index.js.map +1 -1
  129. package/lib/node/index.mjs +5 -24
  130. package/lib/node/index.mjs.map +1 -1
  131. package/package.json +32 -37
  132. package/src/browser/setupWorker/setupWorker.ts +6 -0
  133. package/src/browser/setupWorker/start/createStartHandler.ts +0 -8
  134. package/src/core/graphql.ts +24 -16
  135. package/src/core/handlers/GraphQLHandler.test.ts +15 -0
  136. package/src/core/handlers/GraphQLHandler.ts +8 -5
  137. package/src/core/handlers/RequestHandler.ts +37 -13
  138. package/src/core/http.ts +27 -14
  139. package/src/core/index.ts +3 -0
  140. package/src/core/utils/getResponse.ts +12 -6
  141. package/src/core/utils/handleRequest.test.ts +20 -0
  142. package/src/core/utils/handleRequest.ts +4 -3
@@ -160,6 +160,7 @@ describe('parse', () => {
160
160
  })
161
161
 
162
162
  expect(await handler.parse({ request })).toEqual({
163
+ cookies: {},
163
164
  match: {
164
165
  matches: true,
165
166
  params: {
@@ -188,6 +189,7 @@ describe('parse', () => {
188
189
  })
189
190
 
190
191
  expect(await handler.parse({ request })).toEqual({
192
+ cookies: {},
191
193
  match: {
192
194
  matches: true,
193
195
  params: {
@@ -215,6 +217,7 @@ describe('parse', () => {
215
217
  })
216
218
 
217
219
  expect(await handler.parse({ request })).toEqual({
220
+ cookies: {},
218
221
  match: {
219
222
  matches: true,
220
223
  params: {
@@ -243,6 +246,7 @@ describe('parse', () => {
243
246
  })
244
247
 
245
248
  expect(await handler.parse({ request })).toEqual({
249
+ cookies: {},
246
250
  match: {
247
251
  matches: true,
248
252
  params: {
@@ -272,6 +276,7 @@ describe('parse', () => {
272
276
  })
273
277
 
274
278
  expect(await handler.parse({ request })).toEqual({
279
+ cookies: {},
275
280
  match: {
276
281
  matches: true,
277
282
  params: {
@@ -300,6 +305,7 @@ describe('parse', () => {
300
305
  })
301
306
 
302
307
  expect(await handler.parse({ request })).toEqual({
308
+ cookies: {},
303
309
  match: {
304
310
  matches: true,
305
311
  params: {
@@ -327,6 +333,7 @@ describe('parse', () => {
327
333
  })
328
334
 
329
335
  expect(await handler.parse({ request })).toEqual({
336
+ cookies: {},
330
337
  match: {
331
338
  matches: true,
332
339
  params: {
@@ -355,6 +362,7 @@ describe('parse', () => {
355
362
  })
356
363
 
357
364
  expect(await handler.parse({ request })).toEqual({
365
+ cookies: {},
358
366
  match: {
359
367
  matches: true,
360
368
  params: {
@@ -393,6 +401,7 @@ describe('parse', () => {
393
401
  ),
394
402
  }),
395
403
  ).resolves.toEqual({
404
+ cookies: {},
396
405
  match: {
397
406
  matches: true,
398
407
  params: {},
@@ -418,6 +427,7 @@ describe('parse', () => {
418
427
  ),
419
428
  }),
420
429
  ).resolves.toEqual({
430
+ cookies: {},
421
431
  match: {
422
432
  matches: true,
423
433
  params: {},
@@ -452,6 +462,7 @@ describe('parse', () => {
452
462
  ),
453
463
  }),
454
464
  ).resolves.toEqual({
465
+ cookies: {},
455
466
  match: {
456
467
  matches: false,
457
468
  params: {},
@@ -471,6 +482,7 @@ describe('parse', () => {
471
482
  ),
472
483
  }),
473
484
  ).resolves.toEqual({
485
+ cookies: {},
474
486
  match: {
475
487
  matches: false,
476
488
  params: {},
@@ -499,6 +511,7 @@ describe('parse', () => {
499
511
  ),
500
512
  }),
501
513
  ).resolves.toEqual({
514
+ cookies: {},
502
515
  match: {
503
516
  matches: false,
504
517
  params: {},
@@ -518,6 +531,7 @@ describe('parse', () => {
518
531
  ),
519
532
  }),
520
533
  ).resolves.toEqual({
534
+ cookies: {},
521
535
  match: {
522
536
  matches: false,
523
537
  params: {},
@@ -726,6 +740,7 @@ describe('run', () => {
726
740
 
727
741
  expect(result!.handler).toEqual(handler)
728
742
  expect(result!.parsedResult).toEqual({
743
+ cookies: {},
729
744
  match: {
730
745
  matches: true,
731
746
  params: {
@@ -24,6 +24,7 @@ import { getAllRequestCookies } from '../utils/request/getRequestCookies'
24
24
  export type ExpectedOperationTypeNode = OperationTypeNode | 'all'
25
25
  export type GraphQLHandlerNameSelector = DocumentNode | RegExp | string
26
26
 
27
+ export type GraphQLQuery = Record<string, any>
27
28
  export type GraphQLVariables = Record<string, any>
28
29
 
29
30
  export interface GraphQLHandlerInfo extends RequestHandlerDefaultInfo {
@@ -33,6 +34,7 @@ export interface GraphQLHandlerInfo extends RequestHandlerDefaultInfo {
33
34
 
34
35
  export type GraphQLRequestParsedResult = {
35
36
  match: Match
37
+ cookies: Record<string, string>
36
38
  } & (
37
39
  | ParsedGraphQLRequest<GraphQLVariables>
38
40
  /**
@@ -165,8 +167,10 @@ export class GraphQLHandler extends RequestHandler<
165
167
  * need to parse it since there's no case where we would handle this
166
168
  */
167
169
  const match = matchRequestUrl(new URL(args.request.url), this.endpoint)
170
+ const cookies = getAllRequestCookies(args.request)
171
+
168
172
  if (!match.matches) {
169
- return { match }
173
+ return { match, cookies }
170
174
  }
171
175
 
172
176
  const parsedResult = await this.parseGraphQLRequestOrGetFromCache(
@@ -174,11 +178,12 @@ export class GraphQLHandler extends RequestHandler<
174
178
  )
175
179
 
176
180
  if (typeof parsedResult === 'undefined') {
177
- return { match }
181
+ return { match, cookies }
178
182
  }
179
183
 
180
184
  return {
181
185
  match,
186
+ cookies,
182
187
  query: parsedResult.query,
183
188
  operationType: parsedResult.operationType,
184
189
  operationName: parsedResult.operationName,
@@ -224,13 +229,11 @@ Consider naming this operation or using "graphql.operation()" request handler to
224
229
  request: Request
225
230
  parsedResult: GraphQLRequestParsedResult
226
231
  }) {
227
- const cookies = getAllRequestCookies(args.request)
228
-
229
232
  return {
230
233
  query: args.parsedResult.query || '',
231
234
  operationName: args.parsedResult.operationName || '',
232
235
  variables: args.parsedResult.variables || {},
233
- cookies,
236
+ cookies: args.parsedResult.cookies,
234
237
  }
235
238
  }
236
239
 
@@ -36,23 +36,28 @@ export interface RequestHandlerInternalInfo {
36
36
  }
37
37
 
38
38
  export type ResponseResolverReturnType<
39
- BodyType extends DefaultBodyType = undefined,
39
+ ResponseBodyType extends DefaultBodyType = undefined,
40
40
  > =
41
- | ([BodyType] extends [undefined] ? Response : StrictResponse<BodyType>)
41
+ | ([ResponseBodyType] extends [undefined]
42
+ ? Response
43
+ : StrictResponse<ResponseBodyType>)
42
44
  | undefined
43
45
  | void
44
46
 
45
47
  export type MaybeAsyncResponseResolverReturnType<
46
- BodyType extends DefaultBodyType,
47
- > = MaybePromise<ResponseResolverReturnType<BodyType>>
48
+ ResponseBodyType extends DefaultBodyType,
49
+ > = MaybePromise<ResponseResolverReturnType<ResponseBodyType>>
48
50
 
49
- export type AsyncResponseResolverReturnType<BodyType extends DefaultBodyType> =
50
- | MaybeAsyncResponseResolverReturnType<BodyType>
51
+ export type AsyncResponseResolverReturnType<
52
+ ResponseBodyType extends DefaultBodyType,
53
+ > = MaybePromise<
54
+ | ResponseResolverReturnType<ResponseBodyType>
51
55
  | Generator<
52
- MaybeAsyncResponseResolverReturnType<BodyType>,
53
- MaybeAsyncResponseResolverReturnType<BodyType>,
54
- MaybeAsyncResponseResolverReturnType<BodyType>
56
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>,
57
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>,
58
+ MaybeAsyncResponseResolverReturnType<ResponseBodyType>
55
59
  >
60
+ >
56
61
 
57
62
  export type ResponseResolverInfo<
58
63
  ResolverExtraInfo extends Record<string, unknown>,
@@ -88,6 +93,7 @@ export interface RequestHandlerExecutionResult<
88
93
  handler: RequestHandler
89
94
  parsedResult?: ParsedResult
90
95
  request: Request
96
+ requestId: string
91
97
  response?: Response
92
98
  }
93
99
 
@@ -215,6 +221,7 @@ export abstract class RequestHandler<
215
221
  */
216
222
  public async run(args: {
217
223
  request: StrictRequest<any>
224
+ requestId: string
218
225
  resolutionContext?: ResponseResolutionContext
219
226
  }): Promise<RequestHandlerExecutionResult<ParsedResult> | null> {
220
227
  if (this.isUsed && this.options?.once) {
@@ -258,15 +265,30 @@ export abstract class RequestHandler<
258
265
  request: args.request,
259
266
  parsedResult,
260
267
  })
261
- const mockedResponse = (await executeResolver({
262
- ...resolverExtras,
263
- request: args.request,
264
- })) as Response
268
+
269
+ const mockedResponsePromise = (
270
+ executeResolver({
271
+ ...resolverExtras,
272
+ requestId: args.requestId,
273
+ request: args.request,
274
+ }) as Promise<Response>
275
+ ).catch((errorOrResponse) => {
276
+ // Allow throwing a Response instance in a response resolver.
277
+ if (errorOrResponse instanceof Response) {
278
+ return errorOrResponse
279
+ }
280
+
281
+ // Otherwise, throw the error as-is.
282
+ throw errorOrResponse
283
+ })
284
+
285
+ const mockedResponse = await mockedResponsePromise
265
286
 
266
287
  const executionResult = this.createExecutionResult({
267
288
  // Pass the cloned request to the result so that logging
268
289
  // and other consumers could read its body once more.
269
290
  request: requestClone,
291
+ requestId: args.requestId,
270
292
  response: mockedResponse,
271
293
  parsedResult,
272
294
  })
@@ -325,12 +347,14 @@ export abstract class RequestHandler<
325
347
 
326
348
  private createExecutionResult(args: {
327
349
  request: Request
350
+ requestId: string
328
351
  parsedResult: ParsedResult
329
352
  response?: Response
330
353
  }): RequestHandlerExecutionResult<ParsedResult> {
331
354
  return {
332
355
  handler: this,
333
356
  request: args.request,
357
+ requestId: args.requestId,
334
358
  response: args.response,
335
359
  parsedResult: args.parsedResult,
336
360
  }
package/src/core/http.ts CHANGED
@@ -10,22 +10,35 @@ import {
10
10
  } from './handlers/HttpHandler'
11
11
  import type { Path, PathParams } from './utils/matching/matchRequestUrl'
12
12
 
13
+ export type HttpRequestHandler = <
14
+ Params extends PathParams<keyof Params> = PathParams,
15
+ RequestBodyType extends DefaultBodyType = DefaultBodyType,
16
+ // Response body type MUST be undefined by default.
17
+ // This is how we can distinguish between a handler that
18
+ // returns plain "Response" and the one returning "HttpResponse"
19
+ // to enforce a stricter response body type.
20
+ ResponseBodyType extends DefaultBodyType = undefined,
21
+ RequestPath extends Path = Path,
22
+ >(
23
+ path: RequestPath,
24
+ resolver: HttpResponseResolver<Params, RequestBodyType, ResponseBodyType>,
25
+ options?: RequestHandlerOptions,
26
+ ) => HttpHandler
27
+
28
+ export type HttpResponseResolver<
29
+ Params extends PathParams<keyof Params> = PathParams,
30
+ RequestBodyType extends DefaultBodyType = DefaultBodyType,
31
+ ResponseBodyType extends DefaultBodyType = DefaultBodyType,
32
+ > = ResponseResolver<
33
+ HttpRequestResolverExtras<Params>,
34
+ RequestBodyType,
35
+ ResponseBodyType
36
+ >
37
+
13
38
  function createHttpHandler<Method extends HttpMethods | RegExp>(
14
39
  method: Method,
15
- ) {
16
- return <
17
- Params extends PathParams<keyof Params> = PathParams,
18
- RequestBodyType extends DefaultBodyType = DefaultBodyType,
19
- ResponseBodyType extends DefaultBodyType = undefined,
20
- >(
21
- path: Path,
22
- resolver: ResponseResolver<
23
- HttpRequestResolverExtras<Params>,
24
- RequestBodyType,
25
- ResponseBodyType
26
- >,
27
- options: RequestHandlerOptions = {},
28
- ) => {
40
+ ): HttpRequestHandler {
41
+ return (path, resolver, options = {}) => {
29
42
  return new HttpHandler(method, path, resolver, options)
30
43
  }
31
44
  }
package/src/core/index.ts CHANGED
@@ -34,12 +34,15 @@ export type {
34
34
  RequestQuery,
35
35
  HttpRequestParsedResult,
36
36
  } from './handlers/HttpHandler'
37
+ export type { HttpResponseResolver } from './http'
37
38
 
38
39
  export type {
40
+ GraphQLQuery,
39
41
  GraphQLVariables,
40
42
  GraphQLRequestBody,
41
43
  GraphQLJsonRequestBody,
42
44
  } from './handlers/GraphQLHandler'
45
+ export type { GraphQLResponseResolver } from './graphql'
43
46
 
44
47
  export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl'
45
48
  export type { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest'
@@ -16,16 +16,22 @@ export interface ResponseResolutionContext {
16
16
  /**
17
17
  * Returns a mocked response for a given request using following request handlers.
18
18
  */
19
- export const getResponse = async <Handler extends Array<RequestHandler>>(
20
- request: Request,
21
- handlers: Handler,
22
- resolutionContext?: ResponseResolutionContext,
23
- ): Promise<ResponseLookupResult | null> => {
19
+ export const getResponse = async <Handler extends Array<RequestHandler>>({
20
+ request,
21
+ requestId,
22
+ handlers,
23
+ resolutionContext,
24
+ }: {
25
+ request: Request
26
+ requestId: string
27
+ handlers: Handler
28
+ resolutionContext?: ResponseResolutionContext
29
+ }): Promise<ResponseLookupResult | null> => {
24
30
  let matchingHandler: RequestHandler | null = null
25
31
  let result: RequestHandlerExecutionResult<any> | null = null
26
32
 
27
33
  for (const handler of handlers) {
28
- result = await handler.run({ request, resolutionContext })
34
+ result = await handler.run({ request, requestId, resolutionContext })
29
35
 
30
36
  // If the handler produces some result for this request,
31
37
  // it automatically becomes matching.
@@ -355,6 +355,26 @@ it('returns undefined without warning on a passthrough request', async () => {
355
355
  expect(handleRequestOptions.onMockedResponse).not.toHaveBeenCalled()
356
356
  })
357
357
 
358
+ it('calls the handler with the requestId', async () => {
359
+ const { emitter } = setup()
360
+
361
+ const requestId = uuidv4()
362
+ const request = new Request(new URL('http://localhost/user'))
363
+ const handlerFn = vi.fn()
364
+ const handlers: Array<RequestHandler> = [http.get('/user', handlerFn)]
365
+
366
+ await handleRequest(
367
+ request,
368
+ requestId,
369
+ handlers,
370
+ options,
371
+ emitter,
372
+ handleRequestOptions,
373
+ )
374
+
375
+ expect(handlerFn).toHaveBeenCalledWith(expect.objectContaining({ requestId }))
376
+ })
377
+
358
378
  it('marks the first matching one-time handler as used', async () => {
359
379
  const { emitter } = setup()
360
380
 
@@ -61,11 +61,12 @@ export async function handleRequest(
61
61
 
62
62
  // Resolve a mocked response from the list of request handlers.
63
63
  const lookupResult = await until(() => {
64
- return getResponse(
64
+ return getResponse({
65
65
  request,
66
+ requestId,
66
67
  handlers,
67
- handleRequestOptions?.resolutionContext,
68
- )
68
+ resolutionContext: handleRequestOptions?.resolutionContext,
69
+ })
69
70
  })
70
71
 
71
72
  if (lookupResult.error) {