@@ -34,7 +34,7 @@ export default function createClient(clientOptions) {
3434 } = { ...clientOptions } ;
3535 requestInitExt = supportsRequestInitExt ( ) ? requestInitExt : undefined ;
3636 baseUrl = removeTrailingSlash ( baseUrl ) ;
37- const middlewares = [ ] ;
37+ const globalMiddlewares = [ ] ;
3838
3939 /**
4040 * Per-request fetch (keeps settings created in createClient()
@@ -52,6 +52,7 @@ export default function createClient(clientOptions) {
5252 querySerializer : requestQuerySerializer ,
5353 bodySerializer = globalBodySerializer ?? defaultBodySerializer ,
5454 body,
55+ middleware : requestMiddlewares = [ ] ,
5556 ...init
5657 } = fetchOptions || { } ;
5758 let finalBaseUrl = baseUrl ;
@@ -99,6 +100,9 @@ export default function createClient(clientOptions) {
99100 params . header ,
100101 ) ;
101102
103+ // Client level middleware take priority over request-level middleware
104+ const finalMiddlewares = [ ...globalMiddlewares , ...requestMiddlewares ] ;
105+
102106 const requestInit = {
103107 redirect : "follow" ,
104108 ...baseOptions ,
@@ -122,7 +126,7 @@ export default function createClient(clientOptions) {
122126 }
123127 }
124128
125- if ( middlewares . length ) {
129+ if ( finalMiddlewares . length ) {
126130 id = randomID ( ) ;
127131
128132 // middleware (request)
@@ -133,7 +137,7 @@ export default function createClient(clientOptions) {
133137 querySerializer,
134138 bodySerializer,
135139 } ) ;
136- for ( const m of middlewares ) {
140+ for ( const m of finalMiddlewares ) {
137141 if ( m && typeof m === "object" && typeof m . onRequest === "function" ) {
138142 const result = await m . onRequest ( {
139143 request,
@@ -164,9 +168,9 @@ export default function createClient(clientOptions) {
164168 let errorAfterMiddleware = error ;
165169 // middleware (error)
166170 // 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 ] ;
170174 if ( m && typeof m === "object" && typeof m . onError === "function" ) {
171175 const result = await m . onError ( {
172176 request,
@@ -203,9 +207,9 @@ export default function createClient(clientOptions) {
203207
204208 // middleware (response)
205209 // 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 ] ;
209213 if ( m && typeof m === "object" && typeof m . onResponse === "function" ) {
210214 const result = await m . onResponse ( {
211215 request,
@@ -295,15 +299,15 @@ export default function createClient(clientOptions) {
295299 if ( typeof m !== "object" || ! ( "onRequest" in m || "onResponse" in m || "onError" in m ) ) {
296300 throw new Error ( "Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`" ) ;
297301 }
298- middlewares . push ( m ) ;
302+ globalMiddlewares . push ( m ) ;
299303 }
300304 } ,
301305 /** Unregister middleware */
302306 eject ( ...middleware ) {
303307 for ( const m of middleware ) {
304- const i = middlewares . indexOf ( m ) ;
308+ const i = globalMiddlewares . indexOf ( m ) ;
305309 if ( i !== - 1 ) {
306- middlewares . splice ( i , 1 ) ;
310+ globalMiddlewares . splice ( i , 1 ) ;
307311 }
308312 }
309313 } ,
0 commit comments