{"version":3,"sources":["../../../src/build/generate-routes-manifest.ts"],"sourcesContent":["import type { NextConfigComplete } from '../server/config-shared'\nimport type { CustomRoutes } from '../lib/load-custom-routes'\nimport {\n  RSC_HEADER,\n  NEXT_ROUTER_STATE_TREE_HEADER,\n  NEXT_ROUTER_PREFETCH_HEADER,\n  NEXT_DID_POSTPONE_HEADER,\n  RSC_CONTENT_TYPE_HEADER,\n  NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n  NEXT_REWRITTEN_PATH_HEADER,\n  NEXT_REWRITTEN_QUERY_HEADER,\n} from '../client/components/app-router-headers'\nimport {\n  RSC_SUFFIX,\n  RSC_SEGMENT_SUFFIX,\n  RSC_SEGMENTS_DIR_SUFFIX,\n  NEXT_RESUME_HEADER,\n} from '../lib/constants'\nimport { isDynamicRoute } from '../shared/lib/router/utils'\nimport { buildCustomRoute } from '../lib/build-custom-route'\nimport { isReservedPage, pageToRoute } from './utils'\nimport type { DynamicManifestRoute } from './utils'\nimport type { RoutesManifest, ManifestRoute } from './index'\nimport { sortPages } from '../shared/lib/router/utils/sortable-routes'\n\nexport interface GenerateRoutesManifestOptions {\n  pageKeys: {\n    pages: string[]\n    app?: string[]\n  }\n  config: NextConfigComplete\n  redirects: CustomRoutes['redirects']\n  headers: CustomRoutes['headers']\n  onMatchHeaders: CustomRoutes['headers']\n  rewrites: CustomRoutes['rewrites']\n  restrictedRedirectPaths: string[]\n  isAppPPREnabled: boolean\n  appType: 'pages' | 'app' | 'hybrid'\n  deploymentId?: string\n}\n\nexport interface GenerateRoutesManifestResult {\n  routesManifest: RoutesManifest\n  dynamicRoutes: Array<DynamicManifestRoute>\n  sourcePages: Map<string, string>\n}\n\n/**\n * Generates the routes manifest from the given page keys and configuration.\n * This function extracts the route manifest generation logic to be reusable\n * across different build contexts (webpack build, turbopack build, analyze, etc.)\n */\nexport function generateRoutesManifest(\n  options: GenerateRoutesManifestOptions\n): GenerateRoutesManifestResult {\n  const {\n    pageKeys,\n    config,\n    redirects,\n    headers,\n    onMatchHeaders,\n    rewrites,\n    restrictedRedirectPaths,\n    isAppPPREnabled,\n    appType,\n    deploymentId,\n  } = options\n\n  const sortedRoutes = sortPages([...pageKeys.pages, ...(pageKeys.app ?? [])])\n  const staticRoutes: Array<ManifestRoute> = []\n  const dynamicRoutes: Array<DynamicManifestRoute> = []\n\n  /**\n   * A map of all the pages to their sourcePage value. This is only used for\n   * routes that have PPR enabled and clientSegmentEnabled is true.\n   */\n  const sourcePages = new Map<string, string>()\n\n  for (const route of sortedRoutes) {\n    if (isDynamicRoute(route)) {\n      dynamicRoutes.push(\n        pageToRoute(\n          route,\n          // This property is only relevant when PPR is enabled.\n          undefined\n        )\n      )\n    } else if (\n      !isReservedPage(route) ||\n      // don't consider /api reserved here\n      route.match(/^\\/(api(\\/|$))/)\n    ) {\n      staticRoutes.push(pageToRoute(route))\n    }\n  }\n\n  const routesManifest: RoutesManifest = {\n    version: 3,\n    pages404: true,\n    appType,\n    caseSensitive: !!config.experimental.caseSensitiveRoutes,\n    basePath: config.basePath,\n    redirects: redirects.map((r) =>\n      buildCustomRoute('redirect', r, restrictedRedirectPaths)\n    ),\n    headers: headers.map((r) => buildCustomRoute('header', r)),\n    onMatchHeaders: onMatchHeaders.map((r) => buildCustomRoute('header', r)),\n    rewrites: {\n      beforeFiles: rewrites.beforeFiles.map((r) =>\n        buildCustomRoute('rewrite', r)\n      ),\n      afterFiles: rewrites.afterFiles.map((r) =>\n        buildCustomRoute('rewrite', r)\n      ),\n      fallback: rewrites.fallback.map((r) => buildCustomRoute('rewrite', r)),\n    },\n    dynamicRoutes,\n    staticRoutes,\n    dataRoutes: [],\n    i18n: config.i18n || undefined,\n    rsc: {\n      header: RSC_HEADER,\n      // This vary header is used as a default. It is technically re-assigned in `base-server`,\n      // and may include an additional Vary option for `Next-URL`.\n      varyHeader: `${RSC_HEADER}, ${NEXT_ROUTER_STATE_TREE_HEADER}, ${NEXT_ROUTER_PREFETCH_HEADER}, ${NEXT_ROUTER_SEGMENT_PREFETCH_HEADER}`,\n      prefetchHeader: NEXT_ROUTER_PREFETCH_HEADER,\n      didPostponeHeader: NEXT_DID_POSTPONE_HEADER,\n      contentTypeHeader: RSC_CONTENT_TYPE_HEADER,\n      suffix: RSC_SUFFIX,\n      prefetchSegmentHeader: NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n      prefetchSegmentSuffix: RSC_SEGMENT_SUFFIX,\n      prefetchSegmentDirSuffix: RSC_SEGMENTS_DIR_SUFFIX,\n      clientParamParsing: config.cacheComponents ?? false,\n      clientParamParsingOrigins: config.experimental.clientParamParsingOrigins,\n      dynamicRSCPrerender: isAppPPREnabled && config.cacheComponents === true,\n    },\n    rewriteHeaders: {\n      pathHeader: NEXT_REWRITTEN_PATH_HEADER,\n      queryHeader: NEXT_REWRITTEN_QUERY_HEADER,\n    },\n    skipProxyUrlNormalize: config.skipProxyUrlNormalize,\n    deploymentId: deploymentId || undefined,\n    ppr: isAppPPREnabled\n      ? {\n          chain: {\n            headers: {\n              [NEXT_RESUME_HEADER]: '1',\n            },\n          },\n        }\n      : undefined,\n  }\n\n  return {\n    routesManifest,\n    dynamicRoutes,\n    sourcePages,\n  }\n}\n"],"names":["RSC_HEADER","NEXT_ROUTER_STATE_TREE_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_DID_POSTPONE_HEADER","RSC_CONTENT_TYPE_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","RSC_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","NEXT_RESUME_HEADER","isDynamicRoute","buildCustomRoute","isReservedPage","pageToRoute","sortPages","generateRoutesManifest","options","pageKeys","config","redirects","headers","onMatchHeaders","rewrites","restrictedRedirectPaths","isAppPPREnabled","appType","deploymentId","sortedRoutes","pages","app","staticRoutes","dynamicRoutes","sourcePages","Map","route","push","undefined","match","routesManifest","version","pages404","caseSensitive","experimental","caseSensitiveRoutes","basePath","map","r","beforeFiles","afterFiles","fallback","dataRoutes","i18n","rsc","header","varyHeader","prefetchHeader","didPostponeHeader","contentTypeHeader","suffix","prefetchSegmentHeader","prefetchSegmentSuffix","prefetchSegmentDirSuffix","clientParamParsing","cacheComponents","clientParamParsingOrigins","dynamicRSCPrerender","rewriteHeaders","pathHeader","queryHeader","skipProxyUrlNormalize","ppr","chain"],"mappings":"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","ignoreList":[0]}