22
33import { http , type HttpHandler , HttpResponse , type HttpResponseResolver , type RequestHandlerOptions as RequestHandlerOptions2 } from 'msw' ;
44
5- import type { GetFooResponses , PostFooData , PostFooResponses } from './types.gen' ;
5+ import type { ClientOptions , GetFooResponses , PostFooData , PostFooResponses , PutFooResponses } from './types.gen' ;
66
77export type RequestHandlerOptions = RequestHandlerOptions2 & {
8- baseUrl ?: string ;
8+ baseUrl ?: ClientOptions [ 'baseUrl' ] ;
99 responseFallback ?: 'error' | 'passthrough' ;
1010} ;
1111
@@ -66,6 +66,31 @@ export function handlePostFoo(response?: {
6666 } , options ) ;
6767}
6868
69+ /**
70+ * Handler for the `PUT /foo` operation.
71+ */
72+ export function handlePutFoo ( response ?: {
73+ body : PutFooResponses [ 200 ] ;
74+ status ?: 200 ;
75+ } | HttpResponseResolver < never , never > , options ?: RequestHandlerOptions ) : HttpHandler {
76+ return http . put < never , never > ( `${ options ?. baseUrl ?? '*' } /foo` , info => {
77+ if ( typeof response === 'function' ) {
78+ return response ( info ) ;
79+ }
80+ const body = response ?. body ;
81+ if ( body !== undefined ) {
82+ return HttpResponse . json ( body , { status : response ?. status ?? 200 } ) ;
83+ }
84+ if ( options ?. responseFallback === 'passthrough' ) {
85+ return ;
86+ }
87+ return new Response ( 'Not Implemented' , {
88+ status : 501 ,
89+ statusText : 'Not Implemented'
90+ } ) ;
91+ } , options ) ;
92+ }
93+
6994export type MswHandlerFactories = {
7095 /**
7196 * Handler for the `GET /foo` operation.
@@ -75,6 +100,10 @@ export type MswHandlerFactories = {
75100 * Handler for the `POST /foo` operation.
76101 */
77102 postFoo : typeof handlePostFoo ;
103+ /**
104+ * Handler for the `PUT /foo` operation.
105+ */
106+ putFoo : typeof handlePutFoo ;
78107} ;
79108
80109export type CreateMswHandlersResult = {
@@ -93,7 +122,8 @@ export function createMswHandlers(config: RequestHandlerOptions = {}): CreateMsw
93122 }
94123 const pick : CreateMswHandlersResult [ 'pick' ] = {
95124 getFoo : wrap ( handleGetFoo ) ,
96- postFoo : wrap ( handlePostFoo )
125+ postFoo : wrap ( handlePostFoo ) ,
126+ putFoo : wrap ( handlePutFoo )
97127 } ;
98128 const all : CreateMswHandlersResult [ 'all' ] = ( options = { } ) => {
99129 type OverrideValue < R > = R | [
@@ -104,7 +134,11 @@ export function createMswHandlers(config: RequestHandlerOptions = {}): CreateMsw
104134 return Array . isArray ( override ) ? fn ( ...override ) : fn ( override ) ;
105135 }
106136 const overrides = options . pick ?? { } ;
107- return [ invoke ( pick . getFoo , overrides . getFoo ) , invoke ( pick . postFoo , overrides . postFoo ) ] ;
137+ return [
138+ invoke ( pick . getFoo , overrides . getFoo ) ,
139+ invoke ( pick . postFoo , overrides . postFoo ) ,
140+ invoke ( pick . putFoo , overrides . putFoo )
141+ ] ;
108142 } ;
109143 return { all, pick } ;
110144}
0 commit comments