reroute-js 0.20.2 → 0.20.3
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.
- package/cli/bin.d.ts +1 -1
- package/cli/bin.js +238 -50
- package/cli/bin.js.map +14 -14
- package/cli/index.d.ts +1 -1
- package/cli/index.js +4 -4
- package/cli/index.js.map +1 -1
- package/cli/src/cli.d.ts +1 -1
- package/cli/src/commands/analyze.d.ts +1 -1
- package/cli/src/commands/build.d.ts +2 -1
- package/cli/src/commands/build.d.ts.map +1 -1
- package/cli/src/commands/dev.d.ts +1 -1
- package/cli/src/commands/gen.d.ts +1 -1
- package/cli/src/commands/gen.d.ts.map +1 -1
- package/cli/src/commands/index.d.ts +1 -1
- package/cli/src/commands/init.d.ts +1 -1
- package/cli/src/commands/lib/command.d.ts +1 -1
- package/cli/src/commands/lib/env.d.ts +1 -1
- package/cli/src/commands/lib/index.d.ts +1 -1
- package/cli/src/commands/lib/log.d.ts +1 -1
- package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
- package/cli/src/commands/lib/markdown/index.d.ts +1 -1
- package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
- package/cli/src/commands/lib/production.d.ts +1 -1
- package/cli/src/commands/lib/server.d.ts +1 -1
- package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
- package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
- package/cli/src/commands/lib/tailwind.d.ts +1 -1
- package/cli/src/commands/lib/version.d.ts +1 -1
- package/cli/src/commands/og.d.ts +1 -1
- package/cli/src/commands/start.d.ts +1 -1
- package/cli/src/index.d.ts +1 -1
- package/core/index.d.ts +1 -1
- package/core/index.js +150 -40
- package/core/index.js.map +12 -12
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/config.d.ts +1 -1
- package/core/src/content/discovery.d.ts +1 -1
- package/core/src/content/index.d.ts +1 -1
- package/core/src/content/metadata.d.ts +1 -1
- package/core/src/index.d.ts +1 -1
- package/core/src/llms/extractor.d.ts +1 -1
- package/core/src/llms/formatter.d.ts +1 -1
- package/core/src/llms/full-generator.d.ts +1 -1
- package/core/src/llms/index-generator.d.ts +1 -1
- package/core/src/llms/index-generator.d.ts.map +1 -1
- package/core/src/llms/index.d.ts +1 -1
- package/core/src/og/discovery.d.ts +1 -1
- package/core/src/og/index.d.ts +1 -1
- package/core/src/og/meta.d.ts +1 -1
- package/core/src/og/render.d.ts +1 -1
- package/core/src/og/types.d.ts +1 -1
- package/core/src/robots/discovery.d.ts +1 -1
- package/core/src/robots/discovery.d.ts.map +1 -1
- package/core/src/robots/generator.d.ts +1 -1
- package/core/src/robots/index.d.ts +1 -1
- package/core/src/robots/policies.d.ts +1 -1
- package/core/src/rss/discovery.d.ts +1 -1
- package/core/src/rss/discovery.d.ts.map +1 -1
- package/core/src/rss/generator.d.ts +1 -1
- package/core/src/rss/index.d.ts +1 -1
- package/core/src/sitemap/discovery.d.ts +1 -1
- package/core/src/sitemap/discovery.d.ts.map +1 -1
- package/core/src/sitemap/generator.d.ts +1 -1
- package/core/src/sitemap/index.d.ts +1 -1
- package/core/src/ssr/index.d.ts +1 -1
- package/core/src/ssr/lib/cache.d.ts +1 -1
- package/core/src/ssr/lib/collections.d.ts +1 -1
- package/core/src/ssr/lib/compression.d.ts +1 -1
- package/core/src/ssr/lib/compute/content.d.ts +1 -1
- package/core/src/ssr/lib/compute/index.d.ts +1 -1
- package/core/src/ssr/lib/compute/index.d.ts.map +1 -1
- package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
- package/core/src/ssr/lib/compute/layouts.d.ts.map +1 -1
- package/core/src/ssr/lib/compute/routes.d.ts +1 -1
- package/core/src/ssr/lib/compute/routes.d.ts.map +1 -1
- package/core/src/ssr/lib/data.d.ts +1 -1
- package/core/src/ssr/lib/data.d.ts.map +1 -1
- package/core/src/ssr/lib/html.d.ts +1 -1
- package/core/src/ssr/lib/imports.d.ts +1 -1
- package/core/src/ssr/lib/index.d.ts +1 -1
- package/core/src/ssr/lib/layouts.d.ts +1 -1
- package/core/src/ssr/lib/metadata.d.ts +1 -1
- package/core/src/ssr/lib/mime.d.ts +1 -1
- package/core/src/ssr/lib/modules.d.ts +1 -1
- package/core/src/ssr/lib/path.d.ts +1 -1
- package/core/src/ssr/lib/preload.d.ts +1 -1
- package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
- package/core/src/ssr/lib/scripts/data.d.ts +1 -1
- package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
- package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
- package/core/src/ssr/lib/scripts/index.d.ts +1 -1
- package/core/src/ssr/lib/seed.d.ts +1 -1
- package/core/src/ssr/lib/setup.d.ts +1 -1
- package/core/src/ssr/lib/styles.d.ts +1 -1
- package/core/src/ssr/lib/styles.d.ts.map +1 -1
- package/core/src/ssr/lib/template.d.ts +1 -1
- package/core/src/ssr/lib/types.d.ts +1 -1
- package/core/src/ssr/render.d.ts +1 -1
- package/core/src/ssr/stream.d.ts +1 -1
- package/core/src/ssr/stream.d.ts.map +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +170 -41
- package/elysia/index.js.map +13 -13
- package/elysia/src/index.d.ts +1 -1
- package/elysia/src/libs/cache.d.ts +1 -1
- package/elysia/src/libs/caching.d.ts +1 -1
- package/elysia/src/libs/http.d.ts +1 -1
- package/elysia/src/libs/image.d.ts +1 -1
- package/elysia/src/libs/index.d.ts +1 -1
- package/elysia/src/libs/llms.d.ts +1 -1
- package/elysia/src/libs/response.d.ts +1 -1
- package/elysia/src/libs/serving.d.ts +1 -1
- package/elysia/src/plugin.d.ts +1 -1
- package/elysia/src/plugin.d.ts.map +1 -1
- package/elysia/src/routes/artifacts.d.ts +1 -1
- package/elysia/src/routes/content.d.ts +1 -1
- package/elysia/src/routes/image.d.ts +1 -1
- package/elysia/src/routes/index.d.ts +1 -1
- package/elysia/src/routes/internal.d.ts +1 -1
- package/elysia/src/routes/llms.d.ts +1 -1
- package/elysia/src/routes/og.d.ts +1 -1
- package/elysia/src/routes/redirects.d.ts +1 -1
- package/elysia/src/routes/robots.d.ts +1 -1
- package/elysia/src/routes/rss.d.ts +1 -1
- package/elysia/src/routes/search.d.ts +1 -1
- package/elysia/src/routes/sitemap.d.ts +1 -1
- package/elysia/src/routes/ssr.d.ts +1 -1
- package/elysia/src/routes/static.d.ts +1 -1
- package/elysia/src/types.d.ts +1 -1
- package/package.json +1 -1
- package/react/index.d.ts +1 -1
- package/react/index.js +2 -2
- package/react/index.js.map +1 -1
- package/react/src/components/ClientOnly.d.ts +1 -1
- package/react/src/components/ContentRoute.d.ts +1 -1
- package/react/src/components/Image.d.ts +1 -1
- package/react/src/components/LazyRoute.d.ts +1 -1
- package/react/src/components/Link.d.ts +1 -1
- package/react/src/components/Markdown.d.ts +1 -1
- package/react/src/components/Outlet.d.ts +1 -1
- package/react/src/components/index.d.ts +1 -1
- package/react/src/hooks/index.d.ts +1 -1
- package/react/src/hooks/useContent.d.ts +1 -1
- package/react/src/hooks/useData.d.ts +1 -1
- package/react/src/hooks/useFeed.d.ts +1 -1
- package/react/src/hooks/useLayoutData.d.ts +1 -1
- package/react/src/hooks/useLlms.d.ts +1 -1
- package/react/src/hooks/useNavigate.d.ts +1 -1
- package/react/src/hooks/useParams.d.ts +1 -1
- package/react/src/hooks/useRouter.d.ts +1 -1
- package/react/src/hooks/useSearch.d.ts +1 -1
- package/react/src/hooks/useSearchParams.d.ts +1 -1
- package/react/src/hooks/useToc.d.ts +1 -1
- package/react/src/index.d.ts +1 -1
- package/react/src/lib/collection.d.ts +1 -1
- package/react/src/lib/content.d.ts +1 -1
- package/react/src/lib/head.d.ts +1 -1
- package/react/src/lib/index.d.ts +1 -1
- package/react/src/lib/lazy-route.d.ts +1 -1
- package/react/src/lib/route-loader.d.ts +1 -1
- package/react/src/providers/ContentProvider.d.ts +1 -1
- package/react/src/providers/RerouteProvider.d.ts +1 -1
- package/react/src/providers/RouterProvider.d.ts +1 -1
- package/react/src/providers/index.d.ts +1 -1
- package/react/src/types/any.d.ts +1 -1
- package/react/src/types/index.d.ts +1 -1
- package/react/src/types/router.d.ts +1 -1
package/core/index.js.map
CHANGED
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"import { brotliCompressSync } from 'node:zlib';\nimport { isCompressible } from './mime';\nimport type { CompressionResult, StreamCompressionResult } from './types';\n\nexport function acceptsGzip(acceptEncoding?: string): boolean {\n\treturn Boolean(acceptEncoding && /gzip/i.test(acceptEncoding));\n}\n\nexport function acceptsBrotli(acceptEncoding?: string): boolean {\n\treturn Boolean(acceptEncoding && /\\bbr\\b/i.test(acceptEncoding));\n}\n\nexport function toBytes(\n\tinput: string | Uint8Array,\n): Uint8Array<ArrayBuffer> | string {\n\treturn typeof input === 'string'\n\t\t? new TextEncoder().encode(input)\n\t\t: (input as Uint8Array<ArrayBuffer>);\n}\n\nexport function gzipIfAccepted(\n\tbody: string | Uint8Array,\n\tcontentType: string,\n\tacceptEncoding?: string,\n): CompressionResult {\n\tconst extraHeaders: Record<string, string> = {};\n\n\tif (isCompressible(contentType)) {\n\t\t// Prefer Brotli if supported\n\t\tif (acceptsBrotli(acceptEncoding)) {\n\t\t\ttry {\n\t\t\t\tconst compressed = brotliCompressSync(toBytes(body) as Uint8Array);\n\t\t\t\textraHeaders['Content-Encoding'] = 'br';\n\t\t\t\textraHeaders.Vary = 'Accept-Encoding';\n\t\t\t\treturn { body: compressed, extraHeaders };\n\t\t\t} catch {\n\t\t\t\t// Fallthrough to gzip\n\t\t\t}\n\t\t}\n\n\t\t// Fallback to gzip\n\t\tif (acceptsGzip(acceptEncoding)) {\n\t\t\ttry {\n\t\t\t\tconst compressed = Bun.gzipSync(toBytes(body));\n\t\t\t\textraHeaders['Content-Encoding'] = 'gzip';\n\t\t\t\textraHeaders.Vary = 'Accept-Encoding';\n\t\t\t\treturn { body: compressed, extraHeaders };\n\t\t\t} catch {\n\t\t\t\t// Return uncompressed\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { body, extraHeaders };\n}\n\n/**\n * Compress stream if accepted (currently not supported in Bun)\n */\nexport function compressStreamIfAccepted(\n\tstream: ReadableStream<Uint8Array>,\n\tcontentType: string,\n\t_acceptEncoding?: string,\n): StreamCompressionResult {\n\tconst extraHeaders: Record<string, string> = {};\n\n\tif (!isCompressible(contentType)) {\n\t\treturn { stream, extraHeaders };\n\t}\n\n\t// Streaming compression not yet supported in Bun\n\treturn { stream, extraHeaders };\n}\n",
|
|
13
13
|
"import { ssrCache, statusCache } from '../cache';\nimport { toPromise } from '../imports';\nimport type { ComputeOptions, Doc } from '../types';\n\ntype ContentComputeResult = {\n\tdata: Record<string, unknown>;\n\terror?: string;\n\tstatusOverride?: number;\n\tpendingTasks: Promise<unknown>[];\n};\n\n/**\n * Compute SSR data for content pages (e.g., /blog/my-post).\n * Content pages export ssr.data via __REROUTE_SSR_EXPORTS__.\n *\n * @param sharedSsrData - In streaming mode, the shared ssrData object that gets passed to React.\n * Promise resolution callbacks must update THIS object directly.\n */\nexport async function computeContentData(\n\tpathname: string,\n\toptions: ComputeOptions,\n\tsearchParams?: URLSearchParams,\n\tsharedSsrData?: Record<string, unknown>,\n): Promise<ContentComputeResult> {\n\tconst streaming = options.streaming === true;\n\t// In streaming mode, use the shared ssrData object so Promise callbacks update the right place\n\tconst ssrData: Record<string, unknown> =\n\t\tstreaming && sharedSsrData ? sharedSsrData : {};\n\tconst pendingTasks: Promise<unknown>[] = [];\n\tlet error: string | undefined;\n\tlet statusOverride: number | undefined;\n\n\tconst maxAge = options.maxAge || 0;\n\tconst maxAgeMs = maxAge * 1000;\n\n\tconst storeResult = (key: string, task: Promise<unknown>) => {\n\t\tpendingTasks.push(\n\t\t\ttask\n\t\t\t\t.then((value) => {\n\t\t\t\t\tssrData[key] = value;\n\t\t\t\t})\n\t\t\t\t.catch(() => {}),\n\t\t);\n\t};\n\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) {\n\t\t\treturn { data: ssrData, pendingTasks };\n\t\t}\n\n\t\tconst g = globalThis as Doc;\n\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t| { ssr?: { data?: (ctx: Doc) => unknown | Promise<unknown> } }\n\t\t\t| undefined;\n\n\t\tconst dataFn = (exp as Doc)?.ssr?.data as\n\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t| undefined;\n\n\t\tif (typeof dataFn !== 'function') {\n\t\t\treturn { data: ssrData, pendingTasks };\n\t\t}\n\n\t\tconst cacheKey = `content:${pathname}:${parts[1]}`;\n\t\tconst statusCacheKey = `status:${cacheKey}`;\n\n\t\t// Check status cache first\n\t\tconst cachedStatus =\n\t\t\tmaxAgeMs > 0 ? statusCache.get<number>(statusCacheKey) : undefined;\n\t\tif (cachedStatus && cachedStatus !== 200 && !statusOverride) {\n\t\t\tstatusOverride = cachedStatus;\n\t\t}\n\n\t\t// Check data cache\n\t\tconst cached = maxAgeMs > 0 ? ssrCache.get(cacheKey) : undefined;\n\n\t\tif (cached !== undefined) {\n\t\t\tssrData[pathname] = cached;\n\t\t\treturn { data: ssrData, statusOverride, pendingTasks };\n\t\t}\n\n\t\t// Execute data function\n\t\tconst set = { status: 200 };\n\t\tconst task = toPromise(\n\t\t\tdataFn({\n\t\t\t\tpathname,\n\t\t\t\tparams: { name: parts[1] },\n\t\t\t\tset,\n\t\t\t\tsearchParams,\n\t\t\t} as Doc),\n\t\t).catch((err) => {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\terror = `SSR data() failed: ${msg}`;\n\t\t\tconsole.error(`[reroute] ${error}`);\n\t\t\tthrow err;\n\t\t});\n\n\t\tif (streaming) {\n\t\t\tssrData[pathname] = task;\n\t\t\tstoreResult(\n\t\t\t\tpathname,\n\t\t\t\ttask.then((value) => {\n\t\t\t\t\tif (set.status !== 200 && !statusOverride) {\n\t\t\t\t\t\tstatusOverride = set.status;\n\t\t\t\t\t}\n\t\t\t\t\tif (maxAgeMs > 0) {\n\t\t\t\t\t\tstatusCache.set(statusCacheKey, set.status, maxAgeMs);\n\t\t\t\t\t}\n\t\t\t\t\tif (maxAgeMs > 0 && set.status === 200) {\n\t\t\t\t\t\tssrCache.set(cacheKey, value, maxAgeMs);\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tconst result = await task;\n\t\t\tif (set.status !== 200 && !statusOverride) {\n\t\t\t\tstatusOverride = set.status;\n\t\t\t}\n\t\t\tssrData[pathname] = result;\n\t\t\tif (maxAgeMs > 0) {\n\t\t\t\tstatusCache.set(statusCacheKey, set.status, maxAgeMs);\n\t\t\t}\n\t\t\tif (maxAgeMs > 0 && set.status === 200) {\n\t\t\t\tssrCache.set(cacheKey, result, maxAgeMs);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Return what we have on error\n\t}\n\n\treturn { data: ssrData, error, statusOverride, pendingTasks };\n}\n",
|
|
14
14
|
"import type { Doc, LayoutDef } from './types';\n\n/**\n * Filter and sort layouts that match a given pathname.\n * Layouts are sorted by depth (root → nested) for hierarchical processing.\n */\nexport function getMatchingLayouts(\n\tpathname: string,\n\tlayouts: Doc[] | undefined,\n): LayoutDef[] {\n\tif (!Array.isArray(layouts)) return [];\n\n\treturn layouts\n\t\t.filter((layout: Doc) => {\n\t\t\tconst pattern = String(layout?.pattern || '/');\n\t\t\tif (pattern === '/') return true;\n\t\t\treturn pathname.startsWith(pattern);\n\t\t})\n\t\t.sort((a: Doc, b: Doc) => {\n\t\t\tconst aDepth = getPatternDepth(a?.pattern);\n\t\t\tconst bDepth = getPatternDepth(b?.pattern);\n\t\t\treturn aDepth - bDepth;\n\t\t}) as LayoutDef[];\n}\n\n/**\n * Calculate the depth of a route pattern (number of path segments)\n */\nexport function getPatternDepth(pattern: unknown): number {\n\treturn String(pattern || '/')\n\t\t.split('/')\n\t\t.filter(Boolean).length;\n}\n\n/**\n * Generate a cache key for layout data\n */\nexport function createLayoutCacheKey(\n\tpattern: string,\n\tpathname: string,\n): string {\n\treturn `layout:${pattern}:${pathname}`;\n}\n\n/**\n * Generate the SSR data key for a layout\n */\nexport function createLayoutDataKey(pattern: string): string {\n\treturn `__layout:${pattern}`;\n}\n",
|
|
15
|
-
"import { ssrCache, statusCache } from '../cache';\nimport { dynamicImport, toPromise } from '../imports';\nimport {\n\tcreateLayoutCacheKey,\n\tcreateLayoutDataKey,\n\tgetMatchingLayouts,\n} from '../layouts';\nimport { join } from '../path';\nimport type { ComputeOptions, Doc } from '../types';\n\ntype LayoutComputeResult = {\n\tdata: Record<string, unknown>;\n\tstatusOverride?: number;\n\tpendingTasks: Promise<unknown>[];\n};\n\n/**\n * Compute SSR data from all matching layouts for a pathname.\n * Executes layout ssr.data() functions in hierarchical order (root → nested).\n *\n * @param sharedSsrData - In streaming mode, the shared ssrData object that gets passed to React.\n * Promise resolution callbacks must update THIS object directly.\n */\nexport async function computeLayoutData(\n\tpathname: string,\n\tclientDir: string,\n\t_cwd: string,\n\tisWatchMode: boolean,\n\toptions: ComputeOptions,\n\tsearchParams?: URLSearchParams,\n\troutesModule?: Doc,\n\tsharedSsrData?: Record<string, unknown>,\n): Promise<LayoutComputeResult> {\n\tconst streaming = options.streaming === true;\n\t// In streaming mode, use the shared ssrData object so Promise callbacks update the right place\n\tconst ssrData: Record<string, unknown> =\n\t\tstreaming && sharedSsrData ? sharedSsrData : {};\n\tconst pendingTasks: Promise<unknown>[] = [];\n\tlet statusOverride: number | undefined;\n\n\tconst maxAge = options.maxAge || 0;\n\tconst maxAgeMs = maxAge * 1000;\n\n\tconst storeResult = (key: string, task: Promise<unknown>) => {\n\t\tpendingTasks.push(\n\t\t\ttask\n\t\t\t\t.then((value) => {\n\t\t\t\t\tssrData[key] = value;\n\t\t\t\t})\n\t\t\t\t.catch(() => {}),\n\t\t);\n\t};\n\n\ttry {\n\t\tconst layouts = routesModule?.layouts as Doc[] | undefined;\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tif (typeof layout?.path !== 'string') continue;\n\n\t\t\ttry {\n\t\t\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\t\t\
|
|
16
|
-
"import { ssrCache, statusCache } from '../cache';\nimport { dynamicImport, isThenable, toPromise } from '../imports';\nimport { join } from '../path';\nimport type { ComputeOptions, Doc, RouteMatch } from '../types';\n\ntype RouteComputeResult = {\n\tdata: Record<string, unknown>;\n\terror?: string;\n\tstatusOverride?: number;\n\tpendingTasks: Promise<unknown>[];\n};\n\n/**\n * Compute SSR data for route-level ssr.data() functions.\n * Handles both streaming and non-streaming modes with promise flattening.\n *\n * @param sharedSsrData - In streaming mode, the shared ssrData object that gets passed to React.\n * Promise resolution callbacks must update THIS object directly.\n */\nexport async function computeRouteData(\n\tpathname: string,\n\tclientDir: string,\n\t_cwd: string,\n\tisWatchMode: boolean,\n\toptions: ComputeOptions,\n\tsearchParams?: URLSearchParams,\n\troutesModule?: Doc,\n\tsharedSsrData?: Record<string, unknown>,\n): Promise<RouteComputeResult> {\n\tconst streaming = options.streaming === true;\n\t// In streaming mode, use the shared ssrData object so Promise callbacks update the right place\n\t// In non-streaming mode, use a local object that gets copied later\n\tconst ssrData: Record<string, unknown> =\n\t\tstreaming && sharedSsrData ? sharedSsrData : {};\n\tconst pendingTasks: Promise<unknown>[] = [];\n\tlet error: string | undefined;\n\tlet statusOverride: number | undefined;\n\n\tconst maxAge = options.maxAge || 0;\n\tconst maxAgeMs = maxAge * 1000;\n\n\tconst storeResult = (key: string, task: Promise<unknown>) => {\n\t\tpendingTasks.push(\n\t\t\ttask\n\t\t\t\t.then((value) => {\n\t\t\t\t\tssrData[key] = value;\n\t\t\t\t})\n\t\t\t\t.catch(() => {}),\n\t\t);\n\t};\n\n\ttry {\n\t\t// Strip query string for route matching\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match: RouteMatch =\n\t\t\ttypeof routesModule?.matchRoute === 'function'\n\t\t\t\t? routesModule.matchRoute(pathnameOnly)\n\t\t\t\t: null;\n\n\t\tconst route = match?.route;\n\t\tconst params = match?.params || {};\n\n\t\tif (!route || typeof route.path !== 'string') {\n\t\t\treturn { data: ssrData, pendingTasks };\n\t\t}\n\n\t\tconst abs = join(clientDir, 'routes', String(route.path));\n\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\
|
|
17
|
-
"import { dynamicImport } from '../imports';\nimport { join } from '../path';\nimport type { ComputeOptions, ComputeResult, Doc } from '../types';\nimport { computeContentData } from './content';\nimport { computeLayoutData, mergeLayoutData } from './layouts';\nimport { computeRouteData } from './routes';\n\nexport { computeContentData } from './content';\nexport { computeLayoutData, mergeLayoutData } from './layouts';\nexport { computeRouteData } from './routes';\n\n/**\n * Compute SSR data by executing ssr.data() from layouts, routes, and content modules.\n * Orchestrates the full data computation pipeline for a request.\n */\nexport async function computeSSRData(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\toptions: ComputeOptions = {},\n\tsearchParams?: URLSearchParams,\n): Promise<ComputeResult> {\n\t// CRITICAL: This is the SHARED ssrData object that gets passed to React.\n\t// All compute functions must update THIS object directly (not copies)\n\t// so that Promise resolution callbacks update the correct object.\n\tconst ssrData: Record<string, unknown> = {};\n\tlet error: string | undefined;\n\tconst statusContainer = { value: undefined as number | undefined };\n\tconst allPendingTasks: Promise<unknown>[] = [];\n\tconst streaming = options.streaming === true;\n\n\t// Load routes module once for reuse\n\tlet routesModule: Doc;\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\troutesModule = await dynamicImport(routesPath, isWatchMode);\n\t} catch {\n\t\treturn {\n\t\t\tdata: ssrData,\n\t\t\terror: 'Failed to load routes module',\n\t\t\tstatusContainer,\n\t\t};\n\t}\n\n\t// 1. Compute layout data hierarchically\n\ttry {\n\t\tconst layoutResult = await computeLayoutData(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\toptions,\n\t\t\tsearchParams,\n\t\t\troutesModule,\n\t\t\tssrData, // Pass shared ssrData for direct mutation in streaming mode\n\t\t);\n\n\t\t// Only copy non-streaming data; streaming data is already in ssrData\n\t\tif (!streaming) {\n\t\t\tObject.assign(ssrData, layoutResult.data);\n\t\t}\n\t\tif (layoutResult.statusOverride && !statusContainer.value) {\n\t\t\tstatusContainer.value = layoutResult.statusOverride;\n\t\t}\n\t\tallPendingTasks.push(...layoutResult.pendingTasks);\n\t} catch {\n\t\t// Continue with other data sources\n\t}\n\n\t// 2. Compute content page data\n\ttry {\n\t\tconst contentResult = await computeContentData(\n\t\t\tpathname,\n\t\t\toptions,\n\t\t\tsearchParams,\n\t\t\tssrData, // Pass shared ssrData for direct mutation in streaming mode\n\t\t);\n\n\t\t// Only copy non-streaming data; streaming data is already in ssrData\n\t\tif (!streaming) {\n\t\t\tObject.assign(ssrData, contentResult.data);\n\t\t}\n\t\tif (contentResult.error) error = contentResult.error;\n\t\tif (contentResult.statusOverride && !statusContainer.value) {\n\t\t\tstatusContainer.value = contentResult.statusOverride;\n\t\t}\n\t\tallPendingTasks.push(...contentResult.pendingTasks);\n\t} catch {\n\t\t// Continue with route data\n\t}\n\n\t// 3. Compute route-level data\n\ttry {\n\t\tconst routeResult = await computeRouteData(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\toptions,\n\t\t\tsearchParams,\n\t\t\troutesModule,\n\t\t\tssrData, // Pass shared ssrData for direct mutation in streaming mode\n\t\t);\n\n\t\t// Only copy non-streaming data; streaming data is already in ssrData\n\t\tif (!streaming) {\n\t\t\tObject.assign(ssrData, routeResult.data);\n\t\t}\n\t\tif (routeResult.error) error = routeResult.error;\n\t\tif (routeResult.statusOverride && !statusContainer.value) {\n\t\t\tstatusContainer.value = routeResult.statusOverride;\n\t\t}\n\t\tallPendingTasks.push(...routeResult.pendingTasks);\n\t} catch {\n\t\t// Return what we have\n\t}\n\n\t// In non-streaming mode, merge layout data into route data\n\tif (!streaming) {\n\t\tmergeLayoutData(ssrData, pathname);\n\t}\n\n\tconst pending =\n\t\tstreaming && allPendingTasks.length\n\t\t\t? Promise.allSettled(allPendingTasks).then(() => undefined)\n\t\t\t: undefined;\n\n\treturn { data: ssrData, error, pending, statusContainer };\n}\n\n/**\n * Set global SSR data for client hydration\n */\nexport function setGlobalSSRData(data: Record<string, unknown>): void {\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_DATA__ = data;\n\t} catch {\n\t\t// Ignore errors in restricted environments\n\t}\n}\n",
|
|
15
|
+
"import { ssrCache, statusCache } from '../cache';\nimport { dynamicImport, toPromise } from '../imports';\nimport {\n\tcreateLayoutCacheKey,\n\tcreateLayoutDataKey,\n\tgetMatchingLayouts,\n} from '../layouts';\nimport { join } from '../path';\nimport type { ComputeOptions, Doc } from '../types';\n\ntype LayoutComputeResult = {\n\tdata: Record<string, unknown>;\n\tstatusOverride?: number;\n\tpendingTasks: Promise<unknown>[];\n};\n\n/**\n * Compute SSR data from all matching layouts for a pathname.\n * Executes layout ssr.data() functions in hierarchical order (root → nested).\n *\n * @param sharedSsrData - In streaming mode, the shared ssrData object that gets passed to React.\n * Promise resolution callbacks must update THIS object directly.\n */\nexport async function computeLayoutData(\n\tpathname: string,\n\tclientDir: string,\n\t_cwd: string,\n\tisWatchMode: boolean,\n\toptions: ComputeOptions,\n\tsearchParams?: URLSearchParams,\n\troutesModule?: Doc,\n\tsharedSsrData?: Record<string, unknown>,\n): Promise<LayoutComputeResult> {\n\tconst streaming = options.streaming === true;\n\t// In streaming mode, use the shared ssrData object so Promise callbacks update the right place\n\tconst ssrData: Record<string, unknown> =\n\t\tstreaming && sharedSsrData ? sharedSsrData : {};\n\tconst pendingTasks: Promise<unknown>[] = [];\n\tlet statusOverride: number | undefined;\n\n\tconst maxAge = options.maxAge || 0;\n\tconst maxAgeMs = maxAge * 1000;\n\n\tconst storeResult = (key: string, task: Promise<unknown>) => {\n\t\tpendingTasks.push(\n\t\t\ttask\n\t\t\t\t.then((value) => {\n\t\t\t\t\tssrData[key] = value;\n\t\t\t\t})\n\t\t\t\t.catch(() => {}),\n\t\t);\n\t};\n\n\ttry {\n\t\tconst layouts = routesModule?.layouts as Doc[] | undefined;\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tif (typeof layout?.path !== 'string') continue;\n\n\t\t\ttry {\n\t\t\t\t// Try to use bundled ssr export first (compiled binary)\n\t\t\t\tlet ssrExport = (layout as Doc)?.ssr as Doc | undefined;\n\n\t\t\t\t// Fallback to dynamic import if not bundled (dev mode)\n\t\t\t\tif (!ssrExport) {\n\t\t\t\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\t\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\t\t\t\tssrExport = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t}\n\n\t\t\t\tconst dataFn = ssrExport?.data as\n\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t| undefined;\n\n\t\t\t\tif (typeof dataFn !== 'function') continue;\n\n\t\t\t\tconst pattern = String(layout.pattern || '/');\n\t\t\t\tconst layoutKey = createLayoutDataKey(pattern);\n\t\t\t\tconst cacheKey = createLayoutCacheKey(pattern, pathname);\n\t\t\t\tconst statusCacheKey = `status:${cacheKey}`;\n\n\t\t\t\t// Check status cache first\n\t\t\t\tconst cachedStatus =\n\t\t\t\t\tmaxAgeMs > 0 ? statusCache.get<number>(statusCacheKey) : undefined;\n\t\t\t\tif (cachedStatus && cachedStatus !== 200 && !statusOverride) {\n\t\t\t\t\tstatusOverride = cachedStatus;\n\t\t\t\t}\n\n\t\t\t\t// Check data cache\n\t\t\t\tconst cached = maxAgeMs > 0 ? ssrCache.get(cacheKey) : undefined;\n\n\t\t\t\tif (cached !== undefined) {\n\t\t\t\t\tssrData[layoutKey] = cached;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Execute data function\n\t\t\t\tconst set = { status: 200 };\n\t\t\t\tconst task = toPromise(\n\t\t\t\t\tdataFn({ pathname, params: {}, set, searchParams } as Doc),\n\t\t\t\t).catch((err) => {\n\t\t\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`[reroute] Layout SSR data() failed for ${layout.pattern}:`,\n\t\t\t\t\t\tmsg,\n\t\t\t\t\t);\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\n\t\t\t\tif (streaming) {\n\t\t\t\t\tssrData[layoutKey] = task;\n\t\t\t\t\tstoreResult(\n\t\t\t\t\t\tlayoutKey,\n\t\t\t\t\t\ttask.then((value) => {\n\t\t\t\t\t\t\tif (set.status !== 200 && !statusOverride) {\n\t\t\t\t\t\t\t\tstatusOverride = set.status;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (maxAgeMs > 0) {\n\t\t\t\t\t\t\t\tstatusCache.set(statusCacheKey, set.status, maxAgeMs);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (maxAgeMs > 0 && set.status === 200) {\n\t\t\t\t\t\t\t\tssrCache.set(cacheKey, value, maxAgeMs);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconst result = await task;\n\t\t\t\t\tif (set.status !== 200 && !statusOverride) {\n\t\t\t\t\t\tstatusOverride = set.status;\n\t\t\t\t\t}\n\t\t\t\t\tssrData[layoutKey] = result;\n\t\t\t\t\tif (maxAgeMs > 0) {\n\t\t\t\t\t\tstatusCache.set(statusCacheKey, set.status, maxAgeMs);\n\t\t\t\t\t}\n\t\t\t\t\tif (maxAgeMs > 0 && set.status === 200) {\n\t\t\t\t\t\tssrCache.set(cacheKey, result, maxAgeMs);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Continue to next layout on error\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Return empty data on failure\n\t}\n\n\treturn { data: ssrData, statusOverride, pendingTasks };\n}\n\n/**\n * Merge layout data into route data for non-streaming mode.\n * Users can call useData() without knowing about layout keys.\n */\nexport function mergeLayoutData(\n\tssrData: Record<string, unknown>,\n\tpathname: string,\n): void {\n\tconst layoutKeys = Object.keys(ssrData).filter((key) =>\n\t\tkey.startsWith('__layout:'),\n\t);\n\n\tconst layoutData: Record<string, unknown> = {};\n\tfor (const key of layoutKeys) {\n\t\tObject.assign(layoutData, ssrData[key] as Record<string, unknown>);\n\t}\n\n\tif (pathname in ssrData) {\n\t\tssrData[pathname] = {\n\t\t\t...layoutData,\n\t\t\t...(typeof ssrData[pathname] === 'object' && ssrData[pathname] !== null\n\t\t\t\t? (ssrData[pathname] as Record<string, unknown>)\n\t\t\t\t: {}),\n\t\t};\n\t} else if (Object.keys(layoutData).length > 0) {\n\t\tssrData[pathname] = layoutData;\n\t}\n}\n",
|
|
16
|
+
"import { ssrCache, statusCache } from '../cache';\nimport { dynamicImport, isThenable, toPromise } from '../imports';\nimport { join } from '../path';\nimport type { ComputeOptions, Doc, RouteMatch } from '../types';\n\ntype RouteComputeResult = {\n\tdata: Record<string, unknown>;\n\terror?: string;\n\tstatusOverride?: number;\n\tpendingTasks: Promise<unknown>[];\n};\n\n/**\n * Compute SSR data for route-level ssr.data() functions.\n * Handles both streaming and non-streaming modes with promise flattening.\n *\n * @param sharedSsrData - In streaming mode, the shared ssrData object that gets passed to React.\n * Promise resolution callbacks must update THIS object directly.\n */\nexport async function computeRouteData(\n\tpathname: string,\n\tclientDir: string,\n\t_cwd: string,\n\tisWatchMode: boolean,\n\toptions: ComputeOptions,\n\tsearchParams?: URLSearchParams,\n\troutesModule?: Doc,\n\tsharedSsrData?: Record<string, unknown>,\n): Promise<RouteComputeResult> {\n\tconst streaming = options.streaming === true;\n\t// In streaming mode, use the shared ssrData object so Promise callbacks update the right place\n\t// In non-streaming mode, use a local object that gets copied later\n\tconst ssrData: Record<string, unknown> =\n\t\tstreaming && sharedSsrData ? sharedSsrData : {};\n\tconst pendingTasks: Promise<unknown>[] = [];\n\tlet error: string | undefined;\n\tlet statusOverride: number | undefined;\n\n\tconst maxAge = options.maxAge || 0;\n\tconst maxAgeMs = maxAge * 1000;\n\n\tconst storeResult = (key: string, task: Promise<unknown>) => {\n\t\tpendingTasks.push(\n\t\t\ttask\n\t\t\t\t.then((value) => {\n\t\t\t\t\tssrData[key] = value;\n\t\t\t\t})\n\t\t\t\t.catch(() => {}),\n\t\t);\n\t};\n\n\ttry {\n\t\t// Strip query string for route matching\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match: RouteMatch =\n\t\t\ttypeof routesModule?.matchRoute === 'function'\n\t\t\t\t? routesModule.matchRoute(pathnameOnly)\n\t\t\t\t: null;\n\n\t\tconst route = match?.route;\n\t\tconst params = match?.params || {};\n\n\t\tif (!route || typeof route.path !== 'string') {\n\t\t\treturn { data: ssrData, pendingTasks };\n\t\t}\n\n\t\t// Try to use bundled ssr export first (compiled binary)\n\t\tlet ssrExport = (route as Doc)?.ssr;\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(route.path));\n\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\t\tssrExport = (mod as Doc)?.ssr as Doc | undefined;\n\t\t}\n\n\t\tconst dataFn = ssrExport?.data as\n\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t| undefined;\n\n\t\tif (typeof dataFn !== 'function') {\n\t\t\treturn { data: ssrData, pendingTasks };\n\t\t}\n\n\t\t// Include search params in cache key\n\t\tconst searchQuery = searchParams ? `?${searchParams.toString()}` : '';\n\t\tconst cacheKey = `route:${pathname}${searchQuery}:${JSON.stringify(params)}`;\n\t\tconst statusCacheKey = `status:${cacheKey}`;\n\n\t\t// Check status cache first\n\t\tconst cachedStatus =\n\t\t\tmaxAgeMs > 0 ? statusCache.get<number>(statusCacheKey) : undefined;\n\t\tif (cachedStatus && cachedStatus !== 200 && !statusOverride) {\n\t\t\tstatusOverride = cachedStatus;\n\t\t}\n\n\t\t// Check data cache\n\t\tconst cached = maxAgeMs > 0 ? ssrCache.get(cacheKey) : undefined;\n\n\t\tif (cached !== undefined) {\n\t\t\tssrData[pathname] = cached;\n\t\t\treturn { data: ssrData, statusOverride, pendingTasks };\n\t\t}\n\n\t\t// Execute data function\n\t\tconst set = { status: 200 };\n\t\tconst rawResult = dataFn({\n\t\t\tpathname,\n\t\t\tparams,\n\t\t\tset,\n\t\t\tsearchParams,\n\t\t} as Doc);\n\t\tconst isPromise = rawResult instanceof Promise;\n\n\t\tif (streaming) {\n\t\t\tconst result = await handleStreamingRouteData(\n\t\t\t\trawResult,\n\t\t\t\tisPromise,\n\t\t\t\tpathname,\n\t\t\t\tset,\n\t\t\t\t{ ssrData, pendingTasks, storeResult },\n\t\t\t\t{ cacheKey, statusCacheKey, maxAgeMs },\n\t\t\t\t(msg) => {\n\t\t\t\t\terror = msg;\n\t\t\t\t},\n\t\t\t\t(val) => {\n\t\t\t\t\tif (!statusOverride) statusOverride = val;\n\t\t\t\t},\n\t\t\t);\n\t\t\tObject.assign(ssrData, result);\n\t\t} else {\n\t\t\tconst task = toPromise(rawResult).catch((err) => {\n\t\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\t\terror = `SSR data() failed: ${msg}`;\n\t\t\t\tconsole.error(`[reroute] ${error}`);\n\t\t\t\tthrow err;\n\t\t\t});\n\n\t\t\tconst result = await task;\n\t\t\tif (set.status !== 200 && !statusOverride) {\n\t\t\t\tstatusOverride = set.status;\n\t\t\t}\n\t\t\tssrData[pathname] = result;\n\t\t\tif (maxAgeMs > 0) {\n\t\t\t\tstatusCache.set(statusCacheKey, set.status, maxAgeMs);\n\t\t\t}\n\t\t\tif (maxAgeMs > 0 && set.status === 200) {\n\t\t\t\tssrCache.set(cacheKey, result, maxAgeMs);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Return what we have on error\n\t}\n\n\treturn { data: ssrData, error, statusOverride, pendingTasks };\n}\n\ntype StreamingContext = {\n\tssrData: Record<string, unknown>;\n\tpendingTasks: Promise<unknown>[];\n\tstoreResult: (key: string, task: Promise<unknown>) => void;\n};\n\ntype CacheContext = {\n\tcacheKey: string;\n\tstatusCacheKey: string;\n\tmaxAgeMs: number;\n};\n\n/**\n * Handle streaming route data with promise flattening support.\n * Allows each promise in an object to resolve and stream independently.\n */\nasync function handleStreamingRouteData(\n\trawResult: unknown,\n\tisPromise: boolean,\n\tpathname: string,\n\tset: { status: number },\n\tctx: StreamingContext,\n\tcache: CacheContext,\n\tsetError: (msg: string) => void,\n\tsetStatus: (val: number) => void,\n): Promise<Record<string, unknown>> {\n\tconst { ssrData, storeResult } = ctx;\n\tconst { cacheKey, statusCacheKey, maxAgeMs } = cache;\n\n\t// Check if this is a plain object with promises (flattening candidate)\n\tif (\n\t\ttypeof rawResult === 'object' &&\n\t\trawResult !== null &&\n\t\t!Array.isArray(rawResult) &&\n\t\t!isPromise\n\t) {\n\t\tconst entries = Object.entries(rawResult as Record<string, unknown>);\n\t\tconst hasMultipleKeys = entries.length > 1;\n\t\tconst hasPromises = entries.some(([_, v]) => isThenable(v));\n\n\t\tif (hasMultipleKeys || hasPromises) {\n\t\t\treturn handleFlattenedResult(\n\t\t\t\tentries,\n\t\t\t\tset,\n\t\t\t\tctx,\n\t\t\t\tcache,\n\t\t\t\tsetError,\n\t\t\t\tsetStatus,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Single value, promise, or array - handle normally\n\tconst task = toPromise(rawResult).catch((err) => {\n\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\tsetError(`SSR data() failed: ${msg}`);\n\t\tconsole.error(`[reroute] SSR data() failed: ${msg}`);\n\t\tthrow err;\n\t});\n\n\tssrData[pathname] = task;\n\tstoreResult(\n\t\tpathname,\n\t\ttask.then((value) => {\n\t\t\tif (set.status !== 200) {\n\t\t\t\tsetStatus(set.status);\n\t\t\t}\n\t\t\tssrData[pathname] = value;\n\t\t\tif (maxAgeMs > 0) {\n\t\t\t\tstatusCache.set(statusCacheKey, set.status, maxAgeMs);\n\t\t\t}\n\t\t\tif (maxAgeMs > 0 && set.status === 200) {\n\t\t\t\tssrCache.set(cacheKey, value, maxAgeMs);\n\t\t\t}\n\t\t\treturn value;\n\t\t}),\n\t);\n\n\treturn {};\n}\n\n/**\n * Handle flattened object result where each key streams independently.\n */\nfunction handleFlattenedResult(\n\tentries: [string, unknown][],\n\tset: { status: number },\n\tctx: StreamingContext,\n\tcache: CacheContext,\n\tsetError: (msg: string) => void,\n\tsetStatus: (val: number) => void,\n): Record<string, unknown> {\n\tconst { ssrData, storeResult } = ctx;\n\tconst { cacheKey, statusCacheKey, maxAgeMs } = cache;\n\n\tconst promisesToResolve: Promise<[string, unknown]>[] = [];\n\n\tfor (const [key, val] of entries) {\n\t\tif (isThenable(val)) {\n\t\t\tconst wrappedPromise = (val as Promise<unknown>)\n\t\t\t\t.then((resolved) => {\n\t\t\t\t\tif (set.status !== 200) {\n\t\t\t\t\t\tsetStatus(set.status);\n\t\t\t\t\t}\n\t\t\t\t\treturn resolved;\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\tsetError(`SSR data() failed for key ${key}: ${msg}`);\n\t\t\t\t\tconsole.error(`[reroute] SSR data() failed for key ${key}: ${msg}`);\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\n\t\t\tssrData[key] = wrappedPromise;\n\t\t\tstoreResult(key, wrappedPromise);\n\t\t\tpromisesToResolve.push(\n\t\t\t\twrappedPromise.then((resolved) => [key, resolved] as [string, unknown]),\n\t\t\t);\n\t\t} else {\n\t\t\tssrData[key] = val;\n\t\t\tpromisesToResolve.push(Promise.resolve([key, val] as [string, unknown]));\n\t\t}\n\t}\n\n\t// Cache when all promises resolve\n\tif (maxAgeMs > 0) {\n\t\tPromise.all(promisesToResolve)\n\t\t\t.then((resolvedEntries) => {\n\t\t\t\tstatusCache.set(statusCacheKey, set.status, maxAgeMs);\n\t\t\t\tif (set.status === 200) {\n\t\t\t\t\tconst resolvedResult: Record<string, unknown> = {};\n\t\t\t\t\tfor (const [key, value] of resolvedEntries) {\n\t\t\t\t\t\tresolvedResult[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tssrCache.set(cacheKey, resolvedResult, maxAgeMs);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Don't cache on failure\n\t\t\t});\n\t}\n\n\treturn {};\n}\n",
|
|
17
|
+
"import { dynamicImport } from '../imports';\nimport { join } from '../path';\nimport type { ComputeOptions, ComputeResult, Doc } from '../types';\nimport { computeContentData } from './content';\nimport { computeLayoutData, mergeLayoutData } from './layouts';\nimport { computeRouteData } from './routes';\n\n/**\n * Match a route pattern against a pathname\n * Used in compiled binary mode when matchRoute isn't available from routes.ts\n */\nfunction matchPatternUtil(\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\nexport { computeContentData } from './content';\nexport { computeLayoutData, mergeLayoutData } from './layouts';\nexport { computeRouteData } from './routes';\n\n/**\n * Compute SSR data by executing ssr.data() from layouts, routes, and content modules.\n * Orchestrates the full data computation pipeline for a request.\n */\nexport async function computeSSRData(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\toptions: ComputeOptions = {},\n\tsearchParams?: URLSearchParams,\n): Promise<ComputeResult> {\n\t// CRITICAL: This is the SHARED ssrData object that gets passed to React.\n\t// All compute functions must update THIS object directly (not copies)\n\t// so that Promise resolution callbacks update the correct object.\n\tconst ssrData: Record<string, unknown> = {};\n\tlet error: string | undefined;\n\tconst statusContainer = { value: undefined as number | undefined };\n\tconst allPendingTasks: Promise<unknown>[] = [];\n\tconst streaming = options.streaming === true;\n\n\t// Load routes module once for reuse\n\tlet routesModule: Doc;\n\ttry {\n\t\t// Check for bundled routes first (compiled binary support)\n\t\tconst bundledRoutes = (globalThis as Record<string, unknown>)\n\t\t\t.__REROUTE_ROUTES__;\n\t\tconst bundledLayouts = (globalThis as Record<string, unknown>)\n\t\t\t.__REROUTE_LAYOUTS__;\n\n\t\tif (bundledRoutes && bundledLayouts) {\n\t\t\t// Use bundled routes/layouts (compiled binary mode)\n\t\t\troutesModule = {\n\t\t\t\troutes: bundledRoutes,\n\t\t\t\tlayouts: bundledLayouts,\n\t\t\t\tmatchRoute: (pathname: string) => {\n\t\t\t\t\t// Manual route matching for bundled routes\n\t\t\t\t\tfor (const route of bundledRoutes as Doc[]) {\n\t\t\t\t\t\tconst pattern = String(route?.pattern || '');\n\t\t\t\t\t\tconst match = matchPatternUtil(pattern, pathname);\n\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\treturn { route, params: match };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\t// Fallback to dynamic import (dev mode)\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\troutesModule = await dynamicImport(routesPath, isWatchMode);\n\t\t}\n\t} catch {\n\t\treturn {\n\t\t\tdata: ssrData,\n\t\t\terror: 'Failed to load routes module',\n\t\t\tstatusContainer,\n\t\t};\n\t}\n\n\t// 1. Compute layout data hierarchically\n\ttry {\n\t\tconst layoutResult = await computeLayoutData(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\toptions,\n\t\t\tsearchParams,\n\t\t\troutesModule,\n\t\t\tssrData, // Pass shared ssrData for direct mutation in streaming mode\n\t\t);\n\n\t\t// Only copy non-streaming data; streaming data is already in ssrData\n\t\tif (!streaming) {\n\t\t\tObject.assign(ssrData, layoutResult.data);\n\t\t}\n\t\tif (layoutResult.statusOverride && !statusContainer.value) {\n\t\t\tstatusContainer.value = layoutResult.statusOverride;\n\t\t}\n\t\tallPendingTasks.push(...layoutResult.pendingTasks);\n\t} catch {\n\t\t// Continue with other data sources\n\t}\n\n\t// 2. Compute content page data\n\ttry {\n\t\tconst contentResult = await computeContentData(\n\t\t\tpathname,\n\t\t\toptions,\n\t\t\tsearchParams,\n\t\t\tssrData, // Pass shared ssrData for direct mutation in streaming mode\n\t\t);\n\n\t\t// Only copy non-streaming data; streaming data is already in ssrData\n\t\tif (!streaming) {\n\t\t\tObject.assign(ssrData, contentResult.data);\n\t\t}\n\t\tif (contentResult.error) error = contentResult.error;\n\t\tif (contentResult.statusOverride && !statusContainer.value) {\n\t\t\tstatusContainer.value = contentResult.statusOverride;\n\t\t}\n\t\tallPendingTasks.push(...contentResult.pendingTasks);\n\t} catch {\n\t\t// Continue with route data\n\t}\n\n\t// 3. Compute route-level data\n\ttry {\n\t\tconst routeResult = await computeRouteData(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\toptions,\n\t\t\tsearchParams,\n\t\t\troutesModule,\n\t\t\tssrData, // Pass shared ssrData for direct mutation in streaming mode\n\t\t);\n\n\t\t// Only copy non-streaming data; streaming data is already in ssrData\n\t\tif (!streaming) {\n\t\t\tObject.assign(ssrData, routeResult.data);\n\t\t}\n\t\tif (routeResult.error) error = routeResult.error;\n\t\tif (routeResult.statusOverride && !statusContainer.value) {\n\t\t\tstatusContainer.value = routeResult.statusOverride;\n\t\t}\n\t\tallPendingTasks.push(...routeResult.pendingTasks);\n\t} catch {\n\t\t// Return what we have\n\t}\n\n\t// In non-streaming mode, merge layout data into route data\n\tif (!streaming) {\n\t\tmergeLayoutData(ssrData, pathname);\n\t}\n\n\tconst pending =\n\t\tstreaming && allPendingTasks.length\n\t\t\t? Promise.allSettled(allPendingTasks).then(() => undefined)\n\t\t\t: undefined;\n\n\treturn { data: ssrData, error, pending, statusContainer };\n}\n\n/**\n * Set global SSR data for client hydration\n */\nexport function setGlobalSSRData(data: Record<string, unknown>): void {\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_DATA__ = data;\n\t} catch {\n\t\t// Ignore errors in restricted environments\n\t}\n}\n",
|
|
18
18
|
"import { readdir, stat } from 'node:fs/promises';\nimport { dynamicImport } from './imports';\nimport { join } from './path';\nimport type { Doc } from './types';\n\n/**\n * Import a content module for a given pathname like \"/collection/name\".\n * Prefers the latest built chunk in .reroute, falls back to source TS/TSX.\n */\nexport async function importContentModuleForPath(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<Doc | null> {\n\ttry {\n\t\t// Strip query params and hash\n\t\tconst pathOnly = pathname.split('?')[0].split('#')[0];\n\t\tconst parts = pathOnly.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return null;\n\n\t\tconst collection = parts[0];\n\t\tconst name = parts[1];\n\n\t\t// 1) Try registry mapping for exact chunk path\n\t\tconst registryModule = await tryRegistryImport(\n\t\t\tcollection,\n\t\t\tname,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\t\tif (registryModule) return registryModule;\n\n\t\t// 2) Try latest prebuilt chunk from .reroute\n\t\tconst chunkModule = await tryChunkImport(\n\t\t\tcollection,\n\t\t\tname,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\t\tif (chunkModule) return chunkModule;\n\n\t\t// 3) Fallback to source files\n\t\tconst sourceModule = await trySourceImport(\n\t\t\tcollection,\n\t\t\tname,\n\t\t\tclientDir,\n\t\t\tisWatchMode,\n\t\t);\n\t\tif (sourceModule) return sourceModule;\n\t} catch {\n\t\t// Return null on any error\n\t}\n\n\treturn null;\n}\n\nasync function tryRegistryImport(\n\tcollection: string,\n\tname: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<Doc | null> {\n\ttry {\n\t\tconst registryPath = join(cwd, '.reroute', 'content.ts');\n\t\tconst reg = await dynamicImport(registryPath, isWatchMode);\n\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')) return null;\n\n\t\tconst raw = moduleUrl.split('?')[0] || '';\n\t\tconst normalized = raw.replace(/^\\/+/, '');\n\n\t\tconst candidates: string[] = [];\n\t\tif (normalized) {\n\t\t\tcandidates.push(join(cwd, normalized));\n\t\t\tif (!normalized.startsWith('.reroute/')) {\n\t\t\t\tcandidates.push(join(cwd, '.reroute', normalized));\n\t\t\t}\n\t\t}\n\n\t\tfor (const abs of candidates) {\n\t\t\ttry {\n\t\t\t\tif (!(await Bun.file(abs).exists())) continue;\n\t\t\t\treturn await dynamicImport(abs, isWatchMode);\n\t\t\t} catch {\n\t\t\t\t// Try next candidate\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Registry unavailable\n\t}\n\n\treturn null;\n}\n\nasync function tryChunkImport(\n\tcollection: string,\n\tname: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<Doc | null> {\n\ttry {\n\t\tconst chunkDir = join(cwd, '.reroute', 'chunks', collection);\n\t\tconst files = await readdir(chunkDir);\n\t\tconst matches = files.filter(\n\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t);\n\n\t\tif (!matches.length) return null;\n\n\t\t// Find latest by modification time\n\t\tlet latest = matches[0];\n\t\tlet latestM = 0;\n\t\tfor (const f of matches) {\n\t\t\ttry {\n\t\t\t\tconst s = await stat(join(chunkDir, f));\n\t\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\t\tlatest = f;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Skip inaccessible files\n\t\t\t}\n\t\t}\n\n\t\tconst absChunk = join(chunkDir, latest);\n\t\treturn await dynamicImport(absChunk, isWatchMode);\n\t} catch {\n\t\t// Chunk directory doesn't exist\n\t}\n\n\treturn null;\n}\n\nasync function trySourceImport(\n\tcollection: string,\n\tname: string,\n\tclientDir: string,\n\tisWatchMode: boolean,\n): Promise<Doc | null> {\n\ttry {\n\t\tconst srcTsx = join(\n\t\t\tclientDir,\n\t\t\t'routes',\n\t\t\tcollection,\n\t\t\t'content',\n\t\t\t`${name}.tsx`,\n\t\t);\n\t\tconst srcTs = join(\n\t\t\tclientDir,\n\t\t\t'routes',\n\t\t\tcollection,\n\t\t\t'content',\n\t\t\t`${name}.ts`,\n\t\t);\n\n\t\tlet absSrc: string | null = null;\n\t\tif (await Bun.file(srcTsx).exists()) {\n\t\t\tabsSrc = srcTsx;\n\t\t} else if (await Bun.file(srcTs).exists()) {\n\t\t\tabsSrc = srcTs;\n\t\t}\n\n\t\tif (absSrc) {\n\t\t\treturn await dynamicImport(absSrc, isWatchMode);\n\t\t}\n\t} catch {\n\t\t// Source files don't exist\n\t}\n\n\treturn null;\n}\n",
|
|
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) return;\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) return;\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
|
-
"import { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport { seedSSRModuleForPath } from './seed';\nimport type { ComputeParams, Doc } from './types';\n\n/**\n * Compute SSR data for client-side navigation.\n * Returns lazy markers for promises to support progressive loading.\n */\nexport async function computeSSRDataForPath(\n\tparams: ComputeParams,\n): Promise<unknown> {\n\tconst { pathname, clientDir, cwd, isWatchMode, searchParams } = params;\n\tconst allData: Record<string, unknown> = {};\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\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst m = await dynamicImport(routesPath, isWatchMode);\n\t\tconst matchingLayouts = getMatchingLayouts(pathname,
|
|
20
|
+
"import { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport { seedSSRModuleForPath } from './seed';\nimport type { ComputeParams, Doc } 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 */\nexport async function computeSSRDataForPath(\n\tparams: ComputeParams,\n): Promise<unknown> {\n\tconst { pathname, clientDir, cwd, isWatchMode, searchParams } = params;\n\tconst allData: Record<string, unknown> = {};\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\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\tif (typeof layout?.path !== 'string') continue;\n\n\t\t\ttry {\n\t\t\t\t// Try to use bundled ssr export first (compiled binary)\n\t\t\t\tlet ssrExport = (layout as Doc)?.ssr as Doc | undefined;\n\n\t\t\t\t// Fallback to dynamic import if not bundled (dev mode)\n\t\t\t\tif (!ssrExport) {\n\t\t\t\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\t\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\t\t\t\tssrExport = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t}\n\n\t\t\t\tconst dataFn = ssrExport?.data as\n\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t| undefined;\n\n\t\t\t\tif (typeof dataFn !== 'function') continue;\n\n\t\t\t\tconst pattern = String(layout.pattern || '/');\n\t\t\t\tconst layoutKey = `__layout:${pattern}`;\n\t\t\t\tconst rawResult = dataFn({\n\t\t\t\t\tpathname,\n\t\t\t\t\tparams: {},\n\t\t\t\t\tsearchParams,\n\t\t\t\t});\n\n\t\t\t\tallData[layoutKey] = processDataResult(rawResult, pathname, layoutKey);\n\t\t\t} catch {\n\t\t\t\t// Continue to next layout\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Routes unavailable\n\t}\n\n\t// 2) Content-level data\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length >= 2) {\n\t\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\t\tconst g = globalThis as Doc;\n\t\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key];\n\t\t\tconst dataFn = (exp as Doc)?.ssr?.data as\n\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t| undefined;\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: { name: parts[1] },\n\t\t\t\t\tsearchParams,\n\t\t\t\t});\n\n\t\t\t\tconst result = processDataResult(rawResult, pathname, pathname);\n\n\t\t\t\t// For content pages, return directly if it's the only data\n\t\t\t\tif (Object.keys(allData).length === 0) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tallData[pathname] = result;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Content data unavailable\n\t}\n\n\t// 3) Route-level data\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\tconst abs = join(clientDir, 'routes', String((r as Doc).path));\n\t\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\t\t\tssrExport = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t}\n\n\t\t\tconst dataFn = ssrExport?.data as\n\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t| undefined;\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});\n\n\t\t\t\tallData[pathname] = processDataResult(rawResult, pathname, pathname);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Route data unavailable\n\t}\n\n\t// Return appropriate structure based on data count\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\n/**\n * Process data function result, creating lazy markers for promises\n */\nfunction processDataResult(\n\trawResult: unknown,\n\tpathname: string,\n\tkey: string,\n): unknown {\n\tif (rawResult instanceof Promise) {\n\t\treturn createLazyMarker(pathname, key);\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\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 { join } from './path';\nimport type { TemplateContext } from './types';\n\n/**\n * Load the index.html template from the client directory\n */\nexport async function loadIndexHtml(clientDir: string): Promise<string> {\n\t// Check for bundled template first (compiled binary support)\n\tconst bundledTemplate = (globalThis as Record<string, unknown>)\n\t\t.__REROUTE_HTML_TEMPLATE__ as string | undefined;\n\tif (bundledTemplate) {\n\t\treturn bundledTemplate;\n\t}\n\n\t// Fallback to filesystem read (dev mode)\n\tconst templatePath = join(clientDir, 'index.html');\n\ttry {\n\t\tconst content = await Bun.file(templatePath).text();\n\t\treturn content;\n\t} catch {\n\t\t// Minimal fallback template\n\t\treturn `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Reroute</title>\n </head>\n <body>\n <div id=\"root\"></div>\n </body>\n</html>`;\n\t}\n}\n\n/**\n * Apply SSR content to the HTML template\n */\nexport function applyIndexTemplate(\n\ttemplateHtml: string,\n\tappHtml: string,\n\t{\n\t\thead = '',\n\t\thydrationScript = '',\n\t\tlang = 'en',\n\t\tappId = 'root',\n\t}: TemplateContext,\n): string {\n\tlet html = templateHtml;\n\n\t// Ensure <html> has correct lang attribute\n\thtml = html.replace(/<html([^>]*)>/i, (_m, attrs: string) => {\n\t\tconst hasLang = /(^|\\s)lang\\s*=/.test(attrs);\n\t\tconst newAttrs = hasLang\n\t\t\t? attrs.replace(/lang\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]+)/i, `lang=\"${lang}\"`)\n\t\t\t: `${attrs} lang=\"${lang}\"`;\n\t\treturn `<html${newAttrs}>`;\n\t});\n\n\t// Handle head injection with deduplication\n\tconst headToInject = head || '';\n\tconst { cleanedTemplate, cleanedHead } = deduplicateHeadContent(\n\t\thtml,\n\t\theadToInject,\n\t);\n\thtml = cleanedTemplate;\n\n\tif (cleanedHead) {\n\t\thtml = html.replace(/<\\/head>/i, `${cleanedHead}\\n\\t</head>`);\n\t}\n\n\t// Remove TS/TSX script tags to avoid double-loading\n\thtml = html.replace(\n\t\t/<script\\b[^>]*src\\s*=\\s*[\"'][^\"']+\\.(ts|tsx)(?:[?#][^\"']*)?[\"'][^>]*>\\s*<\\/script>/gi,\n\t\t'',\n\t);\n\n\t// Extract and move React preload links to head\n\tconst { cleanAppHtml, preloadLinks } = extractPreloadLinks(appHtml);\n\n\tif (preloadLinks.length > 0) {\n\t\tconst preloadHtml = preloadLinks.join('\\n\\t\\t');\n\t\thtml = html.replace(/<\\/head>/i, `\\t\\t${preloadHtml}\\n\\t</head>`);\n\t}\n\n\t// Replace content of the app root\n\thtml = replaceAppRoot(html, cleanAppHtml, appId);\n\n\t// Append hydration scripts before </body>\n\tif (hydrationScript) {\n\t\thtml = html.replace(/<\\/body>/i, `\\t\\t${hydrationScript}\\n\\t</body>`);\n\t}\n\n\treturn html;\n}\n\n/**\n * Deduplicate meta tags within head content\n * Keeps only the last occurrence of each unique meta tag type\n * Handles: <title>, <meta name=\"...\">, <meta property=\"...\">\n */\nexport function deduplicateMetaTags(headContent: string): string {\n\tlet result = headContent;\n\n\ttry {\n\t\t// Deduplicate title tags - keep only the last one\n\t\tconst titleMatches = [...headContent.matchAll(/<title[\\s\\S]*?<\\/title>/gi)];\n\t\tif (titleMatches.length > 1) {\n\t\t\t// Remove all but the last title tag\n\t\t\tfor (let i = 0; i < titleMatches.length - 1; i++) {\n\t\t\t\tresult = result.replace(titleMatches[i][0], '');\n\t\t\t}\n\t\t}\n\n\t\t// Deduplicate meta tags by name attribute\n\t\tconst metaNameMatches = [\n\t\t\t...headContent.matchAll(/<meta\\s+name\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi),\n\t\t];\n\t\tconst seenNames = new Map<string, number[]>();\n\n\t\tfor (let i = 0; i < metaNameMatches.length; i++) {\n\t\t\tconst match = metaNameMatches[i];\n\t\t\tconst nameValue = match[1].toLowerCase(); // Case-insensitive\n\t\t\tif (!seenNames.has(nameValue)) {\n\t\t\t\tseenNames.set(nameValue, []);\n\t\t\t}\n\t\t\tseenNames.get(nameValue)?.push(i);\n\t\t}\n\n\t\t// Remove all but the last occurrence of each name\n\t\tfor (const indices of seenNames.values()) {\n\t\t\tif (indices.length > 1) {\n\t\t\t\tfor (let i = 0; i < indices.length - 1; i++) {\n\t\t\t\t\tresult = result.replace(metaNameMatches[indices[i]][0], '');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Deduplicate meta tags by property attribute (e.g., og:*, twitter:*)\n\t\tconst metaPropMatches = [\n\t\t\t...headContent.matchAll(\n\t\t\t\t/<meta\\s+property\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi,\n\t\t\t),\n\t\t];\n\t\tconst seenProps = new Map<string, number[]>();\n\n\t\tfor (let i = 0; i < metaPropMatches.length; i++) {\n\t\t\tconst match = metaPropMatches[i];\n\t\t\tconst propValue = match[1].toLowerCase(); // Case-insensitive\n\t\t\tif (!seenProps.has(propValue)) {\n\t\t\t\tseenProps.set(propValue, []);\n\t\t\t}\n\t\t\tseenProps.get(propValue)?.push(i);\n\t\t}\n\n\t\t// Remove all but the last occurrence of each property\n\t\tfor (const indices of seenProps.values()) {\n\t\t\tif (indices.length > 1) {\n\t\t\t\tfor (let i = 0; i < indices.length - 1; i++) {\n\t\t\t\t\tresult = result.replace(metaPropMatches[indices[i]][0], '');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Return original on error\n\t}\n\n\treturn result;\n}\n\n/**\n * Remove default title and description tags from template HTML\n */\nfunction removeDefaultMetaTags(templateHtml: string): string {\n\tlet result = templateHtml;\n\n\ttry {\n\t\t// Remove default title tag\n\t\tresult = result.replace(/<title[\\s\\S]*?<\\/title>/i, '');\n\n\t\t// Remove default description meta tag\n\t\tresult = result.replace(\n\t\t\t/<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i,\n\t\t\t'',\n\t\t);\n\t} catch {\n\t\t// Return original on error\n\t}\n\n\treturn result;\n}\n\n/**\n * Deduplicate title and description meta tags in head content\n * Returns both the cleaned template HTML and the deduplicated head to inject\n */\nfunction deduplicateHeadContent(\n\ttemplateHtml: string,\n\theadToInject: string,\n): { cleanedTemplate: string; cleanedHead: string } {\n\tlet cleanedTemplate = templateHtml;\n\tlet cleanedHead = headToInject;\n\n\ttry {\n\t\t// First, deduplicate within the injected head itself (e.g., layout vs content meta)\n\t\tcleanedHead = deduplicateMetaTags(headToInject);\n\n\t\t// If we have new title/description tags to inject, remove the defaults from template\n\t\tif (/<title[\\s\\S]*?<\\/title>/i.test(cleanedHead)) {\n\t\t\tcleanedTemplate = removeDefaultMetaTags(cleanedTemplate);\n\t\t} else if (\n\t\t\t/<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i.test(cleanedHead)\n\t\t) {\n\t\t\t// Even if no title, remove description if present\n\t\t\tcleanedTemplate = cleanedTemplate.replace(\n\t\t\t\t/<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i,\n\t\t\t\t'',\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Return originals on error\n\t}\n\n\treturn { cleanedTemplate, cleanedHead };\n}\n\n/**\n * Extract React preload links from the beginning of SSR output\n */\nfunction extractPreloadLinks(appHtml: string): {\n\tcleanAppHtml: string;\n\tpreloadLinks: string[];\n} {\n\tconst preloadLinks: string[] = [];\n\tlet cleanAppHtml = appHtml;\n\n\tconst linkPrefixRegex = /^(\\s*(?:<link\\b[^>]*>\\s*)+)/;\n\tconst prefixMatch = appHtml.match(linkPrefixRegex);\n\n\tif (prefixMatch?.[1]) {\n\t\tconst linkMatches = prefixMatch[1].match(/<link\\b[^>]*>/g);\n\t\tif (linkMatches) {\n\t\t\tpreloadLinks.push(...linkMatches);\n\t\t\tcleanAppHtml = appHtml.slice(prefixMatch[1].length);\n\t\t}\n\t}\n\n\treturn { cleanAppHtml, preloadLinks };\n}\n\n/**\n * Replace the app root div content with SSR output\n */\nfunction replaceAppRoot(html: string, appHtml: string, appId: string): string {\n\tconst appIdEscaped = appId.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\tconst rootDivRegex = new RegExp(\n\t\t`(<div[^>]*\\\\bid=(\\\\\"|')${appIdEscaped}\\\\2[^>]*>)([\\\\s\\\\S]*?)(<\\\\/div>)`,\n\t\t'i',\n\t);\n\n\tif (rootDivRegex.test(html)) {\n\t\t// Escape $ in appHtml to prevent backreference interpretation\n\t\tconst escapedAppHtml = appHtml.replace(/\\$/g, '$$$$');\n\t\treturn html.replace(rootDivRegex, `$1${escapedAppHtml}$4`);\n\t}\n\n\t// Fallback: inject before </body>\n\treturn html.replace(\n\t\t/<\\/body>/i,\n\t\t`\\t\\t<div id=\"${appId}\">${appHtml}</div>\\n\\t</body>`,\n\t);\n}\n",
|
|
22
22
|
"import { pathToFileURL } from 'node:url';\nimport { join } from '../ssr/lib/path';\n\n/**\n * Find [og].tsx file for a given pathname\n * Returns the absolute path to the OG image component if found\n */\nexport async function findOGImageForPath(\n\tpathname: string,\n\tclientDir: string,\n): Promise<string | null> {\n\t// Remove leading/trailing slashes and split into parts\n\tconst parts = pathname\n\t\t.split('/')\n\t\t.filter(Boolean)\n\t\t.filter((p) => !p.startsWith('__reroute'));\n\n\t// Try to find [og].tsx at each level of the path\n\t// Start from most specific (full path) to least specific (root)\n\tconst routesDir = join(clientDir, 'routes');\n\n\t// Build paths to try, from most specific to least\n\tconst pathsToTry: string[] = [];\n\n\tif (parts.length > 0) {\n\t\t// Try each directory level from deepest to shallowest\n\t\t// For /blog/my-post, try:\n\t\t// 1. routes/blog/my-post/[og].tsx\n\t\t// 2. routes/blog/[og].tsx\n\t\t// 3. routes/[og].tsx\n\t\tfor (let i = parts.length; i > 0; i--) {\n\t\t\tconst dirPath = join(routesDir, ...parts.slice(0, i), '[og].tsx');\n\t\t\tpathsToTry.push(dirPath);\n\t\t}\n\t}\n\n\t// Try root [og].tsx\n\tpathsToTry.push(join(routesDir, '[og].tsx'));\n\n\t// Remove duplicates while preserving order\n\tconst uniquePaths = [...new Set(pathsToTry)];\n\n\t// Try each path and return the first one that exists\n\tfor (const path of uniquePaths) {\n\t\ttry {\n\t\t\tconst file = Bun.file(path);\n\t\t\tif (await file.exists()) {\n\t\t\t\treturn path;\n\t\t\t}\n\t\t} catch {\n\t\t\t// File doesn't exist, continue\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Load OG Image component for a given path\n */\n\nexport async function loadOGImageComponent(\n\togPath: string,\n\tisWatchMode: boolean,\n) {\n\ttry {\n\t\tconst mod = await import(\n\t\t\t`${pathToFileURL(ogPath).href}${isWatchMode ? `?t=${Date.now()}` : ''}`\n\t\t);\n\t\treturn mod.default || mod;\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute] Failed to load OG image component: ${ogPath}`,\n\t\t\terror,\n\t\t);\n\t\treturn null;\n\t}\n}\n\n/**\n * Extract route params from pathname based on OG component path\n * e.g., pathname='/blog/my-post', ogPath='pages/blog/[slug]/[og].tsx' -> { slug: 'my-post' }\n */\nexport function extractParamsFromPath(\n\tpathname: string,\n\togPath: string,\n\tclientDir: string,\n): Record<string, string> {\n\tconst params: Record<string, string> = {};\n\n\t// Get the directory containing [og].tsx\n\tconst ogDir = ogPath.replace(/\\/\\[og\\]\\.tsx$/, '');\n\tconst pagesDir = join(clientDir, 'pages');\n\n\t// Get relative path from pages dir to og dir\n\tconst relativePath = ogDir.replace(pagesDir, '').split('/').filter(Boolean);\n\tconst pathnameParts = pathname.split('/').filter(Boolean);\n\n\t// Match path parts with og path parts to extract dynamic segments\n\tfor (let i = 0; i < relativePath.length && i < pathnameParts.length; i++) {\n\t\tconst part = relativePath[i];\n\t\t// Check if this is a dynamic segment [param]\n\t\tconst match = part.match(/^\\[([^\\]]+)\\]$/);\n\t\tif (match) {\n\t\t\tconst paramName = match[1];\n\t\t\tparams[paramName] = pathnameParts[i];\n\t\t}\n\t}\n\n\t// If there are remaining pathname parts after matching the og path,\n\t// and the last matched part was dynamic, use the last pathname part\n\tif (pathnameParts.length > relativePath.length && relativePath.length > 0) {\n\t\tconst lastRelativePart = relativePath[relativePath.length - 1];\n\t\tconst match = lastRelativePart.match(/^\\[([^\\]]+)\\]$/);\n\t\tif (match) {\n\t\t\tconst paramName = match[1];\n\t\t\t// Use the last pathname part that matches the position\n\t\t\tparams[paramName] = pathnameParts[relativePath.length - 1];\n\t\t}\n\t}\n\n\treturn params;\n}\n",
|
|
23
23
|
"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",
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"import { escapeJsonForScript } from './escape';\n\n/**\n * Duplicate SSR data for query param routes.\n * Stores at both /path?query and /path so useData() can find it.\n */\nexport function duplicateQueryParamData(\n\tssrData: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst duplicated: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(ssrData)) {\n\t\tduplicated[key] = value;\n\t\tconst pathnameOnly = key.split('?')[0];\n\t\tif (pathnameOnly !== key) {\n\t\t\tduplicated[pathnameOnly] = value;\n\t\t}\n\t}\n\treturn duplicated;\n}\n\n/**\n * Create inline script for SSR data hydration\n */\nexport function createDataScript(\n\tssrData: Record<string, unknown>,\n\terrorMsg?: string,\n): string {\n\tlet script = '';\n\n\tif (ssrData && Object.keys(ssrData).length > 0) {\n\t\ttry {\n\t\t\tconst duplicatedData = duplicateQueryParamData(ssrData);\n\t\t\tconst dataJson = escapeJsonForScript(JSON.stringify(duplicatedData));\n\t\t\tconst keysJson = escapeJsonForScript(\n\t\t\t\tJSON.stringify(Object.keys(ssrData)),\n\t\t\t);\n\t\t\tscript += `<script>(function(){try{var w=(typeof window!=='undefined'?window:globalThis);w.__REROUTE_DATA__=Object.assign({},w.__REROUTE_DATA__||{},${dataJson});try{w.dispatchEvent(new CustomEvent('__reroute_data__',{detail:{keys:${keysJson}}}));}catch(e){}}catch(e){}})();</script>`;\n\t\t} catch (error) {\n\t\t\tconsole.error('[reroute] Failed to serialize SSR data:', error);\n\t\t}\n\t}\n\n\tif (errorMsg) {\n\t\tconst escapedMsg = JSON.stringify(errorMsg);\n\t\tscript += `<script>(function(){try{console.warn('%c[reroute] SSR Data Error','background: #ff5555; color: white; padding: 2px 6px; border-radius: 3px;',${escapedMsg});}catch(e){}})();</script>`;\n\t}\n\n\treturn script;\n}\n",
|
|
29
29
|
"import type { Doc } from '../types';\nimport { escapeJsonForScript } from './escape';\n\n/**\n * Create inline script for available RSS feeds\n */\nexport function createFeedsScript(): string {\n\ttry {\n\t\tconst feeds = (globalThis as Doc).__REROUTE_AVAILABLE_FEEDS__ || [];\n\t\tif (feeds.length === 0) return '';\n\n\t\tconst feedsJson = escapeJsonForScript(JSON.stringify(feeds));\n\t\treturn `<script>(function(){try{var w=(typeof window!=='undefined'?window:globalThis);w.__REROUTE_FEEDS__=${feedsJson};}catch(e){}})();</script>`;\n\t} catch {\n\t\treturn '';\n\t}\n}\n\n/**\n * Create inline script for available LLMS files\n */\nexport function createLlmsScript(): string {\n\ttry {\n\t\tconst llms = (globalThis as Doc).__REROUTE_AVAILABLE_LLMS__ || [];\n\t\tif (llms.length === 0) return '';\n\n\t\tconst llmsJson = escapeJsonForScript(JSON.stringify(llms));\n\t\treturn `<script>(function(){try{var w=(typeof window!=='undefined'?window:globalThis);w.__REROUTE_LLMS__=${llmsJson};}catch(e){}})();</script>`;\n\t} catch {\n\t\treturn '';\n\t}\n}\n",
|
|
30
30
|
"export { createCollectionScript, processCollections } from './collections';\nexport { createDataScript, duplicateQueryParamData } from './data';\nexport { escapeJsonForScript } from './escape';\nexport { createFeedsScript, createLlmsScript } from './feeds';\n",
|
|
31
|
-
"import { join } from './path';\n\n/**\n * Find and inline Tailwind CSS from .reroute directory\n */\nexport async function inlineTailwindCSS(\n\tclientDir: string,\n\tminify = false,\n): Promise<string> {\n\ttry {\n\t\tconst candidates = [\n\t\t\tjoin(clientDir, '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '..', '.reroute', 'theme.css'),\n\t\t];\n\n\t\tlet cssPath = '';\n\t\tfor (const p of candidates) {\n\t\t\tif (await Bun.file(p).exists()) {\n\t\t\t\tcssPath = p;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!cssPath) return '';\n\n\t\tlet css = await Bun.file(cssPath).text();\n\n\t\tif (minify) {\n\t\t\tcss = minifyCSS(css);\n\t\t}\n\n\t\treturn `<style data-reroute=\"tailwind\">${css}</style>`;\n\t} catch {\n\t\treturn '';\n\t}\n}\n\n/**\n * Basic CSS minification without external dependencies\n */\nfunction minifyCSS(css: string): string {\n\treturn (\n\t\tcss\n\t\t\t// Remove block comments\n\t\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n\t\t\t// Collapse whitespace\n\t\t\t.replace(/\\s+/g, ' ')\n\t\t\t// Remove space around selectors and operators\n\t\t\t.replace(/\\s*([{}:;,>+~])\\s*/g, '$1')\n\t\t\t// Remove final semicolons before closing brace\n\t\t\t.replace(/;}/g, '}')\n\t\t\t.trim()\n\t);\n}\n",
|
|
31
|
+
"import { join } from './path';\n\n/**\n * Find and inline Tailwind CSS from .reroute directory\n */\nexport async function inlineTailwindCSS(\n\tclientDir: string,\n\tminify = false,\n): Promise<string> {\n\ttry {\n\t\t// Check for bundled CSS first (compiled binary support)\n\t\tconst bundledCss = (globalThis as Record<string, unknown>)\n\t\t\t.__REROUTE_THEME_CSS__ as string | undefined;\n\n\t\tif (bundledCss) {\n\t\t\tconst css = minify ? minifyCSS(bundledCss) : bundledCss;\n\t\t\treturn `<style data-reroute=\"tailwind\">${css}</style>`;\n\t\t}\n\n\t\t// Fallback to filesystem read (dev mode)\n\t\tconst candidates = [\n\t\t\tjoin(clientDir, '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '..', '.reroute', 'theme.css'),\n\t\t];\n\n\t\tlet cssPath = '';\n\t\tfor (const p of candidates) {\n\t\t\tif (await Bun.file(p).exists()) {\n\t\t\t\tcssPath = p;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!cssPath) return '';\n\n\t\tlet css = await Bun.file(cssPath).text();\n\n\t\tif (minify) {\n\t\t\tcss = minifyCSS(css);\n\t\t}\n\n\t\treturn `<style data-reroute=\"tailwind\">${css}</style>`;\n\t} catch {\n\t\treturn '';\n\t}\n}\n\n/**\n * Basic CSS minification without external dependencies\n */\nfunction minifyCSS(css: string): string {\n\treturn (\n\t\tcss\n\t\t\t// Remove block comments\n\t\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n\t\t\t// Collapse whitespace\n\t\t\t.replace(/\\s+/g, ' ')\n\t\t\t// Remove space around selectors and operators\n\t\t\t.replace(/\\s*([{}:;,>+~])\\s*/g, '$1')\n\t\t\t// Remove final semicolons before closing brace\n\t\t\t.replace(/;}/g, '}')\n\t\t\t.trim()\n\t);\n}\n",
|
|
32
32
|
"import 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\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\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\tperformSSRSetupInternal(options, streaming),\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 {\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// 1. Seed content modules for SSR rendering\n\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\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 preloadContentModule(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t);\n\n\t// 4. Compute SSR data\n\tconst computeResult: ComputeResult = await computeSSRData(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\t{ streaming, maxAge },\n\t\tsearchParams,\n\t);\n\n\tsetGlobalSSRData(computeResult.data);\n\n\t// 5. Load content collections\n\tconst byCollectionForSSR = await loadCollections(cwd, isWatchMode);\n\tsetGlobalCollections(byCollectionForSSR);\n\n\t// 6. Inline Tailwind CSS\n\tconst inlineStyleTag = await inlineTailwindCSS(clientDir, !streaming);\n\n\t// 7. Determine initial status override\n\tlet statusOverride = preloadResult.statusOverride;\n\tif (computeResult.statusContainer.value) {\n\t\tstatusOverride = computeResult.statusContainer.value;\n\t}\n\n\t// 8. Extract page metadata\n\tconst metadataResult = await extractPageMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tstatusOverride,\n\t\togConfig,\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): string {\n\tlet scripts = preloadScript;\n\n\t// Add collection scripts\n\tscripts += collectionScripts;\n\n\t// Add SSR data script\n\tscripts += createDataScript(ssrData, isWatchMode ? ssrError : undefined);\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",
|
|
33
33
|
"import type { TemplateParts } from './types';\n\n/**\n * Split HTML template into parts for streaming SSR.\n * Separates the template into head, root div, and tail sections.\n */\nexport function splitTemplate(html: string, appId = 'root'): TemplateParts {\n\tconst appIdEscaped = appId.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n\tconst rootDivRegex = new RegExp(\n\t\t`(<div[^>]*\\\\bid=[\"']${appIdEscaped}[\"'][^>]*>)([\\\\s\\\\S]*?)(<\\\\/div>)`,\n\t\t'i',\n\t);\n\n\tconst match = html.match(rootDivRegex);\n\tif (!match || match.index === undefined) {\n\t\tthrow new Error(`Could not find app root div with id=\"${appId}\"`);\n\t}\n\n\tconst [fullMatch, rootStart, , rootEnd] = match;\n\tconst matchIndex = match.index;\n\n\treturn {\n\t\thtmlHead: html.substring(0, matchIndex),\n\t\trootStart,\n\t\trootEnd,\n\t\thtmlTail: html.substring(matchIndex + fullMatch.length),\n\t};\n}\n",
|
|
34
34
|
"// Types\n\n// Core utilities\nexport * from './cache';\n// Content handling\nexport * from './collections';\n// HTTP utilities\nexport * from './compression';\n// SSR compute\nexport * from './compute';\nexport { computeSSRDataForPath } from './data';\n// HTML handling\nexport * from './html';\nexport * from './imports';\nexport * from './layouts';\nexport * from './metadata';\nexport * from './mime';\nexport * from './modules';\nexport * from './path';\nexport * from './preload';\n// Script generation\nexport * from './scripts';\nexport * from './seed';\n// Shared setup\nexport * from './setup';\nexport * from './styles';\nexport * from './template';\nexport * from './types';\n",
|
|
35
35
|
"import dedent from 'dedent';\nimport { cloneElement, type ReactElement } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport type { OGImageOptions } from '../config';\nimport {\n\tduplicateQueryParamData,\n\tgenerateCollectionScripts,\n\tgenerateHydrationScripts,\n\tperformSSRSetup,\n\tsetGlobalSSRData,\n} from './lib';\nimport { applyIndexTemplate, loadIndexHtml } from './lib/html';\nimport type { Doc } from './lib/types';\n\ntype SSRRenderOptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tminify?: boolean;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n};\n\ntype SSRRenderResult = {\n\thtml: string;\n\tstatus: number;\n};\n\n/**\n * Render a React component to a complete HTML document for SSR.\n * Uses synchronous rendering (renderToString) for full HTML generation.\n */\nasync function renderSSRDocument(\n\toptions: SSRRenderOptions,\n): Promise<SSRRenderResult> {\n\tconst {\n\t\tpathname,\n\t\trootComponent,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\thead = '',\n\t\tlang = 'en',\n\t\tappId = 'root',\n\t\tmaxAge = 0,\n\t\tsearchParams,\n\t\togConfig,\n\t} = options;\n\n\t// Perform shared SSR setup\n\tconst setup = await performSSRSetup(\n\t\t{\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\tbundleUrl,\n\t\t\tmaxAge,\n\t\t\tsearchParams,\n\t\t\togConfig,\n\t\t},\n\t\tfalse, // not streaming\n\t);\n\n\t// Duplicate data for query param routes\n\tconst duplicatedData = duplicateQueryParamData(setup.ssrData);\n\tsetGlobalSSRData(duplicatedData);\n\n\t// Render React component to string\n\tconst componentWithPathname = cloneElement<Doc>(rootComponent, {\n\t\tpathname,\n\t\tsearchParams,\n\t} as Doc);\n\tconst appHtml = renderToString(componentWithPathname);\n\n\t// Load base template\n\tconst baseTemplate = await loadIndexHtml(clientDir);\n\n\t// Generate collection scripts from accessed collections\n\tconst collectionScripts = generateCollectionScripts(setup.byCollectionForSSR);\n\n\t// Generate all hydration scripts\n\tconst hydrationScript = generateHydrationScripts(\n\t\tsetup.ssrData,\n\t\tisWatchMode,\n\t\tsetup.ssrError,\n\t\tcollectionScripts,\n\t\tsetup.preloadHydrationScript,\n\t\tbundleUrl,\n\t);\n\n\t// Determine final status\n\tlet statusOverride = setup.preloadStatusOverride;\n\tif (setup.statusContainer.value) {\n\t\tstatusOverride = setup.statusContainer.value;\n\t}\n\tif (setup.metadataResult.statusOverride) {\n\t\tstatusOverride = setup.metadataResult.statusOverride;\n\t}\n\n\t// Build combined head content\n\tconst extraHead = setup.bundlePreload + setup.preloadExtraHead;\n\tconst combinedHead = dedent(\n\t\t[\n\t\t\tdedent(head) || '',\n\t\t\tdedent(extraHead),\n\t\t\tdedent(setup.metadataResult.perPageHead),\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n'),\n\t);\n\n\t// Apply template with SSR content\n\tconst html = applyIndexTemplate(baseTemplate, appHtml, {\n\t\thead: [setup.inlineStyleTag, combinedHead].filter(Boolean).join('\\n'),\n\t\thydrationScript,\n\t\tlang: setup.metadataResult.pageLang || lang,\n\t\tappId,\n\t});\n\n\treturn {\n\t\thtml,\n\t\tstatus: statusOverride || 200,\n\t};\n}\n\nexport { renderSSRDocument, type SSRRenderOptions, type SSRRenderResult };\n",
|
|
36
36
|
"/**\n * Text and Markdown formatting for LLM-optimized content\n * Focuses on token efficiency: minimal metadata, maximum useful content\n *\n * Zero dependencies - uses lightweight regex-based conversion\n * Works great for 99% of cases without adding runtime deps\n */\n\n/**\n * Format content as plain text (.txt)\n * Token-efficient: No frontmatter, no URLs, just title + body\n */\nexport function formatAsText(content: {\n\ttitle?: string;\n\tbody: string;\n}): string {\n\tconst parts: string[] = [];\n\n\t// Add title if present (single line, no markdown)\n\tif (content.title) {\n\t\tparts.push(content.title);\n\t\tparts.push(''); // Blank line after title\n\t}\n\n\t// Add body (already cleaned text)\n\tparts.push(content.body);\n\n\treturn parts.join('\\n');\n}\n\n/**\n * Format content as markdown (.md)\n * Token-efficient: No frontmatter, but preserves markdown formatting\n */\nexport function formatAsMarkdown(content: {\n\ttitle?: string;\n\tmarkdown: string;\n}): string {\n\tconst parts: string[] = [];\n\n\t// Add title as h1 if present\n\tif (content.title) {\n\t\tparts.push(`# ${content.title}`);\n\t\tparts.push(''); // Blank line after title\n\t}\n\n\t// Add markdown content (preserves formatting)\n\tparts.push(content.markdown);\n\n\treturn parts.join('\\n');\n}\n\n/**\n * Strip HTML tags from text, preserving structure\n * Lightweight regex-based conversion with link preservation\n */\nexport function stripHtmlTags(html: string): string {\n\tlet text = html;\n\n\t// Convert links to readable format: \"text (url)\"\n\ttext = text.replace(\n\t\t/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\\/a>/gi,\n\t\t'$2 ($1)',\n\t);\n\n\t// Replace block elements with newlines\n\ttext = text.replace(\n\t\t/<\\/(div|p|h[1-6]|li|tr|section|article|header|footer|nav)>/gi,\n\t\t'\\n',\n\t);\n\ttext = text.replace(/<br\\s*\\/?>/gi, '\\n');\n\ttext = text.replace(/<hr\\s*\\/?>/gi, '\\n---\\n');\n\n\t// Replace list items with bullets\n\ttext = text.replace(/<li[^>]*>/gi, '\\n• ');\n\n\t// Add spacing for headings\n\ttext = text.replace(/<h[1-6][^>]*>/gi, '\\n\\n');\n\ttext = text.replace(/<\\/h[1-6]>/gi, '\\n');\n\n\t// Remove script and style tags completely\n\ttext = text.replace(\n\t\t/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n\t\t'',\n\t);\n\ttext = text.replace(/<style\\b[^<]*(?:(?!<\\/style>)<[^<]*)*<\\/style>/gi, '');\n\n\t// Remove all other HTML tags\n\ttext = text.replace(/<[^>]+>/g, '');\n\n\t// Decode common HTML entities\n\ttext = text.replace(/ /g, ' ');\n\ttext = text.replace(/&/g, '&');\n\ttext = text.replace(/</g, '<');\n\ttext = text.replace(/>/g, '>');\n\ttext = text.replace(/"/g, '\"');\n\ttext = text.replace(/'/g, \"'\");\n\ttext = text.replace(/'/g, \"'\");\n\ttext = text.replace(/'/g, \"'\");\n\n\t// Clean up excessive whitespace\n\ttext = text.replace(/[ \\t]+/g, ' '); // Multiple spaces → single space\n\ttext = text.replace(/\\n\\s+\\n/g, '\\n\\n'); // Clean blank lines\n\ttext = text.replace(/\\n{3,}/g, '\\n\\n'); // Max 2 consecutive newlines\n\n\treturn text.trim();\n}\n\n/**\n * Extract title from HTML content\n * Looks for h1, title tag, or first heading\n */\nexport function extractTitle(html: string): string | undefined {\n\t// Try h1 first (most common)\n\tconst h1Match = html.match(/<h1[^>]*>(.*?)<\\/h1>/i);\n\tif (h1Match) {\n\t\treturn stripHtmlTags(h1Match[1]).trim();\n\t}\n\n\t// Try title tag\n\tconst titleMatch = html.match(/<title[^>]*>(.*?)<\\/title>/i);\n\tif (titleMatch) {\n\t\treturn stripHtmlTags(titleMatch[1]).trim();\n\t}\n\n\t// Try any heading\n\tconst headingMatch = html.match(/<h[1-6][^>]*>(.*?)<\\/h[1-6]>/i);\n\tif (headingMatch) {\n\t\treturn stripHtmlTags(headingMatch[1]).trim();\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Convert HTML to markdown\n * Lightweight regex-based conversion that preserves links and structure\n */\nexport function htmlToMarkdown(html: string): string {\n\tlet md = html;\n\n\t// Convert headings\n\tmd = md.replace(/<h1[^>]*>(.*?)<\\/h1>/gi, '\\n# $1\\n');\n\tmd = md.replace(/<h2[^>]*>(.*?)<\\/h2>/gi, '\\n## $1\\n');\n\tmd = md.replace(/<h3[^>]*>(.*?)<\\/h3>/gi, '\\n### $1\\n');\n\tmd = md.replace(/<h4[^>]*>(.*?)<\\/h4>/gi, '\\n#### $1\\n');\n\tmd = md.replace(/<h5[^>]*>(.*?)<\\/h5>/gi, '\\n##### $1\\n');\n\tmd = md.replace(/<h6[^>]*>(.*?)<\\/h6>/gi, '\\n###### $1\\n');\n\n\t// Convert links\n\tmd = md.replace(/<a[^>]*href=\"([^\"]*)\"[^>]*>(.*?)<\\/a>/gi, '[$2]($1)');\n\n\t// Convert images\n\tmd = md.replace(\n\t\t/<img[^>]*src=\"([^\"]*)\"[^>]*alt=\"([^\"]*)\"[^>]*\\/?>/gi,\n\t\t'',\n\t);\n\n\t// Convert strong/bold\n\tmd = md.replace(/<(strong|b)(?:\\s+[^>]*)?>(.+?)<\\/\\1>/gi, '**$2**');\n\n\t// Convert emphasis/italic\n\tmd = md.replace(/<(em|i)(?:\\s+[^>]*)?>(.+?)<\\/\\1>/gi, '*$2*');\n\n\t// Convert code blocks\n\tmd = md.replace(\n\t\t/<pre[^>]*><code[^>]*>(.*?)<\\/code><\\/pre>/gis,\n\t\t'\\n```\\n$1\\n```\\n',\n\t);\n\tmd = md.replace(/<code[^>]*>(.*?)<\\/code>/gi, '`$1`');\n\n\t// Convert lists (process li elements first, then containers)\n\tmd = md.replace(/<li[^>]*>(.*?)<\\/li>/gis, '\\n- $1');\n\tmd = md.replace(/<\\/?ul[^>]*>/gi, '\\n');\n\tmd = md.replace(/<\\/?ol[^>]*>/gi, '\\n');\n\n\t// Convert paragraphs\n\tmd = md.replace(/<p[^>]*>/gi, '\\n');\n\tmd = md.replace(/<\\/p>/gi, '\\n');\n\n\t// Convert line breaks\n\tmd = md.replace(/<br\\s*\\/?>/gi, '\\n');\n\tmd = md.replace(/<hr\\s*\\/?>/gi, '\\n---\\n');\n\n\t// Remove script and style tags\n\tmd = md.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '');\n\tmd = md.replace(/<style\\b[^<]*(?:(?!<\\/style>)<[^<]*)*<\\/style>/gi, '');\n\n\t// Remove remaining HTML tags\n\tmd = md.replace(/<[^>]+>/g, '');\n\n\t// Decode HTML entities\n\tmd = md.replace(/ /g, ' ');\n\tmd = md.replace(/&/g, '&');\n\tmd = md.replace(/</g, '<');\n\tmd = md.replace(/>/g, '>');\n\tmd = md.replace(/"/g, '\"');\n\tmd = md.replace(/'/g, \"'\");\n\tmd = md.replace(/'/g, \"'\");\n\tmd = md.replace(/'/g, \"'\");\n\n\t// Clean up excessive whitespace\n\tmd = md.replace(/[ \\t]+/g, ' ');\n\tmd = md.replace(/\\n\\s+\\n/g, '\\n\\n');\n\tmd = md.replace(/\\n{3,}/g, '\\n\\n');\n\n\treturn md.trim();\n}\n\n/**\n * Generate footer for llms.txt index\n * Educates LLMs about available formats\n */\nexport function generateLLMsFooter(): string {\n\treturn '---\\nFormats: .txt | .md | Accept: text/plain | Accept: text/markdown';\n}\n",
|
|
37
37
|
"import { pathToFileURL } from 'node:url';\nimport type { ReactElement } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport type { LLMsOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\nimport { renderSSRDocument } from '../ssr/render';\nimport { extractTitle, htmlToMarkdown, stripHtmlTags } from './formatter';\n\n/**\n * Check if a route should be excluded from LLM features\n * Supports strings (substring match), RegExp, and custom functions\n */\nexport function shouldExcludeRoute(\n\tpathname: string,\n\texcludeRoutes?: (string | RegExp | ((pathname: string) => boolean))[],\n): boolean {\n\tif (!excludeRoutes || excludeRoutes.length === 0) {\n\t\treturn false;\n\t}\n\n\treturn Boolean(\n\t\texcludeRoutes.find((pattern) => {\n\t\t\tif (typeof pattern === 'string') {\n\t\t\t\t// Substring match for simplicity\n\t\t\t\treturn pathname.includes(pattern);\n\t\t\t}\n\t\t\tif (pattern instanceof RegExp) {\n\t\t\t\treturn pattern.test(pathname);\n\t\t\t}\n\t\t\tif (typeof pattern === 'function') {\n\t\t\t\treturn pattern(pathname);\n\t\t\t}\n\t\t\treturn false;\n\t\t}),\n\t);\n}\n\n/**\n * Extract content from a collection item (markdown/mdx)\n */\nasync function extractCollectionContent(\n\tcwd: string,\n\tclientDir: string,\n\tpathname: string,\n\tisWatchMode: boolean,\n\t_format: 'txt' | 'md',\n): Promise<{ title?: string; body: string; markdown: string } | null> {\n\ttry {\n\t\t// Parse pathname to find collection and slug\n\t\t// e.g., /blog/hello-world → collection: blog, slug: hello-world\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return null;\n\n\t\tconst collection = parts[0];\n\n\t\t// Load collection manifest\n\t\tconst collectionFile = join(\n\t\t\tcwd,\n\t\t\t'.reroute',\n\t\t\t'collections',\n\t\t\t`${collection}.js`,\n\t\t);\n\t\tconst exists = await Bun.file(collectionFile).exists();\n\t\tif (!exists) return null;\n\n\t\tconst url = `${pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\tconst mod = await import(url);\n\t\tconst items = mod.items || [];\n\n\t\t// Find the item matching the pathname\n\t\tconst item = items.find((i: Doc) => i.href === pathname);\n\t\tif (!item) return null;\n\n\t\t// Construct path to original source file in content folder\n\t\t// e.g., /blog/8-frontmatter-data-types -> routes/blog/content/8-frontmatter-data-types.*\n\t\t// The slug is the filename without extension\n\t\tconst slug = item.slug || item.name;\n\t\tif (!slug) return null;\n\n\t\t// Try common extensions: .mdx, .md, .tsx, .jsx\n\t\tconst extensions = ['.mdx', '.md', '.tsx', '.jsx'];\n\t\tlet componentPath: string | null = null;\n\n\t\tfor (const ext of extensions) {\n\t\t\tconst testPath = join(\n\t\t\t\tclientDir,\n\t\t\t\t'routes',\n\t\t\t\tcollection,\n\t\t\t\t'content',\n\t\t\t\t`${slug}${ext}`,\n\t\t\t);\n\t\t\tconst file = Bun.file(testPath);\n\t\t\tif (await file.exists()) {\n\t\t\t\tcomponentPath = testPath;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!componentPath) return null;\n\n\t\tconst meta = item.meta || {};\n\n\t\t// For markdown/mdx files, read the raw content directly\n\t\tif (componentPath.endsWith('.md') || componentPath.endsWith('.mdx')) {\n\t\t\tconst file = Bun.file(componentPath);\n\t\t\tlet rawContent = await file.text();\n\n\t\t\t// Strip frontmatter from the raw content\n\t\t\t// Frontmatter is between --- delimiters at the start\n\t\t\trawContent = rawContent.replace(/^---\\n[\\s\\S]*?\\n---\\n/, '');\n\n\t\t\t// For MDX, we need to strip JSX/React imports\n\t\t\tif (componentPath.endsWith('.mdx')) {\n\t\t\t\t// Remove import statements\n\t\t\t\trawContent = rawContent.replace(\n\t\t\t\t\t/^import\\s+.*?from\\s+['\"].*?['\"];?\\s*$/gm,\n\t\t\t\t\t'',\n\t\t\t\t);\n\t\t\t\t// Remove JSX components (basic approach - strip <Component />)\n\t\t\t\t// This is imperfect but works for simple cases\n\t\t\t\trawContent = rawContent.replace(/<[A-Z][\\w]*[^>]*\\/>/g, '');\n\t\t\t\trawContent = rawContent.replace(\n\t\t\t\t\t/<[A-Z][\\w]*[^>]*>[\\s\\S]*?<\\/[A-Z][\\w]*>/g,\n\t\t\t\t\t'',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\trawContent = rawContent.trim();\n\n\t\t\treturn {\n\t\t\t\ttitle: meta.title || extractTitle(rawContent),\n\t\t\t\tbody: stripHtmlTags(rawContent),\n\t\t\t\tmarkdown: rawContent,\n\t\t\t};\n\t\t}\n\n\t\t// For React components (.tsx, .jsx), try to import and render\n\t\ttry {\n\t\t\tconst componentUrl = `${pathToFileURL(componentPath).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\t\tconst componentMod = await import(componentUrl);\n\n\t\t\tconst Component = componentMod.default;\n\t\t\tif (!Component || typeof Component !== 'function') return null;\n\n\t\t\tconst html = renderToStaticMarkup(Component({}));\n\n\t\t\treturn {\n\t\t\t\ttitle: meta.title || extractTitle(html),\n\t\t\t\tbody: stripHtmlTags(html),\n\t\t\t\tmarkdown: htmlToMarkdown(html),\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`[reroute/llms] Failed to import component ${componentPath}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute/llms] Failed to extract collection content for ${pathname}:`,\n\t\t\terror,\n\t\t);\n\t\treturn null;\n\t}\n}\n\n/**\n * Extract content from an SSR route using full app rendering\n */\nasync function extractSSRContent(\n\tpathname: string,\n\trootComponent: ReactElement,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tbundleUrl: string,\n\t_format: 'txt' | 'md',\n): Promise<{ title?: string; body: string; markdown: string } | null> {\n\ttry {\n\t\t// Use the full SSR rendering pipeline to get the complete HTML\n\t\t// This includes all providers, context, and hooks - just like a real request\n\t\tconst { html } = await renderSSRDocument({\n\t\t\tpathname,\n\t\t\trootComponent,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\tbundleUrl,\n\t\t\tminify: false,\n\t\t\tmaxAge: 0,\n\t\t});\n\n\t\t// Extract just the content from the rendered HTML\n\t\t// Remove script tags, styles, nav, footer, etc.\n\t\tlet contentHtml = html;\n\n\t\t// Extract the body content (inside the app div)\n\t\tconst appDivMatch = html.match(/<div id=\"[^\"]+\">(.+?)<\\/div>\\s*<script/s);\n\t\tif (appDivMatch) {\n\t\t\tcontentHtml = appDivMatch[1];\n\t\t}\n\n\t\t// Remove nav and footer elements (common layout noise)\n\t\tcontentHtml = contentHtml.replace(/<nav[\\s\\S]*?<\\/nav>/gi, '');\n\t\tcontentHtml = contentHtml.replace(/<footer[\\s\\S]*?<\\/footer>/gi, '');\n\t\tcontentHtml = contentHtml.replace(/<header[\\s\\S]*?<\\/header>/gi, '');\n\t\tcontentHtml = contentHtml.replace(/<aside[\\s\\S]*?<\\/aside>/gi, '');\n\n\t\treturn {\n\t\t\ttitle: extractTitle(html),\n\t\t\tbody: stripHtmlTags(contentHtml),\n\t\t\tmarkdown: htmlToMarkdown(contentHtml),\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute/llms] Failed to extract SSR content for ${pathname}:`,\n\t\t\terror,\n\t\t);\n\t\treturn null;\n\t}\n}\n\n/**\n * Main content extraction function\n * Extracts clean, LLM-optimized content from any route type\n */\nexport async function extractContentForLLMs(options: {\n\tpathname: string;\n\trootComponent?: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl?: string;\n\tformat: 'txt' | 'md';\n\tllmsConfig?: LLMsOptions;\n}): Promise<string> {\n\tconst {\n\t\tpathname,\n\t\trootComponent,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\tformat,\n\t\tllmsConfig,\n\t} = options;\n\n\t// Check if route should be excluded\n\tif (shouldExcludeRoute(pathname, llmsConfig?.excludeRoutes)) {\n\t\tthrow new Error('Route excluded from LLM features');\n\t}\n\n\t// Try collection content first (most common case for content sites)\n\tlet content = await extractCollectionContent(\n\t\tcwd,\n\t\tclientDir,\n\t\tpathname,\n\t\tisWatchMode,\n\t\tformat,\n\t);\n\n\t// Fall back to SSR route (uses full app rendering)\n\tif (!content && rootComponent && bundleUrl) {\n\t\tcontent = await extractSSRContent(\n\t\t\tpathname,\n\t\t\trootComponent,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\tbundleUrl,\n\t\t\tformat,\n\t\t);\n\t}\n\n\t// If we still don't have content, throw\n\tif (!content) {\n\t\tthrow new Error('Content not found');\n\t}\n\n\t// Return based on format\n\tif (format === 'md') {\n\t\t// Return markdown with title as h1\n\t\tconst parts: string[] = [];\n\t\tif (content.title) {\n\t\t\tparts.push(`# ${content.title}`);\n\t\t\tparts.push('');\n\t\t}\n\t\tparts.push(content.markdown);\n\t\treturn parts.join('\\n');\n\t}\n\n\t// Return plain text\n\tconst parts: string[] = [];\n\tif (content.title) {\n\t\tparts.push(content.title);\n\t\tparts.push('');\n\t}\n\tparts.push(content.body);\n\treturn parts.join('\\n');\n}\n",
|
|
38
|
-
"import { pathToFileURL } from 'node:url';\nimport type { LLMsOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\nimport { shouldExcludeRoute } from './extractor';\n\ntype RouteEntry = {\n\tpath: string;\n\tsection?: string;\n\ttitle?: string;\n};\n\n/**\n * Discover static routes from routes.ts\n */\nexport async function discoverStaticRoutes(\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<RouteEntry[]> {\n\tconst routes: RouteEntry[] = [];\n\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst url = pathToFileURL(routesPath).href;\n\t\tconst mod = await import(`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`);\n\n\t\tconst routesList = (mod as Doc)?.routes as Doc[] | undefined;\n\t\tif (Array.isArray(routesList)) {\n\t\t\tfor (const route of routesList) {\n\t\t\t\tconst pattern = String(route?.pattern || '');\n\n\t\t\t\t// Skip error pages, layouts, and dynamic routes\n\t\t\t\tif (\n\t\t\t\t\tpattern.includes('[404]') ||\n\t\t\t\t\tpattern.includes('[layout]') ||\n\t\t\t\t\tpattern.includes('[skeleton]') ||\n\t\t\t\t\tpattern.includes(':')\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\troutes.push({\n\t\t\t\t\tpath: pattern,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('[reroute/llms] Failed to discover routes for index:', error);\n\t}\n\n\treturn routes;\n}\n\n/**\n * Discover collection content\n */\nexport async function discoverCollectionRoutes(\n\tcwd: string,\n\tcollections: string[],\n\tisWatchMode: boolean,\n\tllmsConfig?: LLMsOptions,\n): Promise<Map<string, RouteEntry[]>> {\n\tconst collectionsMap = new Map<string, RouteEntry[]>();\n\n\tfor (const collection of collections) {\n\t\t// Check if collection should be excluded\n\t\tif (llmsConfig?.excludeCollections?.includes(collection)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst collectionFile = join(\n\t\t\t\tcwd,\n\t\t\t\t'.reroute',\n\t\t\t\t'collections',\n\t\t\t\t`${collection}.js`,\n\t\t\t);\n\t\t\tconst exists = await Bun.file(collectionFile).exists();\n\n\t\t\tif (!exists) continue;\n\n\t\t\tconst url = `${pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\t\tconst mod = await import(url);\n\t\t\tconst items = mod.items || [];\n\n\t\t\tconst routes: RouteEntry[] = [];\n\n\t\t\tfor (const item of items) {\n\t\t\t\tconst href = String(item.href || '');\n\t\t\t\tif (href) {\n\t\t\t\t\t// Extract title from metadata\n\t\t\t\t\tconst title = item.meta?.title || item.meta?.name || item.name;\n\t\t\t\t\troutes.push({\n\t\t\t\t\t\tpath: href,\n\t\t\t\t\t\tsection: collection,\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (routes.length > 0) {\n\t\t\t\t// Sort by date if available (newest first)\n\t\t\t\troutes.sort((a, b) => {\n\t\t\t\t\tconst aItem = items.find((i: Doc) => i.href === a.path);\n\t\t\t\t\tconst bItem = items.find((i: Doc) => i.href === b.path);\n\n\t\t\t\t\tconst aDate = aItem?.meta?.date;\n\t\t\t\t\tconst bDate = bItem?.meta?.date;\n\n\t\t\t\t\tif (aDate && bDate) {\n\t\t\t\t\t\treturn new Date(bDate).getTime() - new Date(aDate).getTime();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\t\tcollectionsMap.set(collection, routes);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`[reroute/llms] Failed to discover collection ${collection}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn collectionsMap;\n}\n\n/**\n * Discover SSR data routes (routes with ssr.data that return arrays)\n */\nexport async function discoverSSRDataRoutes(\n\t_cwd: string,\n\tclientDir: string,\n\tstaticRoutes: RouteEntry[],\n\tisWatchMode: boolean,\n): Promise<Map<string, RouteEntry[]>> {\n\tconst ssrDataRoutes = new Map<string, RouteEntry[]>();\n\n\tfor (const route of staticRoutes) {\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', route.path);\n\t\t\tconst modUrl = `${pathToFileURL(abs).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\t\tconst mod = (await import(modUrl)) as Doc;\n\n\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t| undefined;\n\n\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t// Call the data function\n\t\t\t\tconst mockSet = { status: 200 };\n\t\t\t\tconst result = await dataFn({\n\t\t\t\t\tpathname: route.path,\n\t\t\t\t\tparams: {},\n\t\t\t\t\tset: mockSet,\n\t\t\t\t});\n\n\t\t\t\t// Look for arrays that might represent list items\n\t\t\t\tconst arrays = findArraysInData(result);\n\n\t\t\t\tfor (const array of arrays) {\n\t\t\t\t\tif (array.length > 0) {\n\t\t\t\t\t\tconst entries: RouteEntry[] = [];\n\n\t\t\t\t\t\tfor (const item of array) {\n\t\t\t\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\t\t\t\tconst identifier =\n\t\t\t\t\t\t\t\t\titem.version || item.slug || item.id || item.name || item.key;\n\n\t\t\t\t\t\t\t\tif (identifier) {\n\t\t\t\t\t\t\t\t\tentries.push({\n\t\t\t\t\t\t\t\t\t\tpath: `${route.path}/${identifier}`,\n\t\t\t\t\t\t\t\t\t\tsection: route.path.split('/').filter(Boolean)[0],\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\t\t\tssrDataRoutes.set(route.path, entries);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Route doesn't have ssr.data or it failed - skip silently\n\t\t}\n\t}\n\n\treturn ssrDataRoutes;\n}\n\n/**\n * Find arrays in data object (recursive)\n */\nfunction findArraysInData(obj: unknown): Doc[] {\n\tconst arrays: Doc[] = [];\n\n\tif (!obj || typeof obj !== 'object') {\n\t\treturn arrays;\n\t}\n\n\tfor (const value of Object.values(obj)) {\n\t\tif (Array.isArray(value)) {\n\t\t\tarrays.push(value);\n\t\t} else if (value && typeof value === 'object') {\n\t\t\tarrays.push(...findArraysInData(value));\n\t\t}\n\t}\n\n\treturn arrays;\n}\n\n/**\n * Generate /llms.txt index\n * Simple, token-efficient format: just URLs grouped by section\n */\nexport async function generateLLMsIndex(options: {\n\tcwd: string;\n\tclientDir: string;\n\tcollections: string[];\n\tbaseUrl: string;\n\tisWatchMode: boolean;\n\tllmsConfig?: LLMsOptions;\n}): Promise<string> {\n\tconst { cwd, clientDir, collections, baseUrl, isWatchMode, llmsConfig } =\n\t\toptions;\n\n\tconst parts: string[] = [];\n\n\t// Add header\n\tif (llmsConfig?.siteName) {\n\t\tparts.push(`# ${llmsConfig.siteName}`);\n\t\tparts.push('');\n\t}\n\n\tif (llmsConfig?.siteDescription) {\n\t\tparts.push(llmsConfig.siteDescription);\n\t\tparts.push('');\n\t}\n\n\t// Discover all routes\n\tconst staticRoutes = await discoverStaticRoutes(cwd, isWatchMode);\n\tconst collectionsMap = await discoverCollectionRoutes(\n\t\tcwd,\n\t\tcollections,\n\t\tisWatchMode,\n\t\tllmsConfig,\n\t);\n\tconst ssrDataRoutes = await discoverSSRDataRoutes(\n\t\tcwd,\n\t\tclientDir,\n\t\tstaticRoutes,\n\t\tisWatchMode,\n\t);\n\n\t// Check if this is a single-collection index (e.g., /docs/llms.txt vs /llms.txt)\n\tconst isSingleCollection = collections.length === 1;\n\tconst targetCollection = isSingleCollection ? collections[0] : null;\n\n\t// Group routes by section\n\tconst sections = new Map<string, RouteEntry[]>();\n\n\t// Add static routes (ungrouped)\n\tconst rootRoutes: RouteEntry[] = [];\n\tfor (const route of staticRoutes) {\n\t\tif (shouldExcludeRoute(route.path, llmsConfig?.excludeRoutes)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Skip root route initially, we'll handle it separately\n\t\tif (route.path === '/') {\n\t\t\trootRoutes.push(route);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Group by first segment\n\t\tconst firstSegment = route.path.split('/').filter(Boolean)[0];\n\t\tif (!firstSegment) {\n\t\t\trootRoutes.push(route);\n\t\t} else {\n\t\t\tif (!sections.has(firstSegment)) {\n\t\t\t\tsections.set(firstSegment, []);\n\t\t\t}\n\t\t\tsections.get(firstSegment)?.push(route);\n\t\t}\n\t}\n\n\t// Add root routes first (home page, about, contact, etc.)\n\t// But skip if this is a single-collection index\n\tif (!isSingleCollection && rootRoutes.length > 0) {\n\t\tfor (const route of rootRoutes) {\n\t\t\tconst title =\n\t\t\t\troute.title ||\n\t\t\t\t(route.path === '/' ? 'Home' : route.path.split('/').pop() || 'Page');\n\t\t\t// Use /index.txt for root route instead of /.txt\n\t\t\tconst urlPath = route.path === '/' ? '/index' : route.path;\n\t\t\tconst url = `${baseUrl}${urlPath}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add collections\n\tfor (const [collection, routes] of collectionsMap.entries()) {\n\t\tif (routes.length === 0) continue;\n\n\t\t// Filter out excluded routes\n\t\tconst filteredRoutes = routes.filter(\n\t\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t\t);\n\n\t\tif (filteredRoutes.length === 0) continue;\n\n\t\t// Capitalize collection name for section header\n\t\tconst sectionName =\n\t\t\tcollection.charAt(0).toUpperCase() + collection.slice(1);\n\t\tparts.push(`## ${sectionName}`);\n\t\tparts.push('');\n\n\t\tfor (const route of filteredRoutes) {\n\t\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\t\t// Collections won't have root paths, so no special handling needed\n\t\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add SSR data routes\n\t// But skip if this is a single-collection index (unless they belong to that collection)\n\tfor (const [routePattern, routes] of ssrDataRoutes.entries()) {\n\t\tif (routes.length === 0) continue;\n\n\t\t// Get first segment to check if it matches target collection\n\t\tconst routeSection = routePattern.split('/').filter(Boolean)[0];\n\n\t\t// Skip if single collection mode and this isn't the target collection\n\t\tif (isSingleCollection && routeSection !== targetCollection) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Filter out excluded routes\n\t\tconst filteredRoutes = routes.filter(\n\t\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t\t);\n\n\t\tif (filteredRoutes.length === 0) continue;\n\n\t\t// Create section name from route pattern\n\t\tconst sectionName =\n\t\t\trouteSection?.charAt(0).toUpperCase() + routeSection?.slice(1) ||\n\t\t\t'Content';\n\t\tparts.push(`## ${sectionName}`);\n\t\tparts.push('');\n\n\t\tfor (const route of filteredRoutes) {\n\t\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\t\t// SSR data routes won't have root paths, so no special handling needed\n\t\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add other static routes grouped by section\n\tfor (const [section, routes] of sections.entries()) {\n\t\tif (routes.length === 0) continue;\n\n\t\t// Skip if single collection mode and this isn't the target collection\n\t\tif (isSingleCollection && section !== targetCollection) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Filter out excluded routes\n\t\tconst filteredRoutes = routes.filter(\n\t\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t\t);\n\n\t\tif (filteredRoutes.length === 0) continue;\n\n\t\t// Skip if this section was already added as a collection\n\t\tif (collectionsMap.has(section)) continue;\n\n\t\tconst sectionName = section.charAt(0).toUpperCase() + section.slice(1);\n\t\tparts.push(`## ${sectionName}`);\n\t\tparts.push('');\n\n\t\tfor (const route of filteredRoutes) {\n\t\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\t\t// Static routes shouldn't have root paths here (already in rootRoutes)\n\t\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add footer explaining available formats\n\tparts.push('---');\n\tparts.push('');\n\tparts.push(\n\t\t'Formats: .txt | .md | Accept: text/plain | Accept: text/markdown',\n\t);\n\n\treturn parts.join('\\n');\n}\n",
|
|
39
|
-
"import type { SitemapOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\n\ntype SitemapRoute = {\n\tpath: string;\n\tpattern: string;\n\tisDynamic: boolean;\n\tchangefreq?:\n\t\t| 'always'\n\t\t| 'hourly'\n\t\t| 'daily'\n\t\t| 'weekly'\n\t\t| 'monthly'\n\t\t| 'yearly'\n\t\t| 'never';\n\tpriority?: number;\n\tlastmod?: string;\n};\n\ntype SitemapEntry = {\n\tloc: string;\n\tlastmod?: string;\n\tchangefreq?:\n\t\t| 'always'\n\t\t| 'hourly'\n\t\t| 'daily'\n\t\t| 'weekly'\n\t\t| 'monthly'\n\t\t| 'yearly'\n\t\t| 'never';\n\tpriority?: number;\n};\n\ntype SitemapDiscoveryResult = {\n\tstaticRoutes: SitemapRoute[];\n\tdynamicRoutes: SitemapRoute[];\n\tcollections: Map<string, SitemapEntry[]>;\n\tssrDataRoutes: Map<string, SitemapEntry[]>;\n};\n\n/**\n * Discover all routes from the generated routes.ts file\n */\nasync function discoverRoutes(\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<{ staticRoutes: SitemapRoute[]; dynamicRoutes: SitemapRoute[] }> {\n\tconst staticRoutes: SitemapRoute[] = [];\n\tconst dynamicRoutes: SitemapRoute[] = [];\n\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst url = Bun.pathToFileURL(routesPath).href;\n\t\tconst mod = await import(`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`);\n\n\t\tconst routes = (mod as Doc)?.routes as Doc[] | undefined;\n\t\tif (Array.isArray(routes)) {\n\t\t\tfor (const route of routes) {\n\t\t\t\tconst pattern = String(route?.pattern || '');\n\t\t\t\tconst path = String(route?.path || '');\n\n\t\t\t\t// Skip error pages and layouts\n\t\t\t\tif (\n\t\t\t\t\tpattern.includes('[404]') ||\n\t\t\t\t\tpattern.includes('[layout]') ||\n\t\t\t\t\tpattern.includes('[skeleton]')\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Check for dynamic segments (both bracket and colon syntax)\n\t\t\t\tconst isDynamic = pattern.includes(':');\n\n\t\t\t\tconst sitemapRoute: SitemapRoute = {\n\t\t\t\t\tpath,\n\t\t\t\t\tpattern,\n\t\t\t\t\tisDynamic,\n\t\t\t\t};\n\n\t\t\t\tif (isDynamic) {\n\t\t\t\t\tdynamicRoutes.push(sitemapRoute);\n\t\t\t\t} else {\n\t\t\t\t\tstaticRoutes.push(sitemapRoute);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('[reroute] Failed to discover routes for sitemap:', error);\n\t}\n\n\treturn { staticRoutes, dynamicRoutes };\n}\n\n/**\n * Discover content items for collections\n */\nasync function discoverCollectionContent(\n\tcwd: string,\n\tcollection: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n): Promise<SitemapEntry[]> {\n\tconst entries: SitemapEntry[] = [];\n\n\ttry {\n\t\t// Load pre-generated collection module\n\t\tconst collectionFile = join(\n\t\t\tcwd,\n\t\t\t'.reroute',\n\t\t\t'collections',\n\t\t\t`${collection}.js`,\n\t\t);\n\t\tconst exists = await Bun.file(collectionFile).exists();\n\n\t\tif (!exists) {\n\t\t\treturn entries;\n\t\t}\n\n\t\tconst url = `${Bun.pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\tconst mod = await import(url);\n\t\tconst items = mod.items || [];\n\n\t\tfor (const item of items) {\n\t\t\tconst href = String(item.href || '');\n\t\t\tconst meta = item.meta || {};\n\n\t\t\tif (href) {\n\t\t\t\tconst entry: SitemapEntry = {\n\t\t\t\t\tloc: `${baseUrl}${href}`,\n\t\t\t\t\tlastmod: meta.date ? new Date(meta.date).toISOString() : undefined,\n\t\t\t\t\tchangefreq: 'weekly',\n\t\t\t\t\tpriority: 0.7,\n\t\t\t\t};\n\t\t\t\tentries.push(entry);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute] Failed to discover collection ${collection}:`,\n\t\t\terror,\n\t\t);\n\t}\n\n\treturn entries;\n}\n\n/**\n * Discover SSR data routes (routes with ssr.data export that return arrays/lists)\n */\nasync function discoverSSRDataRoutes(\n\t_cwd: string,\n\tclientDir: string,\n\tstaticRoutes: SitemapRoute[],\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\tsitemapConfig?: SitemapOptions,\n): Promise<Map<string, SitemapEntry[]>> {\n\tconst ssrDataRoutes = new Map<string, SitemapEntry[]>();\n\n\tfor (const route of staticRoutes) {\n\t\t// Skip routes excluded from SSR data discovery\n\t\tif (sitemapConfig?.excludeDiscovery?.includes(route.pattern)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', route.path);\n\t\t\tconst mod = (await import(\n\t\t\t\tBun.pathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t)) as Doc;\n\n\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t| undefined;\n\n\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t// Call the data function to get the data\n\t\t\t\t// Provide a mock context with set.status for routes that need it\n\t\t\t\tconst mockSet = { status: 200 };\n\t\t\t\tconst result = await dataFn({\n\t\t\t\t\tpathname: route.pattern,\n\t\t\t\t\tparams: {},\n\t\t\t\t\tset: mockSet,\n\t\t\t\t});\n\n\t\t\t\t// Look for array data that could represent list items\n\t\t\t\tconst entries = extractEntriesFromData(\n\t\t\t\t\tresult,\n\t\t\t\t\troute.pattern,\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\tsitemapConfig,\n\t\t\t\t);\n\n\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\tssrDataRoutes.set(route.pattern, entries);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Route doesn't have ssr.data or it failed - skip silently\n\t\t}\n\t}\n\n\treturn ssrDataRoutes;\n}\n\n/**\n * Extract sitemap entries from ssr.data result\n * Supports custom extractUrls function or automatic array discovery\n */\nfunction extractEntriesFromData(\n\tdata: unknown,\n\troutePattern: string,\n\tbaseUrl: string,\n\tsitemapConfig?: SitemapOptions,\n): SitemapEntry[] {\n\tconst entries: SitemapEntry[] = [];\n\n\tif (!data || typeof data !== 'object') {\n\t\treturn entries;\n\t}\n\n\t// Use custom extractUrls if provided\n\tif (sitemapConfig?.extractUrls) {\n\t\ttry {\n\t\t\tconst items = sitemapConfig.extractUrls(data, routePattern);\n\t\t\tif (Array.isArray(items)) {\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\t\tconst entry = createEntryFromItem(\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (entry) {\n\t\t\t\t\t\t\tentries.push(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn entries;\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/sitemap] extractUrls failed:', error);\n\t\t\treturn entries;\n\t\t}\n\t}\n\n\t// Otherwise, recursively discover arrays in the data\n\tfunction findArrays(obj: Doc): Doc[] {\n\t\tconst arrays: Doc[] = [];\n\n\t\tfor (const value of Object.values(obj)) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tarrays.push(value);\n\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t// Recursively search nested objects\n\t\t\t\tarrays.push(...findArrays(value));\n\t\t\t}\n\t\t}\n\n\t\treturn arrays;\n\t}\n\n\tconst arrays = findArrays(data);\n\n\tfor (const array of arrays) {\n\t\tif (array.length > 0) {\n\t\t\tfor (const item of array) {\n\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\tconst entry = createEntryFromItem(\n\t\t\t\t\t\titem,\n\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t);\n\t\t\t\t\tif (entry) {\n\t\t\t\t\t\tentries.push(entry);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn entries;\n}\n\n/**\n * Create a sitemap entry from a data item\n */\nfunction createEntryFromItem(\n\titem: Record<string, unknown>,\n\troutePattern: string,\n\tbaseUrl: string,\n\tsitemapConfig?: SitemapOptions,\n): SitemapEntry | null {\n\t// Try custom extractor first\n\tlet identifier: string | null | undefined | unknown;\n\n\tif (sitemapConfig?.extractUrl) {\n\t\ttry {\n\t\t\tidentifier = sitemapConfig.extractUrl(item, routePattern);\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/sitemap] extractUrl failed:', error);\n\t\t}\n\t}\n\n\t// Fall back to default field detection if no custom extractor or it returned nothing\n\tif (!identifier) {\n\t\tidentifier = item.version || item.slug || item.id || item.name || item.key;\n\t}\n\n\tif (!identifier) {\n\t\treturn null;\n\t}\n\n\t// Build the URL based on the route pattern\n\tconst url = `${baseUrl}${routePattern}/${identifier}`;\n\n\tconst entry: SitemapEntry = {\n\t\tloc: url,\n\t\tchangefreq: sitemapConfig?.changefreq || 'weekly',\n\t\tpriority:\n\t\t\tsitemapConfig?.priority !== undefined ? sitemapConfig.priority : 0.6,\n\t};\n\n\t// Try custom lastmod extractor first\n\tif (sitemapConfig?.extractLastmod) {\n\t\ttry {\n\t\t\tconst lastmod = sitemapConfig.extractLastmod(item);\n\t\t\tif (lastmod) {\n\t\t\t\tentry.lastmod = new Date(lastmod).toISOString();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/sitemap] extractLastmod failed:', error);\n\t\t}\n\t}\n\n\t// Fall back to default field detection if no custom extractor\n\tif (!entry.lastmod) {\n\t\tif (item.publishedAt && typeof item.publishedAt === 'string') {\n\t\t\tentry.lastmod = new Date(item.publishedAt).toISOString();\n\t\t} else if (item.date && typeof item.date === 'string') {\n\t\t\tentry.lastmod = new Date(item.date).toISOString();\n\t\t} else if (item.updatedAt && typeof item.updatedAt === 'string') {\n\t\t\tentry.lastmod = new Date(item.updatedAt).toISOString();\n\t\t}\n\t}\n\n\treturn entry;\n}\n\n/**\n * Main sitemap discovery function\n */\nexport async function discoverSitemapData(\n\tcwd: string,\n\tclientDir: string,\n\tcollections: string[],\n\tbaseUrl: string,\n\tisWatchMode: boolean,\n\tsitemapConfig?: SitemapOptions,\n): Promise<SitemapDiscoveryResult> {\n\tconst { staticRoutes, dynamicRoutes } = await discoverRoutes(\n\t\tcwd,\n\t\tisWatchMode,\n\t);\n\t// Note: dynamicRoutes discovered but not used in sitemap (they need actual data to create URLs)\n\n\t// Discover collection content\n\tconst collectionsMap = new Map<string, SitemapEntry[]>();\n\tfor (const collection of collections) {\n\t\tconst entries = await discoverCollectionContent(\n\t\t\tcwd,\n\t\t\tcollection,\n\t\t\tisWatchMode,\n\t\t\tbaseUrl,\n\t\t);\n\t\tif (entries.length > 0) {\n\t\t\tcollectionsMap.set(collection, entries);\n\t\t}\n\t}\n\n\t// Discover SSR data routes\n\tconst ssrDataRoutes = await discoverSSRDataRoutes(\n\t\tcwd,\n\t\tclientDir,\n\t\tstaticRoutes,\n\t\tisWatchMode,\n\t\tbaseUrl,\n\t\tsitemapConfig,\n\t);\n\n\treturn {\n\t\tstaticRoutes,\n\t\tdynamicRoutes,\n\t\tcollections: collectionsMap,\n\t\tssrDataRoutes,\n\t};\n}\n\nexport {\n\tdiscoverCollectionContent,\n\tdiscoverRoutes,\n\tdiscoverSSRDataRoutes,\n\ttype SitemapDiscoveryResult,\n\ttype SitemapEntry,\n\ttype SitemapRoute,\n};\n",
|
|
38
|
+
"import { pathToFileURL } from 'node:url';\nimport type { LLMsOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\nimport { shouldExcludeRoute } from './extractor';\n\ntype RouteEntry = {\n\tpath: string;\n\tsection?: string;\n\ttitle?: string;\n};\n\n/**\n * Discover static routes from routes.ts\n */\nexport async function discoverStaticRoutes(\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<RouteEntry[]> {\n\tconst routes: RouteEntry[] = [];\n\n\ttry {\n\t\t// Check for bundled routes first (compiled binary support)\n\t\tlet routesList = (globalThis as Record<string, unknown>)\n\t\t\t.__REROUTE_ROUTES__ as Doc[] | undefined;\n\n\t\t// Fallback to dynamic import (dev mode)\n\t\tif (!routesList) {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst url = pathToFileURL(routesPath).href;\n\t\t\tconst mod = await import(\n\t\t\t\t`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`\n\t\t\t);\n\t\t\troutesList = (mod as Doc)?.routes as Doc[] | undefined;\n\t\t}\n\t\tif (Array.isArray(routesList)) {\n\t\t\tfor (const route of routesList) {\n\t\t\t\tconst pattern = String(route?.pattern || '');\n\n\t\t\t\t// Skip error pages, layouts, and dynamic routes\n\t\t\t\tif (\n\t\t\t\t\tpattern.includes('[404]') ||\n\t\t\t\t\tpattern.includes('[layout]') ||\n\t\t\t\t\tpattern.includes('[skeleton]') ||\n\t\t\t\t\tpattern.includes(':')\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\troutes.push({\n\t\t\t\t\tpath: pattern,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('[reroute/llms] Failed to discover routes for index:', error);\n\t}\n\n\treturn routes;\n}\n\n/**\n * Discover collection content\n */\nexport async function discoverCollectionRoutes(\n\tcwd: string,\n\tcollections: string[],\n\tisWatchMode: boolean,\n\tllmsConfig?: LLMsOptions,\n): Promise<Map<string, RouteEntry[]>> {\n\tconst collectionsMap = new Map<string, RouteEntry[]>();\n\n\tfor (const collection of collections) {\n\t\t// Check if collection should be excluded\n\t\tif (llmsConfig?.excludeCollections?.includes(collection)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst collectionFile = join(\n\t\t\t\tcwd,\n\t\t\t\t'.reroute',\n\t\t\t\t'collections',\n\t\t\t\t`${collection}.js`,\n\t\t\t);\n\t\t\tconst exists = await Bun.file(collectionFile).exists();\n\n\t\t\tif (!exists) continue;\n\n\t\t\tconst url = `${pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\t\tconst mod = await import(url);\n\t\t\tconst items = mod.items || [];\n\n\t\t\tconst routes: RouteEntry[] = [];\n\n\t\t\tfor (const item of items) {\n\t\t\t\tconst href = String(item.href || '');\n\t\t\t\tif (href) {\n\t\t\t\t\t// Extract title from metadata\n\t\t\t\t\tconst title = item.meta?.title || item.meta?.name || item.name;\n\t\t\t\t\troutes.push({\n\t\t\t\t\t\tpath: href,\n\t\t\t\t\t\tsection: collection,\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (routes.length > 0) {\n\t\t\t\t// Sort by date if available (newest first)\n\t\t\t\troutes.sort((a, b) => {\n\t\t\t\t\tconst aItem = items.find((i: Doc) => i.href === a.path);\n\t\t\t\t\tconst bItem = items.find((i: Doc) => i.href === b.path);\n\n\t\t\t\t\tconst aDate = aItem?.meta?.date;\n\t\t\t\t\tconst bDate = bItem?.meta?.date;\n\n\t\t\t\t\tif (aDate && bDate) {\n\t\t\t\t\t\treturn new Date(bDate).getTime() - new Date(aDate).getTime();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\n\t\t\t\tcollectionsMap.set(collection, routes);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`[reroute/llms] Failed to discover collection ${collection}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn collectionsMap;\n}\n\n/**\n * Discover SSR data routes (routes with ssr.data that return arrays)\n */\nexport async function discoverSSRDataRoutes(\n\t_cwd: string,\n\tclientDir: string,\n\tstaticRoutes: RouteEntry[],\n\tisWatchMode: boolean,\n): Promise<Map<string, RouteEntry[]>> {\n\tconst ssrDataRoutes = new Map<string, RouteEntry[]>();\n\n\tfor (const route of staticRoutes) {\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', route.path);\n\t\t\tconst modUrl = `${pathToFileURL(abs).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\t\tconst mod = (await import(modUrl)) as Doc;\n\n\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t| undefined;\n\n\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t// Call the data function\n\t\t\t\tconst mockSet = { status: 200 };\n\t\t\t\tconst result = await dataFn({\n\t\t\t\t\tpathname: route.path,\n\t\t\t\t\tparams: {},\n\t\t\t\t\tset: mockSet,\n\t\t\t\t});\n\n\t\t\t\t// Look for arrays that might represent list items\n\t\t\t\tconst arrays = findArraysInData(result);\n\n\t\t\t\tfor (const array of arrays) {\n\t\t\t\t\tif (array.length > 0) {\n\t\t\t\t\t\tconst entries: RouteEntry[] = [];\n\n\t\t\t\t\t\tfor (const item of array) {\n\t\t\t\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\t\t\t\tconst identifier =\n\t\t\t\t\t\t\t\t\titem.version || item.slug || item.id || item.name || item.key;\n\n\t\t\t\t\t\t\t\tif (identifier) {\n\t\t\t\t\t\t\t\t\tentries.push({\n\t\t\t\t\t\t\t\t\t\tpath: `${route.path}/${identifier}`,\n\t\t\t\t\t\t\t\t\t\tsection: route.path.split('/').filter(Boolean)[0],\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\t\t\tssrDataRoutes.set(route.path, entries);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Route doesn't have ssr.data or it failed - skip silently\n\t\t}\n\t}\n\n\treturn ssrDataRoutes;\n}\n\n/**\n * Find arrays in data object (recursive)\n */\nfunction findArraysInData(obj: unknown): Doc[] {\n\tconst arrays: Doc[] = [];\n\n\tif (!obj || typeof obj !== 'object') {\n\t\treturn arrays;\n\t}\n\n\tfor (const value of Object.values(obj)) {\n\t\tif (Array.isArray(value)) {\n\t\t\tarrays.push(value);\n\t\t} else if (value && typeof value === 'object') {\n\t\t\tarrays.push(...findArraysInData(value));\n\t\t}\n\t}\n\n\treturn arrays;\n}\n\n/**\n * Generate /llms.txt index\n * Simple, token-efficient format: just URLs grouped by section\n */\nexport async function generateLLMsIndex(options: {\n\tcwd: string;\n\tclientDir: string;\n\tcollections: string[];\n\tbaseUrl: string;\n\tisWatchMode: boolean;\n\tllmsConfig?: LLMsOptions;\n}): Promise<string> {\n\tconst { cwd, clientDir, collections, baseUrl, isWatchMode, llmsConfig } =\n\t\toptions;\n\n\tconst parts: string[] = [];\n\n\t// Add header\n\tif (llmsConfig?.siteName) {\n\t\tparts.push(`# ${llmsConfig.siteName}`);\n\t\tparts.push('');\n\t}\n\n\tif (llmsConfig?.siteDescription) {\n\t\tparts.push(llmsConfig.siteDescription);\n\t\tparts.push('');\n\t}\n\n\t// Discover all routes\n\tconst staticRoutes = await discoverStaticRoutes(cwd, isWatchMode);\n\tconst collectionsMap = await discoverCollectionRoutes(\n\t\tcwd,\n\t\tcollections,\n\t\tisWatchMode,\n\t\tllmsConfig,\n\t);\n\tconst ssrDataRoutes = await discoverSSRDataRoutes(\n\t\tcwd,\n\t\tclientDir,\n\t\tstaticRoutes,\n\t\tisWatchMode,\n\t);\n\n\t// Check if this is a single-collection index (e.g., /docs/llms.txt vs /llms.txt)\n\tconst isSingleCollection = collections.length === 1;\n\tconst targetCollection = isSingleCollection ? collections[0] : null;\n\n\t// Group routes by section\n\tconst sections = new Map<string, RouteEntry[]>();\n\n\t// Add static routes (ungrouped)\n\tconst rootRoutes: RouteEntry[] = [];\n\tfor (const route of staticRoutes) {\n\t\tif (shouldExcludeRoute(route.path, llmsConfig?.excludeRoutes)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Skip root route initially, we'll handle it separately\n\t\tif (route.path === '/') {\n\t\t\trootRoutes.push(route);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Group by first segment\n\t\tconst firstSegment = route.path.split('/').filter(Boolean)[0];\n\t\tif (!firstSegment) {\n\t\t\trootRoutes.push(route);\n\t\t} else {\n\t\t\tif (!sections.has(firstSegment)) {\n\t\t\t\tsections.set(firstSegment, []);\n\t\t\t}\n\t\t\tsections.get(firstSegment)?.push(route);\n\t\t}\n\t}\n\n\t// Add root routes first (home page, about, contact, etc.)\n\t// But skip if this is a single-collection index\n\tif (!isSingleCollection && rootRoutes.length > 0) {\n\t\tfor (const route of rootRoutes) {\n\t\t\tconst title =\n\t\t\t\troute.title ||\n\t\t\t\t(route.path === '/' ? 'Home' : route.path.split('/').pop() || 'Page');\n\t\t\t// Use /index.txt for root route instead of /.txt\n\t\t\tconst urlPath = route.path === '/' ? '/index' : route.path;\n\t\t\tconst url = `${baseUrl}${urlPath}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add collections\n\tfor (const [collection, routes] of collectionsMap.entries()) {\n\t\tif (routes.length === 0) continue;\n\n\t\t// Filter out excluded routes\n\t\tconst filteredRoutes = routes.filter(\n\t\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t\t);\n\n\t\tif (filteredRoutes.length === 0) continue;\n\n\t\t// Capitalize collection name for section header\n\t\tconst sectionName =\n\t\t\tcollection.charAt(0).toUpperCase() + collection.slice(1);\n\t\tparts.push(`## ${sectionName}`);\n\t\tparts.push('');\n\n\t\tfor (const route of filteredRoutes) {\n\t\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\t\t// Collections won't have root paths, so no special handling needed\n\t\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add SSR data routes\n\t// But skip if this is a single-collection index (unless they belong to that collection)\n\tfor (const [routePattern, routes] of ssrDataRoutes.entries()) {\n\t\tif (routes.length === 0) continue;\n\n\t\t// Get first segment to check if it matches target collection\n\t\tconst routeSection = routePattern.split('/').filter(Boolean)[0];\n\n\t\t// Skip if single collection mode and this isn't the target collection\n\t\tif (isSingleCollection && routeSection !== targetCollection) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Filter out excluded routes\n\t\tconst filteredRoutes = routes.filter(\n\t\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t\t);\n\n\t\tif (filteredRoutes.length === 0) continue;\n\n\t\t// Create section name from route pattern\n\t\tconst sectionName =\n\t\t\trouteSection?.charAt(0).toUpperCase() + routeSection?.slice(1) ||\n\t\t\t'Content';\n\t\tparts.push(`## ${sectionName}`);\n\t\tparts.push('');\n\n\t\tfor (const route of filteredRoutes) {\n\t\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\t\t// SSR data routes won't have root paths, so no special handling needed\n\t\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add other static routes grouped by section\n\tfor (const [section, routes] of sections.entries()) {\n\t\tif (routes.length === 0) continue;\n\n\t\t// Skip if single collection mode and this isn't the target collection\n\t\tif (isSingleCollection && section !== targetCollection) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Filter out excluded routes\n\t\tconst filteredRoutes = routes.filter(\n\t\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t\t);\n\n\t\tif (filteredRoutes.length === 0) continue;\n\n\t\t// Skip if this section was already added as a collection\n\t\tif (collectionsMap.has(section)) continue;\n\n\t\tconst sectionName = section.charAt(0).toUpperCase() + section.slice(1);\n\t\tparts.push(`## ${sectionName}`);\n\t\tparts.push('');\n\n\t\tfor (const route of filteredRoutes) {\n\t\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\t\t// Static routes shouldn't have root paths here (already in rootRoutes)\n\t\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\t\tparts.push(`- [${title}](${url})`);\n\t\t}\n\t\tparts.push('');\n\t}\n\n\t// Add footer explaining available formats\n\tparts.push('---');\n\tparts.push('');\n\tparts.push(\n\t\t'Formats: .txt | .md | Accept: text/plain | Accept: text/markdown',\n\t);\n\n\treturn parts.join('\\n');\n}\n",
|
|
39
|
+
"import type { SitemapOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\n\ntype SitemapRoute = {\n\tpath: string;\n\tpattern: string;\n\tisDynamic: boolean;\n\tchangefreq?:\n\t\t| 'always'\n\t\t| 'hourly'\n\t\t| 'daily'\n\t\t| 'weekly'\n\t\t| 'monthly'\n\t\t| 'yearly'\n\t\t| 'never';\n\tpriority?: number;\n\tlastmod?: string;\n};\n\ntype SitemapEntry = {\n\tloc: string;\n\tlastmod?: string;\n\tchangefreq?:\n\t\t| 'always'\n\t\t| 'hourly'\n\t\t| 'daily'\n\t\t| 'weekly'\n\t\t| 'monthly'\n\t\t| 'yearly'\n\t\t| 'never';\n\tpriority?: number;\n};\n\ntype SitemapDiscoveryResult = {\n\tstaticRoutes: SitemapRoute[];\n\tdynamicRoutes: SitemapRoute[];\n\tcollections: Map<string, SitemapEntry[]>;\n\tssrDataRoutes: Map<string, SitemapEntry[]>;\n};\n\n/**\n * Discover all routes from the generated routes.ts file\n */\nasync function discoverRoutes(\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<{ staticRoutes: SitemapRoute[]; dynamicRoutes: SitemapRoute[] }> {\n\tconst staticRoutes: SitemapRoute[] = [];\n\tconst dynamicRoutes: SitemapRoute[] = [];\n\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\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 url = Bun.pathToFileURL(routesPath).href;\n\t\t\tconst mod = await import(\n\t\t\t\t`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`\n\t\t\t);\n\t\t\troutes = (mod as Doc)?.routes as Doc[] | undefined;\n\t\t}\n\t\tif (Array.isArray(routes)) {\n\t\t\tfor (const route of routes) {\n\t\t\t\tconst pattern = String(route?.pattern || '');\n\t\t\t\tconst path = String(route?.path || '');\n\n\t\t\t\t// Skip error pages and layouts\n\t\t\t\tif (\n\t\t\t\t\tpattern.includes('[404]') ||\n\t\t\t\t\tpattern.includes('[layout]') ||\n\t\t\t\t\tpattern.includes('[skeleton]')\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Check for dynamic segments (both bracket and colon syntax)\n\t\t\t\tconst isDynamic = pattern.includes(':');\n\n\t\t\t\tconst sitemapRoute: SitemapRoute = {\n\t\t\t\t\tpath,\n\t\t\t\t\tpattern,\n\t\t\t\t\tisDynamic,\n\t\t\t\t};\n\n\t\t\t\tif (isDynamic) {\n\t\t\t\t\tdynamicRoutes.push(sitemapRoute);\n\t\t\t\t} else {\n\t\t\t\t\tstaticRoutes.push(sitemapRoute);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('[reroute] Failed to discover routes for sitemap:', error);\n\t}\n\n\treturn { staticRoutes, dynamicRoutes };\n}\n\n/**\n * Discover content items for collections\n */\nasync function discoverCollectionContent(\n\tcwd: string,\n\tcollection: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n): Promise<SitemapEntry[]> {\n\tconst entries: SitemapEntry[] = [];\n\n\ttry {\n\t\t// Load pre-generated collection module\n\t\tconst collectionFile = join(\n\t\t\tcwd,\n\t\t\t'.reroute',\n\t\t\t'collections',\n\t\t\t`${collection}.js`,\n\t\t);\n\t\tconst exists = await Bun.file(collectionFile).exists();\n\n\t\tif (!exists) {\n\t\t\treturn entries;\n\t\t}\n\n\t\tconst url = `${Bun.pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\tconst mod = await import(url);\n\t\tconst items = mod.items || [];\n\n\t\tfor (const item of items) {\n\t\t\tconst href = String(item.href || '');\n\t\t\tconst meta = item.meta || {};\n\n\t\t\tif (href) {\n\t\t\t\tconst entry: SitemapEntry = {\n\t\t\t\t\tloc: `${baseUrl}${href}`,\n\t\t\t\t\tlastmod: meta.date ? new Date(meta.date).toISOString() : undefined,\n\t\t\t\t\tchangefreq: 'weekly',\n\t\t\t\t\tpriority: 0.7,\n\t\t\t\t};\n\t\t\t\tentries.push(entry);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute] Failed to discover collection ${collection}:`,\n\t\t\terror,\n\t\t);\n\t}\n\n\treturn entries;\n}\n\n/**\n * Discover SSR data routes (routes with ssr.data export that return arrays/lists)\n */\nasync function discoverSSRDataRoutes(\n\t_cwd: string,\n\tclientDir: string,\n\tstaticRoutes: SitemapRoute[],\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\tsitemapConfig?: SitemapOptions,\n): Promise<Map<string, SitemapEntry[]>> {\n\tconst ssrDataRoutes = new Map<string, SitemapEntry[]>();\n\n\tfor (const route of staticRoutes) {\n\t\t// Skip routes excluded from SSR data discovery\n\t\tif (sitemapConfig?.excludeDiscovery?.includes(route.pattern)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', route.path);\n\t\t\tconst mod = (await import(\n\t\t\t\tBun.pathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t)) as Doc;\n\n\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t| undefined;\n\n\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t// Call the data function to get the data\n\t\t\t\t// Provide a mock context with set.status for routes that need it\n\t\t\t\tconst mockSet = { status: 200 };\n\t\t\t\tconst result = await dataFn({\n\t\t\t\t\tpathname: route.pattern,\n\t\t\t\t\tparams: {},\n\t\t\t\t\tset: mockSet,\n\t\t\t\t});\n\n\t\t\t\t// Look for array data that could represent list items\n\t\t\t\tconst entries = extractEntriesFromData(\n\t\t\t\t\tresult,\n\t\t\t\t\troute.pattern,\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\tsitemapConfig,\n\t\t\t\t);\n\n\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\tssrDataRoutes.set(route.pattern, entries);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Route doesn't have ssr.data or it failed - skip silently\n\t\t}\n\t}\n\n\treturn ssrDataRoutes;\n}\n\n/**\n * Extract sitemap entries from ssr.data result\n * Supports custom extractUrls function or automatic array discovery\n */\nfunction extractEntriesFromData(\n\tdata: unknown,\n\troutePattern: string,\n\tbaseUrl: string,\n\tsitemapConfig?: SitemapOptions,\n): SitemapEntry[] {\n\tconst entries: SitemapEntry[] = [];\n\n\tif (!data || typeof data !== 'object') {\n\t\treturn entries;\n\t}\n\n\t// Use custom extractUrls if provided\n\tif (sitemapConfig?.extractUrls) {\n\t\ttry {\n\t\t\tconst items = sitemapConfig.extractUrls(data, routePattern);\n\t\t\tif (Array.isArray(items)) {\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\t\tconst entry = createEntryFromItem(\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (entry) {\n\t\t\t\t\t\t\tentries.push(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn entries;\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/sitemap] extractUrls failed:', error);\n\t\t\treturn entries;\n\t\t}\n\t}\n\n\t// Otherwise, recursively discover arrays in the data\n\tfunction findArrays(obj: Doc): Doc[] {\n\t\tconst arrays: Doc[] = [];\n\n\t\tfor (const value of Object.values(obj)) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tarrays.push(value);\n\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t// Recursively search nested objects\n\t\t\t\tarrays.push(...findArrays(value));\n\t\t\t}\n\t\t}\n\n\t\treturn arrays;\n\t}\n\n\tconst arrays = findArrays(data);\n\n\tfor (const array of arrays) {\n\t\tif (array.length > 0) {\n\t\t\tfor (const item of array) {\n\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\tconst entry = createEntryFromItem(\n\t\t\t\t\t\titem,\n\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t);\n\t\t\t\t\tif (entry) {\n\t\t\t\t\t\tentries.push(entry);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn entries;\n}\n\n/**\n * Create a sitemap entry from a data item\n */\nfunction createEntryFromItem(\n\titem: Record<string, unknown>,\n\troutePattern: string,\n\tbaseUrl: string,\n\tsitemapConfig?: SitemapOptions,\n): SitemapEntry | null {\n\t// Try custom extractor first\n\tlet identifier: string | null | undefined | unknown;\n\n\tif (sitemapConfig?.extractUrl) {\n\t\ttry {\n\t\t\tidentifier = sitemapConfig.extractUrl(item, routePattern);\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/sitemap] extractUrl failed:', error);\n\t\t}\n\t}\n\n\t// Fall back to default field detection if no custom extractor or it returned nothing\n\tif (!identifier) {\n\t\tidentifier = item.version || item.slug || item.id || item.name || item.key;\n\t}\n\n\tif (!identifier) {\n\t\treturn null;\n\t}\n\n\t// Build the URL based on the route pattern\n\tconst url = `${baseUrl}${routePattern}/${identifier}`;\n\n\tconst entry: SitemapEntry = {\n\t\tloc: url,\n\t\tchangefreq: sitemapConfig?.changefreq || 'weekly',\n\t\tpriority:\n\t\t\tsitemapConfig?.priority !== undefined ? sitemapConfig.priority : 0.6,\n\t};\n\n\t// Try custom lastmod extractor first\n\tif (sitemapConfig?.extractLastmod) {\n\t\ttry {\n\t\t\tconst lastmod = sitemapConfig.extractLastmod(item);\n\t\t\tif (lastmod) {\n\t\t\t\tentry.lastmod = new Date(lastmod).toISOString();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/sitemap] extractLastmod failed:', error);\n\t\t}\n\t}\n\n\t// Fall back to default field detection if no custom extractor\n\tif (!entry.lastmod) {\n\t\tif (item.publishedAt && typeof item.publishedAt === 'string') {\n\t\t\tentry.lastmod = new Date(item.publishedAt).toISOString();\n\t\t} else if (item.date && typeof item.date === 'string') {\n\t\t\tentry.lastmod = new Date(item.date).toISOString();\n\t\t} else if (item.updatedAt && typeof item.updatedAt === 'string') {\n\t\t\tentry.lastmod = new Date(item.updatedAt).toISOString();\n\t\t}\n\t}\n\n\treturn entry;\n}\n\n/**\n * Main sitemap discovery function\n */\nexport async function discoverSitemapData(\n\tcwd: string,\n\tclientDir: string,\n\tcollections: string[],\n\tbaseUrl: string,\n\tisWatchMode: boolean,\n\tsitemapConfig?: SitemapOptions,\n): Promise<SitemapDiscoveryResult> {\n\tconst { staticRoutes, dynamicRoutes } = await discoverRoutes(\n\t\tcwd,\n\t\tisWatchMode,\n\t);\n\t// Note: dynamicRoutes discovered but not used in sitemap (they need actual data to create URLs)\n\n\t// Discover collection content\n\tconst collectionsMap = new Map<string, SitemapEntry[]>();\n\tfor (const collection of collections) {\n\t\tconst entries = await discoverCollectionContent(\n\t\t\tcwd,\n\t\t\tcollection,\n\t\t\tisWatchMode,\n\t\t\tbaseUrl,\n\t\t);\n\t\tif (entries.length > 0) {\n\t\t\tcollectionsMap.set(collection, entries);\n\t\t}\n\t}\n\n\t// Discover SSR data routes\n\tconst ssrDataRoutes = await discoverSSRDataRoutes(\n\t\tcwd,\n\t\tclientDir,\n\t\tstaticRoutes,\n\t\tisWatchMode,\n\t\tbaseUrl,\n\t\tsitemapConfig,\n\t);\n\n\treturn {\n\t\tstaticRoutes,\n\t\tdynamicRoutes,\n\t\tcollections: collectionsMap,\n\t\tssrDataRoutes,\n\t};\n}\n\nexport {\n\tdiscoverCollectionContent,\n\tdiscoverRoutes,\n\tdiscoverSSRDataRoutes,\n\ttype SitemapDiscoveryResult,\n\ttype SitemapEntry,\n\ttype SitemapRoute,\n};\n",
|
|
40
40
|
"export async function generateContentHash(content: string): Promise<string> {\n\tconst data = new TextEncoder().encode(content);\n\tconst buf = await crypto.subtle.digest('SHA-256', data);\n\tlet hex = '';\n\tfor (const b of new Uint8Array(buf)) hex += b.toString(16).padStart(2, '0');\n\treturn hex.slice(0, 8);\n}\n",
|
|
41
41
|
"import { pathToFileURL } from 'node:url';\nimport type { ComponentType } from 'react';\n\n// biome-ignore lint/suspicious/noExplicitAny: The user document\ntype Doc = any;\ninterface StreamingOptions {\n\tenabled?: boolean;\n\tdefaultSkeleton?: ComponentType | string;\n\tdefaultLayoutSkeleton?: ComponentType | string;\n}\n\n/**\n * Sitemap configuration options\n */\ninterface SitemapOptions {\n\t/** Enable sitemap generation (default: false) */\n\tenabled?: boolean;\n\n\t/** Base URL for sitemap generation (e.g., 'https://example.com') - required when enabled */\n\tbaseUrl?: string;\n\n\t/**\n\t * Maximum URLs per sitemap file before pagination (default: 50000)\n\t * When exceeded, creates multiple sitemap files with a sitemap index\n\t * Set lower for testing (e.g., 10) to verify pagination works\n\t */\n\tmaxUrlsPerPage?: number;\n\n\t/**\n\t * Completely exclude specific routes from the sitemap\n\t * Routes listed here will not appear in the sitemap at all\n\t * @example ['/admin', '/api']\n\t */\n\texcludeRoutes?: string[];\n\n\t/**\n\t * Exclude specific routes from SSR data array discovery\n\t * Routes listed here will still appear in the sitemap as single entries,\n\t * but won't generate multiple URLs from arrays found in their SSR data\n\t * @example ['/download', '/pricing'] - these routes appear once, not per array item\n\t */\n\texcludeDiscovery?: string[];\n\n\t/**\n\t * Extract urls from ssr.data result (full control over data shape)\n\t * If provided, this takes precedence over automatic array discovery\n\t * @param data - Full ssr.data result\n\t * @param routePattern - The route pattern (e.g., '/changelog')\n\t * @returns Array of items to process, or null/undefined to skip this route\n\t */\n\textractUrls?: (data: Doc, routePattern: string) => Doc[] | null | undefined;\n\n\t/**\n\t * Extract URL segment from ssr.data items\n\t * @param item - Data item from ssr.data result\n\t * @param routePattern - The route pattern (e.g., '/changelog')\n\t * @returns URL segment to append to routePattern (e.g., '0.1.0' -> '/changelog/0.1.0')\n\t */\n\textractUrl?: (item: Doc, routePattern: string) => string | null | undefined;\n\n\t/**\n\t * Extract lastmod date from ssr.data items\n\t * @param item - Data item from ssr.data result\n\t * @returns ISO date string or undefined\n\t */\n\textractLastmod?: (item: Doc) => string | undefined;\n\n\t/** Default changefreq for URLs */\n\tchangefreq?:\n\t\t| 'always'\n\t\t| 'hourly'\n\t\t| 'daily'\n\t\t| 'weekly'\n\t\t| 'monthly'\n\t\t| 'yearly'\n\t\t| 'never';\n\n\t/** Default priority for URLs */\n\tpriority?: number;\n}\n\n/**\n * RSS feed configuration options\n */\ninterface RSSOptions {\n\t/** Enable RSS feed generation (default: false) */\n\tenabled?: boolean;\n\n\t/** Base URL for RSS feeds (e.g., 'https://example.com') - required when enabled */\n\tbaseUrl?: string;\n\n\t/** Feed title (e.g., 'My Blog') */\n\ttitle?: string;\n\n\t/** Feed description */\n\tdescription?: string;\n\n\t/** Maximum number of items per feed (default: 50) */\n\tlimit?: number;\n\n\t/** Feed format: 'rss' or 'atom' (default: 'rss') */\n\tformat?: 'rss' | 'atom';\n\n\t/**\n\t * Completely exclude specific routes from the RSS feed\n\t * Routes listed here will not appear in the feed at all\n\t * @example ['/admin', '/api']\n\t */\n\texcludeRoutes?: string[];\n\n\t/**\n\t * Exclude specific routes from SSR data array discovery\n\t * Routes listed here won't generate multiple feed items from arrays in their SSR data,\n\t * but may still generate a single feed item if appropriate\n\t * @example ['/download', '/pricing'] - won't generate items per array entry\n\t */\n\texcludeDiscovery?: string[];\n\n\t/**\n\t * Extract items from ssr.data result (full control over data shape)\n\t * If provided, this takes precedence over automatic array discovery\n\t * @param data - Full ssr.data result\n\t * @param routePattern - The route pattern (e.g., '/changelog')\n\t * @returns Array of items to process, or null/undefined to skip this route\n\t */\n\textractUrls?: (data: Doc, routePattern: string) => Doc[] | null | undefined;\n\n\t/**\n\t * Extract URL segment from ssr.data items (same as sitemap)\n\t */\n\textractUrl?: (item: Doc, routePattern: string) => string | null | undefined;\n\n\t/**\n\t * Extract publication date from items\n\t */\n\textractPubDate?: (item: Doc) => string | undefined;\n\n\t/**\n\t * Extract author from items\n\t */\n\textractAuthor?: (item: Doc) => string | undefined;\n\n\t/**\n\t * Extract content/body from items\n\t */\n\textractContent?: (item: Doc) => string | undefined;\n\n\t/**\n\t * Extract description/summary from items\n\t * Falls back to item.description or item.excerpt if not provided\n\t */\n\textractDescription?: (item: Doc) => string | undefined;\n}\n\n/**\n * Markdown configuration options\n */\ninterface MarkdownOptions {\n\t/**\n\t * Custom components to use when rendering markdown\n\t * Path to a module that exports a components object compatible with react-markdown\n\t * @example './src/client/lib/markdown-components'\n\t */\n\tcomponents?: string;\n\n\t/** Enable GitHub Flavored Markdown (default: true if remark-gfm is installed) */\n\tenableGfm?: boolean;\n\n\t/** Shiki theme for syntax highlighting (default: 'github-dark') */\n\ttheme?: string;\n}\n\n/**\n * Search index configuration options\n */\ninterface SearchOptions {\n\t/** Enable search index generation (default: false) */\n\tenabled?: boolean;\n\n\t/**\n\t * Collections to include in search index\n\t * @default [] - all collections will be indexed\n\t * @example ['blog', 'docs']\n\t */\n\tcollections?: string[];\n\n\t/**\n\t * Include full content text in search (increases index size significantly)\n\t * @default false - only index headings and metadata\n\t */\n\tincludeContent?: boolean;\n\n\t/**\n\t * Maximum content length to index per item (characters)\n\t * @default 5000 - prevents huge content from bloating index\n\t */\n\tcontentLimit?: number;\n\n\t/**\n\t * Fields to index from frontmatter metadata\n\t * @default ['title', 'description', 'excerpt', 'tags']\n\t */\n\tmetaFields?: string[];\n\n\t/**\n\t * Minimum heading level to index (1-6)\n\t * @default 1 - index all headings\n\t */\n\tminHeadingLevel?: number;\n\n\t/**\n\t * Maximum heading level to index (1-6)\n\t * @default 6 - index all headings\n\t */\n\tmaxHeadingLevel?: number;\n\n\t/**\n\t * Default page size for paginated results\n\t * @default 20\n\t */\n\tdefaultPageSize?: number;\n\n\t/**\n\t * Maximum allowed page size (prevents excessive results)\n\t * @default 100\n\t */\n\tmaxPageSize?: number;\n}\n\n/**\n * OG Image generation configuration options\n */\ninterface OGImageOptions {\n\t/** Enable OG image generation (default: false) */\n\tenabled?: boolean;\n\n\t/** Base URL for absolute OG image URLs (e.g., 'https://example.com') - required when enabled */\n\tbaseUrl?: string;\n\n\t/** Path to default template component or 'default' for built-in template */\n\tdefaultTemplate?: string;\n\n\t/** Image width in pixels (default: 1200) */\n\twidth?: number;\n\n\t/** Image height in pixels (default: 630) */\n\theight?: number;\n\n\t/** Cache duration in seconds (default: 3600 = 1 hour) */\n\tmaxAge?: number;\n\n\t/** Default avatar/logo URL (can be external or local path) */\n\tavatar?: string;\n\n\t/** Site name to display */\n\tsiteName?: string;\n}\n\n/**\n * LLMs content configuration options\n */\ninterface LLMsOptions {\n\t/** Enable LLM content features (default: false) */\n\tenabled?: boolean;\n\n\t/** Base URL for absolute URLs in llms.txt index (e.g., 'https://example.com') */\n\tbaseUrl?: string;\n\n\t/** Enable .txt extension for routes (default: true when enabled) */\n\tenableTextExtension?: boolean;\n\n\t/** Enable .md extension for routes (default: true when enabled) */\n\tenableMarkdownExtension?: boolean;\n\n\t/** Enable Accept header content negotiation (default: true when enabled) */\n\tenableContentNegotiation?: boolean;\n\n\t/** Enable /llms.txt index generation (default: true when enabled) */\n\tenableIndex?: boolean;\n\n\t/** Enable /llms-full.txt generation (default: true when enabled) */\n\tenableFullContent?: boolean;\n\n\t/** Cache duration in seconds for LLM content (default: 86400 = 24 hours, or falls back to options.maxAge) */\n\tmaxAge?: number;\n\n\t/** Cache duration in seconds for llms-full.txt specifically (default: 604800 = 7 days, or falls back to llms.maxAge) */\n\tmaxAgeFull?: number;\n\n\t/** Maximum items in full content bundle (default: 10000) */\n\tmaxItems?: number;\n\n\t/** Maximum file size for full content in bytes (default: 50MB) */\n\tmaxSize?: number;\n\n\t/**\n\t * Exclude specific routes from LLM features\n\t * Supports strings (exact match or substring), RegExp, or custom functions\n\t * @example ['/admin', '/api', /^\\/private/, (path) => path.includes('draft')]\n\t */\n\texcludeRoutes?: (string | RegExp | ((pathname: string) => boolean))[];\n\n\t/**\n\t * Exclude collections from LLM features\n\t * @example ['drafts', 'private']\n\t */\n\texcludeCollections?: string[];\n\n\t/** Site name for index header */\n\tsiteName?: string;\n\n\t/** Site description for index header (brief context for LLMs) */\n\tsiteDescription?: string;\n\n\t/**\n\t * Per-collection customization for titles and descriptions\n\t * @example\n\t * ```ts\n\t * collections: {\n\t * blog: {\n\t * title: 'My Awesome Blog',\n\t * description: 'Insights and tutorials about web development'\n\t * },\n\t * docs: {\n\t * title: 'Documentation',\n\t * description: 'Complete API reference and guides'\n\t * }\n\t * }\n\t * ```\n\t */\n\tcollections?: Record<\n\t\tstring,\n\t\t{\n\t\t\t/** Custom title for this collection's LLMS index */\n\t\t\ttitle?: string;\n\t\t\t/** Custom description for this collection's LLMS index */\n\t\t\tdescription?: string;\n\t\t}\n\t>;\n}\n\n/**\n * Robots policy for specific user-agents\n */\ninterface RobotsPolicy {\n\t/** User-Agent (e.g., '*', 'Googlebot', 'GPTBot') */\n\tuserAgent: string;\n\n\t/** Paths to explicitly allow */\n\tallow?: string[];\n\n\t/** Paths to disallow */\n\tdisallow?: string[];\n\n\t/** Crawl delay for this user-agent (seconds) */\n\tcrawlDelay?: number;\n}\n\n/**\n * Robots.txt generation configuration options\n */\ninterface RobotsOptions {\n\t/** Enable robots.txt generation (default: false) */\n\tenabled?: boolean;\n\n\t/** Base URL for sitemap reference (e.g., 'https://example.com') - required when enabled */\n\tbaseUrl?: string;\n\n\t/** Cache duration in seconds (default: 86400 = 24 hours) */\n\tmaxAge?: number;\n\n\t/** Custom policies per user-agent (default: permissive) */\n\tpolicies?: RobotsPolicy[];\n\n\t/** Auto-reference sitemap.xml if sitemap is enabled (default: true) */\n\treferenceSitemap?: boolean;\n\n\t/** Auto-disallow routes excluded from sitemap (default: true) */\n\tsitemapExclusion?: boolean;\n\n\t/** Auto-disallow old redirect source paths (default: true) */\n\tredirectExclusion?: boolean;\n\n\t/** Additional raw text appended to robots.txt */\n\tcustomRules?: string;\n\n\t/** Global crawl delay in seconds (optional) */\n\tcrawlDelay?: number;\n}\n\n/**\n * Redirect handler function that can dynamically determine destination\n * @param url - The original URL object\n * @returns The destination path/url or null to skip redirect\n */\ntype RedirectHandler = (url: URL) => string | null | Promise<string | null>;\n\n/**\n * Individual redirect rule\n */\ninterface RedirectRule {\n\t/** Source path (string or regex pattern) */\n\tsource: string | RegExp;\n\t/** Destination path or handler function */\n\tdestination: string | RedirectHandler;\n\t/** HTTP status code (301 = permanent, 302 = temporary, 307 = preserve method, 308 = permanent preserve method) */\n\tstatus?: 301 | 302 | 307 | 308;\n\t/** Whether source is a regex pattern (auto-detected if source is RegExp) */\n\tregex?: boolean;\n}\n\ninterface ConfigOptions {\n\t// App component - must be string path in config (not ReactElement)\n\tapp?: string;\n\n\t// SSR options\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\n\t// Static serving options\n\tassets?: string;\n\tprefix?: string;\n\tignorePatterns?: (string | RegExp)[];\n\tstaticHeaders?: Record<string, string>;\n\tmaxAge?: number;\n\tdirective?: string;\n\tindexHTML?: boolean;\n\n\t// Build options\n\tminify?: boolean;\n\n\t// Compression (applies to both sync and streaming SSR)\n\tcompression?: boolean;\n\n\t// Image optimization options\n\timageMaxAge?: number;\n\timageAllowedDomains?: string[];\n\timageMaxWidth?: number;\n\timageMaxHeight?: number;\n\n\t// Bundle caching options\n\tbundleMaxAge?: number;\n}\n\ninterface RerouteConfig {\n\toptions?: ConfigOptions;\n\tstreaming?: StreamingOptions;\n\tredirects?: RedirectRule[];\n\tsitemap?: SitemapOptions;\n\trss?: RSSOptions;\n\tmarkdown?: MarkdownOptions;\n\tsearch?: SearchOptions;\n\togImage?: OGImageOptions;\n\tllms?: LLMsOptions;\n\trobots?: RobotsOptions;\n}\n\nfunction defineConfig(config: RerouteConfig): RerouteConfig {\n\treturn config;\n}\n\nasync function loadConfig(cwd: string): Promise<RerouteConfig> {\n\t// Check for bundled config first (compiled binary support)\n\tconst bundledConfig = (globalThis as Record<string, unknown>)\n\t\t.__REROUTE_CONFIG__ as RerouteConfig | undefined;\n\tif (bundledConfig) {\n\t\treturn bundledConfig;\n\t}\n\n\t// Fallback to filesystem read (dev mode)\n\tconst configPath = `${cwd}/reroute.config.ts`;\n\tconst configFile = Bun.file(configPath);\n\n\tif (!(await configFile.exists())) {\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst mod = await import(\n\t\t\t`${pathToFileURL(configPath).href}?t=${Date.now()}`\n\t\t);\n\t\treturn (mod.default || mod) as RerouteConfig;\n\t} catch (error) {\n\t\tconsole.warn('[reroute] Failed to load reroute.config.ts:', error);\n\t\treturn {};\n\t}\n}\n\nexport {\n\tdefineConfig,\n\tloadConfig,\n\ttype ConfigOptions,\n\ttype LLMsOptions,\n\ttype MarkdownOptions,\n\ttype OGImageOptions,\n\ttype RedirectRule,\n\ttype RerouteConfig,\n\ttype RobotsOptions,\n\ttype RobotsPolicy,\n\ttype RSSOptions,\n\ttype SearchOptions,\n\ttype SitemapOptions,\n\ttype StreamingOptions,\n};\n",
|
|
42
42
|
"import { readdir, stat } from 'node:fs/promises';\nimport { join } from '../ssr/lib/path';\n\nexport async function listContentFiles(\n\tdir: string,\n\tbaseRel: string,\n): Promise<string[]> {\n\tconst out: string[] = [];\n\ttry {\n\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tconst full = join(dir, entry.name);\n\t\t\tconst rel = join(baseRel, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tconst nested = await listContentFiles(full, rel);\n\t\t\t\tout.push(...nested);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\tif (/\\.(tsx|ts)$/.test(entry.name) && !entry.name.startsWith('_')) {\n\t\t\t\t\tout.push(rel);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// ignore missing dirs\n\t}\n\treturn out;\n}\n\n// buildContentDTOs removed - content is now fully pre-generated at build time\n\nexport async function discoverCollections(\n\tclientDir: string,\n): Promise<string[]> {\n\tconst root = join(clientDir, 'routes');\n\tconst collections = new Set<string>();\n\ttry {\n\t\tconst entries = await readdir(root, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tconst contentDir = join(root, entry.name, 'content');\n\t\t\t\ttry {\n\t\t\t\t\tawait stat(contentDir);\n\t\t\t\t\tcollections.add(entry.name);\n\t\t\t\t} catch {\n\t\t\t\t\t// content directory doesn't exist, skip\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// routes directory doesn't exist\n\t}\n\treturn Array.from(collections);\n}\n",
|
|
@@ -45,17 +45,17 @@
|
|
|
45
45
|
"import type { ReactElement } from 'react';\nimport type { LLMsOptions } from '../config';\nimport { extractContentForLLMs, shouldExcludeRoute } from './extractor';\n\ntype RouteEntry = {\n\tpath: string;\n\tdate?: string;\n};\n\n/**\n * Generate /llms-full.txt - all site content in one file\n * Runtime-only generation with aggressive caching (7 days default)\n */\nexport async function generateLLMsFullContent(options: {\n\trootComponent?: ReactElement;\n\tcwd: string;\n\tclientDir: string;\n\tcollections: string[];\n\tbaseUrl: string;\n\tisWatchMode: boolean;\n\tbundleUrl?: string;\n\tllmsConfig?: LLMsOptions;\n}): Promise<{\n\tcontent: string;\n\tstats: { itemCount: number; byteSize: number };\n}> {\n\tconst {\n\t\trootComponent,\n\t\tcwd,\n\t\tclientDir,\n\t\tcollections,\n\t\tbaseUrl,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\tllmsConfig,\n\t} = options;\n\n\tconst parts: string[] = [];\n\tlet itemCount = 0;\n\n\t// Add header\n\tif (llmsConfig?.siteName) {\n\t\tparts.push(`# ${llmsConfig.siteName}`);\n\t\tparts.push('');\n\t}\n\n\tif (llmsConfig?.siteDescription) {\n\t\tparts.push(llmsConfig.siteDescription);\n\t\tparts.push('');\n\t}\n\n\tif (parts.length > 0) {\n\t\tparts.push(`${baseUrl}/index.txt`);\n\t\tparts.push('');\n\t\tparts.push('---');\n\t\tparts.push('');\n\t}\n\n\t// Discover all routes (reuse index-generator logic)\n\tconst {\n\t\tdiscoverStaticRoutes,\n\t\tdiscoverCollectionRoutes,\n\t\tdiscoverSSRDataRoutes,\n\t} = await import('./index-generator');\n\n\tconst staticRoutes = await discoverStaticRoutes(cwd, isWatchMode);\n\tconst collectionsMap = await discoverCollectionRoutes(\n\t\tcwd,\n\t\tcollections,\n\t\tisWatchMode,\n\t\tllmsConfig,\n\t);\n\tconst ssrDataRoutes = await discoverSSRDataRoutes(\n\t\tcwd,\n\t\tclientDir,\n\t\tstaticRoutes,\n\t\tisWatchMode,\n\t);\n\n\t// Collect all routes into a single list\n\tconst allRoutes: RouteEntry[] = [];\n\n\t// Add static routes\n\tfor (const route of staticRoutes) {\n\t\tif (shouldExcludeRoute(route.path, llmsConfig?.excludeRoutes)) {\n\t\t\tcontinue;\n\t\t}\n\t\tallRoutes.push({ path: route.path });\n\t}\n\n\t// Add collection routes\n\tfor (const [_collection, routes] of collectionsMap.entries()) {\n\t\tfor (const route of routes) {\n\t\t\tif (shouldExcludeRoute(route.path, llmsConfig?.excludeRoutes)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tallRoutes.push({ path: route.path });\n\t\t}\n\t}\n\n\t// Add SSR data routes\n\tfor (const [_routePattern, routes] of ssrDataRoutes.entries()) {\n\t\tfor (const route of routes) {\n\t\t\tif (shouldExcludeRoute(route.path, llmsConfig?.excludeRoutes)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tallRoutes.push({ path: route.path });\n\t\t}\n\t}\n\n\t// Limit items\n\tconst maxItems = llmsConfig?.maxItems || 10000;\n\tconst routesToProcess = allRoutes.slice(0, maxItems);\n\n\t// Extract content for each route\n\tconst maxSize = llmsConfig?.maxSize || 50 * 1024 * 1024; // 50MB default\n\tlet currentSize = 0;\n\n\tfor (const route of routesToProcess) {\n\t\ttry {\n\t\t\t// Extract content as plain text (more token-efficient)\n\t\t\tconst content = await extractContentForLLMs({\n\t\t\t\tpathname: route.path,\n\t\t\t\trootComponent,\n\t\t\t\tclientDir,\n\t\t\t\tcwd,\n\t\t\t\tisWatchMode,\n\t\t\t\tbundleUrl,\n\t\t\t\tformat: 'txt',\n\t\t\t\tllmsConfig,\n\t\t\t});\n\n\t\t\t// Check size limit\n\t\t\tconst contentSize = Buffer.byteLength(content, 'utf8');\n\t\t\tif (currentSize + contentSize > maxSize) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[reroute/llms] Reached size limit (${maxSize} bytes), stopping at ${itemCount} items`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Extract title from content (first line if it exists)\n\t\t\tconst lines = content.split('\\n');\n\t\t\tconst title = lines[0] || 'Untitled';\n\t\t\tconst body = lines.slice(lines[1] === '' ? 2 : 1).join('\\n'); // Skip title and blank line\n\n\t\t\t// Use /index.txt for root route instead of /.txt\n\t\t\tconst urlPath = route.path === '/' ? '/index' : route.path;\n\t\t\tconst url = `${baseUrl}${urlPath}.txt`;\n\n\t\t\t// Add content block: title, URL, then body\n\t\t\tparts.push(title);\n\t\t\tparts.push('');\n\t\t\tparts.push(url);\n\t\t\tparts.push('');\n\t\t\tif (body.trim()) {\n\t\t\t\tparts.push(body);\n\t\t\t\tparts.push('');\n\t\t\t}\n\t\t\tparts.push('---');\n\t\t\tparts.push('');\n\n\t\t\titemCount++;\n\t\t\tcurrentSize += contentSize;\n\t\t} catch (error) {\n\t\t\t// Skip items that fail to extract\n\t\t\tconsole.warn(\n\t\t\t\t`[reroute/llms] Failed to extract content for ${route.path}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Add footer at the very end\n\tif (parts.length > 0) {\n\t\t// Remove last separator\n\t\tif (parts[parts.length - 1] === '') parts.pop();\n\t\tif (parts[parts.length - 1] === '---') parts.pop();\n\t\tif (parts[parts.length - 1] === '') parts.pop();\n\n\t\tparts.push('---');\n\t\tparts.push('');\n\t\tparts.push(\n\t\t\t'Formats: .txt | .md | Accept: text/plain | Accept: text/markdown',\n\t\t);\n\t}\n\n\tconst fullContent = parts.join('\\n');\n\tconst byteSize = Buffer.byteLength(fullContent, 'utf8');\n\n\treturn {\n\t\tcontent: fullContent,\n\t\tstats: { itemCount, byteSize },\n\t};\n}\n",
|
|
46
46
|
"export {\n\textractParamsFromPath,\n\tfindOGImageForPath,\n\tloadOGImageComponent,\n} from './discovery';\nexport { generateOGImageMetaTags } from './meta';\nexport { DefaultOGTemplate, renderOGImageToPNG } from './render';\nexport type { OGImageProps } from './types';\n",
|
|
47
47
|
"import { createElement } from 'react';\nimport type { OGImageProps } from './types';\n\n// biome-ignore lint/suspicious/noExplicitAny: what we can do here?\ntype Any = any;\n/**\n * Render an OG image component to PNG using Satori and resvg\n */\n\nexport async function renderOGImageToPNG(\n\tComponent: Any,\n\tprops: OGImageProps,\n\toptions: {\n\t\twidth?: number;\n\t\theight?: number;\n\t} = {},\n): Promise<Buffer> {\n\tconst width = options.width || 1200;\n\tconst height = options.height || 630;\n\n\ttry {\n\t\t// Dynamically import @vercel/og to avoid bundling it if not used\n\t\tconst { ImageResponse } = await import('@vercel/og');\n\n\t\t// Create React element from component\n\t\tconst element = createElement(Component, props);\n\n\t\t// Use ImageResponse to render the component\n\t\tconst imageResponse = new ImageResponse(element, {\n\t\t\twidth,\n\t\t\theight,\n\t\t});\n\n\t\t// Convert Response to Buffer\n\t\tconst arrayBuffer = await imageResponse.arrayBuffer();\n\t\treturn Buffer.from(arrayBuffer);\n\t} catch (error) {\n\t\tconsole.error('[reroute] Failed to render OG image:', error);\n\t\tthrow new Error(\n\t\t\t`Failed to render OG image: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\n/**\n * Default OG image template\n * Renders a simple card with title and description\n */\nexport function DefaultOGTemplate({\n\tmeta,\n\tavatar,\n\tsiteName: siteNameProp,\n}: OGImageProps) {\n\tconst title = meta?.title || 'Untitled';\n\tconst description = meta?.description || '';\n\tconst siteName = siteNameProp || meta?.site_name || meta?.siteName || '';\n\n\treturn createElement(\n\t\t'div',\n\t\t{\n\t\t\tstyle: {\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflexDirection: 'column',\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%',\n\t\t\t\tbackgroundColor: '#ffffff',\n\t\t\t\tpadding: '80px',\n\t\t\t\tfontFamily: 'system-ui, sans-serif',\n\t\t\t},\n\t\t},\n\t\tcreateElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tstyle: {\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '100%',\n\t\t\t\t\tborder: '4px solid #000000',\n\t\t\t\t\tborderRadius: '24px',\n\t\t\t\t\tpadding: '64px',\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t},\n\t\t\t},\n\t\t\tcreateElement(\n\t\t\t\t'div',\n\t\t\t\t{\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\tgap: '24px',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcreateElement(\n\t\t\t\t\t'h1',\n\t\t\t\t\t{\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tfontSize: '72px',\n\t\t\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t\t\t\tlineHeight: 1.2,\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tcolor: '#000000',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\ttitle,\n\t\t\t\t),\n\t\t\t\tdescription &&\n\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tfontSize: '32px',\n\t\t\t\t\t\t\t\tlineHeight: 1.5,\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tcolor: '#666666',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t),\n\t\t\t),\n\t\t\tcreateElement(\n\t\t\t\t'div',\n\t\t\t\t{\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsiteName &&\n\t\t\t\t\tcreateElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tfontSize: '28px',\n\t\t\t\t\t\t\t\tcolor: '#999999',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsiteName,\n\t\t\t\t\t),\n\t\t\t\tavatar &&\n\t\t\t\t\tcreateElement('img', {\n\t\t\t\t\t\tsrc: avatar,\n\t\t\t\t\t\twidth: 80,\n\t\t\t\t\t\theight: 80,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tborderRadius: '50%',\n\t\t\t\t\t\t\tobjectFit: 'cover',\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t!avatar &&\n\t\t\t\t\tcreateElement('div', {\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '80px',\n\t\t\t\t\t\t\theight: '80px',\n\t\t\t\t\t\t\tborderRadius: '50%',\n\t\t\t\t\t\t\tbackgroundColor: '#6366f1',\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t);\n}\n",
|
|
48
|
-
"import type { RedirectRule, RobotsOptions, SitemapOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\n\ntype RobotsDiscoveryResult = {\n\t/** All discovered routes (both static and dynamic) */\n\troutes: string[];\n\t/** Routes excluded from sitemap (if sitemapExclusion is enabled) */\n\tsitemapExcludedRoutes: string[];\n\t/** Old redirect source paths (if redirectExclusion is enabled) */\n\tredirectSourcePaths: string[];\n};\n\n/**\n * Discover all routes from the generated routes.ts file\n */\nasync function discoverRoutesForRobots(\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<string[]> {\n\tconst routes: string[] = [];\n\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst url = Bun.pathToFileURL(routesPath).href;\n\t\tconst mod = await import(`${url}${isWatchMode ? `?t=${Date.now()}` : ''}
|
|
48
|
+
"import type { RedirectRule, RobotsOptions, SitemapOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\n\ntype RobotsDiscoveryResult = {\n\t/** All discovered routes (both static and dynamic) */\n\troutes: string[];\n\t/** Routes excluded from sitemap (if sitemapExclusion is enabled) */\n\tsitemapExcludedRoutes: string[];\n\t/** Old redirect source paths (if redirectExclusion is enabled) */\n\tredirectSourcePaths: string[];\n};\n\n/**\n * Discover all routes from the generated routes.ts file\n */\nasync function discoverRoutesForRobots(\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<string[]> {\n\tconst routes: string[] = [];\n\n\ttry {\n\t\t// Check for bundled routes first (compiled binary support)\n\t\tlet routesArray = (globalThis as Record<string, unknown>)\n\t\t\t.__REROUTE_ROUTES__ as Doc[] | undefined;\n\n\t\t// Fallback to dynamic import (dev mode)\n\t\tif (!routesArray) {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst url = Bun.pathToFileURL(routesPath).href;\n\t\t\tconst mod = await import(\n\t\t\t\t`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`\n\t\t\t);\n\t\t\troutesArray = (mod as Doc)?.routes as Doc[] | undefined;\n\t\t}\n\t\tif (Array.isArray(routesArray)) {\n\t\t\tfor (const route of routesArray) {\n\t\t\t\tconst pattern = String(route?.pattern || '');\n\n\t\t\t\t// Skip error pages, layouts, and skeletons\n\t\t\t\tif (\n\t\t\t\t\tpattern.includes('[404]') ||\n\t\t\t\t\tpattern.includes('[layout]') ||\n\t\t\t\t\tpattern.includes('[skeleton]')\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Add the pattern (with dynamic segments)\n\t\t\t\troutes.push(pattern);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('[reroute] Failed to discover routes for robots.txt:', error);\n\t}\n\n\treturn routes;\n}\n\n/**\n * Get routes excluded from sitemap\n */\nfunction getSitemapExcludedRoutes(sitemapConfig?: SitemapOptions): string[] {\n\treturn sitemapConfig?.excludeRoutes || [];\n}\n\n/**\n * Get redirect source paths\n */\nfunction getRedirectSourcePaths(redirects?: RedirectRule[]): string[] {\n\tif (!redirects || redirects.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst sources: string[] = [];\n\tfor (const redirect of redirects) {\n\t\t// Only include string sources (not regex patterns)\n\t\tif (typeof redirect.source === 'string') {\n\t\t\tsources.push(redirect.source);\n\t\t}\n\t}\n\n\treturn sources;\n}\n\n/**\n * Main robots discovery function\n */\nasync function discoverRobotsData(\n\tcwd: string,\n\tisWatchMode: boolean,\n\trobotsConfig: RobotsOptions,\n\tsitemapConfig?: SitemapOptions,\n\tredirects?: RedirectRule[],\n): Promise<RobotsDiscoveryResult> {\n\t// Discover all routes\n\tconst routes = await discoverRoutesForRobots(cwd, isWatchMode);\n\n\t// Get sitemap excluded routes (if feature enabled)\n\tconst sitemapExcludedRoutes =\n\t\trobotsConfig.sitemapExclusion !== false\n\t\t\t? getSitemapExcludedRoutes(sitemapConfig)\n\t\t\t: [];\n\n\t// Get redirect source paths (if feature enabled)\n\tconst redirectSourcePaths =\n\t\trobotsConfig.redirectExclusion !== false\n\t\t\t? getRedirectSourcePaths(redirects)\n\t\t\t: [];\n\n\treturn {\n\t\troutes,\n\t\tsitemapExcludedRoutes,\n\t\tredirectSourcePaths,\n\t};\n}\n\nexport {\n\tdiscoverRoutesForRobots,\n\tgetSitemapExcludedRoutes,\n\tgetRedirectSourcePaths,\n\tdiscoverRobotsData,\n\ttype RobotsDiscoveryResult,\n};\n",
|
|
49
49
|
"import type { RobotsOptions, RobotsPolicy } from '../config';\nimport type { RobotsDiscoveryResult } from './discovery';\n\n/**\n * Generate robots.txt content from discovery result and configuration\n */\nexport function generateRobots(\n\tdiscovery: RobotsDiscoveryResult,\n\trobotsConfig: RobotsOptions,\n\tsitemapEnabled: boolean,\n): string {\n\tconst lines: string[] = [];\n\tconst { policies = [], customRules, crawlDelay } = robotsConfig;\n\n\t// If no policies provided, use default permissive policy\n\tconst effectivePolicies: RobotsPolicy[] =\n\t\tpolicies.length > 0\n\t\t\t? policies\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\tuserAgent: '*',\n\t\t\t\t\t\tallow: ['/'],\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t// Merge auto-disallows with policy disallows\n\tconst autoDisallows = new Set<string>([\n\t\t...discovery.sitemapExcludedRoutes,\n\t\t...discovery.redirectSourcePaths,\n\t]);\n\n\t// Generate policy blocks\n\tfor (const policy of effectivePolicies) {\n\t\tlines.push(`User-agent: ${policy.userAgent}`);\n\n\t\t// Allow directives\n\t\tif (policy.allow && policy.allow.length > 0) {\n\t\t\tfor (const path of policy.allow) {\n\t\t\t\tlines.push(`Allow: ${path}`);\n\t\t\t}\n\t\t}\n\n\t\t// Disallow directives (merge with auto-disallows for wildcard user-agent)\n\t\tconst disallows = new Set(policy.disallow || []);\n\n\t\t// Only merge auto-disallows for wildcard user-agent\n\t\tif (policy.userAgent === '*') {\n\t\t\tfor (const path of autoDisallows) {\n\t\t\t\tdisallows.add(path);\n\t\t\t}\n\t\t}\n\n\t\tif (disallows.size > 0) {\n\t\t\tfor (const path of Array.from(disallows).sort()) {\n\t\t\t\tlines.push(`Disallow: ${path}`);\n\t\t\t}\n\t\t}\n\n\t\t// Crawl-delay (policy-specific)\n\t\tif (policy.crawlDelay !== undefined) {\n\t\t\tlines.push(`Crawl-delay: ${policy.crawlDelay}`);\n\t\t}\n\n\t\tlines.push(''); // Empty line between policy blocks\n\t}\n\n\t// Add global crawl-delay if specified and not already in wildcard policy\n\tconst hasWildcardCrawlDelay = effectivePolicies.some(\n\t\t(p) => p.userAgent === '*' && p.crawlDelay !== undefined,\n\t);\n\tif (crawlDelay !== undefined && !hasWildcardCrawlDelay) {\n\t\tlines.push(`Crawl-delay: ${crawlDelay}`);\n\t\tlines.push('');\n\t}\n\n\t// Add custom rules\n\tif (customRules) {\n\t\tlines.push(customRules.trim());\n\t\tlines.push('');\n\t}\n\n\t// Add sitemap reference (if enabled and baseUrl provided)\n\tif (\n\t\trobotsConfig.referenceSitemap !== false &&\n\t\tsitemapEnabled &&\n\t\trobotsConfig.baseUrl\n\t) {\n\t\tlines.push(`Sitemap: ${robotsConfig.baseUrl}/sitemap.xml`);\n\t}\n\n\t// Join lines and ensure single trailing newline\n\treturn `${lines.join('\\n').trim()}\\n`;\n}\n",
|
|
50
50
|
"import type { RobotsPolicy } from '../config';\n\n/**\n * AI Crawler user-agents\n */\nconst AI_CRAWLERS = {\n\tGPT: 'GPTBot',\n\tCHATGPT: 'ChatGPT-User',\n\tCLAUDE: 'Claude-Web',\n\tANTHROPIC: 'anthropic-ai',\n\tCOHERE: 'cohere-ai',\n\tGOOGLE_EXTENDED: 'Google-Extended',\n\tFACEBOOK: 'FacebookBot',\n\tAPPLE_EXTENDED: 'Applebot-Extended',\n\tPERPLEXITY: 'PerplexityBot',\n\tBYTEDANCE: 'Bytespider',\n\tCOMMON_CRAWL: 'CCBot',\n\tOMGILI: 'Omgilibot',\n} as const;\n\n/**\n * Search Engine crawler user-agents\n */\nconst SEARCH_CRAWLERS = {\n\tGOOGLEBOT: 'Googlebot',\n\tBINGBOT: 'Bingbot',\n\tSLURP: 'Slurp', // Yahoo\n\tDUCKDUCKBOT: 'DuckDuckBot',\n\tBAIDUSPIDER: 'Baiduspider',\n\tYANDEXBOT: 'YandexBot',\n} as const;\n\n/**\n * Block AI crawlers\n * @param crawlers - Optional array of specific crawler user-agents to block (no args = block all)\n * @returns Array of policies blocking specified or all AI crawlers\n */\nfunction blockAICrawlers(crawlers?: string[]): RobotsPolicy[] {\n\tconst agents = crawlers || Object.values(AI_CRAWLERS);\n\treturn agents.map((agent) => ({\n\t\tuserAgent: agent,\n\t\tdisallow: ['/'],\n\t}));\n}\n\n/**\n * Allow AI crawlers\n * @param crawlers - Optional array of specific crawler user-agents to allow (no args = allow all)\n * @returns Array of policies allowing specified or all AI crawlers\n */\nfunction allowAICrawlers(crawlers?: string[]): RobotsPolicy[] {\n\tconst agents = crawlers || Object.values(AI_CRAWLERS);\n\treturn agents.map((agent) => ({\n\t\tuserAgent: agent,\n\t\tallow: ['/'],\n\t}));\n}\n\n/**\n * Block only training/scraping AI crawlers\n * @returns Array of policies blocking training crawlers\n */\nfunction blockAITrainingCrawlers(): RobotsPolicy[] {\n\tconst trainingCrawlers = [\n\t\tAI_CRAWLERS.GOOGLE_EXTENDED,\n\t\tAI_CRAWLERS.COMMON_CRAWL,\n\t\tAI_CRAWLERS.BYTEDANCE,\n\t\tAI_CRAWLERS.OMGILI,\n\t];\n\n\treturn trainingCrawlers.map((agent) => ({\n\t\tuserAgent: agent,\n\t\tdisallow: ['/'],\n\t}));\n}\n\n/**\n * Allow search engines\n * @param crawlers - Optional array of specific search crawler user-agents to allow (no args = allow all)\n * @returns Array of policies allowing specified or all search engines\n */\nfunction allowSearchCrawlers(crawlers?: string[]): RobotsPolicy[] {\n\tconst agents = crawlers || Object.values(SEARCH_CRAWLERS);\n\treturn agents.map((agent) => ({\n\t\tuserAgent: agent,\n\t\tallow: ['/'],\n\t}));\n}\n\n/**\n * Block search engines\n * @param crawlers - Optional array of specific search crawler user-agents to block (no args = block all)\n * @returns Array of policies blocking specified or all search engines\n */\nfunction blockSearchCrawlers(crawlers?: string[]): RobotsPolicy[] {\n\tconst agents = crawlers || Object.values(SEARCH_CRAWLERS);\n\treturn agents.map((agent) => ({\n\t\tuserAgent: agent,\n\t\tdisallow: ['/'],\n\t}));\n}\n\nexport {\n\tAI_CRAWLERS,\n\tSEARCH_CRAWLERS,\n\tblockAICrawlers,\n\tallowAICrawlers,\n\tblockAITrainingCrawlers,\n\tallowSearchCrawlers,\n\tblockSearchCrawlers,\n};\n",
|
|
51
|
-
"import { pathToFileURL } from 'node:url';\nimport type { RSSOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\n\ntype RSSItem = {\n\ttitle: string;\n\tlink: string;\n\tdescription?: string;\n\tpubDate?: string;\n\tauthor?: string;\n\tguid?: string;\n\tcontent?: string;\n};\n\ntype RSSFeed = {\n\ttitle: string;\n\tlink: string;\n\tdescription: string;\n\titems: RSSItem[];\n};\n\ntype RSSDiscoveryResult = {\n\tcollections: Map<string, RSSItem[]>;\n\tssrDataFeeds: Map<string, RSSItem[]>;\n};\n\n/**\n * Discover RSS feed items from collections\n */\nasync function discoverCollectionFeedItems(\n\tcwd: string,\n\tcollection: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): Promise<RSSItem[]> {\n\tconst items: RSSItem[] = [];\n\n\ttry {\n\t\t// Load pre-generated collection module\n\t\tconst collectionFile = join(\n\t\t\tcwd,\n\t\t\t'.reroute',\n\t\t\t'collections',\n\t\t\t`${collection}.js`,\n\t\t);\n\t\tconst exists = await Bun.file(collectionFile).exists();\n\n\t\tif (!exists) {\n\t\t\treturn items;\n\t\t}\n\n\t\tconst url = `${Bun.pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\tconst mod = await import(url);\n\t\tconst contentItems = mod.items || [];\n\n\t\tfor (const item of contentItems) {\n\t\t\tconst href = String(item.href || '');\n\t\t\tconst meta = item.meta || {};\n\n\t\t\tif (href) {\n\t\t\t\t// Extract description using custom extractor or defaults\n\t\t\t\tlet description = '';\n\t\t\t\tif (rssConfig?.extractDescription) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdescription = rssConfig.extractDescription(meta) || '';\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractDescription failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!description) {\n\t\t\t\t\tdescription = meta.description || meta.excerpt || '';\n\t\t\t\t}\n\n\t\t\t\tconst rssItem: RSSItem = {\n\t\t\t\t\ttitle: meta.title || item.name || 'Untitled',\n\t\t\t\t\tlink: `${baseUrl}${href}`,\n\t\t\t\t\tguid: `${baseUrl}${href}`,\n\t\t\t\t\tdescription,\n\t\t\t\t};\n\n\t\t\t\t// Extract pubDate using custom extractor or defaults\n\t\t\t\tif (rssConfig?.extractPubDate) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst pubDate = rssConfig.extractPubDate(meta);\n\t\t\t\t\t\tif (pubDate) {\n\t\t\t\t\t\t\trssItem.pubDate = new Date(pubDate).toUTCString();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractPubDate failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fall back to default date fields if no custom extractor provided result\n\t\t\t\tif (!rssItem.pubDate) {\n\t\t\t\t\tif (meta.date) {\n\t\t\t\t\t\trssItem.pubDate = new Date(meta.date).toUTCString();\n\t\t\t\t\t} else if (meta.publishedAt) {\n\t\t\t\t\t\trssItem.pubDate = new Date(meta.publishedAt).toUTCString();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Extract author\n\t\t\t\tif (rssConfig?.extractAuthor) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst author = rssConfig.extractAuthor(meta);\n\t\t\t\t\t\tif (author) {\n\t\t\t\t\t\t\trssItem.author = author;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractAuthor failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fall back to default author field\n\t\t\t\tif (!rssItem.author && meta.author) {\n\t\t\t\t\trssItem.author = String(meta.author);\n\t\t\t\t}\n\n\t\t\t\t// Extract content\n\t\t\t\tif (rssConfig?.extractContent) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst content = rssConfig.extractContent(meta);\n\t\t\t\t\t\tif (content) {\n\t\t\t\t\t\t\trssItem.content = content;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractContent failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titems.push(rssItem);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute/rss] Failed to discover collection ${collection}:`,\n\t\t\terror,\n\t\t);\n\t}\n\n\t// Sort by pubDate (newest first)\n\titems.sort((a, b) => {\n\t\tif (!a.pubDate) return 1;\n\t\tif (!b.pubDate) return -1;\n\t\treturn new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime();\n\t});\n\n\treturn items;\n}\n\n/**\n * Discover RSS feed items from SSR data routes\n */\nasync function discoverSSRDataFeedItems(\n\t_cwd: string,\n\tclientDir: string,\n\troutePattern: string,\n\troutePath: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): Promise<RSSItem[]> {\n\tconst items: RSSItem[] = [];\n\n\ttry {\n\t\tconst abs = join(clientDir, 'routes', routePath);\n\t\tconst mod = (await import(\n\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t)) as Doc;\n\n\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t| undefined;\n\n\t\tif (typeof dataFn === 'function') {\n\t\t\t// Call the data function with mock context\n\t\t\tconst mockSet = { status: 200 };\n\t\t\tconst result = await dataFn({\n\t\t\t\tpathname: routePattern,\n\t\t\t\tparams: {},\n\t\t\t\tset: mockSet,\n\t\t\t});\n\n\t\t\t// Extract RSS urls from data\n\t\t\tconst extractedItems = extractRSSItemsFromData(\n\t\t\t\tresult,\n\t\t\t\troutePattern,\n\t\t\t\tbaseUrl,\n\t\t\t\trssConfig,\n\t\t\t);\n\t\t\titems.push(...extractedItems);\n\t\t}\n\t} catch {\n\t\t// Route doesn't have ssr.data or it failed - skip silently\n\t}\n\n\treturn items;\n}\n\n/**\n * Extract RSS urls from ssr.data result\n * Supports custom extractUrls function or automatic array discovery\n */\nfunction extractRSSItemsFromData(\n\tdata: unknown,\n\troutePattern: string,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): RSSItem[] {\n\tconst items: RSSItem[] = [];\n\n\tif (!data || typeof data !== 'object') {\n\t\treturn items;\n\t}\n\n\t// Use custom extractUrls if provided\n\tif (rssConfig?.extractUrls) {\n\t\ttry {\n\t\t\tconst extractedItems = rssConfig.extractUrls(data, routePattern);\n\t\t\tif (Array.isArray(extractedItems)) {\n\t\t\t\tfor (const item of extractedItems) {\n\t\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\t\tconst rssItem = createRSSItemFromData(\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\t\trssConfig,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (rssItem) {\n\t\t\t\t\t\t\titems.push(rssItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Sort by pubDate (newest first)\n\t\t\titems.sort((a, b) => {\n\t\t\t\tif (!a.pubDate) return 1;\n\t\t\t\tif (!b.pubDate) return -1;\n\t\t\t\treturn new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime();\n\t\t\t});\n\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractUrls failed:', error);\n\t\t\treturn items;\n\t\t}\n\t}\n\n\t// Otherwise, recursively discover arrays in the data\n\tfunction findArrays(obj: Doc): Doc[] {\n\t\tconst arrays: Doc[] = [];\n\n\t\tfor (const value of Object.values(obj)) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tarrays.push(value);\n\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t// Recursively search nested objects\n\t\t\t\tarrays.push(...findArrays(value));\n\t\t\t}\n\t\t}\n\n\t\treturn arrays;\n\t}\n\n\tconst arrays = findArrays(data);\n\n\tfor (const array of arrays) {\n\t\tif (array.length > 0) {\n\t\t\tfor (const item of array) {\n\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\tconst rssItem = createRSSItemFromData(\n\t\t\t\t\t\titem,\n\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\trssConfig,\n\t\t\t\t\t);\n\t\t\t\t\tif (rssItem) {\n\t\t\t\t\t\titems.push(rssItem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sort by pubDate (newest first)\n\titems.sort((a, b) => {\n\t\tif (!a.pubDate) return 1;\n\t\tif (!b.pubDate) return -1;\n\t\treturn new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime();\n\t});\n\n\treturn items;\n}\n\n/**\n * Create RSS item from data object\n */\nfunction createRSSItemFromData(\n\titem: Record<string, unknown>,\n\troutePattern: string,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): RSSItem | null {\n\t// Try custom URL extractor first\n\tlet identifier: string | null | undefined | unknown;\n\n\tif (rssConfig?.extractUrl) {\n\t\ttry {\n\t\t\tidentifier = rssConfig.extractUrl(item, routePattern);\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractUrl failed:', error);\n\t\t}\n\t}\n\n\t// Fall back to default field detection\n\tif (!identifier) {\n\t\tidentifier = item.version || item.slug || item.id || item.name || item.key;\n\t}\n\n\tif (!identifier) {\n\t\treturn null;\n\t}\n\n\tconst link = `${baseUrl}${routePattern}/${identifier}`;\n\n\t// Extract description using custom extractor or defaults\n\tlet description = '';\n\tif (rssConfig?.extractDescription) {\n\t\ttry {\n\t\t\tdescription = rssConfig.extractDescription(item) || '';\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractDescription failed:', error);\n\t\t}\n\t}\n\tif (!description) {\n\t\tdescription = String(item.description || item.excerpt || '');\n\t}\n\n\tconst rssItem: RSSItem = {\n\t\ttitle: String(item.title || item.name || identifier),\n\t\tlink,\n\t\tguid: link,\n\t\tdescription,\n\t};\n\n\t// Extract pubDate\n\tif (rssConfig?.extractPubDate) {\n\t\ttry {\n\t\t\tconst pubDate = rssConfig.extractPubDate(item);\n\t\t\tif (pubDate) {\n\t\t\t\trssItem.pubDate = new Date(pubDate).toUTCString();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractPubDate failed:', error);\n\t\t}\n\t} else {\n\t\tif (item.publishedAt && typeof item.publishedAt === 'string') {\n\t\t\trssItem.pubDate = new Date(item.publishedAt).toUTCString();\n\t\t} else if (item.date && typeof item.date === 'string') {\n\t\t\trssItem.pubDate = new Date(item.date).toUTCString();\n\t\t} else if (item.createdAt && typeof item.createdAt === 'string') {\n\t\t\trssItem.pubDate = new Date(item.createdAt).toUTCString();\n\t\t}\n\t}\n\n\t// Extract author\n\tif (rssConfig?.extractAuthor) {\n\t\ttry {\n\t\t\tconst author = rssConfig.extractAuthor(item);\n\t\t\tif (author) {\n\t\t\t\trssItem.author = author;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractAuthor failed:', error);\n\t\t}\n\t} else if (item.author) {\n\t\trssItem.author = String(item.author);\n\t}\n\n\t// Extract content\n\tif (rssConfig?.extractContent) {\n\t\ttry {\n\t\t\tconst content = rssConfig.extractContent(item);\n\t\t\tif (content) {\n\t\t\t\trssItem.content = content;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractContent failed:', error);\n\t\t}\n\t}\n\n\treturn rssItem;\n}\n\n/**\n * Main RSS discovery function\n */\nasync function discoverRSSData(\n\tcwd: string,\n\tclientDir: string,\n\tcollections: string[],\n\tbaseUrl: string,\n\tisWatchMode: boolean,\n\trssConfig?: RSSOptions,\n): Promise<RSSDiscoveryResult> {\n\t// Discover collection content\n\tconst collectionsMap = new Map<string, RSSItem[]>();\n\tfor (const collection of collections) {\n\t\tconst items = await discoverCollectionFeedItems(\n\t\t\tcwd,\n\t\t\tcollection,\n\t\t\tisWatchMode,\n\t\t\tbaseUrl,\n\t\t\trssConfig,\n\t\t);\n\t\tif (items.length > 0) {\n\t\t\tcollectionsMap.set(collection, items);\n\t\t}\n\t}\n\n\t// Discover SSR data routes\n\tconst ssrDataFeeds = new Map<string, RSSItem[]>();\n\tconst { discoverRoutes } = await import('../sitemap/discovery');\n\tconst { staticRoutes } = await discoverRoutes(cwd, isWatchMode);\n\n\tfor (const route of staticRoutes) {\n\t\t// Skip routes excluded from SSR data discovery\n\t\tif (rssConfig?.excludeDiscovery?.includes(route.pattern)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst items = await discoverSSRDataFeedItems(\n\t\t\tcwd,\n\t\t\tclientDir,\n\t\t\troute.pattern,\n\t\t\troute.path,\n\t\t\tisWatchMode,\n\t\t\tbaseUrl,\n\t\t\trssConfig,\n\t\t);\n\n\t\tif (items.length > 0) {\n\t\t\tssrDataFeeds.set(route.pattern, items);\n\t\t}\n\t}\n\n\t// Also discover layout ssr.data\n\tconst layoutFeeds = await discoverLayoutFeedItems(\n\t\tcwd,\n\t\tclientDir,\n\t\tisWatchMode,\n\t\tbaseUrl,\n\t\trssConfig,\n\t);\n\tfor (const [pattern, items] of layoutFeeds.entries()) {\n\t\tconst existing = ssrDataFeeds.get(pattern) || [];\n\t\tssrDataFeeds.set(pattern, [...existing, ...items]);\n\t}\n\n\treturn {\n\t\tcollections: collectionsMap,\n\t\tssrDataFeeds,\n\t};\n}\n\n/**\n * Discover RSS urls from layout ssr.data\n */\nasync function discoverLayoutFeedItems(\n\tcwd: string,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): Promise<Map<string, RSSItem[]>> {\n\tconst layoutFeeds = new Map<string, RSSItem[]>();\n\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst url = pathToFileURL(routesPath).href;\n\t\tconst mod = await import(`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`);\n\n\t\tconst layouts = (mod as Doc)?.layouts as Doc[] | undefined;\n\t\tif (Array.isArray(layouts)) {\n\t\t\tfor (const layout of layouts) {\n\t\t\t\tconst pattern = String(layout?.pattern || '/');\n\t\t\t\tconst path = String(layout?.path || '');\n\n\t\t\t\tif (!path) continue;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst abs = join(clientDir, 'routes', path);\n\t\t\t\t\tconst layoutMod = (await import(\n\t\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t\t)) as Doc;\n\n\t\t\t\t\tconst ssr = (layoutMod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t\t| undefined;\n\n\t\t\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t\t\tconst mockSet = { status: 200 };\n\t\t\t\t\t\tconst result = await dataFn({\n\t\t\t\t\t\t\tpathname: pattern,\n\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t\tset: mockSet,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst items = extractRSSItemsFromData(\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\tpattern,\n\t\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\t\trssConfig,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (items.length > 0) {\n\t\t\t\t\t\t\tlayoutFeeds.set(pattern, items);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Layout doesn't have ssr.data or failed - skip\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// routes.ts doesn't exist or failed to load\n\t}\n\n\treturn layoutFeeds;\n}\n\nexport {\n\tdiscoverLayoutFeedItems,\n\tdiscoverRSSData,\n\tdiscoverSSRDataFeedItems,\n\ttype RSSDiscoveryResult,\n\ttype RSSFeed,\n\ttype RSSItem,\n};\n",
|
|
51
|
+
"import { pathToFileURL } from 'node:url';\nimport type { RSSOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc } from '../ssr/lib/types';\n\ntype RSSItem = {\n\ttitle: string;\n\tlink: string;\n\tdescription?: string;\n\tpubDate?: string;\n\tauthor?: string;\n\tguid?: string;\n\tcontent?: string;\n};\n\ntype RSSFeed = {\n\ttitle: string;\n\tlink: string;\n\tdescription: string;\n\titems: RSSItem[];\n};\n\ntype RSSDiscoveryResult = {\n\tcollections: Map<string, RSSItem[]>;\n\tssrDataFeeds: Map<string, RSSItem[]>;\n};\n\n/**\n * Discover RSS feed items from collections\n */\nasync function discoverCollectionFeedItems(\n\tcwd: string,\n\tcollection: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): Promise<RSSItem[]> {\n\tconst items: RSSItem[] = [];\n\n\ttry {\n\t\t// Load pre-generated collection module\n\t\tconst collectionFile = join(\n\t\t\tcwd,\n\t\t\t'.reroute',\n\t\t\t'collections',\n\t\t\t`${collection}.js`,\n\t\t);\n\t\tconst exists = await Bun.file(collectionFile).exists();\n\n\t\tif (!exists) {\n\t\t\treturn items;\n\t\t}\n\n\t\tconst url = `${Bun.pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\tconst mod = await import(url);\n\t\tconst contentItems = mod.items || [];\n\n\t\tfor (const item of contentItems) {\n\t\t\tconst href = String(item.href || '');\n\t\t\tconst meta = item.meta || {};\n\n\t\t\tif (href) {\n\t\t\t\t// Extract description using custom extractor or defaults\n\t\t\t\tlet description = '';\n\t\t\t\tif (rssConfig?.extractDescription) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdescription = rssConfig.extractDescription(meta) || '';\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractDescription failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!description) {\n\t\t\t\t\tdescription = meta.description || meta.excerpt || '';\n\t\t\t\t}\n\n\t\t\t\tconst rssItem: RSSItem = {\n\t\t\t\t\ttitle: meta.title || item.name || 'Untitled',\n\t\t\t\t\tlink: `${baseUrl}${href}`,\n\t\t\t\t\tguid: `${baseUrl}${href}`,\n\t\t\t\t\tdescription,\n\t\t\t\t};\n\n\t\t\t\t// Extract pubDate using custom extractor or defaults\n\t\t\t\tif (rssConfig?.extractPubDate) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst pubDate = rssConfig.extractPubDate(meta);\n\t\t\t\t\t\tif (pubDate) {\n\t\t\t\t\t\t\trssItem.pubDate = new Date(pubDate).toUTCString();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractPubDate failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fall back to default date fields if no custom extractor provided result\n\t\t\t\tif (!rssItem.pubDate) {\n\t\t\t\t\tif (meta.date) {\n\t\t\t\t\t\trssItem.pubDate = new Date(meta.date).toUTCString();\n\t\t\t\t\t} else if (meta.publishedAt) {\n\t\t\t\t\t\trssItem.pubDate = new Date(meta.publishedAt).toUTCString();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Extract author\n\t\t\t\tif (rssConfig?.extractAuthor) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst author = rssConfig.extractAuthor(meta);\n\t\t\t\t\t\tif (author) {\n\t\t\t\t\t\t\trssItem.author = author;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractAuthor failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fall back to default author field\n\t\t\t\tif (!rssItem.author && meta.author) {\n\t\t\t\t\trssItem.author = String(meta.author);\n\t\t\t\t}\n\n\t\t\t\t// Extract content\n\t\t\t\tif (rssConfig?.extractContent) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst content = rssConfig.extractContent(meta);\n\t\t\t\t\t\tif (content) {\n\t\t\t\t\t\t\trssItem.content = content;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('[reroute/rss] extractContent failed:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titems.push(rssItem);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute/rss] Failed to discover collection ${collection}:`,\n\t\t\terror,\n\t\t);\n\t}\n\n\t// Sort by pubDate (newest first)\n\titems.sort((a, b) => {\n\t\tif (!a.pubDate) return 1;\n\t\tif (!b.pubDate) return -1;\n\t\treturn new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime();\n\t});\n\n\treturn items;\n}\n\n/**\n * Discover RSS feed items from SSR data routes\n */\nasync function discoverSSRDataFeedItems(\n\t_cwd: string,\n\tclientDir: string,\n\troutePattern: string,\n\troutePath: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): Promise<RSSItem[]> {\n\tconst items: RSSItem[] = [];\n\n\ttry {\n\t\tconst abs = join(clientDir, 'routes', routePath);\n\t\tconst mod = (await import(\n\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t)) as Doc;\n\n\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t| undefined;\n\n\t\tif (typeof dataFn === 'function') {\n\t\t\t// Call the data function with mock context\n\t\t\tconst mockSet = { status: 200 };\n\t\t\tconst result = await dataFn({\n\t\t\t\tpathname: routePattern,\n\t\t\t\tparams: {},\n\t\t\t\tset: mockSet,\n\t\t\t});\n\n\t\t\t// Extract RSS urls from data\n\t\t\tconst extractedItems = extractRSSItemsFromData(\n\t\t\t\tresult,\n\t\t\t\troutePattern,\n\t\t\t\tbaseUrl,\n\t\t\t\trssConfig,\n\t\t\t);\n\t\t\titems.push(...extractedItems);\n\t\t}\n\t} catch {\n\t\t// Route doesn't have ssr.data or it failed - skip silently\n\t}\n\n\treturn items;\n}\n\n/**\n * Extract RSS urls from ssr.data result\n * Supports custom extractUrls function or automatic array discovery\n */\nfunction extractRSSItemsFromData(\n\tdata: unknown,\n\troutePattern: string,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): RSSItem[] {\n\tconst items: RSSItem[] = [];\n\n\tif (!data || typeof data !== 'object') {\n\t\treturn items;\n\t}\n\n\t// Use custom extractUrls if provided\n\tif (rssConfig?.extractUrls) {\n\t\ttry {\n\t\t\tconst extractedItems = rssConfig.extractUrls(data, routePattern);\n\t\t\tif (Array.isArray(extractedItems)) {\n\t\t\t\tfor (const item of extractedItems) {\n\t\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\t\tconst rssItem = createRSSItemFromData(\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\t\trssConfig,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (rssItem) {\n\t\t\t\t\t\t\titems.push(rssItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Sort by pubDate (newest first)\n\t\t\titems.sort((a, b) => {\n\t\t\t\tif (!a.pubDate) return 1;\n\t\t\t\tif (!b.pubDate) return -1;\n\t\t\t\treturn new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime();\n\t\t\t});\n\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractUrls failed:', error);\n\t\t\treturn items;\n\t\t}\n\t}\n\n\t// Otherwise, recursively discover arrays in the data\n\tfunction findArrays(obj: Doc): Doc[] {\n\t\tconst arrays: Doc[] = [];\n\n\t\tfor (const value of Object.values(obj)) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tarrays.push(value);\n\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t// Recursively search nested objects\n\t\t\t\tarrays.push(...findArrays(value));\n\t\t\t}\n\t\t}\n\n\t\treturn arrays;\n\t}\n\n\tconst arrays = findArrays(data);\n\n\tfor (const array of arrays) {\n\t\tif (array.length > 0) {\n\t\t\tfor (const item of array) {\n\t\t\t\tif (typeof item === 'object' && item !== null) {\n\t\t\t\t\tconst rssItem = createRSSItemFromData(\n\t\t\t\t\t\titem,\n\t\t\t\t\t\troutePattern,\n\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\trssConfig,\n\t\t\t\t\t);\n\t\t\t\t\tif (rssItem) {\n\t\t\t\t\t\titems.push(rssItem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sort by pubDate (newest first)\n\titems.sort((a, b) => {\n\t\tif (!a.pubDate) return 1;\n\t\tif (!b.pubDate) return -1;\n\t\treturn new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime();\n\t});\n\n\treturn items;\n}\n\n/**\n * Create RSS item from data object\n */\nfunction createRSSItemFromData(\n\titem: Record<string, unknown>,\n\troutePattern: string,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): RSSItem | null {\n\t// Try custom URL extractor first\n\tlet identifier: string | null | undefined | unknown;\n\n\tif (rssConfig?.extractUrl) {\n\t\ttry {\n\t\t\tidentifier = rssConfig.extractUrl(item, routePattern);\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractUrl failed:', error);\n\t\t}\n\t}\n\n\t// Fall back to default field detection\n\tif (!identifier) {\n\t\tidentifier = item.version || item.slug || item.id || item.name || item.key;\n\t}\n\n\tif (!identifier) {\n\t\treturn null;\n\t}\n\n\tconst link = `${baseUrl}${routePattern}/${identifier}`;\n\n\t// Extract description using custom extractor or defaults\n\tlet description = '';\n\tif (rssConfig?.extractDescription) {\n\t\ttry {\n\t\t\tdescription = rssConfig.extractDescription(item) || '';\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractDescription failed:', error);\n\t\t}\n\t}\n\tif (!description) {\n\t\tdescription = String(item.description || item.excerpt || '');\n\t}\n\n\tconst rssItem: RSSItem = {\n\t\ttitle: String(item.title || item.name || identifier),\n\t\tlink,\n\t\tguid: link,\n\t\tdescription,\n\t};\n\n\t// Extract pubDate\n\tif (rssConfig?.extractPubDate) {\n\t\ttry {\n\t\t\tconst pubDate = rssConfig.extractPubDate(item);\n\t\t\tif (pubDate) {\n\t\t\t\trssItem.pubDate = new Date(pubDate).toUTCString();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractPubDate failed:', error);\n\t\t}\n\t} else {\n\t\tif (item.publishedAt && typeof item.publishedAt === 'string') {\n\t\t\trssItem.pubDate = new Date(item.publishedAt).toUTCString();\n\t\t} else if (item.date && typeof item.date === 'string') {\n\t\t\trssItem.pubDate = new Date(item.date).toUTCString();\n\t\t} else if (item.createdAt && typeof item.createdAt === 'string') {\n\t\t\trssItem.pubDate = new Date(item.createdAt).toUTCString();\n\t\t}\n\t}\n\n\t// Extract author\n\tif (rssConfig?.extractAuthor) {\n\t\ttry {\n\t\t\tconst author = rssConfig.extractAuthor(item);\n\t\t\tif (author) {\n\t\t\t\trssItem.author = author;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractAuthor failed:', error);\n\t\t}\n\t} else if (item.author) {\n\t\trssItem.author = String(item.author);\n\t}\n\n\t// Extract content\n\tif (rssConfig?.extractContent) {\n\t\ttry {\n\t\t\tconst content = rssConfig.extractContent(item);\n\t\t\tif (content) {\n\t\t\t\trssItem.content = content;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('[reroute/rss] extractContent failed:', error);\n\t\t}\n\t}\n\n\treturn rssItem;\n}\n\n/**\n * Main RSS discovery function\n */\nasync function discoverRSSData(\n\tcwd: string,\n\tclientDir: string,\n\tcollections: string[],\n\tbaseUrl: string,\n\tisWatchMode: boolean,\n\trssConfig?: RSSOptions,\n): Promise<RSSDiscoveryResult> {\n\t// Discover collection content\n\tconst collectionsMap = new Map<string, RSSItem[]>();\n\tfor (const collection of collections) {\n\t\tconst items = await discoverCollectionFeedItems(\n\t\t\tcwd,\n\t\t\tcollection,\n\t\t\tisWatchMode,\n\t\t\tbaseUrl,\n\t\t\trssConfig,\n\t\t);\n\t\tif (items.length > 0) {\n\t\t\tcollectionsMap.set(collection, items);\n\t\t}\n\t}\n\n\t// Discover SSR data routes\n\tconst ssrDataFeeds = new Map<string, RSSItem[]>();\n\tconst { discoverRoutes } = await import('../sitemap/discovery');\n\tconst { staticRoutes } = await discoverRoutes(cwd, isWatchMode);\n\n\tfor (const route of staticRoutes) {\n\t\t// Skip routes excluded from SSR data discovery\n\t\tif (rssConfig?.excludeDiscovery?.includes(route.pattern)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst items = await discoverSSRDataFeedItems(\n\t\t\tcwd,\n\t\t\tclientDir,\n\t\t\troute.pattern,\n\t\t\troute.path,\n\t\t\tisWatchMode,\n\t\t\tbaseUrl,\n\t\t\trssConfig,\n\t\t);\n\n\t\tif (items.length > 0) {\n\t\t\tssrDataFeeds.set(route.pattern, items);\n\t\t}\n\t}\n\n\t// Also discover layout ssr.data\n\tconst layoutFeeds = await discoverLayoutFeedItems(\n\t\tcwd,\n\t\tclientDir,\n\t\tisWatchMode,\n\t\tbaseUrl,\n\t\trssConfig,\n\t);\n\tfor (const [pattern, items] of layoutFeeds.entries()) {\n\t\tconst existing = ssrDataFeeds.get(pattern) || [];\n\t\tssrDataFeeds.set(pattern, [...existing, ...items]);\n\t}\n\n\treturn {\n\t\tcollections: collectionsMap,\n\t\tssrDataFeeds,\n\t};\n}\n\n/**\n * Discover RSS urls from layout ssr.data\n */\nasync function discoverLayoutFeedItems(\n\tcwd: string,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\tbaseUrl: string,\n\trssConfig?: RSSOptions,\n): Promise<Map<string, RSSItem[]>> {\n\tconst layoutFeeds = new Map<string, RSSItem[]>();\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 url = pathToFileURL(routesPath).href;\n\t\t\tconst mod = await import(\n\t\t\t\t`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`\n\t\t\t);\n\t\t\tlayouts = (mod as Doc)?.layouts as Doc[] | undefined;\n\t\t}\n\t\tif (Array.isArray(layouts)) {\n\t\t\tfor (const layout of layouts) {\n\t\t\t\tconst pattern = String(layout?.pattern || '/');\n\t\t\t\tconst path = String(layout?.path || '');\n\n\t\t\t\tif (!path) continue;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst abs = join(clientDir, 'routes', path);\n\t\t\t\t\tconst layoutMod = (await import(\n\t\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t\t)) as Doc;\n\n\t\t\t\t\tconst ssr = (layoutMod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t\t| undefined;\n\n\t\t\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t\t\tconst mockSet = { status: 200 };\n\t\t\t\t\t\tconst result = await dataFn({\n\t\t\t\t\t\t\tpathname: pattern,\n\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t\tset: mockSet,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst items = extractRSSItemsFromData(\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\tpattern,\n\t\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\t\trssConfig,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (items.length > 0) {\n\t\t\t\t\t\t\tlayoutFeeds.set(pattern, items);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Layout doesn't have ssr.data or failed - skip\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// routes.ts doesn't exist or failed to load\n\t}\n\n\treturn layoutFeeds;\n}\n\nexport {\n\tdiscoverLayoutFeedItems,\n\tdiscoverRSSData,\n\tdiscoverSSRDataFeedItems,\n\ttype RSSDiscoveryResult,\n\ttype RSSFeed,\n\ttype RSSItem,\n};\n",
|
|
52
52
|
"import type { RSSFeed } from './discovery';\n\ntype RSSFormat = 'rss' | 'atom';\n\ntype RSSGeneratorOptions = {\n\tformat?: RSSFormat;\n\tlimit?: number;\n};\n\n/**\n * Generate RSS 2.0 XML\n */\nexport function generateRSSXML(\n\tfeed: RSSFeed,\n\toptions: RSSGeneratorOptions = {},\n): string {\n\tconst { limit } = options;\n\tconst items = limit ? feed.items.slice(0, limit) : feed.items;\n\n\tconst itemsXML = items\n\t\t.map((item) => {\n\t\t\tlet xml = ' <item>\\n';\n\t\t\txml += ` <title>${escapeXml(item.title)}</title>\\n`;\n\t\t\txml += ` <link>${escapeXml(item.link)}</link>\\n`;\n\n\t\t\tif (item.description) {\n\t\t\t\txml += ` <description>${escapeXml(item.description)}</description>\\n`;\n\t\t\t}\n\n\t\t\tif (item.pubDate) {\n\t\t\t\txml += ` <pubDate>${item.pubDate}</pubDate>\\n`;\n\t\t\t}\n\n\t\t\tif (item.guid) {\n\t\t\t\txml += ` <guid isPermaLink=\"true\">${escapeXml(item.guid)}</guid>\\n`;\n\t\t\t}\n\n\t\t\tif (item.author) {\n\t\t\t\txml += ` <author>${escapeXml(item.author)}</author>\\n`;\n\t\t\t}\n\n\t\t\tif (item.content) {\n\t\t\t\txml += ` <content:encoded><![CDATA[${item.content}]]></content:encoded>\\n`;\n\t\t\t}\n\n\t\t\txml += ' </item>';\n\t\t\treturn xml;\n\t\t})\n\t\t.join('\\n');\n\n\tconst lastBuildDate = new Date().toUTCString();\n\n\treturn `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n <channel>\n <title>${escapeXml(feed.title)}</title>\n <link>${escapeXml(feed.link)}</link>\n <description>${escapeXml(feed.description)}</description>\n <lastBuildDate>${lastBuildDate}</lastBuildDate>\n <language>en</language>\n <atom:link href=\"${escapeXml(feed.link)}\" rel=\"self\" type=\"application/rss+xml\" />\n${itemsXML}\n </channel>\n</rss>`;\n}\n\n/**\n * Generate Atom XML\n */\nexport function generateAtomXML(\n\tfeed: RSSFeed,\n\toptions: RSSGeneratorOptions = {},\n): string {\n\tconst { limit } = options;\n\tconst items = limit ? feed.items.slice(0, limit) : feed.items;\n\n\tconst entriesXML = items\n\t\t.map((item) => {\n\t\t\tlet xml = ' <entry>\\n';\n\t\t\txml += ` <title>${escapeXml(item.title)}</title>\\n`;\n\t\t\txml += ` <link href=\"${escapeXml(item.link)}\" />\\n`;\n\t\t\txml += ` <id>${escapeXml(item.guid || item.link)}</id>\\n`;\n\n\t\t\tif (item.pubDate) {\n\t\t\t\t// Convert to ISO 8601 for Atom\n\t\t\t\tconst isoDate = new Date(item.pubDate).toISOString();\n\t\t\t\txml += ` <published>${isoDate}</published>\\n`;\n\t\t\t\txml += ` <updated>${isoDate}</updated>\\n`;\n\t\t\t}\n\n\t\t\tif (item.author) {\n\t\t\t\txml += ` <author>\\n`;\n\t\t\t\txml += ` <name>${escapeXml(item.author)}</name>\\n`;\n\t\t\t\txml += ` </author>\\n`;\n\t\t\t}\n\n\t\t\tif (item.description) {\n\t\t\t\txml += ` <summary>${escapeXml(item.description)}</summary>\\n`;\n\t\t\t}\n\n\t\t\tif (item.content) {\n\t\t\t\txml += ` <content type=\"html\"><![CDATA[${item.content}]]></content>\\n`;\n\t\t\t}\n\n\t\t\txml += ' </entry>';\n\t\t\treturn xml;\n\t\t})\n\t\t.join('\\n');\n\n\tconst updated = new Date().toISOString();\n\n\treturn `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<feed xmlns=\"http://www.w3.org/2005/Atom\">\n <title>${escapeXml(feed.title)}</title>\n <link href=\"${escapeXml(feed.link)}\" rel=\"self\" />\n <updated>${updated}</updated>\n <id>${escapeXml(feed.link)}</id>\n${entriesXML}\n</feed>`;\n}\n\n/**\n * Generate feed based on format\n */\nexport function generateFeed(\n\tfeed: RSSFeed,\n\toptions: RSSGeneratorOptions = {},\n): string {\n\tconst format = options.format || 'rss';\n\n\tif (format === 'atom') {\n\t\treturn generateAtomXML(feed, options);\n\t}\n\n\treturn generateRSSXML(feed, options);\n}\n\n/**\n * Escape XML special characters\n */\nfunction escapeXml(unsafe: string): string {\n\treturn unsafe\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"')\n\t\t.replace(/'/g, ''');\n}\n",
|
|
53
53
|
"export * from './discovery';\nexport * from './generator';\n",
|
|
54
54
|
"import type { SitemapDiscoveryResult, SitemapEntry } from './discovery';\n\nconst DEFAULT_MAX_URLS = 50000; // Google's limit per sitemap\n\ntype SitemapPage = {\n\tfilename: string;\n\txml: string;\n\tentryCount: number;\n};\n\ntype SitemapResult = {\n\tpages: SitemapPage[];\n\tindexXml?: string;\n\tneedsIndex: boolean;\n};\n\n/**\n * Generate sitemap XML from discovery result\n */\nasync function generateSitemap(\n\tdiscovery: SitemapDiscoveryResult,\n\tbaseUrl: string,\n\toptions: {\n\t\tchangefreq?:\n\t\t\t| 'always'\n\t\t\t| 'hourly'\n\t\t\t| 'daily'\n\t\t\t| 'weekly'\n\t\t\t| 'monthly'\n\t\t\t| 'yearly'\n\t\t\t| 'never';\n\t\tpriority?: number;\n\t\tmaxUrlsPerPage?: number;\n\t\texcludeRoutes?: string[];\n\t} = {},\n): Promise<SitemapResult> {\n\tconst {\n\t\tchangefreq = 'weekly',\n\t\tpriority = 0.5,\n\t\tmaxUrlsPerPage = DEFAULT_MAX_URLS,\n\t} = options;\n\n\tconst allEntries: SitemapEntry[] = [];\n\n\t// Add static routes (skip dynamic patterns with :param)\n\tfor (const route of discovery.staticRoutes) {\n\t\t// Skip dynamic route patterns (they shouldn't be in staticRoutes, but double-check)\n\t\tif (route.pattern.includes(':')) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Skip completely excluded routes\n\t\tif (options.excludeRoutes?.includes(route.pattern)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Normalize the pattern to URL\n\t\tlet loc = route.pattern;\n\n\t\t// Convert /index to /\n\t\tif (loc === '/index') {\n\t\t\tloc = '/';\n\t\t} else if (loc.endsWith('/index')) {\n\t\t\tloc = loc.slice(0, -6) || '/';\n\t\t}\n\n\t\t// Remove .tsx, .ts, .jsx, .js extensions\n\t\tloc = loc.replace(/\\.(tsx?|jsx?)$/, '');\n\n\t\tallEntries.push({\n\t\t\tloc: `${baseUrl}${loc}`,\n\t\t\tchangefreq: route.changefreq || changefreq,\n\t\t\tpriority:\n\t\t\t\troute.priority !== undefined\n\t\t\t\t\t? route.priority\n\t\t\t\t\t: loc === '/'\n\t\t\t\t\t\t? 1.0\n\t\t\t\t\t\t: priority,\n\t\t});\n\t}\n\n\t// Add collection content\n\tfor (const [_collection, entries] of discovery.collections.entries()) {\n\t\tallEntries.push(...entries);\n\t}\n\n\t// Add SSR data routes\n\tfor (const [_pattern, entries] of discovery.ssrDataRoutes.entries()) {\n\t\tallEntries.push(...entries);\n\t}\n\n\t// Sort by priority (desc) and then by URL (asc)\n\tallEntries.sort((a, b) => {\n\t\tconst priorityDiff = (b.priority || 0.5) - (a.priority || 0.5);\n\t\tif (priorityDiff !== 0) return priorityDiff;\n\t\treturn a.loc.localeCompare(b.loc);\n\t});\n\n\t// Paginate if needed\n\tconst pages: SitemapPage[] = [];\n\tconst needsIndex = allEntries.length > maxUrlsPerPage;\n\n\tif (needsIndex) {\n\t\t// Create multiple sitemap files\n\t\tlet pageNum = 0;\n\t\tfor (let i = 0; i < allEntries.length; i += maxUrlsPerPage) {\n\t\t\tconst pageEntries = allEntries.slice(i, i + maxUrlsPerPage);\n\t\t\tconst xml = generateSitemapXML(pageEntries);\n\t\t\tconst filename = `sitemap-${pageNum}.xml`;\n\n\t\t\tpages.push({\n\t\t\t\tfilename,\n\t\t\t\txml,\n\t\t\t\tentryCount: pageEntries.length,\n\t\t\t});\n\t\t\tpageNum++;\n\t\t}\n\n\t\t// Create sitemap index\n\t\tconst indexXml = generateSitemapIndexXML(pages, baseUrl);\n\t\treturn { pages, indexXml, needsIndex: true };\n\t} else {\n\t\t// Single sitemap file\n\t\tconst xml = generateSitemapXML(allEntries);\n\t\tpages.push({\n\t\t\tfilename: 'sitemap.xml',\n\t\t\txml,\n\t\t\tentryCount: allEntries.length,\n\t\t});\n\n\t\treturn { pages, needsIndex: false };\n\t}\n}\n\n/**\n * Generate sitemap XML for a set of entries\n */\nfunction generateSitemapXML(entries: SitemapEntry[]): string {\n\tconst urlsetEntries = entries\n\t\t.map((entry) => {\n\t\t\tlet xml = ` <url>\\n <loc>${escapeXml(entry.loc)}</loc>`;\n\n\t\t\tif (entry.lastmod) {\n\t\t\t\txml += `\\n <lastmod>${entry.lastmod.split('T')[0]}</lastmod>`;\n\t\t\t}\n\n\t\t\tif (entry.changefreq) {\n\t\t\t\txml += `\\n <changefreq>${entry.changefreq}</changefreq>`;\n\t\t\t}\n\n\t\t\tif (entry.priority !== undefined) {\n\t\t\t\txml += `\\n <priority>${entry.priority.toFixed(1)}</priority>`;\n\t\t\t}\n\n\t\t\txml += '\\n </url>';\n\t\t\treturn xml;\n\t\t})\n\t\t.join('\\n');\n\n\treturn `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${urlsetEntries}\n</urlset>`;\n}\n\n/**\n * Generate sitemap index XML\n */\nfunction generateSitemapIndexXML(\n\tpages: SitemapPage[],\n\tbaseUrl: string,\n): string {\n\tconst lastmod = new Date().toISOString().split('T')[0];\n\n\tconst sitemapEntries = pages\n\t\t.map((page) => {\n\t\t\treturn ` <sitemap>\n <loc>${escapeXml(`${baseUrl}/${page.filename}`)}</loc>\n <lastmod>${lastmod}</lastmod>\n </sitemap>`;\n\t\t})\n\t\t.join('\\n');\n\n\treturn `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${sitemapEntries}\n</sitemapindex>`;\n}\n\n/**\n * Escape XML special characters\n */\nfunction escapeXml(unsafe: string): string {\n\treturn unsafe\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"')\n\t\t.replace(/'/g, ''');\n}\n\nexport {\n\tescapeXml,\n\tgenerateSitemap,\n\tgenerateSitemapIndexXML,\n\tgenerateSitemapXML,\n\ttype SitemapPage,\n\ttype SitemapResult,\n};\n",
|
|
55
55
|
"export * from './lib';\nexport * from './render';\nexport * from './stream';\n",
|
|
56
|
-
"import { cloneElement, type ReactElement } from 'react';\nimport { renderToReadableStream } from 'react-dom/server';\nimport type { OGImageOptions } from '../config';\nimport {\n\tcreateDataScript,\n\tcreateFeedsScript,\n\tcreateLlmsScript,\n\tgenerateCollectionScripts,\n\tperformSSRSetup,\n} from './lib';\nimport { deduplicateMetaTags, loadIndexHtml } from './lib/html';\nimport { isThenable } from './lib/imports';\nimport { splitTemplate } from './lib/template';\nimport type { Doc } from './lib/types';\n\ntype StreamingSSROptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n};\n\ntype StreamingSSRResult = {\n\tstream: ReadableStream<Uint8Array>;\n\tstatus: number;\n};\n\n/**\n * Render a React component to a streaming HTML response.\n * Uses React 19's streaming with progressive Suspense resolution.\n */\nasync function renderSSRDocumentStream(\n\toptions: StreamingSSROptions,\n): Promise<StreamingSSRResult> {\n\tconst {\n\t\tpathname,\n\t\trootComponent,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\thead = '',\n\t\tlang = 'en',\n\t\tappId = 'root',\n\t\tmaxAge = 0,\n\t\tsearchParams,\n\t\togConfig,\n\t} = options;\n\n\t// Perform shared SSR setup\n\tconst setup = await performSSRSetup(\n\t\t{\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\tbundleUrl,\n\t\t\tmaxAge,\n\t\t\tsearchParams,\n\t\t\togConfig,\n\t\t},\n\t\ttrue, // streaming mode\n\t);\n\n\t// Determine status\n\tlet statusOverride = setup.preloadStatusOverride;\n\tif (setup.statusContainer.value) {\n\t\tstatusOverride = setup.statusContainer.value;\n\t}\n\tif (setup.metadataResult.statusOverride) {\n\t\tstatusOverride = setup.metadataResult.statusOverride;\n\t}\n\n\t// Set up streaming\n\tconst encoder = new TextEncoder();\n\tconst { readable, writable } = new TransformStream<Uint8Array>();\n\tconst writer = writable.getWriter();\n\n\t// Load and split template\n\tconst baseTemplate = await loadIndexHtml(clientDir);\n\tconst { htmlHead, rootStart, rootEnd, htmlTail } = splitTemplate(\n\t\tbaseTemplate,\n\t\tappId,\n\t);\n\n\t// Build head with lang attribute\n\tconst pageLang = setup.metadataResult.pageLang || lang;\n\tlet headWithLang = htmlHead.replace(\n\t\t/<html([^>]*)>/i,\n\t\t`<html$1 lang=\"${pageLang}\">`,\n\t);\n\n\t// Build extra head content\n\tconst extraHead =\n\t\tsetup.bundlePreload +\n\t\tsetup.preloadExtraHead +\n\t\tsetup.metadataResult.perPageHead;\n\n\t// Remove default title/description from template if we have page-specific ones\n\tif (/<title[\\s\\S]*?<\\/title>/i.test(extraHead)) {\n\t\theadWithLang = headWithLang.replace(/<title[\\s\\S]*?<\\/title>/i, '');\n\t}\n\tif (/<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i.test(extraHead)) {\n\t\theadWithLang = headWithLang.replace(\n\t\t\t/<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i,\n\t\t\t'',\n\t\t);\n\t}\n\n\t// Start streaming in background\n\tstreamSSRContent(writer, encoder, {\n\t\trootComponent,\n\t\tpathname,\n\t\tsearchParams,\n\t\theadWithLang,\n\t\thead,\n\t\textraHead,\n\t\tinlineStyleTag: setup.inlineStyleTag,\n\t\tpageLang,\n\t\trootStart,\n\t\trootEnd,\n\t\thtmlTail,\n\t\tbundleUrl,\n\t\tisWatchMode,\n\t\tssrData: setup.ssrData,\n\t\tssrError: setup.ssrError,\n\t\tbyCollectionForSSR: setup.byCollectionForSSR,\n\t\tpreloadHydrationScript: setup.preloadHydrationScript,\n\t});\n\n\treturn { stream: readable, status: statusOverride || 200 };\n}\n\ntype StreamContext = {\n\trootComponent: ReactElement;\n\tpathname: string;\n\tsearchParams?: URLSearchParams;\n\theadWithLang: string;\n\thead: string;\n\textraHead: string;\n\tinlineStyleTag: string;\n\tpageLang: string;\n\trootStart: string;\n\trootEnd: string;\n\thtmlTail: string;\n\tbundleUrl: string;\n\tisWatchMode: boolean;\n\tssrData: Record<string, unknown>;\n\tssrError?: string;\n\tbyCollectionForSSR: Record<string, unknown[]>;\n\tpreloadHydrationScript: string;\n};\n\n/**\n * Stream SSR content progressively\n */\nasync function streamSSRContent(\n\twriter: WritableStreamDefaultWriter<Uint8Array>,\n\tencoder: TextEncoder,\n\tctx: StreamContext,\n): Promise<void> {\n\t// Set a maximum streaming timeout to prevent server hangs\n\t// This ensures the stream always completes even if React is waiting for promises\n\tconst STREAM_TIMEOUT_MS = 15000; // 15 seconds max for entire streaming\n\tlet streamTimedOut = false;\n\tlet timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n\tconst cleanup = () => {\n\t\tif (timeoutId) {\n\t\t\tclearTimeout(timeoutId);\n\t\t\ttimeoutId = null;\n\t\t}\n\t};\n\n\ttry {\n\t\t// 1. Send HTML head immediately (shell)\n\t\tconst combinedHead = deduplicateMetaTags(\n\t\t\t[ctx.inlineStyleTag, ctx.head, ctx.extraHead].filter(Boolean).join('\\n'),\n\t\t);\n\t\tconst
|
|
56
|
+
"import { cloneElement, type ReactElement } from 'react';\nimport { renderToReadableStream } from 'react-dom/server';\nimport type { OGImageOptions } from '../config';\nimport {\n\tcreateDataScript,\n\tcreateFeedsScript,\n\tcreateLlmsScript,\n\tgenerateCollectionScripts,\n\tperformSSRSetup,\n} from './lib';\nimport { deduplicateMetaTags, loadIndexHtml } from './lib/html';\nimport { isThenable } from './lib/imports';\nimport { splitTemplate } from './lib/template';\nimport type { Doc } from './lib/types';\n\ntype StreamingSSROptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n};\n\ntype StreamingSSRResult = {\n\tstream: ReadableStream<Uint8Array>;\n\tstatus: number;\n};\n\n/**\n * Render a React component to a streaming HTML response.\n * Uses React 19's streaming with progressive Suspense resolution.\n */\nasync function renderSSRDocumentStream(\n\toptions: StreamingSSROptions,\n): Promise<StreamingSSRResult> {\n\tconst {\n\t\tpathname,\n\t\trootComponent,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\thead = '',\n\t\tlang = 'en',\n\t\tappId = 'root',\n\t\tmaxAge = 0,\n\t\tsearchParams,\n\t\togConfig,\n\t} = options;\n\n\t// Perform shared SSR setup\n\tconst setup = await performSSRSetup(\n\t\t{\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t\tbundleUrl,\n\t\t\tmaxAge,\n\t\t\tsearchParams,\n\t\t\togConfig,\n\t\t},\n\t\ttrue, // streaming mode\n\t);\n\n\t// Determine status\n\tlet statusOverride = setup.preloadStatusOverride;\n\tif (setup.statusContainer.value) {\n\t\tstatusOverride = setup.statusContainer.value;\n\t}\n\tif (setup.metadataResult.statusOverride) {\n\t\tstatusOverride = setup.metadataResult.statusOverride;\n\t}\n\n\t// Set up streaming\n\tconst encoder = new TextEncoder();\n\tconst { readable, writable } = new TransformStream<Uint8Array>();\n\tconst writer = writable.getWriter();\n\n\t// Load and split template\n\tconst baseTemplate = await loadIndexHtml(clientDir);\n\tconst { htmlHead, rootStart, rootEnd, htmlTail } = splitTemplate(\n\t\tbaseTemplate,\n\t\tappId,\n\t);\n\n\t// Build head with lang attribute\n\tconst pageLang = setup.metadataResult.pageLang || lang;\n\tlet headWithLang = htmlHead.replace(\n\t\t/<html([^>]*)>/i,\n\t\t`<html$1 lang=\"${pageLang}\">`,\n\t);\n\n\t// Build extra head content\n\tconst extraHead =\n\t\tsetup.bundlePreload +\n\t\tsetup.preloadExtraHead +\n\t\tsetup.metadataResult.perPageHead;\n\n\t// Remove default title/description from template if we have page-specific ones\n\tif (/<title[\\s\\S]*?<\\/title>/i.test(extraHead)) {\n\t\theadWithLang = headWithLang.replace(/<title[\\s\\S]*?<\\/title>/i, '');\n\t}\n\tif (/<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i.test(extraHead)) {\n\t\theadWithLang = headWithLang.replace(\n\t\t\t/<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i,\n\t\t\t'',\n\t\t);\n\t}\n\n\t// Start streaming in background\n\tstreamSSRContent(writer, encoder, {\n\t\trootComponent,\n\t\tpathname,\n\t\tsearchParams,\n\t\theadWithLang,\n\t\thead,\n\t\textraHead,\n\t\tinlineStyleTag: setup.inlineStyleTag,\n\t\tpageLang,\n\t\trootStart,\n\t\trootEnd,\n\t\thtmlTail,\n\t\tbundleUrl,\n\t\tisWatchMode,\n\t\tssrData: setup.ssrData,\n\t\tssrError: setup.ssrError,\n\t\tbyCollectionForSSR: setup.byCollectionForSSR,\n\t\tpreloadHydrationScript: setup.preloadHydrationScript,\n\t});\n\n\treturn { stream: readable, status: statusOverride || 200 };\n}\n\ntype StreamContext = {\n\trootComponent: ReactElement;\n\tpathname: string;\n\tsearchParams?: URLSearchParams;\n\theadWithLang: string;\n\thead: string;\n\textraHead: string;\n\tinlineStyleTag: string;\n\tpageLang: string;\n\trootStart: string;\n\trootEnd: string;\n\thtmlTail: string;\n\tbundleUrl: string;\n\tisWatchMode: boolean;\n\tssrData: Record<string, unknown>;\n\tssrError?: string;\n\tbyCollectionForSSR: Record<string, unknown[]>;\n\tpreloadHydrationScript: string;\n};\n\n/**\n * Stream SSR content progressively\n */\nasync function streamSSRContent(\n\twriter: WritableStreamDefaultWriter<Uint8Array>,\n\tencoder: TextEncoder,\n\tctx: StreamContext,\n): Promise<void> {\n\t// Set a maximum streaming timeout to prevent server hangs\n\t// This ensures the stream always completes even if React is waiting for promises\n\tconst STREAM_TIMEOUT_MS = 15000; // 15 seconds max for entire streaming\n\tlet streamTimedOut = false;\n\tlet timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n\tconst cleanup = () => {\n\t\tif (timeoutId) {\n\t\t\tclearTimeout(timeoutId);\n\t\t\ttimeoutId = null;\n\t\t}\n\t};\n\n\ttry {\n\t\t// 1. Send HTML head immediately (shell)\n\t\tconst combinedHead = deduplicateMetaTags(\n\t\t\t[ctx.inlineStyleTag, ctx.head, ctx.extraHead].filter(Boolean).join('\\n'),\n\t\t);\n\t\t// Inject combined head BEFORE </head> (not after)\n\t\tconst headWithLangAndContent = ctx.headWithLang\n\t\t\t.replace(/<html([^>]*)>/i, `<html$1 lang=\"${ctx.pageLang}\">`)\n\t\t\t.replace(\n\t\t\t\t/<\\/head>/i,\n\t\t\t\t`${combinedHead ? `${combinedHead}\\n` : ''}</head>`,\n\t\t\t);\n\t\tconst headContent = `${headWithLangAndContent}<body>`;\n\t\tawait writer.write(encoder.encode(headContent));\n\n\t\t// 2. Send root div start\n\t\tawait writer.write(encoder.encode(ctx.rootStart));\n\n\t\t// 3. Stream React content\n\t\tconst componentWithPathname = cloneElement(ctx.rootComponent, {\n\t\t\tpathname: ctx.pathname,\n\t\t\tsearchParams: ctx.searchParams,\n\t\t} as Doc);\n\n\t\tlet streamError: Error | null = null;\n\t\tconst streamPromise = renderToReadableStream(componentWithPathname, {\n\t\t\tonError(error) {\n\t\t\t\tconsole.error('[reroute] SSR stream error:', error);\n\t\t\t\tstreamError = error instanceof Error ? error : new Error(String(error));\n\t\t\t},\n\t\t}).catch((err) => {\n\t\t\tstreamError = err;\n\t\t\tthrow err;\n\t\t});\n\n\t\tconst reactStream = await streamPromise;\n\t\tif (streamError) throw streamError;\n\n\t\t// Set up streaming timeout - if React takes too long, force close\n\t\tconst streamTimeoutPromise = new Promise<{ done: true; value: undefined }>(\n\t\t\t(resolve) => {\n\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[reroute] Stream timeout after ${STREAM_TIMEOUT_MS}ms for ${ctx.pathname}, forcing close`,\n\t\t\t\t\t);\n\t\t\t\t\tstreamTimedOut = true;\n\t\t\t\t\tresolve({ done: true, value: undefined });\n\t\t\t\t}, STREAM_TIMEOUT_MS);\n\t\t\t},\n\t\t);\n\n\t\t// Pipe React stream to writer with timeout protection\n\t\tconst reader = reactStream.getReader();\n\t\twhile (true) {\n\t\t\t// Race between getting next chunk and timeout\n\t\t\tconst result = await Promise.race([reader.read(), streamTimeoutPromise]);\n\n\t\t\tif (result.done || streamTimedOut) {\n\t\t\t\t// Release the reader lock before breaking\n\t\t\t\ttry {\n\t\t\t\t\treader.releaseLock();\n\t\t\t\t} catch {}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (result.value) {\n\t\t\t\tawait writer.write(result.value);\n\t\t\t}\n\t\t}\n\n\t\tcleanup();\n\n\t\t// 4. Close root div\n\t\tawait writer.write(encoder.encode(ctx.rootEnd));\n\n\t\t// 5. Generate scripts\n\t\tconst allScripts = buildStreamingScripts(ctx);\n\t\tawait writer.write(encoder.encode(allScripts + ctx.htmlTail));\n\t\tawait writer.close();\n\t} catch (error) {\n\t\tcleanup();\n\t\tconsole.error('[reroute] Stream error:', error);\n\t\ttry {\n\t\t\tawait writer.abort(error);\n\t\t} catch {\n\t\t\t// Writer might already be closed\n\t\t}\n\t}\n}\n\n/**\n * Build all scripts for streaming SSR\n */\nfunction buildStreamingScripts(ctx: StreamContext): string {\n\t// Generate collection scripts\n\tconst collectionScripts = generateCollectionScripts(ctx.byCollectionForSSR);\n\n\t// Create snapshot of resolved SSR data\n\tconst ssrDataSnapshot: Record<string, unknown> = {};\n\tfor (const key of Object.keys(ctx.ssrData)) {\n\t\tconst value = ctx.ssrData[key];\n\t\tif (!isThenable(value)) {\n\t\t\tssrDataSnapshot[key] = value;\n\t\t}\n\t}\n\n\t// Build scripts\n\tconst dataScript = createDataScript(\n\t\tssrDataSnapshot,\n\t\tctx.isWatchMode ? ctx.ssrError : undefined,\n\t);\n\tconst feedsScript = createFeedsScript();\n\tconst llmsScript = createLlmsScript();\n\n\tlet allScripts =\n\t\tdataScript +\n\t\tfeedsScript +\n\t\tllmsScript +\n\t\tcollectionScripts +\n\t\tctx.preloadHydrationScript;\n\n\t// Add bundle script\n\tallScripts += `<script type=\"module\" src=\"${ctx.bundleUrl}\"></script>`;\n\n\t// Add dev watcher\n\tif (ctx.isWatchMode) {\n\t\tallScripts += `<script type=\"module\" src=\"/__reroute_watch.js\"></script>`;\n\t}\n\n\treturn allScripts;\n}\n\nexport { renderSSRDocumentStream };\nexport type { StreamingSSROptions, StreamingSSRResult };\n"
|
|
57
57
|
],
|
|
58
|
-
"mappings": "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",
|
|
59
|
-
"debugId": "
|
|
58
|
+
"mappings": "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",
|
|
59
|
+
"debugId": "C9ED65FA81A8B35864756E2164756E21",
|
|
60
60
|
"names": []
|
|
61
61
|
}
|