msw 2.0.14 → 2.1.1

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 (135) 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-JB4bsrLF.d.ts → GraphQLHandler-2guuZL5R.d.ts} +1 -1
  9. package/lib/core/{GraphQLHandler-mT-MmgeB.d.mts → GraphQLHandler-fe5IYUg3.d.mts} +1 -1
  10. package/lib/core/HttpResponse.d.mts +1 -1
  11. package/lib/core/HttpResponse.d.ts +1 -1
  12. package/lib/core/{RequestHandler-rmY-HeFN.d.ts → RequestHandler-TRh8Eh4H.d.ts} +9 -1
  13. package/lib/core/{RequestHandler-YiqamK0M.d.mts → RequestHandler-nfjVJ8Tp.d.mts} +9 -1
  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 +2 -2
  25. package/lib/core/graphql.d.ts +2 -2
  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 +51 -77
  33. package/lib/core/handlers/GraphQLHandler.js.map +1 -1
  34. package/lib/core/handlers/GraphQLHandler.mjs +51 -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 +1 -1
  49. package/lib/core/http.d.ts +1 -1
  50. package/lib/core/index.d.mts +2 -2
  51. package/lib/core/index.d.ts +2 -2
  52. package/lib/core/sharedOptions.d.mts +1 -1
  53. package/lib/core/sharedOptions.d.ts +1 -1
  54. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  55. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  56. package/lib/core/utils/HttpResponse/decorators.js +7 -24
  57. package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
  58. package/lib/core/utils/HttpResponse/decorators.mjs +7 -26
  59. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
  60. package/lib/core/utils/getResponse.d.mts +1 -1
  61. package/lib/core/utils/getResponse.d.ts +1 -1
  62. package/lib/core/utils/getResponse.js +11 -26
  63. package/lib/core/utils/getResponse.js.map +1 -1
  64. package/lib/core/utils/getResponse.mjs +11 -26
  65. package/lib/core/utils/getResponse.mjs.map +1 -1
  66. package/lib/core/utils/handleRequest.d.mts +1 -1
  67. package/lib/core/utils/handleRequest.d.ts +1 -1
  68. package/lib/core/utils/handleRequest.js +49 -72
  69. package/lib/core/utils/handleRequest.js.map +1 -1
  70. package/lib/core/utils/handleRequest.mjs +49 -72
  71. package/lib/core/utils/handleRequest.mjs.map +1 -1
  72. package/lib/core/utils/internal/Disposable.js +3 -27
  73. package/lib/core/utils/internal/Disposable.js.map +1 -1
  74. package/lib/core/utils/internal/Disposable.mjs +3 -27
  75. package/lib/core/utils/internal/Disposable.mjs.map +1 -1
  76. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
  77. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  78. package/lib/core/utils/internal/parseGraphQLRequest.js +72 -112
  79. package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -1
  80. package/lib/core/utils/internal/parseGraphQLRequest.mjs +72 -113
  81. package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -1
  82. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  83. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  84. package/lib/core/utils/internal/parseMultipartData.js +3 -4
  85. package/lib/core/utils/internal/parseMultipartData.js.map +1 -1
  86. package/lib/core/utils/internal/parseMultipartData.mjs +3 -4
  87. package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -1
  88. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  89. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  90. package/lib/core/utils/internal/tryCatch.js +1 -1
  91. package/lib/core/utils/internal/tryCatch.js.map +1 -1
  92. package/lib/core/utils/internal/tryCatch.mjs +1 -1
  93. package/lib/core/utils/internal/tryCatch.mjs.map +1 -1
  94. package/lib/core/utils/logging/serializeRequest.js +9 -31
  95. package/lib/core/utils/logging/serializeRequest.js.map +1 -1
  96. package/lib/core/utils/logging/serializeRequest.mjs +9 -31
  97. package/lib/core/utils/logging/serializeRequest.mjs.map +1 -1
  98. package/lib/core/utils/logging/serializeResponse.js +11 -33
  99. package/lib/core/utils/logging/serializeResponse.js.map +1 -1
  100. package/lib/core/utils/logging/serializeResponse.mjs +11 -33
  101. package/lib/core/utils/logging/serializeResponse.mjs.map +1 -1
  102. package/lib/core/utils/request/getRequestCookies.js +9 -18
  103. package/lib/core/utils/request/getRequestCookies.js.map +1 -1
  104. package/lib/core/utils/request/getRequestCookies.mjs +9 -20
  105. package/lib/core/utils/request/getRequestCookies.mjs.map +1 -1
  106. package/lib/core/utils/request/onUnhandledRequest.d.mts +1 -1
  107. package/lib/core/utils/request/onUnhandledRequest.d.ts +1 -1
  108. package/lib/core/utils/request/onUnhandledRequest.js +62 -84
  109. package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
  110. package/lib/core/utils/request/onUnhandledRequest.mjs +62 -84
  111. package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
  112. package/lib/core/utils/request/readResponseCookies.js +1 -18
  113. package/lib/core/utils/request/readResponseCookies.js.map +1 -1
  114. package/lib/core/utils/request/readResponseCookies.mjs +1 -20
  115. package/lib/core/utils/request/readResponseCookies.mjs.map +1 -1
  116. package/lib/iife/index.js +678 -958
  117. package/lib/iife/index.js.map +1 -1
  118. package/lib/mockServiceWorker.js +2 -2
  119. package/lib/native/index.js +5 -23
  120. package/lib/native/index.js.map +1 -1
  121. package/lib/native/index.mjs +5 -24
  122. package/lib/native/index.mjs.map +1 -1
  123. package/lib/node/index.js +5 -23
  124. package/lib/node/index.js.map +1 -1
  125. package/lib/node/index.mjs +5 -24
  126. package/lib/node/index.mjs.map +1 -1
  127. package/package.json +32 -37
  128. package/src/browser/setupWorker/setupWorker.ts +6 -0
  129. package/src/browser/setupWorker/start/createStartHandler.ts +0 -8
  130. package/src/core/handlers/GraphQLHandler.test.ts +7 -3
  131. package/src/core/handlers/HttpHandler.test.ts +7 -2
  132. package/src/core/handlers/RequestHandler.ts +24 -4
  133. package/src/core/utils/getResponse.ts +12 -6
  134. package/src/core/utils/handleRequest.test.ts +20 -0
  135. package/src/core/utils/handleRequest.ts +4 -3
