{"version":3,"sources":["../../../src/server/lib/router-server.ts"],"sourcesContent":["// this must come first as it includes require hooks\nimport type { WorkerRequestHandler, WorkerUpgradeHandler } from './types'\nimport type { DevBundler, ServerFields } from './router-utils/setup-dev-bundler'\nimport type { NextUrlWithParsedQuery, RequestMeta } from '../request-meta'\n\n// This is required before other imports to ensure the require hook is setup.\nimport '../node-environment'\nimport '../require-hook'\n\nimport url from 'url'\nimport path from 'path'\nimport loadConfig, { type ConfiguredExperimentalFeature } from '../config'\nimport { serveStatic } from '../serve-static'\nimport setupDebug from 'next/dist/compiled/debug'\nimport * as Log from '../../build/output/log'\nimport { DecodeError } from '../../shared/lib/utils'\nimport { findPagesDir } from '../../lib/find-pages-dir'\nimport { setupFsCheck } from './router-utils/filesystem'\nimport { proxyRequest } from './router-utils/proxy-request'\nimport { isAbortError, pipeToNodeResponse } from '../pipe-readable'\nimport { getResolveRoutes } from './router-utils/resolve-routes'\nimport { addRequestMeta, getRequestMeta } from '../request-meta'\nimport { pathHasPrefix } from '../../shared/lib/router/utils/path-has-prefix'\nimport { removePathPrefix } from '../../shared/lib/router/utils/remove-path-prefix'\nimport setupCompression from 'next/dist/compiled/compression'\nimport { signalFromNodeResponse } from '../web/spec-extension/adapters/next-request'\nimport { isPostpone } from './router-utils/is-postpone'\nimport { parseUrl as parseUrlUtil } from '../../shared/lib/router/utils/parse-url'\n\nimport {\n  PHASE_PRODUCTION_SERVER,\n  PHASE_DEVELOPMENT_SERVER,\n  UNDERSCORE_NOT_FOUND_ROUTE,\n} from '../../shared/lib/constants'\nimport { RedirectStatusCode } from '../../client/components/redirect-status-code'\nimport { DevBundlerService } from './dev-bundler-service'\nimport { type Span, trace } from '../../trace'\nimport { ensureLeadingSlash } from '../../shared/lib/page-path/ensure-leading-slash'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { MockedResponse } from './mock-request'\nimport {\n  HMR_MESSAGE_SENT_TO_BROWSER,\n  type AppIsrManifestMessage,\n} from '../dev/hot-reloader-types'\nimport { normalizedAssetPrefix } from '../../shared/lib/normalized-asset-prefix'\nimport { NEXT_PATCH_SYMBOL } from './patch-fetch'\nimport type { ServerInitResult } from './render-server'\nimport { filterInternalHeaders } from './server-ipc/utils'\nimport { blockCrossSiteDEV } from './router-utils/block-cross-site-dev'\nimport { traceGlobals } from '../../trace/shared'\nimport { NoFallbackError } from '../../shared/lib/no-fallback-error.external'\nimport {\n  RouterServerContextSymbol,\n  routerServerGlobal,\n} from './router-utils/router-server-context'\nimport {\n  handleChromeDevtoolsWorkspaceRequest,\n  isChromeDevtoolsWorkspaceUrl,\n} from './chrome-devtools-workspace'\nimport { getNextConfigRuntime, type NextConfigComplete } from '../config-shared'\n\nconst debug = setupDebug('next:router-server:main')\nconst isNextFont = (pathname: string | null) =>\n  pathname && /\\/media\\/[^/]+\\.(woff|woff2|eot|ttf|otf)$/.test(pathname)\n\nexport type RenderServer = Pick<\n  typeof import('./render-server'),\n  | 'initialize'\n  | 'clearModuleContext'\n  | 'propagateServerField'\n  | 'getServerField'\n>\n\nexport interface LazyRenderServerInstance {\n  instance?: RenderServer\n}\n\nconst requestHandlers: Record<string, WorkerRequestHandler> = {}\n\nexport async function initialize(opts: {\n  dir: string\n  port: number\n  dev: boolean\n  onDevServerCleanup: ((listener: () => Promise<void>) => void) | undefined\n  server?: import('http').Server\n  minimalMode?: boolean\n  hostname?: string\n  keepAliveTimeout?: number\n  customServer?: boolean\n  experimentalHttpsServer?: boolean\n  serverFastRefresh?: boolean\n  startServerSpan?: Span\n  quiet?: boolean\n}): Promise<ServerInitResult> {\n  if (!process.env.NODE_ENV) {\n    // @ts-ignore not readonly\n    process.env.NODE_ENV = opts.dev ? 'development' : 'production'\n  }\n\n  let experimentalFeatures: ConfiguredExperimentalFeature[] = []\n  const config = await loadConfig(\n    opts.dev ? PHASE_DEVELOPMENT_SERVER : PHASE_PRODUCTION_SERVER,\n    opts.dir,\n    {\n      silent: false,\n      reportExperimentalFeatures(features) {\n        experimentalFeatures = features.toSorted(({ key: a }, { key: b }) =>\n          a.localeCompare(b)\n        )\n      },\n    }\n  )\n\n  let compress: ReturnType<typeof setupCompression> | undefined\n\n  if (config?.compress !== false) {\n    compress = setupCompression()\n  }\n\n  const fsChecker = await setupFsCheck({\n    dev: opts.dev,\n    dir: opts.dir,\n    config,\n    minimalMode: opts.minimalMode,\n  })\n\n  const renderServer: LazyRenderServerInstance = {}\n\n  let development:\n    | {\n        bundler: DevBundler\n        service: DevBundlerService\n        config: NextConfigComplete\n      }\n    | undefined = undefined\n\n  let originalFetch = globalThis.fetch\n\n  if (opts.dev) {\n    const { Telemetry } =\n      require('../../telemetry/storage') as typeof import('../../telemetry/storage')\n\n    const telemetry = new Telemetry({\n      distDir: path.join(opts.dir, config.distDir),\n    })\n    traceGlobals.set('telemetry', telemetry)\n\n    const { pagesDir, appDir } = findPagesDir(opts.dir)\n\n    const { setupDevBundler } =\n      require('./router-utils/setup-dev-bundler') as typeof import('./router-utils/setup-dev-bundler')\n\n    const resetFetch = () => {\n      globalThis.fetch = originalFetch\n      ;(globalThis as Record<symbol, unknown>)[NEXT_PATCH_SYMBOL] = false\n    }\n\n    const setupDevBundlerSpan = opts.startServerSpan\n      ? opts.startServerSpan.traceChild('setup-dev-bundler')\n      : trace('setup-dev-bundler')\n\n    // In development, it's always the complete config.\n    let developmentConfig = config as NextConfigComplete\n\n    let developmentBundler = await setupDevBundlerSpan.traceAsyncFn(() =>\n      setupDevBundler({\n        // Passed here but the initialization of this object happens below, doing the initialization before the setupDev call breaks.\n        renderServer,\n        appDir,\n        pagesDir,\n        telemetry,\n        fsChecker,\n        dir: opts.dir,\n        nextConfig: developmentConfig,\n        isCustomServer: opts.customServer,\n        turbo: !!process.env.TURBOPACK,\n        port: opts.port,\n        onDevServerCleanup: opts.onDevServerCleanup,\n        resetFetch,\n        serverFastRefresh: opts.serverFastRefresh,\n      })\n    )\n\n    let devBundlerService = new DevBundlerService(\n      developmentBundler,\n      // The request handler is assigned below, this allows us to create a lazy\n      // reference to it.\n      (req, res) => {\n        return requestHandlers[opts.dir](req, res)\n      }\n    )\n\n    development = {\n      bundler: developmentBundler,\n      service: devBundlerService,\n      config: developmentConfig,\n    }\n  }\n\n  renderServer.instance =\n    require('./render-server') as typeof import('./render-server')\n\n  const requestHandlerImpl: WorkerRequestHandler = async (req, res) => {\n    addRequestMeta(req, 'relativeProjectDir', relativeProjectDir)\n\n    // internal headers should not be honored by the request handler\n    if (!process.env.NEXT_PRIVATE_TEST_HEADERS) {\n      filterInternalHeaders(req.headers)\n    }\n\n    if (\n      !opts.minimalMode &&\n      config.i18n &&\n      config.i18n.localeDetection !== false\n    ) {\n      const urlParts = (req.url || '').split('?', 1)\n      let urlNoQuery = urlParts[0] || ''\n\n      if (config.basePath) {\n        urlNoQuery = removePathPrefix(urlNoQuery, config.basePath)\n      }\n\n      const pathnameInfo = getNextPathnameInfo(urlNoQuery, {\n        nextConfig: config,\n      })\n\n      const domainLocale = detectDomainLocale(\n        config.i18n.domains,\n        getHostname({ hostname: urlNoQuery }, req.headers)\n      )\n\n      const defaultLocale =\n        domainLocale?.defaultLocale || config.i18n.defaultLocale\n\n      const { getLocaleRedirect } =\n        require('../../shared/lib/i18n/get-locale-redirect') as typeof import('../../shared/lib/i18n/get-locale-redirect')\n\n      const parsedUrl = parseUrlUtil((req.url || '')?.replace(/^\\/+/, '/'))\n\n      const redirect = getLocaleRedirect({\n        defaultLocale,\n        domainLocale,\n        headers: req.headers,\n        nextConfig: config,\n        pathLocale: pathnameInfo.locale,\n        urlParsed: {\n          ...parsedUrl,\n          pathname: pathnameInfo.locale\n            ? `/${pathnameInfo.locale}${urlNoQuery}`\n            : urlNoQuery,\n        },\n      })\n\n      if (redirect) {\n        res.setHeader('Location', redirect)\n        res.statusCode = RedirectStatusCode.TemporaryRedirect\n        res.end(redirect)\n        return\n      }\n    }\n\n    if (compress) {\n      // @ts-expect-error not express req/res\n      compress(req, res, () => {})\n    }\n    req.on('error', (_err) => {\n      // TODO: log socket errors?\n    })\n    res.on('error', (_err) => {\n      // TODO: log socket errors?\n    })\n\n    const invokedOutputs = new Set<string>()\n\n    async function invokeRender(\n      parsedUrl: NextUrlWithParsedQuery,\n      invokePath: string,\n      handleIndex: number,\n      additionalRequestMeta?: RequestMeta\n    ) {\n      // invokeRender expects /api routes to not be locale prefixed\n      // so normalize here before continuing\n      if (\n        config.i18n &&\n        removePathPrefix(invokePath, config.basePath).startsWith(\n          `/${getRequestMeta(req, 'locale')}/api`\n        )\n      ) {\n        invokePath = fsChecker.handleLocale(\n          removePathPrefix(invokePath, config.basePath)\n        ).pathname\n      }\n\n      if (\n        req.headers['x-nextjs-data'] &&\n        fsChecker.getMiddlewareMatchers()?.length &&\n        removePathPrefix(invokePath, config.basePath) === '/404'\n      ) {\n        res.setHeader('x-nextjs-matched-path', parsedUrl.pathname || '')\n        res.statusCode = 404\n        res.setHeader('content-type', 'application/json')\n        res.end('{}')\n        return null\n      }\n\n      if (!handlers) {\n        throw new Error('Failed to initialize render server')\n      }\n\n      addRequestMeta(req, 'invokePath', invokePath)\n      addRequestMeta(req, 'invokeQuery', parsedUrl.query)\n      addRequestMeta(req, 'middlewareInvoke', false)\n\n      for (const key in additionalRequestMeta || {}) {\n        addRequestMeta(\n          req,\n          key as keyof RequestMeta,\n          additionalRequestMeta![key as keyof RequestMeta]\n        )\n      }\n\n      debug('invokeRender', req.url, req.headers)\n\n      try {\n        const initResult =\n          await renderServer?.instance?.initialize(renderServerOpts)\n        try {\n          await initResult?.requestHandler(req, res)\n        } catch (err) {\n          if (err instanceof NoFallbackError) {\n            await handleRequest(handleIndex + 1)\n            return\n          }\n          throw err\n        }\n        return\n      } catch (e) {\n        // If the client aborts before we can receive a response object (when\n        // the headers are flushed), then we can early exit without further\n        // processing.\n        if (isAbortError(e)) {\n          return\n        }\n        throw e\n      }\n    }\n\n    const handleRequest = async (handleIndex: number) => {\n      if (handleIndex > 5) {\n        throw new Error(`Attempted to handle request too many times ${req.url}`)\n      }\n\n      // handle hot-reloader first\n      if (development) {\n        if (\n          blockCrossSiteDEV(\n            req,\n            res,\n            development.config.allowedDevOrigins,\n            opts.hostname\n          )\n        ) {\n          return\n        }\n\n        const origUrl = req.url || '/'\n\n        // both the basePath and assetPrefix need to be stripped from the URL\n        // so that the development bundler can find the correct file\n        if (config.basePath && pathHasPrefix(origUrl, config.basePath)) {\n          req.url = removePathPrefix(origUrl, config.basePath)\n        } else if (\n          config.assetPrefix &&\n          pathHasPrefix(origUrl, config.assetPrefix)\n        ) {\n          req.url = removePathPrefix(origUrl, config.assetPrefix)\n        }\n\n        const parsedUrl = parseUrlUtil(req.url || '/')\n\n        const hotReloaderResult = await development.bundler.hotReloader.run(\n          req,\n          res,\n          parsedUrl\n        )\n\n        if (hotReloaderResult.finished) {\n          return hotReloaderResult\n        }\n\n        req.url = origUrl\n      }\n\n      const {\n        finished,\n        parsedUrl,\n        statusCode,\n        resHeaders,\n        bodyStream,\n        matchedOutput,\n      } = await resolveRoutes({\n        req,\n        res,\n        isUpgradeReq: false,\n        signal: signalFromNodeResponse(res),\n        invokedOutputs,\n      })\n\n      if (res.closed || res.finished) {\n        return\n      }\n\n      if (development && matchedOutput?.type === 'devVirtualFsItem') {\n        const origUrl = req.url || '/'\n\n        if (config.basePath && pathHasPrefix(origUrl, config.basePath)) {\n          req.url = removePathPrefix(origUrl, config.basePath)\n        } else if (\n          config.assetPrefix &&\n          pathHasPrefix(origUrl, config.assetPrefix)\n        ) {\n          req.url = removePathPrefix(origUrl, config.assetPrefix)\n        }\n\n        if (resHeaders !== null) {\n          for (const key of Object.keys(resHeaders)) {\n            res.setHeader(key, resHeaders[key])\n          }\n        }\n        const result = await development.bundler.requestHandler(req, res)\n\n        if (result.finished) {\n          return\n        }\n        // TODO: throw invariant if we resolved to this but it wasn't handled?\n        req.url = origUrl\n      }\n\n      debug('requestHandler!', req.url, {\n        matchedOutput,\n        statusCode,\n        resHeaders,\n        bodyStream: !!bodyStream,\n        parsedUrl: {\n          pathname: parsedUrl.pathname,\n          query: parsedUrl.query,\n        },\n        finished,\n      })\n\n      // apply any response headers from routing\n      if (resHeaders !== null) {\n        for (const key of Object.keys(resHeaders)) {\n          res.setHeader(key, resHeaders[key])\n        }\n      }\n\n      // handle redirect\n      if (!bodyStream && statusCode && statusCode > 300 && statusCode < 400) {\n        const destination = url.format(parsedUrl)\n        res.statusCode = statusCode\n        res.setHeader('location', destination)\n\n        if (statusCode === RedirectStatusCode.PermanentRedirect) {\n          res.setHeader('Refresh', `0;url=${destination}`)\n        }\n        return res.end(destination)\n      }\n\n      // handle middleware body response\n      if (bodyStream) {\n        res.statusCode = statusCode || 200\n        return await pipeToNodeResponse(bodyStream, res)\n      }\n\n      if (finished && parsedUrl.protocol) {\n        return await proxyRequest(\n          req,\n          res,\n          parsedUrl,\n          undefined,\n          getRequestMeta(req, 'clonableBody')?.cloneBodyStream(),\n          config.experimental.proxyTimeout\n        )\n      }\n\n      if (matchedOutput?.fsPath && matchedOutput.itemPath) {\n        if (\n          opts.dev &&\n          (fsChecker.appFiles.has(matchedOutput.itemPath) ||\n            fsChecker.pageFiles.has(matchedOutput.itemPath))\n        ) {\n          res.statusCode = 500\n          const message = `A conflicting public file and page file was found for path ${matchedOutput.itemPath} https://nextjs.org/docs/messages/conflicting-public-file-page`\n          await invokeRender(parsedUrl, '/_error', handleIndex, {\n            invokeStatus: 500,\n            invokeError: new Error(message),\n          })\n          Log.error(message)\n          return\n        }\n\n        if (\n          !res.getHeader('cache-control') &&\n          matchedOutput.type === 'nextStaticFolder'\n        ) {\n          if (opts.dev && !isNextFont(parsedUrl.pathname)) {\n            res.setHeader('Cache-Control', 'no-cache, must-revalidate')\n          } else {\n            res.setHeader(\n              'Cache-Control',\n              'public, max-age=31536000, immutable'\n            )\n          }\n        }\n        if (!(req.method === 'GET' || req.method === 'HEAD')) {\n          res.setHeader('Allow', ['GET', 'HEAD'])\n          res.statusCode = 405\n          return await invokeRender(parseUrlUtil('/405'), '/405', handleIndex, {\n            invokeStatus: 405,\n          })\n        }\n\n        try {\n          return await serveStatic(req, res, matchedOutput.itemPath, {\n            root: matchedOutput.itemsRoot,\n            // Ensures that etags are not generated for static files when disabled.\n            etag: config.generateEtags,\n          })\n        } catch (err: any) {\n          /**\n           * Hardcoded every possible error status code that could be thrown by \"serveStatic\" method\n           * This is done by searching \"this.error\" inside \"send\" module's source code:\n           * https://github.com/pillarjs/send/blob/master/index.js\n           * https://github.com/pillarjs/send/blob/develop/index.js\n           */\n          const POSSIBLE_ERROR_CODE_FROM_SERVE_STATIC = new Set([\n            // send module will throw 500 when header is already sent or fs.stat error happens\n            // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L392\n            // Note: we will use Next.js built-in 500 page to handle 500 errors\n            // 500,\n\n            // send module will throw 404 when file is missing\n            // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L421\n            // Note: we will use Next.js built-in 404 page to handle 404 errors\n            // 404,\n\n            // send module will throw 403 when redirecting to a directory without enabling directory listing\n            // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L484\n            // Note: Next.js throws a different error (without status code) for directory listing\n            // 403,\n\n            // send module will throw 400 when fails to normalize the path\n            // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L520\n            400,\n\n            // send module will throw 412 with conditional GET request\n            // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L632\n            412,\n\n            // send module will throw 416 when range is not satisfiable\n            // https://github.com/pillarjs/send/blob/53f0ab476145670a9bdd3dc722ab2fdc8d358fc6/index.js#L669\n            416,\n          ])\n\n          let validErrorStatus = POSSIBLE_ERROR_CODE_FROM_SERVE_STATIC.has(\n            err.statusCode\n          )\n\n          // normalize non-allowed status codes\n          if (!validErrorStatus) {\n            ;(err as any).statusCode = 400\n          }\n\n          if (typeof err.statusCode === 'number') {\n            const invokePath = `/${err.statusCode}`\n            const invokeStatus = err.statusCode\n            res.statusCode = err.statusCode\n            return await invokeRender(\n              parseUrlUtil(invokePath),\n              invokePath,\n              handleIndex,\n              {\n                invokeStatus,\n              }\n            )\n          }\n          throw err\n        }\n      }\n\n      if (matchedOutput) {\n        invokedOutputs.add(matchedOutput.itemPath)\n\n        return await invokeRender(\n          parsedUrl,\n          parsedUrl.pathname || '/',\n          handleIndex,\n          {\n            invokeOutput: matchedOutput.itemPath,\n          }\n        )\n      }\n\n      // We want the original pathname without any basePath or proxy rewrites.\n      if (development && isChromeDevtoolsWorkspaceUrl(req.url)) {\n        await handleChromeDevtoolsWorkspaceRequest(res, opts, config)\n        return\n      }\n\n      // 404 case\n      res.setHeader(\n        'Cache-Control',\n        'private, no-cache, no-store, max-age=0, must-revalidate'\n      )\n\n      let realRequestPathname = parsedUrl.pathname ?? ''\n      if (realRequestPathname) {\n        if (config.basePath) {\n          realRequestPathname = removePathPrefix(\n            realRequestPathname,\n            config.basePath\n          )\n        }\n        if (config.assetPrefix) {\n          realRequestPathname = removePathPrefix(\n            realRequestPathname,\n            config.assetPrefix\n          )\n        }\n        if (config.i18n) {\n          realRequestPathname = removePathPrefix(\n            realRequestPathname,\n            '/' + (getRequestMeta(req, 'locale') ?? '')\n          )\n        }\n      }\n      // For not found static assets, return plain text 404 instead of\n      // full HTML 404 pages to save bandwidth.\n      if (realRequestPathname.startsWith('/_next/static/')) {\n        res.statusCode = 404\n        res.setHeader('Content-Type', 'text/plain; charset=utf-8')\n        res.end('Not Found')\n        return null\n      }\n\n      // Short-circuit favicon.ico serving so that the 404 page doesn't get built as favicon is requested by the browser when loading any route.\n      if (opts.dev && !matchedOutput && parsedUrl.pathname === '/favicon.ico') {\n        res.statusCode = 404\n        res.end('')\n        return null\n      }\n\n      const appNotFound = opts.dev\n        ? development?.bundler?.serverFields.hasAppNotFound\n        : await fsChecker.getItem(UNDERSCORE_NOT_FOUND_ROUTE)\n\n      res.statusCode = 404\n\n      if (appNotFound) {\n        return await invokeRender(\n          parsedUrl,\n          UNDERSCORE_NOT_FOUND_ROUTE,\n          handleIndex,\n          {\n            invokeStatus: 404,\n          }\n        )\n      }\n\n      await invokeRender(parsedUrl, '/404', handleIndex, {\n        invokeStatus: 404,\n      })\n    }\n\n    try {\n      await handleRequest(0)\n    } catch (err) {\n      try {\n        let invokePath = '/500'\n        let invokeStatus = '500'\n\n        if (err instanceof DecodeError) {\n          invokePath = '/400'\n          invokeStatus = '400'\n        } else {\n          console.error(err)\n        }\n        res.statusCode = Number(invokeStatus)\n        return await invokeRender(parseUrlUtil(invokePath), invokePath, 0, {\n          invokeStatus: res.statusCode,\n        })\n      } catch (err2) {\n        console.error(err2)\n      }\n      res.statusCode = 500\n      res.end('Internal Server Error')\n    }\n  }\n\n  let requestHandler: WorkerRequestHandler = requestHandlerImpl\n  if (config.experimental.testProxy) {\n    // Intercept fetch and other testmode apis.\n    const { wrapRequestHandlerWorker, interceptTestApis } =\n      // eslint-disable-next-line @next/internal/typechecked-require -- experimental/testmode is not built ins next/dist/esm\n      require('next/dist/experimental/testmode/server') as typeof import('../../experimental/testmode/server')\n    requestHandler = wrapRequestHandlerWorker(requestHandler)\n    interceptTestApis()\n    // We treat the intercepted fetch as \"original\" fetch that should be reset to during HMR.\n    originalFetch = globalThis.fetch\n  }\n  requestHandlers[opts.dir] = requestHandler\n\n  const renderServerOpts: Parameters<RenderServer['initialize']>[0] = {\n    port: opts.port,\n    dir: opts.dir,\n    hostname: opts.hostname,\n    minimalMode: opts.minimalMode,\n    dev: !!opts.dev,\n    server: opts.server,\n    serverFields: {\n      ...(development?.bundler?.serverFields || {}),\n      setIsrStatus: development?.service?.setIsrStatus.bind(\n        development?.service\n      ),\n    } satisfies ServerFields,\n    experimentalTestProxy: !!config.experimental.testProxy,\n    experimentalHttpsServer: !!opts.experimentalHttpsServer,\n    bundlerService: development?.service,\n    startServerSpan: opts.startServerSpan,\n    quiet: opts.quiet,\n    onDevServerCleanup: opts.onDevServerCleanup,\n    distDir: config.distDir,\n    experimentalFeatures,\n    cacheComponents: config.cacheComponents,\n  }\n  renderServerOpts.serverFields.routerServerHandler = requestHandlerImpl\n\n  // pre-initialize workers\n  const handlers = await renderServer.instance.initialize(renderServerOpts)\n\n  // this must come after initialize of render server since it's\n  // using initialized methods\n  if (!routerServerGlobal[RouterServerContextSymbol]) {\n    routerServerGlobal[RouterServerContextSymbol] = {}\n  }\n  const relativeProjectDir = path.relative(process.cwd(), opts.dir)\n\n  routerServerGlobal[RouterServerContextSymbol][relativeProjectDir] = {\n    nextConfig: getNextConfigRuntime(config),\n    hostname: handlers.server.hostname,\n    revalidate: handlers.server.revalidate.bind(handlers.server),\n    render404: handlers.server.render404.bind(handlers.server),\n    experimentalTestProxy: renderServerOpts.experimentalTestProxy,\n    logErrorWithOriginalStack: opts.dev\n      ? handlers.server.logErrorWithOriginalStack.bind(handlers.server)\n      : (err: unknown) => !opts.quiet && Log.error(err),\n    setCacheStatus: config.cacheComponents\n      ? development?.service?.setCacheStatus.bind(development?.service)\n      : undefined,\n    setIsrStatus: development?.service?.setIsrStatus.bind(development?.service),\n    setReactDebugChannel: development?.config.experimental.reactDebugChannel\n      ? development?.service?.setReactDebugChannel.bind(development?.service)\n      : undefined,\n    sendErrorsToBrowser: development?.service?.sendErrorsToBrowser.bind(\n      development?.service\n    ),\n  }\n\n  const logError = async (\n    type: 'uncaughtException' | 'unhandledRejection',\n    err: Error | undefined\n  ) => {\n    if (isPostpone(err)) {\n      // React postpones that are unhandled might end up logged here but they're\n      // not really errors. They're just part of rendering.\n      return\n    }\n    if (type === 'unhandledRejection') {\n      Log.error('unhandledRejection: ', err)\n    } else if (type === 'uncaughtException') {\n      Log.error('uncaughtException: ', err)\n    }\n  }\n\n  process.on('uncaughtException', logError.bind(null, 'uncaughtException'))\n  process.on('unhandledRejection', logError.bind(null, 'unhandledRejection'))\n\n  const resolveRoutes = getResolveRoutes(\n    fsChecker,\n    config,\n    opts,\n    renderServer.instance,\n    renderServerOpts,\n    development?.bundler?.ensureMiddleware\n  )\n\n  const upgradeHandler: WorkerUpgradeHandler = async (req, socket, head) => {\n    try {\n      req.on('error', (_err) => {\n        // TODO: log socket errors?\n        // console.error(_err);\n      })\n      socket.on('error', (_err) => {\n        // TODO: log socket errors?\n        // console.error(_err);\n      })\n\n      if (opts.dev && development && req.url) {\n        if (\n          blockCrossSiteDEV(\n            req,\n            socket,\n            development.config.allowedDevOrigins,\n            opts.hostname\n          )\n        ) {\n          return\n        }\n        const { basePath, assetPrefix } = config\n\n        let hmrPrefix = basePath\n\n        // assetPrefix overrides basePath for HMR path\n        if (assetPrefix) {\n          hmrPrefix = normalizedAssetPrefix(assetPrefix)\n\n          if (URL.canParse(hmrPrefix)) {\n            // remove trailing slash from pathname\n            // return empty string if pathname is '/'\n            // to avoid conflicts with '/_next' below\n            hmrPrefix = new URL(hmrPrefix).pathname.replace(/\\/$/, '')\n          }\n        }\n\n        const isHMRRequest = req.url.startsWith(\n          ensureLeadingSlash(`${hmrPrefix}/_next/webpack-hmr`)\n        )\n\n        // only handle HMR requests if the basePath in the request\n        // matches the basePath for the handler responding to the request\n        if (isHMRRequest) {\n          return development.bundler.hotReloader.onHMR(\n            req,\n            socket,\n            head,\n            (client, { isLegacyClient }) => {\n              if (isLegacyClient) {\n                // Only send the ISR manifest to legacy clients, i.e. Pages\n                // Router clients, or App Router clients that have Cache\n                // Components disabled. The ISR manifest is only used to inform\n                // the static indicator, which currently does not provide useful\n                // information if Cache Components is enabled due to its binary\n                // nature (i.e. it does not support showing info for partially\n                // static pages).\n                client.send(\n                  JSON.stringify({\n                    type: HMR_MESSAGE_SENT_TO_BROWSER.ISR_MANIFEST,\n                    data: development.service?.appIsrManifest || {},\n                  } satisfies AppIsrManifestMessage)\n                )\n              }\n            }\n          )\n        }\n      }\n\n      const res = new MockedResponse({\n        resWriter: () => {\n          throw new Error(\n            'Invariant: did not expect response writer to be written to for upgrade request'\n          )\n        },\n      })\n      const { matchedOutput, parsedUrl } = await resolveRoutes({\n        req,\n        res,\n        isUpgradeReq: true,\n        signal: signalFromNodeResponse(socket),\n      })\n\n      // TODO: allow upgrade requests to pages/app paths?\n      // this was not previously supported\n      if (matchedOutput) {\n        return socket.end()\n      }\n\n      if (parsedUrl.protocol) {\n        return await proxyRequest(req, socket, parsedUrl, head)\n      }\n\n      // If there's no matched output, we don't handle the request as user's\n      // custom WS server may be listening on the same path.\n    } catch (err) {\n      console.error('Error handling upgrade request', err)\n      socket.end()\n    }\n  }\n\n  return {\n    requestHandler,\n    upgradeHandler,\n    server: handlers.server,\n    closeUpgraded() {\n      development?.bundler?.hotReloader?.close()\n    },\n    distDir: config.distDir,\n    experimentalFeatures,\n    cacheComponents: config.cacheComponents,\n  }\n}\n"],"names":["initialize","debug","setupDebug","isNextFont","pathname","test","requestHandlers","opts","development","process","env","NODE_ENV","dev","experimentalFeatures","config","loadConfig","PHASE_DEVELOPMENT_SERVER","PHASE_PRODUCTION_SERVER","dir","silent","reportExperimentalFeatures","features","toSorted","key","a","b","localeCompare","compress","setupCompression","fsChecker","setupFsCheck","minimalMode","renderServer","undefined","originalFetch","globalThis","fetch","Telemetry","require","telemetry","distDir","path","join","traceGlobals","set","pagesDir","appDir","findPagesDir","setupDevBundler","resetFetch","NEXT_PATCH_SYMBOL","setupDevBundlerSpan","startServerSpan","traceChild","trace","developmentConfig","developmentBundler","traceAsyncFn","nextConfig","isCustomServer","customServer","turbo","TURBOPACK","port","onDevServerCleanup","serverFastRefresh","devBundlerService","DevBundlerService","req","res","bundler","service","instance","requestHandlerImpl","addRequestMeta","relativeProjectDir","NEXT_PRIVATE_TEST_HEADERS","filterInternalHeaders","headers","i18n","localeDetection","urlParts","url","split","urlNoQuery","basePath","removePathPrefix","pathnameInfo","getNextPathnameInfo","domainLocale","detectDomainLocale","domains","getHostname","hostname","defaultLocale","getLocaleRedirect","parsedUrl","parseUrlUtil","replace","redirect","pathLocale","locale","urlParsed","setHeader","statusCode","RedirectStatusCode","TemporaryRedirect","end","on","_err","invokedOutputs","Set","invokeRender","invokePath","handleIndex","additionalRequestMeta","startsWith","getRequestMeta","handleLocale","getMiddlewareMatchers","length","handlers","Error","query","initResult","renderServerOpts","requestHandler","err","NoFallbackError","handleRequest","e","isAbortError","blockCrossSiteDEV","allowedDevOrigins","origUrl","pathHasPrefix","assetPrefix","hotReloaderResult","hotReloader","run","finished","resHeaders","bodyStream","matchedOutput","resolveRoutes","isUpgradeReq","signal","signalFromNodeResponse","closed","type","Object","keys","result","destination","format","PermanentRedirect","pipeToNodeResponse","protocol","proxyRequest","cloneBodyStream","experimental","proxyTimeout","fsPath","itemPath","appFiles","has","pageFiles","message","invokeStatus","invokeError","Log","error","getHeader","method","serveStatic","root","itemsRoot","etag","generateEtags","POSSIBLE_ERROR_CODE_FROM_SERVE_STATIC","validErrorStatus","add","invokeOutput","isChromeDevtoolsWorkspaceUrl","handleChromeDevtoolsWorkspaceRequest","realRequestPathname","appNotFound","serverFields","hasAppNotFound","getItem","UNDERSCORE_NOT_FOUND_ROUTE","DecodeError","console","Number","err2","testProxy","wrapRequestHandlerWorker","interceptTestApis","server","setIsrStatus","bind","experimentalTestProxy","experimentalHttpsServer","bundlerService","quiet","cacheComponents","routerServerHandler","routerServerGlobal","RouterServerContextSymbol","relative","cwd","getNextConfigRuntime","revalidate","render404","logErrorWithOriginalStack","setCacheStatus","setReactDebugChannel","reactDebugChannel","sendErrorsToBrowser","logError","isPostpone","getResolveRoutes","ensureMiddleware","upgradeHandler","socket","head","hmrPrefix","normalizedAssetPrefix","URL","canParse","isHMRRequest","ensureLeadingSlash","onHMR","client","isLegacyClient","send","JSON","stringify","HMR_MESSAGE_SENT_TO_BROWSER","ISR_MANIFEST","data","appIsrManifest","MockedResponse","resWriter","closeUpgraded","close"],"mappings":"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","ignoreList":[0]}