next 15.4.6 → 15.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/next +1 -1
- package/dist/build/index.js +2 -2
- package/dist/build/swc/index.js +1 -1
- package/dist/build/webpack-config.js +2 -2
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-api.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
- package/dist/esm/build/index.js +2 -2
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/webpack-config.js +2 -2
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/router-utils/resolve-routes.js +26 -10
- package/dist/esm/server/lib/router-utils/resolve-routes.js.map +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/esm/shared/lib/canary-only.js +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/router-utils/resolve-routes.js +25 -9
- package/dist/server/lib/router-utils/resolve-routes.js.map +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/shared/lib/canary-only.js +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +15 -15
package/dist/esm/build/index.js
CHANGED
@@ -320,7 +320,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
|
|
320
320
|
const nextBuildSpan = trace('next-build', undefined, {
|
321
321
|
buildMode: experimentalBuildMode,
|
322
322
|
isTurboBuild: String(isTurbopack),
|
323
|
-
version: "15.4.
|
323
|
+
version: "15.4.7"
|
324
324
|
});
|
325
325
|
NextBuildContext.nextBuildSpan = nextBuildSpan;
|
326
326
|
NextBuildContext.dir = dir;
|
@@ -707,7 +707,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
|
|
707
707
|
// Files outside of the distDir can be "type": "module"
|
708
708
|
await writeFileUtf8(path.join(distDir, 'package.json'), '{"type": "commonjs"}');
|
709
709
|
// These are written to distDir, so they need to come after creating and cleaning distDr.
|
710
|
-
await recordFrameworkVersion("15.4.
|
710
|
+
await recordFrameworkVersion("15.4.7");
|
711
711
|
await updateBuildDiagnostics({
|
712
712
|
buildStage: 'start'
|
713
713
|
});
|
@@ -11,7 +11,7 @@ import { isDeepStrictEqual } from 'util';
|
|
11
11
|
import { getDefineEnv } from '../define-env';
|
12
12
|
import { getReactCompilerLoader } from '../get-babel-loader-config';
|
13
13
|
import { TurbopackInternalError } from '../../shared/lib/turbopack/utils';
|
14
|
-
const nextVersion = "15.4.
|
14
|
+
const nextVersion = "15.4.7";
|
15
15
|
const ArchName = arch();
|
16
16
|
const PlatformName = platform();
|
17
17
|
function infoLog(...args) {
|
@@ -1587,7 +1587,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
|
|
1587
1587
|
isClient && new CopyFilePlugin({
|
1588
1588
|
// file path to build output of `@next/polyfill-nomodule`
|
1589
1589
|
filePath: require.resolve('./polyfills/polyfill-nomodule'),
|
1590
|
-
cacheKey: "15.4.
|
1590
|
+
cacheKey: "15.4.7",
|
1591
1591
|
name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
|
1592
1592
|
minimize: false,
|
1593
1593
|
info: {
|
@@ -1767,7 +1767,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
|
|
1767
1767
|
// - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
|
1768
1768
|
// - Next.js version
|
1769
1769
|
// - next.config.js keys that affect compilation
|
1770
|
-
version: `${__dirname}|${"15.4.
|
1770
|
+
version: `${__dirname}|${"15.4.7"}|${configVars}`,
|
1771
1771
|
cacheDirectory: path.join(distDir, 'cache', 'webpack'),
|
1772
1772
|
// For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
|
1773
1773
|
// So we disable compression here and allow the build runner to take care of compressing the cache as a whole.
|
package/dist/esm/client/index.js
CHANGED
@@ -26,7 +26,7 @@ import { SearchParamsContext, PathParamsContext } from '../shared/lib/hooks-clie
|
|
26
26
|
import { onRecoverableError } from './react-client-callbacks/on-recoverable-error';
|
27
27
|
import tracer from './tracing/tracer';
|
28
28
|
import { isNextRouterError } from './components/is-next-router-error';
|
29
|
-
export const version = "15.4.
|
29
|
+
export const version = "15.4.7";
|
30
30
|
export let router;
|
31
31
|
export const emitter = mitt();
|
32
32
|
const looseToArray = (input)=>[].slice.call(input);
|
@@ -88,7 +88,7 @@ export async function createHotReloaderTurbopack(opts, serverFields, distDir, re
|
|
88
88
|
}
|
89
89
|
const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
|
90
90
|
const hotReloaderSpan = trace('hot-reloader', undefined, {
|
91
|
-
version: "15.4.
|
91
|
+
version: "15.4.7"
|
92
92
|
});
|
93
93
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
94
94
|
// of the current `next dev` invocation.
|
@@ -185,7 +185,7 @@ export default class HotReloaderWebpack {
|
|
185
185
|
this.previewProps = previewProps;
|
186
186
|
this.rewrites = rewrites;
|
187
187
|
this.hotReloaderSpan = trace('hot-reloader', undefined, {
|
188
|
-
version: "15.4.
|
188
|
+
version: "15.4.7"
|
189
189
|
});
|
190
190
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
191
191
|
// of the current `next dev` invocation.
|
@@ -12,7 +12,7 @@ export function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures
|
|
12
12
|
} else {
|
13
13
|
bundlerSuffix = '';
|
14
14
|
}
|
15
|
-
Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.
|
15
|
+
Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.7"}`))}${bundlerSuffix}`);
|
16
16
|
if (appUrl) {
|
17
17
|
Log.bootstrap(`- Local: ${appUrl}`);
|
18
18
|
}
|
@@ -8,7 +8,7 @@ import { formatHostname } from '../format-hostname';
|
|
8
8
|
import { toNodeOutgoingHttpHeaders } from '../../web/utils';
|
9
9
|
import { isAbortError } from '../../pipe-readable';
|
10
10
|
import { getHostname } from '../../../shared/lib/get-hostname';
|
11
|
-
import { getRedirectStatus } from '../../../lib/redirect-status';
|
11
|
+
import { getRedirectStatus, allowedStatusCodes } from '../../../lib/redirect-status';
|
12
12
|
import { normalizeRepeatedSlashes } from '../../../shared/lib/utils';
|
13
13
|
import { getRelativeURL } from '../../../shared/lib/router/utils/relativize-url';
|
14
14
|
import { addPathPrefix } from '../../../shared/lib/router/utils/add-path-prefix';
|
@@ -419,15 +419,31 @@ export function getResolveRoutes(fsChecker, config, opts, renderServer, renderSe
|
|
419
419
|
}
|
420
420
|
if (middlewareHeaders['location']) {
|
421
421
|
const value = middlewareHeaders['location'];
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
parsedUrl
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
422
|
+
// Only process Location header as a redirect if it has a proper redirect status
|
423
|
+
// This prevents a Location header with non-redirect status from being treated as a redirect
|
424
|
+
const isRedirectStatus = allowedStatusCodes.has(middlewareRes.status);
|
425
|
+
if (isRedirectStatus) {
|
426
|
+
// Process as redirect: update parsedUrl and convert to relative URL
|
427
|
+
const rel = getRelativeURL(value, initUrl);
|
428
|
+
resHeaders['location'] = rel;
|
429
|
+
parsedUrl = url.parse(rel, true);
|
430
|
+
return {
|
431
|
+
parsedUrl,
|
432
|
+
resHeaders,
|
433
|
+
finished: true,
|
434
|
+
statusCode: middlewareRes.status
|
435
|
+
};
|
436
|
+
} else {
|
437
|
+
// Not a redirect: just pass through the Location header
|
438
|
+
resHeaders['location'] = value;
|
439
|
+
return {
|
440
|
+
parsedUrl,
|
441
|
+
resHeaders,
|
442
|
+
finished: true,
|
443
|
+
bodyStream,
|
444
|
+
statusCode: middlewareRes.status
|
445
|
+
};
|
446
|
+
}
|
431
447
|
}
|
432
448
|
if (middlewareHeaders['x-middleware-refresh']) {
|
433
449
|
return {
|
@@ -1 +1 @@
|
|
1
|
-
{"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 { getRedirectStatus } 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 parseDestination,\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 addRequestMeta(req, 'clonableBody', getCloneableBody(req))\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: (typeof routes)[0]\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 = 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 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 }\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 =\n req.headers[NEXT_ROUTER_STATE_TREE_HEADER.toLowerCase()]\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 // We extract the search params of the destination so we can set it on\n // the response headers. We don't want to use the following\n // `parsedDestination` as the query object is mutated.\n const { search: destinationSearch, pathname: destinationPathname } =\n parseDestination({\n destination: route.destination,\n params: rewriteParams,\n query: parsedUrl.query,\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.toLowerCase()] === '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 !== destinationPathname) {\n res.setHeader(NEXT_REWRITTEN_PATH_HEADER, destinationPathname)\n }\n if (destinationSearch) {\n res.setHeader(\n NEXT_REWRITTEN_QUERY_HEADER,\n // remove the leading ? from the search\n destinationSearch.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","normalizeRepeatedSlashes","getRelativeURL","addPathPrefix","pathHasPrefix","detectDomainLocale","normalizeLocalePath","removePathPrefix","NextDataPathnameNormalizer","BasePathPathnameNormalizer","addRequestMeta","compileNonPath","matchHas","parseDestination","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","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","rel","parsedDestination","appendParamsToQuery","search","header","toLowerCase","Array","isArray","val","push","rewriteParams","stateHeader","destinationSearch","destinationPathname","setHeader","slice"],"mappings":"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","ignoreList":[0]}
|
1
|
+
{"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 parseDestination,\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 addRequestMeta(req, 'clonableBody', getCloneableBody(req))\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: (typeof routes)[0]\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 = 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 =\n req.headers[NEXT_ROUTER_STATE_TREE_HEADER.toLowerCase()]\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 // We extract the search params of the destination so we can set it on\n // the response headers. We don't want to use the following\n // `parsedDestination` as the query object is mutated.\n const { search: destinationSearch, pathname: destinationPathname } =\n parseDestination({\n destination: route.destination,\n params: rewriteParams,\n query: parsedUrl.query,\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.toLowerCase()] === '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 !== destinationPathname) {\n res.setHeader(NEXT_REWRITTEN_PATH_HEADER, destinationPathname)\n }\n if (destinationSearch) {\n res.setHeader(\n NEXT_REWRITTEN_QUERY_HEADER,\n // remove the leading ? from the search\n destinationSearch.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","parseDestination","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","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","destinationSearch","destinationPathname","setHeader","slice"],"mappings":"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","ignoreList":[0]}
|
@@ -103,7 +103,7 @@ export async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup,
|
|
103
103
|
export async function startServer(serverOptions) {
|
104
104
|
const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
|
105
105
|
let { port } = serverOptions;
|
106
|
-
process.title = `next-server (v${"15.4.
|
106
|
+
process.title = `next-server (v${"15.4.7"})`;
|
107
107
|
let handlersReady = ()=>{};
|
108
108
|
let handlersError = ()=>{};
|
109
109
|
let handlersPromise = new Promise((resolve, reject)=>{
|
@@ -1,6 +1,6 @@
|
|
1
1
|
export function isStableBuild() {
|
2
2
|
var _process_env___NEXT_VERSION;
|
3
|
-
return !((_process_env___NEXT_VERSION = "15.4.
|
3
|
+
return !((_process_env___NEXT_VERSION = "15.4.7") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
|
4
4
|
}
|
5
5
|
export class CanaryOnlyError extends Error {
|
6
6
|
constructor(arg){
|
@@ -144,7 +144,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
|
|
144
144
|
}
|
145
145
|
const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
|
146
146
|
const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
|
147
|
-
version: "15.4.
|
147
|
+
version: "15.4.7"
|
148
148
|
});
|
149
149
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
150
150
|
// of the current `next dev` invocation.
|
@@ -261,7 +261,7 @@ class HotReloaderWebpack {
|
|
261
261
|
this.previewProps = previewProps;
|
262
262
|
this.rewrites = rewrites;
|
263
263
|
this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
|
264
|
-
version: "15.4.
|
264
|
+
version: "15.4.7"
|
265
265
|
});
|
266
266
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
267
267
|
// of the current `next dev` invocation.
|
@@ -80,7 +80,7 @@ function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, maxEx
|
|
80
80
|
} else {
|
81
81
|
bundlerSuffix = '';
|
82
82
|
}
|
83
|
-
_log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.4.
|
83
|
+
_log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.4.7"}`))}${bundlerSuffix}`);
|
84
84
|
if (appUrl) {
|
85
85
|
_log.bootstrap(`- Local: ${appUrl}`);
|
86
86
|
}
|
@@ -434,15 +434,31 @@ function getResolveRoutes(fsChecker, config, opts, renderServer, renderServerOpt
|
|
434
434
|
}
|
435
435
|
if (middlewareHeaders['location']) {
|
436
436
|
const value = middlewareHeaders['location'];
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
parsedUrl
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
437
|
+
// Only process Location header as a redirect if it has a proper redirect status
|
438
|
+
// This prevents a Location header with non-redirect status from being treated as a redirect
|
439
|
+
const isRedirectStatus = _redirectstatus.allowedStatusCodes.has(middlewareRes.status);
|
440
|
+
if (isRedirectStatus) {
|
441
|
+
// Process as redirect: update parsedUrl and convert to relative URL
|
442
|
+
const rel = (0, _relativizeurl.getRelativeURL)(value, initUrl);
|
443
|
+
resHeaders['location'] = rel;
|
444
|
+
parsedUrl = _url.default.parse(rel, true);
|
445
|
+
return {
|
446
|
+
parsedUrl,
|
447
|
+
resHeaders,
|
448
|
+
finished: true,
|
449
|
+
statusCode: middlewareRes.status
|
450
|
+
};
|
451
|
+
} else {
|
452
|
+
// Not a redirect: just pass through the Location header
|
453
|
+
resHeaders['location'] = value;
|
454
|
+
return {
|
455
|
+
parsedUrl,
|
456
|
+
resHeaders,
|
457
|
+
finished: true,
|
458
|
+
bodyStream,
|
459
|
+
statusCode: middlewareRes.status
|
460
|
+
};
|
461
|
+
}
|
446
462
|
}
|
447
463
|
if (middlewareHeaders['x-middleware-refresh']) {
|
448
464
|
return {
|