reroute-js 0.40.0 → 0.40.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/cli/bin.d.ts +2 -2
  2. package/cli/bin.js +31 -22
  3. package/cli/bin.js.map +5 -5
  4. package/cli/index.d.ts +2 -2
  5. package/cli/index.js +5 -5
  6. package/cli/index.js.map +1 -1
  7. package/cli/src/cli.d.ts +2 -2
  8. package/cli/src/commands/analyze.d.ts +2 -2
  9. package/cli/src/commands/build.d.ts +2 -2
  10. package/cli/src/commands/dev.d.ts +2 -2
  11. package/cli/src/commands/gen.d.ts +2 -2
  12. package/cli/src/commands/index.d.ts +2 -2
  13. package/cli/src/commands/init.d.ts +2 -2
  14. package/cli/src/commands/lib/assets.d.ts +2 -2
  15. package/cli/src/commands/lib/bundler.d.ts +2 -2
  16. package/cli/src/commands/lib/command.d.ts +2 -2
  17. package/cli/src/commands/lib/env.d.ts +2 -2
  18. package/cli/src/commands/lib/index.d.ts +2 -2
  19. package/cli/src/commands/lib/log.d.ts +2 -2
  20. package/cli/src/commands/lib/markdown/availability.d.ts +2 -2
  21. package/cli/src/commands/lib/markdown/index.d.ts +2 -2
  22. package/cli/src/commands/lib/markdown/processor.d.ts +2 -2
  23. package/cli/src/commands/lib/production.d.ts +2 -2
  24. package/cli/src/commands/lib/server.d.ts +2 -2
  25. package/cli/src/commands/lib/streaming/analyzer.d.ts +2 -2
  26. package/cli/src/commands/lib/streaming/suspense.d.ts +2 -2
  27. package/cli/src/commands/lib/tailwind.d.ts +2 -2
  28. package/cli/src/commands/lib/terminal-ui.d.ts +2 -2
  29. package/cli/src/commands/lib/version.d.ts +2 -2
  30. package/cli/src/commands/og.d.ts +2 -2
  31. package/cli/src/commands/start.d.ts +2 -2
  32. package/cli/src/index.d.ts +2 -2
  33. package/core/index.d.ts +2 -2
  34. package/core/index.js +27 -18
  35. package/core/index.js.map +5 -5
  36. package/core/src/bundler/hash.d.ts +2 -2
  37. package/core/src/bundler/index.d.ts +2 -2
  38. package/core/src/config.d.ts +2 -2
  39. package/core/src/content/discovery.d.ts +2 -2
  40. package/core/src/content/index.d.ts +2 -2
  41. package/core/src/content/metadata.d.ts +2 -2
  42. package/core/src/index.d.ts +2 -2
  43. package/core/src/llms/extractor.d.ts +2 -2
  44. package/core/src/llms/formatter.d.ts +2 -2
  45. package/core/src/llms/full-generator.d.ts +2 -2
  46. package/core/src/llms/index-generator.d.ts +2 -2
  47. package/core/src/llms/index.d.ts +2 -2
  48. package/core/src/og/discovery.d.ts +2 -2
  49. package/core/src/og/index.d.ts +2 -2
  50. package/core/src/og/meta.d.ts +2 -2
  51. package/core/src/og/render.d.ts +2 -2
  52. package/core/src/og/types.d.ts +2 -2
  53. package/core/src/robots/discovery.d.ts +2 -2
  54. package/core/src/robots/generator.d.ts +2 -2
  55. package/core/src/robots/index.d.ts +2 -2
  56. package/core/src/robots/policies.d.ts +2 -2
  57. package/core/src/rss/discovery.d.ts +2 -2
  58. package/core/src/rss/discovery.d.ts.map +1 -1
  59. package/core/src/rss/generator.d.ts +2 -2
  60. package/core/src/rss/index.d.ts +2 -2
  61. package/core/src/sitemap/discovery.d.ts +2 -2
  62. package/core/src/sitemap/discovery.d.ts.map +1 -1
  63. package/core/src/sitemap/generator.d.ts +2 -2
  64. package/core/src/sitemap/index.d.ts +2 -2
  65. package/core/src/ssr/index.d.ts +2 -2
  66. package/core/src/ssr/lib/cache.d.ts +2 -2
  67. package/core/src/ssr/lib/collections.d.ts +2 -2
  68. package/core/src/ssr/lib/compression.d.ts +2 -2
  69. package/core/src/ssr/lib/compute/content.d.ts +2 -2
  70. package/core/src/ssr/lib/compute/index.d.ts +2 -2
  71. package/core/src/ssr/lib/compute/layouts.d.ts +2 -2
  72. package/core/src/ssr/lib/compute/routes.d.ts +2 -2
  73. package/core/src/ssr/lib/data.d.ts +2 -2
  74. package/core/src/ssr/lib/html.d.ts +2 -2
  75. package/core/src/ssr/lib/imports.d.ts +2 -2
  76. package/core/src/ssr/lib/index.d.ts +2 -2
  77. package/core/src/ssr/lib/layouts.d.ts +2 -2
  78. package/core/src/ssr/lib/metadata.d.ts +2 -2
  79. package/core/src/ssr/lib/metadata.d.ts.map +1 -1
  80. package/core/src/ssr/lib/mime.d.ts +2 -2
  81. package/core/src/ssr/lib/modules.d.ts +2 -2
  82. package/core/src/ssr/lib/path.d.ts +2 -2
  83. package/core/src/ssr/lib/preload.d.ts +2 -2
  84. package/core/src/ssr/lib/scripts/collections.d.ts +2 -2
  85. package/core/src/ssr/lib/scripts/data.d.ts +2 -2
  86. package/core/src/ssr/lib/scripts/escape.d.ts +2 -2
  87. package/core/src/ssr/lib/scripts/feeds.d.ts +2 -2
  88. package/core/src/ssr/lib/scripts/index.d.ts +2 -2
  89. package/core/src/ssr/lib/seed.d.ts +2 -2
  90. package/core/src/ssr/lib/serialize.d.ts +2 -2
  91. package/core/src/ssr/lib/setup.d.ts +2 -2
  92. package/core/src/ssr/lib/styles.d.ts +2 -2
  93. package/core/src/ssr/lib/template.d.ts +2 -2
  94. package/core/src/ssr/lib/types.d.ts +2 -2
  95. package/core/src/ssr/render.d.ts +2 -2
  96. package/core/src/ssr/stream.d.ts +2 -2
  97. package/elysia/index.d.ts +2 -2
  98. package/elysia/index.js +27 -18
  99. package/elysia/index.js.map +5 -5
  100. package/elysia/src/index.d.ts +2 -2
  101. package/elysia/src/libs/assets.d.ts +2 -2
  102. package/elysia/src/libs/cache.d.ts +2 -2
  103. package/elysia/src/libs/caching.d.ts +2 -2
  104. package/elysia/src/libs/http.d.ts +2 -2
  105. package/elysia/src/libs/image.d.ts +2 -2
  106. package/elysia/src/libs/index.d.ts +2 -2
  107. package/elysia/src/libs/llms.d.ts +2 -2
  108. package/elysia/src/libs/response.d.ts +2 -2
  109. package/elysia/src/libs/serving.d.ts +2 -2
  110. package/elysia/src/plugin.d.ts +2 -2
  111. package/elysia/src/routes/artifacts.d.ts +2 -2
  112. package/elysia/src/routes/content.d.ts +2 -2
  113. package/elysia/src/routes/image.d.ts +2 -2
  114. package/elysia/src/routes/index.d.ts +2 -2
  115. package/elysia/src/routes/internal.d.ts +2 -2
  116. package/elysia/src/routes/llms.d.ts +2 -2
  117. package/elysia/src/routes/og.d.ts +2 -2
  118. package/elysia/src/routes/redirects.d.ts +2 -2
  119. package/elysia/src/routes/robots.d.ts +2 -2
  120. package/elysia/src/routes/rss.d.ts +2 -2
  121. package/elysia/src/routes/search.d.ts +2 -2
  122. package/elysia/src/routes/sitemap.d.ts +2 -2
  123. package/elysia/src/routes/ssr.d.ts +2 -2
  124. package/elysia/src/routes/static.d.ts +2 -2
  125. package/elysia/src/types.d.ts +2 -2
  126. package/package.json +1 -1
  127. package/react/index.d.ts +2 -2
  128. package/react/index.js +3 -3
  129. package/react/index.js.map +1 -1
  130. package/react/src/components/ClientOnly.d.ts +2 -2
  131. package/react/src/components/ContentRoute.d.ts +2 -2
  132. package/react/src/components/Image.d.ts +2 -2
  133. package/react/src/components/LazyRoute.d.ts +2 -2
  134. package/react/src/components/Link.d.ts +2 -2
  135. package/react/src/components/Markdown.d.ts +2 -2
  136. package/react/src/components/Outlet.d.ts +2 -2
  137. package/react/src/components/index.d.ts +2 -2
  138. package/react/src/hooks/index.d.ts +2 -2
  139. package/react/src/hooks/useContent.d.ts +2 -2
  140. package/react/src/hooks/useData.d.ts +2 -2
  141. package/react/src/hooks/useFeed.d.ts +2 -2
  142. package/react/src/hooks/useLayoutData.d.ts +2 -2
  143. package/react/src/hooks/useLlms.d.ts +2 -2
  144. package/react/src/hooks/useNavigate.d.ts +2 -2
  145. package/react/src/hooks/useParams.d.ts +2 -2
  146. package/react/src/hooks/useRouter.d.ts +2 -2
  147. package/react/src/hooks/useSearch.d.ts +2 -2
  148. package/react/src/hooks/useSearchParams.d.ts +2 -2
  149. package/react/src/hooks/useToc.d.ts +2 -2
  150. package/react/src/index.d.ts +2 -2
  151. package/react/src/lib/collection.d.ts +2 -2
  152. package/react/src/lib/content.d.ts +2 -2
  153. package/react/src/lib/head.d.ts +2 -2
  154. package/react/src/lib/index.d.ts +2 -2
  155. package/react/src/lib/lazy-route.d.ts +2 -2
  156. package/react/src/lib/route-loader.d.ts +2 -2
  157. package/react/src/providers/ContentProvider.d.ts +2 -2
  158. package/react/src/providers/RerouteProvider.d.ts +2 -2
  159. package/react/src/providers/RouterProvider.d.ts +2 -2
  160. package/react/src/providers/index.d.ts +2 -2
  161. package/react/src/types/any.d.ts +2 -2
  162. package/react/src/types/index.d.ts +2 -2
  163. package/react/src/types/router.d.ts +2 -2
  164. package/telemetry/react.d.ts +2 -2
  165. package/telemetry/react.js +3 -3
  166. package/telemetry/react.js.map +1 -1
  167. package/telemetry/server.d.ts +2 -2
  168. package/telemetry/server.js +3 -3
  169. package/telemetry/server.js.map +2 -2
  170. package/telemetry/src/react/api.d.ts +2 -2
  171. package/telemetry/src/react/context.d.ts +2 -2
  172. package/telemetry/src/react/index.d.ts +2 -2
  173. package/telemetry/src/react/telemetry.d.ts +2 -2
  174. package/telemetry/src/server/context.d.ts +2 -2
  175. package/telemetry/src/server/headers/extractor.d.ts +2 -2
  176. package/telemetry/src/server/headers/index.d.ts +2 -2
  177. package/telemetry/src/server/headers/presets.d.ts +2 -2
  178. package/telemetry/src/server/index.d.ts +2 -2
  179. package/telemetry/src/server/instrumentation.d.ts +2 -2
  180. package/telemetry/src/server/plugin.d.ts +2 -2
  181. package/telemetry/src/server/sourcemap.d.ts +2 -2
