UNPKG

nextjs-interceptor

Version:

A powerful and flexible interceptor middleware for Next.js applications, providing seamless request/response manipulation capabilities

57 lines (56 loc) 2.27 kB
import { NextFetchEvent, NextRequest, NextResponse } from "next/server"; type ReturnResponse = void | Response | NextResponse | Promise<void | Response | NextResponse>; /** * 拦截器处理函数类型 * @param request - 请求对象(NextAuthRequest/NextRequest) */ type InterceptorHandler<T> = (request: T, event?: NextFetchEvent) => ReturnResponse; /** * 拦截器配置接口 */ interface InterceptorConfig { /** 拦截器唯一标识 */ id: string; /** 匹配模式:字符串、正则表达式或它们的数组 */ pattern: string | RegExp | Array<string | RegExp>; /** 排除模式:字符串、正则表达式或它们的数组(可选) */ exclude?: string | RegExp | Array<string | RegExp>; /** 优先级:数字越小优先级越高 */ priority?: number; /** 匹配条件 */ conditions?: { /** 请求头匹配条件 */ headers?: Record<string, string | RegExp>; /** 查询参数匹配条件 */ query?: Record<string, string | RegExp>; /** Cookie 匹配条件 */ cookies?: Record<string, string | RegExp>; }; } export declare class InterceptorRegistry<T extends NextRequest = NextRequest> { private interceptors; use(config: InterceptorConfig, handler: InterceptorHandler<T>): this; getPatterns(): (string | RegExp)[]; /** * 获取所有拦截器的排除模式 * @returns 排除模式数组 */ getExcludePatterns(): (string | RegExp)[]; getMatchers(): (string | RegExp)[]; handle(request: T, event?: NextFetchEvent): Promise<Awaited<ReturnResponse>>; private getSortedInterceptors; private matchesPattern; /** * 检查请求路径是否匹配排除模式 * @param req - Next.js 请求对象 * @param exclude - 排除模式:字符串、正则表达式或它们的数组 * @returns 如果匹配任意一个排除模式则返回 true */ private matchesExcludePattern; private matchesConditions; private matchesRecord; private matches; } declare const interceptorRegistry: InterceptorRegistry<NextRequest>; export { interceptorRegistry }; export declare const interceptorMiddleware: (request: NextRequest, event?: NextFetchEvent) => Promise<Awaited<ReturnResponse>>;