/opt/canhelp/node_modules/next/dist/esm/shared/lib/router/utils
NameSizeModeActions
add-locale.js10200644editdlrm
add-locale.js.map17200644editdlrm
add-path-prefix.js4320644editdlrm
add-path-prefix.js.map8880644editdlrm
add-path-suffix.js4900644editdlrm
add-path-suffix.js.map9480644editdlrm
app-paths.js17680644editdlrm
app-paths.js.map27220644editdlrm
as-path-to-search-params.js2620644editdlrm
as-path-to-search-params.js.map5490644editdlrm
cache-busting-search-param.js5800644editdlrm
cache-busting-search-param.js.map13070644editdlrm
compare-states.js8500644editdlrm
compare-states.js.map19140644editdlrm
disable-smooth-scroll.js23760644editdlrm
disable-smooth-scroll.js.map36260644editdlrm
escape-path-delimiters.js3070644editdlrm
escape-path-delimiters.js.map7370644editdlrm
format-next-pathname-info.js9080644editdlrm
format-next-pathname-info.js.map20790644editdlrm
format-url.js32690644editdlrm
format-url.js.map56970644editdlrm
get-asset-path-from-route.js4370644editdlrm
get-asset-path-from-route.js.map8300644editdlrm
get-dynamic-param.js53080644editdlrm
get-dynamic-param.js.map74360644editdlrm
get-next-pathname-info.js21580644editdlrm
get-next-pathname-info.js.map51770644editdlrm
get-route-from-asset-path.js7160644editdlrm
get-route-from-asset-path.js.map13160644editdlrm
html-bots.js9090644editdlrm
html-bots.js.map11360644editdlrm
index.js1550644editdlrm
index.js.map3890644editdlrm
interception-routes.js37080644editdlrm
interception-routes.js.map50160644editdlrm
interpolate-as.js20000644editdlrm
interpolate-as.js.map38050644editdlrm
is-bot.js11000644editdlrm
is-bot.js.map19470644editdlrm
is-dynamic.js8840644editdlrm
is-dynamic.js.map15040644editdlrm
is-local-url.js7220644editdlrm
is-local-url.js.map12820644editdlrm
middleware-route-matcher.js6780644editdlrm
middleware-route-matcher.js.map17550644editdlrm
omit.js2500644editdlrm
omit.js.map7610644editdlrm
parse-path.js8410644editdlrm
parse-path.js.map14950644editdlrm
parse-relative-url.js12510644editdlrm
parse-relative-url.js.map30150644editdlrm
parse-url.js7220644editdlrm
parse-url.js.map18500644editdlrm
path-has-prefix.js5950644editdlrm
path-has-prefix.js.map10020644editdlrm
path-match.js19700644editdlrm
path-match.js.map37910644editdlrm
prepare-destination.js98280644editdlrm
prepare-destination.js.map171430644editdlrm
querystring.js17030644editdlrm
querystring.js.map32240644editdlrm
relativize-url.js8510644editdlrm
relativize-url.js.map18390644editdlrm
remove-path-prefix.js13340644editdlrm
remove-path-prefix.js.map20090644editdlrm
remove-trailing-slash.js3320644editdlrm
remove-trailing-slash.js.map5830644editdlrm
resolve-rewrites.js42400644editdlrm
resolve-rewrites.js.map78050644editdlrm
route-match-utils.js33610644editdlrm
route-match-utils.js.map56600644editdlrm
route-matcher.js12710644editdlrm
route-matcher.js.map25670644editdlrm
route-regex.js93150644editdlrm
route-regex.js.map175260644editdlrm
sortable-routes.js85020644editdlrm
sortable-routes.js.map125360644editdlrm
sorted-routes.js113320644editdlrm
sorted-routes.js.map147570644editdlrm
Edit: /opt/canhelp/node_modules/next/dist/esm/shared/lib/router/utils/route-regex.js.map (17526B)
{"version":3,"sources":["../../../../../src/shared/lib/router/utils/route-regex.ts"],"sourcesContent":["import {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../../../lib/constants'\nimport { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { PARAMETER_PATTERN, parseMatchedParameter } from './get-dynamic-param'\n\nexport interface Group {\n pos: number\n repeat: boolean\n optional: boolean\n}\n\nexport interface RouteRegex {\n groups: { [groupName: string]: Group }\n re: RegExp\n}\n\ntype GetNamedRouteRegexOptions = {\n /**\n * Whether to prefix the route keys with the NEXT_INTERCEPTION_MARKER_PREFIX\n * or NEXT_QUERY_PARAM_PREFIX. This is only relevant when creating the\n * routes-manifest during the build.\n */\n prefixRouteKeys: boolean\n\n /**\n * Whether to include the suffix in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n\n /**\n * Whether to backtrack duplicate keys. This is only relevant when creating\n * the routes-manifest during the build.\n */\n backreferenceDuplicateKeys?: boolean\n}\n\ntype GetRouteRegexOptions = {\n /**\n * Whether to include extra parts in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n * of adding this option.\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n}\n\nfunction getParametrizedRoute(\n route: string,\n includeSuffix: boolean,\n includePrefix: boolean\n) {\n const groups: { [groupName: string]: Group } = {}\n let groupIndex = 1\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const markerMatch = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n segments.push(`/${escapeStringRegexp(markerMatch)}([^/]+?)`)\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = repeat ? (optional ? '(?:/(.+?))?' : '/(.+?)') : '/([^/]+?)'\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n parameterizedRoute: segments.join(''),\n groups,\n }\n}\n\n/**\n * From a normalized route this function generates a regular expression and\n * a corresponding groups object intended to be used to store matching groups\n * from the regular expression.\n */\nexport function getRouteRegex(\n normalizedRoute: string,\n {\n includeSuffix = false,\n includePrefix = false,\n excludeOptionalTrailingSlash = false,\n }: GetRouteRegexOptions = {}\n): RouteRegex {\n const { parameterizedRoute, groups } = getParametrizedRoute(\n normalizedRoute,\n includeSuffix,\n includePrefix\n )\n\n let re = parameterizedRoute\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?'\n }\n\n return {\n re: new RegExp(`^${re}$`),\n groups: groups,\n }\n}\n\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */\nfunction buildGetSafeRouteKey() {\n let i = 0\n\n return () => {\n let routeKey = ''\n let j = ++i\n while (j > 0) {\n routeKey += String.fromCharCode(97 + ((j - 1) % 26))\n j = Math.floor((j - 1) / 26)\n }\n return routeKey\n }\n}\n\nfunction getSafeKeyFromSegment({\n interceptionMarker,\n getSafeRouteKey,\n segment,\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n}: {\n interceptionMarker?: string\n getSafeRouteKey: () => string\n segment: string\n routeKeys: Record\n keyPrefix?: string\n backreferenceDuplicateKeys: boolean\n}) {\n const { key, optional, repeat } = parseMatchedParameter(segment)\n\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '')\n\n if (keyPrefix) {\n cleanedKey = `${keyPrefix}${cleanedKey}`\n }\n let invalidKey = false\n\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true\n }\n\n if (invalidKey) {\n cleanedKey = getSafeRouteKey()\n }\n\n const duplicateKey = cleanedKey in routeKeys\n\n if (keyPrefix) {\n routeKeys[cleanedKey] = `${keyPrefix}${key}`\n } else {\n routeKeys[cleanedKey] = key\n }\n\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker\n ? escapeStringRegexp(interceptionMarker)\n : ''\n\n let pattern: string\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = `\\\\k<${cleanedKey}>`\n } else if (repeat) {\n pattern = `(?<${cleanedKey}>.+?)`\n } else {\n pattern = `(?<${cleanedKey}>[^/]+?)`\n }\n\n return optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const hasInterceptionMarker = INTERCEPTION_ROUTE_MARKERS.some((m) =>\n segment.startsWith(m)\n )\n\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n segments.push(\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: paramMatches[1],\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys\n ? NEXT_INTERCEPTION_MARKER_PREFIX\n : undefined,\n backreferenceDuplicateKeys,\n })\n )\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n }\n}\n\n/**\n * This function extends `getRouteRegex` generating also a named regexp where\n * each group is named along with a routeKeys object that indexes the assigned\n * named group with its corresponding key. When the routeKeys need to be\n * prefixed to uniquely identify internally the \"prefixRouteKey\" arg should\n * be \"true\" currently this is only the case when creating the routes-manifest\n * during the build\n */\nexport function getNamedRouteRegex(\n normalizedRoute: string,\n options: GetNamedRouteRegexOptions\n) {\n const result = getNamedParametrizedRoute(\n normalizedRoute,\n options.prefixRouteKeys,\n options.includeSuffix ?? false,\n options.includePrefix ?? false,\n options.backreferenceDuplicateKeys ?? false\n )\n\n let namedRegex = result.namedParameterizedRoute\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?'\n }\n\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: `^${namedRegex}$`,\n routeKeys: result.routeKeys,\n }\n}\n\n/**\n * Generates a named regexp.\n * This is intended to be using for build time only.\n */\nexport function getNamedMiddlewareRegex(\n normalizedRoute: string,\n options: {\n catchAll?: boolean\n }\n) {\n const { parameterizedRoute } = getParametrizedRoute(\n normalizedRoute,\n false,\n false\n )\n const { catchAll = true } = options\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : ''\n return {\n namedRegex: `^/${catchAllRegex}$`,\n }\n }\n\n const { namedParameterizedRoute } = getNamedParametrizedRoute(\n normalizedRoute,\n false,\n false,\n false,\n false\n )\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''\n return {\n namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$`,\n }\n}\n"],"names":["NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_QUERY_PARAM_PREFIX","INTERCEPTION_ROUTE_MARKERS","escapeStringRegexp","removeTrailingSlash","PARAMETER_PATTERN","parseMatchedParameter","getParametrizedRoute","route","includeSuffix","includePrefix","groups","groupIndex","segments","segment","slice","split","markerMatch","find","m","startsWith","paramMatches","match","key","optional","repeat","pos","push","s","substring","parameterizedRoute","join","getRouteRegex","normalizedRoute","excludeOptionalTrailingSlash","re","RegExp","buildGetSafeRouteKey","i","routeKey","j","String","fromCharCode","Math","floor","getSafeKeyFromSegment","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","cleanedKey","replace","invalidKey","length","isNaN","parseInt","duplicateKey","interceptionPrefix","pattern","getNamedParametrizedRoute","prefixRouteKeys","hasInterceptionMarker","some","undefined","namedParameterizedRoute","getNamedRouteRegex","options","result","namedRegex","getNamedMiddlewareRegex","catchAll","catchAllRegex","catchAllGroupedRegex"],"mappings":"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","ignoreList":[0]}