@@ -19,7 +19,7 @@
19
19
  "import { importContentModuleForPath } from './modules';\nimport type { Doc } from './types';\n\n/**\n * Seed SSR module store for a content path.\n * Makes the content module available for server-side rendering.\n */\nexport async function seedSSRModuleForPath(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<void> {\n\ttry {\n\t\tconst pathOnly = pathname.split('?')[0].split('#')[0];\n\t\tconst parts = pathOnly.split('/').filter(Boolean);\n\n\t\tif (parts.length < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst collection = parts[0];\n\t\tconst name = parts[1];\n\t\tconst key = `${collection}:${name}`;\n\n\t\tconst mod = await importContentModuleForPath(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\n\t\tif (!mod) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Store full module for hooks like useToc\n\t\t(globalThis as Doc).__REROUTE_SSR_MODULES__ =\n\t\t\t(globalThis as Doc).__REROUTE_SSR_MODULES__ || {};\n\t\t(globalThis as Doc).__REROUTE_SSR_MODULES__[key] = mod;\n\n\t\t// Capture exports for head injection\n\t\ttry {\n\t\t\t(globalThis as Doc).__REROUTE_SSR_EXPORTS__ =\n\t\t\t\t(globalThis as Doc).__REROUTE_SSR_EXPORTS__ || {};\n\t\t\t(globalThis as Doc).__REROUTE_SSR_EXPORTS__[key] = {\n\t\t\t\tmeta: (mod as Doc).meta || {},\n\t\t\t\tssr: (mod as Doc).ssr || {},\n\t\t\t\ttoc: (mod as Doc).toc || [],\n\t\t\t};\n\t\t} catch {\n\t\t\t// Ignore export capture errors\n\t\t}\n\t} catch {\n\t\t// Ignore seeding errors\n\t}\n}\n",
