{"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    // Resolve the effective serverFastRefresh value.\n    // Both default to enabled (true). CLI takes precedence over config.\n    const cliServerFastRefresh = opts.serverFastRefresh\n    const configServerFastRefresh =\n      developmentConfig.experimental?.turbopackServerFastRefresh\n    let effectiveServerFastRefresh: boolean | undefined\n    if (\n      cliServerFastRefresh !== undefined &&\n      configServerFastRefresh !== undefined &&\n      cliServerFastRefresh !== configServerFastRefresh\n    ) {\n      Log.warn(\n        `The CLI flag \"${cliServerFastRefresh === false ? '--no-server-fast-refresh' : '--server-fast-refresh'}\" conflicts with \"experimental.turbopackServerFastRefresh: ${configServerFastRefresh}\" in your Next.js config. The CLI flag will take precedence.`\n      )\n      effectiveServerFastRefresh = cliServerFastRefresh\n    } else {\n      // Default to true when neither CLI nor config specifies a value.\n      effectiveServerFastRefresh =\n        cliServerFastRefresh ?? configServerFastRefresh ?? true\n    }\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: effectiveServerFastRefresh,\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 { finished, matchedOutput, parsedUrl, statusCode } =\n        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 (finished && parsedUrl.protocol) {\n        if (!statusCode) {\n          return await proxyRequest(req, socket, parsedUrl, head)\n        }\n\n        return socket.end()\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","developmentConfig","Telemetry","require","telemetry","distDir","path","join","traceGlobals","set","pagesDir","appDir","findPagesDir","setupDevBundler","resetFetch","NEXT_PATCH_SYMBOL","setupDevBundlerSpan","startServerSpan","traceChild","trace","cliServerFastRefresh","serverFastRefresh","configServerFastRefresh","experimental","turbopackServerFastRefresh","effectiveServerFastRefresh","Log","warn","developmentBundler","traceAsyncFn","nextConfig","isCustomServer","customServer","turbo","TURBOPACK","port","onDevServerCleanup","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","proxyTimeout","fsPath","itemPath","appFiles","has","pageFiles","message","invokeStatus","invokeError","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]}