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
TypeScript
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>>;