20
20
  "import { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport { seedSSRModuleForPath } from './seed';\nimport type { ComputeParams, Doc, SSR } from './types';\n\n/**\n * Match a route pattern against a pathname\n * Used in compiled binary mode when matchRoute isn't available\n */\nfunction matchPattern(\n\tpattern: string,\n\tpathname: string,\n): Record<string, string> | null {\n\tconst patternParts = pattern.split('/').filter(Boolean);\n\tconst pathnameParts = pathname.split('/').filter(Boolean);\n\n\tif (patternParts.length !== pathnameParts.length) {\n\t\treturn null;\n\t}\n\n\tconst params: Record<string, string> = {};\n\n\tfor (let i = 0; i < patternParts.length; i++) {\n\t\tconst patternPart = patternParts[i];\n\t\tconst pathnamePart = pathnameParts[i];\n\n\t\tif (patternPart.startsWith(':')) {\n\t\t\tparams[patternPart.slice(1)] = pathnamePart;\n\t\t} else if (patternPart !== pathnamePart) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn params;\n}\n\n/**\n * Compute SSR data for client-side navigation.\n * Returns lazy markers for promises to support progressive loading.\n */\nfunction loadContentData(\n\tpathname: string,\n\tsearchParams?: URLSearchParams,\n): { key: string; data: unknown } | null {\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return null;\n\n\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\tconst g = globalThis as Doc;\n\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key];\n\t\tconst dataFn = (exp as Doc)?.ssr?.data as SSR['data'] | undefined;\n\n\t\tif (typeof dataFn === 'function') {\n\t\t\tconst rawResult = dataFn({\n\t\t\t\tpathname,\n\t\t\t\tparams: { name: parts[1] },\n\t\t\t\tsearchParams,\n\t\t\t\t// Note: headers are not available in client-side navigation\n\t\t\t});\n\n\t\t\tconst result = processDataResult(rawResult, pathname, pathname);\n\t\t\treturn { key: pathname, data: result };\n\t\t}\n\t} catch {\n\t\t// Content data unavailable\n\t}\n\n\treturn null;\n}\n\nfunction loadMatchedRouteData(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<{ key: string; data: unknown } | null> {\n\treturn loadRouteDataInternal(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tsearchParams,\n\t);\n}\n\nasync function loadRouteDataInternal(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<{ key: string; data: unknown } | null> {\n\ttry {\n\t\t// Check for bundled routes first (compiled binary support)\n\t\tlet routes = (globalThis as Record<string, unknown>).__REROUTE_ROUTES__ as\n\t\t\t| Doc[]\n\t\t\t| undefined;\n\t\tlet matchRouteFn: ((pathname: string) => Doc | null) | undefined;\n\n\t\t// Fallback to dynamic import (dev mode)\n\t\tif (!routes) {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst m = await dynamicImport(routesPath, isWatchMode);\n\t\t\troutes = m?.routes as Doc[] | undefined;\n\t\t\tmatchRouteFn = (m as Doc)?.matchRoute as\n\t\t\t\t| ((pathname: string) => Doc | null)\n\t\t\t\t| undefined;\n\t\t} else {\n\t\t\t// In bundled mode, we need to match manually\n\t\t\tmatchRouteFn = (pathname: string) => {\n\t\t\t\tfor (const route of routes || []) {\n\t\t\t\t\tconst pattern = String(route?.pattern || '');\n\t\t\t\t\tconst match = matchPattern(pattern, pathname);\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\treturn { route, params: match };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\t}\n\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match =\n\t\t\ttypeof matchRouteFn === 'function' ? matchRouteFn(pathnameOnly) : null;\n\n\t\tconst r = (match as Doc | null)?.route;\n\t\tconst paramsValue = ((match as Doc | null)?.params || {}) as Record<\n\t\t\tstring,\n\t\t\tstring\n\t\t>;\n\n\t\tif (r && typeof (r as Doc).path === 'string') {\n\t\t\t// Try to use bundled ssr export first (compiled binary)\n\t\t\tlet ssrExport = (r as Doc)?.ssr as Doc | undefined;\n\n\t\t\t// Fallback to dynamic import if not bundled (dev mode)\n\t\t\tif (!ssrExport) {\n\t\t\t\t// In dev mode, routes might be from .reroute/routes.ts which imports from streaming wrappers\n\t\t\t\t// The streaming wrapper re-exports ssr, so we should try loading from there first\n\t\t\t\tconst routePath = String((r as Doc).path);\n\t\t\t\tlet abs = join(cwd, '.reroute', 'streaming', routePath);\n\n\t\t\t\tlet mod = await dynamicImport(abs, isWatchMode).catch(() => null);\n\n\t\t\t\t// If streaming wrapper doesn't exist or fails, load from source\n\t\t\t\tif (!mod) {\n\t\t\t\t\tabs = join(clientDir, 'routes', routePath);\n\t\t\t\t\tmod = await dynamicImport(abs, isWatchMode);\n\t\t\t\t}\n\n\t\t\t\tssrExport = (mod as Doc)?.ssr as SSR | undefined;\n\t\t\t}\n\n\t\t\tconst dataFn = ssrExport?.data;\n\n\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\tconst rawResult = dataFn({\n\t\t\t\t\tpathname,\n\t\t\t\t\tparams: paramsValue,\n\t\t\t\t\tsearchParams,\n\t\t\t\t\t// Note: headers are not available in client-side navigation\n\t\t\t\t});\n\n\t\t\t\tconst data = processDataResult(rawResult, pathname, pathname);\n\t\t\t\treturn { key: pathname, data };\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Route data unavailable\n\t}\n\n\treturn null;\n}\n\nfunction determineReturnStructure(allData: Record<string, unknown>): unknown {\n\tconst dataKeys = Object.keys(allData);\n\n\tif (dataKeys.length > 1) {\n\t\treturn { __reroute_multiple__: true, ...allData };\n\t}\n\n\tif (dataKeys.length === 1) {\n\t\tconst singleKey = dataKeys[0];\n\t\t// Keep layout key structure for proper client-side handling\n\t\tif (singleKey.startsWith('__layout:')) {\n\t\t\treturn allData;\n\t\t}\n\t\treturn allData[singleKey];\n\t}\n\n\treturn null;\n}\n\nexport async function computeSSRDataForPath(\n\tparams: ComputeParams,\n): Promise<unknown> {\n\tconst { pathname, clientDir, cwd, isWatchMode, searchParams } = params;\n\n\t// Seed content modules for potential content pages\n\ttry {\n\t\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\n\t} catch {\n\t\t// Continue without seeding\n\t}\n\n\t// 1) Layout data\n\tconst allData = await loadLayoutData(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tsearchParams,\n\t);\n\n\t// 2) Content-level data\n\tconst contentResult = loadContentData(pathname, searchParams);\n\tif (contentResult) {\n\t\t// For content pages, return directly if it's the only data\n\t\tif (Object.keys(allData).length === 0) {\n\t\t\treturn contentResult.data;\n\t\t}\n\t\tallData[contentResult.key] = contentResult.data;\n\t}\n\n\t// 3) Route-level data\n\tconst routeResult = await loadMatchedRouteData(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tsearchParams,\n\t);\n\tif (routeResult) {\n\t\tallData[routeResult.key] = routeResult.data;\n\t}\n\n\treturn determineReturnStructure(allData);\n}\n\nfunction processLayoutDataResult(\n\trawResult: unknown,\n\tpathname: string,\n\tlayoutKey: string,\n): unknown {\n\tif (rawResult instanceof Promise) {\n\t\treturn createLazyMarker(pathname, layoutKey);\n\t}\n\n\tif (\n\t\ttypeof rawResult === 'object' &&\n\t\trawResult !== null &&\n\t\t!Array.isArray(rawResult)\n\t) {\n\t\tconst entries = Object.entries(rawResult as Record<string, unknown>);\n\t\tconst hasPromises = entries.some(([_, v]) => v instanceof Promise);\n\n\t\tif (hasPromises) {\n\t\t\tconst flattened: Record<string, unknown> = { __flatten__: true };\n\t\t\tfor (const [k, value] of entries) {\n\t\t\t\tif (value instanceof Promise) {\n\t\t\t\t\tflattened[k] = createLazyMarker(pathname, k);\n\t\t\t\t} else {\n\t\t\t\t\tflattened[k] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn flattened;\n\t\t}\n\t}\n\n\treturn rawResult;\n}\n\nasync function processLayout(\n\tlayout: Doc,\n\tpathname: string,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<{ key: string; data: unknown } | null> {\n\tif (typeof layout?.path !== 'string') return null;\n\n\ttry {\n\t\t// Try to use bundled ssr export first (compiled binary)\n\t\tlet ssrExport = (layout as Doc)?.ssr as SSR | undefined;\n\n\t\t// Fallback to dynamic import if not bundled (dev mode)\n\t\tif (!ssrExport) {\n\t\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\t\tssrExport = (mod as Doc)?.ssr as SSR | undefined;\n\t\t}\n\n\t\tconst dataFn = ssrExport?.data;\n\n\t\tif (typeof dataFn !== 'function') return null;\n\n\t\tconst pattern = String(layout.pattern || '/');\n\t\tconst layoutKey = `__layout:${pattern}`;\n\t\tconst rawResult = dataFn({\n\t\t\tpathname,\n\t\t\tparams: {},\n\t\t\tsearchParams,\n\t\t\t// Note: headers are not available in client-side navigation\n\t\t});\n\n\t\tconst processedData = processLayoutDataResult(\n\t\t\trawResult,\n\t\t\tpathname,\n\t\t\tlayoutKey,\n\t\t);\n\t\treturn { key: layoutKey, data: processedData };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function loadLayoutData(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<Record<string, unknown>> {\n\tconst allData: Record<string, unknown> = {};\n\n\ttry {\n\t\t// Check for bundled layouts first (compiled binary support)\n\t\tlet layouts = (globalThis as Record<string, unknown>).__REROUTE_LAYOUTS__ as\n\t\t\t| Doc[]\n\t\t\t| undefined;\n\n\t\t// Fallback to dynamic import (dev mode)\n\t\tif (!layouts) {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst m = await dynamicImport(routesPath, isWatchMode);\n\t\t\tlayouts = m?.layouts as Doc[] | undefined;\n\t\t}\n\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tconst result = await processLayout(\n\t\t\t\tlayout,\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tisWatchMode,\n\t\t\t\tsearchParams,\n\t\t\t);\n\n\t\t\tif (result) {\n\t\t\t\tallData[result.key] = result.data;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Routes unavailable\n\t}\n\n\treturn allData;\n}\n\nfunction processDataResult(\n\trawResult: unknown,\n\tpathname: string,\n\tkey: string,\n): unknown {\n\treturn processLayoutDataResult(rawResult, pathname, key);\n}\n\nfunction createLazyMarker(pathname: string, key: string): unknown {\n\treturn {\n\t\t__lazy__: true,\n\t\t__fetch__: `/__reroute_data?path=${encodeURIComponent(pathname)}&key=${encodeURIComponent(key)}`,\n\t};\n}\n",
