{"version":3,"sources":["../../../../src/server/dev/on-demand-entry-handler.ts"],"sourcesContent":["import type ws from 'next/dist/compiled/ws'\nimport type { webpack } from 'next/dist/compiled/webpack/webpack'\nimport type { NextConfigComplete } from '../config-shared'\nimport type {\n  DynamicParamTypesShort,\n  FlightRouterState,\n  FlightSegmentPath,\n} from '../../shared/lib/app-router-types'\nimport type { CompilerNameValues } from '../../shared/lib/constants'\nimport type { RouteDefinition } from '../route-definitions/route-definition'\n\nimport createDebug from 'next/dist/compiled/debug'\nimport { EventEmitter } from 'events'\nimport { findPageFile } from '../lib/find-page-file'\nimport { runDependingOnPageType, isDeferredEntry } from '../../build/entries'\nimport { getStaticInfoIncludingLayouts } from '../../build/get-static-info-including-layouts'\nimport { join, posix } from 'path'\nimport { normalizePathSep } from '../../shared/lib/page-path/normalize-path-sep'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\nimport { ensureLeadingSlash } from '../../shared/lib/page-path/ensure-leading-slash'\nimport { removePagePathTail } from '../../shared/lib/page-path/remove-page-path-tail'\nimport { reportTrigger } from '../../build/output'\nimport getRouteFromEntrypoint from '../get-route-from-entrypoint'\nimport {\n  isInstrumentationHookFile,\n  isInstrumentationHookFilename,\n  isMiddlewareFile,\n  isMiddlewareFilename,\n} from '../../build/utils'\nimport { PageNotFoundError, stringifyError } from '../../shared/lib/utils'\nimport {\n  COMPILER_INDEXES,\n  COMPILER_NAMES,\n  RSC_MODULE_TYPES,\n  UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n} from '../../shared/lib/constants'\nimport { PAGE_SEGMENT_KEY } from '../../shared/lib/segment'\nimport {\n  HMR_MESSAGE_SENT_TO_BROWSER,\n  HMR_MESSAGE_SENT_TO_SERVER,\n  type NextJsHotReloaderInterface,\n} from './hot-reloader-types'\nimport { isAppPageRouteDefinition } from '../route-definitions/app-page-route-definition'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport { Batcher } from '../../lib/batcher'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { PAGE_TYPES } from '../../lib/page-types'\nimport { getNextFlightSegmentPath } from '../../client/flight-data-helpers'\nimport { handleErrorStateResponse } from '../mcp/tools/get-errors'\nimport { handlePageMetadataResponse } from '../mcp/tools/get-page-metadata'\n\nconst debug = createDebug('next:on-demand-entry-handler')\n\n/**\n * Returns object keys with type inferred from the object key\n */\nconst keys = Object.keys as <T>(o: T) => Extract<keyof T, string>[]\n\nconst COMPILER_KEYS = keys(COMPILER_INDEXES)\n\nfunction treePathToEntrypoint(\n  segmentPath: FlightSegmentPath,\n  parentPath?: string\n): string {\n  const [parallelRouteKey, segment] = segmentPath\n\n  // TODO-APP: modify this path to cover parallelRouteKey convention\n  const path =\n    (parentPath ? parentPath + '/' : '') +\n    (parallelRouteKey !== 'children' && !segment.startsWith('@')\n      ? `@${parallelRouteKey}/`\n      : '') +\n    (segment === '' ? 'page' : segment)\n\n  // Last segment\n  if (segmentPath.length === 2) {\n    return path\n  }\n\n  const childSegmentPath = getNextFlightSegmentPath(segmentPath)\n  return treePathToEntrypoint(childSegmentPath, path)\n}\n\nfunction convertDynamicParamTypeToSyntax(\n  dynamicParamTypeShort: DynamicParamTypesShort,\n  param: string\n) {\n  switch (dynamicParamTypeShort) {\n    case 'c':\n    case 'ci(..)(..)':\n    case 'ci(.)':\n    case 'ci(..)':\n    case 'ci(...)':\n      return `[...${param}]`\n    case 'oc':\n      return `[[...${param}]]`\n    case 'd':\n    case 'di(..)(..)':\n    case 'di(.)':\n    case 'di(..)':\n    case 'di(...)':\n      return `[${param}]`\n    default:\n      throw new Error('Unknown dynamic param type')\n  }\n}\n\n/**\n * format: {compiler type}@{page type}@{page path}\n * e.g. client@pages@/index\n * e.g. server@app@app/page\n *\n * This guarantees the uniqueness for each page, to avoid conflicts between app/ and pages/\n */\n\nexport function getEntryKey(\n  compilerType: CompilerNameValues,\n  pageBundleType: PAGE_TYPES,\n  page: string\n) {\n  // TODO: handle the /children slot better\n  // this is a quick hack to handle when children is provided as children/page instead of /page\n  const pageKey = page.replace(/(@[^/]+)\\/children/g, '$1')\n  return `${compilerType}@${pageBundleType}@${pageKey}`\n}\n\nfunction getPageBundleType(pageBundlePath: string): PAGE_TYPES {\n  // Handle special case for /_error\n  if (pageBundlePath === '/_error') return PAGE_TYPES.PAGES\n  if (isMiddlewareFilename(pageBundlePath)) return PAGE_TYPES.ROOT\n  return pageBundlePath.startsWith('pages/')\n    ? PAGE_TYPES.PAGES\n    : pageBundlePath.startsWith('app/')\n      ? PAGE_TYPES.APP\n      : PAGE_TYPES.ROOT\n}\n\nfunction getEntrypointsFromTree(\n  tree: FlightRouterState,\n  isFirst: boolean,\n  parentPath: string[] = []\n) {\n  const [segment, parallelRoutes] = tree\n\n  const currentSegment = Array.isArray(segment)\n    ? convertDynamicParamTypeToSyntax(segment[2], segment[0])\n    : segment\n\n  const isPageSegment = currentSegment.startsWith(PAGE_SEGMENT_KEY)\n\n  const currentPath = [...parentPath, isPageSegment ? '' : currentSegment]\n\n  if (!isFirst && isPageSegment) {\n    // TODO get rid of '' at the start of tree\n    return [treePathToEntrypoint(currentPath.slice(1))]\n  }\n\n  return Object.keys(parallelRoutes).reduce(\n    (paths: string[], key: string): string[] => {\n      const childTree = parallelRoutes[key]\n      const childPages = getEntrypointsFromTree(childTree, false, [\n        ...currentPath,\n        key,\n      ])\n      return [...paths, ...childPages]\n    },\n    []\n  )\n}\n\nexport const ADDED = Symbol('added')\nexport const BUILDING = Symbol('building')\nexport const BUILT = Symbol('built')\n\ninterface EntryType {\n  /**\n   * Tells if a page is scheduled to be disposed.\n   */\n  dispose?: boolean\n  /**\n   * Timestamp with the last time the page was active.\n   */\n  lastActiveTime?: number\n  /**\n   * Page build status.\n   */\n  status?: typeof ADDED | typeof BUILDING | typeof BUILT\n\n  /**\n   * Path to the page file relative to the dist folder with no extension.\n   * For example: `pages/about/index`\n   */\n  bundlePath: string\n\n  /**\n   * Webpack request to create a dependency for.\n   */\n  request: string\n}\n\n// Shadowing check in ESLint does not account for enum\nexport const enum EntryTypes {\n  ENTRY,\n  CHILD_ENTRY,\n}\ninterface Entry extends EntryType {\n  type: EntryTypes.ENTRY\n  /**\n   * The absolute page to the page file. Used for detecting if the file was removed. For example:\n   * `/Users/Rick/project/pages/about/index.js`\n   */\n  absolutePagePath: string\n  /**\n   * All parallel pages that match the same entry, for example:\n   * ['/parallel/@bar/nested/@a/page', '/parallel/@bar/nested/@b/page', '/parallel/@foo/nested/@a/page', '/parallel/@foo/nested/@b/page']\n   */\n  appPaths: ReadonlyArray<string> | null\n}\n\ninterface ChildEntry extends EntryType {\n  type: EntryTypes.CHILD_ENTRY\n  /**\n   * Which parent entries use this childEntry.\n   */\n  parentEntries: Set<string>\n  /**\n   * The absolute page to the entry file. Used for detecting if the file was removed. For example:\n   * `/Users/Rick/project/app/about/layout.js`\n   */\n  absoluteEntryFilePath?: string\n}\n\nconst entriesMap: Map<\n  string,\n  {\n    /**\n     * The key composed of the compiler name and the page. For example:\n     * `edge-server/about`\n     */\n    [entryName: string]: Entry | ChildEntry\n  }\n> = new Map()\n\n// remove /server from end of output for server compiler\nconst normalizeOutputPath = (dir: string) => dir.replace(/[/\\\\]server$/, '')\n\nexport const getEntries = (\n  dir: string\n): NonNullable<ReturnType<(typeof entriesMap)['get']>> => {\n  dir = normalizeOutputPath(dir)\n  const entries = entriesMap.get(dir) || {}\n  entriesMap.set(dir, entries)\n  return entries\n}\n\nconst invalidators: Map<string, Invalidator> = new Map()\n\nexport const getInvalidator = (dir: string) => {\n  dir = normalizeOutputPath(dir)\n  return invalidators.get(dir)\n}\n\nconst doneCallbacks: EventEmitter = new EventEmitter()\nconst lastClientAccessPages = ['']\nconst lastServerAccessPagesForAppDir = ['']\n\ntype BuildingTracker = Set<CompilerNameValues>\ntype RebuildTracker = Set<CompilerNameValues>\n\n// Make sure only one invalidation happens at a time\n// Otherwise, webpack hash gets changed and it'll force the client to reload.\nclass Invalidator {\n  private multiCompiler: webpack.MultiCompiler\n\n  private building: BuildingTracker = new Set()\n  private rebuildAgain: RebuildTracker = new Set()\n\n  constructor(multiCompiler: webpack.MultiCompiler) {\n    this.multiCompiler = multiCompiler\n  }\n\n  public shouldRebuildAll() {\n    return this.rebuildAgain.size > 0\n  }\n\n  invalidate(compilerKeys: typeof COMPILER_KEYS = COMPILER_KEYS): void {\n    for (const key of compilerKeys) {\n      // If there's a current build is processing, we won't abort it by invalidating.\n      // (If aborted, it'll cause a client side hard reload)\n      // But let it to invalidate just after the completion.\n      // So, it can re-build the queued pages at once.\n\n      if (this.building.has(key)) {\n        this.rebuildAgain.add(key)\n        continue\n      }\n\n      this.building.add(key)\n      this.multiCompiler.compilers[COMPILER_INDEXES[key]].watching?.invalidate()\n    }\n  }\n\n  public startBuilding(compilerKey: keyof typeof COMPILER_INDEXES) {\n    this.building.add(compilerKey)\n  }\n\n  public doneBuilding(compilerKeys: typeof COMPILER_KEYS = []) {\n    const rebuild: typeof COMPILER_KEYS = []\n    for (const key of compilerKeys) {\n      this.building.delete(key)\n\n      if (this.rebuildAgain.has(key)) {\n        rebuild.push(key)\n        this.rebuildAgain.delete(key)\n      }\n    }\n\n    if (rebuild.length > 0) {\n      this.invalidate(rebuild)\n    }\n  }\n\n  public willRebuild(compilerKey: keyof typeof COMPILER_INDEXES) {\n    return this.rebuildAgain.has(compilerKey)\n  }\n}\n\nfunction disposeInactiveEntries(\n  entries: NonNullable<ReturnType<(typeof entriesMap)['get']>>,\n  maxInactiveAge: number\n) {\n  Object.keys(entries).forEach((entryKey) => {\n    const entryData = entries[entryKey]\n    const { lastActiveTime, status, dispose, bundlePath } = entryData\n\n    // TODO-APP: implement disposing of CHILD_ENTRY\n    if (entryData.type === EntryTypes.CHILD_ENTRY) {\n      return\n    }\n\n    // For the root middleware and the instrumentation hook files,\n    // we don't dispose them periodically as it's needed for every request.\n    if (\n      isMiddlewareFilename(bundlePath) ||\n      isInstrumentationHookFilename(bundlePath)\n    ) {\n      return\n    }\n\n    if (dispose)\n      // Skip pages already scheduled for disposing\n      return\n\n    // This means this entry is currently building or just added\n    // We don't need to dispose those entries.\n    if (status !== BUILT) return\n\n    // We should not build the last accessed page even we didn't get any pings\n    // Sometimes, it's possible our XHR ping to wait before completing other requests.\n    // In that case, we should not dispose the current viewing page\n    if (\n      lastClientAccessPages.includes(entryKey) ||\n      lastServerAccessPagesForAppDir.includes(entryKey)\n    )\n      return\n\n    if (lastActiveTime && Date.now() - lastActiveTime > maxInactiveAge) {\n      entries[entryKey].dispose = true\n    }\n  })\n}\n\n// Normalize both app paths and page paths\nfunction tryToNormalizePagePath(page: string) {\n  try {\n    return normalizePagePath(page)\n  } catch (err) {\n    console.error(err)\n    throw new PageNotFoundError(page)\n  }\n}\n\ninterface PagePathData {\n  filename: string\n  bundlePath: string\n  page: string\n}\n\n/**\n * Attempts to find a page file path from the given pages absolute directory,\n * a page and allowed extensions. If the page can't be found it will throw an\n * error. It defaults the `/_error` page to Next.js internal error page.\n *\n * @param rootDir Absolute path to the project root.\n * @param page The page normalized (it will be denormalized).\n * @param extensions Array of page extensions.\n * @param pagesDir Absolute path to the pages folder with trailing `/pages`.\n * @param appDir Absolute path to the app folder with trailing `/app`.\n */\nexport async function findPagePathData(\n  rootDir: string,\n  page: string,\n  extensions: string[],\n  pagesDir: string | undefined,\n  appDir: string | undefined,\n  isGlobalNotFoundEnabled: boolean\n): Promise<PagePathData> {\n  const normalizedPagePath = tryToNormalizePagePath(page)\n  let pagePath: string | null = null\n\n  const isInstrumentation = isInstrumentationHookFile(normalizedPagePath)\n  if (isMiddlewareFile(normalizedPagePath) || isInstrumentation) {\n    pagePath = await findPageFile(\n      rootDir,\n      normalizedPagePath,\n      extensions,\n      false\n    )\n\n    if (!pagePath) {\n      throw new PageNotFoundError(normalizedPagePath)\n    }\n\n    const pageUrl = ensureLeadingSlash(\n      removePagePathTail(normalizePathSep(pagePath), {\n        extensions,\n      })\n    )\n\n    let bundlePath = normalizedPagePath\n    let pageKey = posix.normalize(pageUrl)\n\n    if (isInstrumentation || isMiddlewareFile(normalizedPagePath)) {\n      bundlePath = bundlePath.replace('/src', '')\n      pageKey = page.replace('/src', '')\n    }\n\n    return {\n      filename: join(rootDir, pagePath),\n      bundlePath: bundlePath.slice(1),\n      page: pageKey,\n    }\n  }\n\n  // Check appDir first falling back to pagesDir\n  if (appDir) {\n    if (page === UNDERSCORE_NOT_FOUND_ROUTE_ENTRY) {\n      // Load `global-not-found` when global-not-found is enabled.\n      // Prefer to load it when both `global-not-found` and root `not-found` present.\n      if (isGlobalNotFoundEnabled) {\n        const globalNotFoundPath = await findPageFile(\n          appDir,\n          'global-not-found',\n          extensions,\n          true\n        )\n        if (globalNotFoundPath) {\n          return {\n            filename: join(appDir, globalNotFoundPath),\n            bundlePath: `app${UNDERSCORE_NOT_FOUND_ROUTE_ENTRY}`,\n            page: UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n          }\n        }\n      } else {\n        // Then if global-not-found.js doesn't exist then load not-found.js\n        const notFoundPath = await findPageFile(\n          appDir,\n          'not-found',\n          extensions,\n          true\n        )\n        if (notFoundPath) {\n          return {\n            filename: join(appDir, notFoundPath),\n            bundlePath: `app${UNDERSCORE_NOT_FOUND_ROUTE_ENTRY}`,\n            page: UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n          }\n        }\n      }\n\n      // If they're not presented, then fallback to global-not-found\n      return {\n        filename: require.resolve(\n          'next/dist/client/components/builtin/global-not-found'\n        ),\n        bundlePath: `app${UNDERSCORE_NOT_FOUND_ROUTE_ENTRY}`,\n        page: UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n      }\n    }\n    pagePath = await findPageFile(appDir, normalizedPagePath, extensions, true)\n    if (pagePath) {\n      const pageUrl = ensureLeadingSlash(\n        removePagePathTail(normalizePathSep(pagePath), {\n          keepIndex: true,\n          extensions,\n        })\n      )\n\n      return {\n        filename: join(appDir, pagePath),\n        bundlePath: posix.join('app', pageUrl),\n        page: posix.normalize(pageUrl),\n      }\n    }\n  }\n\n  if (!pagePath && pagesDir) {\n    pagePath = await findPageFile(\n      pagesDir,\n      normalizedPagePath,\n      extensions,\n      false\n    )\n  }\n\n  if (pagePath !== null && pagesDir) {\n    const pageUrl = ensureLeadingSlash(\n      removePagePathTail(normalizePathSep(pagePath), {\n        extensions,\n      })\n    )\n\n    return {\n      filename: join(pagesDir, pagePath),\n      bundlePath: posix.join('pages', normalizePagePath(pageUrl)),\n      page: posix.normalize(pageUrl),\n    }\n  }\n\n  if (page === '/_error') {\n    return {\n      filename: require.resolve('next/dist/pages/_error'),\n      bundlePath: page,\n      page: normalizePathSep(page),\n    }\n  } else {\n    throw new PageNotFoundError(normalizedPagePath)\n  }\n}\n\nexport function onDemandEntryHandler({\n  hotReloader,\n  maxInactiveAge,\n  multiCompiler,\n  nextConfig,\n  pagesBufferLength,\n  pagesDir,\n  rootDir,\n  appDir,\n}: {\n  hotReloader: NextJsHotReloaderInterface\n  maxInactiveAge: number\n  multiCompiler: webpack.MultiCompiler\n  nextConfig: NextConfigComplete\n  pagesBufferLength: number\n  pagesDir?: string\n  rootDir: string\n  appDir?: string\n}) {\n  const hasAppDir = !!appDir\n  let curInvalidator: Invalidator = getInvalidator(\n    multiCompiler.outputPath\n  ) as any\n  const curEntries = getEntries(multiCompiler.outputPath) as any\n\n  if (!curInvalidator) {\n    curInvalidator = new Invalidator(multiCompiler)\n    invalidators.set(multiCompiler.outputPath, curInvalidator)\n  }\n\n  // Deferred entries state management\n  const deferredEntriesConfig = nextConfig.experimental.deferredEntries\n  const hasDeferredEntriesConfig =\n    deferredEntriesConfig && deferredEntriesConfig.length > 0\n  let onBeforeDeferredEntriesCalled = false\n  let onBeforeDeferredEntriesPromise: Promise<void> | null = null\n\n  // Function to wait for all non-deferred entries to be built\n  async function waitForNonDeferredEntries(): Promise<void> {\n    return new Promise<void>((resolve) => {\n      const checkEntries = () => {\n        // Check if there are any non-deferred entries that are still building or added\n        const hasNonDeferredEntriesBuilding = Object.entries(curEntries).some(\n          ([, entry]) => {\n            const entryData = entry as Entry | ChildEntry\n            if (entryData.type !== EntryTypes.ENTRY) return false\n\n            const isDeferred = isDeferredEntry(\n              (entryData as Entry).absolutePagePath\n                .replace(appDir || '', '')\n                .replace(pagesDir || '', '')\n                .replace(rootDir, ''),\n              deferredEntriesConfig\n            )\n\n            return (\n              !isDeferred &&\n              (entryData.status === ADDED || entryData.status === BUILDING)\n            )\n          }\n        )\n\n        if (!hasNonDeferredEntriesBuilding) {\n          resolve()\n        } else {\n          // Check again after a short delay\n          setTimeout(checkEntries, 100)\n        }\n      }\n\n      checkEntries()\n    })\n  }\n\n  // Function to handle deferred entry processing\n  async function processDeferredEntry(): Promise<void> {\n    if (!hasDeferredEntriesConfig) return\n\n    // Wait for all non-deferred entries to be built\n    await waitForNonDeferredEntries()\n\n    // Call the onBeforeDeferredEntries callback once\n    if (!onBeforeDeferredEntriesCalled) {\n      onBeforeDeferredEntriesCalled = true\n\n      if (nextConfig.experimental.onBeforeDeferredEntries) {\n        debug('calling onBeforeDeferredEntries callback')\n        if (!onBeforeDeferredEntriesPromise) {\n          onBeforeDeferredEntriesPromise =\n            nextConfig.experimental.onBeforeDeferredEntries()\n        }\n        await onBeforeDeferredEntriesPromise\n        debug('onBeforeDeferredEntries callback completed')\n      }\n    } else if (onBeforeDeferredEntriesPromise) {\n      // Wait for any in-progress callback\n      await onBeforeDeferredEntriesPromise\n    }\n  }\n\n  const startBuilding = (compilation: webpack.Compilation) => {\n    const compilationName = compilation.name as any as CompilerNameValues\n    curInvalidator.startBuilding(compilationName)\n    // Reset deferred entries state for this compilation cycle\n    // This ensures onBeforeDeferredEntries will be called again during HMR\n    onBeforeDeferredEntriesCalled = false\n    onBeforeDeferredEntriesPromise = null\n  }\n  for (const compiler of multiCompiler.compilers) {\n    compiler.hooks.make.tap('NextJsOnDemandEntries', startBuilding)\n  }\n\n  function getPagePathsFromEntrypoints(\n    type: CompilerNameValues,\n    entrypoints: Map<string, { name?: string | null }>\n  ) {\n    const pagePaths: string[] = []\n    for (const entrypoint of entrypoints.values()) {\n      const page = getRouteFromEntrypoint(entrypoint.name!, hasAppDir)\n\n      if (page) {\n        const pageBundleType = entrypoint.name?.startsWith('app/')\n          ? PAGE_TYPES.APP\n          : PAGE_TYPES.PAGES\n        pagePaths.push(getEntryKey(type, pageBundleType, page))\n      } else if (\n        isMiddlewareFilename(entrypoint.name) ||\n        isInstrumentationHookFilename(entrypoint.name)\n      ) {\n        pagePaths.push(\n          getEntryKey(type, PAGE_TYPES.ROOT, `/${entrypoint.name}`)\n        )\n      }\n    }\n    return pagePaths\n  }\n\n  for (const compiler of multiCompiler.compilers) {\n    compiler.hooks.done.tap('NextJsOnDemandEntries', () =>\n      getInvalidator(compiler.outputPath)?.doneBuilding([\n        compiler.name as keyof typeof COMPILER_INDEXES,\n      ])\n    )\n  }\n\n  multiCompiler.hooks.done.tap('NextJsOnDemandEntries', (multiStats) => {\n    const [clientStats, serverStats, edgeServerStats] = multiStats.stats\n    const entryNames = [\n      ...getPagePathsFromEntrypoints(\n        COMPILER_NAMES.client,\n        clientStats.compilation.entrypoints\n      ),\n      ...getPagePathsFromEntrypoints(\n        COMPILER_NAMES.server,\n        serverStats.compilation.entrypoints\n      ),\n      ...(edgeServerStats\n        ? getPagePathsFromEntrypoints(\n            COMPILER_NAMES.edgeServer,\n            edgeServerStats.compilation.entrypoints\n          )\n        : []),\n    ]\n\n    for (const name of entryNames) {\n      const entry = curEntries[name]\n      if (!entry) {\n        continue\n      }\n\n      if (entry.status !== BUILDING) {\n        continue\n      }\n\n      entry.status = BUILT\n      doneCallbacks.emit(name)\n    }\n\n    getInvalidator(multiCompiler.outputPath)?.doneBuilding([...COMPILER_KEYS])\n\n    // Call onBeforeDeferredEntries after compilation completes during HMR\n    // This ensures the callback is invoked even when non-deferred entries change\n    if (hasDeferredEntriesConfig && !onBeforeDeferredEntriesCalled) {\n      onBeforeDeferredEntriesCalled = true\n      if (nextConfig.experimental.onBeforeDeferredEntries) {\n        debug('calling onBeforeDeferredEntries callback after HMR')\n        onBeforeDeferredEntriesPromise =\n          nextConfig.experimental.onBeforeDeferredEntries()\n      }\n    }\n  })\n\n  const pingIntervalTime = Math.max(1000, Math.min(5000, maxInactiveAge))\n\n  setInterval(function () {\n    disposeInactiveEntries(curEntries, maxInactiveAge)\n  }, pingIntervalTime + 1000).unref()\n\n  function handleAppDirPing(tree: FlightRouterState): void {\n    const pages = getEntrypointsFromTree(tree, true)\n\n    for (const page of pages) {\n      for (const compilerType of [\n        COMPILER_NAMES.client,\n        COMPILER_NAMES.server,\n        COMPILER_NAMES.edgeServer,\n      ]) {\n        const entryKey = getEntryKey(compilerType, PAGE_TYPES.APP, `/${page}`)\n        const entryInfo = curEntries[entryKey]\n\n        // If there's no entry, it may have been invalidated and needs to be re-built.\n        if (!entryInfo) {\n          // if (page !== lastEntry) client pings, but there's no entry for page\n          continue\n        }\n\n        // We don't need to maintain active state of anything other than BUILT entries\n        if (entryInfo.status !== BUILT) continue\n\n        // If there's an entryInfo\n        if (!lastServerAccessPagesForAppDir.includes(entryKey)) {\n          lastServerAccessPagesForAppDir.unshift(entryKey)\n\n          // Maintain the buffer max length\n          // TODO: verify that the current pageKey is not at the end of the array as multiple entrypoints can exist\n          if (lastServerAccessPagesForAppDir.length > pagesBufferLength) {\n            lastServerAccessPagesForAppDir.pop()\n          }\n        }\n        entryInfo.lastActiveTime = Date.now()\n        entryInfo.dispose = false\n      }\n    }\n  }\n\n  function handlePing(pg: string): void {\n    const page = normalizePathSep(pg)\n    for (const compilerType of [\n      COMPILER_NAMES.client,\n      COMPILER_NAMES.server,\n      COMPILER_NAMES.edgeServer,\n    ]) {\n      const entryKey = getEntryKey(compilerType, PAGE_TYPES.PAGES, page)\n      const entryInfo = curEntries[entryKey]\n\n      // If there's no entry, it may have been invalidated and needs to be re-built.\n      if (!entryInfo) {\n        // if (page !== lastEntry) client pings, but there's no entry for page\n        if (compilerType === COMPILER_NAMES.client) {\n          return\n        }\n        continue\n      }\n\n      // We don't need to maintain active state of anything other than BUILT entries\n      if (entryInfo.status !== BUILT) continue\n\n      // If there's an entryInfo\n      if (!lastClientAccessPages.includes(entryKey)) {\n        lastClientAccessPages.unshift(entryKey)\n\n        // Maintain the buffer max length\n        if (lastClientAccessPages.length > pagesBufferLength) {\n          lastClientAccessPages.pop()\n        }\n      }\n      entryInfo.lastActiveTime = Date.now()\n      entryInfo.dispose = false\n    }\n    return\n  }\n\n  async function ensurePageImpl({\n    page,\n    appPaths,\n    definition,\n    isApp,\n    url,\n  }: {\n    page: string\n    appPaths: ReadonlyArray<string> | null\n    definition: RouteDefinition | undefined\n    isApp: boolean | undefined\n    url?: string\n  }): Promise<void> {\n    const stalledTime = 60\n    const stalledEnsureTimeout = setTimeout(() => {\n      debug(\n        `Ensuring ${page} has taken longer than ${stalledTime}s, if this continues to stall this may be a bug`\n      )\n    }, stalledTime * 1000)\n\n    try {\n      let route: Pick<RouteDefinition, 'filename' | 'bundlePath' | 'page'>\n      if (definition) {\n        route = definition\n      } else {\n        route = await findPagePathData(\n          rootDir,\n          page,\n          nextConfig.pageExtensions,\n          pagesDir,\n          appDir,\n          !!nextConfig.experimental.globalNotFound\n        )\n      }\n\n      const isInsideAppDir = !!appDir && route.filename.startsWith(appDir)\n\n      // Check if this is a deferred entry and wait for non-deferred entries first\n      if (hasDeferredEntriesConfig) {\n        const isDeferred = isDeferredEntry(route.page, deferredEntriesConfig)\n        if (isDeferred) {\n          debug(`Page ${page} is a deferred entry, waiting for other entries`)\n          await processDeferredEntry()\n          debug(`Deferred entry ${page} can now be processed`)\n        }\n      }\n\n      if (typeof isApp === 'boolean' && isApp !== isInsideAppDir) {\n        Error.stackTraceLimit = 15\n        throw new Error(\n          `Ensure bailed, found path \"${\n            route.page\n          }\" does not match ensure type (${isApp ? 'app' : 'pages'})`\n        )\n      }\n\n      const pageBundleType = getPageBundleType(route.bundlePath)\n      const addEntry = (\n        compilerType: CompilerNameValues\n      ): {\n        entryKey: string\n        newEntry: boolean\n        shouldInvalidate: boolean\n      } => {\n        const entryKey = getEntryKey(compilerType, pageBundleType, route.page)\n        if (\n          curEntries[entryKey] &&\n          // there can be an overlap in the entryKey for the instrumentation hook file and a page named the same\n          // this is a quick fix to support this scenario by overwriting the instrumentation hook entry, since we only use it one time\n          // any changes to the instrumentation hook file will require a restart of the dev server anyway\n          !isInstrumentationHookFilename(curEntries[entryKey].bundlePath)\n        ) {\n          curEntries[entryKey].dispose = false\n          curEntries[entryKey].lastActiveTime = Date.now()\n          if (curEntries[entryKey].status === BUILT) {\n            return {\n              entryKey,\n              newEntry: false,\n              shouldInvalidate: false,\n            }\n          }\n\n          return {\n            entryKey,\n            newEntry: false,\n            shouldInvalidate: true,\n          }\n        }\n\n        curEntries[entryKey] = {\n          type: EntryTypes.ENTRY,\n          appPaths,\n          absolutePagePath: route.filename,\n          request: route.filename,\n          bundlePath: route.bundlePath,\n          dispose: false,\n          lastActiveTime: Date.now(),\n          status: ADDED,\n        }\n        return {\n          entryKey: entryKey,\n          newEntry: true,\n          shouldInvalidate: true,\n        }\n      }\n\n      const staticInfo = await getStaticInfoIncludingLayouts({\n        page,\n        pageFilePath: route.filename,\n        isInsideAppDir,\n        pageExtensions: nextConfig.pageExtensions,\n        isDev: true,\n        config: nextConfig,\n        appDir,\n      })\n\n      const added = new Map<CompilerNameValues, ReturnType<typeof addEntry>>()\n      const isServerComponent =\n        isInsideAppDir && staticInfo.rsc !== RSC_MODULE_TYPES.client\n\n      let pageRuntime = staticInfo.runtime\n\n      runDependingOnPageType({\n        page: route.page,\n        pageRuntime,\n        pageType: pageBundleType,\n        onClient: () => {\n          // Skip adding the client entry for app / Server Components.\n          if (isServerComponent || isInsideAppDir) {\n            return\n          }\n          added.set(COMPILER_NAMES.client, addEntry(COMPILER_NAMES.client))\n        },\n        onServer: () => {\n          added.set(COMPILER_NAMES.server, addEntry(COMPILER_NAMES.server))\n          const edgeServerEntry = getEntryKey(\n            COMPILER_NAMES.edgeServer,\n            pageBundleType,\n            route.page\n          )\n          if (\n            curEntries[edgeServerEntry] &&\n            !isInstrumentationHookFile(route.page)\n          ) {\n            // Runtime switched from edge to server\n            delete curEntries[edgeServerEntry]\n          }\n        },\n        onEdgeServer: () => {\n          added.set(\n            COMPILER_NAMES.edgeServer,\n            addEntry(COMPILER_NAMES.edgeServer)\n          )\n          const serverEntry = getEntryKey(\n            COMPILER_NAMES.server,\n            pageBundleType,\n            route.page\n          )\n          if (\n            curEntries[serverEntry] &&\n            !isInstrumentationHookFile(route.page)\n          ) {\n            // Runtime switched from server to edge\n            delete curEntries[serverEntry]\n          }\n        },\n      })\n\n      const addedValues = [...added.values()]\n      const entriesThatShouldBeInvalidated = [...added.entries()].filter(\n        ([, entry]) => entry.shouldInvalidate\n      )\n      const hasNewEntry = addedValues.some((entry) => entry.newEntry)\n\n      if (hasNewEntry) {\n        const routePage = isApp ? route.page : normalizeAppPath(route.page)\n        // If proxy file, remove the leading slash from \"/proxy\" to \"proxy\".\n        reportTrigger(\n          isMiddlewareFile(routePage) ? routePage.slice(1) : routePage,\n          url\n        )\n      }\n\n      if (entriesThatShouldBeInvalidated.length > 0) {\n        const invalidatePromise = Promise.all(\n          entriesThatShouldBeInvalidated.map(([compilerKey, { entryKey }]) => {\n            return new Promise<void>((resolve, reject) => {\n              doneCallbacks.once(entryKey, (err: Error) => {\n                if (err) {\n                  return reject(err)\n                }\n\n                // If the invalidation also triggers a rebuild, we need to\n                // wait for that additional build to prevent race conditions.\n                const needsRebuild = curInvalidator.willRebuild(compilerKey)\n                if (needsRebuild) {\n                  doneCallbacks.once(entryKey, (rebuildErr: Error) => {\n                    if (rebuildErr) {\n                      return reject(rebuildErr)\n                    }\n                    resolve()\n                  })\n                } else {\n                  resolve()\n                }\n              })\n            })\n          })\n        )\n\n        curInvalidator.invalidate([...added.keys()])\n        await invalidatePromise\n      }\n    } finally {\n      clearTimeout(stalledEnsureTimeout)\n    }\n  }\n\n  type EnsurePageOptions = {\n    page: string\n    appPaths?: ReadonlyArray<string> | null\n    definition?: RouteDefinition\n    isApp?: boolean\n    url?: string\n  }\n\n  // Make sure that we won't have multiple invalidations ongoing concurrently.\n  const batcher = Batcher.create<EnsurePageOptions, void, string>({\n    // The cache key here is composed of the elements that affect the\n    // compilation, namely, the page, whether it's client only, and whether\n    // it's an app page. This ensures that we don't have multiple compilations\n    // for the same page happening concurrently.\n    //\n    // We don't include the whole match because it contains match specific\n    // parameters (like route params) that would just bust this cache. Any\n    // details that would possibly bust the cache should be listed here.\n    cacheKeyFn: (options) => JSON.stringify(options),\n    // Schedule the invocation of the ensurePageImpl function on the next tick.\n    schedulerFn: scheduleOnNextTick,\n  })\n\n  return {\n    async ensurePage({\n      page,\n      appPaths = null,\n      definition,\n      isApp,\n      url,\n    }: EnsurePageOptions) {\n      // If the route is actually an app page route, then we should have access\n      // to the app route definition, and therefore, the appPaths from it.\n      if (!appPaths && definition && isAppPageRouteDefinition(definition)) {\n        appPaths = definition.appPaths\n      }\n\n      // Wrap the invocation of the ensurePageImpl function in the pending\n      // wrapper, which will ensure that we don't have multiple compilations\n      // for the same page happening concurrently.\n      return batcher.batch({ page, appPaths, definition, isApp }, async () => {\n        await ensurePageImpl({\n          page,\n          appPaths,\n          definition,\n          isApp,\n          url,\n        })\n      })\n    },\n    onHMR(client: ws, getHmrServerError: () => Error | null) {\n      let bufferedHmrServerError: Error | null = null\n\n      client.addEventListener('close', () => {\n        bufferedHmrServerError = null\n      })\n      client.addEventListener('message', ({ data }) => {\n        try {\n          const error = getHmrServerError()\n\n          // New error occurred: buffered error is flushed and new error occurred\n          if (!bufferedHmrServerError && error) {\n            hotReloader.send({\n              type: HMR_MESSAGE_SENT_TO_BROWSER.SERVER_ERROR,\n              errorJSON: stringifyError(error),\n            })\n            bufferedHmrServerError = null\n          }\n\n          const parsedData = JSON.parse(\n            typeof data !== 'string' ? data.toString() : data\n          )\n\n          if (parsedData.event === HMR_MESSAGE_SENT_TO_SERVER.PING) {\n            if (parsedData.appDirRoute) {\n              handleAppDirPing(parsedData.tree)\n            } else {\n              handlePing(parsedData.page)\n            }\n          } else if (\n            parsedData.event ===\n            HMR_MESSAGE_SENT_TO_SERVER.MCP_ERROR_STATE_RESPONSE\n          ) {\n            handleErrorStateResponse(\n              parsedData.requestId,\n              parsedData.errorState,\n              parsedData.url\n            )\n          } else if (\n            parsedData.event ===\n            HMR_MESSAGE_SENT_TO_SERVER.MCP_PAGE_METADATA_RESPONSE\n          ) {\n            handlePageMetadataResponse(\n              parsedData.requestId,\n              parsedData.segmentTrieData,\n              parsedData.url\n            )\n          }\n        } catch {}\n      })\n    },\n  }\n}\n"],"names":["createDebug","EventEmitter","findPageFile","runDependingOnPageType","isDeferredEntry","getStaticInfoIncludingLayouts","join","posix","normalizePathSep","normalizePagePath","ensureLeadingSlash","removePagePathTail","reportTrigger","getRouteFromEntrypoint","isInstrumentationHookFile","isInstrumentationHookFilename","isMiddlewareFile","isMiddlewareFilename","PageNotFoundError","stringifyError","COMPILER_INDEXES","COMPILER_NAMES","RSC_MODULE_TYPES","UNDERSCORE_NOT_FOUND_ROUTE_ENTRY","PAGE_SEGMENT_KEY","HMR_MESSAGE_SENT_TO_BROWSER","HMR_MESSAGE_SENT_TO_SERVER","isAppPageRouteDefinition","scheduleOnNextTick","Batcher","normalizeAppPath","PAGE_TYPES","getNextFlightSegmentPath","handleErrorStateResponse","handlePageMetadataResponse","debug","keys","Object","COMPILER_KEYS","treePathToEntrypoint","segmentPath","parentPath","parallelRouteKey","segment","path","startsWith","length","childSegmentPath","convertDynamicParamTypeToSyntax","dynamicParamTypeShort","param","Error","getEntryKey","compilerType","pageBundleType","page","pageKey","replace","getPageBundleType","pageBundlePath","PAGES","ROOT","APP","getEntrypointsFromTree","tree","isFirst","parallelRoutes","currentSegment","Array","isArray","isPageSegment","currentPath","slice","reduce","paths","key","childTree","childPages","ADDED","Symbol","BUILDING","BUILT","EntryTypes","entriesMap","Map","normalizeOutputPath","dir","getEntries","entries","get","set","invalidators","getInvalidator","doneCallbacks","lastClientAccessPages","lastServerAccessPagesForAppDir","Invalidator","constructor","multiCompiler","building","Set","rebuildAgain","shouldRebuildAll","size","invalidate","compilerKeys","has","add","compilers","watching","startBuilding","compilerKey","doneBuilding","rebuild","delete","push","willRebuild","disposeInactiveEntries","maxInactiveAge","forEach","entryKey","entryData","lastActiveTime","status","dispose","bundlePath","type","includes","Date","now","tryToNormalizePagePath","err","console","error","findPagePathData","rootDir","extensions","pagesDir","appDir","isGlobalNotFoundEnabled","normalizedPagePath","pagePath","isInstrumentation","pageUrl","normalize","filename","globalNotFoundPath","notFoundPath","require","resolve","keepIndex","onDemandEntryHandler","hotReloader","nextConfig","pagesBufferLength","hasAppDir","curInvalidator","outputPath","curEntries","deferredEntriesConfig","experimental","deferredEntries","hasDeferredEntriesConfig","onBeforeDeferredEntriesCalled","onBeforeDeferredEntriesPromise","waitForNonDeferredEntries","Promise","checkEntries","hasNonDeferredEntriesBuilding","some","entry","isDeferred","absolutePagePath","setTimeout","processDeferredEntry","onBeforeDeferredEntries","compilation","compilationName","name","compiler","hooks","make","tap","getPagePathsFromEntrypoints","entrypoints","pagePaths","entrypoint","values","done","multiStats","clientStats","serverStats","edgeServerStats","stats","entryNames","client","server","edgeServer","emit","pingIntervalTime","Math","max","min","setInterval","unref","handleAppDirPing","pages","entryInfo","unshift","pop","handlePing","pg","ensurePageImpl","appPaths","definition","isApp","url","stalledTime","stalledEnsureTimeout","route","pageExtensions","globalNotFound","isInsideAppDir","stackTraceLimit","addEntry","newEntry","shouldInvalidate","request","staticInfo","pageFilePath","isDev","config","added","isServerComponent","rsc","pageRuntime","runtime","pageType","onClient","onServer","edgeServerEntry","onEdgeServer","serverEntry","addedValues","entriesThatShouldBeInvalidated","filter","hasNewEntry","routePage","invalidatePromise","all","map","reject","once","needsRebuild","rebuildErr","clearTimeout","batcher","create","cacheKeyFn","options","JSON","stringify","schedulerFn","ensurePage","batch","onHMR","getHmrServerError","bufferedHmrServerError","addEventListener","data","send","SERVER_ERROR","errorJSON","parsedData","parse","toString","event","PING","appDirRoute","MCP_ERROR_STATE_RESPONSE","requestId","errorState","MCP_PAGE_METADATA_RESPONSE","segmentTrieData"],"mappings":"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","ignoreList":[0]}