packages/next-routing/README.md
Shared route resolving package for Next.js.
NOTE: This package is experimental and will become stable along with adapters API
This package provides a comprehensive route resolution system that handles rewrites, redirects, middleware invocation, and dynamic route matching with support for conditional routing based on headers, cookies, queries, and host.
npm install @next/routing
import { resolveRoutes } from '@next/routing'
const result = await resolveRoutes({
url: new URL('https://example.com/api/users'),
basePath: '',
requestBody: readableStream,
headers: new Headers(),
pathnames: ['/api/users', '/api/posts'],
routes: {
beforeMiddleware: [],
beforeFiles: [],
afterFiles: [],
dynamicRoutes: [],
onMatch: [],
fallback: [],
},
invokeMiddleware: async (ctx) => {
// Your middleware logic
return {}
},
})
if (result.resolvedPathname) {
console.log('Resolved pathname:', result.resolvedPathname)
console.log('Resolved query:', result.resolvedQuery)
console.log('Invocation target:', result.invocationTarget)
}
Each route can have:
sourceRegex - Regular expression to match against pathnamedestination - Destination path with support for replacements ($1, $name)headers - Headers to apply on matchhas - Conditions that must matchmissing - Conditions that must not matchstatus - HTTP status code (3xx for redirects)When a route has:
Location or RefreshThe routing will end immediately and return a redirect result with the destination URL and status code.
Conditions support:
header - Match HTTP headerscookie - Match cookiesquery - Match query parametershost - Match hostnameValues can be:
undefined - Match if key exists