21
21
  "import type { OGImageOptions } from '../config';\nimport { findOGImageForPath } from './discovery';\n\n/**\n * Generate OG image meta tags for SSR\n */\nexport async function generateOGImageMetaTags(\n\tpathname: string,\n\tclientDir: string,\n\togConfig: OGImageOptions | undefined,\n): Promise<string> {\n\tif (!ogConfig?.enabled) {\n\t\treturn '';\n\t}\n\n\tconst width = ogConfig.width || 1200;\n\tconst height = ogConfig.height || 630;\n\n\t// Check if there's an OG image component for this route\n\tconst ogPath = await findOGImageForPath(pathname, clientDir);\n\tconst hasOGImage = ogPath !== null || ogConfig.defaultTemplate;\n\n\tif (!hasOGImage) {\n\t\treturn '';\n\t}\n\n\t// Generate OG image URL (relative path)\n\t// For root (/), use /index.png; for /blog, use /blog/index.png\n\tlet ogImagePath: string;\n\tif (pathname === '/' || pathname === '') {\n\t\togImagePath = '/__reroute_og/index.png';\n\t} else if (pathname.endsWith('/')) {\n\t\togImagePath = `/__reroute_og${pathname}index.png`;\n\t} else {\n\t\togImagePath = `/__reroute_og${pathname}.png`;\n\t}\n\n\t// Convert to absolute URL if baseUrl is provided\n\tconst baseUrl = ogConfig.baseUrl;\n\tif (baseUrl) {\n\t\t// Remove trailing slash from baseUrl if present\n\t\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t\togImagePath = `${cleanBaseUrl}${ogImagePath}`;\n\t} else {\n\t\tconsole.warn(\n\t\t\t'[reroute] OG images require a baseUrl for proper social media sharing. Add baseUrl to ogImage config.',\n\t\t);\n\t}\n\n\t// Generate meta tags\n\treturn `<meta property=\"og:image\" content=\"${ogImagePath}\" />\n<meta property=\"og:image:width\" content=\"${width}\" />\n<meta property=\"og:image:height\" content=\"${height}\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:image\" content=\"${ogImagePath}\" />`;\n}\n",
