1
1
import { 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" ;
3
3
import { FinalSymbol } from "./final-next-response" ;
4
4
import { INTERNAL_HEADERS } from "./constants" ;
5
5
6
- export const collectData = async ( req : NextRequest , middlewares : Middleware [ ] ) => {
6
+ export const collectData = async ( req : NextRequest , chainItems : ChainItem [ ] ) => {
7
7
const summary : Summary = {
8
8
type : "none" ,
9
9
destination : req . nextUrl ,
@@ -13,7 +13,21 @@ export const collectData = async (req: NextRequest, middlewares: Middleware[]) =
13
13
body : undefined ,
14
14
} ;
15
15
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
+ }
17
31
const middlewareNext = await middleware ( Object . assign ( req , { summary : Object . freeze ( { ...summary } ) } ) ) ;
18
32
19
33
if ( ! middlewareNext ) continue ;
0 commit comments