@@ -7,6 +7,8 @@ const DEFAULT_HEADERS = {
7
7
interface ClientOptions extends RequestInit {
8
8
/** set the common root URL for all API requests */
9
9
baseUrl ?: string ;
10
+ /** custom fetch (defaults to globalThis.fetch) */
11
+ fetch ?: typeof fetch ;
10
12
}
11
13
export interface BaseParams {
12
14
params ?: { query ?: Record < string , unknown > } ;
@@ -51,17 +53,19 @@ export type FetchResponse<T> =
51
53
| { data : T extends { responses : any } ? NonNullable < FilterKeys < Success < T [ "responses" ] > , JSONLike > > : unknown ; error ?: never ; response : Response }
52
54
| { data ?: never ; error : T extends { responses : any } ? NonNullable < FilterKeys < Error < T [ "responses" ] > , JSONLike > > : unknown ; response : Response } ;
53
55
54
- export default function createClient < Paths extends { } > ( options ?: ClientOptions ) {
56
+ export default function createClient < Paths extends { } > ( clientOptions : ClientOptions = { } ) {
57
+ const { fetch = globalThis . fetch , ...options } = clientOptions ;
58
+
55
59
const defaultHeaders = new Headers ( {
56
60
...DEFAULT_HEADERS ,
57
- ...( options ? .headers ?? { } ) ,
61
+ ...( options . headers ?? { } ) ,
58
62
} ) ;
59
63
60
64
async function coreFetch < P extends keyof Paths , M extends HttpMethod > ( url : P , fetchOptions : FetchOptions < M extends keyof Paths [ P ] ? Paths [ P ] [ M ] : never > ) : Promise < FetchResponse < M extends keyof Paths [ P ] ? Paths [ P ] [ M ] : unknown > > {
61
65
const { headers, body : requestBody , params = { } , querySerializer = ( q : QuerySerializer < M extends keyof Paths [ P ] ? Paths [ P ] [ M ] : never > ) => new URLSearchParams ( q as any ) . toString ( ) , ...init } = fetchOptions || { } ;
62
66
63
67
// URL
64
- let finalURL = `${ options ? .baseUrl ?? "" } ${ url as string } ` ;
68
+ let finalURL = `${ options . baseUrl ?? "" } ${ url as string } ` ;
65
69
if ( ( params as any ) . path ) {
66
70
for ( const [ k , v ] of Object . entries ( ( params as any ) . path ) ) finalURL = finalURL . replace ( `{${ k } }` , encodeURIComponent ( String ( v ) ) ) ;
67
71
}
0 commit comments