22
- "import type { OGImageOptions } from '../../config';\nimport { buildHeadFromMeta } from '../../content/metadata';\nimport { generateOGImageMetaTags } from '../../og/meta';\nimport { loadRoutesModule } from './compute';\nimport { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport type { Doc, MetadataResult, SSR, SSRHeadContext } from './types';\n\n/**\n * Generate canonical URL meta tag\n */\nfunction generateCanonicalUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for canonical URL\n\tconst cleanPathname = pathname.split('?')[0];\n\t// Canonical URLs should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst canonicalUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<link rel=\"canonical\" href=\"${canonicalUrl}\" />`;\n}\n\n/**\n * Generate og:url meta tag to match canonical URL\n */\nfunction generateOgUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for og:url\n\tconst cleanPathname = pathname.split('?')[0];\n\t// og:url should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst ogUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<meta property=\"og:url\" content=\"${ogUrl}\" />`;\n}\n\n/**\n * Extract per-page head and metadata from layouts, routes, and content modules\n */\nexport async function extractPageMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\togConfig?: OGImageOptions,\n\tbaseUrl?: string,\n\tautoCanonical?: boolean,\n\tssrData?: unknown,\n): Promise<MetadataResult> {\n\tlet perPageHead = '';\n\tlet pageLang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\t// 1. Extract layout metadata hierarchically\n\tawait extractLayoutMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tif (!pageLang) pageLang = lang;\n\t\t},\n\t);\n\n\t// 2. Canonical URL and og:url (auto-generated, should be overridable by custom tags)\n\t// Default to true if baseUrl is set, unless explicitly disabled\n\tconst shouldGenerateCanonical =\n\t\tautoCanonical !== false && baseUrl !== undefined;\n\tif (shouldGenerateCanonical) {\n\t\tconst canonicalTag = generateCanonicalUrl(baseUrl, pathname);\n\t\tconst ogUrlTag = generateOgUrl(baseUrl, pathname);\n\t\tperPageHead += `\\n${canonicalTag}`;\n\t\tperPageHead += `\\n${ogUrlTag}`;\n\t}\n\n\t// 3. OG Image meta tags (auto-generated, should be overridable by custom tags)\n\ttry {\n\t\tconst ogMetaTags = await generateOGImageMetaTags(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\togConfig,\n\t\t);\n\t\tif (ogMetaTags) {\n\t\t\tperPageHead += `\\n${ogMetaTags}`;\n\t\t}\n\t} catch (error) {\n\t\tconsole.warn('[reroute] Failed to generate OG image meta tags:', error);\n\t}\n\n\t// 4. Content page metadata (can override auto-generated tags)\n\textractContentMetadata(\n\t\tpathname,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tpageLang = lang;\n\t\t},\n\t);\n\n\t// 5. Route-level metadata (most specific, can override everything)\n\tconst routeResult = await extractRouteMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tstatusOverride,\n\t\tssrData,\n\t);\n\tperPageHead += routeResult.head;\n\tif (routeResult.lang) pageLang = routeResult.lang;\n\tstatusOverride = routeResult.statusOverride;\n\n\treturn { perPageHead, pageLang, statusOverride };\n}\n\nasync function processLayoutForMetadata(\n\tlayout: Doc,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): Promise<void> {\n\tif (typeof layout?.path !== 'string') return;\n\n\ttry {\n\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\n\t\tconst meta = (mod as Doc)?.meta;\n\t\tconst ssr = (mod as Doc)?.ssr as SSR | undefined;\n\n\t\tif (meta) addHead(buildHeadFromMeta(meta));\n\n\t\tif (ssr) {\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// Continue to next layout\n\t}\n}\n\nasync function extractLayoutMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): Promise<void> {\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst m = await dynamicImport(routesPath, isWatchMode);\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, m?.layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tawait processLayoutForMetadata(\n\t\t\t\tlayout,\n\t\t\t\tclientDir,\n\t\t\t\tisWatchMode,\n\t\t\t\taddHead,\n\t\t\t\tsetLang,\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n}\n\nfunction extractContentMetadata(\n\tpathname: string,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): void {\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return;\n\n\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\tconst g = globalThis as Doc;\n\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t| { meta?: unknown; ssr?: SSR }\n\t\t\t| undefined;\n\n\t\tconst meta = (exp as Doc)?.meta;\n\t\tconst ssr = exp?.ssr;\n\n\t\taddHead(buildHeadFromMeta(meta));\n\n\t\tconst ssrHead = extractSSRHead(ssr);\n\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\tconst lang = extractSSRLang(ssr);\n\t\tif (lang) setLang(lang);\n\t} catch {\n\t\t// Content metadata unavailable\n\t}\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Route metadata extraction is complex\nasync function extractMatchedRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tm: Doc,\n\tisWatchMode: boolean,\n\tstatusOverride: number | undefined,\n\tssrData?: unknown,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tconst pathnameOnly = pathname.split('?')[0];\n\tconst match =\n\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\tconst r = match?.route as Doc | undefined;\n\n\tif (!r) {\n\t\treturn { head: '', statusOverride: statusOverride || 404 };\n\t}\n\n\tif (r && typeof r.path === 'string') {\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\n\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\tconst ssr = (mod as Doc)?.ssr as SSR | undefined;\n\n\t\t\tlet head = '';\n\t\t\tif (meta) head += buildHeadFromMeta(meta);\n\n\t\t\tif (ssr) {\n\t\t\t\t// Extract route-specific data from the full ssrData object\n\t\t\t\t// ssrData is keyed by pathname for routes\n\t\t\t\tconst routeData =\n\t\t\t\t\tssrData && typeof ssrData === 'object'\n\t\t\t\t\t\t? (ssrData as Record<string, unknown>)[pathname]\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst ssrHead = extractSSRHead(ssr, routeData);\n\t\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\t\t\t\treturn { head, lang: extractSSRLang(ssr), statusOverride };\n\t\t\t}\n\n\t\t\treturn { head, statusOverride };\n\t\t} catch {\n\t\t\t// Route module unavailable\n\t\t}\n\t}\n\n\treturn { head: '', statusOverride };\n}\n\nasync function extractRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\tssrData?: unknown,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tlet head = '';\n\tlet lang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\ttry {\n\t\tconst m = await loadRoutesModule(cwd, isWatchMode);\n\t\tif (!m) {\n\t\t\treturn { head, lang, statusOverride: statusOverride || 404 };\n\t\t}\n\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match =\n\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\t\tconst r = match?.route as Doc | undefined;\n\n\t\tif (!r) {\n\t\t\tstatusOverride = statusOverride || 404;\n\t\t}\n\n\t\tif (r && typeof r.path === 'string') {\n\t\t\tconst result = await extractMatchedRouteMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\tstatusOverride,\n\t\t\t\tssrData,\n\t\t\t);\n\n\t\t\thead = result.head;\n\t\t\tlang = result.lang;\n\t\t\tstatusOverride = result.statusOverride;\n\t\t} else {\n\t\t\t// Try notFound route metadata only when no route matched\n\t\t\thead += await extractNotFoundMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\t(l) => {\n\t\t\t\t\tlang = l;\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n\n\treturn { head, lang, statusOverride };\n}\n\nfunction findBestNotFoundRoute(list: Doc[], pathname: string): Doc | undefined {\n\tlet chosen: Doc | undefined;\n\tlet bestLen = -1;\n\n\tfor (const nf of list) {\n\t\tconst pat = String((nf as Doc)?.pattern || '/');\n\t\tif (!pathname.startsWith(pat)) continue;\n\n\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\tif (len >= bestLen) {\n\t\t\tbestLen = len;\n\t\t\tchosen = nf;\n\t\t}\n\t}\n\n\treturn chosen;\n}\n\nasync function extractNotFoundMetadata(\n\tpathname: string,\n\tclientDir: string,\n\troutesModule: Doc,\n\tisWatchMode: boolean,\n\tsetLang: (lang: string) => void,\n): Promise<string> {\n\tlet head = '';\n\n\ttry {\n\t\tconst list = routesModule?.notFoundRoutes as Doc[] | undefined;\n\t\tif (!Array.isArray(list)) return head;\n\n\t\tconst chosen = findBestNotFoundRoute(list, pathname);\n\n\t\tif (chosen && typeof (chosen as Doc).path === 'string') {\n\t\t\tconst abs = join(clientDir, 'routes', String((chosen as Doc).path));\n\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\n\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\tconst ssr = (mod as Doc)?.ssr as SSR | undefined;\n\n\t\t\tif (meta) head += buildHeadFromMeta(meta);\n\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// NotFound metadata unavailable\n\t}\n\n\treturn head;\n}\n\nfunction extractSSRHead(ssr: SSR | undefined, data?: unknown): string {\n\tif (!ssr) return '';\n\n\t// Support function that receives data result\n\tif (typeof ssr.head === 'function') {\n\t\ttry {\n\t\t\tconst result = ssr.head({ data } satisfies SSRHeadContext);\n\t\t\tif (typeof result === 'string') return result;\n\t\t\tif (Array.isArray(result)) return String((result as string[]).join('\\n'));\n\t\t\treturn '';\n\t\t} catch (err) {\n\t\t\tconsole.error('[extractSSRHead] Error calling head function:', err);\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tif (typeof ssr.head === 'string') return ssr.head;\n\tif (Array.isArray(ssr.head)) return String(ssr.head.join('\\n'));\n\n\treturn '';\n}\n\nfunction extractSSRLang(ssr: SSR | undefined): string | undefined {\n\tif (!ssr) return undefined;\n\n\tif (typeof ssr.lang === 'string' && ssr.lang.trim()) {\n\t\treturn ssr.lang.trim();\n\t}\n\n\treturn undefined;\n}\n",
22
+ "import type { OGImageOptions } from '../../config';\nimport { buildHeadFromMeta } from '../../content/metadata';\nimport { generateOGImageMetaTags } from '../../og/meta';\nimport { loadRoutesModule } from './compute';\nimport { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport type { Doc, MetadataResult, SSR, SSRHeadContext } from './types';\n\n/**\n * Load meta and ssr exports from a route/layout module.\n * Uses bundled values first (for compiled binaries), falls back to dynamic import.\n */\nasync function loadModuleMetaAndSSR(\n\tmoduleObj: Doc | undefined,\n\tabsolutePath: string,\n\tisWatchMode: boolean,\n): Promise<{ meta?: Doc; ssr?: SSR }> {\n\t// Use bundled meta/ssr if available (compiled binary)\n\tconst bundledMeta = moduleObj?.meta as Doc | undefined;\n\tconst bundledSSR = moduleObj?.ssr as SSR | undefined;\n\n\tif (bundledMeta !== undefined || bundledSSR !== undefined) {\n\t\treturn { meta: bundledMeta, ssr: bundledSSR };\n\t}\n\n\t// Fallback to dynamic import (dev mode)\n\ttry {\n\t\tconst mod = await dynamicImport(absolutePath, isWatchMode);\n\t\treturn {\n\t\t\tmeta: (mod as Doc)?.meta as Doc | undefined,\n\t\t\tssr: (mod as Doc)?.ssr as SSR | undefined,\n\t\t};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\n/**\n * Generate canonical URL meta tag\n */\nfunction generateCanonicalUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for canonical URL\n\tconst cleanPathname = pathname.split('?')[0];\n\t// Canonical URLs should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst canonicalUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<link rel=\"canonical\" href=\"${canonicalUrl}\" />`;\n}\n\n/**\n * Generate og:url meta tag to match canonical URL\n */\nfunction generateOgUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for og:url\n\tconst cleanPathname = pathname.split('?')[0];\n\t// og:url should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst ogUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<meta property=\"og:url\" content=\"${ogUrl}\" />`;\n}\n\n/**\n * Extract per-page head and metadata from layouts, routes, and content modules\n */\nexport async function extractPageMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\togConfig?: OGImageOptions,\n\tbaseUrl?: string,\n\tautoCanonical?: boolean,\n\tssrData?: unknown,\n): Promise<MetadataResult> {\n\tlet perPageHead = '';\n\tlet pageLang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\t// 1. Extract layout metadata hierarchically\n\tawait extractLayoutMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tif (!pageLang) pageLang = lang;\n\t\t},\n\t);\n\n\t// 2. Canonical URL and og:url (auto-generated, should be overridable by custom tags)\n\t// Default to true if baseUrl is set, unless explicitly disabled\n\tconst shouldGenerateCanonical =\n\t\tautoCanonical !== false && baseUrl !== undefined;\n\tif (shouldGenerateCanonical) {\n\t\tconst canonicalTag = generateCanonicalUrl(baseUrl, pathname);\n\t\tconst ogUrlTag = generateOgUrl(baseUrl, pathname);\n\t\tperPageHead += `\\n${canonicalTag}`;\n\t\tperPageHead += `\\n${ogUrlTag}`;\n\t}\n\n\t// 3. OG Image meta tags (auto-generated, should be overridable by custom tags)\n\ttry {\n\t\tconst ogMetaTags = await generateOGImageMetaTags(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\togConfig,\n\t\t);\n\t\tif (ogMetaTags) {\n\t\t\tperPageHead += `\\n${ogMetaTags}`;\n\t\t}\n\t} catch (error) {\n\t\tconsole.warn('[reroute] Failed to generate OG image meta tags:', error);\n\t}\n\n\t// 4. Content page metadata (can override auto-generated tags)\n\textractContentMetadata(\n\t\tpathname,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tpageLang = lang;\n\t\t},\n\t);\n\n\t// 5. Route-level metadata (most specific, can override everything)\n\tconst routeResult = await extractRouteMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tstatusOverride,\n\t\tssrData,\n\t);\n\tperPageHead += routeResult.head;\n\tif (routeResult.lang) pageLang = routeResult.lang;\n\tstatusOverride = routeResult.statusOverride;\n\n\treturn { perPageHead, pageLang, statusOverride };\n}\n\nasync function processLayoutForMetadata(\n\tlayout: Doc,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): Promise<void> {\n\tif (typeof layout?.path !== 'string') return;\n\n\ttry {\n\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\tconst { meta, ssr } = await loadModuleMetaAndSSR(layout, abs, isWatchMode);\n\n\t\tif (meta) addHead(buildHeadFromMeta(meta));\n\n\t\tif (ssr) {\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// Continue to next layout\n\t}\n}\n\nasync function extractLayoutMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): Promise<void> {\n\ttry {\n\t\t// Use loadRoutesModule which handles bundled globals for compiled binaries\n\t\tconst m = await loadRoutesModule(cwd, isWatchMode);\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, m?.layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tawait processLayoutForMetadata(\n\t\t\t\tlayout,\n\t\t\t\tclientDir,\n\t\t\t\tisWatchMode,\n\t\t\t\taddHead,\n\t\t\t\tsetLang,\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n}\n\nfunction extractContentMetadata(\n\tpathname: string,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): void {\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return;\n\n\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\tconst g = globalThis as Doc;\n\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t| { meta?: unknown; ssr?: SSR }\n\t\t\t| undefined;\n\n\t\tconst meta = (exp as Doc)?.meta;\n\t\tconst ssr = exp?.ssr;\n\n\t\taddHead(buildHeadFromMeta(meta));\n\n\t\tconst ssrHead = extractSSRHead(ssr);\n\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\tconst lang = extractSSRLang(ssr);\n\t\tif (lang) setLang(lang);\n\t} catch {\n\t\t// Content metadata unavailable\n\t}\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Route metadata extraction is complex\nasync function extractMatchedRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tm: Doc,\n\tisWatchMode: boolean,\n\tstatusOverride: number | undefined,\n\tssrData?: unknown,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tconst pathnameOnly = pathname.split('?')[0];\n\tconst match =\n\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\tconst r = match?.route as Doc | undefined;\n\n\tif (!r) {\n\t\treturn { head: '', statusOverride: statusOverride || 404 };\n\t}\n\n\tif (r && typeof r.path === 'string') {\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\tconst { meta, ssr } = await loadModuleMetaAndSSR(r, abs, isWatchMode);\n\n\t\t\tlet head = '';\n\t\t\tif (meta) head += buildHeadFromMeta(meta);\n\n\t\t\tif (ssr) {\n\t\t\t\t// Extract route-specific data from the full ssrData object\n\t\t\t\t// ssrData is keyed by pathname for routes\n\t\t\t\tconst routeData =\n\t\t\t\t\tssrData && typeof ssrData === 'object'\n\t\t\t\t\t\t? (ssrData as Record<string, unknown>)[pathname]\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst ssrHead = extractSSRHead(ssr, routeData);\n\t\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\t\t\t\treturn { head, lang: extractSSRLang(ssr), statusOverride };\n\t\t\t}\n\n\t\t\treturn { head, statusOverride };\n\t\t} catch {\n\t\t\t// Route module unavailable\n\t\t}\n\t}\n\n\treturn { head: '', statusOverride };\n}\n\nasync function extractRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\tssrData?: unknown,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tlet head = '';\n\tlet lang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\ttry {\n\t\tconst m = await loadRoutesModule(cwd, isWatchMode);\n\t\tif (!m) {\n\t\t\treturn { head, lang, statusOverride: statusOverride || 404 };\n\t\t}\n\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match =\n\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\t\tconst r = match?.route as Doc | undefined;\n\n\t\tif (!r) {\n\t\t\tstatusOverride = statusOverride || 404;\n\t\t}\n\n\t\tif (r && typeof r.path === 'string') {\n\t\t\tconst result = await extractMatchedRouteMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\tstatusOverride,\n\t\t\t\tssrData,\n\t\t\t);\n\n\t\t\thead = result.head;\n\t\t\tlang = result.lang;\n\t\t\tstatusOverride = result.statusOverride;\n\t\t} else {\n\t\t\t// Try notFound route metadata only when no route matched\n\t\t\thead += await extractNotFoundMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\t(l) => {\n\t\t\t\t\tlang = l;\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n\n\treturn { head, lang, statusOverride };\n}\n\nfunction findBestNotFoundRoute(list: Doc[], pathname: string): Doc | undefined {\n\tlet chosen: Doc | undefined;\n\tlet bestLen = -1;\n\n\tfor (const nf of list) {\n\t\tconst pat = String((nf as Doc)?.pattern || '/');\n\t\tif (!pathname.startsWith(pat)) continue;\n\n\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\tif (len >= bestLen) {\n\t\t\tbestLen = len;\n\t\t\tchosen = nf;\n\t\t}\n\t}\n\n\treturn chosen;\n}\n\nasync function extractNotFoundMetadata(\n\tpathname: string,\n\tclientDir: string,\n\troutesModule: Doc,\n\tisWatchMode: boolean,\n\tsetLang: (lang: string) => void,\n): Promise<string> {\n\tlet head = '';\n\n\ttry {\n\t\tconst list = routesModule?.notFoundRoutes as Doc[] | undefined;\n\t\tif (!Array.isArray(list)) return head;\n\n\t\tconst chosen = findBestNotFoundRoute(list, pathname);\n\n\t\tif (chosen && typeof (chosen as Doc).path === 'string') {\n\t\t\tconst abs = join(clientDir, 'routes', String((chosen as Doc).path));\n\t\t\tconst { meta, ssr } = await loadModuleMetaAndSSR(\n\t\t\t\tchosen,\n\t\t\t\tabs,\n\t\t\t\tisWatchMode,\n\t\t\t);\n\n\t\t\tif (meta) head += buildHeadFromMeta(meta);\n\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// NotFound metadata unavailable\n\t}\n\n\treturn head;\n}\n\nfunction extractSSRHead(ssr: SSR | undefined, data?: unknown): string {\n\tif (!ssr) return '';\n\n\t// Support function that receives data result\n\tif (typeof ssr.head === 'function') {\n\t\ttry {\n\t\t\tconst result = ssr.head({ data } satisfies SSRHeadContext);\n\t\t\tif (typeof result === 'string') return result;\n\t\t\tif (Array.isArray(result)) return String((result as string[]).join('\\n'));\n\t\t\treturn '';\n\t\t} catch (err) {\n\t\t\tconsole.error('[extractSSRHead] Error calling head function:', err);\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tif (typeof ssr.head === 'string') return ssr.head;\n\tif (Array.isArray(ssr.head)) return String(ssr.head.join('\\n'));\n\n\treturn '';\n}\n\nfunction extractSSRLang(ssr: SSR | undefined): string | undefined {\n\tif (!ssr) return undefined;\n\n\tif (typeof ssr.lang === 'string' && ssr.lang.trim()) {\n\t\treturn ssr.lang.trim();\n\t}\n\n\treturn undefined;\n}\n",
23
23
  "import { readdir, stat } from 'node:fs/promises';\nimport { dynamicImport } from './imports';\nimport { join } from './path';\nimport type { Doc, PreloadResult } from './types';\n\n/**\n * Handle content module preloading for content pages\n */\nexport async function preloadContentModule(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<PreloadResult> {\n\tlet extraHead = '';\n\tlet hydrationScript = '';\n\tlet statusOverride: number | undefined;\n\n\ttry {\n\t\tconst pathOnly = pathname.split('?')[0].split('#')[0];\n\t\tconst parts = pathOnly.split('/').filter(Boolean);\n\n\t\tif (parts.length < 2) {\n\t\t\treturn { extraHead, hydrationScript };\n\t\t}\n\n\t\tconst collection = parts[0];\n\t\tconst name = parts[1];\n\n\t\t// Check if this is a content collection\n\t\tif (!(await isContentCollection(clientDir, collection))) {\n\t\t\treturn { extraHead, hydrationScript };\n\t\t}\n\n\t\t// Try to find module path\n\t\tconst modulePath = await findContentModulePath(\n\t\t\tcollection,\n\t\t\tname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\n\t\tif (!modulePath) {\n\t\t\tstatusOverride = 404;\n\t\t\treturn { extraHead, hydrationScript, statusOverride };\n\t\t}\n\n\t\tconst key = `${collection}:${name}`;\n\t\textraHead += `\\n<link rel=\"modulepreload\" href=\"${modulePath}\" />`;\n\n\t\t// Store the module path and key for the inline loader\n\t\t// The actual loading happens via a blocking mechanism in the data script\n\t\thydrationScript += `<script>\n// Mark that this content module needs to be preloaded\n(globalThis.__REROUTE_CONTENT_PRELOAD__ ||= []).push({src:'${modulePath}',key:'${key}'});\n</script>`;\n\t} catch {\n\t\t// Return empty result on error\n\t}\n\n\treturn { extraHead, hydrationScript, statusOverride };\n}\n\nasync function isContentCollection(\n\tclientDir: string,\n\tcollection: string,\n): Promise<boolean> {\n\ttry {\n\t\t// In production (clientDir = .reroute), check for collection files instead of source dirs\n\t\tconst isProduction = clientDir.endsWith('.reroute');\n\n\t\tif (isProduction) {\n\t\t\t// Check if collection file exists in .reroute/collections/\n\t\t\tconst collectionFile = join(clientDir, 'collections', `${collection}.js`);\n\t\t\ttry {\n\t\t\t\tconst s = await stat(collectionFile);\n\t\t\t\treturn s?.isFile() ?? false;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// In development, check for content directory\n\t\tconst maybeDir = join(clientDir, 'routes', collection, 'content');\n\t\tconst s = await stat(maybeDir);\n\t\treturn typeof s?.isDirectory === 'function' ? s.isDirectory() : true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function findLatestCandidate(\n\tchunkDir: string,\n\tcandidates: string[],\n): Promise<string> {\n\tlet latest = candidates[0];\n\tlet latestM = 0;\n\n\tfor (const candidateName of candidates) {\n\t\ttry {\n\t\t\tconst s = await stat(join(chunkDir, candidateName));\n\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\tlatest = candidateName;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip inaccessible files\n\t\t}\n\t}\n\n\treturn latest;\n}\n\nasync function findContentModulePath(\n\tcollection: string,\n\tname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<string | null> {\n\t// 1. Try registry mapping\n\ttry {\n\t\tconst registryPath = join(cwd, '.reroute', 'content.ts');\n\t\tconst reg = await dynamicImport(registryPath, isWatchMode);\n\t\tconst get = reg?.getContentEntry as\n\t\t\t| ((c: string, n: string) => { module?: string } | undefined)\n\t\t\t| undefined;\n\t\tconst entry = typeof get === 'function' ? get(collection, name) : undefined;\n\t\tconst moduleUrl = (entry as Doc)?.module as string | undefined;\n\n\t\tif (moduleUrl?.endsWith('.js')) {\n\t\t\treturn moduleUrl;\n\t\t}\n\t} catch {\n\t\t// Registry unavailable\n\t}\n\n\t// 2. Try newest chunk\n\ttry {\n\t\tconst chunkDir = join(cwd, '.reroute', 'chunks', collection);\n\t\tconst files = await readdir(chunkDir);\n\t\tconst candidates = files.filter(\n\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t);\n\n\t\tif (candidates.length) {\n\t\t\tconst latest = await findLatestCandidate(chunkDir, candidates);\n\t\t\treturn `/${join('.reroute', 'chunks', collection, latest).replace(/\\\\+/g, '/')}`;\n\t\t}\n\t} catch {\n\t\t// Chunk directory unavailable\n\t}\n\n\t// 3. Try source files\n\ttry {\n\t\tconst tsx = join(clientDir, 'routes', collection, 'content', `${name}.tsx`);\n\t\tconst ts = join(clientDir, 'routes', collection, 'content', `${name}.ts`);\n\n\t\tif (await Bun.file(tsx).exists()) {\n\t\t\treturn `/${join('routes', collection, 'content', `${name}.tsx`).replace(/\\\\+/g, '/')}`;\n\t\t}\n\t\tif (await Bun.file(ts).exists()) {\n\t\t\treturn `/${join('routes', collection, 'content', `${name}.ts`).replace(/\\\\+/g, '/')}`;\n\t\t}\n\t} catch {\n\t\t// Source files unavailable\n\t}\n\n\treturn null;\n}\n\n/**\n * Reset SSR access tracking for a new request\n */\nexport function resetSSRAccessTracking(): void {\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_SSR_ACCESSED__ = {};\n\t} catch {\n\t\t// Ignore errors in restricted environments\n\t}\n}\n\n/**\n * Create bundle preload link\n */\nexport function createBundlePreload(bundleUrl: string): string {\n\ttry {\n\t\tif (typeof bundleUrl === 'string' && bundleUrl.endsWith('.js')) {\n\t\t\treturn `\\n<link rel=\"modulepreload\" href=\"${bundleUrl}\" />`;\n\t\t}\n\t} catch {\n\t\t// Return empty on error\n\t}\n\treturn '';\n}\n",
