Skip to content

Commit

Permalink
Refactor getRouteRegex
Browse files Browse the repository at this point in the history
  • Loading branch information
javivelasco committed Jul 21, 2021
1 parent dd044fd commit 124264e
Showing 1 changed file with 30 additions and 15 deletions.
45 changes: 30 additions & 15 deletions packages/next/shared/lib/router/utils/route-regex.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export interface Group {
interface Group {
pos: number
repeat: boolean
optional: boolean
Expand All @@ -22,17 +22,8 @@ function parseParameter(param: string) {
return { key: param, repeat, optional }
}

export function getRouteRegex(
normalizedRoute: string
): {
re: RegExp
namedRegex?: string
routeKeys?: { [named: string]: string }
groups: { [groupName: string]: Group }
} {
const segments = (normalizedRoute.replace(/\/$/, '') || '/')
.slice(1)
.split('/')
export function getParametrizedRoute(route: string) {
const segments = (route.replace(/\/$/, '') || '/').slice(1).split('/')

const groups: { [groupName: string]: Group } = {}
let groupIndex = 1
Expand Down Expand Up @@ -107,15 +98,39 @@ export function getRouteRegex(
.join('')

return {
re: new RegExp(`^${parameterizedRoute}(?:/)?$`),
parameterizedRoute,
namedParameterizedRoute,
groups,
routeKeys,
namedRegex: `^${namedParameterizedRoute}(?:/)?$`,
}
}

return {
re: new RegExp(`^${parameterizedRoute}(?:/)?$`),
parameterizedRoute,
groups,
}
}

export interface RouteRegex {
groups: { [groupName: string]: Group }
namedRegex?: string
re: RegExp
routeKeys?: { [named: string]: string }
}

export function getRouteRegex(normalizedRoute: string): RouteRegex {
const result = getParametrizedRoute(normalizedRoute)
if ('routeKeys' in result) {
return {
re: new RegExp(`^${result.parameterizedRoute}(?:/)?$`),
groups: result.groups,
routeKeys: result.routeKeys,
namedRegex: `^${result.namedParameterizedRoute}(?:/)?$`,
}
}

return {
re: new RegExp(`^${result.parameterizedRoute}(?:/)?$`),
groups: result.groups,
}
}

0 comments on commit 124264e

Please sign in to comment.