@@ -64,6 +64,7 @@ export type ResponseResolverInfo<
64
64
  RequestBodyType extends DefaultBodyType = DefaultBodyType,
65
65
  > = {
66
66
  request: StrictRequest<RequestBodyType>
67
+ requestId: string
67
68
  } & ResolverExtraInfo
68
69
 
69
70
  export type ResponseResolver<
@@ -93,6 +94,7 @@ export interface RequestHandlerExecutionResult<
93
94
  handler: RequestHandler
94
95
  parsedResult?: ParsedResult
95
96
  request: Request
97
+ requestId: string
96
98
  response?: Response
97
99
  }
98
100
 
@@ -220,6 +222,7 @@ export abstract class RequestHandler<
220
222
  */
221
223
  public async run(args: {
222
224
  request: StrictRequest<any>
225
+ requestId: string
223
226
  resolutionContext?: ResponseResolutionContext
224
227
  }): Promise<RequestHandlerExecutionResult<ParsedResult> | null> {
225
228
  if (this.isUsed && this.options?.once) {
@@ -263,15 +266,30 @@ export abstract class RequestHandler<
263
266
  request: args.request,
264
267
  parsedResult,
265
268
  })
266
- const mockedResponse = (await executeResolver({
267
- ...resolverExtras,
268
- request: args.request,
269
- })) as Response
269
+
270
+ const mockedResponsePromise = (
271
+ executeResolver({
272
+ ...resolverExtras,
273
+ requestId: args.requestId,
274
+ request: args.request,
275
+ }) as Promise<Response>
276
+ ).catch((errorOrResponse) => {
277
+ // Allow throwing a Response instance in a response resolver.
278
+ if (errorOrResponse instanceof Response) {
279
+ return errorOrResponse
280
+ }
281
+
282
+ // Otherwise, throw the error as-is.
283
+ throw errorOrResponse
284
+ })
285
+
286
+ const mockedResponse = await mockedResponsePromise
270
287
 
271
288
  const executionResult = this.createExecutionResult({
272
289
  // Pass the cloned request to the result so that logging
273
290
  // and other consumers could read its body once more.
274
291
  request: requestClone,
292
+ requestId: args.requestId,
275
293
  response: mockedResponse,
276
294
  parsedResult,
277
295
  })
@@ -330,12 +348,14 @@ export abstract class RequestHandler<
330
348
 
331
349
  private createExecutionResult(args: {
332
350
  request: Request
351
+ requestId: string
333
352
  parsedResult: ParsedResult
334
353
  response?: Response
335
354
  }): RequestHandlerExecutionResult<ParsedResult> {
336
355
  return {
337
356
  handler: this,
338
357
  request: args.request,
358
+ requestId: args.requestId,
339
359
  response: args.response,
340
360
  parsedResult: args.parsedResult,
341
361
  }
@@ -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) {