@@ -7,8 +7,8 @@ type ContentTypes =
7
7
| 'blob'
8
8
| 'void'
9
9
10
- interface UnknownHeaders extends Record < string , string > { }
11
- interface UnknownPayload {
10
+ export interface Headers extends Record < string , string > { }
11
+ export interface Payload {
12
12
json ?: unknown
13
13
params ?: Record < string , unknown >
14
14
}
@@ -22,69 +22,61 @@ export interface ResponseBody extends Promise<Response> {
22
22
void ( ) : Promise < void >
23
23
}
24
24
25
- export interface Options < Payload extends UnknownPayload > extends RequestInit {
25
+ export interface Options < P extends Payload > extends RequestInit {
26
26
/** Resource URL */
27
27
resource ?: string
28
28
/** Object that will be stringified with `JSON.stringify` */
29
- json ?: Payload [ 'json' ]
29
+ json ?: P [ 'json' ]
30
30
/** Object that can be passed to `serialize` */
31
- params ?: Payload [ 'params' ]
31
+ params ?: P [ 'params' ]
32
32
/** Throw `TimeoutError` if timeout is passed */
33
33
timeout ?: number
34
34
/** String that will prepended to `resource` in `fetch` instance */
35
35
prefixUrl ?: string
36
36
/** Request headers */
37
- headers ?: UnknownHeaders
37
+ headers ?: Headers
38
38
/**
39
39
* `node-fetch` v3 option, default is 10mb
40
40
* @url https://github.com/exah/ya-fetch#node-js-support
41
41
*/
42
42
highWaterMark ?: number
43
43
/** Request headers, can be async */
44
- getHeaders ?(
45
- resource : string ,
46
- init : RequestInit
47
- ) : UnknownHeaders | Promise < UnknownHeaders >
44
+ getHeaders ?( resource : string , init : RequestInit ) : Headers | Promise < Headers >
48
45
/** Custom params serializer, default to `URLSearchParams` */
49
- serialize ?( params : Payload [ 'params' ] ) : URLSearchParams | string
46
+ serialize ?( params : P [ 'params' ] ) : URLSearchParams | string
50
47
/** Response handler, must handle status codes or throw `ResponseError` */
51
48
onResponse ?(
52
49
response : Response ,
53
- options : Options < Payload >
50
+ options : Options < P >
54
51
) : Response | Promise < Response >
55
52
/** Response handler with success status codes 200-299 */
56
53
onSuccess ?(
57
54
response : Response ,
58
- options : Options < Payload >
55
+ options : Options < P >
59
56
) : Response | Promise < Response >
60
57
/** Error handler. Throw passed `error` for unhandled cases, throw custom errors, or return the new `Response` */
61
58
onFailure ?(
62
59
error : ResponseError | AbortError | TimeoutError | TypeError | Error ,
63
- options : Options < Payload >
60
+ options : Options < P >
64
61
) : Response | Promise < Response >
65
62
/** Transform parsed JSON from response */
66
63
onJSON ?( input : unknown ) : unknown
67
64
}
68
65
69
- export interface Instance < Payload extends UnknownPayload > {
70
- ( resource : string , options ?: Options < Payload > ) : ResponseBody
71
-
72
- create < Payload extends UnknownPayload > (
73
- options ?: Options < Payload >
74
- ) : Instance < Payload >
75
- extend < P extends Payload > ( options ?: Options < P > ) : Instance < P >
76
-
77
- get < P extends Payload > ( resource : string , options ?: Options < P > ) : ResponseBody
78
- post < P extends Payload > ( resource : string , options ?: Options < P > ) : ResponseBody
79
- put < P extends Payload > ( resource : string , options ?: Options < P > ) : ResponseBody
80
- patch < P extends Payload > ( resource : string , options ?: Options < P > ) : ResponseBody
81
- head < P extends Payload > ( resource : string , options ?: Options < P > ) : ResponseBody
82
- delete < P extends Payload > (
83
- resource : string ,
84
- options ?: Options < P >
85
- ) : ResponseBody
86
-
87
- options : Options < Payload >
66
+ export interface Instance < P extends Payload > {
67
+ ( resource : string , options ?: Options < P > ) : ResponseBody
68
+
69
+ create < P extends Payload > ( options ?: Options < P > ) : Instance < P >
70
+ extend < T extends P > ( options ?: Options < T > ) : Instance < T >
71
+
72
+ get < T extends P > ( resource : string , options ?: Options < T > ) : ResponseBody
73
+ post < T extends P > ( resource : string , options ?: Options < T > ) : ResponseBody
74
+ put < T extends P > ( resource : string , options ?: Options < T > ) : ResponseBody
75
+ patch < T extends P > ( resource : string , options ?: Options < T > ) : ResponseBody
76
+ head < T extends P > ( resource : string , options ?: Options < T > ) : ResponseBody
77
+ delete < T extends P > ( resource : string , options ?: Options < T > ) : ResponseBody
78
+
79
+ options : Options < P >
88
80
}
89
81
90
82
type ResponseError = Error & {
@@ -115,7 +107,7 @@ const ERROR_NAMES = {
115
107
Abort : 'AbortError' ,
116
108
} as const
117
109
118
- const DEFAULTS : Options < UnknownPayload > = {
110
+ const DEFAULTS : Options < Payload > = {
119
111
prefixUrl : '' ,
120
112
credentials : 'same-origin' ,
121
113
highWaterMark : 1024 * 1024 * 10 , // 10mb
@@ -181,9 +173,7 @@ function isTimeoutError(error: any): error is TimeoutError {
181
173
return error . name === ERROR_NAMES . Timeout
182
174
}
183
175
184
- function request < Payload extends UnknownPayload > (
185
- baseOptions : Options < Payload >
186
- ) : ResponseBody {
176
+ function request < P extends Payload > ( baseOptions : Options < P > ) : ResponseBody {
187
177
const opts = mergeOptions ( DEFAULTS , baseOptions )
188
178
const query = keys ( opts . params ) . length
189
179
? '?' + opts . serialize ( opts . params )
@@ -251,19 +241,17 @@ function request<Payload extends UnknownPayload>(
251
241
} , promise as ResponseBody )
252
242
}
253
243
254
- function create < Payload extends UnknownPayload > (
255
- baseOptions ?: Options < Payload >
256
- ) : Instance < Payload > {
257
- const extend = < T extends Payload > ( options : Options < T > ) =>
244
+ function create < P extends Payload > ( baseOptions ?: Options < P > ) : Instance < P > {
245
+ const extend = < T extends P > ( options : Options < T > ) =>
258
246
create < T > ( mergeOptions ( instance . options , options ) )
259
247
260
248
const createMethod =
261
249
( method : RequestMethods ) =>
262
- < T extends Payload > (
250
+ < T extends P > (
263
251
resource : string ,
264
252
options ?: Omit < Options < T > , 'method' | 'resource' >
265
253
) =>
266
- request < Payload & T > (
254
+ request < P & T > (
267
255
mergeOptions ( instance . options , merge ( { resource, method } , options ) )
268
256
)
269
257
0 commit comments