{"version":3,"sources":["../../../src/server/lib/render-server.ts"],"sourcesContent":["import type { NextServer, RequestHandler, UpgradeHandler } from '../next'\nimport type { DevBundlerService } from './dev-bundler-service'\nimport type { PropagateToWorkersField } from './router-utils/types'\n\nimport next from '../next'\nimport type { Span } from '../../trace'\nimport type { ServerResponse } from 'http'\nimport type { OnCacheEntryHandler } from '../request-meta'\nimport { interopDefault } from '../../lib/interop-default'\nimport { formatDynamicImportPath } from '../../lib/format-dynamic-import-path'\nimport type { ConfiguredExperimentalFeature } from '../config'\n\nexport type ServerInitResult = {\n  requestHandler: RequestHandler\n  upgradeHandler: UpgradeHandler\n  server: NextServer\n  // Make an effort to close upgraded HTTP requests (e.g. Turbopack HMR websockets)\n  closeUpgraded: () => void\n  // The distDir from config, used by the parent process for telemetry/trace\n  distDir: string\n  // Experimental features from config, used for logging after server is ready\n  experimentalFeatures: ConfiguredExperimentalFeature[]\n  // Whether cache components is enabled\n  cacheComponents: boolean\n}\n\nlet initializations: Record<string, Promise<ServerInitResult> | undefined> = {}\n\nlet sandboxContext: undefined | typeof import('../web/sandbox/context')\n\nif (process.env.NODE_ENV !== 'production') {\n  sandboxContext =\n    require('../web/sandbox/context') as typeof import('../web/sandbox/context')\n}\n\nexport function clearAllModuleContexts() {\n  return sandboxContext?.clearAllModuleContexts()\n}\n\nexport function clearModuleContext(target: string) {\n  return sandboxContext?.clearModuleContext(target)\n}\n\nexport async function getServerField(\n  dir: string,\n  field: PropagateToWorkersField\n) {\n  const initialization = await initializations[dir]\n  if (!initialization) {\n    throw new Error('Invariant cant propagate server field, no app initialized')\n  }\n  const { server } = initialization\n  let wrappedServer = server['server']! // NextServer.server is private\n  return wrappedServer[field as keyof typeof wrappedServer]\n}\n\nexport async function propagateServerField(\n  dir: string,\n  field: PropagateToWorkersField,\n  value: any\n) {\n  const initialization = await initializations[dir]\n  if (!initialization) {\n    throw new Error('Invariant cant propagate server field, no app initialized')\n  }\n  const { server } = initialization\n  let wrappedServer = server['server']\n  const _field = field as keyof NonNullable<typeof wrappedServer>\n\n  if (wrappedServer) {\n    if (typeof wrappedServer[_field] === 'function') {\n      // @ts-expect-error\n      await wrappedServer[_field].apply(\n        wrappedServer,\n        Array.isArray(value) ? value : []\n      )\n    } else {\n      // @ts-expect-error\n      wrappedServer[_field] = value\n    }\n  }\n}\n\nasync function initializeImpl(opts: {\n  dir: string\n  port: number\n  dev: boolean\n  minimalMode?: boolean\n  hostname?: string\n  keepAliveTimeout?: number\n  serverFields?: any\n  server?: any\n  experimentalTestProxy: boolean\n  experimentalHttpsServer: boolean\n  _ipcPort?: string\n  _ipcKey?: string\n  bundlerService: DevBundlerService | undefined\n  startServerSpan: Span | undefined\n  quiet?: boolean\n  onDevServerCleanup: ((listener: () => Promise<void>) => void) | undefined\n  distDir: string\n  experimentalFeatures: ConfiguredExperimentalFeature[]\n  cacheComponents: boolean\n}): Promise<ServerInitResult> {\n  const type = process.env.__NEXT_PRIVATE_RENDER_WORKER\n  if (type) {\n    process.title = 'next-render-worker-' + type\n  }\n\n  let requestHandler: RequestHandler\n  let upgradeHandler: UpgradeHandler\n\n  const server = next({\n    ...opts,\n    hostname: opts.hostname || 'localhost',\n    customServer: false,\n    httpServer: opts.server,\n    port: opts.port,\n  }) as NextServer // should return a NextServer when `customServer: false`\n\n  // If we're in test mode and there's a debug cache entry handler available,\n  // then use it to wrap the request handler instead of using the default one.\n  if (\n    process.env.__NEXT_TEST_MODE &&\n    process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS\n  ) {\n    // This mirrors the sole implementation of this over in:\n    // test/production/standalone-mode/required-server-files/cache-entry-handler.js\n    const createOnCacheEntryHandlers = interopDefault(\n      await import(\n        formatDynamicImportPath(\n          opts.dir,\n          process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS\n        )\n      )\n    ) as (res: ServerResponse) => {\n      // TODO: remove onCacheEntry once onCacheEntryV2 is the default.\n      onCacheEntry: OnCacheEntryHandler\n      onCacheEntryV2: OnCacheEntryHandler\n    }\n\n    // This is not to be used in any environment other than testing, as it is\n    // not memoized and is subject to constant change.\n    requestHandler = async (req, res, parsedUrl) => {\n      // Re re-create the entry handler for each request. This is not\n      // performant, and is only used in testing environments.\n      const {\n        // TODO: remove onCacheEntry once onCacheEntryV2 is the default.\n        onCacheEntry,\n        onCacheEntryV2,\n      } = createOnCacheEntryHandlers(res)\n\n      // Get the request handler, using the entry handler as the metadata each\n      // request.\n      const handler = server.getRequestHandlerWithMetadata({\n        // TODO: remove onCacheEntry once onCacheEntryV2 is the default.\n        onCacheEntry,\n        onCacheEntryV2,\n      })\n\n      return handler(req, res, parsedUrl)\n    }\n\n    upgradeHandler = server.getUpgradeHandler()\n  } else {\n    requestHandler = server.getRequestHandler()\n    upgradeHandler = server.getUpgradeHandler()\n  }\n\n  await server.prepare(opts.serverFields)\n\n  return {\n    requestHandler,\n    upgradeHandler,\n    server,\n    closeUpgraded() {\n      opts.bundlerService?.close()\n    },\n    distDir: opts.distDir,\n    experimentalFeatures: opts.experimentalFeatures,\n    cacheComponents: opts.cacheComponents,\n  }\n}\n\nexport async function initialize(\n  opts: Parameters<typeof initializeImpl>[0]\n): Promise<ServerInitResult> {\n  // if we already setup the server return as we only need to do\n  // this on first worker boot\n  if (initializations[opts.dir]) {\n    return initializations[opts.dir]!\n  }\n  return (initializations[opts.dir] = initializeImpl(opts))\n}\n"],"names":["clearAllModuleContexts","clearModuleContext","getServerField","initialize","propagateServerField","initializations","sandboxContext","process","env","NODE_ENV","require","target","dir","field","initialization","Error","server","wrappedServer","value","_field","apply","Array","isArray","initializeImpl","opts","type","__NEXT_PRIVATE_RENDER_WORKER","title","requestHandler","upgradeHandler","next","hostname","customServer","httpServer","port","__NEXT_TEST_MODE","NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS","createOnCacheEntryHandlers","interopDefault","formatDynamicImportPath","req","res","parsedUrl","onCacheEntry","onCacheEntryV2","handler","getRequestHandlerWithMetadata","getUpgradeHandler","getRequestHandler","prepare","serverFields","closeUpgraded","bundlerService","close","distDir","experimentalFeatures","cacheComponents"],"mappings":"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","ignoreList":[0]}