UNPKG

125 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../../next-server/server/next-server.ts"],"names":["getCustomRouteMatcher","Server","constructor","dir","quiet","conf","dev","minimalMode","customServer","nextConfig","distDir","pagesDir","publicDir","hasStaticDir","serverBuildDir","pagesManifest","buildId","renderOpts","compression","incrementalCache","router","dynamicRoutes","customRoutes","_cachedPreviewManifest","customErrorNo404Warn","console","warn","chalk","bold","yellow","_validFilesystemPathSet","Log","CLIENT_PUBLIC_FILES_PATH","fs","existsSync","serverRuntimeConfig","publicRuntimeConfig","assetPrefix","generateEtags","compress","readBuildId","poweredByHeader","canonicalBase","amp","previewProps","getPreviewProps","undefined","ampOptimizerConfig","experimental","optimizer","basePath","images","JSON","stringify","optimizeFonts","fontManifest","_isLikeServerless","optimizeImages","optimizeCss","disableOptimizedLoading","domainLocales","i18n","domains","Object","keys","length","runtimeConfig","target","envConfig","setConfig","SERVERLESS_DIRECTORY","SERVER_DIRECTORY","pagesManifestPath","PAGES_MANIFEST","require","getCustomRoutes","Router","generateRoutes","setAssetPrefix","IncrementalCache","locales","flushToDisk","sprFlushToDisk","process","env","__NEXT_OPTIMIZE_FONTS","__NEXT_OPTIMIZE_IMAGES","__NEXT_OPTIMIZE_CSS","logError","err","error","handleRequest","req","res","parsedUrl","url","query","__NEXT_INIT_QUERY","assign","startsWith","_nextHadBasePath","replace","headers","reqUrlIsDataUrl","includes","matchedPathIsDataUrl","isDataUrl","parsedPath","pathname","matchedPathname","matchedPathnameNoExt","localePathResult","detectedLocale","__nextLocale","pageIsDynamic","combinedRewrites","push","rewrites","beforeFiles","afterFiles","fallback","utils","page","handleRewrites","params","paramsResult","normalizeDynamicRouteParams","hasValidParams","opts","getParamsFromRouteMatches","locale","dynamicRouteMatcher","interpolateDynamicPath","normalizeVercelUrl","parsed","defaultLocale","acceptPreferredLocale","localeDetection","accept","language","_","host","hostname","split","toLowerCase","detectedDomain","__nextIsLocaleDomain","localeDomainRedirect","__nextHadTrailingSlash","endsWith","trailingSlash","__nextStrippedLocale","localeToCheck","matchedDomain","domain","http","denormalizedPagePath","detectedDefaultLocale","shouldStripDefaultLocale","shouldAddLocalePrefix","previous","getHeader","setHeader","Array","isArray","cookie","serialize","httpOnly","path","statusCode","TEMPORARY_REDIRECT_STATUS","end","__nextDefaultLocale","run","getRequestHandler","bind","prefix","prepare","close","setImmutableAssetCacheControl","ROUTES_MANIFEST","getPrerenderManifest","manifest","PRERENDER_MANIFEST","preview","server","publicRoutes","generatePublicRoutes","staticFilesRoute","match","name","fn","p","serveStatic","finished","fsRoutes","type","render404","CLIENT_STATIC_FILES_RUNTIME","CLIENT_STATIC_FILES_PATH","_parsedUrl","shift","join","render","_nextDataReq","_params","getCustomRoute","r","source","_req","_res","map","headerRoute","has","hasParams","header","key","value","stringifyQuery","initialQueryValues","values","encodeURIComponent","some","val","redirects","redirect","redirectRoute","internal","parsedDestination","destination","search","updatedDestination","buildRewrite","rewrite","check","rewriteRoute","newUrl","protocol","proxy","Proxy","changeOrigin","ignorePath","proxyTimeout","Promise","proxyResolve","proxyReject","on","proxyReq","web","_nextRewroteUrl","_nextDidRewrite","catchAllRoute","Error","bubbleNoFallback","_nextBubbleNoFallback","handled","handleApiRequest","NoFallbackError","useFileSystemPublicRoutes","getDynamicRoutes","pageChecker","hasPage","getPagePath","found","_beforeCatchAllRender","ensureApiPage","_pathname","pageFound","dynamicRoute","builtPagePath","code","pageModule","default","prepareServerlessUrl","publicFiles","Set","encodeURI","pathParts","basePathParts","every","part","idx","splice","addedPages","add","filter","item","Boolean","handleCompression","matched","execute","renderError","sendHTML","html","renderToHTML","findPageComponents","paths","pagePath","components","Component","getStaticProps","getStaticPaths","staticPaths","fallbackField","fallbackMode","renderToHTMLWithComponents","is404Page","is500Page","isLikeServerless","renderReqToHTML","isSSG","hasServerProps","getServerSideProps","hasStaticPaths","hasGetInitialProps","getInitialProps","isDataReq","STATIC_STATUS_PAGES","parseInt","substr","previewData","isPreviewMode","urlPathname","resolvedUrlPathname","stripNextDataPath","splitPath","substring","indexOf","handleRedirect","pageData","pageProps","__N_REDIRECT","__N_REDIRECT_STATUS","__N_REDIRECT_BASE_PATH","PERMANENT_REDIRECT_STATUS","ssgCacheKey","seg","decodeURIComponent","cachedData","get","data","revalidateOptions","private","stateful","revalidate","curRevalidate","isNotFound","isStale","maybeCoalesceInvoke","isOrigin","doRender","sprRevalidate","isRedirect","renderResult","origQuery","hadTrailingSlash","resolvedUrl","resolvedAsPath","isProduction","isDynamicPathname","didRespond","getFallback","__nextFallback","resHtml","set","result","isNoFallbackError","dynamicRouteResult","renderErrorToHTML","setHeaders","is404","using404Page","statusPage","NODE_ENV","maybeFallbackError","renderToHtmlError","hotReloader","buildFallbackError","fallbackResult","isServeableUrl","method","getFilesystemPaths","pathUserFilesStatic","userFilesStatic","f","userFilesPublic","nextFilesStatic","untrustedFileUrl","decodedUntrustedFilePath","untrustedFilePath","sep","filesystemUrls","resolved","buildIdFile","BUILD_ID_FILE","readFileSync","trim","curUrl"],"mappings":"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","sourcesContent":["import compression from 'next/dist/compiled/compression'\nimport fs from 'fs'\nimport chalk from 'chalk'\nimport { IncomingMessage, ServerResponse } from 'http'\nimport Proxy from 'next/dist/compiled/http-proxy'\nimport { join, relative, resolve, sep } from 'path'\nimport {\n parse as parseQs,\n stringify as stringifyQs,\n ParsedUrlQuery,\n} from 'querystring'\nimport { format as formatUrl, parse as parseUrl, UrlWithParsedQuery } from 'url'\nimport { PrerenderManifest } from '../../build'\nimport {\n getRedirectStatus,\n Header,\n Redirect,\n Rewrite,\n RouteType,\n CustomRoutes,\n} from '../../lib/load-custom-routes'\nimport { withCoalescedInvoke } from '../../lib/coalesced-function'\nimport {\n BUILD_ID_FILE,\n CLIENT_PUBLIC_FILES_PATH,\n CLIENT_STATIC_FILES_PATH,\n CLIENT_STATIC_FILES_RUNTIME,\n PAGES_MANIFEST,\n PERMANENT_REDIRECT_STATUS,\n PRERENDER_MANIFEST,\n ROUTES_MANIFEST,\n SERVERLESS_DIRECTORY,\n SERVER_DIRECTORY,\n STATIC_STATUS_PAGES,\n TEMPORARY_REDIRECT_STATUS,\n} from '../lib/constants'\nimport {\n getRouteMatcher,\n getRouteRegex,\n getSortedRoutes,\n isDynamicRoute,\n} from '../lib/router/utils'\nimport * as envConfig from '../lib/runtime-config'\nimport { isResSent, NextApiRequest, NextApiResponse } from '../lib/utils'\nimport {\n apiResolver,\n setLazyProp,\n getCookieParser,\n tryGetPreviewData,\n __ApiPreviewProps,\n} from './api-utils'\nimport { DomainLocales, isTargetLikeServerless, NextConfig } from './config'\nimport pathMatch from '../lib/router/utils/path-match'\nimport { recursiveReadDirSync } from './lib/recursive-readdir-sync'\nimport {\n loadComponents,\n LoadComponentsReturnType,\n loadDefaultErrorComponents,\n} from './load-components'\nimport { normalizePagePath } from './normalize-page-path'\nimport { RenderOpts, RenderOptsPartial, renderToHTML } from './render'\nimport { getPagePath, requireFontManifest } from './require'\nimport Router, {\n DynamicRoutes,\n PageChecker,\n Params,\n route,\n Route,\n} from './router'\nimport prepareDestination, {\n compileNonPath,\n} from '../lib/router/utils/prepare-destination'\nimport { sendPayload, setRevalidateHeaders } from './send-payload'\nimport { serveStatic } from './serve-static'\nimport { IncrementalCache } from './incremental-cache'\nimport { execOnce } from '../lib/utils'\nimport { isBlockedPage } from './utils'\nimport { loadEnvConfig } from '@next/env'\nimport './node-polyfill-fetch'\nimport { PagesManifest } from '../../build/webpack/plugins/pages-manifest-plugin'\nimport { removePathTrailingSlash } from '../../client/normalize-trailing-slash'\nimport getRouteFromAssetPath from '../lib/router/utils/get-route-from-asset-path'\nimport { FontManifest } from './font-utils'\nimport { denormalizePagePath } from './denormalize-page-path'\nimport accept from '@hapi/accept'\nimport { normalizeLocalePath } from '../lib/i18n/normalize-locale-path'\nimport { detectLocaleCookie } from '../lib/i18n/detect-locale-cookie'\nimport * as Log from '../../build/output/log'\nimport { imageOptimizer } from './image-optimizer'\nimport { detectDomainLocale } from '../lib/i18n/detect-domain-locale'\nimport cookie from 'next/dist/compiled/cookie'\nimport escapePathDelimiters from '../lib/router/utils/escape-path-delimiters'\nimport { getUtils } from '../../build/webpack/loaders/next-serverless-loader/utils'\nimport { PreviewData } from 'next/types'\nimport HotReloader from '../../server/hot-reloader'\n\nconst getCustomRouteMatcher = pathMatch(true)\n\ntype Middleware = (\n req: IncomingMessage,\n res: ServerResponse,\n next: (err?: Error) => void\n) => void\n\ntype FindComponentsResult = {\n components: LoadComponentsReturnType\n query: ParsedUrlQuery\n}\n\ntype DynamicRouteItem = {\n page: string\n match: ReturnType<typeof getRouteMatcher>\n}\n\nexport type ServerConstructor = {\n /**\n * Where the Next project is located - @default '.'\n */\n dir?: string\n /**\n * Hide error messages containing server information - @default false\n */\n quiet?: boolean\n /**\n * Object what you would use in next.config.js - @default {}\n */\n conf?: NextConfig | null\n dev?: boolean\n customServer?: boolean\n}\n\nexport default class Server {\n protected dir: string\n protected quiet: boolean\n protected nextConfig: NextConfig\n protected distDir: string\n protected pagesDir?: string\n protected publicDir: string\n protected hasStaticDir: boolean\n protected serverBuildDir: string\n protected pagesManifest?: PagesManifest\n protected buildId: string\n protected minimalMode: boolean\n protected renderOpts: {\n poweredByHeader: boolean\n buildId: string\n generateEtags: boolean\n runtimeConfig?: { [key: string]: any }\n assetPrefix?: string\n canonicalBase: string\n dev?: boolean\n previewProps: __ApiPreviewProps\n customServer?: boolean\n ampOptimizerConfig?: { [key: string]: any }\n basePath: string\n optimizeFonts: boolean\n images: string\n fontManifest: FontManifest\n optimizeImages: boolean\n disableOptimizedLoading?: boolean\n optimizeCss: any\n locale?: string\n locales?: string[]\n defaultLocale?: string\n domainLocales?: DomainLocales\n distDir: string\n }\n private compression?: Middleware\n private incrementalCache: IncrementalCache\n protected router: Router\n protected dynamicRoutes?: DynamicRoutes\n protected customRoutes: CustomRoutes\n\n public constructor({\n dir = '.',\n quiet = false,\n conf,\n dev = false,\n minimalMode = false,\n customServer = true,\n }: ServerConstructor & { conf: NextConfig; minimalMode?: boolean }) {\n this.dir = resolve(dir)\n this.quiet = quiet\n loadEnvConfig(this.dir, dev, Log)\n\n this.nextConfig = conf\n this.distDir = join(this.dir, this.nextConfig.distDir)\n this.publicDir = join(this.dir, CLIENT_PUBLIC_FILES_PATH)\n this.hasStaticDir = !minimalMode && fs.existsSync(join(this.dir, 'static'))\n\n // Only serverRuntimeConfig needs the default\n // publicRuntimeConfig gets it's default in client/index.js\n const {\n serverRuntimeConfig = {},\n publicRuntimeConfig,\n assetPrefix,\n generateEtags,\n compress,\n } = this.nextConfig\n\n this.buildId = this.readBuildId()\n this.minimalMode = minimalMode\n\n this.renderOpts = {\n poweredByHeader: this.nextConfig.poweredByHeader,\n canonicalBase: this.nextConfig.amp.canonicalBase,\n buildId: this.buildId,\n generateEtags,\n previewProps: this.getPreviewProps(),\n customServer: customServer === true ? true : undefined,\n ampOptimizerConfig: this.nextConfig.experimental.amp?.optimizer,\n basePath: this.nextConfig.basePath,\n images: JSON.stringify(this.nextConfig.images),\n optimizeFonts: !!this.nextConfig.optimizeFonts && !dev,\n fontManifest:\n this.nextConfig.optimizeFonts && !dev\n ? requireFontManifest(this.distDir, this._isLikeServerless)\n : null,\n optimizeImages: !!this.nextConfig.experimental.optimizeImages,\n optimizeCss: this.nextConfig.experimental.optimizeCss,\n disableOptimizedLoading: this.nextConfig.experimental\n .disableOptimizedLoading,\n domainLocales: this.nextConfig.i18n?.domains,\n distDir: this.distDir,\n }\n\n // Only the `publicRuntimeConfig` key is exposed to the client side\n // It'll be rendered as part of __NEXT_DATA__ on the client side\n if (Object.keys(publicRuntimeConfig).length > 0) {\n this.renderOpts.runtimeConfig = publicRuntimeConfig\n }\n\n if (compress && this.nextConfig.target === 'server') {\n this.compression = compression() as Middleware\n }\n\n // Initialize next/config with the environment configuration\n envConfig.setConfig({\n serverRuntimeConfig,\n publicRuntimeConfig,\n })\n\n this.serverBuildDir = join(\n this.distDir,\n this._isLikeServerless ? SERVERLESS_DIRECTORY : SERVER_DIRECTORY\n )\n const pagesManifestPath = join(this.serverBuildDir, PAGES_MANIFEST)\n\n if (!dev) {\n this.pagesManifest = require(pagesManifestPath)\n }\n\n this.customRoutes = this.getCustomRoutes()\n this.router = new Router(this.generateRoutes())\n this.setAssetPrefix(assetPrefix)\n\n this.incrementalCache = new IncrementalCache({\n dev,\n distDir: this.distDir,\n pagesDir: join(\n this.distDir,\n this._isLikeServerless ? SERVERLESS_DIRECTORY : SERVER_DIRECTORY,\n 'pages'\n ),\n locales: this.nextConfig.i18n?.locales,\n flushToDisk: !minimalMode && this.nextConfig.experimental.sprFlushToDisk,\n })\n\n /**\n * This sets environment variable to be used at the time of SSR by head.tsx.\n * Using this from process.env allows targeting both serverless and SSR by calling\n * `process.env.__NEXT_OPTIMIZE_IMAGES`.\n * TODO(atcastle@): Remove this when experimental.optimizeImages are being cleaned up.\n */\n if (this.renderOpts.optimizeFonts) {\n process.env.__NEXT_OPTIMIZE_FONTS = JSON.stringify(true)\n }\n if (this.renderOpts.optimizeImages) {\n process.env.__NEXT_OPTIMIZE_IMAGES = JSON.stringify(true)\n }\n if (this.renderOpts.optimizeCss) {\n process.env.__NEXT_OPTIMIZE_CSS = JSON.stringify(true)\n }\n }\n\n public logError(err: Error): void {\n if (this.quiet) return\n console.error(err)\n }\n\n private async handleRequest(\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery\n ): Promise<void> {\n setLazyProp({ req: req as any }, 'cookies', getCookieParser(req))\n\n // Parse url if parsedUrl not provided\n if (!parsedUrl || typeof parsedUrl !== 'object') {\n const url: any = req.url\n parsedUrl = parseUrl(url, true)\n }\n const { basePath, i18n } = this.nextConfig\n\n // Parse the querystring ourselves if the user doesn't handle querystring parsing\n if (typeof parsedUrl.query === 'string') {\n parsedUrl.query = parseQs(parsedUrl.query)\n }\n ;(req as any).__NEXT_INIT_QUERY = Object.assign({}, parsedUrl.query)\n\n if (basePath && req.url?.startsWith(basePath)) {\n // store original URL to allow checking if basePath was\n // provided or not\n ;(req as any)._nextHadBasePath = true\n req.url = req.url!.replace(basePath, '') || '/'\n }\n\n if (\n this.minimalMode &&\n req.headers['x-matched-path'] &&\n typeof req.headers['x-matched-path'] === 'string'\n ) {\n const reqUrlIsDataUrl = req.url?.includes('/_next/data')\n const matchedPathIsDataUrl = req.headers['x-matched-path']?.includes(\n '/_next/data'\n )\n const isDataUrl = reqUrlIsDataUrl || matchedPathIsDataUrl\n\n let parsedPath = parseUrl(\n isDataUrl ? req.url! : (req.headers['x-matched-path'] as string),\n true\n )\n const { pathname, query } = parsedPath\n let matchedPathname = pathname as string\n\n let matchedPathnameNoExt = isDataUrl\n ? matchedPathname.replace(/\\.json$/, '')\n : matchedPathname\n\n if (i18n) {\n const localePathResult = normalizeLocalePath(\n matchedPathname || '/',\n i18n.locales\n )\n\n if (localePathResult.detectedLocale) {\n parsedUrl.query.__nextLocale = localePathResult.detectedLocale\n }\n }\n\n if (isDataUrl) {\n matchedPathname = denormalizePagePath(matchedPathname)\n matchedPathnameNoExt = denormalizePagePath(matchedPathnameNoExt)\n }\n\n const pageIsDynamic = isDynamicRoute(matchedPathnameNoExt)\n const combinedRewrites: Rewrite[] = []\n\n combinedRewrites.push(...this.customRoutes.rewrites.beforeFiles)\n combinedRewrites.push(...this.customRoutes.rewrites.afterFiles)\n combinedRewrites.push(...this.customRoutes.rewrites.fallback)\n\n const utils = getUtils({\n pageIsDynamic,\n page: matchedPathnameNoExt,\n i18n: this.nextConfig.i18n,\n basePath: this.nextConfig.basePath,\n rewrites: combinedRewrites,\n })\n\n utils.handleRewrites(req, parsedUrl)\n\n // interpolate dynamic params and normalize URL if needed\n if (pageIsDynamic) {\n let params: ParsedUrlQuery | false = {}\n\n Object.assign(parsedUrl.query, query)\n const paramsResult = utils.normalizeDynamicRouteParams(parsedUrl.query)\n\n if (paramsResult.hasValidParams) {\n params = paramsResult.params\n } else if (req.headers['x-now-route-matches']) {\n const opts: Record<string, string> = {}\n params = utils.getParamsFromRouteMatches(\n req,\n opts,\n (parsedUrl.query.__nextLocale as string | undefined) || ''\n )\n\n if (opts.locale) {\n parsedUrl.query.__nextLocale = opts.locale\n }\n } else {\n params = utils.dynamicRouteMatcher!(matchedPathnameNoExt)\n }\n\n if (params) {\n params = utils.normalizeDynamicRouteParams(params).params\n\n matchedPathname = utils.interpolateDynamicPath(\n matchedPathname,\n params\n )\n req.url = utils.interpolateDynamicPath(req.url!, params)\n }\n\n if (reqUrlIsDataUrl && matchedPathIsDataUrl) {\n req.url = formatUrl({\n ...parsedPath,\n pathname: matchedPathname,\n })\n }\n\n Object.assign(parsedUrl.query, params)\n utils.normalizeVercelUrl(req, true)\n }\n\n parsedUrl.pathname = `${basePath || ''}${\n matchedPathname === '/' && basePath ? '' : matchedPathname\n }`\n }\n\n if (i18n) {\n // get pathname from URL with basePath stripped for locale detection\n let { pathname, ...parsed } = parseUrl(req.url || '/')\n pathname = pathname || '/'\n\n let defaultLocale = i18n.defaultLocale\n let detectedLocale = detectLocaleCookie(req, i18n.locales)\n let acceptPreferredLocale\n try {\n acceptPreferredLocale =\n i18n.localeDetection !== false\n ? accept.language(req.headers['accept-language'], i18n.locales)\n : detectedLocale\n } catch (_) {\n acceptPreferredLocale = detectedLocale\n }\n const { host } = req?.headers || {}\n // remove port from host if present\n const hostname = host?.split(':')[0].toLowerCase()\n\n const detectedDomain = detectDomainLocale(i18n.domains, hostname)\n if (detectedDomain) {\n defaultLocale = detectedDomain.defaultLocale\n detectedLocale = defaultLocale\n ;(req as any).__nextIsLocaleDomain = true\n }\n\n // if not domain specific locale use accept-language preferred\n detectedLocale = detectedLocale || acceptPreferredLocale\n\n let localeDomainRedirect: string | undefined\n ;(req as any).__nextHadTrailingSlash = pathname!.endsWith('/')\n\n if (pathname === '/') {\n ;(req as any).__nextHadTrailingSlash = this.nextConfig.trailingSlash\n }\n const localePathResult = normalizeLocalePath(pathname!, i18n.locales)\n\n if (localePathResult.detectedLocale) {\n detectedLocale = localePathResult.detectedLocale\n req.url = formatUrl({\n ...parsed,\n pathname: localePathResult.pathname,\n })\n ;(req as any).__nextStrippedLocale = true\n }\n\n // If a detected locale is a domain specific locale and we aren't already\n // on that domain and path prefix redirect to it to prevent duplicate\n // content from multiple domains\n if (detectedDomain && pathname === '/') {\n const localeToCheck = acceptPreferredLocale\n // const localeToCheck = localePathResult.detectedLocale\n // ? detectedLocale\n // : acceptPreferredLocale\n\n const matchedDomain = detectDomainLocale(\n i18n.domains,\n undefined,\n localeToCheck\n )\n\n if (\n matchedDomain &&\n (matchedDomain.domain !== detectedDomain.domain ||\n localeToCheck !== matchedDomain.defaultLocale)\n ) {\n localeDomainRedirect = `http${matchedDomain.http ? '' : 's'}://${\n matchedDomain.domain\n }/${\n localeToCheck === matchedDomain.defaultLocale ? '' : localeToCheck\n }`\n }\n }\n\n const denormalizedPagePath = denormalizePagePath(pathname || '/')\n const detectedDefaultLocale =\n !detectedLocale ||\n detectedLocale.toLowerCase() === defaultLocale.toLowerCase()\n const shouldStripDefaultLocale = false\n // detectedDefaultLocale &&\n // denormalizedPagePath.toLowerCase() ===\n // `/${i18n.defaultLocale.toLowerCase()}`\n\n const shouldAddLocalePrefix =\n !detectedDefaultLocale && denormalizedPagePath === '/'\n\n detectedLocale = detectedLocale || i18n.defaultLocale\n\n if (\n i18n.localeDetection !== false &&\n (localeDomainRedirect ||\n shouldAddLocalePrefix ||\n shouldStripDefaultLocale)\n ) {\n // set the NEXT_LOCALE cookie when a user visits the default locale\n // with the locale prefix so that they aren't redirected back to\n // their accept-language preferred locale\n if (\n shouldStripDefaultLocale &&\n acceptPreferredLocale !== defaultLocale\n ) {\n const previous = res.getHeader('set-cookie')\n\n res.setHeader('set-cookie', [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n cookie.serialize('NEXT_LOCALE', defaultLocale, {\n httpOnly: true,\n path: '/',\n }),\n ])\n }\n\n res.setHeader(\n 'Location',\n localeDomainRedirect\n ? localeDomainRedirect\n : formatUrl({\n // make sure to include any query values when redirecting\n ...parsed,\n pathname: shouldStripDefaultLocale\n ? basePath || `/`\n : `${basePath || ''}/${detectedLocale}`,\n })\n )\n res.statusCode = TEMPORARY_REDIRECT_STATUS\n res.end()\n return\n }\n\n parsedUrl.query.__nextDefaultLocale =\n detectedDomain?.defaultLocale || i18n.defaultLocale\n\n if (!this.minimalMode || !parsedUrl.query.__nextLocale) {\n parsedUrl.query.__nextLocale =\n localePathResult.detectedLocale ||\n detectedDomain?.defaultLocale ||\n defaultLocale\n }\n }\n\n res.statusCode = 200\n try {\n return await this.run(req, res, parsedUrl)\n } catch (err) {\n if (this.minimalMode) {\n throw err\n }\n this.logError(err)\n res.statusCode = 500\n res.end('Internal Server Error')\n }\n }\n\n public getRequestHandler() {\n return this.handleRequest.bind(this)\n }\n\n public setAssetPrefix(prefix?: string): void {\n this.renderOpts.assetPrefix = prefix ? prefix.replace(/\\/$/, '') : ''\n }\n\n // Backwards compatibility\n public async prepare(): Promise<void> {}\n\n // Backwards compatibility\n protected async close(): Promise<void> {}\n\n protected setImmutableAssetCacheControl(res: ServerResponse): void {\n res.setHeader('Cache-Control', 'public, max-age=31536000, immutable')\n }\n\n protected getCustomRoutes(): CustomRoutes {\n const customRoutes = require(join(this.distDir, ROUTES_MANIFEST))\n let rewrites: CustomRoutes['rewrites']\n\n // rewrites can be stored as an array when an array is\n // returned in next.config.js so massage them into\n // the expected object format\n if (Array.isArray(customRoutes.rewrites)) {\n rewrites = {\n beforeFiles: [],\n afterFiles: customRoutes.rewrites,\n fallback: [],\n }\n } else {\n rewrites = customRoutes.rewrites\n }\n return Object.assign(customRoutes, { rewrites })\n }\n\n private _cachedPreviewManifest: PrerenderManifest | undefined\n protected getPrerenderManifest(): PrerenderManifest {\n if (this._cachedPreviewManifest) {\n return this._cachedPreviewManifest\n }\n const manifest = require(join(this.distDir, PRERENDER_MANIFEST))\n return (this._cachedPreviewManifest = manifest)\n }\n\n protected getPreviewProps(): __ApiPreviewProps {\n return this.getPrerenderManifest().preview\n }\n\n protected generateRoutes(): {\n basePath: string\n headers: Route[]\n rewrites: {\n beforeFiles: Route[]\n afterFiles: Route[]\n fallback: Route[]\n }\n fsRoutes: Route[]\n redirects: Route[]\n catchAllRoute: Route\n pageChecker: PageChecker\n useFileSystemPublicRoutes: boolean\n dynamicRoutes: DynamicRoutes | undefined\n locales: string[]\n } {\n const server: Server = this\n const publicRoutes = fs.existsSync(this.publicDir)\n ? this.generatePublicRoutes()\n : []\n\n const staticFilesRoute = this.hasStaticDir\n ? [\n {\n // It's very important to keep this route's param optional.\n // (but it should support as many params as needed, separated by '/')\n // Otherwise this will lead to a pretty simple DOS attack.\n // See more: https://github.com/vercel/next.js/issues/2617\n match: route('/static/:path*'),\n name: 'static catchall',\n fn: async (req, res, params, parsedUrl) => {\n const p = join(this.dir, 'static', ...params.path)\n await this.serveStatic(req, res, p, parsedUrl)\n return {\n finished: true,\n }\n },\n } as Route,\n ]\n : []\n\n const fsRoutes: Route[] = [\n {\n match: route('/_next/static/:path*'),\n type: 'route',\n name: '_next/static catchall',\n fn: async (req, res, params, parsedUrl) => {\n // make sure to 404 for /_next/static itself\n if (!params.path) {\n await this.render404(req, res, parsedUrl)\n return {\n finished: true,\n }\n }\n\n if (\n params.path[0] === CLIENT_STATIC_FILES_RUNTIME ||\n params.path[0] === 'chunks' ||\n params.path[0] === 'css' ||\n params.path[0] === 'media' ||\n params.path[0] === this.buildId ||\n params.path[0] === 'pages' ||\n params.path[1] === 'pages'\n ) {\n this.setImmutableAssetCacheControl(res)\n }\n const p = join(\n this.distDir,\n CLIENT_STATIC_FILES_PATH,\n ...(params.path || [])\n )\n await this.serveStatic(req, res, p, parsedUrl)\n return {\n finished: true,\n }\n },\n },\n {\n match: route('/_next/data/:path*'),\n type: 'route',\n name: '_next/data catchall',\n fn: async (req, res, params, _parsedUrl) => {\n // Make sure to 404 for /_next/data/ itself and\n // we also want to 404 if the buildId isn't correct\n if (!params.path || params.path[0] !== this.buildId) {\n await this.render404(req, res, _parsedUrl)\n return {\n finished: true,\n }\n }\n // remove buildId from URL\n params.path.shift()\n\n // show 404 if it doesn't end with .json\n if (!params.path[params.path.length - 1].endsWith('.json')) {\n await this.render404(req, res, _parsedUrl)\n return {\n finished: true,\n }\n }\n\n // re-create page's pathname\n let pathname = `/${params.path.join('/')}`\n pathname = getRouteFromAssetPath(pathname, '.json')\n\n const { i18n } = this.nextConfig\n\n if (i18n) {\n const { host } = req?.headers || {}\n // remove port from host and remove port if present\n const hostname = host?.split(':')[0].toLowerCase()\n const localePathResult = normalizeLocalePath(pathname, i18n.locales)\n const { defaultLocale } =\n detectDomainLocale(i18n.domains, hostname) || {}\n\n let detectedLocale = ''\n\n if (localePathResult.detectedLocale) {\n pathname = localePathResult.pathname\n detectedLocale = localePathResult.detectedLocale\n }\n\n _parsedUrl.query.__nextLocale = detectedLocale!\n _parsedUrl.query.__nextDefaultLocale =\n defaultLocale || i18n.defaultLocale\n\n if (!detectedLocale) {\n _parsedUrl.query.__nextLocale =\n _parsedUrl.query.__nextDefaultLocale\n await this.render404(req, res, _parsedUrl)\n return { finished: true }\n }\n }\n\n const parsedUrl = parseUrl(pathname, true)\n\n await this.render(\n req,\n res,\n pathname,\n { ..._parsedUrl.query, _nextDataReq: '1' },\n parsedUrl\n )\n return {\n finished: true,\n }\n },\n },\n {\n match: route('/_next/image'),\n type: 'route',\n name: '_next/image catchall',\n fn: (req, res, _params, parsedUrl) =>\n imageOptimizer(\n server,\n req,\n res,\n parsedUrl,\n server.nextConfig,\n server.distDir\n ),\n },\n {\n match: route('/_next/:path*'),\n type: 'route',\n name: '_next catchall',\n // This path is needed because `render()` does a check for `/_next` and the calls the routing again\n fn: async (req, res, _params, parsedUrl) => {\n await this.render404(req, res, parsedUrl)\n return {\n finished: true,\n }\n },\n },\n ...publicRoutes,\n ...staticFilesRoute,\n ]\n\n const getCustomRoute = (\n r: Rewrite | Redirect | Header,\n type: RouteType\n ) => {\n const match = getCustomRouteMatcher(r.source)\n\n return {\n ...r,\n type,\n match,\n name: type,\n fn: async (_req, _res, _params, _parsedUrl) => ({ finished: false }),\n } as Route & Rewrite & Header\n }\n\n // Headers come very first\n const headers = this.minimalMode\n ? []\n : this.customRoutes.headers.map((r) => {\n const headerRoute = getCustomRoute(r, 'header')\n return {\n match: headerRoute.match,\n has: headerRoute.has,\n type: headerRoute.type,\n name: `${headerRoute.type} ${headerRoute.source} header route`,\n fn: async (_req, res, params, _parsedUrl) => {\n const hasParams = Object.keys(params).length > 0\n\n for (const header of (headerRoute as Header).headers) {\n let { key, value } = header\n if (hasParams) {\n key = compileNonPath(key, params)\n value = compileNonPath(value, params)\n }\n res.setHeader(key, value)\n }\n return { finished: false }\n },\n } as Route\n })\n\n // since initial query values are decoded by querystring.parse\n // we need to re-encode them here but still allow passing through\n // values from rewrites/redirects\n const stringifyQuery = (req: IncomingMessage, query: ParsedUrlQuery) => {\n const initialQueryValues = Object.values((req as any).__NEXT_INIT_QUERY)\n\n return stringifyQs(query, undefined, undefined, {\n encodeURIComponent(value) {\n if (initialQueryValues.some((val) => val === value)) {\n return encodeURIComponent(value)\n }\n return value\n },\n })\n }\n\n const redirects = this.minimalMode\n ? []\n : this.customRoutes.redirects.map((redirect) => {\n const redirectRoute = getCustomRoute(redirect, 'redirect')\n return {\n internal: redirectRoute.internal,\n type: redirectRoute.type,\n match: redirectRoute.match,\n has: redirectRoute.has,\n statusCode: redirectRoute.statusCode,\n name: `Redirect route ${redirectRoute.source}`,\n fn: async (req, res, params, parsedUrl) => {\n const { parsedDestination } = prepareDestination(\n redirectRoute.destination,\n params,\n parsedUrl.query,\n false\n )\n\n const { query } = parsedDestination\n delete (parsedDestination as any).query\n\n parsedDestination.search = stringifyQuery(req, query)\n\n const updatedDestination = formatUrl(parsedDestination)\n\n res.setHeader('Location', updatedDestination)\n res.statusCode = getRedirectStatus(redirectRoute as Redirect)\n\n // Since IE11 doesn't support the 308 header add backwards\n // compatibility using refresh header\n if (res.statusCode === 308) {\n res.setHeader('Refresh', `0;url=${updatedDestination}`)\n }\n\n res.end()\n return {\n finished: true,\n }\n },\n } as Route\n })\n\n const buildRewrite = (rewrite: Rewrite, check = true) => {\n const rewriteRoute = getCustomRoute(rewrite, 'rewrite')\n return {\n ...rewriteRoute,\n check,\n type: rewriteRoute.type,\n name: `Rewrite route ${rewriteRoute.source}`,\n match: rewriteRoute.match,\n fn: async (req, res, params, parsedUrl) => {\n const { newUrl, parsedDestination } = prepareDestination(\n rewriteRoute.destination,\n params,\n parsedUrl.query,\n true\n )\n\n // external rewrite, proxy it\n if (parsedDestination.protocol) {\n const { query } = parsedDestination\n delete (parsedDestination as any).query\n parsedDestination.search = stringifyQuery(req, query)\n\n const target = formatUrl(parsedDestination)\n const proxy = new Proxy({\n target,\n changeOrigin: true,\n ignorePath: true,\n proxyTimeout: 30_000, // limit proxying to 30 seconds\n })\n\n await new Promise((proxyResolve, proxyReject) => {\n let finished = false\n\n proxy.on('proxyReq', (proxyReq) => {\n proxyReq.on('close', () => {\n if (!finished) {\n finished = true\n proxyResolve(true)\n }\n })\n })\n proxy.on('error', (err) => {\n if (!finished) {\n finished = true\n proxyReject(err)\n }\n })\n proxy.web(req, res)\n })\n\n return {\n finished: true,\n }\n }\n ;(req as any)._nextRewroteUrl = newUrl\n ;(req as any)._nextDidRewrite =\n (req as any)._nextRewroteUrl !== req.url\n\n return {\n finished: false,\n pathname: newUrl,\n query: parsedDestination.query,\n }\n },\n } as Route\n }\n\n let beforeFiles: Route[] = []\n let afterFiles: Route[] = []\n let fallback: Route[] = []\n\n if (!this.minimalMode) {\n if (Array.isArray(this.customRoutes.rewrites)) {\n afterFiles = this.customRoutes.rewrites.map((r) => buildRewrite(r))\n } else {\n beforeFiles = this.customRoutes.rewrites.beforeFiles.map((r) =>\n buildRewrite(r, false)\n )\n afterFiles = this.customRoutes.rewrites.afterFiles.map((r) =>\n buildRewrite(r)\n )\n fallback = this.customRoutes.rewrites.fallback.map((r) =>\n buildRewrite(r)\n )\n }\n }\n\n const catchAllRoute: Route = {\n match: route('/:path*'),\n type: 'route',\n name: 'Catchall render',\n fn: async (req, res, _params, parsedUrl) => {\n let { pathname, query } = parsedUrl\n if (!pathname) {\n throw new Error('pathname is undefined')\n }\n\n // next.js core assumes page path without trailing slash\n pathname = removePathTrailingSlash(pathname)\n\n if (this.nextConfig.i18n) {\n const localePathResult = normalizeLocalePath(\n pathname,\n this.nextConfig.i18n?.locales\n )\n\n if (localePathResult.detectedLocale) {\n pathname = localePathResult.pathname\n parsedUrl.query.__nextLocale = localePathResult.detectedLocale\n }\n }\n const bubbleNoFallback = !!query._nextBubbleNoFallback\n\n if (pathname === '/api' || pathname.startsWith('/api/')) {\n delete query._nextBubbleNoFallback\n\n const handled = await this.handleApiRequest(\n req as NextApiRequest,\n res as NextApiResponse,\n pathname,\n query\n )\n if (handled) {\n return { finished: true }\n }\n }\n\n try {\n await this.render(req, res, pathname, query, parsedUrl)\n\n return {\n finished: true,\n }\n } catch (err) {\n if (err instanceof NoFallbackError && bubbleNoFallback) {\n return {\n finished: false,\n }\n }\n throw err\n }\n },\n }\n\n const { useFileSystemPublicRoutes } = this.nextConfig\n\n if (useFileSystemPublicRoutes) {\n this.dynamicRoutes = this.getDynamicRoutes()\n }\n\n return {\n headers,\n fsRoutes,\n rewrites: {\n beforeFiles,\n afterFiles,\n fallback,\n },\n redirects,\n catchAllRoute,\n useFileSystemPublicRoutes,\n dynamicRoutes: this.dynamicRoutes,\n basePath: this.nextConfig.basePath,\n pageChecker: this.hasPage.bind(this),\n locales: this.nextConfig.i18n?.locales || [],\n }\n }\n\n private async getPagePath(\n pathname: string,\n locales?: string[]\n ): Promise<string> {\n return getPagePath(\n pathname,\n this.distDir,\n this._isLikeServerless,\n this.renderOpts.dev,\n locales\n )\n }\n\n protected async hasPage(pathname: string): Promise<boolean> {\n let found = false\n try {\n found = !!(await this.getPagePath(\n pathname,\n this.nextConfig.i18n?.locales\n ))\n } catch (_) {}\n\n return found\n }\n\n protected async _beforeCatchAllRender(\n _req: IncomingMessage,\n _res: ServerResponse,\n _params: Params,\n _parsedUrl: UrlWithParsedQuery\n ): Promise<boolean> {\n return false\n }\n\n // Used to build API page in development\n protected async ensureApiPage(_pathname: string): Promise<void> {}\n\n /**\n * Resolves `API` request, in development builds on demand\n * @param req http request\n * @param res http response\n * @param pathname path of request\n */\n private async handleApiRequest(\n req: IncomingMessage,\n res: ServerResponse,\n pathname: string,\n query: ParsedUrlQuery\n ): Promise<boolean> {\n let page = pathname\n let params: Params | boolean = false\n let pageFound = await this.hasPage(page)\n\n if (!pageFound && this.dynamicRoutes) {\n for (const dynamicRoute of this.dynamicRoutes) {\n params = dynamicRoute.match(pathname)\n if (dynamicRoute.page.startsWith('/api') && params) {\n page = dynamicRoute.page\n pageFound = true\n break\n }\n }\n }\n\n if (!pageFound) {\n return false\n }\n // Make sure the page is built before getting the path\n // or else it won't be in the manifest yet\n await this.ensureApiPage(page)\n\n let builtPagePath\n try {\n builtPagePath = await this.getPagePath(page)\n } catch (err) {\n if (err.code === 'ENOENT') {\n return false\n }\n throw err\n }\n\n const pageModule = await require(builtPagePath)\n query = { ...query, ...params }\n\n delete query.__nextLocale\n delete query.__nextDefaultLocale\n\n if (!this.renderOpts.dev && this._isLikeServerless) {\n if (typeof pageModule.default === 'function') {\n prepareServerlessUrl(req, query)\n await pageModule.default(req, res)\n return true\n }\n }\n\n await apiResolver(\n req,\n res,\n query,\n pageModule,\n this.renderOpts.previewProps,\n false\n )\n return true\n }\n\n protected generatePublicRoutes(): Route[] {\n const publicFiles = new Set(\n recursiveReadDirSync(this.publicDir).map((p) =>\n encodeURI(p.replace(/\\\\/g, '/'))\n )\n )\n\n return [\n {\n match: route('/:path*'),\n name: 'public folder catchall',\n fn: async (req, res, params, parsedUrl) => {\n const pathParts: string[] = params.path || []\n const { basePath } = this.nextConfig\n\n // if basePath is defined require it be present\n if (basePath) {\n const basePathParts = basePath.split('/')\n // remove first empty value\n basePathParts.shift()\n\n if (\n !basePathParts.every((part: string, idx: number) => {\n return part === pathParts[idx]\n })\n ) {\n return { finished: false }\n }\n\n pathParts.splice(0, basePathParts.length)\n }\n\n const path = `/${pathParts.join('/')}`\n\n if (publicFiles.has(path)) {\n await this.serveStatic(\n req,\n res,\n join(this.publicDir, ...pathParts),\n parsedUrl\n )\n return {\n finished: true,\n }\n }\n return {\n finished: false,\n }\n },\n } as Route,\n ]\n }\n\n protected getDynamicRoutes(): Array<DynamicRouteItem> {\n const addedPages = new Set<string>()\n\n return getSortedRoutes(\n Object.keys(this.pagesManifest!).map(\n (page) =>\n normalizeLocalePath(page, this.nextConfig.i18n?.locales).pathname\n )\n )\n .map((page) => {\n if (addedPages.has(page) || !isDynamicRoute(page)) return null\n addedPages.add(page)\n return {\n page,\n match: getRouteMatcher(getRouteRegex(page)),\n }\n })\n .filter((item): item is DynamicRouteItem => Boolean(item))\n }\n\n private handleCompression(req: IncomingMessage, res: ServerResponse): void {\n if (this.compression) {\n this.compression(req, res, () => {})\n }\n }\n\n protected async run(\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl: UrlWithParsedQuery\n ): Promise<void> {\n this.handleCompression(req, res)\n\n try {\n const matched = await this.router.execute(req, res, parsedUrl)\n if (matched) {\n return\n }\n } catch (err) {\n if (err.code === 'DECODE_FAILED' || err.code === 'ENAMETOOLONG') {\n res.statusCode = 400\n return this.renderError(null, req, res, '/_error', {})\n }\n throw err\n }\n\n await this.render404(req, res, parsedUrl)\n }\n\n protected async sendHTML(\n req: IncomingMessage,\n res: ServerResponse,\n html: string\n ): Promise<void> {\n const { generateEtags, poweredByHeader } = this.renderOpts\n return sendPayload(req, res, html, 'html', {\n generateEtags,\n poweredByHeader,\n })\n }\n\n public async render(\n req: IncomingMessage,\n res: ServerResponse,\n pathname: string,\n query: ParsedUrlQuery = {},\n parsedUrl?: UrlWithParsedQuery\n ): Promise<void> {\n if (!pathname.startsWith('/')) {\n console.warn(\n `Cannot render page with path \"${pathname}\", did you mean \"/${pathname}\"?. See more info here: https://nextjs.org/docs/messages/render-no-starting-slash`\n )\n }\n\n if (\n this.renderOpts.customServer &&\n pathname === '/index' &&\n !(await this.hasPage('/index'))\n ) {\n // maintain backwards compatibility for custom server\n // (see custom-server integration tests)\n pathname = '/'\n }\n\n const url: any = req.url\n\n // we allow custom servers to call render for all URLs\n // so check if we need to serve a static _next file or not.\n // we don't modify the URL for _next/data request but still\n // call render so we special case this to prevent an infinite loop\n if (\n !this.minimalMode &&\n !query._nextDataReq &&\n (url.match(/^\\/_next\\//) ||\n (this.hasStaticDir && url.match(/^\\/static\\//)))\n ) {\n return this.handleRequest(req, res, parsedUrl)\n }\n\n // Custom server users can run `app.render()` which needs compression.\n if (this.renderOpts.customServer) {\n this.handleCompression(req, res)\n }\n\n if (isBlockedPage(pathname)) {\n return this.render404(req, res, parsedUrl)\n }\n\n const html = await this.renderToHTML(req, res, pathname, query)\n // Request was ended by the user\n if (html === null) {\n return\n }\n\n return this.sendHTML(req, res, html)\n }\n\n private async findPageComponents(\n pathname: string,\n query: ParsedUrlQuery = {},\n params: Params | null = null\n ): Promise<FindComponentsResult | null> {\n let paths = [\n // try serving a static AMP version first\n query.amp ? normalizePagePath(pathname) + '.amp' : null,\n pathname,\n ].filter(Boolean)\n\n if (query.__nextLocale) {\n paths = [\n ...paths.map(\n (path) => `/${query.__nextLocale}${path === '/' ? '' : path}`\n ),\n ...paths,\n ]\n }\n\n for (const pagePath of paths) {\n try {\n const components = await loadComponents(\n this.distDir,\n pagePath!,\n !this.renderOpts.dev && this._isLikeServerless\n )\n // if loading an static HTML file the locale is required\n // to be present since all HTML files are output under their locale\n if (\n query.__nextLocale &&\n typeof components.Component === 'string' &&\n !pagePath?.startsWith(`/${query.__nextLocale}`)\n ) {\n const err = new Error('NOT_FOUND')\n ;(err as any).code = 'ENOENT'\n throw err\n }\n\n return {\n components,\n query: {\n ...(components.getStaticProps\n ? {\n amp: query.amp,\n _nextDataReq: query._nextDataReq,\n __nextLocale: query.__nextLocale,\n __nextDefaultLocale: query.__nextDefaultLocale,\n }\n : query),\n ...(params || {}),\n },\n }\n } catch (err) {\n if (err.code !== 'ENOENT') throw err\n }\n }\n return null\n }\n\n protected async getStaticPaths(\n pathname: string\n ): Promise<{\n staticPaths: string[] | undefined\n fallbackMode: 'static' | 'blocking' | false\n }> {\n // `staticPaths` is intentionally set to `undefined` as it should've\n // been caught when checking disk data.\n const staticPaths = undefined\n\n // Read whether or not fallback should exist from the manifest.\n const fallbackField = this.getPrerenderManifest().dynamicRoutes[pathname]\n .fallback\n\n return {\n staticPaths,\n fallbackMode:\n typeof fallbackField === 'string'\n ? 'static'\n : fallbackField === null\n ? 'blocking'\n : false,\n }\n }\n\n private async renderToHTMLWithComponents(\n req: IncomingMessage,\n res: ServerResponse,\n pathname: string,\n { components, query }: FindComponentsResult,\n opts: RenderOptsPartial\n ): Promise<string | null> {\n const is404Page = pathname === '/404'\n const is500Page = pathname === '/500'\n\n const isLikeServerless =\n typeof components.Component === 'object' &&\n typeof (components.Component as any).renderReqToHTML === 'function'\n const isSSG = !!components.getStaticProps\n const hasServerProps = !!components.getServerSideProps\n const hasStaticPaths = !!components.getStaticPaths\n const hasGetInitialProps = !!(components.Component as any).getInitialProps\n\n // Toggle whether or not this is a Data request\n const isDataReq = !!query._nextDataReq && (isSSG || hasServerProps)\n delete query._nextDataReq\n\n // we need to ensure the status code if /404 is visited directly\n if (is404Page && !isDataReq) {\n res.statusCode = 404\n }\n\n // ensure correct status is set when visiting a status page\n // directly e.g. /500\n if (STATIC_STATUS_PAGES.includes(pathname)) {\n res.statusCode = parseInt(pathname.substr(1), 10)\n }\n\n // handle static page\n if (typeof components.Component === 'string') {\n return components.Component\n }\n\n if (!query.amp) {\n delete query.amp\n }\n\n const locale = query.__nextLocale as string\n const defaultLocale = isSSG\n ? this.nextConfig.i18n?.defaultLocale\n : (query.__nextDefaultLocale as string)\n\n const { i18n } = this.nextConfig\n const locales = i18n?.locales\n\n let previewData: PreviewData\n let isPreviewMode = false\n\n if (hasServerProps || isSSG) {\n previewData = tryGetPreviewData(req, res, this.renderOpts.previewProps)\n isPreviewMode = previewData !== false\n }\n\n // Compute the iSSG cache key. We use the rewroteUrl since\n // pages with fallback: false are allowed to be rewritten to\n // and we need to look up the path by the rewritten path\n let urlPathname = parseUrl(req.url || '').pathname || '/'\n\n let resolvedUrlPathname = (req as any)._nextRewroteUrl\n ? (req as any)._nextRewroteUrl\n : urlPathname\n\n urlPathname = removePathTrailingSlash(urlPathname)\n resolvedUrlPathname = normalizeLocalePath(\n removePathTrailingSlash(resolvedUrlPathname),\n this.nextConfig.i18n?.locales\n ).pathname\n\n const stripNextDataPath = (path: string) => {\n if (path.includes(this.buildId)) {\n const splitPath = path.substring(\n path.indexOf(this.buildId) + this.buildId.length\n )\n\n path = denormalizePagePath(splitPath.replace(/\\.json$/, ''))\n }\n\n if (this.nextConfig.i18n) {\n return normalizeLocalePath(path, locales).pathname\n }\n return path\n }\n\n const handleRedirect = (pageData: any) => {\n const redirect = {\n destination: pageData.pageProps.__N_REDIRECT,\n statusCode: pageData.pageProps.__N_REDIRECT_STATUS,\n basePath: pageData.pageProps.__N_REDIRECT_BASE_PATH,\n }\n const statusCode = getRedirectStatus(redirect)\n const { basePath } = this.nextConfig\n\n if (\n basePath &&\n redirect.basePath !== false &&\n redirect.destination.startsWith('/')\n ) {\n redirect.destination = `${basePath}${redirect.destination}`\n }\n\n if (statusCode === PERMANENT_REDIRECT_STATUS) {\n res.setHeader('Refresh', `0;url=${redirect.destination}`)\n }\n\n res.statusCode = statusCode\n res.setHeader('Location', redirect.destination)\n res.end()\n }\n\n // remove /_next/data prefix from urlPathname so it matches\n // for direct page visit and /_next/data visit\n if (isDataReq) {\n resolvedUrlPathname = stripNextDataPath(resolvedUrlPathname)\n urlPathname = stripNextDataPath(urlPathname)\n }\n\n let ssgCacheKey =\n isPreviewMode || !isSSG || this.minimalMode\n ? undefined // Preview mode bypasses the cache\n : `${locale ? `/${locale}` : ''}${\n (pathname === '/' || resolvedUrlPathname === '/') && locale\n ? ''\n : resolvedUrlPathname\n }${query.amp ? '.amp' : ''}`\n\n if ((is404Page || is500Page) && isSSG) {\n ssgCacheKey = `${locale ? `/${locale}` : ''}${pathname}${\n query.amp ? '.amp' : ''\n }`\n }\n\n if (ssgCacheKey) {\n // we only encode path delimiters for path segments from\n // getStaticPaths so we need to attempt decoding the URL\n // to match against and only escape the path delimiters\n // this allows non-ascii values to be handled e.g. Japanese characters\n\n // TODO: investigate adding this handling for non-SSG pages so\n // non-ascii names work there also\n ssgCacheKey = ssgCacheKey\n .split('/')\n .map((seg) => {\n try {\n seg = escapePathDelimiters(decodeURIComponent(seg), true)\n } catch (_) {\n // An improperly encoded URL was provided, this is considered\n // a bad request (400)\n const err: Error & { code?: string } = new Error(\n 'failed to decode param'\n )\n err.code = 'DECODE_FAILED'\n throw err\n }\n return seg\n })\n .join('/')\n }\n\n // Complete the response with cached data if its present\n const cachedData = ssgCacheKey\n ? await this.incrementalCache.get(ssgCacheKey)\n : undefined\n\n if (cachedData) {\n const data = isDataReq\n ? JSON.stringify(cachedData.pageData)\n : cachedData.html\n\n const revalidateOptions = !this.renderOpts.dev\n ? {\n private: isPreviewMode,\n stateful: false, // GSP response\n revalidate:\n cachedData.curRevalidate !== undefined\n ? cachedData.curRevalidate\n : /* default to minimum revalidate (this should be an invariant) */ 1,\n }\n : undefined\n\n if (!isDataReq && cachedData.pageData?.pageProps?.__N_REDIRECT) {\n await handleRedirect(cachedData.pageData)\n } else if (cachedData.isNotFound) {\n if (revalidateOptions) {\n setRevalidateHeaders(res, revalidateOptions)\n }\n if (isDataReq) {\n res.statusCode = 404\n res.end('{\"notFound\":true}')\n } else {\n await this.render404(req, res, {\n pathname,\n query,\n } as UrlWithParsedQuery)\n }\n } else {\n sendPayload(\n req,\n res,\n data,\n isDataReq ? 'json' : 'html',\n {\n generateEtags: this.renderOpts.generateEtags,\n poweredByHeader: this.renderOpts.poweredByHeader,\n },\n revalidateOptions\n )\n }\n\n // Stop the request chain here if the data we sent was up-to-date\n if (!cachedData.isStale) {\n return null\n }\n }\n\n // If we're here, that means data is missing or it's stale.\n const maybeCoalesceInvoke = ssgCacheKey\n ? (fn: any) => withCoalescedInvoke(fn).bind(null, ssgCacheKey!, [])\n : (fn: any) => async () => {\n const value = await fn()\n return { isOrigin: true, value }\n }\n\n const doRender = maybeCoalesceInvoke(\n async (): Promise<{\n html: string | null\n pageData: any\n sprRevalidate: number | false\n isNotFound?: boolean\n isRedirect?: boolean\n }> => {\n let pageData: any\n let html: string | null\n let sprRevalidate: number | false\n let isNotFound: boolean | undefined\n let isRedirect: boolean | undefined\n\n let renderResult\n // handle serverless\n if (isLikeServerless) {\n renderResult = await (components.Component as any).renderReqToHTML(\n req,\n res,\n 'passthrough',\n {\n locale,\n locales,\n defaultLocale,\n optimizeCss: this.renderOpts.optimizeCss,\n distDir: this.distDir,\n fontManifest: this.renderOpts.fontManifest,\n domainLocales: this.renderOpts.domainLocales,\n }\n )\n\n html = renderResult.html\n pageData = renderResult.renderOpts.pageData\n sprRevalidate = renderResult.renderOpts.revalidate\n isNotFound = renderResult.renderOpts.isNotFound\n isRedirect = renderResult.renderOpts.isRedirect\n } else {\n const origQuery = parseUrl(req.url || '', true).query\n const hadTrailingSlash =\n urlPathname !== '/' && this.nextConfig.trailingSlash\n\n const resolvedUrl = formatUrl({\n pathname: `${resolvedUrlPathname}${hadTrailingSlash ? '/' : ''}`,\n // make sure to only add query values from original URL\n query: origQuery,\n })\n\n const renderOpts: RenderOpts = {\n ...components,\n ...opts,\n isDataReq,\n resolvedUrl,\n locale,\n locales,\n defaultLocale,\n // For getServerSideProps and getInitialProps we need to ensure we use the original URL\n // and not the resolved URL to prevent a hydration mismatch on\n // asPath\n resolvedAsPath:\n hasServerProps || hasGetInitialProps\n ? formatUrl({\n // we use the original URL pathname less the _next/data prefix if\n // present\n pathname: `${urlPathname}${hadTrailingSlash ? '/' : ''}`,\n query: origQuery,\n })\n : resolvedUrl,\n }\n\n renderResult = await renderToHTML(\n req,\n res,\n pathname,\n query,\n renderOpts\n )\n\n html = renderResult\n // TODO: change this to a different passing mechanism\n pageData = (renderOpts as any).pageData\n sprRevalidate = (renderOpts as any).revalidate\n isNotFound = (renderOpts as any).isNotFound\n isRedirect = (renderOpts as any).isRedirect\n }\n\n return { html, pageData, sprRevalidate, isNotFound, isRedirect }\n }\n )\n\n const isProduction = !this.renderOpts.dev\n const isDynamicPathname = isDynamicRoute(pathname)\n const didRespond = isResSent(res)\n\n const { staticPaths, fallbackMode } = hasStaticPaths\n ? await this.getStaticPaths(pathname)\n : { staticPaths: undefined, fallbackMode: false }\n\n // When we did not respond from cache, we need to choose to block on\n // rendering or return a skeleton.\n //\n // * Data requests always block.\n //\n // * Blocking mode fallback always blocks.\n //\n // * Preview mode toggles all pages to be resolved in a blocking manner.\n //\n // * Non-dynamic pages should block (though this is an impossible\n // case in production).\n //\n // * Dynamic pages should return their skeleton if not defined in\n // getStaticPaths, then finish the data request on the client-side.\n //\n if (\n this.minimalMode !== true &&\n fallbackMode !== 'blocking' &&\n ssgCacheKey &&\n !didRespond &&\n !isPreviewMode &&\n isDynamicPathname &&\n // Development should trigger fallback when the path is not in\n // `getStaticPaths`\n (isProduction ||\n !staticPaths ||\n !staticPaths.includes(\n // we use ssgCacheKey here as it is normalized to match the\n // encoding from getStaticPaths along with including the locale\n query.amp ? ssgCacheKey.replace(/\\.amp$/, '') : ssgCacheKey\n ))\n ) {\n if (\n // In development, fall through to render to handle missing\n // getStaticPaths.\n (isProduction || staticPaths) &&\n // When fallback isn't present, abort this render so we 404\n fallbackMode !== 'static'\n ) {\n throw new NoFallbackError()\n }\n\n if (!isDataReq) {\n let html: string\n\n // Production already emitted the fallback as static HTML.\n if (isProduction) {\n html = await this.incrementalCache.getFallback(\n locale ? `/${locale}${pathname}` : pathname\n )\n }\n // We need to generate the fallback on-demand for development.\n else {\n query.__nextFallback = 'true'\n if (isLikeServerless) {\n prepareServerlessUrl(req, query)\n }\n const { value: renderResult } = await doRender()\n html = renderResult.html\n }\n\n sendPayload(req, res, html, 'html', {\n generateEtags: this.renderOpts.generateEtags,\n poweredByHeader: this.renderOpts.poweredByHeader,\n })\n return null\n }\n }\n\n const {\n isOrigin,\n value: { html, pageData, sprRevalidate, isNotFound, isRedirect },\n } = await doRender()\n let resHtml = html\n\n const revalidateOptions =\n !this.renderOpts.dev || (hasServerProps && !isDataReq)\n ? {\n private: isPreviewMode,\n stateful: !isSSG,\n revalidate: sprRevalidate,\n }\n : undefined\n\n if (\n !isResSent(res) &&\n !isNotFound &&\n (isSSG || isDataReq || hasServerProps)\n ) {\n if (isRedirect && !isDataReq) {\n await handleRedirect(pageData)\n } else {\n sendPayload(\n req,\n res,\n isDataReq ? JSON.stringify(pageData) : html,\n isDataReq ? 'json' : 'html',\n {\n generateEtags: this.renderOpts.generateEtags,\n poweredByHeader: this.renderOpts.poweredByHeader,\n },\n revalidateOptions\n )\n }\n resHtml = null\n }\n\n // Update the cache if the head request and cacheable\n if (isOrigin && ssgCacheKey) {\n await this.incrementalCache.set(\n ssgCacheKey,\n { html: html!, pageData, isNotFound, isRedirect },\n sprRevalidate\n )\n }\n\n if (!isResSent(res) && isNotFound) {\n if (revalidateOptions) {\n setRevalidateHeaders(res, revalidateOptions)\n }\n if (isDataReq) {\n res.statusCode = 404\n res.end('{\"notFound\":true}')\n } else {\n await this.render404(req, res, {\n pathname,\n query,\n } as UrlWithParsedQuery)\n }\n }\n return resHtml\n }\n\n public async renderToHTML(\n req: IncomingMessage,\n res: ServerResponse,\n pathname: string,\n query: ParsedUrlQuery = {}\n ): Promise<string | null> {\n const bubbleNoFallback = !!query._nextBubbleNoFallback\n delete query._nextBubbleNoFallback\n\n try {\n const result = await this.findPageComponents(pathname, query)\n if (result) {\n try {\n return await this.renderToHTMLWithComponents(\n req,\n res,\n pathname,\n result,\n { ...this.renderOpts }\n )\n } catch (err) {\n const isNoFallbackError = err instanceof NoFallbackError\n\n if (!isNoFallbackError || (isNoFallbackError && bubbleNoFallback)) {\n throw err\n }\n }\n }\n\n if (this.dynamicRoutes) {\n for (const dynamicRoute of this.dynamicRoutes) {\n const params = dynamicRoute.match(pathname)\n if (!params) {\n continue\n }\n\n const dynamicRouteResult = await this.findPageComponents(\n dynamicRoute.page,\n query,\n params\n )\n if (dynamicRouteResult) {\n try {\n return await this.renderToHTMLWithComponents(\n req,\n res,\n dynamicRoute.page,\n dynamicRouteResult,\n { ...this.renderOpts, params }\n )\n } catch (err) {\n const isNoFallbackError = err instanceof NoFallbackError\n\n if (\n !isNoFallbackError ||\n (isNoFallbackError && bubbleNoFallback)\n ) {\n throw err\n }\n }\n }\n }\n }\n } catch (err) {\n const isNoFallbackError = err instanceof NoFallbackError\n\n if (isNoFallbackError && bubbleNoFallback) {\n throw err\n }\n if (err && err.code === 'DECODE_FAILED') {\n this.logError(err)\n res.statusCode = 400\n return await this.renderErrorToHTML(err, req, res, pathname, query)\n }\n res.statusCode = 500\n const html = await this.renderErrorToHTML(err, req, res, pathname, query)\n\n if (this.minimalMode) {\n throw err\n }\n this.logError(err)\n return html\n }\n res.statusCode = 404\n return await this.renderErrorToHTML(null, req, res, pathname, query)\n }\n\n public async renderError(\n err: Error | null,\n req: IncomingMessage,\n res: ServerResponse,\n pathname: string,\n query: ParsedUrlQuery = {},\n setHeaders = true\n ): Promise<void> {\n if (setHeaders) {\n res.setHeader(\n 'Cache-Control',\n 'no-cache, no-store, max-age=0, must-revalidate'\n )\n }\n const html = await this.renderErrorToHTML(err, req, res, pathname, query)\n\n if (this.minimalMode && res.statusCode === 500) {\n throw err\n }\n if (html === null) {\n return\n }\n return this.sendHTML(req, res, html)\n }\n\n private customErrorNo404Warn = execOnce(() => {\n console.warn(\n chalk.bold.yellow(`Warning: `) +\n chalk.yellow(\n `You have added a custom /_error page without a custom /404 page. This prevents the 404 page from being auto statically optimized.\\nSee here for info: https://nextjs.org/docs/messages/custom-error-no-custom-404`\n )\n )\n })\n\n public async renderErrorToHTML(\n err: Error | null,\n req: IncomingMessage,\n res: ServerResponse,\n _pathname: string,\n query: ParsedUrlQuery = {}\n ) {\n let html: string | null\n try {\n let result: null | FindComponentsResult = null\n\n const is404 = res.statusCode === 404\n let using404Page = false\n\n // use static 404 page if available and is 404 response\n if (is404) {\n result = await this.findPageComponents('/404', query)\n using404Page = result !== null\n }\n let statusPage = `/${res.statusCode}`\n\n if (!result && STATIC_STATUS_PAGES.includes(statusPage)) {\n result = await this.findPageComponents(statusPage, query)\n }\n\n if (!result) {\n result = await this.findPageComponents('/_error', query)\n statusPage = '/_error'\n }\n\n if (\n process.env.NODE_ENV !== 'production' &&\n !using404Page &&\n (await this.hasPage('/_error')) &&\n !(await this.hasPage('/404'))\n ) {\n this.customErrorNo404Warn()\n }\n\n try {\n html = await this.renderToHTMLWithComponents(\n req,\n res,\n statusPage,\n result!,\n {\n ...this.renderOpts,\n err,\n }\n )\n } catch (maybeFallbackError) {\n if (maybeFallbackError instanceof NoFallbackError) {\n throw new Error('invariant: failed to render error page')\n }\n throw maybeFallbackError\n }\n } catch (renderToHtmlError) {\n console.error(renderToHtmlError)\n res.statusCode = 500\n\n if (this.renderOpts.dev) {\n await ((this as any).hotReloader as HotReloader).buildFallbackError()\n\n const fallbackResult = await loadDefaultErrorComponents(this.distDir)\n return this.renderToHTMLWithComponents(\n req,\n res,\n '/_error',\n {\n query,\n components: fallbackResult,\n },\n {\n ...this.renderOpts,\n err,\n }\n )\n }\n html = 'Internal Server Error'\n }\n return html\n }\n\n public async render404(\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery,\n setHeaders = true\n ): Promise<void> {\n const url: any = req.url\n const { pathname, query } = parsedUrl ? parsedUrl : parseUrl(url, true)\n const { i18n } = this.nextConfig\n\n if (i18n) {\n query.__nextLocale = query.__nextLocale || i18n.defaultLocale\n query.__nextDefaultLocale =\n query.__nextDefaultLocale || i18n.defaultLocale\n }\n res.statusCode = 404\n return this.renderError(null, req, res, pathname!, query, setHeaders)\n }\n\n public async serveStatic(\n req: IncomingMessage,\n res: ServerResponse,\n path: string,\n parsedUrl?: UrlWithParsedQuery\n ): Promise<void> {\n if (!this.isServeableUrl(path)) {\n return this.render404(req, res, parsedUrl)\n }\n\n if (!(req.method === 'GET' || req.method === 'HEAD')) {\n res.statusCode = 405\n res.setHeader('Allow', ['GET', 'HEAD'])\n return this.renderError(null, req, res, path)\n }\n\n try {\n await serveStatic(req, res, path)\n } catch (err) {\n if (err.code === 'ENOENT' || err.statusCode === 404) {\n this.render404(req, res, parsedUrl)\n } else if (err.statusCode === 412) {\n res.statusCode = 412\n return this.renderError(err, req, res, path)\n } else {\n throw err\n }\n }\n }\n\n private _validFilesystemPathSet: Set<string> | null = null\n private getFilesystemPaths(): Set<string> {\n if (this._validFilesystemPathSet) {\n return this._validFilesystemPathSet\n }\n\n const pathUserFilesStatic = join(this.dir, 'static')\n let userFilesStatic: string[] = []\n if (this.hasStaticDir && fs.existsSync(pathUserFilesStatic)) {\n userFilesStatic = recursiveReadDirSync(pathUserFilesStatic).map((f) =>\n join('.', 'static', f)\n )\n }\n\n let userFilesPublic: string[] = []\n if (this.publicDir && fs.existsSync(this.publicDir)) {\n userFilesPublic = recursiveReadDirSync(this.publicDir).map((f) =>\n join('.', 'public', f)\n )\n }\n\n let nextFilesStatic: string[] = []\n nextFilesStatic = !this.minimalMode\n ? recursiveReadDirSync(join(this.distDir, 'static')).map((f) =>\n join('.', relative(this.dir, this.distDir), 'static', f)\n )\n : []\n\n return (this._validFilesystemPathSet = new Set<string>([\n ...nextFilesStatic,\n ...userFilesPublic,\n ...userFilesStatic,\n ]))\n }\n\n protected isServeableUrl(untrustedFileUrl: string): boolean {\n // This method mimics what the version of `send` we use does:\n // 1. decodeURIComponent:\n // https://github.com/pillarjs/send/blob/0.17.1/index.js#L989\n // https://github.com/pillarjs/send/blob/0.17.1/index.js#L518-L522\n // 2. resolve:\n // https://github.com/pillarjs/send/blob/de073ed3237ade9ff71c61673a34474b30e5d45b/index.js#L561\n\n let decodedUntrustedFilePath: string\n try {\n // (1) Decode the URL so we have the proper file name\n decodedUntrustedFilePath = decodeURIComponent(untrustedFileUrl)\n } catch {\n return false\n }\n\n // (2) Resolve \"up paths\" to determine real request\n const untrustedFilePath = resolve(decodedUntrustedFilePath)\n\n // don't allow null bytes anywhere in the file path\n if (untrustedFilePath.indexOf('\\0') !== -1) {\n return false\n }\n\n // Check if .next/static, static and public are in the path.\n // If not the path is not available.\n if (\n (untrustedFilePath.startsWith(join(this.distDir, 'static') + sep) ||\n untrustedFilePath.startsWith(join(this.dir, 'static') + sep) ||\n untrustedFilePath.startsWith(join(this.dir, 'public') + sep)) === false\n ) {\n return false\n }\n\n // Check against the real filesystem paths\n const filesystemUrls = this.getFilesystemPaths()\n const resolved = relative(this.dir, untrustedFilePath)\n return filesystemUrls.has(resolved)\n }\n\n protected readBuildId(): string {\n const buildIdFile = join(this.distDir, BUILD_ID_FILE)\n try {\n return fs.readFileSync(buildIdFile, 'utf8').trim()\n } catch (err) {\n if (!fs.existsSync(buildIdFile)) {\n throw new Error(\n `Could not find a production build in the '${this.distDir}' directory. Try building your app with 'next build' before starting the production server. https://nextjs.org/docs/messages/production-start-no-build-id`\n )\n }\n\n throw err\n }\n }\n\n protected get _isLikeServerless(): boolean {\n return isTargetLikeServerless(this.nextConfig.target)\n }\n}\n\nfunction prepareServerlessUrl(\n req: IncomingMessage,\n query: ParsedUrlQuery\n): void {\n const curUrl = parseUrl(req.url!, true)\n req.url = formatUrl({\n ...curUrl,\n search: undefined,\n query: {\n ...curUrl.query,\n ...query,\n },\n })\n}\n\nclass NoFallbackError extends Error {}\n"]}
\No newline at end of file