24
24
  "export { createCollectionScript, processCollections } from './collections';\nexport { createDataScript, duplicateQueryParamData } from './data';\nexport { escapeJsonForScript } from './escape';\nexport { createFeedsScript, createLlmsScript } from './feeds';\n",
25
25
  "import type { Span } from '@opentelemetry/api';\nimport { withParentSpan, withSpan } from 'reroute-js/telemetry/server';\nimport type { OGImageOptions } from '../../config';\nimport { loadCollections, setGlobalCollections } from './collections';\nimport { computeSSRData, setGlobalSSRData } from './compute';\nimport { extractPageMetadata } from './metadata';\nimport {\n\tcreateBundlePreload,\n\tpreloadContentModule,\n\tresetSSRAccessTracking,\n} from './preload';\nimport {\n\tcreateCollectionScript,\n\tcreateDataScript,\n\tcreateFeedsScript,\n\tcreateLlmsScript,\n\tprocessCollections,\n} from './scripts';\nimport { seedSSRModuleForPath } from './seed';\nimport { inlineTailwindCSS } from './styles';\nimport type { ComputeResult } from './types';\n\n/**\n * Common SSR options shared between render and stream modes\n */\ntype SSRSetupOptions = {\n\tpathname: string;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\tcachedCollections?: Record<string, unknown[]>;\n\tcachedTailwindCSS?: string;\n\tdebug?: boolean;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n\tparentSpan?: Span | null;\n\t/** Request headers from the incoming HTTP request */\n\theaders?: Record<string, string>;\n};\n\n/**\n * Result of SSR setup phase\n */\ntype SSRSetupResult = {\n\tssrData: Record<string, unknown>;\n\tssrError?: string;\n\tstatusContainer: { value: number | undefined };\n\tbyCollectionForSSR: Record<string, unknown[]>;\n\tbundlePreload: string;\n\tpreloadExtraHead: string;\n\tpreloadHydrationScript: string;\n\tpreloadStatusOverride?: number;\n\tinlineStyleTag: string;\n\tmetadataResult: {\n\t\tperPageHead: string;\n\t\tpageLang?: string;\n\t\tstatusOverride?: number;\n\t};\n\tpending?: Promise<void>;\n};\n\n/**\n * Perform common SSR setup steps shared between render and stream modes.\n * This includes seeding modules, computing data, loading collections, and preloading.\n */\nasync function performSSRSetup(\n\toptions: SSRSetupOptions,\n\tstreaming = false,\n): Promise<SSRSetupResult> {\n\tconst { pathname } = options;\n\n\t// Add a global timeout for SSR setup to prevent indefinite hangs\n\t// In streaming mode, we want setup to complete quickly so we can start sending HTML\n\tconst setupTimeout = streaming ? 10000 : 30000; // 10s for streaming, 30s otherwise\n\tconst timeoutPromise = new Promise<never>((_, reject) => {\n\t\tsetTimeout(() => {\n\t\t\treject(\n\t\t\t\tnew Error(\n\t\t\t\t\t`[reroute] SSR setup timeout after ${setupTimeout}ms for ${pathname}`,\n\t\t\t\t),\n\t\t\t);\n\t\t}, setupTimeout);\n\t});\n\n\ttry {\n\t\treturn await Promise.race([\n\t\t\twithParentSpan(options.parentSpan, () =>\n\t\t\t\tperformSSRSetupInternal(options, streaming),\n\t\t\t),\n\t\t\ttimeoutPromise,\n\t\t]);\n\t} catch (error) {\n\t\tconsole.error('[reroute] SSR setup error:', error);\n\t\t// Return minimal setup result to allow page to render with fallback\n\t\treturn {\n\t\t\tssrData: {},\n\t\t\tssrError: error instanceof Error ? error.message : String(error),\n\t\t\tstatusContainer: { value: 500 },\n\t\t\tbyCollectionForSSR: {},\n\t\t\tbundlePreload: '',\n\t\t\tpreloadExtraHead: '',\n\t\t\tpreloadHydrationScript: '',\n\t\t\tinlineStyleTag: '',\n\t\t\tmetadataResult: { perPageHead: '' },\n\t\t};\n\t}\n}\n\n/**\n * Internal SSR setup implementation (wrapped with timeout above)\n */\nasync function performSSRSetupInternal(\n\toptions: SSRSetupOptions,\n\tstreaming: boolean,\n): Promise<SSRSetupResult> {\n\tconst debug = options.debug ?? false;\n\tconst t0 = debug ? performance.now() : 0;\n\tconst {\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\tmaxAge = 0,\n\t\tsearchParams,\n\t\togConfig,\n\t} = options;\n\n\t// Note: We don't reset SSR globals here because multiple requests may run concurrently.\n\t// Instead, we use pathname-scoped serialization to ensure each response only includes\n\t// its own data (see createContentHtmlScript and createSSRExportsScript).\n\n\t// 1. Seed content modules for SSR rendering\n\tawait withSpan('ssr.seed', async (span) => {\n\t\tspan.setAttribute('pathname', pathname);\n\t\tspan.setAttribute('streaming', streaming);\n\t\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - seedModule: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t});\n\n\t// 2. Reset SSR access tracking and create bundle preload\n\tresetSSRAccessTracking();\n\tconst bundlePreload = createBundlePreload(bundleUrl);\n\n\t// 3. Preload content module\n\tconst preloadResult = await withSpan('ssr.preload', async (span) => {\n\t\tspan.setAttribute('pathname', pathname);\n\t\tconst result = await preloadContentModule(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\t\tspan.setAttribute('has_module', !!result.modulePath);\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - preloadContent: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t\treturn result;\n\t});\n\n\t// 4. Compute SSR data\n\tconst computeResult: ComputeResult = await withSpan(\n\t\t'ssr.compute.data',\n\t\tasync (span) => {\n\t\t\tspan.setAttribute('pathname', pathname);\n\t\t\tspan.setAttribute('streaming', streaming);\n\t\t\tconst result = await computeSSRData(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tcwd,\n\t\t\t\tisWatchMode,\n\t\t\t\t{ streaming, maxAge, headers: options.headers },\n\t\t\t\tsearchParams,\n\t\t\t);\n\t\t\tspan.setAttribute('has_error', !!result.error);\n\t\t\tspan.setAttribute('has_data', Object.keys(result.data).length > 0);\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - computeSSRData: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn result;\n\t\t},\n\t);\n\n\tsetGlobalSSRData(computeResult.data);\n\n\t// 5. Load content collections (use cached if available)\n\tconst usingCachedCollections = !!options.cachedCollections;\n\tconst byCollectionForSSR = await withSpan(\n\t\t'ssr.load.collections',\n\t\tasync (span) => {\n\t\t\tspan.setAttribute('pathname', pathname);\n\t\t\tspan.setAttribute('cached', usingCachedCollections);\n\t\t\tconst collections = options.cachedCollections\n\t\t\t\t? options.cachedCollections\n\t\t\t\t: await loadCollections(cwd, isWatchMode);\n\t\t\tspan.setAttribute('collection_count', Object.keys(collections).length);\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - loadCollections (cached: ${usingCachedCollections}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn collections;\n\t\t},\n\t);\n\tsetGlobalCollections(byCollectionForSSR);\n\n\t// 6. Inline Tailwind CSS (use cached if available)\n\tconst usingCachedCSS = !!options.cachedTailwindCSS;\n\tconst inlineStyleTag = await withSpan('ssr.inline.css', async (span) => {\n\t\tconst css = options.cachedTailwindCSS\n\t\t\t? options.cachedTailwindCSS\n\t\t\t: await inlineTailwindCSS(clientDir, !streaming, isWatchMode);\n\t\tspan.setAttributes({\n\t\t\t'reroute.cached': usingCachedCSS,\n\t\t\t'reroute.css.size': css.length,\n\t\t});\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - inlineTailwindCSS (cached: ${usingCachedCSS}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t\treturn css;\n\t});\n\n\t// 7. Determine initial status override\n\tlet statusOverride = preloadResult.statusOverride;\n\tif (computeResult.statusContainer.value !== undefined) {\n\t\tstatusOverride = computeResult.statusContainer.value;\n\t}\n\n\t// 8. Extract page metadata (with SSR data for dynamic head tags)\n\tconst metadataResult = await withSpan(\n\t\t'ssr.extract.metadata',\n\t\tasync (span) => {\n\t\t\tconst result = await extractPageMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tcwd,\n\t\t\t\tisWatchMode,\n\t\t\t\tstatusOverride,\n\t\t\t\togConfig,\n\t\t\t\toptions.baseUrl,\n\t\t\t\toptions.autoCanonical,\n\t\t\t\tcomputeResult.data,\n\t\t\t);\n\t\t\tspan.setAttributes({\n\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t'reroute.metadata.exists': !!result.perPageHead,\n\t\t\t});\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - extractMetadata: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn result;\n\t\t},\n\t);\n\n\treturn {\n\t\tssrData: computeResult.data,\n\t\tssrError: computeResult.error,\n\t\tstatusContainer: computeResult.statusContainer,\n\t\tbyCollectionForSSR,\n\t\tbundlePreload,\n\t\tpreloadExtraHead: preloadResult.extraHead,\n\t\tpreloadHydrationScript: preloadResult.hydrationScript,\n\t\tpreloadStatusOverride: preloadResult.statusOverride,\n\t\tinlineStyleTag,\n\t\tmetadataResult,\n\t\tpending: computeResult.pending,\n\t};\n}\n\n/**\n * Generate hydration scripts for collections that were accessed during SSR.\n */\nfunction generateCollectionScripts(\n\tbyCollectionForSSR: Record<string, unknown[]>,\n): string {\n\ttry {\n\t\tconst g = globalThis as unknown as { __REROUTE_SSR_ACCESSED__?: unknown };\n\t\tconst acc = g.__REROUTE_SSR_ACCESSED__;\n\n\t\tif (acc) {\n\t\t\tconst { subset, partial } = processCollections(acc, byCollectionForSSR);\n\t\t\tif (Object.keys(subset).length > 0) {\n\t\t\t\treturn createCollectionScript(subset, partial);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Ignore errors\n\t}\n\treturn '';\n}\n\n/**\n * Generate all hydration scripts for SSR\n */\nfunction generateHydrationScripts(\n\tssrData: Record<string, unknown>,\n\tisWatchMode: boolean,\n\tssrError?: string,\n\tcollectionScripts = '',\n\tpreloadScript = '',\n\tbundleUrl = '',\n\tpathname = '',\n\tbrowserTelemetryConfig?: Record<string, unknown>,\n\ttraceContext?: { traceparent?: string; tracestate?: string },\n): string {\n\tlet scripts = preloadScript;\n\n\t// Add collection scripts\n\tscripts += collectionScripts;\n\n\t// Add SSR data script (pathname is used to scope content HTML and exports to current request)\n\tscripts += createDataScript(\n\t\tssrData,\n\t\tisWatchMode ? ssrError : undefined,\n\t\tpathname,\n\t\tbrowserTelemetryConfig,\n\t\ttraceContext,\n\t);\n\n\t// Add feeds and llms scripts\n\tscripts += createFeedsScript();\n\tscripts += createLlmsScript();\n\n\t// Add bundle script\n\tif (bundleUrl) {\n\t\tscripts += `<script type=\"module\" src=\"${bundleUrl}\"></script>`;\n\t}\n\n\t// Add dev watcher in watch mode\n\tif (isWatchMode) {\n\t\tscripts += `<script type=\"module\" src=\"/__reroute_watch.js\"></script>`;\n\t}\n\n\treturn scripts;\n}\n\nexport type { SSRSetupOptions, SSRSetupResult };\nexport { performSSRSetup, generateCollectionScripts, generateHydrationScripts };\n",
@@ -44,6 +44,6 @@
44
44
  "export * from './src/server';\n"
45
45
  ],
46
46
  "mappings": "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",
47
- "debugId": "DB7B4781593AFBD864756E2164756E21",
47
+ "debugId": "0778C1F9C1DDF8ED64756E2164756E21",
48
48
  "names": []
49
49
  }
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * reroute-js v0.40.0
2
+ * reroute-js v0.40.2
3
3
  *
4
4
  * @license MIT
5
- * @copyright 2025 stewones <hi@stewan.io>
5
+ * @copyright 2026 stewones <hi@stewan.io>
6
6
  * @see https://github.com/stewones/reroute
7
7
  *
8
8
  * Built with Bun <3