/
opt
/
canhelp
/
node_modules
/
next
/
dist
/
esm
/
server
/
lib
/
router-utils
/
/opt/canhelp/node_modules/next/dist/esm/server/lib/router-utils
mkdir
upload
Name
Size
Mode
Actions
block-cross-site.js
2990
0644
edit
dl
rm
block-cross-site.js.map
5236
0644
edit
dl
rm
build-data-route.js
1403
0644
edit
dl
rm
build-data-route.js.map
2712
0644
edit
dl
rm
build-prefetch-segment-data-route.js
2021
0644
edit
dl
rm
build-prefetch-segment-data-route.js.map
3690
0644
edit
dl
rm
decode-path-params.js
1112
0644
edit
dl
rm
decode-path-params.js.map
1589
0644
edit
dl
rm
filesystem.js
24149
0644
edit
dl
rm
filesystem.js.map
37721
0644
edit
dl
rm
instrumentation-globals.external.js
2682
0644
edit
dl
rm
instrumentation-globals.external.js.map
4763
0644
edit
dl
rm
instrumentation-node-extensions.js
4625
0644
edit
dl
rm
instrumentation-node-extensions.js.map
7205
0644
edit
dl
rm
is-postpone.js
234
0644
edit
dl
rm
is-postpone.js.map
579
0644
edit
dl
rm
proxy-request.js
3850
0644
edit
dl
rm
proxy-request.js.map
6603
0644
edit
dl
rm
resolve-routes.js
32252
0644
edit
dl
rm
resolve-routes.js.map
47115
0644
edit
dl
rm
route-types-utils.js
10509
0644
edit
dl
rm
route-types-utils.js.map
19197
0644
edit
dl
rm
router-server-context.js
180
0644
edit
dl
rm
router-server-context.js.map
2247
0644
edit
dl
rm
setup-dev-bundler.js
43758
0644
edit
dl
rm
setup-dev-bundler.js.map
68542
0644
edit
dl
rm
typegen.js
24092
0644
edit
dl
rm
typegen.js.map
34670
0644
edit
dl
rm
types.js
46
0644
edit
dl
rm
types.js.map
354
0644
edit
dl
rm
Edit:
/opt/canhelp/node_modules/next/dist/esm/server/lib/router-utils/resolve-routes.js.map
(47115B)
{"version":3,"sources":["../../../../src/server/lib/router-utils/resolve-routes.ts"],"sourcesContent":["import type { FsOutput } from './filesystem'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextConfigComplete } from '../../config-shared'\nimport type { RenderServer, initialize } from '../router-server'\nimport type { PatchMatcher } from '../../../shared/lib/router/utils/path-match'\nimport type { Redirect } from '../../../types'\nimport type { Header, Rewrite } from '../../../lib/load-custom-routes'\nimport type { UnwrapPromise } from '../../../lib/coalesced-function'\nimport type { NextUrlWithParsedQuery } from '../../request-meta'\n\nimport url from 'url'\nimport path from 'node:path'\nimport setupDebug from 'next/dist/compiled/debug'\nimport { getCloneableBody } from '../../body-streams'\nimport { filterReqHeaders, ipcForbiddenHeaders } from '../server-ipc/utils'\nimport { stringifyQuery } from '../../server-route-utils'\nimport { formatHostname } from '../format-hostname'\nimport { toNodeOutgoingHttpHeaders } from '../../web/utils'\nimport { isAbortError } from '../../pipe-readable'\nimport { getHostname } from '../../../shared/lib/get-hostname'\nimport {\n getRedirectStatus,\n allowedStatusCodes,\n} from '../../../lib/redirect-status'\nimport { normalizeRepeatedSlashes } from '../../../shared/lib/utils'\nimport { getRelativeURL } from '../../../shared/lib/router/utils/relativize-url'\nimport { addPathPrefix } from '../../../shared/lib/router/utils/add-path-prefix'\nimport { pathHasPrefix } from '../../../shared/lib/router/utils/path-has-prefix'\nimport { detectDomainLocale } from '../../../shared/lib/i18n/detect-domain-locale'\nimport { normalizeLocalePath } from '../../../shared/lib/i18n/normalize-locale-path'\nimport { removePathPrefix } from '../../../shared/lib/router/utils/remove-path-prefix'\nimport { NextDataPathnameNormalizer } from '../../normalizers/request/next-data'\nimport { BasePathPathnameNormalizer } from '../../normalizers/request/base-path'\n\nimport { addRequestMeta } from '../../request-meta'\nimport {\n compileNonPath,\n matchHas,\n prepareDestination,\n} from '../../../shared/lib/router/utils/prepare-destination'\nimport type { TLSSocket } from 'tls'\nimport {\n NEXT_REWRITTEN_PATH_HEADER,\n NEXT_REWRITTEN_QUERY_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n RSC_HEADER,\n} from '../../../client/components/app-router-headers'\nimport { getSelectedParams } from '../../../client/components/router-reducer/compute-changed-path'\nimport { isInterceptionRouteRewrite } from '../../../lib/generate-interception-routes-rewrites'\nimport { parseAndValidateFlightRouterState } from '../../app-render/parse-and-validate-flight-router-state'\n\nconst debug = setupDebug('next:router-server:resolve-routes')\n\nexport function getResolveRoutes(\n fsChecker: UnwrapPromise<\n ReturnType<typeof import('./filesystem').setupFsCheck>\n >,\n config: NextConfigComplete,\n opts: Parameters<typeof initialize>[0],\n renderServer: RenderServer,\n renderServerOpts: Parameters<RenderServer['initialize']>[0],\n ensureMiddleware?: (url?: string) => Promise<void>\n) {\n type Route = {\n /**\n * The path matcher to check if this route applies to this request.\n */\n match: PatchMatcher\n check?: boolean\n name?: string\n } & Partial<Header> &\n Partial<Redirect>\n\n const routes: Route[] = [\n // _next/data with middleware handling\n { match: () => ({}), name: 'middleware_next_data' },\n\n ...(opts.minimalMode ? [] : fsChecker.headers),\n ...(opts.minimalMode ? [] : fsChecker.redirects),\n\n // check middleware (using matchers)\n { match: () => ({}), name: 'middleware' },\n\n ...(opts.minimalMode ? [] : fsChecker.rewrites.beforeFiles),\n\n // check middleware (using matchers)\n { match: () => ({}), name: 'before_files_end' },\n\n // we check exact matches on fs before continuing to\n // after files rewrites\n { match: () => ({}), name: 'check_fs' },\n\n ...(opts.minimalMode ? [] : fsChecker.rewrites.afterFiles),\n\n // we always do the check: true handling before continuing to\n // fallback rewrites\n {\n check: true,\n match: () => ({}),\n name: 'after files check: true',\n },\n\n ...(opts.minimalMode ? [] : fsChecker.rewrites.fallback),\n ]\n\n async function resolveRoutes({\n req,\n res,\n isUpgradeReq,\n invokedOutputs,\n }: {\n req: IncomingMessage\n res: ServerResponse\n isUpgradeReq: boolean\n signal: AbortSignal\n invokedOutputs?: Set<string>\n }): Promise<{\n finished: boolean\n statusCode?: number\n bodyStream?: ReadableStream | null\n resHeaders: Record<string, string | string[]>\n parsedUrl: NextUrlWithParsedQuery\n matchedOutput?: FsOutput | null\n }> {\n let finished = false\n let resHeaders: Record<string, string | string[]> = {}\n let matchedOutput: FsOutput | null = null\n let parsedUrl = url.parse(req.url || '', true) as NextUrlWithParsedQuery\n let didRewrite = false\n\n const urlParts = (req.url || '').split('?', 1)\n const urlNoQuery = urlParts[0]\n\n // this normalizes repeated slashes in the path e.g. hello//world ->\n // hello/world or backslashes to forward slashes, this does not\n // handle trailing slash as that is handled the same as a next.config.js\n // redirect\n if (urlNoQuery?.match(/(\\\\|\\/\\/)/)) {\n parsedUrl = url.parse(normalizeRepeatedSlashes(req.url!), true)\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n statusCode: 308,\n }\n }\n // TODO: inherit this from higher up\n const protocol =\n (req?.socket as TLSSocket)?.encrypted ||\n req.headers['x-forwarded-proto']?.includes('https')\n ? 'https'\n : 'http'\n\n // When there are hostname and port we build an absolute URL\n const initUrl = (config.experimental as any).trustHostHeader\n ? `https://${req.headers.host || 'localhost'}${req.url}`\n : opts.port\n ? `${protocol}://${formatHostname(opts.hostname || 'localhost')}:${\n opts.port\n }${req.url}`\n : req.url || ''\n\n addRequestMeta(req, 'initURL', initUrl)\n addRequestMeta(req, 'initQuery', { ...parsedUrl.query })\n addRequestMeta(req, 'initProtocol', protocol)\n\n if (!isUpgradeReq) {\n const bodySizeLimit = config.experimental.middlewareClientMaxBodySize as\n | number\n | undefined\n addRequestMeta(req, 'clonableBody', getCloneableBody(req, bodySizeLimit))\n }\n\n const maybeAddTrailingSlash = (pathname: string) => {\n if (\n config.trailingSlash &&\n !config.skipMiddlewareUrlNormalize &&\n !pathname.endsWith('/')\n ) {\n return `${pathname}/`\n }\n return pathname\n }\n\n let domainLocale: ReturnType<typeof detectDomainLocale> | undefined\n let defaultLocale: string | undefined\n let initialLocaleResult:\n | ReturnType<typeof normalizeLocalePath>\n | undefined = undefined\n\n if (config.i18n) {\n const hadTrailingSlash = parsedUrl.pathname?.endsWith('/')\n const hadBasePath = pathHasPrefix(\n parsedUrl.pathname || '',\n config.basePath\n )\n let normalizedPath = parsedUrl.pathname || '/'\n\n if (config.basePath && pathHasPrefix(normalizedPath, config.basePath)) {\n normalizedPath = removePathPrefix(normalizedPath, config.basePath)\n } else if (\n config.assetPrefix &&\n pathHasPrefix(normalizedPath, config.assetPrefix)\n ) {\n normalizedPath = removePathPrefix(normalizedPath, config.assetPrefix)\n }\n\n initialLocaleResult = normalizeLocalePath(\n normalizedPath,\n config.i18n.locales\n )\n\n domainLocale = detectDomainLocale(\n config.i18n.domains,\n getHostname(parsedUrl, req.headers)\n )\n defaultLocale = domainLocale?.defaultLocale || config.i18n.defaultLocale\n\n addRequestMeta(req, 'defaultLocale', defaultLocale)\n addRequestMeta(\n req,\n 'locale',\n initialLocaleResult.detectedLocale || defaultLocale\n )\n\n // ensure locale is present for resolving routes\n if (\n !initialLocaleResult.detectedLocale &&\n !initialLocaleResult.pathname.startsWith('/_next/')\n ) {\n parsedUrl.pathname = addPathPrefix(\n initialLocaleResult.pathname === '/'\n ? `/${defaultLocale}`\n : addPathPrefix(\n initialLocaleResult.pathname || '',\n `/${defaultLocale}`\n ),\n hadBasePath ? config.basePath : ''\n )\n\n if (hadTrailingSlash) {\n parsedUrl.pathname = maybeAddTrailingSlash(parsedUrl.pathname)\n }\n }\n }\n\n const checkLocaleApi = (pathname: string) => {\n if (\n config.i18n &&\n pathname === urlNoQuery &&\n initialLocaleResult?.detectedLocale &&\n pathHasPrefix(initialLocaleResult.pathname, '/api')\n ) {\n return true\n }\n }\n\n async function checkTrue() {\n const pathname = parsedUrl.pathname || '/'\n\n if (checkLocaleApi(pathname)) {\n return\n }\n if (!invokedOutputs?.has(pathname)) {\n const output = await fsChecker.getItem(pathname)\n\n if (output) {\n if (\n config.useFileSystemPublicRoutes ||\n didRewrite ||\n (output.type !== 'appFile' && output.type !== 'pageFile')\n ) {\n return output\n }\n }\n }\n const dynamicRoutes = fsChecker.getDynamicRoutes()\n let curPathname = parsedUrl.pathname\n\n if (config.basePath) {\n if (!pathHasPrefix(curPathname || '', config.basePath)) {\n return\n }\n curPathname = curPathname?.substring(config.basePath.length) || '/'\n }\n const localeResult = fsChecker.handleLocale(curPathname || '')\n\n for (const route of dynamicRoutes) {\n // when resolving fallback: false the\n // render worker may return a no-fallback response\n // which signals we need to continue resolving.\n // TODO: optimize this to collect static paths\n // to use at the routing layer\n if (invokedOutputs?.has(route.page)) {\n continue\n }\n const params = route.match(localeResult.pathname)\n\n if (params) {\n const pageOutput = await fsChecker.getItem(\n addPathPrefix(route.page, config.basePath || '')\n )\n\n // i18n locales aren't matched for app dir\n if (\n pageOutput?.type === 'appFile' &&\n initialLocaleResult?.detectedLocale\n ) {\n continue\n }\n\n if (pageOutput && curPathname?.startsWith('/_next/data')) {\n addRequestMeta(req, 'isNextDataReq', true)\n }\n\n if (config.useFileSystemPublicRoutes || didRewrite) {\n return pageOutput\n }\n }\n }\n }\n\n const normalizers = {\n basePath:\n config.basePath && config.basePath !== '/'\n ? new BasePathPathnameNormalizer(config.basePath)\n : undefined,\n data: new NextDataPathnameNormalizer(fsChecker.buildId),\n }\n\n async function handleRoute(\n route: Route\n ): Promise<UnwrapPromise<ReturnType<typeof resolveRoutes>> | void> {\n let curPathname = parsedUrl.pathname || '/'\n\n if (config.i18n && route.internal) {\n const hadTrailingSlash = curPathname.endsWith('/')\n\n if (config.basePath) {\n curPathname = removePathPrefix(curPathname, config.basePath)\n }\n const hadBasePath = curPathname !== parsedUrl.pathname\n\n const localeResult = normalizeLocalePath(\n curPathname,\n config.i18n.locales\n )\n const isDefaultLocale = localeResult.detectedLocale === defaultLocale\n\n if (isDefaultLocale) {\n curPathname =\n localeResult.pathname === '/' && hadBasePath\n ? config.basePath\n : addPathPrefix(\n localeResult.pathname,\n hadBasePath ? config.basePath : ''\n )\n } else if (hadBasePath) {\n curPathname =\n curPathname === '/'\n ? config.basePath\n : addPathPrefix(curPathname, config.basePath)\n }\n\n if ((isDefaultLocale || hadBasePath) && hadTrailingSlash) {\n curPathname = maybeAddTrailingSlash(curPathname)\n }\n }\n let params = route.match(curPathname)\n\n if ((route.has || route.missing) && params) {\n const hasParams = matchHas(\n req,\n parsedUrl.query,\n route.has,\n route.missing\n )\n if (hasParams) {\n Object.assign(params, hasParams)\n } else {\n params = false\n }\n }\n\n if (params) {\n if (\n fsChecker.exportPathMapRoutes &&\n route.name === 'before_files_end'\n ) {\n for (const exportPathMapRoute of fsChecker.exportPathMapRoutes) {\n const result = await handleRoute(exportPathMapRoute)\n\n if (result) {\n return result\n }\n }\n }\n\n if (route.name === 'middleware_next_data' && parsedUrl.pathname) {\n if (fsChecker.getMiddlewareMatchers()?.length) {\n let normalized = parsedUrl.pathname\n\n // Remove the base path if it exists.\n const hadBasePath = normalizers.basePath?.match(parsedUrl.pathname)\n if (hadBasePath && normalizers.basePath) {\n normalized = normalizers.basePath.normalize(normalized, true)\n }\n\n let updated = false\n if (normalizers.data.match(normalized)) {\n updated = true\n addRequestMeta(req, 'isNextDataReq', true)\n normalized = normalizers.data.normalize(normalized, true)\n }\n\n if (config.i18n) {\n const curLocaleResult = normalizeLocalePath(\n normalized,\n config.i18n.locales\n )\n\n if (curLocaleResult.detectedLocale) {\n addRequestMeta(req, 'locale', curLocaleResult.detectedLocale)\n }\n }\n\n // If we updated the pathname, and it had a base path, re-add the\n // base path.\n if (updated) {\n if (hadBasePath) {\n normalized =\n normalized === '/'\n ? config.basePath\n : path.posix.join(config.basePath, normalized)\n }\n\n // Re-add the trailing slash (if required).\n normalized = maybeAddTrailingSlash(normalized)\n\n parsedUrl.pathname = normalized\n }\n }\n }\n\n if (route.name === 'check_fs') {\n const pathname = parsedUrl.pathname || '/'\n\n if (invokedOutputs?.has(pathname) || checkLocaleApi(pathname)) {\n return\n }\n const output = await fsChecker.getItem(pathname)\n\n if (\n output &&\n !(\n config.i18n &&\n initialLocaleResult?.detectedLocale &&\n pathHasPrefix(pathname, '/api')\n )\n ) {\n if (\n config.useFileSystemPublicRoutes ||\n didRewrite ||\n (output.type !== 'appFile' && output.type !== 'pageFile')\n ) {\n matchedOutput = output\n\n if (output.locale) {\n addRequestMeta(req, 'locale', output.locale)\n }\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n matchedOutput,\n }\n }\n }\n }\n\n if (!opts.minimalMode && route.name === 'middleware') {\n const match = fsChecker.getMiddlewareMatchers()\n let maybeDecodedPathname = parsedUrl.pathname || '/'\n\n try {\n maybeDecodedPathname = decodeURIComponent(maybeDecodedPathname)\n } catch {\n /* non-fatal we can't decode so can't match it */\n }\n\n if (\n // @ts-expect-error BaseNextRequest stuff\n match?.(parsedUrl.pathname, req, parsedUrl.query) ||\n match?.(\n maybeDecodedPathname,\n // @ts-expect-error BaseNextRequest stuff\n req,\n parsedUrl.query\n )\n ) {\n if (ensureMiddleware) {\n await ensureMiddleware(req.url)\n }\n\n const serverResult =\n await renderServer?.initialize(renderServerOpts)\n\n if (!serverResult) {\n throw new Error(`Failed to initialize render server \"middleware\"`)\n }\n\n addRequestMeta(req, 'invokePath', '')\n addRequestMeta(req, 'invokeOutput', '')\n addRequestMeta(req, 'invokeQuery', {})\n addRequestMeta(req, 'middlewareInvoke', true)\n debug('invoking middleware', req.url, req.headers)\n\n let middlewareRes: Response | undefined = undefined\n let bodyStream: ReadableStream | undefined = undefined\n try {\n try {\n await serverResult.requestHandler(req, res, parsedUrl)\n } catch (err: any) {\n if (!('result' in err) || !('response' in err.result)) {\n throw err\n }\n middlewareRes = err.result.response as Response\n res.statusCode = middlewareRes.status\n\n if (middlewareRes.body) {\n bodyStream = middlewareRes.body\n } else if (middlewareRes.status) {\n bodyStream = new ReadableStream({\n start(controller) {\n controller.enqueue('')\n controller.close()\n },\n })\n }\n }\n } catch (e) {\n // If the client aborts before we can receive a response object\n // (when the headers are flushed), then we can early exit without\n // further processing.\n if (isAbortError(e)) {\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n }\n }\n throw e\n }\n\n if (res.closed || res.finished || !middlewareRes) {\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n }\n }\n\n const middlewareHeaders = toNodeOutgoingHttpHeaders(\n middlewareRes.headers\n ) as Record<string, string | string[] | undefined>\n\n debug('middleware res', middlewareRes.status, middlewareHeaders)\n\n if (middlewareHeaders['x-middleware-override-headers']) {\n const overriddenHeaders: Set<string> = new Set()\n let overrideHeaders: string | string[] =\n middlewareHeaders['x-middleware-override-headers']\n\n if (typeof overrideHeaders === 'string') {\n overrideHeaders = overrideHeaders.split(',')\n }\n\n for (const key of overrideHeaders) {\n overriddenHeaders.add(key.trim())\n }\n delete middlewareHeaders['x-middleware-override-headers']\n\n // Delete headers.\n for (const key of Object.keys(req.headers)) {\n if (!overriddenHeaders.has(key)) {\n delete req.headers[key]\n }\n }\n\n // Update or add headers.\n for (const key of overriddenHeaders.keys()) {\n const valueKey = 'x-middleware-request-' + key\n const newValue = middlewareHeaders[valueKey]\n const oldValue = req.headers[key]\n\n if (oldValue !== newValue) {\n req.headers[key] = newValue === null ? undefined : newValue\n }\n delete middlewareHeaders[valueKey]\n }\n }\n\n if (\n !middlewareHeaders['x-middleware-rewrite'] &&\n !middlewareHeaders['x-middleware-next'] &&\n !middlewareHeaders['location']\n ) {\n middlewareHeaders['x-middleware-refresh'] = '1'\n }\n delete middlewareHeaders['x-middleware-next']\n\n for (const [key, value] of Object.entries({\n ...filterReqHeaders(middlewareHeaders, ipcForbiddenHeaders),\n })) {\n if (\n [\n 'content-length',\n 'x-middleware-rewrite',\n 'x-middleware-redirect',\n 'x-middleware-refresh',\n ].includes(key)\n ) {\n continue\n }\n\n // for set-cookie, the header shouldn't be added to the response\n // as it's only needed for the request to the middleware function.\n if (key === 'x-middleware-set-cookie') {\n req.headers[key] = value\n continue\n }\n\n if (value) {\n resHeaders[key] = value\n req.headers[key] = value\n }\n }\n\n if (middlewareHeaders['x-middleware-rewrite']) {\n const value = middlewareHeaders['x-middleware-rewrite'] as string\n const destination = getRelativeURL(value, initUrl)\n resHeaders['x-middleware-rewrite'] = destination\n\n parsedUrl = url.parse(destination, true)\n\n if (parsedUrl.protocol) {\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n }\n }\n\n if (config.i18n) {\n const curLocaleResult = normalizeLocalePath(\n parsedUrl.pathname || '',\n config.i18n.locales\n )\n\n if (curLocaleResult.detectedLocale) {\n addRequestMeta(req, 'locale', curLocaleResult.detectedLocale)\n }\n }\n }\n\n if (middlewareHeaders['location']) {\n const value = middlewareHeaders['location'] as string\n\n // Only process Location header as a redirect if it has a proper redirect status\n // This prevents a Location header with non-redirect status from being treated as a redirect\n const isRedirectStatus = allowedStatusCodes.has(\n middlewareRes.status\n )\n\n if (isRedirectStatus) {\n // Process as redirect: update parsedUrl and convert to relative URL\n const rel = getRelativeURL(value, initUrl)\n resHeaders['location'] = rel\n parsedUrl = url.parse(rel, true)\n\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n statusCode: middlewareRes.status,\n }\n } else {\n // Not a redirect: just pass through the Location header\n resHeaders['location'] = value\n\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n bodyStream,\n statusCode: middlewareRes.status,\n }\n }\n }\n\n if (middlewareHeaders['x-middleware-refresh']) {\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n bodyStream,\n statusCode: middlewareRes.status,\n }\n }\n }\n }\n\n // handle redirect\n if (\n ('statusCode' in route || 'permanent' in route) &&\n route.destination\n ) {\n const { parsedDestination } = prepareDestination({\n appendParamsToQuery: false,\n destination: route.destination,\n params: params,\n query: parsedUrl.query,\n })\n\n const { query } = parsedDestination\n delete (parsedDestination as any).query\n\n parsedDestination.search = stringifyQuery(req as any, query)\n\n parsedDestination.pathname = normalizeRepeatedSlashes(\n parsedDestination.pathname\n )\n\n return {\n finished: true,\n // @ts-expect-error custom ParsedUrl\n parsedUrl: parsedDestination,\n statusCode: getRedirectStatus(route),\n }\n }\n\n // handle headers\n if (route.headers) {\n const hasParams = Object.keys(params).length > 0\n for (const header of route.headers) {\n let { key, value } = header\n if (hasParams) {\n key = compileNonPath(key, params)\n value = compileNonPath(value, params)\n }\n\n if (key.toLowerCase() === 'set-cookie') {\n if (!Array.isArray(resHeaders[key])) {\n const val = resHeaders[key]\n resHeaders[key] = typeof val === 'string' ? [val] : []\n }\n ;(resHeaders[key] as string[]).push(value)\n } else {\n resHeaders[key] = value\n }\n }\n }\n\n // handle rewrite\n if (route.destination) {\n let rewriteParams = params\n\n try {\n // An interception rewrite might reference a dynamic param for a route the user\n // is currently on, which wouldn't be extractable from the matched route params.\n // This attempts to extract the dynamic params from the provided router state.\n if (isInterceptionRouteRewrite(route as Rewrite)) {\n const stateHeader = req.headers[NEXT_ROUTER_STATE_TREE_HEADER]\n\n if (stateHeader) {\n rewriteParams = {\n ...getSelectedParams(\n parseAndValidateFlightRouterState(stateHeader)\n ),\n ...params,\n }\n }\n }\n } catch (err) {\n // this is a no-op -- we couldn't extract dynamic params from the provided router state,\n // so we'll just use the params from the route matcher\n }\n\n const { parsedDestination } = prepareDestination({\n appendParamsToQuery: true,\n destination: route.destination,\n params: rewriteParams,\n query: parsedUrl.query,\n })\n\n if (parsedDestination.protocol) {\n return {\n // @ts-expect-error custom ParsedUrl\n parsedUrl: parsedDestination,\n finished: true,\n }\n }\n\n // Set the rewrite headers only if this is a RSC request.\n if (req.headers[RSC_HEADER] === '1') {\n // We set the rewritten path and query headers on the response now\n // that we know that the it's not an external rewrite.\n if (parsedUrl.pathname !== parsedDestination.pathname) {\n res.setHeader(\n NEXT_REWRITTEN_PATH_HEADER,\n parsedDestination.pathname\n )\n }\n if (parsedUrl.search !== parsedDestination.search) {\n res.setHeader(\n NEXT_REWRITTEN_QUERY_HEADER,\n // remove the leading ? from the search\n parsedDestination.search.slice(1)\n )\n }\n }\n\n if (config.i18n) {\n const curLocaleResult = normalizeLocalePath(\n removePathPrefix(parsedDestination.pathname, config.basePath),\n config.i18n.locales\n )\n\n if (curLocaleResult.detectedLocale) {\n addRequestMeta(req, 'locale', curLocaleResult.detectedLocale)\n }\n }\n didRewrite = true\n parsedUrl.pathname = parsedDestination.pathname\n Object.assign(parsedUrl.query, parsedDestination.query)\n }\n\n // handle check: true\n if (route.check) {\n const output = await checkTrue()\n\n if (output) {\n return {\n parsedUrl,\n resHeaders,\n finished: true,\n matchedOutput: output,\n }\n }\n }\n }\n }\n\n for (const route of routes) {\n const result = await handleRoute(route)\n if (result) {\n return result\n }\n }\n\n return {\n finished,\n parsedUrl,\n resHeaders,\n matchedOutput,\n }\n }\n\n return resolveRoutes\n}\n"],"names":["url","path","setupDebug","getCloneableBody","filterReqHeaders","ipcForbiddenHeaders","stringifyQuery","formatHostname","toNodeOutgoingHttpHeaders","isAbortError","getHostname","getRedirectStatus","allowedStatusCodes","normalizeRepeatedSlashes","getRelativeURL","addPathPrefix","pathHasPrefix","detectDomainLocale","normalizeLocalePath","removePathPrefix","NextDataPathnameNormalizer","BasePathPathnameNormalizer","addRequestMeta","compileNonPath","matchHas","prepareDestination","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","NEXT_ROUTER_STATE_TREE_HEADER","RSC_HEADER","getSelectedParams","isInterceptionRouteRewrite","parseAndValidateFlightRouterState","debug","getResolveRoutes","fsChecker","config","opts","renderServer","renderServerOpts","ensureMiddleware","routes","match","name","minimalMode","headers","redirects","rewrites","beforeFiles","afterFiles","check","fallback","resolveRoutes","req","res","isUpgradeReq","invokedOutputs","finished","resHeaders","matchedOutput","parsedUrl","parse","didRewrite","urlParts","split","urlNoQuery","statusCode","protocol","socket","encrypted","includes","initUrl","experimental","trustHostHeader","host","port","hostname","query","bodySizeLimit","middlewareClientMaxBodySize","maybeAddTrailingSlash","pathname","trailingSlash","skipMiddlewareUrlNormalize","endsWith","domainLocale","defaultLocale","initialLocaleResult","undefined","i18n","hadTrailingSlash","hadBasePath","basePath","normalizedPath","assetPrefix","locales","domains","detectedLocale","startsWith","checkLocaleApi","checkTrue","has","output","getItem","useFileSystemPublicRoutes","type","dynamicRoutes","getDynamicRoutes","curPathname","substring","length","localeResult","handleLocale","route","page","params","pageOutput","normalizers","data","buildId","handleRoute","internal","isDefaultLocale","missing","hasParams","Object","assign","exportPathMapRoutes","exportPathMapRoute","result","getMiddlewareMatchers","normalized","normalize","updated","curLocaleResult","posix","join","locale","maybeDecodedPathname","decodeURIComponent","serverResult","initialize","Error","middlewareRes","bodyStream","requestHandler","err","response","status","body","ReadableStream","start","controller","enqueue","close","e","closed","middlewareHeaders","overriddenHeaders","Set","overrideHeaders","key","add","trim","keys","valueKey","newValue","oldValue","value","entries","destination","isRedirectStatus","rel","parsedDestination","appendParamsToQuery","search","header","toLowerCase","Array","isArray","val","push","rewriteParams","stateHeader","setHeader","slice"],"mappings":"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","ignoreList":[0]}
Save
cmd:
run