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.
- package/cli/index.js +11 -3
- package/cli/init.js +126 -73
- package/config/scripts/postinstall.js +8 -20
- package/lib/browser/index.js +111 -176
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +111 -179
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/{GraphQLHandler-SHlRCcy4.d.ts → GraphQLHandler-LZ8jH42-.d.ts} +4 -2
- package/lib/core/{GraphQLHandler-zlmUDnN6.d.mts → GraphQLHandler-c0pfLv8e.d.mts} +4 -2
- package/lib/core/HttpResponse.d.mts +1 -1
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/{RequestHandler-rBDJQrEf.d.ts → RequestHandler-SdFwV297.d.ts} +11 -4
- package/lib/core/{RequestHandler-vxZdj6Tw.d.mts → RequestHandler-hEwneHZE.d.mts} +11 -4
- package/lib/core/SetupApi.d.mts +1 -1
- package/lib/core/SetupApi.d.ts +1 -1
- package/lib/core/SetupApi.js +5 -0
- package/lib/core/SetupApi.js.map +1 -1
- package/lib/core/SetupApi.mjs +5 -0
- package/lib/core/SetupApi.mjs.map +1 -1
- package/lib/core/delay.js +24 -46
- package/lib/core/delay.js.map +1 -1
- package/lib/core/delay.mjs +24 -46
- package/lib/core/delay.mjs.map +1 -1
- package/lib/core/graphql.d.mts +11 -9
- package/lib/core/graphql.d.ts +11 -9
- package/lib/core/graphql.js +3 -19
- package/lib/core/graphql.js.map +1 -1
- package/lib/core/graphql.mjs +3 -21
- package/lib/core/graphql.mjs.map +1 -1
- package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
- package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
- package/lib/core/handlers/GraphQLHandler.js +52 -77
- package/lib/core/handlers/GraphQLHandler.js.map +1 -1
- package/lib/core/handlers/GraphQLHandler.mjs +52 -77
- package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
- package/lib/core/handlers/HttpHandler.d.mts +1 -1
- package/lib/core/handlers/HttpHandler.d.ts +1 -1
- package/lib/core/handlers/HttpHandler.js +29 -55
- package/lib/core/handlers/HttpHandler.js.map +1 -1
- package/lib/core/handlers/HttpHandler.mjs +29 -55
- package/lib/core/handlers/HttpHandler.mjs.map +1 -1
- package/lib/core/handlers/RequestHandler.d.mts +1 -1
- package/lib/core/handlers/RequestHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.js +79 -103
- package/lib/core/handlers/RequestHandler.js.map +1 -1
- package/lib/core/handlers/RequestHandler.mjs +79 -105
- package/lib/core/handlers/RequestHandler.mjs.map +1 -1
- package/lib/core/http.d.mts +13 -11
- package/lib/core/http.d.ts +13 -11
- package/lib/core/http.js.map +1 -1
- package/lib/core/http.mjs.map +1 -1
- package/lib/core/index.d.mts +4 -4
- package/lib/core/index.d.ts +4 -4
- package/lib/core/index.js.map +1 -1
- package/lib/core/index.mjs.map +1 -1
- package/lib/core/sharedOptions.d.mts +1 -1
- package/lib/core/sharedOptions.d.ts +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
- package/lib/core/utils/HttpResponse/decorators.js +7 -24
- package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
- package/lib/core/utils/HttpResponse/decorators.mjs +7 -26
- package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
- package/lib/core/utils/getResponse.d.mts +1 -1
- package/lib/core/utils/getResponse.d.ts +1 -1
- package/lib/core/utils/getResponse.js +11 -26
- package/lib/core/utils/getResponse.js.map +1 -1
- package/lib/core/utils/getResponse.mjs +11 -26
- package/lib/core/utils/getResponse.mjs.map +1 -1
- package/lib/core/utils/handleRequest.d.mts +1 -1
- package/lib/core/utils/handleRequest.d.ts +1 -1
- package/lib/core/utils/handleRequest.js +49 -72
- package/lib/core/utils/handleRequest.js.map +1 -1
- package/lib/core/utils/handleRequest.mjs +49 -72
- package/lib/core/utils/handleRequest.mjs.map +1 -1
- package/lib/core/utils/internal/Disposable.js +3 -27
- package/lib/core/utils/internal/Disposable.js.map +1 -1
- package/lib/core/utils/internal/Disposable.mjs +3 -27
- package/lib/core/utils/internal/Disposable.mjs.map +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
- package/lib/core/utils/internal/parseGraphQLRequest.js +72 -112
- package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.mjs +72 -113
- package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
- package/lib/core/utils/internal/parseMultipartData.js +3 -4
- package/lib/core/utils/internal/parseMultipartData.js.map +1 -1
- package/lib/core/utils/internal/parseMultipartData.mjs +3 -4
- package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -1
- package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
- package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
- package/lib/core/utils/internal/tryCatch.js +1 -1
- package/lib/core/utils/internal/tryCatch.js.map +1 -1
- package/lib/core/utils/internal/tryCatch.mjs +1 -1
- package/lib/core/utils/internal/tryCatch.mjs.map +1 -1
- package/lib/core/utils/logging/serializeRequest.js +9 -31
- package/lib/core/utils/logging/serializeRequest.js.map +1 -1
- package/lib/core/utils/logging/serializeRequest.mjs +9 -31
- package/lib/core/utils/logging/serializeRequest.mjs.map +1 -1
- package/lib/core/utils/logging/serializeResponse.js +11 -33
- package/lib/core/utils/logging/serializeResponse.js.map +1 -1
- package/lib/core/utils/logging/serializeResponse.mjs +11 -33
- package/lib/core/utils/logging/serializeResponse.mjs.map +1 -1
- package/lib/core/utils/request/getRequestCookies.js +9 -18
- package/lib/core/utils/request/getRequestCookies.js.map +1 -1
- package/lib/core/utils/request/getRequestCookies.mjs +9 -20
- package/lib/core/utils/request/getRequestCookies.mjs.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.d.mts +1 -1
- package/lib/core/utils/request/onUnhandledRequest.d.ts +1 -1
- package/lib/core/utils/request/onUnhandledRequest.js +62 -84
- package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.mjs +62 -84
- package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
- package/lib/core/utils/request/readResponseCookies.js +1 -18
- package/lib/core/utils/request/readResponseCookies.js.map +1 -1
- package/lib/core/utils/request/readResponseCookies.mjs +1 -20
- package/lib/core/utils/request/readResponseCookies.mjs.map +1 -1
- package/lib/iife/index.js +679 -958
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +2 -2
- package/lib/native/index.js +5 -23
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +5 -24
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.js +5 -23
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +5 -24
- package/lib/node/index.mjs.map +1 -1
- package/package.json +32 -37
- package/src/browser/setupWorker/setupWorker.ts +6 -0
- package/src/browser/setupWorker/start/createStartHandler.ts +0 -8
- package/src/core/graphql.ts +24 -16
- package/src/core/handlers/GraphQLHandler.test.ts +15 -0
- package/src/core/handlers/GraphQLHandler.ts +8 -5
- package/src/core/handlers/RequestHandler.ts +37 -13
- package/src/core/http.ts +27 -14
- package/src/core/index.ts +3 -0
- package/src/core/utils/getResponse.ts +12 -6
- package/src/core/utils/handleRequest.test.ts +20 -0
- 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
|
-
|
|
39
|
+
ResponseBodyType extends DefaultBodyType = undefined,
|
|
40
40
|
> =
|
|
41
|
-
| ([
|
|
41
|
+
| ([ResponseBodyType] extends [undefined]
|
|
42
|
+
? Response
|
|
43
|
+
: StrictResponse<ResponseBodyType>)
|
|
42
44
|
| undefined
|
|
43
45
|
| void
|
|
44
46
|
|
|
45
47
|
export type MaybeAsyncResponseResolverReturnType<
|
|
46
|
-
|
|
47
|
-
> = MaybePromise<ResponseResolverReturnType<
|
|
48
|
+
ResponseBodyType extends DefaultBodyType,
|
|
49
|
+
> = MaybePromise<ResponseResolverReturnType<ResponseBodyType>>
|
|
48
50
|
|
|
49
|
-
export type AsyncResponseResolverReturnType<
|
|
50
|
-
|
|
51
|
+
export type AsyncResponseResolverReturnType<
|
|
52
|
+
ResponseBodyType extends DefaultBodyType,
|
|
53
|
+
> = MaybePromise<
|
|
54
|
+
| ResponseResolverReturnType<ResponseBodyType>
|
|
51
55
|
| Generator<
|
|
52
|
-
MaybeAsyncResponseResolverReturnType<
|
|
53
|
-
MaybeAsyncResponseResolverReturnType<
|
|
54
|
-
MaybeAsyncResponseResolverReturnType<
|
|
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
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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) {
|