11import { NextResponse , type NextRequest } from "next/server" ;
2- import { type ChainNextResponse , type Middleware , type Summary } from "./types" ;
2+ import { ChainItem , Middleware , type ChainNextResponse , type Summary } from "./types" ;
33import { FinalSymbol } from "./final-next-response" ;
44import { INTERNAL_HEADERS } from "./constants" ;
55
6- export const collectData = async ( req : NextRequest , middlewares : Middleware [ ] ) => {
6+ export const collectData = async ( req : NextRequest , chainItems : ChainItem [ ] ) => {
77 const summary : Summary = {
88 type : "none" ,
99 destination : req . nextUrl ,
@@ -13,7 +13,21 @@ export const collectData = async (req: NextRequest, middlewares: Middleware[]) =
1313 body : undefined ,
1414 } ;
1515
16- for await ( const middleware of middlewares ) {
16+ for await ( const chainItem of chainItems ) {
17+ let middleware : Middleware ;
18+ if ( Array . isArray ( chainItem ) ) {
19+ const [ itemMiddleware , itemRules ] = chainItem ;
20+ if (
21+ itemRules &&
22+ ( ( itemRules . include && ! itemRules . include ?. test ( req . nextUrl . pathname ) ) ||
23+ itemRules . exclude ?. test ( req . nextUrl . pathname ) )
24+ ) {
25+ continue ;
26+ }
27+ middleware = itemMiddleware ;
28+ } else {
29+ middleware = chainItem ;
30+ }
1731 const middlewareNext = await middleware ( Object . assign ( req , { summary : Object . freeze ( { ...summary } ) } ) ) ;
1832
1933 if ( ! middlewareNext ) continue ;
0 commit comments