{"version":3,"sources":["../src/utils/priority.ts","../src/responses/response-helpers.ts","../src/core/middleware-builder.ts","../src/plugins/logging/logging-plugin.ts","../src/plugins/caching/memory-storage.ts","../src/plugins/caching/caching-plugin.ts","../src/rules/built-in-rules.ts","../src/legacy/middleware.ts","../src/index.ts"],"names":["NextResponse","result","path","params"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Calculate priority based on route specificity.\n * Lower priority means higher precedence (executed first).\n *\n * @param path - The route path pattern\n * @param isExact - Whether this is an exact match\n * @returns Priority number (lower = higher precedence)\n */\nexport function calculatePriority(path: string, isExact: boolean): number {\n  if (isExact) {\n    return path.split('/').length * 10;\n  }\n  const segments = path.replace(/\\/\\*$/, '').split('/').filter(Boolean);\n  return 1000 + (100 - segments.length);\n}\n\n/**\n * Check if a request path matches a route pattern.\n *\n * @param path - The incoming request path\n * @param pattern - The route pattern to match against\n * @param isExact - Whether to perform exact matching\n * @param prefix - Optional prefix for wildcard routes\n * @returns True if the path matches the pattern\n */\nexport function matchRoute(\n  path: string,\n  pattern: string,\n  isExact: boolean,\n  prefix?: string,\n): boolean {\n  if (isExact) {\n    return path === pattern;\n  } else {\n    const routePrefix = prefix || pattern.replace(/\\/\\*$/, '');\n    return path === routePrefix || path.startsWith(routePrefix + '/');\n  }\n}\n\n/**\n * Extract parameters from path matching.\n * Handles dynamic segments like [id] and wildcard parameters.\n *\n * @param path - The incoming request path\n * @param pattern - The route pattern\n * @param isExact - Whether this is exact matching\n * @param prefix - Optional prefix for wildcard routes\n * @returns Object containing extracted parameters\n */\nexport function extractParams(\n  path: string,\n  pattern: string,\n  isExact: boolean,\n  prefix?: string,\n): Record<string, string> {\n  const params: Record<string, string> = {};\n\n  if (!isExact && prefix) {\n    const remaining = path.slice(prefix.length);\n    if (remaining.startsWith('/')) {\n      params['*'] = remaining.slice(1);\n    } else if (remaining === '') {\n      params['*'] = '';\n    }\n  }\n\n  // Handle dynamic segments like [id]\n  if (pattern.includes('[') && pattern.includes(']')) {\n    const patternParts = pattern.split('/');\n    const pathParts = path.split('/');\n\n    patternParts.forEach((part, index) => {\n      if (part.startsWith('[') && part.endsWith(']')) {\n        const paramName = part.slice(1, -1);\n        params[paramName] = pathParts[index] || '';\n      }\n    });\n  }\n\n  return params;\n}\n","import { NextResponse } from 'next/server';\nimport { MiddlewareResponses } from './types';\n\n/**\n * Collection of helper functions for creating common middleware responses.\n * Provides a consistent API for handling redirects, errors, and other responses.\n */\nexport const Responses: MiddlewareResponses = {\n  /**\n   * Creates a response that continues to the next middleware or handler.\n   */\n  next: () => NextResponse.next(),\n\n  /**\n   * Creates a redirect response to the specified URL.\n   */\n  redirect: (url: string, baseUrl?: string) => {\n    const baseURL =\n      baseUrl ||\n      (typeof window !== 'undefined'\n        ? window.location.origin\n        : 'http://localhost:3000');\n    return NextResponse.redirect(new URL(url, baseURL));\n  },\n\n  /**\n   * Creates a JSON response with the specified data and status code.\n   */\n  json: (data: any, status = 200) => {\n    return NextResponse.json(data, { status });\n  },\n\n  /**\n   * Creates an unauthorized (401) response.\n   */\n  unauthorized: (message = 'Unauthorized') => {\n    return NextResponse.json({ error: message }, { status: 401 });\n  },\n\n  /**\n   * Creates a forbidden (403) response.\n   */\n  forbidden: (message = 'Forbidden') => {\n    return NextResponse.json({ error: message }, { status: 403 });\n  },\n\n  /**\n   * Creates a not found (404) response.\n   */\n  notFound: (message = 'Not Found') => {\n    return NextResponse.json({ error: message }, { status: 404 });\n  },\n};\n","import { NextRequest, NextResponse } from 'next/server';\nimport {\n  MiddlewareContext,\n  MiddlewareResult,\n  MiddlewareRule,\n  Plugin,\n  RouteDefinition,\n  MiddlewareBuilderOptions,\n} from '../types/core';\nimport {\n  calculatePriority,\n  matchRoute,\n  extractParams,\n} from '../utils/priority';\nimport { Responses } from '../responses/response-helpers';\n\n/**\n * Enhanced Next.js middleware builder with plugin system.\n * Provides a flexible, extensible way to build middleware with\n * built-in support for routing, plugins, caching, logging, and more.\n */\nexport class MiddlewareBuilder<T = any> {\n  private routes: RouteDefinition<T>[] = [];\n  private authPaths: string[] = [];\n  private fetchUserFn: (req: NextRequest) => Promise<T | null>;\n  private plugins: Plugin<T>[] = [];\n  private defaultMetadata: Record<string, any> = {};\n\n  constructor(options: MiddlewareBuilderOptions<T>) {\n    this.fetchUserFn = options.fetchUser;\n    this.authPaths = options.authPaths || [];\n    this.plugins = options.plugins || [];\n    this.defaultMetadata = options.defaultMetadata || {};\n  }\n\n  /**\n   * Add a plugin to the middleware pipeline.\n   * Plugins are executed in the order they are added.\n   */\n  use(plugin: Plugin<T>): MiddlewareBuilder<T> {\n    this.plugins.push(plugin);\n    return this;\n  }\n\n  /**\n   * Register additional paths that require authentication.\n   * These paths will trigger error handling if user fetch fails.\n   */\n  registerAuthPaths(paths: string[]): MiddlewareBuilder<T> {\n    this.authPaths.push(...paths);\n    return this;\n  }\n\n  /**\n   * Add an exact route match.\n   * The path must match exactly for the rules to execute.\n   */\n  exact(path: string, ...rules: MiddlewareRule<T>[]): MiddlewareBuilder<T> {\n    this.routes.push({\n      pattern: path,\n      rules,\n      priority: calculatePriority(path, true),\n      isExact: true,\n      metadata: { ...this.defaultMetadata },\n    });\n    return this;\n  }\n\n  /**\n   * Add a prefix route match (wildcard).\n   * Any path starting with the prefix will match.\n   */\n  prefix(\n    pathPrefix: string,\n    ...rules: MiddlewareRule<T>[]\n  ): MiddlewareBuilder<T> {\n    const cleanPrefix = pathPrefix.endsWith('/')\n      ? pathPrefix.slice(0, -1)\n      : pathPrefix;\n    this.routes.push({\n      pattern: pathPrefix,\n      rules,\n      priority: calculatePriority(pathPrefix, false),\n      isExact: false,\n      prefix: cleanPrefix,\n      metadata: { ...this.defaultMetadata },\n    });\n    return this;\n  }\n\n  /**\n   * Add a route with custom configuration.\n   * Provides full control over route matching and metadata.\n   */\n  route(\n    path: string,\n    options: {\n      rules: MiddlewareRule<T>[];\n      isExact?: boolean;\n      metadata?: Record<string, any>;\n    },\n  ): MiddlewareBuilder<T> {\n    const isExact = options.isExact ?? true;\n    const cleanPrefix =\n      !isExact && path.endsWith('/') ? path.slice(0, -1) : undefined;\n\n    this.routes.push({\n      pattern: path,\n      rules: options.rules,\n      priority: calculatePriority(path, isExact),\n      isExact,\n      prefix: cleanPrefix,\n      metadata: { ...this.defaultMetadata, ...options.metadata },\n    });\n    return this;\n  }\n\n  /**\n   * Find the best matching route for the given path.\n   * Routes are sorted by priority (lower = higher precedence).\n   */\n  private findMatchingRoute(path: string): RouteDefinition<T> | null {\n    const sortedRoutes = [...this.routes].sort(\n      (a, b) => a.priority - b.priority,\n    );\n\n    for (const route of sortedRoutes) {\n      if (matchRoute(path, route.pattern, route.isExact, route.prefix)) {\n        return route;\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Execute plugin hooks safely with error handling.\n   */\n  private async executePluginHook<K extends keyof Plugin<T>>(\n    hook: K,\n    ...args: any[]\n  ): Promise<void> {\n    for (const plugin of this.plugins) {\n      const hookFn = plugin[hook];\n      if (hookFn && typeof hookFn === 'function') {\n        try {\n          await (hookFn as any)(...args);\n        } catch (error) {\n          console.error(\n            `Plugin ${plugin.name} error in ${String(hook)}:`,\n            error,\n          );\n        }\n      }\n    }\n  }\n\n  /**\n   * Handle plugin errors and allow plugins to provide error responses.\n   */\n  private async handlePluginErrors(\n    context: MiddlewareContext<T>,\n    error: Error,\n  ): Promise<MiddlewareResult> {\n    for (const plugin of this.plugins) {\n      if (plugin.onError) {\n        try {\n          const result = await plugin.onError(context, error);\n          if (result) {\n            return result;\n          }\n        } catch (pluginError) {\n          console.error(`Plugin ${plugin.name} error in onError:`, pluginError);\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Build the final middleware handler.\n   * Returns a function that can be used as Next.js middleware.\n   */\n  build() {\n    return async (req: NextRequest): Promise<NextResponse> => {\n      const url = new URL(req.url);\n      const path = url.pathname;\n\n      const context: MiddlewareContext<T> = {\n        data: null,\n        req,\n        path,\n        params: {},\n        metadata: { ...this.defaultMetadata },\n      };\n\n      try {\n        await this.executePluginHook('beforeRequest', context);\n\n        const matchingRoute = this.findMatchingRoute(path);\n        if (!matchingRoute) {\n          const result = Responses.next();\n          await this.executePluginHook('afterRequest', context, result);\n          return result;\n        }\n\n        context.params = extractParams(\n          path,\n          matchingRoute.pattern,\n          matchingRoute.isExact,\n          matchingRoute.prefix,\n        );\n        context.metadata = { ...context.metadata, ...matchingRoute.metadata };\n\n        context.data = await this.fetchUserFn(req);\n\n        for (const rule of matchingRoute.rules) {\n          await this.executePluginHook('beforeRule', context, rule);\n\n          const result = await rule(context);\n\n          await this.executePluginHook('afterRule', context, rule, result);\n\n          if (result) {\n            await this.executePluginHook('afterRequest', context, result);\n            return result as NextResponse;\n          }\n        }\n\n        const result = Responses.next();\n        await this.executePluginHook('afterRequest', context, result);\n        return result;\n      } catch (error) {\n        const pluginResult = await this.handlePluginErrors(\n          context,\n          error as Error,\n        );\n        if (pluginResult) {\n          return pluginResult as NextResponse;\n        }\n\n        const isAuthPath = this.authPaths.some((authPath) => {\n          if (authPath.endsWith('/*')) {\n            const prefix = authPath.slice(0, -2);\n            return path.startsWith(prefix);\n          }\n          return path === authPath;\n        });\n\n        if (isAuthPath) {\n          return Responses.next();\n        }\n\n        return Responses.redirect('/sign-in', req.url);\n      }\n    };\n  }\n}\n","import {\n  Plugin,\n  MiddlewareContext,\n  MiddlewareResult,\n  MiddlewareRule,\n} from '../../types/core';\nimport { LoggingPluginOptions } from './types';\n\n/**\n * Logging plugin that provides comprehensive request and rule execution logging.\n * Tracks middleware execution flow with configurable log levels and detail.\n */\nexport class LoggingPlugin<T = any> implements Plugin<T> {\n  name = 'logging';\n  private options: Required<LoggingPluginOptions>;\n\n  constructor(options: LoggingPluginOptions = {}) {\n    this.options = {\n      enabled: true,\n      level: 'info',\n      prefix: '[MIDDLEWARE]',\n      includeHeaders: false,\n      includeBody: false,\n      ...options,\n    };\n  }\n\n  /**\n   * Internal logging method that respects the configured log level\n   */\n  private log(level: string, message: string, data?: any) {\n    if (!this.options.enabled) return;\n\n    const logMessage = `${this.options.prefix} ${message}`;\n\n    switch (level) {\n      case 'debug':\n        console.debug(logMessage, data);\n        break;\n      case 'info':\n        console.info(logMessage, data);\n        break;\n      case 'warn':\n        console.warn(logMessage, data);\n        break;\n      case 'error':\n        console.error(logMessage, data);\n        break;\n    }\n  }\n\n  /**\n   * Called before request processing begins\n   */\n  async beforeRequest(context: MiddlewareContext<T>): Promise<void> {\n    this.log('info', `🔍 Processing path: ${context.path}`);\n\n    if (this.options.includeHeaders) {\n      this.log(\n        'debug',\n        'Headers:',\n        Object.fromEntries(context.req.headers.entries()),\n      );\n    }\n  }\n\n  /**\n   * Called before each rule execution\n   */\n  async beforeRule(\n    context: MiddlewareContext<T>,\n    rule: MiddlewareRule<T>,\n  ): Promise<void> {\n    this.log('debug', `🔗 Executing rule for ${context.path}`);\n  }\n\n  /**\n   * Called after each rule execution\n   */\n  async afterRule(\n    context: MiddlewareContext<T>,\n    rule: MiddlewareRule<T>,\n    result: MiddlewareResult,\n  ): Promise<void> {\n    if (result) {\n      const isRedirect = result.headers.get('location');\n      if (isRedirect) {\n        this.log('info', `🔄 Rule redirecting to: ${isRedirect}`);\n      } else {\n        this.log('info', `🛑 Rule returned response`);\n      }\n    }\n  }\n\n  /**\n   * Called after request processing completes\n   */\n  async afterRequest(\n    context: MiddlewareContext<T>,\n    result: MiddlewareResult,\n  ): Promise<void> {\n    if (!result?.headers.get('location')) {\n      this.log('info', `✨ Request completed for ${context.path}`);\n    }\n  }\n\n  /**\n   * Called when an error occurs during processing\n   */\n  async onError(context: MiddlewareContext<T>, error: Error): Promise<void> {\n    this.log('error', `🚨 Error processing ${context.path}:`, error.message);\n  }\n}\n","import { CacheStorage } from './types';\n\n/**\n * In-memory cache storage implementation.\n * Uses a Map to store cached values with automatic expiration.\n * Suitable for development and single-instance deployments.\n */\nexport class MemoryCacheStorage implements CacheStorage {\n  private cache = new Map<string, { value: any; expires: number }>();\n\n  /**\n   * Retrieve a value from the cache\n   */\n  async get(key: string): Promise<any> {\n    const item = this.cache.get(key);\n    if (!item || item.expires < Date.now()) {\n      this.cache.delete(key);\n      return null;\n    }\n    return item.value;\n  }\n\n  /**\n   * Store a value in the cache with optional TTL\n   */\n  async set(key: string, value: any, ttl?: number): Promise<void> {\n    const expires = ttl ? Date.now() + ttl : Date.now() + 3600000;\n    this.cache.set(key, { value, expires });\n  }\n\n  /**\n   * Delete a specific value from the cache\n   */\n  async delete(key: string): Promise<void> {\n    this.cache.delete(key);\n  }\n\n  /**\n   * Clear all cached values\n   */\n  async clear(): Promise<void> {\n    this.cache.clear();\n  }\n}\n","import { Plugin, MiddlewareContext, MiddlewareResult } from '../../types/core';\nimport { CachingPluginOptions, CacheStorage } from './types';\nimport { MemoryCacheStorage } from './memory-storage';\n\n/**\n * Caching plugin that provides request-level caching for middleware.\n * Caches user data and other context information to improve performance.\n */\nexport class CachingPlugin<T = any> implements Plugin<T> {\n  name = 'caching';\n  private options: Required<CachingPluginOptions>;\n  private storage: CacheStorage;\n\n  constructor(options: CachingPluginOptions = {}) {\n    this.options = {\n      enabled: true,\n      ttl: 300000, // 5 minutes default\n      keyGenerator: (req) => `middleware:${req.url}`,\n      storage: new MemoryCacheStorage(),\n      ...options,\n    };\n    this.storage = this.options.storage;\n  }\n\n  /**\n   * Called before request processing begins.\n   * Attempts to retrieve cached data if available.\n   */\n  async beforeRequest(context: MiddlewareContext<T>): Promise<void> {\n    if (!this.options.enabled) return;\n\n    const cacheKey = this.options.keyGenerator(context.req);\n    const cached = await this.storage.get(cacheKey);\n\n    if (cached) {\n      context.metadata.cached = true;\n      context.data = cached;\n    }\n  }\n\n  /**\n   * Called after request processing completes.\n   * Stores data in cache if not already cached and no redirect occurred.\n   */\n  async afterRequest(\n    context: MiddlewareContext<T>,\n    result: MiddlewareResult,\n  ): Promise<void> {\n    if (!this.options.enabled || context.metadata.cached) return;\n\n    if (context.data && !result?.headers.get('location')) {\n      const cacheKey = this.options.keyGenerator(context.req);\n      await this.storage.set(cacheKey, context.data, this.options.ttl);\n    }\n  }\n}\n","import { MiddlewareRule } from '../types/core';\nimport { RuleFactories } from './types';\nimport { Responses } from '../responses/response-helpers';\n\n/**\n * Collection of built-in rule factories for common middleware patterns.\n * These rules handle authentication, authorization, rate limiting, and more.\n */\nexport const Rules: RuleFactories<any> = {\n  /**\n   * Creates a rule that requires the user to be logged in.\n   * Redirects to /sign-in if user data is not present.\n   */\n  isLoggedIn:\n    () =>\n    ({ data }) => {\n      if (data) {\n        return null;\n      } else {\n        return Responses.redirect('/sign-in');\n      }\n    },\n\n  /**\n   * Creates a rule that requires the user to not be logged in.\n   * Redirects to home if user is already authenticated.\n   */\n  isNotLoggedIn:\n    () =>\n    ({ data }) => {\n      if (!data) {\n        return Responses.next();\n      } else {\n        return Responses.redirect('/');\n      }\n    },\n\n  /**\n   * Creates a rule that requires the user to have a specific role.\n   * Returns forbidden if user doesn't have the required role.\n   */\n  hasRole:\n    (role: string) =>\n    ({ data }) => {\n      if (data?.role === role || data?.roles?.includes(role)) {\n        return null;\n      } else {\n        return Responses.forbidden(`Required role: ${role}`);\n      }\n    },\n\n  /**\n   * Creates a rule that requires the user to have a specific permission.\n   * Returns forbidden if user doesn't have the required permission.\n   */\n  hasPermission:\n    (permission: string) =>\n    ({ data }) => {\n      if (data?.permissions?.includes(permission)) {\n        return null;\n      } else {\n        return Responses.forbidden(`Required permission: ${permission}`);\n      }\n    },\n\n  /**\n   * Creates a rule that always redirects to the specified destination.\n   */\n  redirectTo: (destination: string) => () => {\n    return Responses.redirect(destination);\n  },\n\n  /**\n   * Creates a rate limiting rule that tracks requests per IP address.\n   * Returns 429 status when rate limit is exceeded.\n   */\n  rateLimit: (options: { requests: number; window: number }) => {\n    const requests = new Map<string, number[]>();\n\n    return ({ req }) => {\n      const ip =\n        req.headers.get('x-forwarded-for') ||\n        req.headers.get('x-real-ip') ||\n        'unknown';\n      const now = Date.now();\n      const windowStart = now - options.window;\n\n      if (!requests.has(ip)) {\n        requests.set(ip, []);\n      }\n\n      const userRequests = requests.get(ip)!;\n      const validRequests = userRequests.filter((time) => time > windowStart);\n\n      if (validRequests.length >= options.requests) {\n        return Responses.json({ error: 'Rate limit exceeded' }, 429);\n      }\n\n      validRequests.push(now);\n      requests.set(ip, validRequests);\n\n      return null;\n    };\n  },\n\n  /**\n   * Wraps a custom rule function.\n   */\n  custom: (fn: MiddlewareRule<any>) => fn,\n};\n","import { NextRequest, NextResponse } from 'next/server';\nimport {\n  Routes,\n  AuthRules,\n  MiddlewareOptions,\n  RuleFunction,\n  ParamsObject,\n  ExtractParams,\n} from '../types/legacy';\n\n/**\n * Legacy Middleware class for backward compatibility.\n * Provides the original API for existing middleware implementations.\n * Consider migrating to the new MiddlewareBuilder for enhanced features.\n */\nexport class Middleware<R extends Record<string, { path: string }>, T = any> {\n  private fetch: (req: NextRequest) => Promise<T | undefined>;\n  private rules: AuthRules<T, R, keyof R & string>;\n  private authPaths: Array<keyof R & string>;\n  private onError?: (req: NextRequest) => Promise<NextResponse> | NextResponse;\n\n  constructor(options: MiddlewareOptions<R, T>) {\n    this.fetch = options.fetch;\n    this.rules = options.rules;\n    this.authPaths = options.authPaths;\n    this.onError = options.onError;\n  }\n\n  /**\n   * Extract parameters from path using legacy pattern matching\n   */\n  private extractParams<R extends string>(\n    path: R,\n    pathname: string,\n  ): ParamsObject<R> {\n    const pathParts = path.split('/');\n    const pathnameParts = pathname.split('/');\n\n    return pathParts.reduce((params, part, index) => {\n      if (part.startsWith('[') && part.endsWith(']')) {\n        const key = part.slice(1, -1) as ExtractParams<R>[number];\n        return {\n          ...params,\n          [key]: pathnameParts[index],\n        };\n      }\n      return params;\n    }, {} as ParamsObject<R>);\n  }\n\n  /**\n   * Check if path is a wildcard pattern\n   */\n  private isWildcard<R extends string>(path: R): boolean {\n    return path.endsWith('/*');\n  }\n\n  /**\n   * Match path against pattern using legacy logic\n   */\n  private match<R extends string>(path: R, pathname: string): boolean {\n    const pathParts = path.split('/');\n    const pathnameParts = pathname.split('/');\n    return pathParts.every((part, index) => {\n      if (part === '*') {\n        return true;\n      }\n      if (part.startsWith('[') && part.endsWith(']')) {\n        return true;\n      }\n      return part === pathnameParts[index];\n    });\n  }\n\n  /**\n   * Sort paths to prioritize exact matches over wildcards\n   */\n  private sortPaths(paths: Array<keyof R & string>): Array<keyof R & string> {\n    return paths.sort((a, b) => {\n      if (this.isWildcard(a) && !this.isWildcard(b)) {\n        return 1;\n      }\n      return -1;\n    });\n  }\n\n  /**\n   * Apply rules to the request using legacy pattern\n   */\n  private async apply(req: NextRequest, pathname: string, data: T) {\n    const allPaths = Object.keys(this.rules);\n    const matchedPaths = allPaths.filter((path) => this.match(path, pathname));\n    const sortedPaths = this.sortPaths(matchedPaths);\n\n    for (const path of sortedPaths) {\n      const rules = this.rules[path] || [];\n      const params = this.extractParams(path, pathname);\n\n      let nextCalled = false;\n      let redirectPath: (keyof R & string) | undefined;\n\n      const next = async () => {\n        nextCalled = true;\n        return undefined;\n      };\n\n      const redirect = (path: keyof R & string, options?: any) => {\n        redirectPath = path;\n        if (options) {\n          if ('params' in options) {\n            const params = options.params;\n            const pathParts = path.split('/');\n            const newPathParts = pathParts.map((part) => {\n              if (part.startsWith('[') && part.endsWith(']')) {\n                const key = part.slice(1, -1);\n                return params[key as keyof typeof params];\n              }\n              return part;\n            });\n            const newPath = newPathParts.join('/');\n            redirectPath = newPath;\n          }\n          if (options.query) {\n            const searchParams = new URLSearchParams(options.query);\n            redirectPath += `?${searchParams.toString()}`;\n          }\n          if (options.hash) {\n            redirectPath += `#${options.hash}`;\n          }\n        }\n      };\n\n      for (const rule of rules) {\n        await rule({\n          data,\n          params,\n          next,\n          redirect,\n          path: new URL(req.url).pathname,\n        });\n        if (redirectPath) {\n          break;\n        }\n        if (nextCalled) {\n          continue;\n        }\n      }\n\n      if (!nextCalled && !redirectPath) {\n        return NextResponse.next();\n      }\n      if (redirectPath && redirectPath !== new URL(req.url).pathname) {\n        return NextResponse.redirect(new URL(redirectPath, req.url));\n      }\n\n      return NextResponse.next();\n    }\n  }\n\n  /**\n   * Handle incoming request using legacy middleware logic\n   */\n  async handle(req: NextRequest) {\n    const pathname = new URL(req.url).pathname;\n    if (\n      this.authPaths.some((path) => {\n        const pathParts = path.split('/');\n        const pathnameParts = pathname.split('/');\n        return pathParts.every((part, index) => {\n          if (part === '*') {\n            return true;\n          }\n          if (part.startsWith('[') && part.endsWith(']')) {\n            return true;\n          }\n          return part === pathnameParts[index];\n        });\n      })\n    ) {\n      try {\n        const data = await this.fetch(req);\n        if (!data) {\n          throw 'Missing data from `fetch`';\n        }\n        return await this.apply(req, pathname, data);\n      } catch (e) {\n        if (this.onError) {\n          return await this.onError(req);\n        }\n      }\n    } else {\n      return NextResponse.next();\n    }\n  }\n}\n","/**\n * Next.js Middleware Builder\n * A comprehensive middleware system for Next.js applications with plugin support,\n * built-in rules, caching, logging, and backward compatibility.\n */\n\n// Core middleware\nexport { MiddlewareBuilder } from './core/middleware-builder';\n\n// Built-in plugins\nexport { LoggingPlugin } from './plugins/logging/logging-plugin';\nexport { CachingPlugin } from './plugins/caching/caching-plugin';\nexport { MemoryCacheStorage } from './plugins/caching/memory-storage';\n\n// Built-in rules\nexport { Rules } from './rules/built-in-rules';\n\n// Response helpers\nexport { Responses } from './responses/response-helpers';\n\n// Legacy middleware for backward compatibility\nimport { Middleware } from './legacy/middleware';\nexport { Middleware };\nexport default Middleware;\n\n// Type exports\nexport * from './types';\n\n// Utility exports\nexport * from './utils/priority';\n"]}