@@ -172,6 +172,12 @@ export async function useDrupalRoute<T extends object = object>(
172172 return { }
173173 } )
174174
175+ const ctx : UseDrupalRoute < T | undefined > = {
176+ entity,
177+ drupalRoute,
178+ metatags,
179+ }
180+
175181 const nuxtRoute = useRoute ( )
176182
177183 const hookPayload = computed < DrupalRouteHookPayload > ( ( ) => ( {
@@ -181,31 +187,32 @@ export async function useDrupalRoute<T extends object = object>(
181187 routeQuery : query . value ,
182188 } ) )
183189
184- const handleRoute = async ( ) => {
185- // Handle redirects first.
186- if ( query . value ?. route && 'redirect' in query . value . route ) {
187- const redirectTarget = query . value . route . path
188- if ( redirectTarget ) {
189- // If the redirect already includes query parameters don't add the
190- // current query params. Otherwise redirect to the path including the
191- // current query parameters.
192- const target : RouteLocationRaw = redirectTarget . includes ( '?' )
193- ? redirectTarget
194- : {
195- path : redirectTarget ,
196- query : nuxtRoute . query ,
197- }
198-
199- await navigateTo ( target , {
200- redirectCode : query . value . route . redirect ?. statusCode ?? 301 ,
201- replace : true ,
202- external : true ,
203- } )
204- }
205-
206- return
190+ // Redirects are only handled once.
191+ if ( query . value ?. route && 'redirect' in query . value . route ) {
192+ const redirectTarget = query . value . route . path
193+ if ( redirectTarget ) {
194+ // If the redirect already includes query parameters don't add the
195+ // current query params. Otherwise redirect to the path including the
196+ // current query parameters.
197+ const target : RouteLocationRaw = redirectTarget . includes ( '?' )
198+ ? redirectTarget
199+ : {
200+ path : redirectTarget ,
201+ query : nuxtRoute . query ,
202+ }
203+
204+ await navigateTo ( target , {
205+ redirectCode : query . value . route . redirect ?. statusCode ?? 301 ,
206+ replace : true ,
207+ external : true ,
208+ } )
207209 }
208210
211+ // Return the context immediately.
212+ return ctx
213+ }
214+
215+ const handleRoute = async ( ) => {
209216 // Check if Drupal returned a route and/or entity.
210217 // If it's missing, throw an error, unless the user requested not to throw.
211218 if ( ( ! query . value ?. route || ! entity . value ) && ! options ?. noError ) {
@@ -229,11 +236,7 @@ export async function useDrupalRoute<T extends object = object>(
229236
230237 await handleRoute ( )
231238
232- return {
233- entity,
234- drupalRoute,
235- metatags,
236- }
239+ return ctx
237240}
238241
239242declare module '#app' {
0 commit comments