@@ -34,7 +34,7 @@ export default function createClient(clientOptions) {
34
34
} = { ...clientOptions } ;
35
35
requestInitExt = supportsRequestInitExt ( ) ? requestInitExt : undefined ;
36
36
baseUrl = removeTrailingSlash ( baseUrl ) ;
37
- const middlewares = [ ] ;
37
+ const globalMiddlewares = [ ] ;
38
38
39
39
/**
40
40
* Per-request fetch (keeps settings created in createClient()
@@ -52,6 +52,7 @@ export default function createClient(clientOptions) {
52
52
querySerializer : requestQuerySerializer ,
53
53
bodySerializer = globalBodySerializer ?? defaultBodySerializer ,
54
54
body,
55
+ middleware : requestMiddlewares = [ ] ,
55
56
...init
56
57
} = fetchOptions || { } ;
57
58
let finalBaseUrl = baseUrl ;
@@ -99,6 +100,9 @@ export default function createClient(clientOptions) {
99
100
params . header ,
100
101
) ;
101
102
103
+ // Client level middleware take priority over request-level middleware
104
+ const finalMiddlewares = [ ...globalMiddlewares , ...requestMiddlewares ] ;
105
+
102
106
const requestInit = {
103
107
redirect : "follow" ,
104
108
...baseOptions ,
@@ -122,7 +126,7 @@ export default function createClient(clientOptions) {
122
126
}
123
127
}
124
128
125
- if ( middlewares . length ) {
129
+ if ( finalMiddlewares . length ) {
126
130
id = randomID ( ) ;
127
131
128
132
// middleware (request)
@@ -133,7 +137,7 @@ export default function createClient(clientOptions) {
133
137
querySerializer,
134
138
bodySerializer,
135
139
} ) ;
136
- for ( const m of middlewares ) {
140
+ for ( const m of finalMiddlewares ) {
137
141
if ( m && typeof m === "object" && typeof m . onRequest === "function" ) {
138
142
const result = await m . onRequest ( {
139
143
request,
@@ -164,9 +168,9 @@ export default function createClient(clientOptions) {
164
168
let errorAfterMiddleware = error ;
165
169
// middleware (error)
166
170
// execute in reverse-array order (first priority gets last transform)
167
- if ( middlewares . length ) {
168
- for ( let i = middlewares . length - 1 ; i >= 0 ; i -- ) {
169
- const m = middlewares [ i ] ;
171
+ if ( finalMiddlewares . length ) {
172
+ for ( let i = finalMiddlewares . length - 1 ; i >= 0 ; i -- ) {
173
+ const m = finalMiddlewares [ i ] ;
170
174
if ( m && typeof m === "object" && typeof m . onError === "function" ) {
171
175
const result = await m . onError ( {
172
176
request,
@@ -203,9 +207,9 @@ export default function createClient(clientOptions) {
203
207
204
208
// middleware (response)
205
209
// execute in reverse-array order (first priority gets last transform)
206
- if ( middlewares . length ) {
207
- for ( let i = middlewares . length - 1 ; i >= 0 ; i -- ) {
208
- const m = middlewares [ i ] ;
210
+ if ( finalMiddlewares . length ) {
211
+ for ( let i = finalMiddlewares . length - 1 ; i >= 0 ; i -- ) {
212
+ const m = finalMiddlewares [ i ] ;
209
213
if ( m && typeof m === "object" && typeof m . onResponse === "function" ) {
210
214
const result = await m . onResponse ( {
211
215
request,
@@ -295,15 +299,15 @@ export default function createClient(clientOptions) {
295
299
if ( typeof m !== "object" || ! ( "onRequest" in m || "onResponse" in m || "onError" in m ) ) {
296
300
throw new Error ( "Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`" ) ;
297
301
}
298
- middlewares . push ( m ) ;
302
+ globalMiddlewares . push ( m ) ;
299
303
}
300
304
} ,
301
305
/** Unregister middleware */
302
306
eject ( ...middleware ) {
303
307
for ( const m of middleware ) {
304
- const i = middlewares . indexOf ( m ) ;
308
+ const i = globalMiddlewares . indexOf ( m ) ;
305
309
if ( i !== - 1 ) {
306
- middlewares . splice ( i , 1 ) ;
310
+ globalMiddlewares . splice ( i , 1 ) ;
307
311
}
308
312
}
309
313
} ,
0 commit comments