reroute-js 0.40.1 → 0.41.0
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 +121 -40
- package/cli/bin.js.map +10 -10
- 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 +1 -1
- package/cli/src/commands/dev.d.ts +1 -1
- package/cli/src/commands/gen.d.ts +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/assets.d.ts +1 -1
- package/cli/src/commands/lib/bundler.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/terminal-ui.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 +117 -36
- package/core/index.js.map +10 -10
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/config.d.ts +42 -2
- package/core/src/config.d.ts.map +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 +7 -2
- package/core/src/content/metadata.d.ts.map +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.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/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/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/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/layouts.d.ts +1 -1
- package/core/src/ssr/lib/compute/routes.d.ts +1 -1
- package/core/src/ssr/lib/data.d.ts +1 -1
- package/core/src/ssr/lib/html.d.ts +6 -1
- package/core/src/ssr/lib/html.d.ts.map +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 +3 -3
- package/core/src/ssr/lib/metadata.d.ts.map +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/serialize.d.ts +1 -1
- package/core/src/ssr/lib/setup.d.ts +3 -2
- package/core/src/ssr/lib/setup.d.ts.map +1 -1
- package/core/src/ssr/lib/styles.d.ts +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 +3 -2
- package/core/src/ssr/render.d.ts.map +1 -1
- package/core/src/ssr/stream.d.ts +3 -2
- package/core/src/ssr/stream.d.ts.map +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +120 -36
- package/elysia/index.js.map +12 -12
- package/elysia/src/index.d.ts +1 -1
- package/elysia/src/libs/assets.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 +3 -2
- package/elysia/src/routes/ssr.d.ts.map +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/telemetry/react.d.ts +1 -1
- package/telemetry/react.js +2 -2
- package/telemetry/react.js.map +1 -1
- package/telemetry/server.d.ts +1 -1
- package/telemetry/server.js +2 -2
- package/telemetry/server.js.map +8 -8
- package/telemetry/src/react/api.d.ts +1 -1
- package/telemetry/src/react/context.d.ts +1 -1
- package/telemetry/src/react/index.d.ts +1 -1
- package/telemetry/src/react/telemetry.d.ts +1 -1
- package/telemetry/src/server/context.d.ts +1 -1
- package/telemetry/src/server/headers/extractor.d.ts +1 -1
- package/telemetry/src/server/headers/index.d.ts +1 -1
- package/telemetry/src/server/headers/presets.d.ts +1 -1
- package/telemetry/src/server/index.d.ts +1 -1
- package/telemetry/src/server/instrumentation.d.ts +1 -1
- package/telemetry/src/server/plugin.d.ts +1 -1
- package/telemetry/src/server/sourcemap.d.ts +1 -1
package/elysia/index.js.map
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"sources": ["../../packages/core/src/bundler/hash.ts", "../../packages/core/src/config.ts", "../../packages/core/src/ssr/lib/path.ts", "../../packages/core/src/content/discovery.ts", "../../packages/core/src/content/metadata.ts", "../../packages/core/src/content/index.ts", "../../packages/telemetry/src/server/context.ts", "../../packages/telemetry/src/server/headers/index.ts", "../../packages/telemetry/src/server/instrumentation.ts", "../../packages/telemetry/src/server/sourcemap.ts", "../../packages/telemetry/src/server/plugin.ts", "../../packages/telemetry/src/server/index.ts", "../../packages/telemetry/server.ts", "../../packages/core/src/ssr/lib/cache.ts", "../../packages/core/src/ssr/lib/imports.ts", "../../packages/core/src/ssr/lib/collections.ts", "../../packages/core/src/ssr/lib/mime.ts", "../../packages/core/src/ssr/lib/compression.ts", "../../packages/core/src/ssr/lib/compute/content.ts", "../../packages/core/src/ssr/lib/layouts.ts", "../../packages/core/src/ssr/lib/compute/layouts.ts", "../../packages/core/src/ssr/lib/compute/routes.ts", "../../packages/core/src/ssr/lib/compute/index.ts", "../../packages/core/src/ssr/lib/modules.ts", "../../packages/core/src/ssr/lib/seed.ts", "../../packages/core/src/ssr/lib/data.ts", "../../packages/core/src/ssr/lib/html.ts", "../../packages/core/src/og/discovery.ts", "../../packages/core/src/og/meta.ts", "../../packages/core/src/ssr/lib/metadata.ts", "../../packages/core/src/ssr/lib/preload.ts", "../../packages/core/src/ssr/lib/scripts/escape.ts", "../../packages/core/src/ssr/lib/scripts/collections.ts", "../../packages/core/src/ssr/lib/scripts/data.ts", "../../packages/core/src/ssr/lib/scripts/feeds.ts", "../../packages/core/src/ssr/lib/scripts/index.ts", "../../packages/core/src/ssr/lib/styles.ts", "../../packages/core/src/ssr/lib/setup.ts", "../../packages/core/src/ssr/lib/template.ts", "../../packages/core/src/ssr/lib/index.ts", "../../packages/core/src/ssr/lib/serialize.ts", "../../packages/core/src/ssr/render.ts", "../../packages/core/src/llms/formatter.ts", "../../packages/core/src/llms/extractor.ts", "../../packages/core/src/llms/index-generator.ts", "../../packages/core/src/llms/full-generator.ts", "../../packages/core/src/llms/index.ts", "../../packages/core/src/og/render.ts", "../../packages/core/src/og/index.ts", "../../packages/core/src/robots/discovery.ts", "../../packages/core/src/robots/generator.ts", "../../packages/core/src/robots/policies.ts", "../../packages/core/src/robots/index.ts", "../../packages/core/src/sitemap/discovery.ts", "../../packages/core/src/rss/discovery.ts", "../../packages/core/src/rss/generator.ts", "../../packages/core/src/rss/index.ts", "../../packages/core/src/sitemap/generator.ts", "../../packages/core/src/sitemap/index.ts", "../../packages/core/src/ssr/stream.ts", "../../packages/core/src/ssr/index.ts", "../../packages/core/src/index.ts", "../../packages/core/index.ts", "../../packages/elysia/src/plugin.ts", "../../packages/elysia/src/libs/image.ts", "../../packages/elysia/src/routes/artifacts.ts", "../../packages/elysia/src/libs/serving.ts", "../../packages/elysia/src/libs/cache.ts", "../../packages/elysia/src/libs/response.ts", "../../packages/elysia/src/routes/content.ts", "../../packages/elysia/src/routes/image.ts", "../../packages/elysia/src/routes/internal.ts", "../../packages/elysia/src/libs/http.ts", "../../packages/elysia/src/routes/llms.ts", "../../packages/elysia/src/libs/caching.ts", "../../packages/elysia/src/libs/llms.ts", "../../packages/elysia/src/routes/og.ts", "../../packages/elysia/src/routes/redirects.ts", "../../packages/elysia/src/routes/robots.ts", "../../packages/elysia/src/routes/rss.ts", "../../packages/elysia/src/routes/search.ts", "../../packages/elysia/src/routes/sitemap.ts", "../../packages/elysia/src/routes/ssr.ts", "../../packages/elysia/src/routes/static.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"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",
|
|
6
|
-
"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\ttimeout?: number;\n}\n\ninterface StaticOptions {\n\t/**\n\t * Patterns to ignore when serving static files\n\t * @default ['.DS_Store', '.git', '.env']\n\t */\n\tignorePatterns?: (string | RegExp)[];\n\t/**\n\t * Custom headers to add to static file responses\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * Cache duration in seconds for static assets\n\t * @default 3600 (1 hour)\n\t */\n\tmaxAge?: number;\n\t/**\n\t * Cache-Control directive\n\t * @default 'public'\n\t */\n\tdirective?: string;\n}\n\ninterface ImageOptions {\n\t/**\n\t * Cache duration in seconds for optimized images\n\t * @default 31536000 (1 year)\n\t */\n\tmaxAge?: number;\n\t/**\n\t * Allowed external domains for image optimization\n\t * @default []\n\t */\n\tallowedDomains?: string[];\n\t/**\n\t * Maximum image width in pixels\n\t * @default 3840\n\t */\n\tmaxWidth?: number;\n\t/**\n\t * Maximum image height in pixels\n\t * @default 2160\n\t */\n\tmaxHeight?: number;\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 Streamdown\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\ninterface OGImageFont {\n\t/** Font family name (e.g., 'Inter') */\n\tname: string;\n\t/** Path to font file (TTF, OTF, or WOFF) relative to project root */\n\tpath: string;\n\t/** Font weight (e.g., 400, 700, 900) */\n\tweight?: number;\n\t/** Font style (default: 'normal') */\n\tstyle?:\n\t\t| 'normal'\n\t\t| 'italic'\n\t\t| 'bold'\n\t\t| 'bold-italic'\n\t\t| 'medium'\n\t\t| 'medium-italic'\n\t\t| 'semibold'\n\t\t| 'semibold-italic'\n\t\t| 'light'\n\t\t| 'light-italic'\n\t\t| 'thin'\n\t\t| 'thin-italic'\n\t\t| 'black'\n\t\t| 'black-italic'\n\t\t| 'extra-bold'\n\t\t| 'extra-bold-italic'\n\t\t| 'extra-light'\n\t\t| 'extra-light-italic'\n\t\t| 'extra-medium'\n\t\t| 'extra-medium-italic'\n\t\t| 'extra-semibold'\n\t\t| 'extra-semibold-italic'\n\t\t| 'extra-light'\n\t\t| 'extra-light-italic'\n\t\t| 'extra-medium'\n\t\t| 'extra-medium-italic'\n\t\t| 'extra-semibold'\n\t\t| 'extra-semibold-italic';\n\tdata?: ArrayBuffer | undefined;\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\t/** Custom fonts to load for OG images */\n\tfonts?: OGImageFont[];\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 * Telemetry proxy configuration for forwarding browser telemetry\n */\ninterface TelemetryProxyOptions {\n\t/**\n\t * Enable browser telemetry proxy (default: true when proxy config exists)\n\t * Creates endpoints to forward browser traces/metrics/logs to OTLP backend\n\t * This avoids CORS issues and ad blockers\n\t */\n\tenabled?: boolean;\n\n\t/**\n\t * Base path for proxy endpoints (default: '/__reroute_telemetry')\n\t * Creates:\n\t * - {pathname}/v1/traces\n\t * - {pathname}/v1/metrics\n\t * - {pathname}/v1/logs\n\t * - {pathname}/health\n\t */\n\tpathname?: string;\n\n\t/**\n\t * Enable verbose logging for proxy requests\n\t * @default false\n\t */\n\tverbose?: boolean;\n\n\t/**\n\t * Custom handler for proxy requests (advanced)\n\t * If provided, replaces default OTLP forwarding logic\n\t *\n\t * @example\n\t * ```ts\n\t * handler: async ({ body, endpoint, headers }) => {\n\t * // Custom logic: filter, transform, or route to different backends\n\t * await fetch(`https://custom-backend${endpoint}`, {\n\t * method: 'POST',\n\t * headers,\n\t * body: JSON.stringify(body),\n\t * });\n\t * return { status: 200 };\n\t * }\n\t * ```\n\t */\n\thandler?: (params: {\n\t\tbody: unknown;\n\t\tendpoint: string;\n\t\theaders: Record<string, string>;\n\t\totlpEndpoint: string;\n\t}) => Promise<{ status: number }>;\n}\n\n/**\n * Browser telemetry configuration options\n */\ninterface BrowserTelemetryOptions {\n\t/**\n\t * Enable browser telemetry\n\t * @default true\n\t */\n\tenabled?: boolean;\n\n\t/**\n\t * Service name for browser telemetry\n\t * @default 'reroute-app-browser'\n\t */\n\tserviceName?: string;\n\n\t/**\n\t * Service version\n\t * @default '1.0.0'\n\t */\n\tserviceVersion?: string;\n\n\t/**\n\t * OTLP endpoint URL (use relative URL for same-origin proxy)\n\t * @default '/__reroute_telemetry'\n\t */\n\totlpEndpoint?: string;\n\n\t/**\n\t * API key for authentication (optional)\n\t */\n\tapiKey?: string;\n\n\t/**\n\t * Deployment environment (e.g., 'production', 'staging', 'development')\n\t * @default 'development'\n\t */\n\tenvironment?: string;\n\n\t/**\n\t * Enable console.error capture\n\t * @default true\n\t */\n\tenableConsoleCapture?: boolean;\n\n\t/**\n\t * Ignore specific routes/URLs from breadcrumbs and network tracking\n\t *\n\t * Note: Functions are NOT supported for browser telemetry (closures cannot be serialized)\n\t * Use strings or regex patterns instead\n\t *\n\t * @example\n\t * ```ts\n\t * ignoreRoutes: [\n\t * '/bundles/', // String prefix match\n\t * /\\.(js|css|png)$/, // Regex pattern\n\t * /^\\/assets\\//, // Regex for path prefix\n\t * ]\n\t * ```\n\t */\n\tignoreRoutes?: Array<string | RegExp>;\n}\n\n/**\n * Telemetry configuration options for OpenTelemetry integration\n */\ninterface TelemetryOptions {\n\t/**\n\t * Enable server telemetry collection (default: false)\n\t * Must be explicitly enabled to start collecting traces, metrics, and logs\n\t */\n\tenabled?: boolean;\n\n\t/**\n\t * Browser telemetry configuration\n\t * Configure browser-side telemetry separately from server\n\t */\n\tbrowser?: BrowserTelemetryOptions;\n\n\t/**\n\t * Service name for server telemetry\n\t * @default 'reroute-app'\n\t */\n\tserviceName?: string;\n\n\t/**\n\t * Service version\n\t * @default process.env.npm_package_version || '1.0.0'\n\t */\n\tserviceVersion?: string;\n\n\t/**\n\t * OTLP endpoint URL\n\t * @default process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4318'\n\t */\n\totlpEndpoint?: string;\n\n\t/**\n\t * API key for authentication (optional, only needed for SigNoz Cloud)\n\t */\n\tapiKey?: string;\n\n\t/**\n\t * Deployment environment (e.g., 'production', 'staging', 'development')\n\t * Used as a deployment.environment attribute on all telemetry\n\t * @default process.env.NODE_ENV || 'development'\n\t */\n\tenvironment?: string;\n\n\t/**\n\t * Metric export interval in milliseconds\n\t * @default 5000\n\t */\n\tmetricsInterval?: number;\n\n\t/**\n\t * Browser telemetry proxy configuration\n\t * When configured, creates endpoints to forward browser telemetry to OTLP backend\n\t * This avoids CORS issues and ad blockers\n\t */\n\tproxy?: TelemetryProxyOptions;\n\n\t/**\n\t * Ignore specific routes from telemetry collection\n\t * Supports flexible pattern matching:\n\t * - String: Matches if pathname contains the string (e.g., '/assets' matches '/assets/logo.png')\n\t * - RegExp: Tests pathname against regex (e.g., /\\.(js|css)$/ matches file extensions)\n\t * - Function: Custom logic with pathname and method (server-side only)\n\t *\n\t * Note: For browser telemetry, only strings and regex are supported (functions use closures that cannot be serialized)\n\t *\n\t * @example\n\t * ```ts\n\t * ignoreRoutes: [\n\t * '/health', // String match\n\t * /\\.(js|css|png|jpg|svg|ico|woff2?)$/, // Regex for static assets\n\t * (pathname) => pathname.startsWith('/assets/'), // Function (server-side only)\n\t * (pathname, method) => method === 'OPTIONS', // Access to HTTP method (server-side only)\n\t * ]\n\t * ```\n\t */\n\tignoreRoutes?: (\n\t\t| string\n\t\t| RegExp\n\t\t| ((pathname: string, method: string) => boolean)\n\t)[];\n\n\t/**\n\t * Enable distributed tracing (default: true)\n\t * Captures request flows across services with OpenTelemetry traces\n\t */\n\tenableTraces?: boolean;\n\n\t/**\n\t * Enable metrics collection (default: true)\n\t * Captures counters, gauges, and histograms for request volume, duration, etc.\n\t */\n\tenableMetrics?: boolean;\n\n\t/**\n\t * Enable structured logging (default: true)\n\t * Captures log events with structured attributes for better querying\n\t */\n\tenableLogs?: boolean;\n\n\t/**\n\t * Enable system metrics collection (default: true)\n\t * Captures CPU usage, memory consumption, and process metrics\n\t */\n\tenableSystemMetrics?: boolean;\n\n\t/**\n\t * Enable console.error and console.warn capture (default: true)\n\t * Automatically creates telemetry spans for console.error/warn calls\n\t * Useful for catching errors that are logged but not thrown\n\t */\n\tenableConsoleCapture?: boolean;\n\n\t/**\n\t * Sample rate for regular requests (default: 1.0)\n\t * Controls what percentage of requests to track (0.0 = 0%, 1.0 = 100%)\n\t *\n\t * Use sampling to reduce telemetry volume and costs on high-traffic applications:\n\t * - 1.0 = Track every request (100%)\n\t * - 0.5 = Track half of requests (50%)\n\t * - 0.1 = Track 10% of requests\n\t * - 0.01 = Track 1% of requests\n\t *\n\t * Sampling uses random selection, so a 10% sample of 100,000 requests\n\t * still provides ~10,000 data points for statistical analysis\n\t *\n\t * @example sampleRate: 0.1 // Track 10% of requests\n\t */\n\tsampleRate?: number;\n\n\t/**\n\t * Sample rate for error requests (default: 1.0)\n\t * Controls what percentage of errors to track (0.0 = 0%, 1.0 = 100%)\n\t *\n\t * Typically set higher than sampleRate since errors are more important to track.\n\t * Common pattern: low sample rate for normal requests, 100% for errors\n\t *\n\t * @example\n\t * ```ts\n\t * sampleRate: 0.1, // Track 10% of normal requests\n\t * errorSampleRate: 1.0, // Track 100% of errors\n\t * ```\n\t */\n\terrorSampleRate?: number;\n\n\t/**\n\t * Capture and map HTTP headers to custom telemetry attributes\n\t * Provides fine-grained control over header extraction and attribute naming\n\t *\n\t * Use presets for common scenarios or define custom mappings for any header\n\t *\n\t * @example\n\t * ```ts\n\t * import { RerouteHeaders, CloudflareHeaders } from 'reroute-js/telemetry/server';\n\t *\n\t * capture: [\n\t * ...RerouteHeaders.http(), // user-agent, referer, accept-language, etc.\n\t * ...CloudflareHeaders.geo(), // Cloudflare geolocation (IP, country, city, etc.)\n\t * { header: 'x-custom', as: 'custom.value' }, // Custom mapping\n\t * ]\n\t * ```\n\t */\n\tcapture?: Array<{ header: string; as: string }>;\n\n\t/**\n\t * Custom attributes to add to all spans and logs\n\t * Useful for tagging telemetry with environment, region, version, etc.\n\t *\n\t * @example\n\t * ```ts\n\t * customAttributes: {\n\t * environment: 'production',\n\t * region: 'us-east-1',\n\t * version: '1.2.3',\n\t * }\n\t * ```\n\t */\n\tcustomAttributes?: Record<string, string | number | boolean>;\n\n\t/**\n\t * Source map configuration for production error tracking\n\t * When enabled, error stack traces are mapped to original source files\n\t * instead of compiled/minified code\n\t *\n\t * @example\n\t * ```ts\n\t * sourcemaps: {\n\t * enabled: true, // Enable sourcemap resolution\n\t * }\n\t * ```\n\t */\n\tsourcemaps?: {\n\t\t/**\n\t\t * Enable sourcemap resolution\n\t\t * @default true in production, false in development\n\t\t */\n\t\tenabled?: boolean;\n\t};\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/** Enable or disable this redirect rule (default: true) */\n\tenabled?: boolean;\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 AppOptions {\n\t// App component - must be string path in config (not ReactElement)\n\tsrc?: string;\n\n\t// Base URL for the application (e.g., 'https://example.com')\n\t// Used for canonical URLs, social meta tags, and other absolute URLs\n\tbaseUrl?: string;\n\n\t// SSR options\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\n\t// SEO options\n\t/** Enable automatic canonical URL generation (default: true when baseUrl is set) */\n\tautoCanonical?: 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// Cache-Control directive\n\tdirective?: string;\n\n\t// Debug mode - enables detailed performance logging\n\tdebug?: boolean;\n\n\t// Cache configuration (applies to SSR, data endpoints, etc.)\n\tmaxAge?: number;\n\n\t// Bundle caching options\n\tbundleMaxAge?: number;\n}\n\ninterface RerouteConfig {\n\tapp?: AppOptions;\n\tstatic?: StaticOptions;\n\tstreaming?: StreamingOptions;\n\tredirects?: RedirectRule[];\n\timage?: ImageOptions;\n\togImage?: OGImageOptions;\n\tsitemap?: SitemapOptions;\n\trss?: RSSOptions;\n\tmarkdown?: MarkdownOptions;\n\tsearch?: SearchOptions;\n\tllms?: LLMsOptions;\n\trobots?: RobotsOptions;\n\ttelemetry?: TelemetryOptions;\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 AppOptions,\n\ttype ImageOptions,\n\ttype LLMsOptions,\n\ttype MarkdownOptions,\n\ttype OGImageOptions,\n\ttype OGImageFont,\n\ttype RedirectRule,\n\ttype RerouteConfig,\n\ttype RobotsOptions,\n\ttype RobotsPolicy,\n\ttype RSSOptions,\n\ttype SearchOptions,\n\ttype SitemapOptions,\n\ttype StaticOptions,\n\ttype StreamingOptions,\n\ttype TelemetryOptions,\n\ttype TelemetryProxyOptions,\n\ttype BrowserTelemetryOptions,\n};\n",
|
|
6
|
+
"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\ttimeout?: number;\n}\n\ninterface StaticOptions {\n\t/**\n\t * Patterns to ignore when serving static files\n\t * @default ['.DS_Store', '.git', '.env']\n\t */\n\tignorePatterns?: (string | RegExp)[];\n\t/**\n\t * Custom headers to add to static file responses\n\t */\n\theaders?: Record<string, string>;\n\t/**\n\t * Cache duration in seconds for static assets\n\t * @default 3600 (1 hour)\n\t */\n\tmaxAge?: number;\n\t/**\n\t * Cache-Control directive\n\t * @default 'public'\n\t */\n\tdirective?: string;\n}\n\ninterface ImageOptions {\n\t/**\n\t * Cache duration in seconds for optimized images\n\t * @default 31536000 (1 year)\n\t */\n\tmaxAge?: number;\n\t/**\n\t * Allowed external domains for image optimization\n\t * @default []\n\t */\n\tallowedDomains?: string[];\n\t/**\n\t * Maximum image width in pixels\n\t * @default 3840\n\t */\n\tmaxWidth?: number;\n\t/**\n\t * Maximum image height in pixels\n\t * @default 2160\n\t */\n\tmaxHeight?: number;\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 Streamdown\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\ninterface OGImageFont {\n\t/** Font family name (e.g., 'Inter') */\n\tname: string;\n\t/** Path to font file (TTF, OTF, or WOFF) relative to project root */\n\tpath: string;\n\t/** Font weight (e.g., 400, 700, 900) */\n\tweight?: number;\n\t/** Font style (default: 'normal') */\n\tstyle?:\n\t\t| 'normal'\n\t\t| 'italic'\n\t\t| 'bold'\n\t\t| 'bold-italic'\n\t\t| 'medium'\n\t\t| 'medium-italic'\n\t\t| 'semibold'\n\t\t| 'semibold-italic'\n\t\t| 'light'\n\t\t| 'light-italic'\n\t\t| 'thin'\n\t\t| 'thin-italic'\n\t\t| 'black'\n\t\t| 'black-italic'\n\t\t| 'extra-bold'\n\t\t| 'extra-bold-italic'\n\t\t| 'extra-light'\n\t\t| 'extra-light-italic'\n\t\t| 'extra-medium'\n\t\t| 'extra-medium-italic'\n\t\t| 'extra-semibold'\n\t\t| 'extra-semibold-italic'\n\t\t| 'extra-light'\n\t\t| 'extra-light-italic'\n\t\t| 'extra-medium'\n\t\t| 'extra-medium-italic'\n\t\t| 'extra-semibold'\n\t\t| 'extra-semibold-italic';\n\tdata?: ArrayBuffer | undefined;\n}\n\n/**\n * Open Graph and social meta tags configuration\n */\ninterface OGOptions {\n\t/**\n\t * Site name used for og:site_name meta tag\n\t * This appears as the website name in social media shares\n\t * @example 'My Awesome Site'\n\t */\n\tsiteName?: string;\n\n\t/**\n\t * Default site description used as fallback for og:description\n\t * when a page doesn't define its own description\n\t * @example 'A modern web application built with Reroute'\n\t */\n\tsiteDescription?: string;\n\n\t/**\n\t * Default Open Graph type for pages without explicit og:type\n\t * Common types: 'website', 'article', 'product', 'profile'\n\t * @default 'website'\n\t * @see https://ogp.me/#types\n\t */\n\tdefaultType?: string;\n\n\t/**\n\t * Twitter/X handle for twitter:site meta tag (with or without @)\n\t * @example '@mysite' or 'mysite'\n\t */\n\ttwitterSite?: string;\n\n\t/**\n\t * Twitter/X card type (default: 'summary_large_image')\n\t * @default 'summary_large_image'\n\t */\n\ttwitterCard?: 'summary' | 'summary_large_image' | 'app' | 'player';\n\n\t/**\n\t * Default locale for og:locale meta tag\n\t * @example 'en_US', 'en_GB', 'es_ES'\n\t */\n\tlocale?: string;\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\t/** Custom fonts to load for OG images */\n\tfonts?: OGImageFont[];\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 * Telemetry proxy configuration for forwarding browser telemetry\n */\ninterface TelemetryProxyOptions {\n\t/**\n\t * Enable browser telemetry proxy (default: true when proxy config exists)\n\t * Creates endpoints to forward browser traces/metrics/logs to OTLP backend\n\t * This avoids CORS issues and ad blockers\n\t */\n\tenabled?: boolean;\n\n\t/**\n\t * Base path for proxy endpoints (default: '/__reroute_telemetry')\n\t * Creates:\n\t * - {pathname}/v1/traces\n\t * - {pathname}/v1/metrics\n\t * - {pathname}/v1/logs\n\t * - {pathname}/health\n\t */\n\tpathname?: string;\n\n\t/**\n\t * Enable verbose logging for proxy requests\n\t * @default false\n\t */\n\tverbose?: boolean;\n\n\t/**\n\t * Custom handler for proxy requests (advanced)\n\t * If provided, replaces default OTLP forwarding logic\n\t *\n\t * @example\n\t * ```ts\n\t * handler: async ({ body, endpoint, headers }) => {\n\t * // Custom logic: filter, transform, or route to different backends\n\t * await fetch(`https://custom-backend${endpoint}`, {\n\t * method: 'POST',\n\t * headers,\n\t * body: JSON.stringify(body),\n\t * });\n\t * return { status: 200 };\n\t * }\n\t * ```\n\t */\n\thandler?: (params: {\n\t\tbody: unknown;\n\t\tendpoint: string;\n\t\theaders: Record<string, string>;\n\t\totlpEndpoint: string;\n\t}) => Promise<{ status: number }>;\n}\n\n/**\n * Browser telemetry configuration options\n */\ninterface BrowserTelemetryOptions {\n\t/**\n\t * Enable browser telemetry\n\t * @default true\n\t */\n\tenabled?: boolean;\n\n\t/**\n\t * Service name for browser telemetry\n\t * @default 'reroute-app-browser'\n\t */\n\tserviceName?: string;\n\n\t/**\n\t * Service version\n\t * @default '1.0.0'\n\t */\n\tserviceVersion?: string;\n\n\t/**\n\t * OTLP endpoint URL (use relative URL for same-origin proxy)\n\t * @default '/__reroute_telemetry'\n\t */\n\totlpEndpoint?: string;\n\n\t/**\n\t * API key for authentication (optional)\n\t */\n\tapiKey?: string;\n\n\t/**\n\t * Deployment environment (e.g., 'production', 'staging', 'development')\n\t * @default 'development'\n\t */\n\tenvironment?: string;\n\n\t/**\n\t * Enable console.error capture\n\t * @default true\n\t */\n\tenableConsoleCapture?: boolean;\n\n\t/**\n\t * Ignore specific routes/URLs from breadcrumbs and network tracking\n\t *\n\t * Note: Functions are NOT supported for browser telemetry (closures cannot be serialized)\n\t * Use strings or regex patterns instead\n\t *\n\t * @example\n\t * ```ts\n\t * ignoreRoutes: [\n\t * '/bundles/', // String prefix match\n\t * /\\.(js|css|png)$/, // Regex pattern\n\t * /^\\/assets\\//, // Regex for path prefix\n\t * ]\n\t * ```\n\t */\n\tignoreRoutes?: Array<string | RegExp>;\n}\n\n/**\n * Telemetry configuration options for OpenTelemetry integration\n */\ninterface TelemetryOptions {\n\t/**\n\t * Enable server telemetry collection (default: false)\n\t * Must be explicitly enabled to start collecting traces, metrics, and logs\n\t */\n\tenabled?: boolean;\n\n\t/**\n\t * Browser telemetry configuration\n\t * Configure browser-side telemetry separately from server\n\t */\n\tbrowser?: BrowserTelemetryOptions;\n\n\t/**\n\t * Service name for server telemetry\n\t * @default 'reroute-app'\n\t */\n\tserviceName?: string;\n\n\t/**\n\t * Service version\n\t * @default process.env.npm_package_version || '1.0.0'\n\t */\n\tserviceVersion?: string;\n\n\t/**\n\t * OTLP endpoint URL\n\t * @default process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4318'\n\t */\n\totlpEndpoint?: string;\n\n\t/**\n\t * API key for authentication (optional, only needed for SigNoz Cloud)\n\t */\n\tapiKey?: string;\n\n\t/**\n\t * Deployment environment (e.g., 'production', 'staging', 'development')\n\t * Used as a deployment.environment attribute on all telemetry\n\t * @default process.env.NODE_ENV || 'development'\n\t */\n\tenvironment?: string;\n\n\t/**\n\t * Metric export interval in milliseconds\n\t * @default 5000\n\t */\n\tmetricsInterval?: number;\n\n\t/**\n\t * Browser telemetry proxy configuration\n\t * When configured, creates endpoints to forward browser telemetry to OTLP backend\n\t * This avoids CORS issues and ad blockers\n\t */\n\tproxy?: TelemetryProxyOptions;\n\n\t/**\n\t * Ignore specific routes from telemetry collection\n\t * Supports flexible pattern matching:\n\t * - String: Matches if pathname contains the string (e.g., '/assets' matches '/assets/logo.png')\n\t * - RegExp: Tests pathname against regex (e.g., /\\.(js|css)$/ matches file extensions)\n\t * - Function: Custom logic with pathname and method (server-side only)\n\t *\n\t * Note: For browser telemetry, only strings and regex are supported (functions use closures that cannot be serialized)\n\t *\n\t * @example\n\t * ```ts\n\t * ignoreRoutes: [\n\t * '/health', // String match\n\t * /\\.(js|css|png|jpg|svg|ico|woff2?)$/, // Regex for static assets\n\t * (pathname) => pathname.startsWith('/assets/'), // Function (server-side only)\n\t * (pathname, method) => method === 'OPTIONS', // Access to HTTP method (server-side only)\n\t * ]\n\t * ```\n\t */\n\tignoreRoutes?: (\n\t\t| string\n\t\t| RegExp\n\t\t| ((pathname: string, method: string) => boolean)\n\t)[];\n\n\t/**\n\t * Enable distributed tracing (default: true)\n\t * Captures request flows across services with OpenTelemetry traces\n\t */\n\tenableTraces?: boolean;\n\n\t/**\n\t * Enable metrics collection (default: true)\n\t * Captures counters, gauges, and histograms for request volume, duration, etc.\n\t */\n\tenableMetrics?: boolean;\n\n\t/**\n\t * Enable structured logging (default: true)\n\t * Captures log events with structured attributes for better querying\n\t */\n\tenableLogs?: boolean;\n\n\t/**\n\t * Enable system metrics collection (default: true)\n\t * Captures CPU usage, memory consumption, and process metrics\n\t */\n\tenableSystemMetrics?: boolean;\n\n\t/**\n\t * Enable console.error and console.warn capture (default: true)\n\t * Automatically creates telemetry spans for console.error/warn calls\n\t * Useful for catching errors that are logged but not thrown\n\t */\n\tenableConsoleCapture?: boolean;\n\n\t/**\n\t * Sample rate for regular requests (default: 1.0)\n\t * Controls what percentage of requests to track (0.0 = 0%, 1.0 = 100%)\n\t *\n\t * Use sampling to reduce telemetry volume and costs on high-traffic applications:\n\t * - 1.0 = Track every request (100%)\n\t * - 0.5 = Track half of requests (50%)\n\t * - 0.1 = Track 10% of requests\n\t * - 0.01 = Track 1% of requests\n\t *\n\t * Sampling uses random selection, so a 10% sample of 100,000 requests\n\t * still provides ~10,000 data points for statistical analysis\n\t *\n\t * @example sampleRate: 0.1 // Track 10% of requests\n\t */\n\tsampleRate?: number;\n\n\t/**\n\t * Sample rate for error requests (default: 1.0)\n\t * Controls what percentage of errors to track (0.0 = 0%, 1.0 = 100%)\n\t *\n\t * Typically set higher than sampleRate since errors are more important to track.\n\t * Common pattern: low sample rate for normal requests, 100% for errors\n\t *\n\t * @example\n\t * ```ts\n\t * sampleRate: 0.1, // Track 10% of normal requests\n\t * errorSampleRate: 1.0, // Track 100% of errors\n\t * ```\n\t */\n\terrorSampleRate?: number;\n\n\t/**\n\t * Capture and map HTTP headers to custom telemetry attributes\n\t * Provides fine-grained control over header extraction and attribute naming\n\t *\n\t * Use presets for common scenarios or define custom mappings for any header\n\t *\n\t * @example\n\t * ```ts\n\t * import { RerouteHeaders, CloudflareHeaders } from 'reroute-js/telemetry/server';\n\t *\n\t * capture: [\n\t * ...RerouteHeaders.http(), // user-agent, referer, accept-language, etc.\n\t * ...CloudflareHeaders.geo(), // Cloudflare geolocation (IP, country, city, etc.)\n\t * { header: 'x-custom', as: 'custom.value' }, // Custom mapping\n\t * ]\n\t * ```\n\t */\n\tcapture?: Array<{ header: string; as: string }>;\n\n\t/**\n\t * Custom attributes to add to all spans and logs\n\t * Useful for tagging telemetry with environment, region, version, etc.\n\t *\n\t * @example\n\t * ```ts\n\t * customAttributes: {\n\t * environment: 'production',\n\t * region: 'us-east-1',\n\t * version: '1.2.3',\n\t * }\n\t * ```\n\t */\n\tcustomAttributes?: Record<string, string | number | boolean>;\n\n\t/**\n\t * Source map configuration for production error tracking\n\t * When enabled, error stack traces are mapped to original source files\n\t * instead of compiled/minified code\n\t *\n\t * @example\n\t * ```ts\n\t * sourcemaps: {\n\t * enabled: true, // Enable sourcemap resolution\n\t * }\n\t * ```\n\t */\n\tsourcemaps?: {\n\t\t/**\n\t\t * Enable sourcemap resolution\n\t\t * @default true in production, false in development\n\t\t */\n\t\tenabled?: boolean;\n\t};\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/** Enable or disable this redirect rule (default: true) */\n\tenabled?: boolean;\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 AppOptions {\n\t// App component - must be string path in config (not ReactElement)\n\tsrc?: string;\n\n\t// Base URL for the application (e.g., 'https://example.com')\n\t// Used for canonical URLs, social meta tags, and other absolute URLs\n\tbaseUrl?: string;\n\n\t// SSR options\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\n\t// SEO options\n\t/** Enable automatic canonical URL generation (default: true when baseUrl is set) */\n\tautoCanonical?: 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// Cache-Control directive\n\tdirective?: string;\n\n\t// Debug mode - enables detailed performance logging\n\tdebug?: boolean;\n\n\t// Cache configuration (applies to SSR, data endpoints, etc.)\n\tmaxAge?: number;\n\n\t// Bundle caching options\n\tbundleMaxAge?: number;\n}\n\ninterface RerouteConfig {\n\tapp?: AppOptions;\n\tstatic?: StaticOptions;\n\tstreaming?: StreamingOptions;\n\tredirects?: RedirectRule[];\n\timage?: ImageOptions;\n\tog?: OGOptions;\n\togImage?: OGImageOptions;\n\tsitemap?: SitemapOptions;\n\trss?: RSSOptions;\n\tmarkdown?: MarkdownOptions;\n\tsearch?: SearchOptions;\n\tllms?: LLMsOptions;\n\trobots?: RobotsOptions;\n\ttelemetry?: TelemetryOptions;\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 AppOptions,\n\ttype ImageOptions,\n\ttype LLMsOptions,\n\ttype MarkdownOptions,\n\ttype OGOptions,\n\ttype OGImageOptions,\n\ttype OGImageFont,\n\ttype RedirectRule,\n\ttype RerouteConfig,\n\ttype RobotsOptions,\n\ttype RobotsPolicy,\n\ttype RSSOptions,\n\ttype SearchOptions,\n\ttype SitemapOptions,\n\ttype StaticOptions,\n\ttype StreamingOptions,\n\ttype TelemetryOptions,\n\ttype TelemetryProxyOptions,\n\ttype BrowserTelemetryOptions,\n};\n",
|
|
7
7
|
"export function join(...parts: string[]): string {\n\treturn parts.join('/').replace(/\\/+/g, '/');\n}\n\nexport function extname(p: string): string {\n\tconst i = p.lastIndexOf('.');\n\treturn i >= 0 ? p.slice(i) : '';\n}\n\nexport function basename(p: string, ext?: string): string {\n\tconst name = p.replace(/\\\\/g, '/').split('/').pop() || p;\n\treturn ext && name.endsWith(ext) ? name.slice(0, -ext.length) : name;\n}\n\nexport function stripStart(p: string, ch: string): string {\n\treturn p.startsWith(ch) ? p.slice(ch.length) : p;\n}\n\nexport function stripEnd(p: string, ch: string): string {\n\treturn p.endsWith(ch) ? p.slice(0, -ch.length) : p;\n}\n",
|
|
8
8
|
"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 collections = new Set<string>();\n\n\t// First, check for bundled collections in .reroute/collections/ (production)\n\t// clientDir in production is .reroute, so check for collections/*.js\n\tconst bundledCollectionsDir = join(clientDir, 'collections');\n\ttry {\n\t\tconst bundledEntries = await readdir(bundledCollectionsDir, {\n\t\t\twithFileTypes: true,\n\t\t});\n\t\tfor (const entry of bundledEntries) {\n\t\t\tif (entry.isFile() && entry.name.endsWith('.js')) {\n\t\t\t\t// Extract collection name from filename (e.g., blog.js -> blog)\n\t\t\t\tconst collectionName = entry.name.replace(/\\.js$/, '');\n\t\t\t\tcollections.add(collectionName);\n\t\t\t}\n\t\t}\n\t\t// If we found bundled collections, return them\n\t\tif (collections.size > 0) {\n\t\t\treturn Array.from(collections);\n\t\t}\n\t} catch {\n\t\t// .reroute/collections doesn't exist, continue to dev mode discovery\n\t}\n\n\t// Fallback: scan routes/*/content for dev mode\n\tconst root = join(clientDir, 'routes');\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",
|
|
9
|
-
"import { stat } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport type { ContentMeta, Doc } from '../ssr/lib/types';\n\nexport async function getContentMeta(\n\tabsPath: string,\n\tisWatchMode: boolean,\n): Promise<ContentMeta> {\n\ttry {\n\t\tconst url = pathToFileURL(absPath).href;\n\t\tconst mod = await import(`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`);\n\t\tconst meta: unknown = (mod as Doc).meta || {};\n\t\tif (meta && typeof meta === 'object') return meta as ContentMeta;\n\t\treturn {};\n\t} catch {\n\t\ttry {\n\t\t\tconst s = await stat(absPath);\n\t\t\treturn { date: new Date(s.mtimeMs).toISOString() };\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n}\n\n/**\n * Build a minimal <head> snippet from content metadata.\n * - <title>\n * - <meta name=\"description\">\n */\nexport function buildHeadFromMeta(\n\tmeta: ContentMeta | undefined | null,\n): string {\n\tif (!meta || typeof meta !== 'object') return '';\n\tconst parts: string[] = [];\n\tconst title = typeof meta.title === 'string' ? meta.title : undefined;\n\tconst description =\n\t\ttypeof meta.description === 'string'\n\t\t\t? meta.description\n\t\t\t: typeof meta.excerpt === 'string'\n\t\t\t\t? meta.excerpt\n\t\t\t\t: undefined;\n\tif (title) parts.push(`<title>${escapeHtml(title)}</title>`);\n\tif (description)\n\t\tparts.push(\n\t\t\t`<meta name=\"description\" content=\"${escapeHtml(description)}\" />`,\n\t\t);\n\treturn parts.length ? `\\n${parts.join('\\n')}` : '';\n}\n\nfunction escapeHtml(input: string): string {\n\treturn input\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",
|
|
9
|
+
"import { stat } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport type { OGOptions } from '../config';\nimport type { ContentMeta, Doc } from '../ssr/lib/types';\n\nexport async function getContentMeta(\n\tabsPath: string,\n\tisWatchMode: boolean,\n): Promise<ContentMeta> {\n\ttry {\n\t\tconst url = pathToFileURL(absPath).href;\n\t\tconst mod = await import(`${url}${isWatchMode ? `?t=${Date.now()}` : ''}`);\n\t\tconst meta: unknown = (mod as Doc).meta || {};\n\t\tif (meta && typeof meta === 'object') return meta as ContentMeta;\n\t\treturn {};\n\t} catch {\n\t\ttry {\n\t\t\tconst s = await stat(absPath);\n\t\t\treturn { date: new Date(s.mtimeMs).toISOString() };\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n}\n\n/**\n * Build a minimal <head> snippet from content metadata.\n * Generates:\n * - <title>\n * - <meta name=\"description\">\n * - Required Open Graph tags: og:title, og:type, og:description\n * - Twitter/X card tags: twitter:card, twitter:title, twitter:description\n * Note: og:url, og:image, and twitter:image are generated separately in metadata.ts and og/meta.ts\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: building head from meta is complex\nexport function buildHeadFromMeta(\n\tmeta: ContentMeta | undefined | null,\n\togConfig?: OGOptions,\n): string {\n\tif (!meta || typeof meta !== 'object') return '';\n\tconst parts: string[] = [];\n\tconst title = typeof meta.title === 'string' ? meta.title : undefined;\n\tconst description =\n\t\ttypeof meta.description === 'string'\n\t\t\t? meta.description\n\t\t\t: typeof meta.excerpt === 'string'\n\t\t\t\t? meta.excerpt\n\t\t\t\t: undefined;\n\n\t// Standard HTML tags\n\tif (title) parts.push(`<title>${escapeHtml(title)}</title>`);\n\tif (description)\n\t\tparts.push(\n\t\t\t`<meta name=\"description\" content=\"${escapeHtml(description)}\" />`,\n\t\t);\n\n\t// Required Open Graph tags (og:url and og:image are handled separately)\n\t// og:type defaults from config or \"website\" for most pages, can be overridden via meta.ogType or ssr.head\n\tconst ogType =\n\t\ttypeof meta.ogType === 'string'\n\t\t\t? meta.ogType\n\t\t\t: ogConfig?.defaultType || 'website';\n\tparts.push(`<meta property=\"og:type\" content=\"${escapeHtml(ogType)}\" />`);\n\n\tif (title) {\n\t\tparts.push(`<meta property=\"og:title\" content=\"${escapeHtml(title)}\" />`);\n\t}\n\n\t// Use siteDescription from config as fallback if no page description\n\tconst finalDescription = description || ogConfig?.siteDescription;\n\tif (finalDescription) {\n\t\tparts.push(\n\t\t\t`<meta property=\"og:description\" content=\"${escapeHtml(finalDescription)}\" />`,\n\t\t);\n\t}\n\n\t// Twitter/X card tags (mirror OG tags for consistency)\n\t// Generate twitter:card with config value or sensible default\n\tconst twitterCard = ogConfig?.twitterCard || 'summary_large_image';\n\tparts.push(`<meta name=\"twitter:card\" content=\"${twitterCard}\" />`);\n\n\tif (title) {\n\t\tparts.push(`<meta name=\"twitter:title\" content=\"${escapeHtml(title)}\" />`);\n\t}\n\n\tif (finalDescription) {\n\t\tparts.push(\n\t\t\t`<meta name=\"twitter:description\" content=\"${escapeHtml(finalDescription)}\" />`,\n\t\t);\n\t}\n\n\treturn parts.length ? `\\n${parts.join('\\n')}` : '';\n}\n\nfunction escapeHtml(input: string): string {\n\treturn input\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",
|
|
10
10
|
"export * from './discovery';\nexport * from './metadata';\n",
|
|
11
11
|
"import { AsyncLocalStorage } from 'node:async_hooks';\n\n/**\n * Context attributes storage using AsyncLocalStorage for request-scoped context\n * This ensures concurrent requests don't mix context data\n */\nconst contextStorage = new AsyncLocalStorage<Record<string, string>>();\n\n/**\n * Set context attributes that will be automatically attached to all telemetry\n *\n * All attributes are prefixed with 'context.' when attached to spans/logs.\n *\n * **Privacy-first:** You control what data to track. No assumptions about PII.\n *\n * @example\n * ```typescript\n * // In your auth middleware\n * setContext({\n * 'user_id': user.id,\n * 'plan': user.subscription,\n * 'region': user.region,\n * });\n *\n * // Later, when an error happens, telemetry will include:\n * // context.user_id, context.plan, context.region\n * ```\n *\n * @param attributes - Key-value pairs to attach to telemetry (values must be strings)\n */\nexport function setContext(attributes: Record<string, string>): void {\n\tconst current = contextStorage.getStore() || {};\n\tconst updated = { ...current, ...attributes };\n\n\t// Store the updated attributes in the current async context\n\t// Note: This only works within an async context (e.g., inside a request handler)\n\t// For server-wide context (rare), use a global Map with request IDs instead\n\ttry {\n\t\t// If we're already in an async context, merge\n\t\tif (contextStorage.getStore()) {\n\t\t\t// AsyncLocalStorage doesn't have a way to update in place\n\t\t\t// So we need to be called from within the context that was created\n\t\t\t// This is typically fine since it's called from request handlers\n\t\t}\n\t} catch {\n\t\t// Not in async context - will be set when request starts\n\t}\n\n\t// Store globally as fallback for non-async contexts\n\tglobalContextAttributes = updated;\n}\n\n/**\n * Clear all context attributes\n *\n * Call this when a user logs out or when you want to reset context\n *\n * @example\n * ```typescript\n * app.post('/logout', async () => {\n * clearContext();\n * // ... logout logic\n * });\n * ```\n */\nexport function clearContext(): void {\n\tglobalContextAttributes = {};\n}\n\n/**\n * Get current context attributes\n * Returns attributes from async context if available, otherwise from global fallback\n *\n * @internal\n */\nexport function getContextAttr(): Record<string, string> {\n\treturn contextStorage.getStore() || globalContextAttributes || {};\n}\n\n// Global fallback for non-async contexts\nlet globalContextAttributes: Record<string, string> = {};\n\n/**\n * Get context attributes formatted for OpenTelemetry spans/logs\n * Prefixes all keys with 'context.'\n *\n * @internal\n */\nexport function getContextAttributesForTelemetry(): Record<string, string> {\n\tconst attrs = getContextAttr();\n\tconst prefixed: Record<string, string> = {};\n\n\tfor (const [key, value] of Object.entries(attrs)) {\n\t\tprefixed[`context.${key}`] = value;\n\t}\n\n\treturn prefixed;\n}\n",
|
|
12
12
|
"export * from './extractor';\nexport * from './presets';\n",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"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",
|
|
29
29
|
"import { importContentModuleForPath } from './modules';\nimport type { Doc } from './types';\n\n/**\n * Seed SSR module store for a content path.\n * Makes the content module available for server-side rendering.\n */\nexport async function seedSSRModuleForPath(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<void> {\n\ttry {\n\t\tconst pathOnly = pathname.split('?')[0].split('#')[0];\n\t\tconst parts = pathOnly.split('/').filter(Boolean);\n\n\t\tif (parts.length < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst collection = parts[0];\n\t\tconst name = parts[1];\n\t\tconst key = `${collection}:${name}`;\n\n\t\tconst mod = await importContentModuleForPath(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\n\t\tif (!mod) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Store full module for hooks like useToc\n\t\t(globalThis as Doc).__REROUTE_SSR_MODULES__ =\n\t\t\t(globalThis as Doc).__REROUTE_SSR_MODULES__ || {};\n\t\t(globalThis as Doc).__REROUTE_SSR_MODULES__[key] = mod;\n\n\t\t// Capture exports for head injection\n\t\ttry {\n\t\t\t(globalThis as Doc).__REROUTE_SSR_EXPORTS__ =\n\t\t\t\t(globalThis as Doc).__REROUTE_SSR_EXPORTS__ || {};\n\t\t\t(globalThis as Doc).__REROUTE_SSR_EXPORTS__[key] = {\n\t\t\t\tmeta: (mod as Doc).meta || {},\n\t\t\t\tssr: (mod as Doc).ssr || {},\n\t\t\t\ttoc: (mod as Doc).toc || [],\n\t\t\t};\n\t\t} catch {\n\t\t\t// Ignore export capture errors\n\t\t}\n\t} catch {\n\t\t// Ignore seeding errors\n\t}\n}\n",
|
|
30
30
|
"import { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport { seedSSRModuleForPath } from './seed';\nimport type { ComputeParams, Doc, SSR } from './types';\n\n/**\n * Match a route pattern against a pathname\n * Used in compiled binary mode when matchRoute isn't available\n */\nfunction matchPattern(\n\tpattern: string,\n\tpathname: string,\n): Record<string, string> | null {\n\tconst patternParts = pattern.split('/').filter(Boolean);\n\tconst pathnameParts = pathname.split('/').filter(Boolean);\n\n\tif (patternParts.length !== pathnameParts.length) {\n\t\treturn null;\n\t}\n\n\tconst params: Record<string, string> = {};\n\n\tfor (let i = 0; i < patternParts.length; i++) {\n\t\tconst patternPart = patternParts[i];\n\t\tconst pathnamePart = pathnameParts[i];\n\n\t\tif (patternPart.startsWith(':')) {\n\t\t\tparams[patternPart.slice(1)] = pathnamePart;\n\t\t} else if (patternPart !== pathnamePart) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn params;\n}\n\n/**\n * Compute SSR data for client-side navigation.\n * Returns lazy markers for promises to support progressive loading.\n */\nfunction loadContentData(\n\tpathname: string,\n\tsearchParams?: URLSearchParams,\n): { key: string; data: unknown } | null {\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return null;\n\n\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\tconst g = globalThis as Doc;\n\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key];\n\t\tconst dataFn = (exp as Doc)?.ssr?.data as SSR['data'] | undefined;\n\n\t\tif (typeof dataFn === 'function') {\n\t\t\tconst rawResult = dataFn({\n\t\t\t\tpathname,\n\t\t\t\tparams: { name: parts[1] },\n\t\t\t\tsearchParams,\n\t\t\t\t// Note: headers are not available in client-side navigation\n\t\t\t});\n\n\t\t\tconst result = processDataResult(rawResult, pathname, pathname);\n\t\t\treturn { key: pathname, data: result };\n\t\t}\n\t} catch {\n\t\t// Content data unavailable\n\t}\n\n\treturn null;\n}\n\nfunction loadMatchedRouteData(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<{ key: string; data: unknown } | null> {\n\treturn loadRouteDataInternal(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tsearchParams,\n\t);\n}\n\nasync function loadRouteDataInternal(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<{ key: string; data: unknown } | null> {\n\ttry {\n\t\t// Check for bundled routes first (compiled binary support)\n\t\tlet routes = (globalThis as Record<string, unknown>).__REROUTE_ROUTES__ as\n\t\t\t| Doc[]\n\t\t\t| undefined;\n\t\tlet matchRouteFn: ((pathname: string) => Doc | null) | undefined;\n\n\t\t// Fallback to dynamic import (dev mode)\n\t\tif (!routes) {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst m = await dynamicImport(routesPath, isWatchMode);\n\t\t\troutes = m?.routes as Doc[] | undefined;\n\t\t\tmatchRouteFn = (m as Doc)?.matchRoute as\n\t\t\t\t| ((pathname: string) => Doc | null)\n\t\t\t\t| undefined;\n\t\t} else {\n\t\t\t// In bundled mode, we need to match manually\n\t\t\tmatchRouteFn = (pathname: string) => {\n\t\t\t\tfor (const route of routes || []) {\n\t\t\t\t\tconst pattern = String(route?.pattern || '');\n\t\t\t\t\tconst match = matchPattern(pattern, pathname);\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\treturn { route, params: match };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\t}\n\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match =\n\t\t\ttypeof matchRouteFn === 'function' ? matchRouteFn(pathnameOnly) : null;\n\n\t\tconst r = (match as Doc | null)?.route;\n\t\tconst paramsValue = ((match as Doc | null)?.params || {}) as Record<\n\t\t\tstring,\n\t\t\tstring\n\t\t>;\n\n\t\tif (r && typeof (r as Doc).path === 'string') {\n\t\t\t// Try to use bundled ssr export first (compiled binary)\n\t\t\tlet ssrExport = (r as Doc)?.ssr as Doc | undefined;\n\n\t\t\t// Fallback to dynamic import if not bundled (dev mode)\n\t\t\tif (!ssrExport) {\n\t\t\t\t// In dev mode, routes might be from .reroute/routes.ts which imports from streaming wrappers\n\t\t\t\t// The streaming wrapper re-exports ssr, so we should try loading from there first\n\t\t\t\tconst routePath = String((r as Doc).path);\n\t\t\t\tlet abs = join(cwd, '.reroute', 'streaming', routePath);\n\n\t\t\t\tlet mod = await dynamicImport(abs, isWatchMode).catch(() => null);\n\n\t\t\t\t// If streaming wrapper doesn't exist or fails, load from source\n\t\t\t\tif (!mod) {\n\t\t\t\t\tabs = join(clientDir, 'routes', routePath);\n\t\t\t\t\tmod = await dynamicImport(abs, isWatchMode);\n\t\t\t\t}\n\n\t\t\t\tssrExport = (mod as Doc)?.ssr as SSR | undefined;\n\t\t\t}\n\n\t\t\tconst dataFn = ssrExport?.data;\n\n\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\tconst rawResult = dataFn({\n\t\t\t\t\tpathname,\n\t\t\t\t\tparams: paramsValue,\n\t\t\t\t\tsearchParams,\n\t\t\t\t\t// Note: headers are not available in client-side navigation\n\t\t\t\t});\n\n\t\t\t\tconst data = processDataResult(rawResult, pathname, pathname);\n\t\t\t\treturn { key: pathname, data };\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Route data unavailable\n\t}\n\n\treturn null;\n}\n\nfunction determineReturnStructure(allData: Record<string, unknown>): unknown {\n\tconst dataKeys = Object.keys(allData);\n\n\tif (dataKeys.length > 1) {\n\t\treturn { __reroute_multiple__: true, ...allData };\n\t}\n\n\tif (dataKeys.length === 1) {\n\t\tconst singleKey = dataKeys[0];\n\t\t// Keep layout key structure for proper client-side handling\n\t\tif (singleKey.startsWith('__layout:')) {\n\t\t\treturn allData;\n\t\t}\n\t\treturn allData[singleKey];\n\t}\n\n\treturn null;\n}\n\nexport async function computeSSRDataForPath(\n\tparams: ComputeParams,\n): Promise<unknown> {\n\tconst { pathname, clientDir, cwd, isWatchMode, searchParams } = params;\n\n\t// Seed content modules for potential content pages\n\ttry {\n\t\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\n\t} catch {\n\t\t// Continue without seeding\n\t}\n\n\t// 1) Layout data\n\tconst allData = await loadLayoutData(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tsearchParams,\n\t);\n\n\t// 2) Content-level data\n\tconst contentResult = loadContentData(pathname, searchParams);\n\tif (contentResult) {\n\t\t// For content pages, return directly if it's the only data\n\t\tif (Object.keys(allData).length === 0) {\n\t\t\treturn contentResult.data;\n\t\t}\n\t\tallData[contentResult.key] = contentResult.data;\n\t}\n\n\t// 3) Route-level data\n\tconst routeResult = await loadMatchedRouteData(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tsearchParams,\n\t);\n\tif (routeResult) {\n\t\tallData[routeResult.key] = routeResult.data;\n\t}\n\n\treturn determineReturnStructure(allData);\n}\n\nfunction processLayoutDataResult(\n\trawResult: unknown,\n\tpathname: string,\n\tlayoutKey: string,\n): unknown {\n\tif (rawResult instanceof Promise) {\n\t\treturn createLazyMarker(pathname, layoutKey);\n\t}\n\n\tif (\n\t\ttypeof rawResult === 'object' &&\n\t\trawResult !== null &&\n\t\t!Array.isArray(rawResult)\n\t) {\n\t\tconst entries = Object.entries(rawResult as Record<string, unknown>);\n\t\tconst hasPromises = entries.some(([_, v]) => v instanceof Promise);\n\n\t\tif (hasPromises) {\n\t\t\tconst flattened: Record<string, unknown> = { __flatten__: true };\n\t\t\tfor (const [k, value] of entries) {\n\t\t\t\tif (value instanceof Promise) {\n\t\t\t\t\tflattened[k] = createLazyMarker(pathname, k);\n\t\t\t\t} else {\n\t\t\t\t\tflattened[k] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn flattened;\n\t\t}\n\t}\n\n\treturn rawResult;\n}\n\nasync function processLayout(\n\tlayout: Doc,\n\tpathname: string,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<{ key: string; data: unknown } | null> {\n\tif (typeof layout?.path !== 'string') return null;\n\n\ttry {\n\t\t// Try to use bundled ssr export first (compiled binary)\n\t\tlet ssrExport = (layout as Doc)?.ssr as SSR | undefined;\n\n\t\t// Fallback to dynamic import if not bundled (dev mode)\n\t\tif (!ssrExport) {\n\t\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\t\t\tssrExport = (mod as Doc)?.ssr as SSR | undefined;\n\t\t}\n\n\t\tconst dataFn = ssrExport?.data;\n\n\t\tif (typeof dataFn !== 'function') return null;\n\n\t\tconst pattern = String(layout.pattern || '/');\n\t\tconst layoutKey = `__layout:${pattern}`;\n\t\tconst rawResult = dataFn({\n\t\t\tpathname,\n\t\t\tparams: {},\n\t\t\tsearchParams,\n\t\t\t// Note: headers are not available in client-side navigation\n\t\t});\n\n\t\tconst processedData = processLayoutDataResult(\n\t\t\trawResult,\n\t\t\tpathname,\n\t\t\tlayoutKey,\n\t\t);\n\t\treturn { key: layoutKey, data: processedData };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function loadLayoutData(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tsearchParams?: URLSearchParams,\n): Promise<Record<string, unknown>> {\n\tconst allData: Record<string, unknown> = {};\n\n\ttry {\n\t\t// Check for bundled layouts first (compiled binary support)\n\t\tlet layouts = (globalThis as Record<string, unknown>).__REROUTE_LAYOUTS__ as\n\t\t\t| Doc[]\n\t\t\t| undefined;\n\n\t\t// Fallback to dynamic import (dev mode)\n\t\tif (!layouts) {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst m = await dynamicImport(routesPath, isWatchMode);\n\t\t\tlayouts = m?.layouts as Doc[] | undefined;\n\t\t}\n\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tconst result = await processLayout(\n\t\t\t\tlayout,\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tisWatchMode,\n\t\t\t\tsearchParams,\n\t\t\t);\n\n\t\t\tif (result) {\n\t\t\t\tallData[result.key] = result.data;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Routes unavailable\n\t}\n\n\treturn allData;\n}\n\nfunction processDataResult(\n\trawResult: unknown,\n\tpathname: string,\n\tkey: string,\n): unknown {\n\treturn processLayoutDataResult(rawResult, pathname, key);\n}\n\nfunction createLazyMarker(pathname: string, key: string): unknown {\n\treturn {\n\t\t__lazy__: true,\n\t\t__fetch__: `/__reroute_data?path=${encodeURIComponent(pathname)}&key=${encodeURIComponent(key)}`,\n\t};\n}\n",
|
|
31
|
-
"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 */\nfunction deduplicateTitles(headContent: string): string {\n\tconst titleMatches = [...headContent.matchAll(/<title[\\s\\S]*?<\\/title>/gi)];\n\tif (titleMatches.length <= 1) return headContent;\n\n\tlet result = headContent;\n\t// Remove all but the last title tag\n\tfor (let i = 0; i < titleMatches.length - 1; i++) {\n\t\tresult = result.replace(titleMatches[i][0], '');\n\t}\n\treturn result;\n}\n\nfunction deduplicateMetaByName(headContent: string): string {\n\tconst metaNameMatches = [\n\t\t...headContent.matchAll(/<meta\\s+name\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi),\n\t];\n\tconst seenNames = new Map<string, number[]>();\n\n\tfor (let i = 0; i < metaNameMatches.length; i++) {\n\t\tconst match = metaNameMatches[i];\n\t\tconst nameValue = match[1].toLowerCase(); // Case-insensitive\n\t\tif (!seenNames.has(nameValue)) {\n\t\t\tseenNames.set(nameValue, []);\n\t\t}\n\t\tseenNames.get(nameValue)?.push(i);\n\t}\n\n\tlet result = headContent;\n\t// Remove all but the last occurrence of each name\n\tfor (const indices of seenNames.values()) {\n\t\tif (indices.length > 1) {\n\t\t\tfor (let i = 0; i < indices.length - 1; i++) {\n\t\t\t\tresult = result.replace(metaNameMatches[indices[i]][0], '');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction deduplicateMetaByProperty(headContent: string): string {\n\tconst metaPropMatches = [\n\t\t...headContent.matchAll(/<meta\\s+property\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi),\n\t];\n\tconst seenProps = new Map<string, number[]>();\n\n\tfor (let i = 0; i < metaPropMatches.length; i++) {\n\t\tconst match = metaPropMatches[i];\n\t\tconst propValue = match[1].toLowerCase(); // Case-insensitive\n\t\tif (!seenProps.has(propValue)) {\n\t\t\tseenProps.set(propValue, []);\n\t\t}\n\t\tseenProps.get(propValue)?.push(i);\n\t}\n\n\tlet result = headContent;\n\t// Remove all but the last occurrence of each property\n\tfor (const indices of seenProps.values()) {\n\t\tif (indices.length > 1) {\n\t\t\tfor (let i = 0; i < indices.length - 1; i++) {\n\t\t\t\tresult = result.replace(metaPropMatches[indices[i]][0], '');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function deduplicateMetaTags(headContent: string): string {\n\ttry {\n\t\tlet result = headContent;\n\t\tresult = deduplicateTitles(result);\n\t\tresult = deduplicateMetaByName(result);\n\t\tresult = deduplicateMetaByProperty(result);\n\t\treturn result;\n\t} catch {\n\t\treturn headContent;\n\t}\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",
|
|
31
|
+
"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 */\nfunction deduplicateTitles(headContent: string): string {\n\tconst titleMatches = [...headContent.matchAll(/<title[\\s\\S]*?<\\/title>/gi)];\n\tif (titleMatches.length <= 1) return headContent;\n\n\tlet result = headContent;\n\t// Remove all but the last title tag\n\tfor (let i = 0; i < titleMatches.length - 1; i++) {\n\t\tresult = result.replace(titleMatches[i][0], '');\n\t}\n\treturn result;\n}\n\nfunction deduplicateMetaByName(headContent: string): string {\n\tconst metaNameMatches = [\n\t\t...headContent.matchAll(/<meta\\s+name\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi),\n\t];\n\tconst seenNames = new Map<string, number[]>();\n\n\tfor (let i = 0; i < metaNameMatches.length; i++) {\n\t\tconst match = metaNameMatches[i];\n\t\tconst nameValue = match[1].toLowerCase(); // Case-insensitive\n\t\tif (!seenNames.has(nameValue)) {\n\t\t\tseenNames.set(nameValue, []);\n\t\t}\n\t\tseenNames.get(nameValue)?.push(i);\n\t}\n\n\tlet result = headContent;\n\t// Remove all but the last occurrence of each name\n\tfor (const indices of seenNames.values()) {\n\t\tif (indices.length > 1) {\n\t\t\tfor (let i = 0; i < indices.length - 1; i++) {\n\t\t\t\tresult = result.replace(metaNameMatches[indices[i]][0], '');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction deduplicateMetaByProperty(headContent: string): string {\n\tconst metaPropMatches = [\n\t\t...headContent.matchAll(/<meta\\s+property\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi),\n\t];\n\tconst seenProps = new Map<string, number[]>();\n\n\tfor (let i = 0; i < metaPropMatches.length; i++) {\n\t\tconst match = metaPropMatches[i];\n\t\tconst propValue = match[1].toLowerCase(); // Case-insensitive\n\t\tif (!seenProps.has(propValue)) {\n\t\t\tseenProps.set(propValue, []);\n\t\t}\n\t\tseenProps.get(propValue)?.push(i);\n\t}\n\n\tlet result = headContent;\n\t// Remove all but the last occurrence of each property\n\tfor (const indices of seenProps.values()) {\n\t\tif (indices.length > 1) {\n\t\t\tfor (let i = 0; i < indices.length - 1; i++) {\n\t\t\t\tresult = result.replace(metaPropMatches[indices[i]][0], '');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function deduplicateMetaTags(headContent: string): string {\n\ttry {\n\t\tlet result = headContent;\n\t\tresult = deduplicateTitles(result);\n\t\tresult = deduplicateMetaByName(result);\n\t\tresult = deduplicateMetaByProperty(result);\n\t\treturn result;\n\t} catch {\n\t\treturn headContent;\n\t}\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 * Remove OG/Twitter meta tags from template that will be overridden by injected head\n * Only removes tags whose property/name values exist in the injected content\n */\nexport function removeOverriddenMetaTags(\n\ttemplateHtml: string,\n\tinjectedHead: string,\n): string {\n\tlet result = templateHtml;\n\n\ttry {\n\t\t// Find all og: property values being injected\n\t\tconst injectedOgProps = [\n\t\t\t...injectedHead.matchAll(\n\t\t\t\t/<meta\\s+property\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi,\n\t\t\t),\n\t\t].map((m) => m[1].toLowerCase());\n\n\t\t// Find all twitter/name meta values being injected\n\t\tconst injectedNameMetas = [\n\t\t\t...injectedHead.matchAll(/<meta\\s+name\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>/gi),\n\t\t].map((m) => m[1].toLowerCase());\n\n\t\t// Remove matching og: property tags from template\n\t\tfor (const prop of injectedOgProps) {\n\t\t\tconst escapedProp = prop.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`<meta\\\\s+property\\\\s*=\\\\s*['\"]${escapedProp}['\"][^>]*>`,\n\t\t\t\t'gi',\n\t\t\t);\n\t\t\tresult = result.replace(regex, '');\n\t\t}\n\n\t\t// Remove matching name meta tags from template (twitter:*, description, etc.)\n\t\tfor (const name of injectedNameMetas) {\n\t\t\tconst escapedName = name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`<meta\\\\s+name\\\\s*=\\\\s*['\"]${escapedName}['\"][^>]*>`,\n\t\t\t\t'gi',\n\t\t\t);\n\t\t\tresult = result.replace(regex, '');\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\n\t\t// Remove OG/Twitter meta tags from template that will be overridden\n\t\tcleanedTemplate = removeOverriddenMetaTags(cleanedTemplate, cleanedHead);\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",
|
|
32
32
|
"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",
|
|
33
|
-
"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:
|
|
34
|
-
"import type { OGImageOptions } from '../../config';\nimport { buildHeadFromMeta } from '../../content/metadata';\nimport { generateOGImageMetaTags } from '../../og/meta';\nimport { loadRoutesModule } from './compute';\nimport { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport type { Doc, MetadataResult, SSR, SSRHeadContext } from './types';\n\n/**\n * Generate canonical URL meta tag\n */\nfunction generateCanonicalUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for canonical URL\n\tconst cleanPathname = pathname.split('?')[0];\n\t// Canonical URLs should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst canonicalUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<link rel=\"canonical\" href=\"${canonicalUrl}\" />`;\n}\n\n/**\n * Generate og:url meta tag to match canonical URL\n */\nfunction generateOgUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for og:url\n\tconst cleanPathname = pathname.split('?')[0];\n\t// og:url should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst ogUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<meta property=\"og:url\" content=\"${ogUrl}\" />`;\n}\n\n/**\n * Extract per-page head and metadata from layouts, routes, and content modules\n */\nexport async function extractPageMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\togConfig?: OGImageOptions,\n\tbaseUrl?: string,\n\tautoCanonical?: boolean,\n\tssrData?: unknown,\n): Promise<MetadataResult> {\n\tlet perPageHead = '';\n\tlet pageLang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\t// 1. Extract layout metadata hierarchically\n\tawait extractLayoutMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tif (!pageLang) pageLang = lang;\n\t\t},\n\t);\n\n\t// 2. Canonical URL and og:url (auto-generated, should be overridable by custom tags)\n\t// Default to true if baseUrl is set, unless explicitly disabled\n\tconst shouldGenerateCanonical =\n\t\tautoCanonical !== false && baseUrl !== undefined;\n\tif (shouldGenerateCanonical) {\n\t\tconst canonicalTag = generateCanonicalUrl(baseUrl, pathname);\n\t\tconst ogUrlTag = generateOgUrl(baseUrl, pathname);\n\t\tperPageHead += `\\n${canonicalTag}`;\n\t\tperPageHead += `\\n${ogUrlTag}`;\n\t}\n\n\t// 3. OG Image meta tags (auto-generated, should be overridable by custom tags)\n\ttry {\n\t\tconst ogMetaTags = await generateOGImageMetaTags(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\togConfig,\n\t\t);\n\t\tif (ogMetaTags) {\n\t\t\tperPageHead += `\\n${ogMetaTags}`;\n\t\t}\n\t} catch (error) {\n\t\tconsole.warn('[reroute] Failed to generate OG image meta tags:', error);\n\t}\n\n\t// 4. Content page metadata (can override auto-generated tags)\n\textractContentMetadata(\n\t\tpathname,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tpageLang = lang;\n\t\t},\n\t);\n\n\t// 5. Route-level metadata (most specific, can override everything)\n\tconst routeResult = await extractRouteMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tstatusOverride,\n\t\tssrData,\n\t);\n\tperPageHead += routeResult.head;\n\tif (routeResult.lang) pageLang = routeResult.lang;\n\tstatusOverride = routeResult.statusOverride;\n\n\treturn { perPageHead, pageLang, statusOverride };\n}\n\nasync function processLayoutForMetadata(\n\tlayout: Doc,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): Promise<void> {\n\tif (typeof layout?.path !== 'string') return;\n\n\ttry {\n\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\n\t\tconst meta = (mod as Doc)?.meta;\n\t\tconst ssr = (mod as Doc)?.ssr as SSR | undefined;\n\n\t\tif (meta) addHead(buildHeadFromMeta(meta));\n\n\t\tif (ssr) {\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// Continue to next layout\n\t}\n}\n\nasync function extractLayoutMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): Promise<void> {\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst m = await dynamicImport(routesPath, isWatchMode);\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, m?.layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tawait processLayoutForMetadata(\n\t\t\t\tlayout,\n\t\t\t\tclientDir,\n\t\t\t\tisWatchMode,\n\t\t\t\taddHead,\n\t\t\t\tsetLang,\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n}\n\nfunction extractContentMetadata(\n\tpathname: string,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n): void {\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return;\n\n\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\tconst g = globalThis as Doc;\n\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t| { meta?: unknown; ssr?: SSR }\n\t\t\t| undefined;\n\n\t\tconst meta = (exp as Doc)?.meta;\n\t\tconst ssr = exp?.ssr;\n\n\t\taddHead(buildHeadFromMeta(meta));\n\n\t\tconst ssrHead = extractSSRHead(ssr);\n\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\tconst lang = extractSSRLang(ssr);\n\t\tif (lang) setLang(lang);\n\t} catch {\n\t\t// Content metadata unavailable\n\t}\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Route metadata extraction is complex\nasync function extractMatchedRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tm: Doc,\n\tisWatchMode: boolean,\n\tstatusOverride: number | undefined,\n\tssrData?: unknown,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tconst pathnameOnly = pathname.split('?')[0];\n\tconst match =\n\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\tconst r = match?.route as Doc | undefined;\n\n\tif (!r) {\n\t\treturn { head: '', statusOverride: statusOverride || 404 };\n\t}\n\n\tif (r && typeof r.path === 'string') {\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\n\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\tconst ssr = (mod as Doc)?.ssr as SSR | undefined;\n\n\t\t\tlet head = '';\n\t\t\tif (meta) head += buildHeadFromMeta(meta);\n\n\t\t\tif (ssr) {\n\t\t\t\t// Extract route-specific data from the full ssrData object\n\t\t\t\t// ssrData is keyed by pathname for routes\n\t\t\t\tconst routeData =\n\t\t\t\t\tssrData && typeof ssrData === 'object'\n\t\t\t\t\t\t? (ssrData as Record<string, unknown>)[pathname]\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst ssrHead = extractSSRHead(ssr, routeData);\n\t\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\t\t\t\treturn { head, lang: extractSSRLang(ssr), statusOverride };\n\t\t\t}\n\n\t\t\treturn { head, statusOverride };\n\t\t} catch {\n\t\t\t// Route module unavailable\n\t\t}\n\t}\n\n\treturn { head: '', statusOverride };\n}\n\nasync function extractRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\tssrData?: unknown,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tlet head = '';\n\tlet lang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\ttry {\n\t\tconst m = await loadRoutesModule(cwd, isWatchMode);\n\t\tif (!m) {\n\t\t\treturn { head, lang, statusOverride: statusOverride || 404 };\n\t\t}\n\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match =\n\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\t\tconst r = match?.route as Doc | undefined;\n\n\t\tif (!r) {\n\t\t\tstatusOverride = statusOverride || 404;\n\t\t}\n\n\t\tif (r && typeof r.path === 'string') {\n\t\t\tconst result = await extractMatchedRouteMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\tstatusOverride,\n\t\t\t\tssrData,\n\t\t\t);\n\n\t\t\thead = result.head;\n\t\t\tlang = result.lang;\n\t\t\tstatusOverride = result.statusOverride;\n\t\t} else {\n\t\t\t// Try notFound route metadata only when no route matched\n\t\t\thead += await extractNotFoundMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\t(l) => {\n\t\t\t\t\tlang = l;\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n\n\treturn { head, lang, statusOverride };\n}\n\nfunction findBestNotFoundRoute(list: Doc[], pathname: string): Doc | undefined {\n\tlet chosen: Doc | undefined;\n\tlet bestLen = -1;\n\n\tfor (const nf of list) {\n\t\tconst pat = String((nf as Doc)?.pattern || '/');\n\t\tif (!pathname.startsWith(pat)) continue;\n\n\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\tif (len >= bestLen) {\n\t\t\tbestLen = len;\n\t\t\tchosen = nf;\n\t\t}\n\t}\n\n\treturn chosen;\n}\n\nasync function extractNotFoundMetadata(\n\tpathname: string,\n\tclientDir: string,\n\troutesModule: Doc,\n\tisWatchMode: boolean,\n\tsetLang: (lang: string) => void,\n): Promise<string> {\n\tlet head = '';\n\n\ttry {\n\t\tconst list = routesModule?.notFoundRoutes as Doc[] | undefined;\n\t\tif (!Array.isArray(list)) return head;\n\n\t\tconst chosen = findBestNotFoundRoute(list, pathname);\n\n\t\tif (chosen && typeof (chosen as Doc).path === 'string') {\n\t\t\tconst abs = join(clientDir, 'routes', String((chosen as Doc).path));\n\t\t\tconst mod = await dynamicImport(abs, isWatchMode);\n\n\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\tconst ssr = (mod as Doc)?.ssr as SSR | undefined;\n\n\t\t\tif (meta) head += buildHeadFromMeta(meta);\n\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// NotFound metadata unavailable\n\t}\n\n\treturn head;\n}\n\nfunction extractSSRHead(ssr: SSR | undefined, data?: unknown): string {\n\tif (!ssr) return '';\n\n\t// Support function that receives data result\n\tif (typeof ssr.head === 'function') {\n\t\ttry {\n\t\t\tconst result = ssr.head({ data } satisfies SSRHeadContext);\n\t\t\tif (typeof result === 'string') return result;\n\t\t\tif (Array.isArray(result)) return String((result as string[]).join('\\n'));\n\t\t\treturn '';\n\t\t} catch (err) {\n\t\t\tconsole.error('[extractSSRHead] Error calling head function:', err);\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tif (typeof ssr.head === 'string') return ssr.head;\n\tif (Array.isArray(ssr.head)) return String(ssr.head.join('\\n'));\n\n\treturn '';\n}\n\nfunction extractSSRLang(ssr: SSR | undefined): string | undefined {\n\tif (!ssr) return undefined;\n\n\tif (typeof ssr.lang === 'string' && ssr.lang.trim()) {\n\t\treturn ssr.lang.trim();\n\t}\n\n\treturn undefined;\n}\n",
|
|
33
|
+
"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\t// Note: twitter:card is generated separately in global OG tags based on user config\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:image\" content=\"${ogImagePath}\" />`;\n}\n",
|
|
34
|
+
"import type { OGImageOptions, OGOptions } from '../../config';\nimport { buildHeadFromMeta } from '../../content/metadata';\nimport { generateOGImageMetaTags } from '../../og/meta';\nimport { loadRoutesModule } from './compute';\nimport { dynamicImport } from './imports';\nimport { getMatchingLayouts } from './layouts';\nimport { join } from './path';\nimport type { Doc, MetadataResult, SSR, SSRHeadContext } from './types';\n\n/**\n * Load meta and ssr exports from a route/layout module.\n * Uses bundled values first (for compiled binaries), falls back to dynamic import.\n */\nasync function loadModuleMetaAndSSR(\n\tmoduleObj: Doc | undefined,\n\tabsolutePath: string,\n\tisWatchMode: boolean,\n): Promise<{ meta?: Doc; ssr?: SSR }> {\n\t// Use bundled meta/ssr if available (compiled binary)\n\tconst bundledMeta = moduleObj?.meta as Doc | undefined;\n\tconst bundledSSR = moduleObj?.ssr as SSR | undefined;\n\n\tif (bundledMeta !== undefined || bundledSSR !== undefined) {\n\t\treturn { meta: bundledMeta, ssr: bundledSSR };\n\t}\n\n\t// Fallback to dynamic import (dev mode)\n\ttry {\n\t\tconst mod = await dynamicImport(absolutePath, isWatchMode);\n\t\treturn {\n\t\t\tmeta: (mod as Doc)?.meta as Doc | undefined,\n\t\t\tssr: (mod as Doc)?.ssr as SSR | undefined,\n\t\t};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\n/**\n * Generate canonical URL meta tag\n */\nfunction generateCanonicalUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for canonical URL\n\tconst cleanPathname = pathname.split('?')[0];\n\t// Canonical URLs should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst canonicalUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<link rel=\"canonical\" href=\"${canonicalUrl}\" />`;\n}\n\n/**\n * Generate og:url meta tag to match canonical URL\n */\nfunction generateOgUrl(baseUrl: string, pathname: string): string {\n\t// Remove trailing slash from baseUrl if present\n\tconst cleanBaseUrl = baseUrl.replace(/\\/$/, '');\n\t// Remove query parameters from pathname for og:url\n\tconst cleanPathname = pathname.split('?')[0];\n\t// og:url should not have trailing slashes (except for root)\n\tconst normalizedPath =\n\t\tcleanPathname === '/' ? '/' : cleanPathname.replace(/\\/$/, '');\n\tconst ogUrl = `${cleanBaseUrl}${normalizedPath}`;\n\treturn `<meta property=\"og:url\" content=\"${ogUrl}\" />`;\n}\n\n/**\n * Generate global OG tags from config (og:site_name, og:locale, twitter:site)\n */\nfunction generateGlobalOGTags(ogConfig: OGOptions): string {\n\tconst tags: string[] = [];\n\n\tif (ogConfig.siteName) {\n\t\ttags.push(\n\t\t\t`<meta property=\"og:site_name\" content=\"${escapeHtml(ogConfig.siteName)}\" />`,\n\t\t);\n\t}\n\n\tif (ogConfig.locale) {\n\t\ttags.push(\n\t\t\t`<meta property=\"og:locale\" content=\"${escapeHtml(ogConfig.locale)}\" />`,\n\t\t);\n\t}\n\n\tif (ogConfig.twitterSite) {\n\t\t// Normalize: ensure @ prefix for twitter:site\n\t\tconst handle = ogConfig.twitterSite.startsWith('@')\n\t\t\t? ogConfig.twitterSite\n\t\t\t: `@${ogConfig.twitterSite}`;\n\t\ttags.push(`<meta name=\"twitter:site\" content=\"${escapeHtml(handle)}\" />`);\n\t}\n\n\treturn tags.length ? tags.join('\\n') : '';\n}\n\nfunction escapeHtml(input: string): string {\n\treturn input\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\n/**\n * Extract per-page head and metadata from layouts, routes, and content modules\n */\nexport async function extractPageMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\togImageConfig?: OGImageOptions,\n\togConfig?: OGOptions,\n\tbaseUrl?: string,\n\tautoCanonical?: boolean,\n\tssrData?: unknown,\n): Promise<MetadataResult> {\n\tlet perPageHead = '';\n\tlet pageLang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\t// 1. Extract layout metadata hierarchically\n\tawait extractLayoutMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tif (!pageLang) pageLang = lang;\n\t\t},\n\t\togConfig,\n\t);\n\n\t// 2. Canonical URL and og:url (auto-generated, should be overridable by custom tags)\n\t// Default to true if baseUrl is set, unless explicitly disabled\n\tconst shouldGenerateCanonical =\n\t\tautoCanonical !== false && baseUrl !== undefined;\n\tif (shouldGenerateCanonical) {\n\t\tconst canonicalTag = generateCanonicalUrl(baseUrl, pathname);\n\t\tconst ogUrlTag = generateOgUrl(baseUrl, pathname);\n\t\tperPageHead += `\\n${canonicalTag}`;\n\t\tperPageHead += `\\n${ogUrlTag}`;\n\t}\n\n\t// 3. Global OG tags (og:site_name, og:locale, twitter:site)\n\tif (ogConfig) {\n\t\tconst ogGlobalTags = generateGlobalOGTags(ogConfig);\n\t\tif (ogGlobalTags) {\n\t\t\tperPageHead += `\\n${ogGlobalTags}`;\n\t\t}\n\t}\n\n\t// 4. OG Image meta tags (auto-generated, should be overridable by custom tags)\n\ttry {\n\t\tconst ogMetaTags = await generateOGImageMetaTags(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\togImageConfig,\n\t\t);\n\t\tif (ogMetaTags) {\n\t\t\tperPageHead += `\\n${ogMetaTags}`;\n\t\t}\n\t} catch (error) {\n\t\tconsole.warn('[reroute] Failed to generate OG image meta tags:', error);\n\t}\n\n\t// 5. Content page metadata (can override auto-generated tags)\n\textractContentMetadata(\n\t\tpathname,\n\t\t(head) => {\n\t\t\tperPageHead += head;\n\t\t},\n\t\t(lang) => {\n\t\t\tpageLang = lang;\n\t\t},\n\t\togConfig,\n\t);\n\n\t// 6. Route-level metadata (most specific, can override everything)\n\tconst routeResult = await extractRouteMetadata(\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tstatusOverride,\n\t\tssrData,\n\t\togConfig,\n\t);\n\tperPageHead += routeResult.head;\n\tif (routeResult.lang) pageLang = routeResult.lang;\n\tstatusOverride = routeResult.statusOverride;\n\n\treturn { perPageHead, pageLang, statusOverride };\n}\n\nasync function processLayoutForMetadata(\n\tlayout: Doc,\n\tclientDir: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n\togConfig?: OGOptions,\n): Promise<void> {\n\tif (typeof layout?.path !== 'string') return;\n\n\ttry {\n\t\tconst abs = join(clientDir, 'routes', String(layout.path));\n\t\tconst { meta, ssr } = await loadModuleMetaAndSSR(layout, abs, isWatchMode);\n\n\t\tif (meta) addHead(buildHeadFromMeta(meta, ogConfig));\n\n\t\tif (ssr) {\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// Continue to next layout\n\t}\n}\n\nasync function extractLayoutMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n\togConfig?: OGOptions,\n): Promise<void> {\n\ttry {\n\t\t// Use loadRoutesModule which handles bundled globals for compiled binaries\n\t\tconst m = await loadRoutesModule(cwd, isWatchMode);\n\t\tconst matchingLayouts = getMatchingLayouts(pathname, m?.layouts);\n\n\t\tfor (const layout of matchingLayouts) {\n\t\t\tawait processLayoutForMetadata(\n\t\t\t\tlayout,\n\t\t\t\tclientDir,\n\t\t\t\tisWatchMode,\n\t\t\t\taddHead,\n\t\t\t\tsetLang,\n\t\t\t\togConfig,\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n}\n\nfunction extractContentMetadata(\n\tpathname: string,\n\taddHead: (head: string) => void,\n\tsetLang: (lang: string) => void,\n\togConfig?: OGOptions,\n): void {\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return;\n\n\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\tconst g = globalThis as Doc;\n\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t| { meta?: unknown; ssr?: SSR }\n\t\t\t| undefined;\n\n\t\tconst meta = (exp as Doc)?.meta;\n\t\tconst ssr = exp?.ssr;\n\n\t\taddHead(buildHeadFromMeta(meta, ogConfig));\n\n\t\tconst ssrHead = extractSSRHead(ssr);\n\t\tif (ssrHead) addHead(`\\n${ssrHead}`);\n\n\t\tconst lang = extractSSRLang(ssr);\n\t\tif (lang) setLang(lang);\n\t} catch {\n\t\t// Content metadata unavailable\n\t}\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Route metadata extraction is complex\nasync function extractMatchedRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tm: Doc,\n\tisWatchMode: boolean,\n\tstatusOverride: number | undefined,\n\tssrData?: unknown,\n\togConfig?: OGOptions,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tconst pathnameOnly = pathname.split('?')[0];\n\tconst match =\n\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\tconst r = match?.route as Doc | undefined;\n\n\tif (!r) {\n\t\treturn { head: '', statusOverride: statusOverride || 404 };\n\t}\n\n\tif (r && typeof r.path === 'string') {\n\t\ttry {\n\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\tconst { meta, ssr } = await loadModuleMetaAndSSR(r, abs, isWatchMode);\n\n\t\t\tlet head = '';\n\t\t\tif (meta) head += buildHeadFromMeta(meta, ogConfig);\n\n\t\t\tif (ssr) {\n\t\t\t\t// Extract route-specific data from the full ssrData object\n\t\t\t\t// ssrData is keyed by pathname for routes\n\t\t\t\tconst routeData =\n\t\t\t\t\tssrData && typeof ssrData === 'object'\n\t\t\t\t\t\t? (ssrData as Record<string, unknown>)[pathname]\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst ssrHead = extractSSRHead(ssr, routeData);\n\t\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\t\t\t\treturn { head, lang: extractSSRLang(ssr), statusOverride };\n\t\t\t}\n\n\t\t\treturn { head, statusOverride };\n\t\t} catch {\n\t\t\t// Route module unavailable\n\t\t}\n\t}\n\n\treturn { head: '', statusOverride };\n}\n\nasync function extractRouteMetadata(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n\tcurrentStatusOverride?: number,\n\tssrData?: unknown,\n\togConfig?: OGOptions,\n): Promise<{ head: string; lang?: string; statusOverride?: number }> {\n\tlet head = '';\n\tlet lang: string | undefined;\n\tlet statusOverride = currentStatusOverride;\n\n\ttry {\n\t\tconst m = await loadRoutesModule(cwd, isWatchMode);\n\t\tif (!m) {\n\t\t\treturn { head, lang, statusOverride: statusOverride || 404 };\n\t\t}\n\n\t\tconst pathnameOnly = pathname.split('?')[0];\n\t\tconst match =\n\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathnameOnly) : null;\n\t\tconst r = match?.route as Doc | undefined;\n\n\t\tif (!r) {\n\t\t\tstatusOverride = statusOverride || 404;\n\t\t}\n\n\t\tif (r && typeof r.path === 'string') {\n\t\t\tconst result = await extractMatchedRouteMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\tstatusOverride,\n\t\t\t\tssrData,\n\t\t\t\togConfig,\n\t\t\t);\n\n\t\t\thead = result.head;\n\t\t\tlang = result.lang;\n\t\t\tstatusOverride = result.statusOverride;\n\t\t} else {\n\t\t\t// Try notFound route metadata only when no route matched\n\t\t\thead += await extractNotFoundMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tm,\n\t\t\t\tisWatchMode,\n\t\t\t\t(l) => {\n\t\t\t\t\tlang = l;\n\t\t\t\t},\n\t\t\t\togConfig,\n\t\t\t);\n\t\t}\n\t} catch {\n\t\t// Routes module unavailable\n\t}\n\n\treturn { head, lang, statusOverride };\n}\n\nfunction findBestNotFoundRoute(list: Doc[], pathname: string): Doc | undefined {\n\tlet chosen: Doc | undefined;\n\tlet bestLen = -1;\n\n\tfor (const nf of list) {\n\t\tconst pat = String((nf as Doc)?.pattern || '/');\n\t\tif (!pathname.startsWith(pat)) continue;\n\n\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\tif (len >= bestLen) {\n\t\t\tbestLen = len;\n\t\t\tchosen = nf;\n\t\t}\n\t}\n\n\treturn chosen;\n}\n\nasync function extractNotFoundMetadata(\n\tpathname: string,\n\tclientDir: string,\n\troutesModule: Doc,\n\tisWatchMode: boolean,\n\tsetLang: (lang: string) => void,\n\togConfig?: OGOptions,\n): Promise<string> {\n\tlet head = '';\n\n\ttry {\n\t\tconst list = routesModule?.notFoundRoutes as Doc[] | undefined;\n\t\tif (!Array.isArray(list)) return head;\n\n\t\tconst chosen = findBestNotFoundRoute(list, pathname);\n\n\t\tif (chosen && typeof (chosen as Doc).path === 'string') {\n\t\t\tconst abs = join(clientDir, 'routes', String((chosen as Doc).path));\n\t\t\tconst { meta, ssr } = await loadModuleMetaAndSSR(\n\t\t\t\tchosen,\n\t\t\t\tabs,\n\t\t\t\tisWatchMode,\n\t\t\t);\n\n\t\t\tif (meta) head += buildHeadFromMeta(meta, ogConfig);\n\n\t\t\tconst ssrHead = extractSSRHead(ssr);\n\t\t\tif (ssrHead) head += `\\n${ssrHead}`;\n\n\t\t\tconst lang = extractSSRLang(ssr);\n\t\t\tif (lang) setLang(lang);\n\t\t}\n\t} catch {\n\t\t// NotFound metadata unavailable\n\t}\n\n\treturn head;\n}\n\nfunction extractSSRHead(ssr: SSR | undefined, data?: unknown): string {\n\tif (!ssr) return '';\n\n\t// Support function that receives data result\n\tif (typeof ssr.head === 'function') {\n\t\ttry {\n\t\t\tconst result = ssr.head({ data } satisfies SSRHeadContext);\n\t\t\tif (typeof result === 'string') return result;\n\t\t\tif (Array.isArray(result)) return String((result as string[]).join('\\n'));\n\t\t\treturn '';\n\t\t} catch (err) {\n\t\t\tconsole.error('[extractSSRHead] Error calling head function:', err);\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tif (typeof ssr.head === 'string') return ssr.head;\n\tif (Array.isArray(ssr.head)) return String(ssr.head.join('\\n'));\n\n\treturn '';\n}\n\nfunction extractSSRLang(ssr: SSR | undefined): string | undefined {\n\tif (!ssr) return undefined;\n\n\tif (typeof ssr.lang === 'string' && ssr.lang.trim()) {\n\t\treturn ssr.lang.trim();\n\t}\n\n\treturn undefined;\n}\n",
|
|
35
35
|
"import { readdir, stat } from 'node:fs/promises';\nimport { dynamicImport } from './imports';\nimport { join } from './path';\nimport type { Doc, PreloadResult } from './types';\n\n/**\n * Handle content module preloading for content pages\n */\nexport async function preloadContentModule(\n\tpathname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<PreloadResult> {\n\tlet extraHead = '';\n\tlet hydrationScript = '';\n\tlet statusOverride: number | undefined;\n\n\ttry {\n\t\tconst pathOnly = pathname.split('?')[0].split('#')[0];\n\t\tconst parts = pathOnly.split('/').filter(Boolean);\n\n\t\tif (parts.length < 2) {\n\t\t\treturn { extraHead, hydrationScript };\n\t\t}\n\n\t\tconst collection = parts[0];\n\t\tconst name = parts[1];\n\n\t\t// Check if this is a content collection\n\t\tif (!(await isContentCollection(clientDir, collection))) {\n\t\t\treturn { extraHead, hydrationScript };\n\t\t}\n\n\t\t// Try to find module path\n\t\tconst modulePath = await findContentModulePath(\n\t\t\tcollection,\n\t\t\tname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\n\t\tif (!modulePath) {\n\t\t\tstatusOverride = 404;\n\t\t\treturn { extraHead, hydrationScript, statusOverride };\n\t\t}\n\n\t\tconst key = `${collection}:${name}`;\n\t\textraHead += `\\n<link rel=\"modulepreload\" href=\"${modulePath}\" />`;\n\n\t\t// Store the module path and key for the inline loader\n\t\t// The actual loading happens via a blocking mechanism in the data script\n\t\thydrationScript += `<script>\n// Mark that this content module needs to be preloaded\n(globalThis.__REROUTE_CONTENT_PRELOAD__ ||= []).push({src:'${modulePath}',key:'${key}'});\n</script>`;\n\t} catch {\n\t\t// Return empty result on error\n\t}\n\n\treturn { extraHead, hydrationScript, statusOverride };\n}\n\nasync function isContentCollection(\n\tclientDir: string,\n\tcollection: string,\n): Promise<boolean> {\n\ttry {\n\t\t// In production (clientDir = .reroute), check for collection files instead of source dirs\n\t\tconst isProduction = clientDir.endsWith('.reroute');\n\n\t\tif (isProduction) {\n\t\t\t// Check if collection file exists in .reroute/collections/\n\t\t\tconst collectionFile = join(clientDir, 'collections', `${collection}.js`);\n\t\t\ttry {\n\t\t\t\tconst s = await stat(collectionFile);\n\t\t\t\treturn s?.isFile() ?? false;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// In development, check for content directory\n\t\tconst maybeDir = join(clientDir, 'routes', collection, 'content');\n\t\tconst s = await stat(maybeDir);\n\t\treturn typeof s?.isDirectory === 'function' ? s.isDirectory() : true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function findLatestCandidate(\n\tchunkDir: string,\n\tcandidates: string[],\n): Promise<string> {\n\tlet latest = candidates[0];\n\tlet latestM = 0;\n\n\tfor (const candidateName of candidates) {\n\t\ttry {\n\t\t\tconst s = await stat(join(chunkDir, candidateName));\n\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\tlatest = candidateName;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip inaccessible files\n\t\t}\n\t}\n\n\treturn latest;\n}\n\nasync function findContentModulePath(\n\tcollection: string,\n\tname: string,\n\tclientDir: string,\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<string | null> {\n\t// 1. Try registry mapping\n\ttry {\n\t\tconst registryPath = join(cwd, '.reroute', 'content.ts');\n\t\tconst reg = await dynamicImport(registryPath, isWatchMode);\n\t\tconst get = reg?.getContentEntry as\n\t\t\t| ((c: string, n: string) => { module?: string } | undefined)\n\t\t\t| undefined;\n\t\tconst entry = typeof get === 'function' ? get(collection, name) : undefined;\n\t\tconst moduleUrl = (entry as Doc)?.module as string | undefined;\n\n\t\tif (moduleUrl?.endsWith('.js')) {\n\t\t\treturn moduleUrl;\n\t\t}\n\t} catch {\n\t\t// Registry unavailable\n\t}\n\n\t// 2. Try newest chunk\n\ttry {\n\t\tconst chunkDir = join(cwd, '.reroute', 'chunks', collection);\n\t\tconst files = await readdir(chunkDir);\n\t\tconst candidates = files.filter(\n\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t);\n\n\t\tif (candidates.length) {\n\t\t\tconst latest = await findLatestCandidate(chunkDir, candidates);\n\t\t\treturn `/${join('.reroute', 'chunks', collection, latest).replace(/\\\\+/g, '/')}`;\n\t\t}\n\t} catch {\n\t\t// Chunk directory unavailable\n\t}\n\n\t// 3. Try source files\n\ttry {\n\t\tconst tsx = join(clientDir, 'routes', collection, 'content', `${name}.tsx`);\n\t\tconst ts = join(clientDir, 'routes', collection, 'content', `${name}.ts`);\n\n\t\tif (await Bun.file(tsx).exists()) {\n\t\t\treturn `/${join('routes', collection, 'content', `${name}.tsx`).replace(/\\\\+/g, '/')}`;\n\t\t}\n\t\tif (await Bun.file(ts).exists()) {\n\t\t\treturn `/${join('routes', collection, 'content', `${name}.ts`).replace(/\\\\+/g, '/')}`;\n\t\t}\n\t} catch {\n\t\t// Source files unavailable\n\t}\n\n\treturn null;\n}\n\n/**\n * Reset SSR access tracking for a new request\n */\nexport function resetSSRAccessTracking(): void {\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_SSR_ACCESSED__ = {};\n\t} catch {\n\t\t// Ignore errors in restricted environments\n\t}\n}\n\n/**\n * Create bundle preload link\n */\nexport function createBundlePreload(bundleUrl: string): string {\n\ttry {\n\t\tif (typeof bundleUrl === 'string' && bundleUrl.endsWith('.js')) {\n\t\t\treturn `\\n<link rel=\"modulepreload\" href=\"${bundleUrl}\" />`;\n\t\t}\n\t} catch {\n\t\t// Return empty on error\n\t}\n\treturn '';\n}\n",
|
|
36
36
|
"/**\n * Escape JSON for safe embedding in HTML script tags.\n * Prevents XSS by encoding characters that could break out of script context.\n */\nexport function escapeJsonForScript(json: string): string {\n\treturn json\n\t\t.replace(/</g, '\\\\u003c')\n\t\t.replace(/>/g, '\\\\u003e')\n\t\t.replace(/&/g, '\\\\u0026');\n}\n",
|
|
37
37
|
"import type { Doc } from '../types';\nimport { escapeJsonForScript } from './escape';\n\n/**\n * Create inline script for collection data hydration\n */\nexport function createCollectionScript(\n\tsubset: Record<string, unknown[]>,\n\tpartial: Record<string, boolean>,\n): string {\n\tconst subsetJson = escapeJsonForScript(JSON.stringify(subset));\n\tconst partialJson = escapeJsonForScript(JSON.stringify(partial));\n\treturn `<script>(function(){try{var w=(typeof window!=='undefined'?window:globalThis);w.__REROUTE_COLLECTIONS__=w.__REROUTE_COLLECTIONS__||{};Object.assign(w.__REROUTE_COLLECTIONS__,${subsetJson});w.__REROUTE_COLLECTIONS_PARTIAL__=w.__REROUTE_COLLECTIONS_PARTIAL__||{};Object.assign(w.__REROUTE_COLLECTIONS_PARTIAL__,${partialJson});}catch(e){}})();</script>`;\n}\n\n/**\n * Pick specified fields from an item, preserving nested structure.\n * Always includes mandatory fields for structural integrity.\n */\nfunction pickFieldValue(src: Doc, parts: string[], dst: Doc): void {\n\tlet currentSrc = src;\n\tlet currentDst = dst;\n\n\tfor (let i = 0; i < parts.length - 1; i++) {\n\t\tconst key = parts[i];\n\t\tcurrentSrc = currentSrc?.[key];\n\t\tif (currentSrc === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tif (!currentDst[key]) currentDst[key] = {};\n\t\tcurrentDst = currentDst[key] as Doc;\n\t}\n\n\tconst lastKey = parts[parts.length - 1];\n\tif (currentSrc && currentSrc[lastKey] !== undefined) {\n\t\tcurrentDst[lastKey] = currentSrc[lastKey];\n\t}\n}\n\nfunction pickFields(item: Doc, fields: Set<string>): Doc {\n\tconst result: Doc = {};\n\tconst mandatory = ['collection', 'name', 'slug', 'href', 'module'];\n\n\tfor (const field of mandatory) {\n\t\tif (item[field] !== undefined) {\n\t\t\tresult[field] = item[field];\n\t\t}\n\t}\n\n\tfor (const field of fields) {\n\t\tconst parts = field.split('.');\n\t\tpickFieldValue(item, parts, result);\n\t}\n\n\treturn result;\n}\n\n/**\n * Process collections based on SSR access tracking.\n * Returns a subset of collections that were actually accessed during render.\n *\n * When slugs are tracked (from filter: { slug: 'foo' }), those items are ALWAYS\n * included in the result, even if they fall outside the limit. This ensures\n * SSR and client hydration stay in sync when using filtered queries with limits.\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Access tracking parsing requires analyzing nested object structures\nfunction applySortingAndLimit(\n\tfull: unknown[],\n\tconf: { limit: number; sort: string; slugs?: Set<string> },\n\tsortByDate: (order: 'asc' | 'desc') => (a: Doc, b: Doc) => number,\n): unknown[] {\n\tif (\n\t\t!Number.isFinite(conf.limit) ||\n\t\tconf.limit <= 0 ||\n\t\tconf.sort === 'custom'\n\t) {\n\t\treturn full;\n\t}\n\n\t// If we have tracked slugs, ensure they're always included\n\tconst trackedSlugs = conf.slugs || new Set<string>();\n\tconst hasTrackedSlugs = trackedSlugs.size > 0;\n\n\tif (hasTrackedSlugs) {\n\t\t// Separate items into tracked and non-tracked\n\t\tconst tracked: unknown[] = [];\n\t\tconst nonTracked: unknown[] = [];\n\n\t\tfor (const item of full) {\n\t\t\tconst doc = item as Doc;\n\t\t\tif (doc.slug && trackedSlugs.has(doc.slug)) {\n\t\t\t\ttracked.push(item);\n\t\t\t} else {\n\t\t\t\tnonTracked.push(item);\n\t\t\t}\n\t\t}\n\n\t\t// Sort and limit the non-tracked items\n\t\tlet limitedNonTracked: unknown[] = nonTracked;\n\t\tif (conf.sort === 'date-desc') {\n\t\t\tlimitedNonTracked = [...nonTracked]\n\t\t\t\t.sort(sortByDate('desc'))\n\t\t\t\t.slice(0, conf.limit);\n\t\t} else if (conf.sort === 'date-asc') {\n\t\t\tlimitedNonTracked = [...nonTracked]\n\t\t\t\t.sort(sortByDate('asc'))\n\t\t\t\t.slice(0, conf.limit);\n\t\t} else if (conf.sort === 'none') {\n\t\t\tlimitedNonTracked = nonTracked.slice(0, conf.limit);\n\t\t}\n\n\t\t// Combine tracked items (always included) with limited non-tracked items\n\t\treturn [...tracked, ...limitedNonTracked];\n\t}\n\n\t// No tracked slugs - apply standard sorting and limiting\n\tif (conf.sort === 'date-desc') {\n\t\treturn [...full].sort(sortByDate('desc')).slice(0, conf.limit);\n\t}\n\tif (conf.sort === 'date-asc') {\n\t\treturn [...full].sort(sortByDate('asc')).slice(0, conf.limit);\n\t}\n\tif (conf.sort === 'none') {\n\t\treturn full.slice(0, conf.limit);\n\t}\n\n\treturn full;\n}\n\nfunction applyFieldStripping(\n\tarr: unknown[],\n\tfields: Set<string> | 'all',\n\tslugs: Set<string> | undefined,\n): unknown[] {\n\tif (fields === 'all' || !(fields instanceof Set)) {\n\t\treturn arr;\n\t}\n\n\tconst slugsSet = slugs || new Set<string>();\n\n\treturn arr.map((item: unknown) => {\n\t\tconst doc = item as Doc;\n\t\t// Keep full item if in accessed slugs set\n\t\tif (doc.slug && slugsSet.has(doc.slug)) {\n\t\t\treturn doc;\n\t\t}\n\t\treturn pickFields(doc, fields);\n\t});\n}\n\nfunction shouldMarkAsPartial(\n\tarr: unknown[],\n\tfull: unknown[],\n\tfields: Set<string> | 'all',\n): boolean {\n\treturn (\n\t\t(Array.isArray(arr) && Array.isArray(full) && arr.length < full.length) ||\n\t\tfields !== 'all'\n\t);\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Access tracking parsing requires analyzing nested object structures\nfunction parseAccessTracking(accessedCollections: Doc): Record<\n\tstring,\n\t{\n\t\tlimit: number;\n\t\tsort: string;\n\t\tslugs?: Set<string>;\n\t\taccessedItems?: Set<string>;\n\t\tfields?: Set<string> | 'all';\n\t}\n> {\n\tconst usage: Record<\n\t\tstring,\n\t\t{\n\t\t\tlimit: number;\n\t\t\tsort: string;\n\t\t\tslugs?: Set<string>;\n\t\t\taccessedItems?: Set<string>;\n\t\t\tfields?: Set<string> | 'all';\n\t\t}\n\t> = {};\n\n\t// Parse access tracking data\n\tif (accessedCollections?.forEach) {\n\t\t(accessedCollections as Set<string>).forEach((c) => {\n\t\t\tif (typeof c === 'string') {\n\t\t\t\tusage[c] = {\n\t\t\t\t\tlimit: Number.POSITIVE_INFINITY,\n\t\t\t\t\tsort: 'custom',\n\t\t\t\t\tfields: 'all',\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t} else if (accessedCollections && typeof accessedCollections === 'object') {\n\t\tfor (const [k, v] of Object.entries(\n\t\t\taccessedCollections as Record<string, Doc>,\n\t\t)) {\n\t\t\tusage[k] = {\n\t\t\t\tlimit:\n\t\t\t\t\ttypeof v?.limit === 'number' ? v.limit : Number.POSITIVE_INFINITY,\n\t\t\t\tsort: typeof v?.sort === 'string' ? v.sort : 'custom',\n\t\t\t\tslugs: v?.slugs instanceof Set ? v.slugs : undefined,\n\t\t\t\taccessedItems:\n\t\t\t\t\tv?.accessedItems instanceof Set ? v.accessedItems : undefined,\n\t\t\t\tfields:\n\t\t\t\t\tv?.fields === 'all' || v?.fields instanceof Set ? v.fields : 'all',\n\t\t\t};\n\t\t}\n\t}\n\n\treturn usage;\n}\n\nexport function processCollections(\n\taccessedCollections: Doc,\n\tbyCollectionForSSR: Record<string, unknown[]>,\n): { subset: Record<string, unknown[]>; partial: Record<string, boolean> } {\n\tconst subset: Record<string, unknown[]> = {};\n\tconst partial: Record<string, boolean> = {};\n\n\t// Check if we have SSR results captured from useContent queries\n\ttry {\n\t\tconst g = globalThis as Doc;\n\t\tconst ssrResults = g.__REROUTE_SSR_RESULTS__ as\n\t\t\t| Record<string, unknown[]>\n\t\t\t| undefined;\n\n\t\tif (ssrResults && typeof ssrResults === 'object') {\n\t\t\t// Use the captured results directly - these are already filtered/sorted/limited\n\t\t\tfor (const [collection, items] of Object.entries(ssrResults)) {\n\t\t\t\tif (Array.isArray(items) && items.length > 0) {\n\t\t\t\t\tsubset[collection] = items;\n\t\t\t\t\tconst full = byCollectionForSSR?.[collection] || [];\n\t\t\t\t\tpartial[collection] = items.length < full.length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { subset, partial };\n\t\t}\n\t} catch {\n\t\t// Fall through to legacy behavior\n\t}\n\n\t// Legacy fallback (shouldn't normally be hit with new approach)\n\tconst sortByDate = (order: 'asc' | 'desc') => (a: Doc, b: Doc) => {\n\t\tconst da = a?.meta?.date ? Date.parse(String(a.meta.date)) : 0;\n\t\tconst db = b?.meta?.date ? Date.parse(String(b.meta.date)) : 0;\n\t\treturn order === 'asc' ? da - db : db - da;\n\t};\n\n\tconst usage = parseAccessTracking(accessedCollections);\n\tconst collections = Object.keys(usage);\n\n\tfor (const c of collections) {\n\t\tconst conf = usage[c];\n\t\tconst full = byCollectionForSSR?.[c] || [];\n\n\t\tlet arr = applySortingAndLimit(\n\t\t\tfull,\n\t\t\t{ ...conf, slugs: conf.slugs },\n\t\t\tsortByDate,\n\t\t);\n\n\t\tarr = applyFieldStripping(arr, conf.fields || 'all', conf.slugs);\n\n\t\tsubset[c] = arr;\n\t\tpartial[c] = shouldMarkAsPartial(arr, full, conf.fields || 'all');\n\t}\n\n\treturn { subset, partial };\n}\n",
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
"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",
|
|
40
40
|
"export { createCollectionScript, processCollections } from './collections';\nexport { createDataScript, duplicateQueryParamData } from './data';\nexport { escapeJsonForScript } from './escape';\nexport { createFeedsScript, createLlmsScript } from './feeds';\n",
|
|
41
41
|
"import { join } from './path';\n\n/**\n * Find and inline Tailwind CSS from .reroute directory\n * In watch mode, returns a link tag instead of inlining to ensure fresh CSS on every request\n */\nexport async function inlineTailwindCSS(\n\tclientDir: string,\n\tminify = false,\n\tisWatchMode = 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// In watch mode, return a link tag to ensure fresh CSS\n\t\t// The server will serve the CSS from /.reroute/theme.css with no-cache headers\n\t\tif (isWatchMode) {\n\t\t\t// Add timestamp to bust browser cache\n\t\t\tconst timestamp = Date.now();\n\t\t\treturn `<link rel=\"stylesheet\" href=\"/.reroute/theme.css?t=${timestamp}\" data-reroute=\"tailwind\">`;\n\t\t}\n\n\t\t// Production mode: inline the CSS\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\tconst { readFileSync } = await import('node:fs');\n\t\tconst css = readFileSync(cssPath, 'utf-8');\n\n\t\treturn `<style data-reroute=\"tailwind\">${minifyCSS(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",
|
|
42
|
-
"import type { Span } from '@opentelemetry/api';\nimport { withParentSpan, withSpan } from 'reroute-js/telemetry/server';\nimport type { OGImageOptions } from '../../config';\nimport { loadCollections, setGlobalCollections } from './collections';\nimport { computeSSRData, setGlobalSSRData } from './compute';\nimport { extractPageMetadata } from './metadata';\nimport {\n\tcreateBundlePreload,\n\tpreloadContentModule,\n\tresetSSRAccessTracking,\n} from './preload';\nimport {\n\tcreateCollectionScript,\n\tcreateDataScript,\n\tcreateFeedsScript,\n\tcreateLlmsScript,\n\tprocessCollections,\n} from './scripts';\nimport { seedSSRModuleForPath } from './seed';\nimport { inlineTailwindCSS } from './styles';\nimport type { ComputeResult } from './types';\n\n/**\n * Common SSR options shared between render and stream modes\n */\ntype SSRSetupOptions = {\n\tpathname: string;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\tcachedCollections?: Record<string, unknown[]>;\n\tcachedTailwindCSS?: string;\n\tdebug?: boolean;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n\tparentSpan?: Span | null;\n\t/** Request headers from the incoming HTTP request */\n\theaders?: Record<string, string>;\n};\n\n/**\n * Result of SSR setup phase\n */\ntype SSRSetupResult = {\n\tssrData: Record<string, unknown>;\n\tssrError?: string;\n\tstatusContainer: { value: number | undefined };\n\tbyCollectionForSSR: Record<string, unknown[]>;\n\tbundlePreload: string;\n\tpreloadExtraHead: string;\n\tpreloadHydrationScript: string;\n\tpreloadStatusOverride?: number;\n\tinlineStyleTag: string;\n\tmetadataResult: {\n\t\tperPageHead: string;\n\t\tpageLang?: string;\n\t\tstatusOverride?: number;\n\t};\n\tpending?: Promise<void>;\n};\n\n/**\n * Perform common SSR setup steps shared between render and stream modes.\n * This includes seeding modules, computing data, loading collections, and preloading.\n */\nasync function performSSRSetup(\n\toptions: SSRSetupOptions,\n\tstreaming = false,\n): Promise<SSRSetupResult> {\n\tconst { pathname } = options;\n\n\t// Add a global timeout for SSR setup to prevent indefinite hangs\n\t// In streaming mode, we want setup to complete quickly so we can start sending HTML\n\tconst setupTimeout = streaming ? 10000 : 30000; // 10s for streaming, 30s otherwise\n\tconst timeoutPromise = new Promise<never>((_, reject) => {\n\t\tsetTimeout(() => {\n\t\t\treject(\n\t\t\t\tnew Error(\n\t\t\t\t\t`[reroute] SSR setup timeout after ${setupTimeout}ms for ${pathname}`,\n\t\t\t\t),\n\t\t\t);\n\t\t}, setupTimeout);\n\t});\n\n\ttry {\n\t\treturn await Promise.race([\n\t\t\twithParentSpan(options.parentSpan, () =>\n\t\t\t\tperformSSRSetupInternal(options, streaming),\n\t\t\t),\n\t\t\ttimeoutPromise,\n\t\t]);\n\t} catch (error) {\n\t\tconsole.error('[reroute] SSR setup error:', error);\n\t\t// Return minimal setup result to allow page to render with fallback\n\t\treturn {\n\t\t\tssrData: {},\n\t\t\tssrError: error instanceof Error ? error.message : String(error),\n\t\t\tstatusContainer: { value: 500 },\n\t\t\tbyCollectionForSSR: {},\n\t\t\tbundlePreload: '',\n\t\t\tpreloadExtraHead: '',\n\t\t\tpreloadHydrationScript: '',\n\t\t\tinlineStyleTag: '',\n\t\t\tmetadataResult: { perPageHead: '' },\n\t\t};\n\t}\n}\n\n/**\n * Internal SSR setup implementation (wrapped with timeout above)\n */\nasync function performSSRSetupInternal(\n\toptions: SSRSetupOptions,\n\tstreaming: boolean,\n): Promise<SSRSetupResult> {\n\tconst debug = options.debug ?? false;\n\tconst t0 = debug ? performance.now() : 0;\n\tconst {\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\tmaxAge = 0,\n\t\tsearchParams,\n\t\togConfig,\n\t} = options;\n\n\t// Note: We don't reset SSR globals here because multiple requests may run concurrently.\n\t// Instead, we use pathname-scoped serialization to ensure each response only includes\n\t// its own data (see createContentHtmlScript and createSSRExportsScript).\n\n\t// 1. Seed content modules for SSR rendering\n\tawait withSpan('ssr.seed', async (span) => {\n\t\tspan.setAttribute('pathname', pathname);\n\t\tspan.setAttribute('streaming', streaming);\n\t\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - seedModule: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t});\n\n\t// 2. Reset SSR access tracking and create bundle preload\n\tresetSSRAccessTracking();\n\tconst bundlePreload = createBundlePreload(bundleUrl);\n\n\t// 3. Preload content module\n\tconst preloadResult = await withSpan('ssr.preload', async (span) => {\n\t\tspan.setAttribute('pathname', pathname);\n\t\tconst result = await preloadContentModule(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\t\tspan.setAttribute('has_module', !!result.modulePath);\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - preloadContent: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t\treturn result;\n\t});\n\n\t// 4. Compute SSR data\n\tconst computeResult: ComputeResult = await withSpan(\n\t\t'ssr.compute.data',\n\t\tasync (span) => {\n\t\t\tspan.setAttribute('pathname', pathname);\n\t\t\tspan.setAttribute('streaming', streaming);\n\t\t\tconst result = await computeSSRData(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tcwd,\n\t\t\t\tisWatchMode,\n\t\t\t\t{ streaming, maxAge, headers: options.headers },\n\t\t\t\tsearchParams,\n\t\t\t);\n\t\t\tspan.setAttribute('has_error', !!result.error);\n\t\t\tspan.setAttribute('has_data', Object.keys(result.data).length > 0);\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - computeSSRData: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn result;\n\t\t},\n\t);\n\n\tsetGlobalSSRData(computeResult.data);\n\n\t// 5. Load content collections (use cached if available)\n\tconst usingCachedCollections = !!options.cachedCollections;\n\tconst byCollectionForSSR = await withSpan(\n\t\t'ssr.load.collections',\n\t\tasync (span) => {\n\t\t\tspan.setAttribute('pathname', pathname);\n\t\t\tspan.setAttribute('cached', usingCachedCollections);\n\t\t\tconst collections = options.cachedCollections\n\t\t\t\t? options.cachedCollections\n\t\t\t\t: await loadCollections(cwd, isWatchMode);\n\t\t\tspan.setAttribute('collection_count', Object.keys(collections).length);\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - loadCollections (cached: ${usingCachedCollections}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn collections;\n\t\t},\n\t);\n\tsetGlobalCollections(byCollectionForSSR);\n\n\t// 6. Inline Tailwind CSS (use cached if available)\n\tconst usingCachedCSS = !!options.cachedTailwindCSS;\n\tconst inlineStyleTag = await withSpan('ssr.inline.css', async (span) => {\n\t\tconst css = options.cachedTailwindCSS\n\t\t\t? options.cachedTailwindCSS\n\t\t\t: await inlineTailwindCSS(clientDir, !streaming, isWatchMode);\n\t\tspan.setAttributes({\n\t\t\t'reroute.cached': usingCachedCSS,\n\t\t\t'reroute.css.size': css.length,\n\t\t});\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - inlineTailwindCSS (cached: ${usingCachedCSS}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t\treturn css;\n\t});\n\n\t// 7. Determine initial status override\n\tlet statusOverride = preloadResult.statusOverride;\n\tif (computeResult.statusContainer.value !== undefined) {\n\t\tstatusOverride = computeResult.statusContainer.value;\n\t}\n\n\t// 8. Extract page metadata (with SSR data for dynamic head tags)\n\tconst metadataResult = await withSpan(\n\t\t'ssr.extract.metadata',\n\t\tasync (span) => {\n\t\t\tconst result = await extractPageMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tcwd,\n\t\t\t\tisWatchMode,\n\t\t\t\tstatusOverride,\n\t\t\t\togConfig,\n\t\t\t\toptions.baseUrl,\n\t\t\t\toptions.autoCanonical,\n\t\t\t\tcomputeResult.data,\n\t\t\t);\n\t\t\tspan.setAttributes({\n\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t'reroute.metadata.exists': !!result.perPageHead,\n\t\t\t});\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - extractMetadata: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn result;\n\t\t},\n\t);\n\n\treturn {\n\t\tssrData: computeResult.data,\n\t\tssrError: computeResult.error,\n\t\tstatusContainer: computeResult.statusContainer,\n\t\tbyCollectionForSSR,\n\t\tbundlePreload,\n\t\tpreloadExtraHead: preloadResult.extraHead,\n\t\tpreloadHydrationScript: preloadResult.hydrationScript,\n\t\tpreloadStatusOverride: preloadResult.statusOverride,\n\t\tinlineStyleTag,\n\t\tmetadataResult,\n\t\tpending: computeResult.pending,\n\t};\n}\n\n/**\n * Generate hydration scripts for collections that were accessed during SSR.\n */\nfunction generateCollectionScripts(\n\tbyCollectionForSSR: Record<string, unknown[]>,\n): string {\n\ttry {\n\t\tconst g = globalThis as unknown as { __REROUTE_SSR_ACCESSED__?: unknown };\n\t\tconst acc = g.__REROUTE_SSR_ACCESSED__;\n\n\t\tif (acc) {\n\t\t\tconst { subset, partial } = processCollections(acc, byCollectionForSSR);\n\t\t\tif (Object.keys(subset).length > 0) {\n\t\t\t\treturn createCollectionScript(subset, partial);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Ignore errors\n\t}\n\treturn '';\n}\n\n/**\n * Generate all hydration scripts for SSR\n */\nfunction generateHydrationScripts(\n\tssrData: Record<string, unknown>,\n\tisWatchMode: boolean,\n\tssrError?: string,\n\tcollectionScripts = '',\n\tpreloadScript = '',\n\tbundleUrl = '',\n\tpathname = '',\n\tbrowserTelemetryConfig?: Record<string, unknown>,\n\ttraceContext?: { traceparent?: string; tracestate?: string },\n): string {\n\tlet scripts = preloadScript;\n\n\t// Add collection scripts\n\tscripts += collectionScripts;\n\n\t// Add SSR data script (pathname is used to scope content HTML and exports to current request)\n\tscripts += createDataScript(\n\t\tssrData,\n\t\tisWatchMode ? ssrError : undefined,\n\t\tpathname,\n\t\tbrowserTelemetryConfig,\n\t\ttraceContext,\n\t);\n\n\t// Add feeds and llms scripts\n\tscripts += createFeedsScript();\n\tscripts += createLlmsScript();\n\n\t// Add bundle script\n\tif (bundleUrl) {\n\t\tscripts += `<script type=\"module\" src=\"${bundleUrl}\"></script>`;\n\t}\n\n\t// Add dev watcher in watch mode\n\tif (isWatchMode) {\n\t\tscripts += `<script type=\"module\" src=\"/__reroute_watch.js\"></script>`;\n\t}\n\n\treturn scripts;\n}\n\nexport type { SSRSetupOptions, SSRSetupResult };\nexport { performSSRSetup, generateCollectionScripts, generateHydrationScripts };\n",
|
|
42
|
+
"import type { Span } from '@opentelemetry/api';\nimport { withParentSpan, withSpan } from 'reroute-js/telemetry/server';\nimport type { OGImageOptions, OGOptions } from '../../config';\nimport { loadCollections, setGlobalCollections } from './collections';\nimport { computeSSRData, setGlobalSSRData } from './compute';\nimport { extractPageMetadata } from './metadata';\nimport {\n\tcreateBundlePreload,\n\tpreloadContentModule,\n\tresetSSRAccessTracking,\n} from './preload';\nimport {\n\tcreateCollectionScript,\n\tcreateDataScript,\n\tcreateFeedsScript,\n\tcreateLlmsScript,\n\tprocessCollections,\n} from './scripts';\nimport { seedSSRModuleForPath } from './seed';\nimport { inlineTailwindCSS } from './styles';\nimport type { ComputeResult } from './types';\n\n/**\n * Common SSR options shared between render and stream modes\n */\ntype SSRSetupOptions = {\n\tpathname: string;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\tcachedCollections?: Record<string, unknown[]>;\n\tcachedTailwindCSS?: string;\n\tdebug?: boolean;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n\togMetaConfig?: OGOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n\tparentSpan?: Span | null;\n\t/** Request headers from the incoming HTTP request */\n\theaders?: Record<string, string>;\n};\n\n/**\n * Result of SSR setup phase\n */\ntype SSRSetupResult = {\n\tssrData: Record<string, unknown>;\n\tssrError?: string;\n\tstatusContainer: { value: number | undefined };\n\tbyCollectionForSSR: Record<string, unknown[]>;\n\tbundlePreload: string;\n\tpreloadExtraHead: string;\n\tpreloadHydrationScript: string;\n\tpreloadStatusOverride?: number;\n\tinlineStyleTag: string;\n\tmetadataResult: {\n\t\tperPageHead: string;\n\t\tpageLang?: string;\n\t\tstatusOverride?: number;\n\t};\n\tpending?: Promise<void>;\n};\n\n/**\n * Perform common SSR setup steps shared between render and stream modes.\n * This includes seeding modules, computing data, loading collections, and preloading.\n */\nasync function performSSRSetup(\n\toptions: SSRSetupOptions,\n\tstreaming = false,\n): Promise<SSRSetupResult> {\n\tconst { pathname } = options;\n\n\t// Add a global timeout for SSR setup to prevent indefinite hangs\n\t// In streaming mode, we want setup to complete quickly so we can start sending HTML\n\tconst setupTimeout = streaming ? 10000 : 30000; // 10s for streaming, 30s otherwise\n\tconst timeoutPromise = new Promise<never>((_, reject) => {\n\t\tsetTimeout(() => {\n\t\t\treject(\n\t\t\t\tnew Error(\n\t\t\t\t\t`[reroute] SSR setup timeout after ${setupTimeout}ms for ${pathname}`,\n\t\t\t\t),\n\t\t\t);\n\t\t}, setupTimeout);\n\t});\n\n\ttry {\n\t\treturn await Promise.race([\n\t\t\twithParentSpan(options.parentSpan, () =>\n\t\t\t\tperformSSRSetupInternal(options, streaming),\n\t\t\t),\n\t\t\ttimeoutPromise,\n\t\t]);\n\t} catch (error) {\n\t\tconsole.error('[reroute] SSR setup error:', error);\n\t\t// Return minimal setup result to allow page to render with fallback\n\t\treturn {\n\t\t\tssrData: {},\n\t\t\tssrError: error instanceof Error ? error.message : String(error),\n\t\t\tstatusContainer: { value: 500 },\n\t\t\tbyCollectionForSSR: {},\n\t\t\tbundlePreload: '',\n\t\t\tpreloadExtraHead: '',\n\t\t\tpreloadHydrationScript: '',\n\t\t\tinlineStyleTag: '',\n\t\t\tmetadataResult: { perPageHead: '' },\n\t\t};\n\t}\n}\n\n/**\n * Internal SSR setup implementation (wrapped with timeout above)\n */\nasync function performSSRSetupInternal(\n\toptions: SSRSetupOptions,\n\tstreaming: boolean,\n): Promise<SSRSetupResult> {\n\tconst debug = options.debug ?? false;\n\tconst t0 = debug ? performance.now() : 0;\n\tconst {\n\t\tpathname,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tbundleUrl,\n\t\tmaxAge = 0,\n\t\tsearchParams,\n\t\togConfig,\n\t} = options;\n\n\t// Note: We don't reset SSR globals here because multiple requests may run concurrently.\n\t// Instead, we use pathname-scoped serialization to ensure each response only includes\n\t// its own data (see createContentHtmlScript and createSSRExportsScript).\n\n\t// 1. Seed content modules for SSR rendering\n\tawait withSpan('ssr.seed', async (span) => {\n\t\tspan.setAttribute('pathname', pathname);\n\t\tspan.setAttribute('streaming', streaming);\n\t\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - seedModule: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t});\n\n\t// 2. Reset SSR access tracking and create bundle preload\n\tresetSSRAccessTracking();\n\tconst bundlePreload = createBundlePreload(bundleUrl);\n\n\t// 3. Preload content module\n\tconst preloadResult = await withSpan('ssr.preload', async (span) => {\n\t\tspan.setAttribute('pathname', pathname);\n\t\tconst result = await preloadContentModule(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\t\tspan.setAttribute('has_module', !!result.modulePath);\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - preloadContent: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t\treturn result;\n\t});\n\n\t// 4. Compute SSR data\n\tconst computeResult: ComputeResult = await withSpan(\n\t\t'ssr.compute.data',\n\t\tasync (span) => {\n\t\t\tspan.setAttribute('pathname', pathname);\n\t\t\tspan.setAttribute('streaming', streaming);\n\t\t\tconst result = await computeSSRData(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tcwd,\n\t\t\t\tisWatchMode,\n\t\t\t\t{ streaming, maxAge, headers: options.headers },\n\t\t\t\tsearchParams,\n\t\t\t);\n\t\t\tspan.setAttribute('has_error', !!result.error);\n\t\t\tspan.setAttribute('has_data', Object.keys(result.data).length > 0);\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - computeSSRData: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn result;\n\t\t},\n\t);\n\n\tsetGlobalSSRData(computeResult.data);\n\n\t// 5. Load content collections (use cached if available)\n\tconst usingCachedCollections = !!options.cachedCollections;\n\tconst byCollectionForSSR = await withSpan(\n\t\t'ssr.load.collections',\n\t\tasync (span) => {\n\t\t\tspan.setAttribute('pathname', pathname);\n\t\t\tspan.setAttribute('cached', usingCachedCollections);\n\t\t\tconst collections = options.cachedCollections\n\t\t\t\t? options.cachedCollections\n\t\t\t\t: await loadCollections(cwd, isWatchMode);\n\t\t\tspan.setAttribute('collection_count', Object.keys(collections).length);\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - loadCollections (cached: ${usingCachedCollections}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn collections;\n\t\t},\n\t);\n\tsetGlobalCollections(byCollectionForSSR);\n\n\t// 6. Inline Tailwind CSS (use cached if available)\n\tconst usingCachedCSS = !!options.cachedTailwindCSS;\n\tconst inlineStyleTag = await withSpan('ssr.inline.css', async (span) => {\n\t\tconst css = options.cachedTailwindCSS\n\t\t\t? options.cachedTailwindCSS\n\t\t\t: await inlineTailwindCSS(clientDir, !streaming, isWatchMode);\n\t\tspan.setAttributes({\n\t\t\t'reroute.cached': usingCachedCSS,\n\t\t\t'reroute.css.size': css.length,\n\t\t});\n\t\tif (debug)\n\t\t\tconsole.log(\n\t\t\t\t`[Setup] ${pathname} - inlineTailwindCSS (cached: ${usingCachedCSS}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t);\n\t\treturn css;\n\t});\n\n\t// 7. Determine initial status override\n\tlet statusOverride = preloadResult.statusOverride;\n\tif (computeResult.statusContainer.value !== undefined) {\n\t\tstatusOverride = computeResult.statusContainer.value;\n\t}\n\n\t// 8. Extract page metadata (with SSR data for dynamic head tags)\n\tconst metadataResult = await withSpan(\n\t\t'ssr.extract.metadata',\n\t\tasync (span) => {\n\t\t\tconst result = await extractPageMetadata(\n\t\t\t\tpathname,\n\t\t\t\tclientDir,\n\t\t\t\tcwd,\n\t\t\t\tisWatchMode,\n\t\t\t\tstatusOverride,\n\t\t\t\togConfig,\n\t\t\t\toptions.ogMetaConfig,\n\t\t\t\toptions.baseUrl,\n\t\t\t\toptions.autoCanonical,\n\t\t\t\tcomputeResult.data,\n\t\t\t);\n\t\t\tspan.setAttributes({\n\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t'reroute.metadata.exists': !!result.perPageHead,\n\t\t\t});\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Setup] ${pathname} - extractMetadata: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\treturn result;\n\t\t},\n\t);\n\n\treturn {\n\t\tssrData: computeResult.data,\n\t\tssrError: computeResult.error,\n\t\tstatusContainer: computeResult.statusContainer,\n\t\tbyCollectionForSSR,\n\t\tbundlePreload,\n\t\tpreloadExtraHead: preloadResult.extraHead,\n\t\tpreloadHydrationScript: preloadResult.hydrationScript,\n\t\tpreloadStatusOverride: preloadResult.statusOverride,\n\t\tinlineStyleTag,\n\t\tmetadataResult,\n\t\tpending: computeResult.pending,\n\t};\n}\n\n/**\n * Generate hydration scripts for collections that were accessed during SSR.\n */\nfunction generateCollectionScripts(\n\tbyCollectionForSSR: Record<string, unknown[]>,\n): string {\n\ttry {\n\t\tconst g = globalThis as unknown as { __REROUTE_SSR_ACCESSED__?: unknown };\n\t\tconst acc = g.__REROUTE_SSR_ACCESSED__;\n\n\t\tif (acc) {\n\t\t\tconst { subset, partial } = processCollections(acc, byCollectionForSSR);\n\t\t\tif (Object.keys(subset).length > 0) {\n\t\t\t\treturn createCollectionScript(subset, partial);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Ignore errors\n\t}\n\treturn '';\n}\n\n/**\n * Generate all hydration scripts for SSR\n */\nfunction generateHydrationScripts(\n\tssrData: Record<string, unknown>,\n\tisWatchMode: boolean,\n\tssrError?: string,\n\tcollectionScripts = '',\n\tpreloadScript = '',\n\tbundleUrl = '',\n\tpathname = '',\n\tbrowserTelemetryConfig?: Record<string, unknown>,\n\ttraceContext?: { traceparent?: string; tracestate?: string },\n): string {\n\tlet scripts = preloadScript;\n\n\t// Add collection scripts\n\tscripts += collectionScripts;\n\n\t// Add SSR data script (pathname is used to scope content HTML and exports to current request)\n\tscripts += createDataScript(\n\t\tssrData,\n\t\tisWatchMode ? ssrError : undefined,\n\t\tpathname,\n\t\tbrowserTelemetryConfig,\n\t\ttraceContext,\n\t);\n\n\t// Add feeds and llms scripts\n\tscripts += createFeedsScript();\n\tscripts += createLlmsScript();\n\n\t// Add bundle script\n\tif (bundleUrl) {\n\t\tscripts += `<script type=\"module\" src=\"${bundleUrl}\"></script>`;\n\t}\n\n\t// Add dev watcher in watch mode\n\tif (isWatchMode) {\n\t\tscripts += `<script type=\"module\" src=\"/__reroute_watch.js\"></script>`;\n\t}\n\n\treturn scripts;\n}\n\nexport type { SSRSetupOptions, SSRSetupResult };\nexport { performSSRSetup, generateCollectionScripts, generateHydrationScripts };\n",
|
|
43
43
|
"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",
|
|
44
44
|
"// 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",
|
|
45
45
|
"/** biome-ignore-all lint/suspicious/noExplicitAny: That's fine */\n/**\n * Serialize telemetry config for browser injection\n * Converts functions and RegExps to string representations that can be parsed in browser\n */\nexport function serializeBrowserTelemetryConfig(\n\tconfig: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n\tif (!config) return undefined;\n\n\tconst serialized: Record<string, unknown> = {};\n\n\tfor (const [key, value] of Object.entries(config)) {\n\t\tif (key === 'shouldIgnoreUrl' && Array.isArray(value)) {\n\t\t\t// Serialize ignore patterns (strings and regexes only - functions not supported)\n\t\t\tserialized[key] = value\n\t\t\t\t.map((pattern) => {\n\t\t\t\t\tif (typeof pattern === 'string') {\n\t\t\t\t\t\treturn { type: 'string', value: pattern };\n\t\t\t\t\t}\n\t\t\t\t\tif (pattern instanceof RegExp) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: 'regex',\n\t\t\t\t\t\t\tvalue: pattern.source,\n\t\t\t\t\t\t\tflags: pattern.flags,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t// Skip functions - closures cannot be serialized\n\t\t\t\t\treturn null;\n\t\t\t\t})\n\t\t\t\t.filter(Boolean);\n\t\t} else if (key === 'ignoreRoutes' && Array.isArray(value)) {\n\t\t\t// Same handling for ignoreRoutes\n\t\t\tserialized[key] = value\n\t\t\t\t.map((pattern) => {\n\t\t\t\t\tif (typeof pattern === 'string') {\n\t\t\t\t\t\treturn { type: 'string', value: pattern };\n\t\t\t\t\t}\n\t\t\t\t\tif (pattern instanceof RegExp) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: 'regex',\n\t\t\t\t\t\t\tvalue: pattern.source,\n\t\t\t\t\t\t\tflags: pattern.flags,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t// Skip functions\n\t\t\t\t\treturn null;\n\t\t\t\t})\n\t\t\t\t.filter(Boolean);\n\t\t} else {\n\t\t\tserialized[key] = value;\n\t\t}\n\t}\n\n\treturn serialized;\n}\n",
|
|
46
|
-
"import type { Span } from '@opentelemetry/api';\nimport dedent from 'dedent';\nimport { cloneElement, type ReactElement } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport {\n\tgetTraceContextForInjection,\n\twithSpan,\n\twithSpanSync,\n} from 'reroute-js/telemetry/server';\nimport { loadConfig, type OGImageOptions } from '../config';\nimport {\n\ttype Doc,\n\tduplicateQueryParamData,\n\tgenerateCollectionScripts,\n\tgenerateHydrationScripts,\n\tperformSSRSetup,\n\tsetGlobalSSRData,\n} from './lib';\nimport { applyIndexTemplate, loadIndexHtml } from './lib/html';\n\ntype SSRRenderOptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\tcachedCollections?: Record<string, unknown[]>;\n\tcachedTailwindCSS?: string;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tminify?: boolean;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n\tparentSpan?: Span | null;\n\t/** Request headers from the incoming HTTP request */\n\theaders?: Record<string, string>;\n};\n\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\tparentSpan: options.parentSpan,\n\t\t\tbundleUrl,\n\t\t\tmaxAge,\n\t\t\tsearchParams,\n\t\t\togConfig,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tautoCanonical: options.autoCanonical,\n\t\t\tcachedCollections: options.cachedCollections,\n\t\t\tcachedTailwindCSS: options.cachedTailwindCSS,\n\t\t\theaders: options.headers,\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 appHtml = await withSpan('ssr.render.react', async (span) => {\n\t\tconst componentWithPathname = cloneElement<Doc>(rootComponent, {\n\t\t\tpathname,\n\t\t\tsearchParams,\n\t\t} as Doc);\n\t\tspan.setAttribute('reroute.pathname', pathname);\n\t\tconst html = renderToString(componentWithPathname);\n\t\tspan.setAttribute('reroute.html.final.size', html.length);\n\t\treturn html;\n\t});\n\n\t// Load base template\n\tconst baseTemplate = await withSpan('ssr.load.template', async (span) => {\n\t\tconst template = await loadIndexHtml(clientDir);\n\t\tspan.setAttribute('reroute.template.size', template.length);\n\t\treturn template;\n\t});\n\n\t// Generate collection scripts from accessed collections\n\tconst collectionScripts = generateCollectionScripts(setup.byCollectionForSSR);\n\n\t// Load config to get browser telemetry settings\n\tconst config = await loadConfig(cwd);\n\tconst browserTelemetryConfigRaw = config.telemetry?.browser as\n\t\t| Record<string, unknown>\n\t\t| undefined;\n\n\t// Serialize browser telemetry config (convert functions to strings for JSON)\n\tconst { serializeBrowserTelemetryConfig } = await import('./lib/serialize');\n\tconst browserTelemetryConfig = serializeBrowserTelemetryConfig(\n\t\tbrowserTelemetryConfigRaw,\n\t);\n\n\t// Extract trace context from parent span for distributed tracing\n\tconst traceContext = getTraceContextForInjection(options.parentSpan);\n\n\t// Generate all hydration scripts\n\tconst hydrationScript = await withSpan(\n\t\t'ssr.generate.scripts',\n\t\tasync (span) => {\n\t\t\tconst script = generateHydrationScripts(\n\t\t\t\tsetup.ssrData,\n\t\t\t\tisWatchMode,\n\t\t\t\tsetup.ssrError,\n\t\t\t\tcollectionScripts,\n\t\t\t\tsetup.preloadHydrationScript,\n\t\t\t\tbundleUrl,\n\t\t\t\tpathname,\n\t\t\t\tbrowserTelemetryConfig,\n\t\t\t\ttraceContext,\n\t\t\t);\n\t\t\tspan.setAttribute('reroute.scripts.size', script.length);\n\t\t\treturn script;\n\t\t},\n\t);\n\n\t// Determine final status (only override if value is set)\n\tlet statusOverride = setup.preloadStatusOverride;\n\tif (setup.statusContainer.value !== undefined) {\n\t\tstatusOverride = setup.statusContainer.value;\n\t}\n\tif (setup.metadataResult.statusOverride !== undefined) {\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 = withSpanSync('ssr.apply.template', (span) => {\n\t\tconst result = applyIndexTemplate(baseTemplate, appHtml, {\n\t\t\thead: [setup.inlineStyleTag, combinedHead].filter(Boolean).join('\\n'),\n\t\t\thydrationScript,\n\t\t\tlang: setup.metadataResult.pageLang || lang,\n\t\t\tappId,\n\t\t});\n\t\tspan.setAttributes({\n\t\t\t'reroute.html.final.size': result.length,\n\t\t\t'reroute.html.original.size': appHtml.length,\n\t\t});\n\t\treturn result;\n\t});\n\n\treturn {\n\t\thtml,\n\t\tstatus: statusOverride || 200,\n\t};\n}\n\nexport { renderSSRDocument, type SSRRenderOptions, type SSRRenderResult };\n",
|
|
46
|
+
"import type { Span } from '@opentelemetry/api';\nimport dedent from 'dedent';\nimport { cloneElement, type ReactElement } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport {\n\tgetTraceContextForInjection,\n\twithSpan,\n\twithSpanSync,\n} from 'reroute-js/telemetry/server';\nimport { loadConfig, type OGImageOptions, type OGOptions } from '../config';\nimport {\n\ttype Doc,\n\tduplicateQueryParamData,\n\tgenerateCollectionScripts,\n\tgenerateHydrationScripts,\n\tperformSSRSetup,\n\tsetGlobalSSRData,\n} from './lib';\nimport { applyIndexTemplate, loadIndexHtml } from './lib/html';\n\ntype SSRRenderOptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\tcachedCollections?: Record<string, unknown[]>;\n\tcachedTailwindCSS?: string;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tminify?: boolean;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n\togMetaConfig?: OGOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n\tparentSpan?: Span | null;\n\t/** Request headers from the incoming HTTP request */\n\theaders?: Record<string, string>;\n};\n\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\tparentSpan: options.parentSpan,\n\t\t\tbundleUrl,\n\t\t\tmaxAge,\n\t\t\tsearchParams,\n\t\t\togConfig,\n\t\t\togMetaConfig: options.ogMetaConfig,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tautoCanonical: options.autoCanonical,\n\t\t\tcachedCollections: options.cachedCollections,\n\t\t\tcachedTailwindCSS: options.cachedTailwindCSS,\n\t\t\theaders: options.headers,\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 appHtml = await withSpan('ssr.render.react', async (span) => {\n\t\tconst componentWithPathname = cloneElement<Doc>(rootComponent, {\n\t\t\tpathname,\n\t\t\tsearchParams,\n\t\t} as Doc);\n\t\tspan.setAttribute('reroute.pathname', pathname);\n\t\tconst html = renderToString(componentWithPathname);\n\t\tspan.setAttribute('reroute.html.final.size', html.length);\n\t\treturn html;\n\t});\n\n\t// Load base template\n\tconst baseTemplate = await withSpan('ssr.load.template', async (span) => {\n\t\tconst template = await loadIndexHtml(clientDir);\n\t\tspan.setAttribute('reroute.template.size', template.length);\n\t\treturn template;\n\t});\n\n\t// Generate collection scripts from accessed collections\n\tconst collectionScripts = generateCollectionScripts(setup.byCollectionForSSR);\n\n\t// Load config to get browser telemetry settings\n\tconst config = await loadConfig(cwd);\n\tconst browserTelemetryConfigRaw = config.telemetry?.browser as\n\t\t| Record<string, unknown>\n\t\t| undefined;\n\n\t// Serialize browser telemetry config (convert functions to strings for JSON)\n\tconst { serializeBrowserTelemetryConfig } = await import('./lib/serialize');\n\tconst browserTelemetryConfig = serializeBrowserTelemetryConfig(\n\t\tbrowserTelemetryConfigRaw,\n\t);\n\n\t// Extract trace context from parent span for distributed tracing\n\tconst traceContext = getTraceContextForInjection(options.parentSpan);\n\n\t// Generate all hydration scripts\n\tconst hydrationScript = await withSpan(\n\t\t'ssr.generate.scripts',\n\t\tasync (span) => {\n\t\t\tconst script = generateHydrationScripts(\n\t\t\t\tsetup.ssrData,\n\t\t\t\tisWatchMode,\n\t\t\t\tsetup.ssrError,\n\t\t\t\tcollectionScripts,\n\t\t\t\tsetup.preloadHydrationScript,\n\t\t\t\tbundleUrl,\n\t\t\t\tpathname,\n\t\t\t\tbrowserTelemetryConfig,\n\t\t\t\ttraceContext,\n\t\t\t);\n\t\t\tspan.setAttribute('reroute.scripts.size', script.length);\n\t\t\treturn script;\n\t\t},\n\t);\n\n\t// Determine final status (only override if value is set)\n\tlet statusOverride = setup.preloadStatusOverride;\n\tif (setup.statusContainer.value !== undefined) {\n\t\tstatusOverride = setup.statusContainer.value;\n\t}\n\tif (setup.metadataResult.statusOverride !== undefined) {\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 = withSpanSync('ssr.apply.template', (span) => {\n\t\tconst result = applyIndexTemplate(baseTemplate, appHtml, {\n\t\t\thead: [setup.inlineStyleTag, combinedHead].filter(Boolean).join('\\n'),\n\t\t\thydrationScript,\n\t\t\tlang: setup.metadataResult.pageLang || lang,\n\t\t\tappId,\n\t\t});\n\t\tspan.setAttributes({\n\t\t\t'reroute.html.final.size': result.length,\n\t\t\t'reroute.html.original.size': appHtml.length,\n\t\t});\n\t\treturn result;\n\t});\n\n\treturn {\n\t\thtml,\n\t\tstatus: statusOverride || 200,\n\t};\n}\n\nexport { renderSSRDocument, type SSRRenderOptions, type SSRRenderResult };\n",
|
|
47
47
|
"/**\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",
|
|
48
48
|
"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\nasync function loadCollectionItem(\n\tcwd: string,\n\tpathname: string,\n\tisWatchMode: boolean,\n): Promise<{ item: Doc; collection: string } | null> {\n\tconst parts = pathname.split('/').filter(Boolean);\n\tif (parts.length < 2) return null;\n\n\tconst collection = parts[0];\n\tconst collectionFile = join(\n\t\tcwd,\n\t\t'.reroute',\n\t\t'collections',\n\t\t`${collection}.js`,\n\t);\n\tconst exists = await Bun.file(collectionFile).exists();\n\tif (!exists) return null;\n\n\tconst url = `${pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\tconst mod = await import(url);\n\tconst items = mod.items || [];\n\n\tconst item = items.find((i: Doc) => i.href === pathname);\n\tif (!item) return null;\n\n\treturn { item, collection };\n}\n\nasync function findComponentPath(\n\tclientDir: string,\n\tcollection: string,\n\tslug: string,\n): Promise<string | null> {\n\tconst extensions = ['.mdx', '.md', '.tsx', '.jsx'];\n\n\tfor (const ext of extensions) {\n\t\tconst testPath = join(\n\t\t\tclientDir,\n\t\t\t'routes',\n\t\t\tcollection,\n\t\t\t'content',\n\t\t\t`${slug}${ext}`,\n\t\t);\n\t\tconst file = Bun.file(testPath);\n\t\tif (await file.exists()) {\n\t\t\treturn testPath;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction stripFrontmatterAndJsx(content: string, isMdx: boolean): string {\n\tlet rawContent = content.replace(/^---\\n[\\s\\S]*?\\n---\\n/, '');\n\n\tif (isMdx) {\n\t\trawContent = rawContent.replace(\n\t\t\t/^import\\s+.*?from\\s+['\"].*?['\"];?\\s*$/gm,\n\t\t\t'',\n\t\t);\n\t\trawContent = rawContent.replace(/<[A-Z][\\w]*[^>]*\\/>/g, '');\n\t\trawContent = rawContent.replace(\n\t\t\t/<[A-Z][\\w]*[^>]*>[\\s\\S]*?<\\/[A-Z][\\w]*>/g,\n\t\t\t'',\n\t\t);\n\t}\n\n\treturn rawContent.trim();\n}\n\nasync function extractMarkdownContent(\n\tcomponentPath: string,\n\tmeta: Record<string, unknown>,\n): Promise<{ title?: string; body: string; markdown: string }> {\n\tconst file = Bun.file(componentPath);\n\tlet rawContent = await file.text();\n\n\tconst isMdx = componentPath.endsWith('.mdx');\n\trawContent = stripFrontmatterAndJsx(rawContent, isMdx);\n\n\treturn {\n\t\ttitle: (meta.title as string) || extractTitle(rawContent),\n\t\tbody: stripHtmlTags(rawContent),\n\t\tmarkdown: rawContent,\n\t};\n}\n\nasync function extractComponentContent(\n\tcomponentPath: string,\n\tmeta: Record<string, unknown>,\n\tisWatchMode: boolean,\n): Promise<{ title?: string; body: string; markdown: string } | null> {\n\ttry {\n\t\tconst componentUrl = `${pathToFileURL(componentPath).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\tconst componentMod = await import(componentUrl);\n\n\t\tconst Component = componentMod.default;\n\t\tif (!Component || typeof Component !== 'function') return null;\n\n\t\tconst html = renderToStaticMarkup(Component({}));\n\n\t\treturn {\n\t\t\ttitle: (meta.title as string) || extractTitle(html),\n\t\t\tbody: stripHtmlTags(html),\n\t\t\tmarkdown: htmlToMarkdown(html),\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`[reroute/llms] Failed to import component ${componentPath}:`,\n\t\t\terror,\n\t\t);\n\t\treturn null;\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\tconst collectionData = await loadCollectionItem(cwd, pathname, isWatchMode);\n\t\tif (!collectionData) return null;\n\n\t\tconst { item, collection } = collectionData;\n\t\tconst slug = item.slug || item.name;\n\t\tif (!slug) return null;\n\n\t\tconst componentPath = await findComponentPath(clientDir, collection, slug);\n\t\tif (!componentPath) return null;\n\n\t\tconst meta = item.meta || {};\n\n\t\tif (componentPath.endsWith('.md') || componentPath.endsWith('.mdx')) {\n\t\t\treturn await extractMarkdownContent(componentPath, meta);\n\t\t}\n\n\t\treturn await extractComponentContent(componentPath, meta, isWatchMode);\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",
|
|
49
49
|
"import { pathToFileURL } from 'node:url';\nimport type { LLMsOptions } from '../config';\nimport { join } from '../ssr/lib/path';\nimport type { Doc, SSR } 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\nasync function loadCollectionModule(\n\tcwd: string,\n\tcollection: string,\n\tisWatchMode: boolean,\n): Promise<Doc[] | null> {\n\tconst collectionFile = join(\n\t\tcwd,\n\t\t'.reroute',\n\t\t'collections',\n\t\t`${collection}.js`,\n\t);\n\tconst exists = await Bun.file(collectionFile).exists();\n\n\tif (!exists) return null;\n\n\tconst url = `${pathToFileURL(collectionFile).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\tconst mod = await import(url);\n\treturn mod.items || [];\n}\n\nfunction createRouteEntriesFromItems(\n\titems: Doc[],\n\tcollection: string,\n): RouteEntry[] {\n\tconst routes: RouteEntry[] = [];\n\n\tfor (const item of items) {\n\t\tconst href = String(item.href || '');\n\t\tif (href) {\n\t\t\tconst title = item.meta?.title || item.meta?.name || item.name;\n\t\t\troutes.push({\n\t\t\t\tpath: href,\n\t\t\t\tsection: collection,\n\t\t\t\ttitle,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn routes;\n}\n\nfunction sortRoutesByDate(routes: RouteEntry[], items: Doc[]): void {\n\troutes.sort((a, b) => {\n\t\tconst aItem = items.find((i: Doc) => i.href === a.path);\n\t\tconst bItem = items.find((i: Doc) => i.href === b.path);\n\n\t\tconst aDate = aItem?.meta?.date;\n\t\tconst bDate = bItem?.meta?.date;\n\n\t\tif (aDate && bDate) {\n\t\t\treturn new Date(bDate).getTime() - new Date(aDate).getTime();\n\t\t}\n\n\t\treturn 0;\n\t});\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\tif (llmsConfig?.excludeCollections?.includes(collection)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst items = await loadCollectionModule(cwd, collection, isWatchMode);\n\t\t\tif (!items) continue;\n\n\t\t\tconst routes = createRouteEntriesFromItems(items, collection);\n\n\t\t\tif (routes.length > 0) {\n\t\t\t\tsortRoutesByDate(routes, items);\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\nasync function loadRouteModule(\n\tcwd: string,\n\troutePath: string,\n\tisWatchMode: boolean,\n): Promise<Doc | null> {\n\ttry {\n\t\tconst abs = join(cwd, 'src', 'client', 'routes', routePath);\n\t\tconst modUrl = `${pathToFileURL(abs).href}${isWatchMode ? `?t=${Date.now()}` : ''}`;\n\t\treturn (await import(modUrl)) as Doc;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function callDataFunction(\n\tdataFn: (ctx: Doc) => unknown | Promise<unknown>,\n\troutePath: string,\n): Promise<unknown> {\n\tconst mockSet = { status: 200 };\n\treturn await dataFn({\n\t\tpathname: routePath,\n\t\tparams: {},\n\t\tset: mockSet,\n\t});\n}\n\nfunction extractIdentifier(item: Record<string, unknown>): string | undefined {\n\treturn (item.version || item.slug || item.id || item.name || item.key) as\n\t\t| string\n\t\t| undefined;\n}\n\nfunction createEntriesFromArray(array: Doc[], routePath: string): RouteEntry[] {\n\tconst entries: RouteEntry[] = [];\n\n\tfor (const item of array) {\n\t\tif (typeof item !== 'object' || item === null) continue;\n\n\t\tconst identifier = extractIdentifier(item);\n\t\tif (identifier) {\n\t\t\tentries.push({\n\t\t\t\tpath: `${routePath}/${identifier}`,\n\t\t\t\tsection: routePath.split('/').filter(Boolean)[0],\n\t\t\t});\n\t\t}\n\t}\n\n\treturn entries;\n}\n\n/**\n * Discover SSR data routes (routes with ssr.data that return arrays)\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: discovering ssr data routes is complex\nexport async function discoverSSRDataRoutes(\n\tcwd: string,\n\tstaticRoutes: RouteEntry[],\n\tisWatchMode: boolean,\n): Promise<Map<string, RouteEntry[]>> {\n\tconst ssrDataRoutes = new Map<string, RouteEntry[]>();\n\n\t// Check for bundled routes first (compiled binary support)\n\tconst bundledRoutes = (globalThis as Record<string, unknown>)\n\t\t.__REROUTE_ROUTES__ as Doc[] | undefined;\n\n\tif (bundledRoutes && Array.isArray(bundledRoutes)) {\n\t\t// In production: use pre-loaded SSR data from bundled routes\n\t\t// Match static routes against bundled routes to get their ssr.data\n\t\tfor (const route of staticRoutes) {\n\t\t\t// Find the matching bundled route by path\n\t\t\tconst bundledRoute = bundledRoutes.find((r) => r?.path === route.path);\n\n\t\t\tif (!bundledRoute) continue;\n\n\t\t\tconst ssr = (bundledRoute 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') continue;\n\n\t\t\tconst result = await callDataFunction(dataFn, route.path);\n\t\t\tconst arrays = findArraysInData(result);\n\n\t\t\tfor (const array of arrays) {\n\t\t\t\tif (array.length === 0) continue;\n\n\t\t\t\tconst entries = createEntriesFromArray(array, route.path);\n\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\tssrDataRoutes.set(route.path, entries);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// Dev mode: dynamically import route modules\n\t\tfor (const route of staticRoutes) {\n\t\t\tconst mod = await loadRouteModule(cwd, route.path, isWatchMode);\n\t\t\tif (!mod) continue;\n\n\t\t\tconst ssr = (mod as Doc)?.ssr as SSR | undefined;\n\t\t\tconst dataFn = ssr?.data;\n\n\t\t\tif (typeof dataFn !== 'function') continue;\n\n\t\t\tconst result = await callDataFunction(dataFn, route.path);\n\t\t\tconst arrays = findArraysInData(result);\n\n\t\t\tfor (const array of arrays) {\n\t\t\t\tif (array.length === 0) continue;\n\n\t\t\t\tconst entries = createEntriesFromArray(array, route.path);\n\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\tssrDataRoutes.set(route.path, entries);\n\t\t\t\t}\n\t\t\t}\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\nfunction addIndexHeader(parts: string[], llmsConfig?: LLMsOptions): void {\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\nfunction groupStaticRoutes(\n\tstaticRoutes: RouteEntry[],\n\tllmsConfig?: LLMsOptions,\n): { sections: Map<string, RouteEntry[]>; rootRoutes: RouteEntry[] } {\n\tconst sections = new Map<string, RouteEntry[]>();\n\tconst rootRoutes: RouteEntry[] = [];\n\n\tfor (const route of staticRoutes) {\n\t\tif (shouldExcludeRoute(route.path, llmsConfig?.excludeRoutes)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (route.path === '/') {\n\t\t\trootRoutes.push(route);\n\t\t\tcontinue;\n\t\t}\n\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\treturn { sections, rootRoutes };\n}\n\nfunction formatRouteUrl(routePath: string, baseUrl: string): string {\n\tconst urlPath = routePath === '/' ? '/index' : routePath;\n\treturn `${baseUrl}${urlPath}.txt`;\n}\n\nfunction getRouteTitle(route: RouteEntry): string {\n\treturn (\n\t\troute.title ||\n\t\t(route.path === '/' ? 'Home' : route.path.split('/').pop() || 'Page')\n\t);\n}\n\nfunction addRootRoutes(\n\tparts: string[],\n\trootRoutes: RouteEntry[],\n\tbaseUrl: string,\n\tisSingleCollection: boolean,\n): void {\n\tif (isSingleCollection || rootRoutes.length === 0) return;\n\n\tfor (const route of rootRoutes) {\n\t\tconst title = getRouteTitle(route);\n\t\tconst url = formatRouteUrl(route.path, baseUrl);\n\t\tparts.push(`- [${title}](${url})`);\n\t}\n\tparts.push('');\n}\n\nfunction addCollectionSection(\n\tparts: string[],\n\tcollection: string,\n\troutes: RouteEntry[],\n\tbaseUrl: string,\n\tllmsConfig?: LLMsOptions,\n): void {\n\tconst filteredRoutes = routes.filter(\n\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t);\n\n\tif (filteredRoutes.length === 0) return;\n\n\tconst sectionName = collection.charAt(0).toUpperCase() + collection.slice(1);\n\tparts.push(`## ${sectionName}`);\n\tparts.push('');\n\n\tfor (const route of filteredRoutes) {\n\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\tparts.push(`- [${title}](${url})`);\n\t}\n\tparts.push('');\n}\n\nfunction shouldIncludeSection(\n\tsection: string,\n\tisSingleCollection: boolean,\n\ttargetCollection: string | null,\n): boolean {\n\treturn !isSingleCollection || section === targetCollection;\n}\n\nfunction addSSRDataSection(\n\tparts: string[],\n\troutePattern: string,\n\troutes: RouteEntry[],\n\tbaseUrl: string,\n\tisSingleCollection: boolean,\n\ttargetCollection: string | null,\n\tllmsConfig?: LLMsOptions,\n): void {\n\tconst routeSection = routePattern.split('/').filter(Boolean)[0];\n\n\tif (\n\t\t!shouldIncludeSection(routeSection, isSingleCollection, targetCollection)\n\t) {\n\t\treturn;\n\t}\n\n\tconst filteredRoutes = routes.filter(\n\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t);\n\n\tif (filteredRoutes.length === 0) return;\n\n\tconst sectionName =\n\t\trouteSection?.charAt(0).toUpperCase() + routeSection?.slice(1) || 'Content';\n\tparts.push(`## ${sectionName}`);\n\tparts.push('');\n\n\tfor (const route of filteredRoutes) {\n\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\tparts.push(`- [${title}](${url})`);\n\t}\n\tparts.push('');\n}\n\nfunction addStaticSection(\n\tparts: string[],\n\tsection: string,\n\troutes: RouteEntry[],\n\tbaseUrl: string,\n\tisSingleCollection: boolean,\n\ttargetCollection: string | null,\n\tcollectionsMap: Map<string, RouteEntry[]>,\n\tllmsConfig?: LLMsOptions,\n): void {\n\tif (!shouldIncludeSection(section, isSingleCollection, targetCollection)) {\n\t\treturn;\n\t}\n\n\tconst filteredRoutes = routes.filter(\n\t\t(r) => !shouldExcludeRoute(r.path, llmsConfig?.excludeRoutes),\n\t);\n\n\tif (filteredRoutes.length === 0 || collectionsMap.has(section)) return;\n\n\tconst sectionName = section.charAt(0).toUpperCase() + section.slice(1);\n\tparts.push(`## ${sectionName}`);\n\tparts.push('');\n\n\tfor (const route of filteredRoutes) {\n\t\tconst title = route.title || route.path.split('/').pop() || 'Untitled';\n\t\tconst url = `${baseUrl}${route.path}.txt`;\n\t\tparts.push(`- [${title}](${url})`);\n\t}\n\tparts.push('');\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\tcollections: string[];\n\tbaseUrl: string;\n\tisWatchMode: boolean;\n\tllmsConfig?: LLMsOptions;\n}): Promise<string> {\n\tconst { cwd, collections, baseUrl, isWatchMode, llmsConfig } = options;\n\n\tconst parts: string[] = [];\n\taddIndexHeader(parts, llmsConfig);\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\tstaticRoutes,\n\t\tisWatchMode,\n\t);\n\n\tconst isSingleCollection = collections.length === 1;\n\tconst targetCollection = isSingleCollection ? collections[0] : null;\n\n\tconst { sections, rootRoutes } = groupStaticRoutes(staticRoutes, llmsConfig);\n\n\taddRootRoutes(parts, rootRoutes, baseUrl, isSingleCollection);\n\n\tfor (const [collection, routes] of collectionsMap.entries()) {\n\t\tif (routes.length > 0) {\n\t\t\taddCollectionSection(parts, collection, routes, baseUrl, llmsConfig);\n\t\t}\n\t}\n\n\tfor (const [routePattern, routes] of ssrDataRoutes.entries()) {\n\t\tif (routes.length > 0) {\n\t\t\taddSSRDataSection(\n\t\t\t\tparts,\n\t\t\t\troutePattern,\n\t\t\t\troutes,\n\t\t\t\tbaseUrl,\n\t\t\t\tisSingleCollection,\n\t\t\t\ttargetCollection,\n\t\t\t\tllmsConfig,\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const [section, routes] of sections.entries()) {\n\t\tif (routes.length > 0) {\n\t\t\taddStaticSection(\n\t\t\t\tparts,\n\t\t\t\tsection,\n\t\t\t\troutes,\n\t\t\t\tbaseUrl,\n\t\t\t\tisSingleCollection,\n\t\t\t\ttargetCollection,\n\t\t\t\tcollectionsMap,\n\t\t\t\tllmsConfig,\n\t\t\t);\n\t\t}\n\t}\n\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",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"export * from './discovery';\nexport * from './generator';\n",
|
|
62
62
|
"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\nfunction normalizeRouteLocation(loc: string): string {\n\tif (loc === '/index') {\n\t\treturn '/';\n\t}\n\tif (loc.endsWith('/index')) {\n\t\treturn loc.slice(0, -6) || '/';\n\t}\n\treturn loc.replace(/\\.(tsx?|jsx?)$/, '');\n}\n\nfunction shouldIncludeRoute(\n\tpattern: string,\n\texcludeRoutes?: string[],\n): boolean {\n\tif (pattern.includes(':')) return false;\n\tif (excludeRoutes?.includes(pattern)) return false;\n\treturn true;\n}\n\nfunction createStaticEntry(\n\troute: { pattern: string; changefreq?: string; priority?: number },\n\tbaseUrl: string,\n\tdefaultChangefreq: string,\n\tdefaultPriority: number,\n): SitemapEntry {\n\tconst loc = normalizeRouteLocation(route.pattern);\n\n\treturn {\n\t\tloc: `${baseUrl}${loc}`,\n\t\tchangefreq: (route.changefreq ||\n\t\t\tdefaultChangefreq) as SitemapEntry['changefreq'],\n\t\tpriority:\n\t\t\troute.priority !== undefined\n\t\t\t\t? route.priority\n\t\t\t\t: loc === '/'\n\t\t\t\t\t? 1.0\n\t\t\t\t\t: defaultPriority,\n\t};\n}\n\nfunction collectAllEntries(\n\tdiscovery: SitemapDiscoveryResult,\n\tbaseUrl: string,\n\tchangefreq: string,\n\tpriority: number,\n\texcludeRoutes?: string[],\n): SitemapEntry[] {\n\tconst allEntries: SitemapEntry[] = [];\n\n\tfor (const route of discovery.staticRoutes) {\n\t\tif (shouldIncludeRoute(route.pattern, excludeRoutes)) {\n\t\t\tallEntries.push(createStaticEntry(route, baseUrl, changefreq, priority));\n\t\t}\n\t}\n\n\tfor (const [_collection, entries] of discovery.collections.entries()) {\n\t\tallEntries.push(...entries);\n\t}\n\n\tfor (const [_pattern, entries] of discovery.ssrDataRoutes.entries()) {\n\t\tallEntries.push(...entries);\n\t}\n\n\treturn allEntries;\n}\n\nfunction sortEntries(entries: SitemapEntry[]): void {\n\tentries.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\nfunction createPaginatedSitemaps(\n\tallEntries: SitemapEntry[],\n\tmaxUrlsPerPage: number,\n\tbaseUrl: string,\n): SitemapResult {\n\tconst pages: SitemapPage[] = [];\n\tlet pageNum = 0;\n\n\tfor (let i = 0; i < allEntries.length; i += maxUrlsPerPage) {\n\t\tconst pageEntries = allEntries.slice(i, i + maxUrlsPerPage);\n\t\tconst xml = generateSitemapXML(pageEntries);\n\t\tconst filename = `sitemap-${pageNum}.xml`;\n\n\t\tpages.push({\n\t\t\tfilename,\n\t\t\txml,\n\t\t\tentryCount: pageEntries.length,\n\t\t});\n\t\tpageNum++;\n\t}\n\n\tconst indexXml = generateSitemapIndexXML(pages, baseUrl);\n\treturn { pages, indexXml, needsIndex: true };\n}\n\nfunction createSingleSitemap(allEntries: SitemapEntry[]): SitemapResult {\n\tconst xml = generateSitemapXML(allEntries);\n\tconst pages: SitemapPage[] = [\n\t\t{\n\t\t\tfilename: 'sitemap.xml',\n\t\t\txml,\n\t\t\tentryCount: allEntries.length,\n\t\t},\n\t];\n\n\treturn { pages, needsIndex: false };\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 = collectAllEntries(\n\t\tdiscovery,\n\t\tbaseUrl,\n\t\tchangefreq,\n\t\tpriority,\n\t\toptions.excludeRoutes,\n\t);\n\n\tsortEntries(allEntries);\n\n\tconst needsIndex = allEntries.length > maxUrlsPerPage;\n\n\tif (needsIndex) {\n\t\treturn createPaginatedSitemaps(allEntries, maxUrlsPerPage, baseUrl);\n\t}\n\n\treturn createSingleSitemap(allEntries);\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",
|
|
63
63
|
"export * from './discovery';\nexport * from './generator';\n",
|
|
64
|
-
"import type { Span } from '@opentelemetry/api';\nimport { cloneElement, type ReactElement } from 'react';\nimport { renderToReadableStream } from 'react-dom/server';\nimport {\n\tgetTraceContextForInjection,\n\twithParentSpan,\n\twithSpan,\n} from 'reroute-js/telemetry/server';\nimport { loadConfig, type OGImageOptions } from '../config';\nimport {\n\tcreateDataScript,\n\tcreateFeedsScript,\n\tcreateLlmsScript,\n\ttype Doc,\n\tgenerateCollectionScripts,\n\tperformSSRSetup,\n} from './lib';\nimport { deduplicateMetaTags, loadIndexHtml } from './lib/html';\nimport { isThenable } from './lib/imports';\nimport { splitTemplate } from './lib/template';\n\ntype StreamingSSROptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\tcachedCollections?: Record<string, unknown[]>;\n\tcachedTailwindCSS?: string;\n\tcachedIndexHtml?: string;\n\tdebug?: boolean;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n\tparentSpan?: Span | null;\n\t/** Request headers from the incoming HTTP request */\n\theaders?: Record<string, string>;\n\t/** Maximum streaming timeout in milliseconds (default: 120000 / 120s) */\n\ttimeout?: number;\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 debug = options.debug ?? false;\n\tconst t0 = debug ? performance.now() : 0;\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\tif (debug) console.log(`[renderStream] ${pathname} - start: 0ms`);\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\tparentSpan: options.parentSpan,\n\t\t\tbundleUrl,\n\t\t\tmaxAge,\n\t\t\tsearchParams,\n\t\t\togConfig,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tautoCanonical: options.autoCanonical,\n\t\t\tcachedCollections: options.cachedCollections,\n\t\t\tcachedTailwindCSS: options.cachedTailwindCSS,\n\t\t\tdebug,\n\t\t\theaders: options.headers,\n\t\t},\n\t\ttrue, // streaming mode\n\t);\n\tif (debug)\n\t\tconsole.log(\n\t\t\t`[renderStream] ${pathname} - performSSRSetup: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t);\n\n\t// Determine status (only override if value is set)\n\tlet statusOverride = setup.preloadStatusOverride;\n\tif (setup.statusContainer.value !== undefined) {\n\t\tstatusOverride = setup.statusContainer.value;\n\t}\n\tif (setup.metadataResult.statusOverride !== undefined) {\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 (use cached if available)\n\tconst usingCache = !!options.cachedIndexHtml;\n\tconst { htmlHead, rootStart, rootEnd, htmlTail } = await withSpan(\n\t\t'ssr.load.template',\n\t\tasync (span) => {\n\t\t\tconst template = options.cachedIndexHtml\n\t\t\t\t? options.cachedIndexHtml\n\t\t\t\t: await loadIndexHtml(clientDir);\n\n\t\t\tspan.setAttribute('reroute.cached', usingCache);\n\t\t\tspan.setAttribute('reroute.template.size', template.length);\n\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[renderStream] ${pathname} - loadIndexHtml (cached: ${usingCache}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\n\t\t\tconst parts = splitTemplate(template, appId);\n\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[renderStream] ${pathname} - splitTemplate: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...parts,\n\t\t\t};\n\t\t},\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// Load config to get browser telemetry settings\n\tconst config = await loadConfig(cwd);\n\tconst browserTelemetryConfigRaw = config.telemetry?.browser as\n\t\t| Record<string, unknown>\n\t\t| undefined;\n\n\t// Serialize browser telemetry config (convert functions to strings for JSON)\n\tconst { serializeBrowserTelemetryConfig } = await import('./lib/serialize');\n\tconst browserTelemetryConfig = serializeBrowserTelemetryConfig(\n\t\tbrowserTelemetryConfigRaw,\n\t);\n\n\t// Extract trace context from parent span for distributed tracing\n\tconst traceContext = getTraceContextForInjection(options.parentSpan);\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\tdebug,\n\t\tssrData: setup.ssrData,\n\t\tssrError: setup.ssrError,\n\t\tbyCollectionForSSR: setup.byCollectionForSSR,\n\t\tpreloadHydrationScript: setup.preloadHydrationScript,\n\t\tbrowserTelemetryConfig,\n\t\ttraceContext,\n\t\tparentSpan: options.parentSpan,\n\t\ttimeout: options.timeout,\n\t});\n\n\tif (debug)\n\t\tconsole.log(\n\t\t\t`[renderStream] ${pathname} - returning stream: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t);\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\tdebug: boolean;\n\tssrData: Record<string, unknown>;\n\tssrError?: string;\n\tbyCollectionForSSR: Record<string, unknown[]>;\n\tpreloadHydrationScript: string;\n\tbrowserTelemetryConfig?: Record<string, unknown>;\n\ttraceContext?: { traceparent?: string; tracestate?: string };\n\tparentSpan?: Span | null;\n\ttimeout?: number;\n};\n\n/**\n * Stream SSR content progressively\n * NOTE: This runs during the HTTP request lifecycle - Elysia waits for the stream\n * to complete before calling onAfterResponse\n */\nasync function streamSSRContent(\n\twriter: WritableStreamDefaultWriter<Uint8Array>,\n\tencoder: TextEncoder,\n\tctx: StreamContext,\n): Promise<void> {\n\t// Execute within parent span context to properly nest spans\n\treturn withParentSpan(ctx.parentSpan, async () => {\n\t\tconst t0 = ctx.debug ? performance.now() : 0;\n\t\t// Set a maximum streaming timeout to prevent server hangs\n\t\t// This ensures the stream always completes even if React is waiting for promises\n\t\t// Default to 120 seconds, but allow configuration for long operations like AI analysis\n\t\tconst STREAM_TIMEOUT_MS = ctx.timeout ?? 120000;\n\t\tlet streamTimedOut = false;\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n\t\tconst cleanup = () => {\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\ttimeoutId = null;\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\t// 1. Send HTML head immediately (shell)\n\t\t\tconst combinedHead = deduplicateMetaTags(\n\t\t\t\t[ctx.inlineStyleTag, ctx.head, ctx.extraHead]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('\\n'),\n\t\t\t);\n\t\t\t// Inject combined head BEFORE </head> (not after)\n\t\t\tconst headWithLangAndContent = ctx.headWithLang\n\t\t\t\t.replace(/<html([^>]*)>/i, `<html$1 lang=\"${ctx.pageLang}\">`)\n\t\t\t\t.replace(\n\t\t\t\t\t/<\\/head>/i,\n\t\t\t\t\t`${combinedHead ? `${combinedHead}\\n` : ''}</head>`,\n\t\t\t\t);\n\t\t\tconst headContent = `${headWithLangAndContent}`;\n\t\t\tawait writer.write(encoder.encode(headContent));\n\t\t\tif (ctx.debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Stream] ${ctx.pathname} - first byte written: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\n\t\t\t// 2. Send root div start\n\t\t\tawait writer.write(encoder.encode(ctx.rootStart));\n\n\t\t\t// 3. Stream React content (both create and pipe)\n\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Stream creation and piping requires timeout handling\n\t\t\tawait withSpan('ssr.document.stream', async (span) => {\n\t\t\t\tconst componentWithPathname = cloneElement(ctx.rootComponent, {\n\t\t\t\t\tpathname: ctx.pathname,\n\t\t\t\t\tsearchParams: ctx.searchParams,\n\t\t\t\t} as Doc);\n\n\t\t\t\tspan.setAttribute('reroute.pathname', ctx.pathname);\n\n\t\t\t\tlet streamError: Error | null = null;\n\t\t\t\tconst streamPromise = renderToReadableStream(componentWithPathname, {\n\t\t\t\t\tonError(error) {\n\t\t\t\t\t\tconsole.error('[reroute] SSR stream error:', error);\n\t\t\t\t\t\tstreamError =\n\t\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t},\n\t\t\t\t}).catch((err) => {\n\t\t\t\t\tstreamError = err;\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\n\t\t\t\tconst reactStream = await streamPromise;\n\t\t\t\tif (streamError) throw streamError;\n\n\t\t\t\t// Pipe React stream to writer\n\t\t\t\t// Set up streaming timeout - if React takes too long, force close\n\t\t\t\tconst streamTimeoutPromise = new Promise<{\n\t\t\t\t\tdone: true;\n\t\t\t\t\tvalue: undefined;\n\t\t\t\t}>((resolve) => {\n\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\tconsole.warn(\n\t\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\t);\n\t\t\t\t\t\tstreamTimedOut = true;\n\t\t\t\t\t\tresolve({ done: true, value: undefined });\n\t\t\t\t\t}, STREAM_TIMEOUT_MS);\n\t\t\t\t});\n\n\t\t\t\tconst reader = reactStream.getReader();\n\t\t\t\tlet chunkCount = 0;\n\t\t\t\twhile (true) {\n\t\t\t\t\t// Race between getting next chunk and timeout\n\t\t\t\t\tconst result = await Promise.race([\n\t\t\t\t\t\treader.read(),\n\t\t\t\t\t\tstreamTimeoutPromise,\n\t\t\t\t\t]);\n\n\t\t\t\t\tif (result.done || streamTimedOut) {\n\t\t\t\t\t\t// Release the reader lock before breaking\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treader.releaseLock();\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (result.value) {\n\t\t\t\t\t\t// Decode, obfuscate emails, and re-encode if needed\n\t\t\t\t\t\tawait writer.write(result.value);\n\t\t\t\t\t\tchunkCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcleanup();\n\n\t\t\t\tspan.setAttributes({\n\t\t\t\t\t'reroute.stream.chunks': chunkCount,\n\t\t\t\t\t'reroute.stream.timedOut': streamTimedOut,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// 4. Close root div\n\t\t\tawait writer.write(encoder.encode(ctx.rootEnd));\n\n\t\t\t// 5. Generate scripts\n\t\t\tconst allScripts = await withSpan(\n\t\t\t\t'ssr.generate.scripts',\n\t\t\t\tasync (span) => {\n\t\t\t\t\tconst scripts = buildStreamingScripts(ctx);\n\t\t\t\t\tspan.setAttribute('reroute.script_size', scripts.length);\n\t\t\t\t\treturn scripts;\n\t\t\t\t},\n\t\t\t);\n\t\t\tawait writer.write(encoder.encode(allScripts + ctx.htmlTail));\n\t\t\tawait writer.close();\n\t\t} catch (error) {\n\t\t\tcleanup();\n\t\t\tconsole.error('[reroute] Stream error:', error);\n\t\t\ttry {\n\t\t\t\tawait writer.abort(error);\n\t\t\t} catch {\n\t\t\t\t// Writer might already be closed\n\t\t\t}\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\tctx.pathname,\n\t\tctx.browserTelemetryConfig,\n\t\tctx.traceContext,\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",
|
|
64
|
+
"import type { Span } from '@opentelemetry/api';\nimport { cloneElement, type ReactElement } from 'react';\nimport { renderToReadableStream } from 'react-dom/server';\nimport {\n\tgetTraceContextForInjection,\n\twithParentSpan,\n\twithSpan,\n} from 'reroute-js/telemetry/server';\nimport { loadConfig, type OGImageOptions, type OGOptions } from '../config';\nimport {\n\tcreateDataScript,\n\tcreateFeedsScript,\n\tcreateLlmsScript,\n\ttype Doc,\n\tgenerateCollectionScripts,\n\tperformSSRSetup,\n} from './lib';\nimport {\n\tdeduplicateMetaTags,\n\tloadIndexHtml,\n\tremoveOverriddenMetaTags,\n} from './lib/html';\nimport { isThenable } from './lib/imports';\nimport { splitTemplate } from './lib/template';\n\ntype StreamingSSROptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\tcachedCollections?: Record<string, unknown[]>;\n\tcachedTailwindCSS?: string;\n\tcachedIndexHtml?: string;\n\tdebug?: boolean;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tmaxAge?: number;\n\tsearchParams?: URLSearchParams;\n\togConfig?: OGImageOptions;\n\togMetaConfig?: OGOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n\tparentSpan?: Span | null;\n\t/** Request headers from the incoming HTTP request */\n\theaders?: Record<string, string>;\n\t/** Maximum streaming timeout in milliseconds (default: 120000 / 120s) */\n\ttimeout?: number;\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 debug = options.debug ?? false;\n\tconst t0 = debug ? performance.now() : 0;\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\tif (debug) console.log(`[renderStream] ${pathname} - start: 0ms`);\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\tparentSpan: options.parentSpan,\n\t\t\tbundleUrl,\n\t\t\tmaxAge,\n\t\t\tsearchParams,\n\t\t\togConfig,\n\t\t\togMetaConfig: options.ogMetaConfig,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tautoCanonical: options.autoCanonical,\n\t\t\tcachedCollections: options.cachedCollections,\n\t\t\tcachedTailwindCSS: options.cachedTailwindCSS,\n\t\t\tdebug,\n\t\t\theaders: options.headers,\n\t\t},\n\t\ttrue, // streaming mode\n\t);\n\tif (debug)\n\t\tconsole.log(\n\t\t\t`[renderStream] ${pathname} - performSSRSetup: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t);\n\n\t// Determine status (only override if value is set)\n\tlet statusOverride = setup.preloadStatusOverride;\n\tif (setup.statusContainer.value !== undefined) {\n\t\tstatusOverride = setup.statusContainer.value;\n\t}\n\tif (setup.metadataResult.statusOverride !== undefined) {\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 (use cached if available)\n\tconst usingCache = !!options.cachedIndexHtml;\n\tconst { htmlHead, rootStart, rootEnd, htmlTail } = await withSpan(\n\t\t'ssr.load.template',\n\t\tasync (span) => {\n\t\t\tconst template = options.cachedIndexHtml\n\t\t\t\t? options.cachedIndexHtml\n\t\t\t\t: await loadIndexHtml(clientDir);\n\n\t\t\tspan.setAttribute('reroute.cached', usingCache);\n\t\t\tspan.setAttribute('reroute.template.size', template.length);\n\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[renderStream] ${pathname} - loadIndexHtml (cached: ${usingCache}): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\n\t\t\tconst parts = splitTemplate(template, appId);\n\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[renderStream] ${pathname} - splitTemplate: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...parts,\n\t\t\t};\n\t\t},\n\t);\n\n\t// Build head with lang attribute (replace existing lang or add new one)\n\tconst pageLang = setup.metadataResult.pageLang || lang;\n\tlet headWithLang = htmlHead.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(\n\t\t\t\t\t/lang\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]+)/i,\n\t\t\t\t\t`lang=\"${pageLang}\"`,\n\t\t\t\t)\n\t\t\t: `${attrs} lang=\"${pageLang}\"`;\n\t\treturn `<html${newAttrs}>`;\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// Remove OG/Twitter meta tags from template that will be overridden\n\theadWithLang = removeOverriddenMetaTags(headWithLang, extraHead);\n\n\t// Load config to get browser telemetry settings\n\tconst config = await loadConfig(cwd);\n\tconst browserTelemetryConfigRaw = config.telemetry?.browser as\n\t\t| Record<string, unknown>\n\t\t| undefined;\n\n\t// Serialize browser telemetry config (convert functions to strings for JSON)\n\tconst { serializeBrowserTelemetryConfig } = await import('./lib/serialize');\n\tconst browserTelemetryConfig = serializeBrowserTelemetryConfig(\n\t\tbrowserTelemetryConfigRaw,\n\t);\n\n\t// Extract trace context from parent span for distributed tracing\n\tconst traceContext = getTraceContextForInjection(options.parentSpan);\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\tdebug,\n\t\tssrData: setup.ssrData,\n\t\tssrError: setup.ssrError,\n\t\tbyCollectionForSSR: setup.byCollectionForSSR,\n\t\tpreloadHydrationScript: setup.preloadHydrationScript,\n\t\tbrowserTelemetryConfig,\n\t\ttraceContext,\n\t\tparentSpan: options.parentSpan,\n\t\ttimeout: options.timeout,\n\t});\n\n\tif (debug)\n\t\tconsole.log(\n\t\t\t`[renderStream] ${pathname} - returning stream: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t);\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\tdebug: boolean;\n\tssrData: Record<string, unknown>;\n\tssrError?: string;\n\tbyCollectionForSSR: Record<string, unknown[]>;\n\tpreloadHydrationScript: string;\n\tbrowserTelemetryConfig?: Record<string, unknown>;\n\ttraceContext?: { traceparent?: string; tracestate?: string };\n\tparentSpan?: Span | null;\n\ttimeout?: number;\n};\n\n/**\n * Stream SSR content progressively\n * NOTE: This runs during the HTTP request lifecycle - Elysia waits for the stream\n * to complete before calling onAfterResponse\n */\nasync function streamSSRContent(\n\twriter: WritableStreamDefaultWriter<Uint8Array>,\n\tencoder: TextEncoder,\n\tctx: StreamContext,\n): Promise<void> {\n\t// Execute within parent span context to properly nest spans\n\treturn withParentSpan(ctx.parentSpan, async () => {\n\t\tconst t0 = ctx.debug ? performance.now() : 0;\n\t\t// Set a maximum streaming timeout to prevent server hangs\n\t\t// This ensures the stream always completes even if React is waiting for promises\n\t\t// Default to 120 seconds, but allow configuration for long operations like AI analysis\n\t\tconst STREAM_TIMEOUT_MS = ctx.timeout ?? 120000;\n\t\tlet streamTimedOut = false;\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n\t\tconst cleanup = () => {\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\ttimeoutId = null;\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\t// 1. Send HTML head immediately (shell)\n\t\t\tconst combinedHead = deduplicateMetaTags(\n\t\t\t\t[ctx.inlineStyleTag, ctx.head, ctx.extraHead]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join('\\n'),\n\t\t\t);\n\t\t\t// Inject combined head BEFORE </head> (lang is already handled in headWithLang)\n\t\t\tconst headWithLangAndContent = ctx.headWithLang.replace(\n\t\t\t\t/<\\/head>/i,\n\t\t\t\t`${combinedHead ? `${combinedHead}\\n` : ''}</head>`,\n\t\t\t);\n\t\t\tconst headContent = `${headWithLangAndContent}`;\n\t\t\tawait writer.write(encoder.encode(headContent));\n\t\t\tif (ctx.debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[Stream] ${ctx.pathname} - first byte written: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\n\t\t\t// 2. Send root div start\n\t\t\tawait writer.write(encoder.encode(ctx.rootStart));\n\n\t\t\t// 3. Stream React content (both create and pipe)\n\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Stream creation and piping requires timeout handling\n\t\t\tawait withSpan('ssr.document.stream', async (span) => {\n\t\t\t\tconst componentWithPathname = cloneElement(ctx.rootComponent, {\n\t\t\t\t\tpathname: ctx.pathname,\n\t\t\t\t\tsearchParams: ctx.searchParams,\n\t\t\t\t} as Doc);\n\n\t\t\t\tspan.setAttribute('reroute.pathname', ctx.pathname);\n\n\t\t\t\tlet streamError: Error | null = null;\n\t\t\t\tconst streamPromise = renderToReadableStream(componentWithPathname, {\n\t\t\t\t\tonError(error) {\n\t\t\t\t\t\tconsole.error('[reroute] SSR stream error:', error);\n\t\t\t\t\t\tstreamError =\n\t\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t},\n\t\t\t\t}).catch((err) => {\n\t\t\t\t\tstreamError = err;\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\n\t\t\t\tconst reactStream = await streamPromise;\n\t\t\t\tif (streamError) throw streamError;\n\n\t\t\t\t// Pipe React stream to writer\n\t\t\t\t// Set up streaming timeout - if React takes too long, force close\n\t\t\t\tconst streamTimeoutPromise = new Promise<{\n\t\t\t\t\tdone: true;\n\t\t\t\t\tvalue: undefined;\n\t\t\t\t}>((resolve) => {\n\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\tconsole.warn(\n\t\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\t);\n\t\t\t\t\t\tstreamTimedOut = true;\n\t\t\t\t\t\tresolve({ done: true, value: undefined });\n\t\t\t\t\t}, STREAM_TIMEOUT_MS);\n\t\t\t\t});\n\n\t\t\t\tconst reader = reactStream.getReader();\n\t\t\t\tlet chunkCount = 0;\n\t\t\t\twhile (true) {\n\t\t\t\t\t// Race between getting next chunk and timeout\n\t\t\t\t\tconst result = await Promise.race([\n\t\t\t\t\t\treader.read(),\n\t\t\t\t\t\tstreamTimeoutPromise,\n\t\t\t\t\t]);\n\n\t\t\t\t\tif (result.done || streamTimedOut) {\n\t\t\t\t\t\t// Release the reader lock before breaking\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treader.releaseLock();\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (result.value) {\n\t\t\t\t\t\t// Decode, obfuscate emails, and re-encode if needed\n\t\t\t\t\t\tawait writer.write(result.value);\n\t\t\t\t\t\tchunkCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcleanup();\n\n\t\t\t\tspan.setAttributes({\n\t\t\t\t\t'reroute.stream.chunks': chunkCount,\n\t\t\t\t\t'reroute.stream.timedOut': streamTimedOut,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// 4. Close root div\n\t\t\tawait writer.write(encoder.encode(ctx.rootEnd));\n\n\t\t\t// 5. Generate scripts\n\t\t\tconst allScripts = await withSpan(\n\t\t\t\t'ssr.generate.scripts',\n\t\t\t\tasync (span) => {\n\t\t\t\t\tconst scripts = buildStreamingScripts(ctx);\n\t\t\t\t\tspan.setAttribute('reroute.script_size', scripts.length);\n\t\t\t\t\treturn scripts;\n\t\t\t\t},\n\t\t\t);\n\t\t\tawait writer.write(encoder.encode(allScripts + ctx.htmlTail));\n\t\t\tawait writer.close();\n\t\t} catch (error) {\n\t\t\tcleanup();\n\t\t\tconsole.error('[reroute] Stream error:', error);\n\t\t\ttry {\n\t\t\t\tawait writer.abort(error);\n\t\t\t} catch {\n\t\t\t\t// Writer might already be closed\n\t\t\t}\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\tctx.pathname,\n\t\tctx.browserTelemetryConfig,\n\t\tctx.traceContext,\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",
|
|
65
65
|
"export * from './lib';\nexport * from './render';\nexport * from './stream';\n",
|
|
66
66
|
"export * from './bundler';\nexport * from './config';\nexport * from './content';\nexport * from './llms';\nexport * from './og';\nexport * from './robots';\nexport * from './rss';\nexport * from './sitemap';\nexport * from './ssr';\n",
|
|
67
67
|
"export * from './src';\n",
|
|
68
|
-
"// All file watching happens in the CLI (reroute gen --watch)\n\nimport { existsSync } from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport type { Elysia } from 'elysia';\nimport { type ComponentType, createElement, type ReactElement } from 'react';\nimport { discoverCollections, LRUCache, loadConfig } from 'reroute-js/core';\nimport { initImageCache } from './libs/image';\nimport { registerArtifactsRoutes } from './routes/artifacts';\nimport { registerContentRoutes } from './routes/content';\nimport { registerImageRoutes } from './routes/image';\nimport {\n\tregisterInternalRoutes,\n\tregisterLiveReloadRoutes,\n} from './routes/internal';\nimport { registerLLMsRoutes } from './routes/llms';\nimport { registerOGRoutes } from './routes/og';\nimport { registerRedirectRoutes } from './routes/redirects';\nimport { registerRobotsRoute } from './routes/robots';\nimport { registerRSSRoutes } from './routes/rss';\nimport { registerSearchRoute } from './routes/search';\nimport { registerSitemapRoutes } from './routes/sitemap';\nimport { registerSSRRoutes } from './routes/ssr';\nimport { registerStaticRoutes } from './routes/static';\n\nconst reroute =\n\t() =>\n\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Plugin initialization is inherently complex\n\tasync (app: Elysia) => {\n\t\tconst cwd =\n\t\t\ttypeof process !== 'undefined' && typeof process.cwd === 'function'\n\t\t\t\t? process.cwd()\n\t\t\t\t: '/';\n\n\t\t// Global HEAD request handler - MUST be first to intercept before Elysia's buggy automatic handling\n\t\t// Elysia has a bug with automatic HEAD handling, so we handle them ourselves\n\t\tapp.onRequest(({ request }) => {\n\t\t\tif (request.method === 'HEAD') {\n\t\t\t\treturn new Response(null, {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\theaders: { 'content-type': 'text/html; charset=utf-8' },\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Load global config\n\t\tconst globalConfig = await loadConfig(cwd);\n\n\t\t// Handle App component (can be ReactElement in plugin or string path in config)\n\t\tlet rootComponent: ReactElement | undefined;\n\n\t\t// Check for pre-bundled App component (set by .reroute/artifacts.ts in compiled binaries)\n\t\tconst globalApp = (globalThis as Record<string, unknown>)\n\t\t\t.__REROUTE_APP_COMPONENT__ as ComponentType | undefined;\n\n\t\tif (globalApp) {\n\t\t\t// Use pre-bundled App component from global (compiled binary)\n\t\t\trootComponent = createElement(globalApp);\n\t\t} else if (globalConfig.app?.src) {\n\t\t\t// Fallback to dynamic import (dev mode)\n\t\t\tconst appPath = globalConfig.app.src.startsWith('/')\n\t\t\t\t? globalConfig.app.src\n\t\t\t\t: `${cwd}/${globalConfig.app.src.replace(/^\\.\\//, '')}`;\n\t\t\tconst AppModule = await import(\n\t\t\t\t`${pathToFileURL(appPath).href}?t=${Date.now()}`\n\t\t\t);\n\t\t\trootComponent = createElement(AppModule.default);\n\t\t}\n\n\t\tif (!rootComponent) {\n\t\t\tconsole.warn(\n\t\t\t\t'[reroute] No app component provided. SSR routes will not be registered.',\n\t\t\t);\n\t\t}\n\n\t\t// Merge: plugin options > global config.options > defaults\n\t\tconst ssrHead = globalConfig.app?.head ?? '';\n\t\tconst ssrLang = globalConfig.app?.lang ?? 'en';\n\t\tconst ssrAppId = globalConfig.app?.appId ?? 'root';\n\n\t\t// Static file serving configuration\n\t\t// Convention: static assets are ALWAYS at /assets/* URL path\n\t\t// - Dev mode: serves from ${cwd}/src/client/assets/\n\t\t// - Prod mode: serves from ${cwd}/.reroute/assets/\n\t\tconst staticAssetsDir = existsSync(`${cwd}/.reroute/assets`)\n\t\t\t? `${cwd}/.reroute/assets`\n\t\t\t: `${cwd}/src/client/assets`;\n\n\t\tconst staticConfig = globalConfig.static ?? {};\n\t\tconst ignorePatterns = staticConfig.ignorePatterns ?? [\n\t\t\t'.DS_Store',\n\t\t\t'.git',\n\t\t\t'.env',\n\t\t];\n\t\tconst staticHeaders = staticConfig.headers;\n\n\t\t// Cache configuration (used for SSR, data endpoints, etc.)\n\t\tconst maxAge = globalConfig.app?.maxAge ?? 3600;\n\t\tconst directive = globalConfig.app?.directive ?? 'public';\n\n\t\t// Static assets can override cache settings or use defaults\n\t\tconst staticMaxAge = staticConfig.maxAge ?? maxAge;\n\t\tconst staticDirective = staticConfig.directive ?? directive;\n\n\t\t// Compression configuration (plugin > config > default: true)\n\t\tconst compression = globalConfig.app?.compression ?? true;\n\n\t\t// Debug mode configuration (plugin > config > default: false)\n\t\tconst debug = globalConfig.app?.debug ?? false;\n\n\t\t// Image optimization configuration (from config file only)\n\t\tconst imageConfig = globalConfig.image ?? {};\n\t\tconst imageMaxAge = imageConfig.maxAge ?? 31536000; // 1 year\n\t\tconst imageAllowedDomains = imageConfig.allowedDomains ?? [];\n\t\tconst imageMaxWidth = imageConfig.maxWidth ?? 3840;\n\t\tconst imageMaxHeight = imageConfig.maxHeight ?? 2160;\n\n\t\t// Bundle caching configuration (plugin > config > default)\n\t\tconst bundleMaxAge = globalConfig.app?.bundleMaxAge ?? 3600; // 1 hour default for main bundle\n\n\t\t// Streaming configuration (from config file only)\n\t\tconst streamingEnabled = globalConfig.streaming?.enabled ?? false;\n\n\t\t// Base URL and canonical URL configuration (plugin > config)\n\t\tconst baseUrl = globalConfig.app?.baseUrl;\n\t\tconst autoCanonical = globalConfig.app?.autoCanonical;\n\n\t\t// Sitemap configuration (from config file only)\n\t\tconst sitemapConfig = globalConfig.sitemap;\n\t\tconst sitemapEnabled = sitemapConfig?.enabled === true;\n\t\tconst sitemapBaseUrl = sitemapConfig?.baseUrl;\n\n\t\t// RSS configuration (plugin > config > disabled by default)\n\t\tconst rssConfig = globalConfig.rss;\n\t\tconst rssEnabled = rssConfig?.enabled === true;\n\t\tconst rssBaseUrl = rssConfig?.baseUrl;\n\n\t\t// OG Image configuration (plugin > config > disabled by default)\n\t\tconst ogConfig = globalConfig.ogImage;\n\t\tconst ogEnabled = ogConfig?.enabled === true;\n\n\t\t// LLMs configuration (plugin > config > disabled by default)\n\t\tconst llmsConfig = globalConfig.llms;\n\t\tconst llmsEnabled = llmsConfig?.enabled === true;\n\n\t\t// Robots configuration (plugin > config > disabled by default)\n\t\tconst robotsConfig = globalConfig.robots;\n\t\tconst robotsEnabled = robotsConfig?.enabled === true;\n\n\t\tconst fileCache = new LRUCache<string, Response>(100);\n\t\tconst dataCache = new LRUCache<string, unknown>(100);\n\t\tconst collectionCache = new LRUCache<string, Response>(50);\n\t\tconst sitemapCache = new LRUCache<string, { xml: string; exp: number }>(20);\n\t\tconst rssCache = new LRUCache<string, { xml: string; exp: number }>(20);\n\t\tconst ogCache = new LRUCache<string, { buffer: Buffer; exp: number }>(100);\n\t\tconst robotsCache = new LRUCache<string, { txt: string; exp: number }>(10);\n\n\t\t// Live reload SSE clients + pending reload if no clients connected\n\t\tconst liveReloadState = {\n\t\t\tclients: new Set<ReadableStreamDefaultController>(),\n\t\t\tpendingReload: false,\n\t\t};\n\t\tconst reloadEncoder = new TextEncoder();\n\t\tconst reloadMessage = reloadEncoder.encode('data: reload\\n\\n');\n\t\tconst rebuildingMessage = reloadEncoder.encode('data: rebuilding\\n\\n');\n\n\t\tconst notifyReload = () => {\n\t\t\tlet delivered = false;\n\t\t\tfor (const controller of liveReloadState.clients) {\n\t\t\t\ttry {\n\t\t\t\t\tcontroller.enqueue(reloadMessage);\n\t\t\t\t\tdelivered = true;\n\t\t\t\t} catch {\n\t\t\t\t\tliveReloadState.clients.delete(controller);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!delivered) {\n\t\t\t\t// Remember to reload once the next client connects\n\t\t\t\tliveReloadState.pendingReload = true;\n\t\t\t}\n\t\t};\n\n\t\tconst notifyRebuilding = () => {\n\t\t\tfor (const controller of liveReloadState.clients) {\n\t\t\t\ttry {\n\t\t\t\t\tcontroller.enqueue(rebuildingMessage);\n\t\t\t\t} catch {\n\t\t\t\t\tliveReloadState.clients.delete(controller);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Client directory for SSR rendering (contains routes, components, etc.)\n\t\t// - Dev: ${cwd}/src/client\n\t\t// - Prod: ${cwd}/.reroute\n\t\tconst clientDir = existsSync(`${cwd}/.reroute/assets`)\n\t\t\t? `${cwd}/.reroute`\n\t\t\t: `${cwd}/src/client`;\n\n\t\tconst shouldIgnore = !ignorePatterns.length\n\t\t\t? () => false\n\t\t\t: (file: string) =>\n\t\t\t\t\tignorePatterns.find((pattern: string | RegExp) =>\n\t\t\t\t\t\ttypeof pattern === 'string'\n\t\t\t\t\t\t\t? file.includes(pattern)\n\t\t\t\t\t\t\t: pattern.test(file),\n\t\t\t\t\t);\n\n\t\tconst isWatchMode =\n\t\t\t(Array.isArray(process.execArgv) &&\n\t\t\t\tprocess.execArgv.includes('--watch')) ||\n\t\t\t(Array.isArray(process.argv) && process.argv.includes('--watch'));\n\n\t\t// Shared cache-control for data responses (prefetch + client navigations)\n\t\t// Align with static caching to reduce repeated XHRs even in dev.\n\t\tconst dataCacheControl = `${directive}, max-age=${maxAge}`;\n\n\t\tif (isWatchMode) console.log(`[reroute] Live reload enabled`);\n\n\t\t// Find bundle URL by scanning bundles directory\n\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: File scanning with retry logic is inherently complex\n\t\tconst readBundleUrl = async (): Promise<string> => {\n\t\t\tconst bundlesDir = `${cwd}/.reroute/bundles`;\n\t\t\tconst maxAttempts = isWatchMode ? 500 : 10;\n\t\t\tconst sleepMs = isWatchMode ? 100 : 250;\n\n\t\t\tfor (let attempt = 0; attempt < maxAttempts; attempt++) {\n\t\t\t\ttry {\n\t\t\t\t\tconst glob = new Bun.Glob('index.*.js');\n\t\t\t\t\tconst files = await Array.fromAsync(glob.scan(bundlesDir));\n\t\t\t\t\tconst indexFile =\n\t\t\t\t\t\tfiles.find((f) => !f.includes('.stub.')) || files[0];\n\t\t\t\t\tif (indexFile) {\n\t\t\t\t\t\treturn `/bundles/${indexFile}`;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Directory might not exist yet or be empty during rebuild\n\t\t\t\t}\n\n\t\t\t\tif (attempt === 0) {\n\t\t\t\t\tconsole.warn('[reroute] Waiting for bundles to be generated...');\n\t\t\t\t}\n\t\t\t\tawait Bun.sleep(sleepMs);\n\t\t\t}\n\n\t\t\tthrow new Error('Bundle not found. Run `reroute gen` first.');\n\t\t};\n\n\t\t// Read bundle URL at startup and cache it\n\t\tconst initialBundleUrl = await readBundleUrl();\n\t\tconsole.log(`[reroute] Using pre-built bundle: ${initialBundleUrl}`);\n\n\t\t// Cache bundle URL function (instant in prod, rescan in dev)\n\t\tconst getBundleUrl = isWatchMode\n\t\t\t? readBundleUrl // Rescan in dev to detect rebuilds\n\t\t\t: async () => initialBundleUrl; // Instant in prod\n\n\t\t// Pre-cache expensive SSR setup work at startup\n\t\t// These don't change per-request and can be shared across all SSR renders\n\t\tconst { loadCollections, inlineTailwindCSS, loadIndexHtml } = await import(\n\t\t\t'reroute-js/core'\n\t\t);\n\t\tconst startupCollections = await loadCollections(cwd, isWatchMode);\n\t\tconst startupTailwindCSS = await inlineTailwindCSS(\n\t\t\tclientDir,\n\t\t\tfalse,\n\t\t\tisWatchMode,\n\t\t);\n\t\tconst startupIndexHtml = await loadIndexHtml(clientDir);\n\n\t\t// Export cached values for SSR to use\n\t\tconst getCollections = isWatchMode\n\t\t\t? () => loadCollections(cwd, isWatchMode) // Reload in dev\n\t\t\t: async () => startupCollections; // Use cache in prod\n\n\t\tconst getTailwindCSS = isWatchMode\n\t\t\t? () => inlineTailwindCSS(clientDir, false, isWatchMode) // Reload in dev\n\t\t\t: async () => startupTailwindCSS; // Use cache in prod\n\n\t\tconst getIndexHtml = isWatchMode\n\t\t\t? () => loadIndexHtml(clientDir) // Reload in dev\n\t\t\t: async () => startupIndexHtml; // Use cache in prod\n\n\t\t// Register redirect routes (must be early to intercept before other routes)\n\t\tif (globalConfig.redirects && globalConfig.redirects.length > 0) {\n\t\t\tregisterRedirectRoutes(app, globalConfig.redirects);\n\t\t}\n\n\t\t// Register content routes\n\t\tregisterContentRoutes(\n\t\t\tapp,\n\t\t\tcwd,\n\t\t\tcollectionCache,\n\t\t\tdirective,\n\t\t\tmaxAge,\n\t\t\tisWatchMode,\n\t\t);\n\n\t\t// Register search route (if search is enabled in config)\n\t\tregisterSearchRoute(app, cwd, directive, maxAge, {\n\t\t\tdefaultPageSize: globalConfig.search?.defaultPageSize,\n\t\t\tmaxPageSize: globalConfig.search?.maxPageSize,\n\t\t});\n\n\t\t// Register internal routes (preload, data endpoints - always needed)\n\t\tregisterInternalRoutes(app, {\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tdataCacheControl,\n\t\t\tdataCache,\n\t\t\tisWatchMode,\n\t\t\tmaxAge,\n\t\t});\n\n\t\t// Register live reload routes (dev mode only)\n\t\tif (isWatchMode) {\n\t\t\tregisterLiveReloadRoutes(app, liveReloadState);\n\t\t}\n\n\t\t// Reload endpoints: notify browser clients\n\t\tif (isWatchMode) {\n\t\t\t// Notify that rebuild is starting (shows UI notice)\n\t\t\tapp.post('/__reroute_rebuilding', () => {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'[reroute] Rebuild notification received, notifying browsers...',\n\t\t\t\t);\n\t\t\t\tnotifyRebuilding();\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({ ok: true, clients: liveReloadState.clients.size }),\n\t\t\t\t\t{\n\t\t\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// Notify to reload browser (after build completes)\n\t\t\tapp.post('/__reroute_reload', () => {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[reroute] Reload notification received, notifying ${liveReloadState.clients.size} browser(s)...`,\n\t\t\t\t);\n\n\t\t\t\tnotifyReload();\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({ ok: true, clients: liveReloadState.clients.size }),\n\t\t\t\t\t{\n\t\t\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\t// Register artifacts routes (.reroute directory)\n\t\tregisterArtifactsRoutes(app, cwd, fileCache, {\n\t\t\tbundleMaxAge,\n\t\t\tdirective,\n\t\t\tisWatchMode,\n\t\t});\n\n\t\t// Initialize and register image optimization routes\n\t\tconst imageCacheDir = `${cwd}/.reroute/image-cache`;\n\t\tinitImageCache(imageCacheDir);\n\t\tregisterImageRoutes(app, {\n\t\t\tclientDir,\n\t\t\tmaxAge: imageMaxAge,\n\t\t\tallowedDomains: imageAllowedDomains,\n\t\t\tmaxWidth: imageMaxWidth,\n\t\t\tmaxHeight: imageMaxHeight,\n\t\t\tcompression,\n\t\t});\n\n\t\t// Register static file serving (BEFORE SSR routes to prevent catch-all interception)\n\t\t// Static assets at /assets/* must be registered before the SSR catch-all route\n\t\tregisterStaticRoutes(app, {\n\t\t\tstaticAssetsDir,\n\t\t\tmaxAge: staticMaxAge,\n\t\t\tdirective: staticDirective,\n\t\t\tstaticHeaders,\n\t\t\tshouldIgnore: shouldIgnore as () => boolean,\n\t\t\tfileCache,\n\t\t\tisWatchMode,\n\t\t\tcompression,\n\t\t});\n\n\t\t// Register SSR routes if root component is provided\n\t\tif (rootComponent) {\n\t\t\ttry {\n\t\t\t\tconst collections = await discoverCollections(clientDir);\n\t\t\t\tif (collections.length > 0) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[reroute] Discovered collections: ${collections.join(', ')}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Register robots.txt route (BEFORE LLMs routes to avoid .txt extension interception)\n\t\t\t\tif (robotsEnabled && robotsConfig) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterRobotsRoute(app, {\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tmaxAge: robotsConfig.maxAge ?? maxAge,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\trobotsCache,\n\t\t\t\t\t\t\trobotsConfig,\n\t\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t\t\tsitemapEnabled,\n\t\t\t\t\t\t\tredirects: globalConfig.redirects,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log('[reroute] Robots.txt generation enabled');\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register robots route:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Register LLMs routes (BEFORE SSR routes to intercept .txt/.md extensions)\n\t\t\t\tif (llmsEnabled && llmsConfig) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterLLMsRoutes(app, {\n\t\t\t\t\t\t\trootComponent: rootComponent as ReactElement,\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\tgetBundleUrl,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tdirective,\n\t\t\t\t\t\t\tllmsConfig,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tdataCache,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst features: string[] = [];\n\t\t\t\t\t\tif (llmsConfig.enableTextExtension !== false) features.push('.txt');\n\t\t\t\t\t\tif (llmsConfig.enableMarkdownExtension !== false)\n\t\t\t\t\t\t\tfeatures.push('.md');\n\t\t\t\t\t\tif (llmsConfig.enableContentNegotiation !== false)\n\t\t\t\t\t\t\tfeatures.push('Accept headers');\n\t\t\t\t\t\tif (llmsConfig.enableIndex !== false) features.push('/llms.txt');\n\t\t\t\t\t\tif (llmsConfig.enableFullContent !== false)\n\t\t\t\t\t\t\tfeatures.push('/llms-full.txt');\n\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[reroute] LLMs content enabled: ${features.join(', ')}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register LLMs routes:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregisterSSRRoutes(app, {\n\t\t\t\t\trootComponent: rootComponent as ReactElement,\n\t\t\t\t\tclientDir,\n\t\t\t\t\tcwd,\n\t\t\t\t\tisWatchMode,\n\t\t\t\t\tgetBundleUrl,\n\t\t\t\t\tgetCollections,\n\t\t\t\t\tgetTailwindCSS,\n\t\t\t\t\tgetIndexHtml,\n\t\t\t\t\tdebug,\n\t\t\t\t\thead: ssrHead,\n\t\t\t\t\tlang: ssrLang,\n\t\t\t\t\tappId: ssrAppId,\n\t\t\t\t\tmaxAge,\n\t\t\t\t\tdirective,\n\t\t\t\t\tcompression,\n\t\t\t\t\tstreamingEnabled,\n\t\t\t\t\tstreamingTimeout: globalConfig.streaming?.timeout,\n\t\t\t\t\togConfig,\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\tautoCanonical,\n\t\t\t\t});\n\n\t\t\t\t// Register sitemap routes (after SSR routes, opt-in only)\n\t\t\t\tif (sitemapEnabled && sitemapBaseUrl) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterSitemapRoutes(app, {\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tbaseUrl: sitemapBaseUrl,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\tsitemapCache,\n\t\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[reroute] Sitemap enabled at ${sitemapBaseUrl}/sitemap.xml`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t'[reroute] Failed to register sitemap routes:',\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Register RSS feed routes (after sitemap, opt-in only)\n\t\t\t\tif (rssEnabled && rssBaseUrl) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait registerRSSRoutes(app, {\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tbaseUrl: rssBaseUrl,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\trssCache,\n\t\t\t\t\t\t\trssConfig,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[reroute] RSS feeds enabled at ${rssBaseUrl}/feed.xml`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register RSS routes:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Register OG Image routes (opt-in only)\n\t\t\t\tif (ogEnabled && ogConfig) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterOGRoutes(app, {\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\togConfig,\n\t\t\t\t\t\t\togCache,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log('[reroute] OG image generation enabled');\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register OG routes:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('[reroute] Failed to register SSR routes:', error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\t// Global error handler\n\t\tapp.onError(({ set, error }) => {\n\t\t\tif ('status' in error && error.status === 404) {\n\t\t\t\tset.status = 404;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// biome-ignore lint/complexity/useLiteralKeys: bracket notation required to prevent build-time replacement\n\t\t\tif (process.env['NODE_ENV'] !== 'production') {\n\t\t\t\tconsole.error('[reroute] 🚨 Server error:', error);\n\t\t\t}\n\t\t});\n\n\t\treturn app;\n\t};\n\nexport { reroute };\n",
|
|
68
|
+
"// All file watching happens in the CLI (reroute gen --watch)\n\nimport { existsSync } from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport type { Elysia } from 'elysia';\nimport { type ComponentType, createElement, type ReactElement } from 'react';\nimport { discoverCollections, LRUCache, loadConfig } from 'reroute-js/core';\nimport { initImageCache } from './libs/image';\nimport { registerArtifactsRoutes } from './routes/artifacts';\nimport { registerContentRoutes } from './routes/content';\nimport { registerImageRoutes } from './routes/image';\nimport {\n\tregisterInternalRoutes,\n\tregisterLiveReloadRoutes,\n} from './routes/internal';\nimport { registerLLMsRoutes } from './routes/llms';\nimport { registerOGRoutes } from './routes/og';\nimport { registerRedirectRoutes } from './routes/redirects';\nimport { registerRobotsRoute } from './routes/robots';\nimport { registerRSSRoutes } from './routes/rss';\nimport { registerSearchRoute } from './routes/search';\nimport { registerSitemapRoutes } from './routes/sitemap';\nimport { registerSSRRoutes } from './routes/ssr';\nimport { registerStaticRoutes } from './routes/static';\n\nconst reroute =\n\t() =>\n\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Plugin initialization is inherently complex\n\tasync (app: Elysia) => {\n\t\tconst cwd =\n\t\t\ttypeof process !== 'undefined' && typeof process.cwd === 'function'\n\t\t\t\t? process.cwd()\n\t\t\t\t: '/';\n\n\t\t// Global HEAD request handler - MUST be first to intercept before Elysia's buggy automatic handling\n\t\t// Elysia has a bug with automatic HEAD handling, so we handle them ourselves\n\t\tapp.onRequest(({ request }) => {\n\t\t\tif (request.method === 'HEAD') {\n\t\t\t\treturn new Response(null, {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\theaders: { 'content-type': 'text/html; charset=utf-8' },\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Load global config\n\t\tconst globalConfig = await loadConfig(cwd);\n\n\t\t// Handle App component (can be ReactElement in plugin or string path in config)\n\t\tlet rootComponent: ReactElement | undefined;\n\n\t\t// Check for pre-bundled App component (set by .reroute/artifacts.ts in compiled binaries)\n\t\tconst globalApp = (globalThis as Record<string, unknown>)\n\t\t\t.__REROUTE_APP_COMPONENT__ as ComponentType | undefined;\n\n\t\tif (globalApp) {\n\t\t\t// Use pre-bundled App component from global (compiled binary)\n\t\t\trootComponent = createElement(globalApp);\n\t\t} else if (globalConfig.app?.src) {\n\t\t\t// Fallback to dynamic import (dev mode)\n\t\t\tconst appPath = globalConfig.app.src.startsWith('/')\n\t\t\t\t? globalConfig.app.src\n\t\t\t\t: `${cwd}/${globalConfig.app.src.replace(/^\\.\\//, '')}`;\n\t\t\tconst AppModule = await import(\n\t\t\t\t`${pathToFileURL(appPath).href}?t=${Date.now()}`\n\t\t\t);\n\t\t\trootComponent = createElement(AppModule.default);\n\t\t}\n\n\t\tif (!rootComponent) {\n\t\t\tconsole.warn(\n\t\t\t\t'[reroute] No app component provided. SSR routes will not be registered.',\n\t\t\t);\n\t\t}\n\n\t\t// Merge: plugin options > global config.options > defaults\n\t\tconst ssrHead = globalConfig.app?.head ?? '';\n\t\tconst ssrLang = globalConfig.app?.lang ?? 'en';\n\t\tconst ssrAppId = globalConfig.app?.appId ?? 'root';\n\n\t\t// Static file serving configuration\n\t\t// Convention: static assets are ALWAYS at /assets/* URL path\n\t\t// - Dev mode: serves from ${cwd}/src/client/assets/\n\t\t// - Prod mode: serves from ${cwd}/.reroute/assets/\n\t\tconst staticAssetsDir = existsSync(`${cwd}/.reroute/assets`)\n\t\t\t? `${cwd}/.reroute/assets`\n\t\t\t: `${cwd}/src/client/assets`;\n\n\t\tconst staticConfig = globalConfig.static ?? {};\n\t\tconst ignorePatterns = staticConfig.ignorePatterns ?? [\n\t\t\t'.DS_Store',\n\t\t\t'.git',\n\t\t\t'.env',\n\t\t];\n\t\tconst staticHeaders = staticConfig.headers;\n\n\t\t// Cache configuration (used for SSR, data endpoints, etc.)\n\t\tconst maxAge = globalConfig.app?.maxAge ?? 3600;\n\t\tconst directive = globalConfig.app?.directive ?? 'public';\n\n\t\t// Static assets can override cache settings or use defaults\n\t\tconst staticMaxAge = staticConfig.maxAge ?? maxAge;\n\t\tconst staticDirective = staticConfig.directive ?? directive;\n\n\t\t// Compression configuration (plugin > config > default: true)\n\t\tconst compression = globalConfig.app?.compression ?? true;\n\n\t\t// Debug mode configuration (plugin > config > default: false)\n\t\tconst debug = globalConfig.app?.debug ?? false;\n\n\t\t// Image optimization configuration (from config file only)\n\t\tconst imageConfig = globalConfig.image ?? {};\n\t\tconst imageMaxAge = imageConfig.maxAge ?? 31536000; // 1 year\n\t\tconst imageAllowedDomains = imageConfig.allowedDomains ?? [];\n\t\tconst imageMaxWidth = imageConfig.maxWidth ?? 3840;\n\t\tconst imageMaxHeight = imageConfig.maxHeight ?? 2160;\n\n\t\t// Bundle caching configuration (plugin > config > default)\n\t\tconst bundleMaxAge = globalConfig.app?.bundleMaxAge ?? 3600; // 1 hour default for main bundle\n\n\t\t// Streaming configuration (from config file only)\n\t\tconst streamingEnabled = globalConfig.streaming?.enabled ?? false;\n\n\t\t// Base URL and canonical URL configuration (plugin > config)\n\t\tconst baseUrl = globalConfig.app?.baseUrl;\n\t\tconst autoCanonical = globalConfig.app?.autoCanonical;\n\n\t\t// Sitemap configuration (from config file only)\n\t\tconst sitemapConfig = globalConfig.sitemap;\n\t\tconst sitemapEnabled = sitemapConfig?.enabled === true;\n\t\tconst sitemapBaseUrl = sitemapConfig?.baseUrl;\n\n\t\t// RSS configuration (plugin > config > disabled by default)\n\t\tconst rssConfig = globalConfig.rss;\n\t\tconst rssEnabled = rssConfig?.enabled === true;\n\t\tconst rssBaseUrl = rssConfig?.baseUrl;\n\n\t\t// OG Image configuration (plugin > config > disabled by default)\n\t\tconst ogConfig = globalConfig.ogImage;\n\t\tconst ogEnabled = ogConfig?.enabled === true;\n\n\t\t// LLMs configuration (plugin > config > disabled by default)\n\t\tconst llmsConfig = globalConfig.llms;\n\t\tconst llmsEnabled = llmsConfig?.enabled === true;\n\n\t\t// Robots configuration (plugin > config > disabled by default)\n\t\tconst robotsConfig = globalConfig.robots;\n\t\tconst robotsEnabled = robotsConfig?.enabled === true;\n\n\t\tconst fileCache = new LRUCache<string, Response>(100);\n\t\tconst dataCache = new LRUCache<string, unknown>(100);\n\t\tconst collectionCache = new LRUCache<string, Response>(50);\n\t\tconst sitemapCache = new LRUCache<string, { xml: string; exp: number }>(20);\n\t\tconst rssCache = new LRUCache<string, { xml: string; exp: number }>(20);\n\t\tconst ogCache = new LRUCache<string, { buffer: Buffer; exp: number }>(100);\n\t\tconst robotsCache = new LRUCache<string, { txt: string; exp: number }>(10);\n\n\t\t// Live reload SSE clients + pending reload if no clients connected\n\t\tconst liveReloadState = {\n\t\t\tclients: new Set<ReadableStreamDefaultController>(),\n\t\t\tpendingReload: false,\n\t\t};\n\t\tconst reloadEncoder = new TextEncoder();\n\t\tconst reloadMessage = reloadEncoder.encode('data: reload\\n\\n');\n\t\tconst rebuildingMessage = reloadEncoder.encode('data: rebuilding\\n\\n');\n\n\t\tconst notifyReload = () => {\n\t\t\tlet delivered = false;\n\t\t\tfor (const controller of liveReloadState.clients) {\n\t\t\t\ttry {\n\t\t\t\t\tcontroller.enqueue(reloadMessage);\n\t\t\t\t\tdelivered = true;\n\t\t\t\t} catch {\n\t\t\t\t\tliveReloadState.clients.delete(controller);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!delivered) {\n\t\t\t\t// Remember to reload once the next client connects\n\t\t\t\tliveReloadState.pendingReload = true;\n\t\t\t}\n\t\t};\n\n\t\tconst notifyRebuilding = () => {\n\t\t\tfor (const controller of liveReloadState.clients) {\n\t\t\t\ttry {\n\t\t\t\t\tcontroller.enqueue(rebuildingMessage);\n\t\t\t\t} catch {\n\t\t\t\t\tliveReloadState.clients.delete(controller);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Client directory for SSR rendering (contains routes, components, etc.)\n\t\t// - Dev: ${cwd}/src/client\n\t\t// - Prod: ${cwd}/.reroute\n\t\tconst clientDir = existsSync(`${cwd}/.reroute/assets`)\n\t\t\t? `${cwd}/.reroute`\n\t\t\t: `${cwd}/src/client`;\n\n\t\tconst shouldIgnore = !ignorePatterns.length\n\t\t\t? () => false\n\t\t\t: (file: string) =>\n\t\t\t\t\tignorePatterns.find((pattern: string | RegExp) =>\n\t\t\t\t\t\ttypeof pattern === 'string'\n\t\t\t\t\t\t\t? file.includes(pattern)\n\t\t\t\t\t\t\t: pattern.test(file),\n\t\t\t\t\t);\n\n\t\tconst isWatchMode =\n\t\t\t(Array.isArray(process.execArgv) &&\n\t\t\t\tprocess.execArgv.includes('--watch')) ||\n\t\t\t(Array.isArray(process.argv) && process.argv.includes('--watch'));\n\n\t\t// Shared cache-control for data responses (prefetch + client navigations)\n\t\t// Align with static caching to reduce repeated XHRs even in dev.\n\t\tconst dataCacheControl = `${directive}, max-age=${maxAge}`;\n\n\t\tif (isWatchMode) console.log(`[reroute] Live reload enabled`);\n\n\t\t// Find bundle URL by scanning bundles directory\n\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: File scanning with retry logic is inherently complex\n\t\tconst readBundleUrl = async (): Promise<string> => {\n\t\t\tconst bundlesDir = `${cwd}/.reroute/bundles`;\n\t\t\tconst maxAttempts = isWatchMode ? 500 : 10;\n\t\t\tconst sleepMs = isWatchMode ? 100 : 250;\n\n\t\t\tfor (let attempt = 0; attempt < maxAttempts; attempt++) {\n\t\t\t\ttry {\n\t\t\t\t\tconst glob = new Bun.Glob('index.*.js');\n\t\t\t\t\tconst files = await Array.fromAsync(glob.scan(bundlesDir));\n\t\t\t\t\tconst indexFile =\n\t\t\t\t\t\tfiles.find((f) => !f.includes('.stub.')) || files[0];\n\t\t\t\t\tif (indexFile) {\n\t\t\t\t\t\treturn `/bundles/${indexFile}`;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Directory might not exist yet or be empty during rebuild\n\t\t\t\t}\n\n\t\t\t\tif (attempt === 0) {\n\t\t\t\t\tconsole.warn('[reroute] Waiting for bundles to be generated...');\n\t\t\t\t}\n\t\t\t\tawait Bun.sleep(sleepMs);\n\t\t\t}\n\n\t\t\tthrow new Error('Bundle not found. Run `reroute gen` first.');\n\t\t};\n\n\t\t// Read bundle URL at startup and cache it\n\t\tconst initialBundleUrl = await readBundleUrl();\n\t\tconsole.log(`[reroute] Using pre-built bundle: ${initialBundleUrl}`);\n\n\t\t// Cache bundle URL function (instant in prod, rescan in dev)\n\t\tconst getBundleUrl = isWatchMode\n\t\t\t? readBundleUrl // Rescan in dev to detect rebuilds\n\t\t\t: async () => initialBundleUrl; // Instant in prod\n\n\t\t// Pre-cache expensive SSR setup work at startup\n\t\t// These don't change per-request and can be shared across all SSR renders\n\t\tconst { loadCollections, inlineTailwindCSS, loadIndexHtml } = await import(\n\t\t\t'reroute-js/core'\n\t\t);\n\t\tconst startupCollections = await loadCollections(cwd, isWatchMode);\n\t\tconst startupTailwindCSS = await inlineTailwindCSS(\n\t\t\tclientDir,\n\t\t\tfalse,\n\t\t\tisWatchMode,\n\t\t);\n\t\tconst startupIndexHtml = await loadIndexHtml(clientDir);\n\n\t\t// Export cached values for SSR to use\n\t\tconst getCollections = isWatchMode\n\t\t\t? () => loadCollections(cwd, isWatchMode) // Reload in dev\n\t\t\t: async () => startupCollections; // Use cache in prod\n\n\t\tconst getTailwindCSS = isWatchMode\n\t\t\t? () => inlineTailwindCSS(clientDir, false, isWatchMode) // Reload in dev\n\t\t\t: async () => startupTailwindCSS; // Use cache in prod\n\n\t\tconst getIndexHtml = isWatchMode\n\t\t\t? () => loadIndexHtml(clientDir) // Reload in dev\n\t\t\t: async () => startupIndexHtml; // Use cache in prod\n\n\t\t// Register redirect routes (must be early to intercept before other routes)\n\t\tif (globalConfig.redirects && globalConfig.redirects.length > 0) {\n\t\t\tregisterRedirectRoutes(app, globalConfig.redirects);\n\t\t}\n\n\t\t// Register content routes\n\t\tregisterContentRoutes(\n\t\t\tapp,\n\t\t\tcwd,\n\t\t\tcollectionCache,\n\t\t\tdirective,\n\t\t\tmaxAge,\n\t\t\tisWatchMode,\n\t\t);\n\n\t\t// Register search route (if search is enabled in config)\n\t\tregisterSearchRoute(app, cwd, directive, maxAge, {\n\t\t\tdefaultPageSize: globalConfig.search?.defaultPageSize,\n\t\t\tmaxPageSize: globalConfig.search?.maxPageSize,\n\t\t});\n\n\t\t// Register internal routes (preload, data endpoints - always needed)\n\t\tregisterInternalRoutes(app, {\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tdataCacheControl,\n\t\t\tdataCache,\n\t\t\tisWatchMode,\n\t\t\tmaxAge,\n\t\t});\n\n\t\t// Register live reload routes (dev mode only)\n\t\tif (isWatchMode) {\n\t\t\tregisterLiveReloadRoutes(app, liveReloadState);\n\t\t}\n\n\t\t// Reload endpoints: notify browser clients\n\t\tif (isWatchMode) {\n\t\t\t// Notify that rebuild is starting (shows UI notice)\n\t\t\tapp.post('/__reroute_rebuilding', () => {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'[reroute] Rebuild notification received, notifying browsers...',\n\t\t\t\t);\n\t\t\t\tnotifyRebuilding();\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({ ok: true, clients: liveReloadState.clients.size }),\n\t\t\t\t\t{\n\t\t\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// Notify to reload browser (after build completes)\n\t\t\tapp.post('/__reroute_reload', () => {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[reroute] Reload notification received, notifying ${liveReloadState.clients.size} browser(s)...`,\n\t\t\t\t);\n\n\t\t\t\tnotifyReload();\n\t\t\t\treturn new Response(\n\t\t\t\t\tJSON.stringify({ ok: true, clients: liveReloadState.clients.size }),\n\t\t\t\t\t{\n\t\t\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\t// Register artifacts routes (.reroute directory)\n\t\tregisterArtifactsRoutes(app, cwd, fileCache, {\n\t\t\tbundleMaxAge,\n\t\t\tdirective,\n\t\t\tisWatchMode,\n\t\t});\n\n\t\t// Initialize and register image optimization routes\n\t\tconst imageCacheDir = `${cwd}/.reroute/image-cache`;\n\t\tinitImageCache(imageCacheDir);\n\t\tregisterImageRoutes(app, {\n\t\t\tclientDir,\n\t\t\tmaxAge: imageMaxAge,\n\t\t\tallowedDomains: imageAllowedDomains,\n\t\t\tmaxWidth: imageMaxWidth,\n\t\t\tmaxHeight: imageMaxHeight,\n\t\t\tcompression,\n\t\t});\n\n\t\t// Register static file serving (BEFORE SSR routes to prevent catch-all interception)\n\t\t// Static assets at /assets/* must be registered before the SSR catch-all route\n\t\tregisterStaticRoutes(app, {\n\t\t\tstaticAssetsDir,\n\t\t\tmaxAge: staticMaxAge,\n\t\t\tdirective: staticDirective,\n\t\t\tstaticHeaders,\n\t\t\tshouldIgnore: shouldIgnore as () => boolean,\n\t\t\tfileCache,\n\t\t\tisWatchMode,\n\t\t\tcompression,\n\t\t});\n\n\t\t// Register SSR routes if root component is provided\n\t\tif (rootComponent) {\n\t\t\ttry {\n\t\t\t\tconst collections = await discoverCollections(clientDir);\n\t\t\t\tif (collections.length > 0) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[reroute] Discovered collections: ${collections.join(', ')}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Register robots.txt route (BEFORE LLMs routes to avoid .txt extension interception)\n\t\t\t\tif (robotsEnabled && robotsConfig) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterRobotsRoute(app, {\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tmaxAge: robotsConfig.maxAge ?? maxAge,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\trobotsCache,\n\t\t\t\t\t\t\trobotsConfig,\n\t\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t\t\tsitemapEnabled,\n\t\t\t\t\t\t\tredirects: globalConfig.redirects,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log('[reroute] Robots.txt generation enabled');\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register robots route:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Register LLMs routes (BEFORE SSR routes to intercept .txt/.md extensions)\n\t\t\t\tif (llmsEnabled && llmsConfig) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterLLMsRoutes(app, {\n\t\t\t\t\t\t\trootComponent: rootComponent as ReactElement,\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\tgetBundleUrl,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tdirective,\n\t\t\t\t\t\t\tllmsConfig,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tdataCache,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst features: string[] = [];\n\t\t\t\t\t\tif (llmsConfig.enableTextExtension !== false) features.push('.txt');\n\t\t\t\t\t\tif (llmsConfig.enableMarkdownExtension !== false)\n\t\t\t\t\t\t\tfeatures.push('.md');\n\t\t\t\t\t\tif (llmsConfig.enableContentNegotiation !== false)\n\t\t\t\t\t\t\tfeatures.push('Accept headers');\n\t\t\t\t\t\tif (llmsConfig.enableIndex !== false) features.push('/llms.txt');\n\t\t\t\t\t\tif (llmsConfig.enableFullContent !== false)\n\t\t\t\t\t\t\tfeatures.push('/llms-full.txt');\n\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[reroute] LLMs content enabled: ${features.join(', ')}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register LLMs routes:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregisterSSRRoutes(app, {\n\t\t\t\t\trootComponent: rootComponent as ReactElement,\n\t\t\t\t\tclientDir,\n\t\t\t\t\tcwd,\n\t\t\t\t\tisWatchMode,\n\t\t\t\t\tgetBundleUrl,\n\t\t\t\t\tgetCollections,\n\t\t\t\t\tgetTailwindCSS,\n\t\t\t\t\tgetIndexHtml,\n\t\t\t\t\tdebug,\n\t\t\t\t\thead: ssrHead,\n\t\t\t\t\tlang: ssrLang,\n\t\t\t\t\tappId: ssrAppId,\n\t\t\t\t\tmaxAge,\n\t\t\t\t\tdirective,\n\t\t\t\t\tcompression,\n\t\t\t\t\tstreamingEnabled,\n\t\t\t\t\tstreamingTimeout: globalConfig.streaming?.timeout,\n\t\t\t\t\togConfig,\n\t\t\t\t\togMetaConfig: globalConfig.og,\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\tautoCanonical,\n\t\t\t\t});\n\n\t\t\t\t// Register sitemap routes (after SSR routes, opt-in only)\n\t\t\t\tif (sitemapEnabled && sitemapBaseUrl) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterSitemapRoutes(app, {\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tbaseUrl: sitemapBaseUrl,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\tsitemapCache,\n\t\t\t\t\t\t\tsitemapConfig,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[reroute] Sitemap enabled at ${sitemapBaseUrl}/sitemap.xml`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t'[reroute] Failed to register sitemap routes:',\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Register RSS feed routes (after sitemap, opt-in only)\n\t\t\t\tif (rssEnabled && rssBaseUrl) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait registerRSSRoutes(app, {\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcollections,\n\t\t\t\t\t\t\tbaseUrl: rssBaseUrl,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\trssCache,\n\t\t\t\t\t\t\trssConfig,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[reroute] RSS feeds enabled at ${rssBaseUrl}/feed.xml`,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register RSS routes:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Register OG Image routes (opt-in only)\n\t\t\t\tif (ogEnabled && ogConfig) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tregisterOGRoutes(app, {\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\togConfig,\n\t\t\t\t\t\t\togCache,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log('[reroute] OG image generation enabled');\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('[reroute] Failed to register OG routes:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('[reroute] Failed to register SSR routes:', error);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\t// Global error handler\n\t\tapp.onError(({ set, error }) => {\n\t\t\tif ('status' in error && error.status === 404) {\n\t\t\t\tset.status = 404;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// biome-ignore lint/complexity/useLiteralKeys: bracket notation required to prevent build-time replacement\n\t\t\tif (process.env['NODE_ENV'] !== 'production') {\n\t\t\t\tconsole.error('[reroute] 🚨 Server error:', error);\n\t\t\t}\n\t\t});\n\n\t\treturn app;\n\t};\n\nexport { reroute };\n",
|
|
69
69
|
"import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport sharp from 'sharp';\n\ninterface ImageTransformOptions {\n\twidth?: number;\n\theight?: number;\n\tquality?: number;\n\tformat?: 'webp' | 'avif' | 'jpeg' | 'png' | 'auto';\n\tfit?: 'cover' | 'contain' | 'fill' | 'inside' | 'outside';\n}\n\ninterface ImageOptimizationResult {\n\tbuffer: Buffer;\n\tcontentType: string;\n\tformat: string;\n\twidth: number;\n\theight: number;\n\tsize: number;\n}\n\n// In-memory cache for transformed images\nconst imageCache = new Map<string, ImageOptimizationResult>();\nconst MAX_CACHE_SIZE = 100; // Maximum number of images to cache in memory\n\n// Disk cache directory\nlet diskCacheDir: string | null = null;\n\n/**\n * Initialize disk cache directory\n */\nexport function initImageCache(cacheDir: string) {\n\tdiskCacheDir = cacheDir;\n}\n\n/**\n * Generate cache key for image transformation\n */\nfunction getCacheKey(\n\timagePath: string,\n\toptions: ImageTransformOptions,\n): string {\n\tconst optionsString = JSON.stringify(options);\n\tconst hasher = new Bun.CryptoHasher('sha256');\n\thasher.update(`${imagePath}:${optionsString}`);\n\tconst hash = hasher.digest('hex');\n\treturn hash;\n}\n\n/**\n * Get content type for image format\n */\nfunction getContentType(format: string): string {\n\tconst contentTypes: Record<string, string> = {\n\t\twebp: 'image/webp',\n\t\tavif: 'image/avif',\n\t\tjpeg: 'image/jpeg',\n\t\tjpg: 'image/jpeg',\n\t\tpng: 'image/png',\n\t\tgif: 'image/gif',\n\t};\n\treturn contentTypes[format] || 'image/jpeg';\n}\n\n/**\n * Determine optimal format based on Accept header\n */\nfunction negotiateFormat(\n\tacceptHeader: string | undefined,\n\trequestedFormat: string | undefined,\n): 'webp' | 'avif' | 'jpeg' | 'png' {\n\t// If format is explicitly requested, use it\n\tif (\n\t\trequestedFormat &&\n\t\t['webp', 'avif', 'jpeg', 'png'].includes(requestedFormat)\n\t) {\n\t\treturn requestedFormat as 'webp' | 'avif' | 'jpeg' | 'png';\n\t}\n\n\t// Parse Accept header\n\tconst accept = acceptHeader?.toLowerCase() || '';\n\n\t// Check for AVIF support (best compression)\n\tif (accept.includes('image/avif')) {\n\t\treturn 'avif';\n\t}\n\n\t// Check for WebP support (good compression, wide support)\n\tif (accept.includes('image/webp')) {\n\t\treturn 'webp';\n\t}\n\n\t// Default to JPEG\n\treturn 'jpeg';\n}\n\n/**\n * Load image from disk cache\n */\nasync function loadFromDiskCache(\n\tcacheKey: string,\n): Promise<ImageOptimizationResult | null> {\n\tif (!diskCacheDir) return null;\n\n\ttry {\n\t\tconst cachePath = join(diskCacheDir, `${cacheKey}.json`);\n\t\tconst imagePath = join(diskCacheDir, `${cacheKey}.img`);\n\n\t\tif (!(existsSync(cachePath) && existsSync(imagePath))) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst metadata = JSON.parse(await Bun.file(cachePath).text());\n\t\tconst buffer = Buffer.from(await Bun.file(imagePath).arrayBuffer());\n\n\t\treturn {\n\t\t\tbuffer,\n\t\t\tcontentType: metadata.contentType,\n\t\t\tformat: metadata.format,\n\t\t\twidth: metadata.width,\n\t\t\theight: metadata.height,\n\t\t\tsize: metadata.size,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Save image to disk cache\n */\nasync function saveToDiskCache(\n\tcacheKey: string,\n\tresult: ImageOptimizationResult,\n): Promise<void> {\n\tif (!diskCacheDir) return;\n\n\ttry {\n\t\tconst cachePath = join(diskCacheDir, `${cacheKey}.json`);\n\t\tconst imagePath = join(diskCacheDir, `${cacheKey}.img`);\n\n\t\t// Save metadata\n\t\tawait Bun.write(\n\t\t\tcachePath,\n\t\t\tJSON.stringify({\n\t\t\t\tcontentType: result.contentType,\n\t\t\t\tformat: result.format,\n\t\t\t\twidth: result.width,\n\t\t\t\theight: result.height,\n\t\t\t\tsize: result.size,\n\t\t\t}),\n\t\t);\n\n\t\t// Save image buffer\n\t\tawait Bun.write(imagePath, result.buffer);\n\t} catch (error) {\n\t\tconsole.error('Failed to save image to disk cache:', error);\n\t}\n}\n\n/**\n * Optimize and transform image using Sharp\n */\nasync function fetchImageBuffer(imagePath: string): Promise<Buffer> {\n\tif (imagePath.startsWith('http://') || imagePath.startsWith('https://')) {\n\t\tconst response = await fetch(imagePath);\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to fetch image: ${response.status} ${response.statusText}`,\n\t\t\t);\n\t\t}\n\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\treturn Buffer.from(arrayBuffer);\n\t}\n\n\treturn Buffer.from(await Bun.file(imagePath).arrayBuffer());\n}\n\nfunction applyFormatTransform(\n\ttransformer: sharp.Sharp,\n\tformat: 'webp' | 'avif' | 'jpeg' | 'png',\n\tquality: number,\n): sharp.Sharp {\n\tswitch (format) {\n\t\tcase 'webp':\n\t\t\treturn transformer.webp({ quality, effort: 4 });\n\t\tcase 'avif':\n\t\t\treturn transformer.avif({ quality, effort: 4 });\n\t\tcase 'png':\n\t\t\treturn transformer.png({\n\t\t\t\tquality,\n\t\t\t\tcompressionLevel: 9,\n\t\t\t\tadaptiveFiltering: true,\n\t\t\t});\n\t\tdefault:\n\t\t\treturn transformer.jpeg({ quality, mozjpeg: true });\n\t}\n}\n\nfunction addToMemoryCache(cacheKey: string, result: ImageOptimizationResult) {\n\tif (imageCache.size >= MAX_CACHE_SIZE) {\n\t\tconst firstKey = imageCache.keys().next().value;\n\t\tif (firstKey) {\n\t\t\timageCache.delete(firstKey);\n\t\t}\n\t}\n\timageCache.set(cacheKey, result);\n}\n\nexport async function optimizeImage(\n\timagePath: string,\n\toptions: ImageTransformOptions,\n\tacceptHeader?: string,\n): Promise<ImageOptimizationResult> {\n\t// Generate cache key\n\tconst cacheKey = getCacheKey(imagePath, options);\n\n\t// Check in-memory cache first\n\tconst memCached = imageCache.get(cacheKey);\n\tif (memCached) {\n\t\treturn memCached;\n\t}\n\n\t// Check disk cache\n\tconst diskCached = await loadFromDiskCache(cacheKey);\n\tif (diskCached) {\n\t\taddToMemoryCache(cacheKey, diskCached);\n\t\treturn diskCached;\n\t}\n\n\t// Read source image\n\tconst sourceBuffer = await fetchImageBuffer(imagePath);\n\n\t// Determine output format\n\tconst format =\n\t\toptions.format === 'auto' || !options.format\n\t\t\t? negotiateFormat(acceptHeader, undefined)\n\t\t\t: options.format;\n\n\t// Initialize sharp instance\n\tlet transformer = sharp(sourceBuffer);\n\n\t// Get source metadata\n\tconst metadata = await transformer.metadata();\n\n\t// Apply resize if width or height is specified\n\tif (options.width || options.height) {\n\t\tconst resizeOptions: sharp.ResizeOptions = {\n\t\t\twidth: options.width,\n\t\t\theight: options.height,\n\t\t\tfit: options.fit || 'cover',\n\t\t\twithoutEnlargement: true,\n\t\t};\n\t\ttransformer = transformer.resize(resizeOptions);\n\t}\n\n\t// Apply format-specific optimizations\n\tconst quality = options.quality ?? 75;\n\ttransformer = applyFormatTransform(transformer, format, quality);\n\n\t// Execute transformation\n\tconst buffer = await transformer.toBuffer();\n\tconst info = await sharp(buffer).metadata();\n\n\tconst result: ImageOptimizationResult = {\n\t\tbuffer,\n\t\tcontentType: getContentType(format),\n\t\tformat,\n\t\twidth: info.width || metadata.width || options.width || 0,\n\t\theight: info.height || metadata.height || options.height || 0,\n\t\tsize: buffer.length,\n\t};\n\n\t// Save to disk cache\n\tawait saveToDiskCache(cacheKey, result);\n\n\t// Add to memory cache\n\tif (imageCache.size >= MAX_CACHE_SIZE) {\n\t\tconst firstKey = imageCache.keys().next().value;\n\t\tif (firstKey) {\n\t\t\timageCache.delete(firstKey);\n\t\t}\n\t}\n\timageCache.set(cacheKey, result);\n\n\treturn result;\n}\n\n/**\n * Check if path is an image file\n */\nexport function isImageFile(path: string): boolean {\n\tconst imageExtensions = ['.jpg', '.jpeg', '.png', '.webp', '.avif', '.gif'];\n\tconst ext = path.toLowerCase().split('.').pop();\n\treturn ext ? imageExtensions.includes(`.${ext}`) : false;\n}\n",
|
|
70
70
|
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport { join, type LRUCache } from 'reroute-js/core';\nimport { getHashedFileCacheControl, serveFile } from '../libs/serving';\n\ntype ArtifactsOptions = {\n\tbundleMaxAge: number;\n\tdirective: string;\n\tisWatchMode?: boolean;\n};\n\nexport function registerArtifactsRoutes(\n\tapp: Elysia,\n\tcwd: string,\n\tfileCache: LRUCache<string, Response>,\n\toptions: ArtifactsOptions,\n): Elysia {\n\tconst { bundleMaxAge, directive, isWatchMode = false } = options;\n\n\t// Serve Tailwind CSS with proper cache-busting in dev mode\n\tapp.get('/.reroute/theme.css', async ({ headers }) => {\n\t\tconst filePath = join(cwd, '.reroute', 'theme.css');\n\t\tconst acceptEncoding = headers['accept-encoding'] ?? '';\n\n\t\ttry {\n\t\t\t// In watch mode, always read fresh from disk and use no-cache headers\n\t\t\tconst cacheControl = isWatchMode\n\t\t\t\t? 'no-cache, no-store, must-revalidate'\n\t\t\t\t: `${directive}, max-age=${bundleMaxAge}`;\n\n\t\t\t// Skip file cache in watch mode to ensure fresh reads\n\t\t\tif (isWatchMode) {\n\t\t\t\t// Read fresh from disk\n\t\t\t\tconst { readFileSync } = await import('node:fs');\n\t\t\t\tconst content = readFileSync(filePath);\n\n\t\t\t\treturn new Response(content, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': 'text/css; charset=utf-8',\n\t\t\t\t\t\t'Cache-Control': cacheControl,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn await serveFile(filePath, acceptEncoding, fileCache, {\n\t\t\t\tcacheControl,\n\t\t\t});\n\t\t} catch {\n\t\t\t// that's fine\n\t\t}\n\t});\n\n\t// Serve pre-built bundles and chunks from .reroute/bundles/\n\tapp.get('/bundles/*', async ({ params, headers }) => {\n\t\tconst fileName = String(params['*'] ?? '').replace(/^\\/+/, '');\n\t\tif (!fileName) throw new NotFoundError();\n\n\t\tconst filePath = join(cwd, '.reroute', 'bundles', fileName);\n\t\tconst acceptEncoding = headers['accept-encoding'] ?? '';\n\n\t\ttry {\n\t\t\tconst cacheControl = getHashedFileCacheControl(\n\t\t\t\tfileName,\n\t\t\t\tbundleMaxAge,\n\t\t\t\tdirective,\n\t\t\t\tisWatchMode,\n\t\t\t);\n\n\t\t\t// serveFile will automatically use pre-compressed .br/.gz files if they exist (prod)\n\t\t\t// or serve raw files if they don't (dev). No on-the-fly compression!\n\t\t\treturn await serveFile(filePath, acceptEncoding, fileCache, {\n\t\t\t\tcacheControl,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tif (e instanceof NotFoundError) throw e;\n\t\t\tconsole.error('[reroute] Failed to serve bundle:', filePath, e);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\t// Serve generated collections from .reroute/collections/\n\tapp.get('/.reroute/collections/*', async ({ params, headers }) => {\n\t\tconst fileName = String(params['*'] ?? '').replace(/^\\/+/, '');\n\t\tif (!fileName) throw new NotFoundError();\n\n\t\tconst filePath = join(cwd, '.reroute', 'collections', fileName);\n\t\tconst acceptEncoding = headers['accept-encoding'] ?? '';\n\n\t\ttry {\n\t\t\tconst cacheControl = isWatchMode\n\t\t\t\t? 'no-cache, no-store, must-revalidate'\n\t\t\t\t: 'public, max-age=31536000, immutable';\n\n\t\t\treturn await serveFile(filePath, acceptEncoding, fileCache, {\n\t\t\t\tcacheControl,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tif (e instanceof NotFoundError) throw e;\n\t\t\tconsole.error('[reroute] Failed to serve collection file:', filePath, e);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\treturn app;\n}\n",
|
|
71
71
|
"/**\n * Static file serving primitives\n * Shared logic for serving files with caching and pre-compressed file handling\n */\n\nimport { NotFoundError } from 'elysia';\nimport { getMimeType, type LRUCache } from 'reroute-js/core';\nimport { getEncoding } from './cache';\nimport { buildCacheControl, buildDevCacheControl } from './response';\n\nexport interface ServeFileOptions {\n\tcacheControl: string;\n\tcompression?: boolean;\n\textraHeaders?: Record<string, string>;\n}\n\n/**\n * Serve a static file with caching and optional pre-compressed versions\n * No on-the-fly compression - files should be pre-compressed at build time\n */\nexport async function serveFile(\n\tfilePath: string,\n\tacceptEncoding: string,\n\tfileCache: LRUCache<string, Response>,\n\toptions: ServeFileOptions,\n): Promise<Response> {\n\tconst { cacheControl, compression = true, extraHeaders = {} } = options;\n\n\tconst encoding = getEncoding(acceptEncoding);\n\tconst cacheKey = `${filePath}:${encoding}`;\n\n\t// Check cache first\n\tconst cached = fileCache.get(cacheKey);\n\tif (cached) {\n\t\tconst response = cached.clone();\n\t\tresponse.headers.set('Reroute-Cache', 'HIT');\n\t\treturn response;\n\t}\n\n\t// Cache miss - check if file exists\n\tconst file = Bun.file(filePath);\n\tconst exists = await file.exists();\n\tif (!exists) throw new NotFoundError();\n\n\tconst contentType = getMimeType(filePath);\n\n\t// Try to serve pre-compressed versions (production builds only)\n\tif (compression && /\\.(js|css)$/i.test(filePath)) {\n\t\t// Prefer Brotli (better compression)\n\t\tif (/\\bbr\\b/i.test(acceptEncoding)) {\n\t\t\tconst brFile = Bun.file(`${filePath}.br`);\n\t\t\tif (await brFile.exists()) {\n\t\t\t\tconst brContent = await brFile.arrayBuffer();\n\t\t\t\tconst response = new Response(brContent, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t'Cache-Control': cacheControl,\n\t\t\t\t\t\t'Content-Encoding': 'br',\n\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\tVary: 'Accept-Encoding',\n\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tfileCache.set(cacheKey, response);\n\t\t\t\treturn response.clone();\n\t\t\t}\n\t\t}\n\n\t\t// Fallback to gzip\n\t\tif (/gzip/i.test(acceptEncoding)) {\n\t\t\tconst gzFile = Bun.file(`${filePath}.gz`);\n\t\t\tif (await gzFile.exists()) {\n\t\t\t\tconst gzContent = await gzFile.arrayBuffer();\n\t\t\t\tconst response = new Response(gzContent, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t'Cache-Control': cacheControl,\n\t\t\t\t\t\t'Content-Encoding': 'gzip',\n\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\tVary: 'Accept-Encoding',\n\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tfileCache.set(cacheKey, response);\n\t\t\t\treturn response.clone();\n\t\t\t}\n\t\t}\n\t}\n\n\t// Serve raw file (uncompressed)\n\t// Dev mode: no pre-compressed files exist, serve raw (fast)\n\t// Prod mode: browser doesn't accept compression, serve raw fallback\n\tconst buf = await file.arrayBuffer();\n\n\tconst response = new Response(buf, {\n\t\theaders: {\n\t\t\t'Content-Type': contentType,\n\t\t\t'Cache-Control': cacheControl,\n\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t...extraHeaders,\n\t\t},\n\t});\n\n\tfileCache.set(cacheKey, response);\n\n\treturn response.clone();\n}\n\n/**\n * Determine cache control for content-hashed files\n */\nexport function getHashedFileCacheControl(\n\tfileName: string,\n\tdefaultMaxAge: number,\n\tdirective: string,\n\tisWatchMode: boolean,\n): string {\n\tif (isWatchMode) {\n\t\treturn buildDevCacheControl();\n\t}\n\n\t// Files matching pattern: [name].[hash].[ext] or chunk.[hash].[ext]\n\tconst isContentHashed = /\\.([a-z0-9]{8,})\\.(js|css)$/i.test(fileName);\n\n\tif (isContentHashed) {\n\t\treturn 'public, max-age=31536000, immutable';\n\t}\n\n\treturn defaultMaxAge > 0\n\t\t? buildCacheControl(defaultMaxAge, directive as 'public' | 'private')\n\t\t: 'no-cache';\n}\n\n/**\n * Determine cache control for static assets\n */\nexport function getAssetCacheControl(\n\tfilePath: string,\n\tcontentType: string,\n\tmaxAge: number,\n\tdirective: string,\n\tisWatchMode: boolean,\n): string {\n\tif (isWatchMode) {\n\t\tconst isSourceFile = /\\.(tsx?|jsx?|css)$/i.test(filePath);\n\t\treturn isSourceFile\n\t\t\t? buildDevCacheControl()\n\t\t\t: buildCacheControl(maxAge, directive as 'public' | 'private');\n\t}\n\n\tconst isLongLivedAsset =\n\t\tcontentType.startsWith('image/') ||\n\t\tcontentType.startsWith('font/') ||\n\t\tcontentType.includes('woff') ||\n\t\tcontentType.includes('ttf') ||\n\t\tcontentType.includes('otf');\n\n\tconst effectiveMaxAge =\n\t\tmaxAge === 0 ? 0 : isLongLivedAsset ? 365 * 24 * 60 * 60 : maxAge;\n\n\tif (effectiveMaxAge <= 0) {\n\t\treturn 'no-cache';\n\t}\n\n\treturn `${directive}, max-age=${effectiveMaxAge}${isLongLivedAsset ? ', immutable' : ''}`;\n}\n",
|
|
@@ -84,10 +84,10 @@
|
|
|
84
84
|
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport {\n\ttype Doc,\n\tdiscoverRSSData,\n\tdiscoverSSRDataFeedItems,\n\tgenerateFeed,\n\tjoin,\n\ttype LRUCache,\n\ttype RSSFeed,\n\ttype RSSOptions,\n} from 'reroute-js/core';\nimport { getIfValid, toTTL, type XmlCacheEntry } from '../libs/caching';\nimport { feedResponse } from '../libs/response';\n\ntype RSSRouteOptions = {\n\tcwd: string;\n\tclientDir: string;\n\tcollections: string[];\n\tbaseUrl: string;\n\tmaxAge: number;\n\tisWatchMode: boolean;\n\trssCache: LRUCache<string, XmlCacheEntry>;\n\trssConfig?: RSSOptions;\n};\n\nfunction createFeedTitle(\n\tconfigTitle: string | undefined,\n\tname: string,\n): string {\n\treturn configTitle ?? `${name.charAt(0).toUpperCase() + name.slice(1)} Feed`;\n}\n\nasync function discoverSSRRoutes(\n\tcwd: string,\n\tisWatchMode: boolean,\n): Promise<Array<{ pattern: string; path: string; isLayout?: boolean }>> {\n\ttry {\n\t\tconst { discoverSitemapData } = await import('reroute-js/core');\n\t\tconst sitemapData = await discoverSitemapData(cwd, [], '', isWatchMode);\n\t\tconst staticRoutes = sitemapData.staticRoutes\n\t\t\t.filter((r) => !r.pattern.includes(':'))\n\t\t\t.map((r) => ({ pattern: r.pattern, path: r.path }));\n\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst routesMod = await import(\n\t\t\t`${Bun.pathToFileURL(routesPath).href}${isWatchMode ? `?t=${Date.now()}` : ''}`\n\t\t);\n\t\tconst layouts = routesMod.layouts ?? [];\n\n\t\tfor (const layout of layouts) {\n\t\t\tconst pattern = String(layout?.pattern ?? '/');\n\t\t\tconst path = String(layout?.path ?? '');\n\t\t\tif (path && pattern !== '/') {\n\t\t\t\tstaticRoutes.push({ pattern, path });\n\t\t\t}\n\t\t}\n\n\t\treturn staticRoutes;\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nasync function registerMainFeedRoute(\n\tapp: Elysia,\n\tcwd: string,\n\tcollections: string[],\n\tbaseUrl: string,\n\tisWatchMode: boolean,\n\trssCache: LRUCache<string, XmlCacheEntry>,\n\tformat: 'rss' | 'atom',\n\tlimit: number,\n\tmaxAge: number,\n\tttlMs: number,\n\tfeedTitle: string,\n\tfeedDescription: string,\n\trssConfig: RSSOptions | undefined,\n) {\n\tapp.get('/feed.xml', async () => {\n\t\ttry {\n\t\t\tconst cached = getIfValid(rssCache, 'rss:main');\n\t\t\tif (cached) {\n\t\t\t\treturn feedResponse(cached.xml, format, { maxAge, cacheStatus: 'HIT' });\n\t\t\t}\n\n\t\t\tconst discovery = await discoverRSSData(\n\t\t\t\tcwd,\n\t\t\t\tcollections,\n\t\t\t\tbaseUrl,\n\t\t\t\tisWatchMode,\n\t\t\t\trssConfig,\n\t\t\t);\n\n\t\t\tconst allItems = [\n\t\t\t\t...Array.from(discovery.collections.values()).flat(),\n\t\t\t\t...Array.from(discovery.ssrDataFeeds.values()).flat(),\n\t\t\t].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\tconst feed: RSSFeed = {\n\t\t\t\ttitle: feedTitle,\n\t\t\t\tlink: `${baseUrl}/feed.xml`,\n\t\t\t\tdescription: feedDescription,\n\t\t\t\titems: allItems,\n\t\t\t};\n\n\t\t\tconst xml = generateFeed(feed, { format, limit });\n\t\t\trssCache.set('rss:main', { xml, exp: Date.now() + ttlMs });\n\n\t\t\treturn feedResponse(xml, format, { maxAge, cacheStatus: 'MISS' });\n\t\t} catch (error) {\n\t\t\tconsole.error('[reroute] Failed to generate main feed:', error);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n}\n\nfunction registerCollectionFeedRoutes(\n\tapp: Elysia,\n\tcollections: string[],\n\toptions: {\n\t\tcwd: string;\n\t\tclientDir: string;\n\t\tbaseUrl: string;\n\t\tisWatchMode: boolean;\n\t\trssCache: LRUCache<string, XmlCacheEntry>;\n\t\tformat: 'rss' | 'atom';\n\t\tlimit: number;\n\t\tmaxAge: number;\n\t\tttlMs: number;\n\t\trssConfig: RSSOptions | undefined;\n\t\tavailableFeeds: string[];\n\t},\n) {\n\tfor (const collection of collections) {\n\t\toptions.availableFeeds.push(`/${collection}/feed.xml`);\n\n\t\tapp.get(`/${collection}/feed.xml`, async () => {\n\t\t\tconst cacheKey = `rss:${collection}`;\n\n\t\t\ttry {\n\t\t\t\tconst cached = getIfValid(options.rssCache, cacheKey);\n\t\t\t\tif (cached) {\n\t\t\t\t\treturn feedResponse(cached.xml, options.format, {\n\t\t\t\t\t\tmaxAge: options.maxAge,\n\t\t\t\t\t\tcacheStatus: 'HIT',\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst discovery = await discoverRSSData(\n\t\t\t\t\toptions.cwd,\n\t\t\t\t\t[collection],\n\t\t\t\t\toptions.baseUrl,\n\t\t\t\t\toptions.isWatchMode,\n\t\t\t\t\toptions.rssConfig,\n\t\t\t\t);\n\n\t\t\t\tconst items = discovery.collections.get(collection) ?? [];\n\t\t\t\tif (items.length === 0) throw new NotFoundError();\n\n\t\t\t\tconst feed: RSSFeed = {\n\t\t\t\t\ttitle: createFeedTitle(options.rssConfig?.title, collection),\n\t\t\t\t\tlink: `${options.baseUrl}/${collection}/feed.xml`,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\toptions.rssConfig?.description ?? `Latest ${collection} updates`,\n\t\t\t\t\titems,\n\t\t\t\t};\n\n\t\t\t\tconst xml = generateFeed(feed, {\n\t\t\t\t\tformat: options.format,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t});\n\t\t\t\toptions.rssCache.set(cacheKey, {\n\t\t\t\t\txml,\n\t\t\t\t\texp: Date.now() + options.ttlMs,\n\t\t\t\t});\n\n\t\t\t\treturn feedResponse(xml, options.format, {\n\t\t\t\t\tmaxAge: options.maxAge,\n\t\t\t\t\tcacheStatus: 'MISS',\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof NotFoundError) throw error;\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[reroute] Failed to generate ${collection} feed:`,\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\t\t});\n\t}\n}\n\nasync function discoverRoutesWithFeeds(\n\tssrDataRoutes: Array<{ pattern: string; path: string; isLayout?: boolean }>,\n\tcollections: string[],\n\toptions: {\n\t\tcwd: string;\n\t\tclientDir: string;\n\t\tbaseUrl: string;\n\t\tisWatchMode: boolean;\n\t\trssConfig: RSSOptions | undefined;\n\t\tavailableFeeds: string[];\n\t},\n): Promise<Array<{ pattern: string; path: string; isLayout?: boolean }>> {\n\tconst routesWithFeeds: typeof ssrDataRoutes = [];\n\n\tfor (const route of ssrDataRoutes) {\n\t\tconst routeName = route.pattern.replace(/^\\//, '') || 'index';\n\t\tif (routeName === 'index' || collections.includes(routeName)) continue;\n\t\tif (options.rssConfig?.excludeRoutes?.includes(route.pattern)) continue;\n\n\t\ttry {\n\t\t\tconst items = await discoverSSRDataFeedItems(\n\t\t\t\toptions.cwd,\n\t\t\t\troute.pattern,\n\t\t\t\troute.path,\n\t\t\t\toptions.isWatchMode,\n\t\t\t\toptions.baseUrl,\n\t\t\t\toptions.rssConfig,\n\t\t\t);\n\n\t\t\tif (items.length > 0) {\n\t\t\t\troutesWithFeeds.push(route);\n\t\t\t\toptions.availableFeeds.push(`${route.pattern}/feed.xml`);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Skip routes that error during discovery\n\t\t}\n\t}\n\n\treturn routesWithFeeds;\n}\n\nasync function generateSSRDataFeed(\n\troute: { pattern: string; path: string; isLayout?: boolean },\n\toptions: {\n\t\tcwd: string;\n\t\tbaseUrl: string;\n\t\tisWatchMode: boolean;\n\t\trssCache: LRUCache<string, XmlCacheEntry>;\n\t\tformat: 'rss' | 'atom';\n\t\tlimit: number;\n\t\tmaxAge: number;\n\t\tttlMs: number;\n\t\trssConfig: RSSOptions | undefined;\n\t},\n): Promise<Response> {\n\tconst routeName = route.pattern.replace(/^\\//, '') || 'index';\n\tconst cacheKey = `rss:${routeName}`;\n\n\tconst cached = getIfValid(options.rssCache, cacheKey);\n\tif (cached) {\n\t\treturn feedResponse(cached.xml, options.format, {\n\t\t\tmaxAge: options.maxAge,\n\t\t\tcacheStatus: 'HIT',\n\t\t});\n\t}\n\n\tlet items = await discoverSSRDataFeedItems(\n\t\toptions.cwd,\n\t\troute.pattern,\n\t\troute.path,\n\t\toptions.isWatchMode,\n\t\toptions.baseUrl,\n\t\toptions.rssConfig,\n\t);\n\n\tif (items.length === 0 && route.isLayout) {\n\t\tconst discovery = await discoverRSSData(\n\t\t\toptions.cwd,\n\t\t\t[],\n\t\t\toptions.baseUrl,\n\t\t\toptions.isWatchMode,\n\t\t\toptions.rssConfig,\n\t\t);\n\t\titems = discovery.ssrDataFeeds.get(route.pattern) ?? [];\n\t}\n\n\tif (items.length === 0) throw new NotFoundError();\n\n\tconst feed: RSSFeed = {\n\t\ttitle: createFeedTitle(options.rssConfig?.title, routeName),\n\t\tlink: `${options.baseUrl}${route.pattern}/feed.xml`,\n\t\tdescription:\n\t\t\toptions.rssConfig?.description ?? `Latest ${routeName} updates`,\n\t\titems,\n\t};\n\n\tconst xml = generateFeed(feed, {\n\t\tformat: options.format,\n\t\tlimit: options.limit,\n\t});\n\toptions.rssCache.set(cacheKey, {\n\t\txml,\n\t\texp: Date.now() + options.ttlMs,\n\t});\n\n\treturn feedResponse(xml, options.format, {\n\t\tmaxAge: options.maxAge,\n\t\tcacheStatus: 'MISS',\n\t});\n}\n\nfunction registerSSRDataFeedRoutes(\n\tapp: Elysia,\n\troutesWithFeeds: Array<{ pattern: string; path: string; isLayout?: boolean }>,\n\toptions: {\n\t\tcwd: string;\n\t\tbaseUrl: string;\n\t\tisWatchMode: boolean;\n\t\trssCache: LRUCache<string, XmlCacheEntry>;\n\t\tformat: 'rss' | 'atom';\n\t\tlimit: number;\n\t\tmaxAge: number;\n\t\tttlMs: number;\n\t\trssConfig: RSSOptions | undefined;\n\t},\n) {\n\tfor (const route of routesWithFeeds) {\n\t\tapp.get(`${route.pattern}/feed.xml`, async () => {\n\t\t\ttry {\n\t\t\t\treturn await generateSSRDataFeed(route, options);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof NotFoundError) throw error;\n\t\t\t\tconst routeName = route.pattern.replace(/^\\//, '') || 'index';\n\t\t\t\tconsole.error(`[reroute] Failed to generate ${routeName} feed:`, error);\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport async function registerRSSRoutes(\n\tapp: Elysia,\n\toptions: RSSRouteOptions,\n): Promise<Elysia> {\n\tconst {\n\t\tcwd,\n\t\tclientDir,\n\t\tcollections,\n\t\tbaseUrl,\n\t\tmaxAge,\n\t\tisWatchMode,\n\t\trssCache,\n\t\trssConfig,\n\t} = options;\n\n\tconst ttlMs = toTTL(maxAge);\n\tconst limit = rssConfig?.limit ?? 50;\n\tconst format: 'rss' | 'atom' = (rssConfig?.format as 'rss' | 'atom') ?? 'rss';\n\tconst feedTitle = rssConfig?.title ?? 'Feed';\n\tconst feedDescription = rssConfig?.description ?? 'Latest updates';\n\tconst availableFeeds: string[] = ['/feed.xml'];\n\n\t// Main feed route\n\tregisterMainFeedRoute(\n\t\tapp,\n\t\tcwd,\n\t\tcollections,\n\t\tbaseUrl,\n\t\tisWatchMode,\n\t\trssCache,\n\t\tformat,\n\t\tlimit,\n\t\tmaxAge,\n\t\tttlMs,\n\t\tfeedTitle,\n\t\tfeedDescription,\n\t\trssConfig,\n\t);\n\n\t// Discover SSR data routes for per-route feeds\n\tconst ssrDataRoutes = await discoverSSRRoutes(cwd, isWatchMode);\n\n\t// Collection-specific feeds\n\tregisterCollectionFeedRoutes(app, collections, {\n\t\tcwd,\n\t\tclientDir,\n\t\tbaseUrl,\n\t\tisWatchMode,\n\t\trssCache,\n\t\tformat,\n\t\tlimit,\n\t\tmaxAge,\n\t\tttlMs,\n\t\trssConfig,\n\t\tavailableFeeds,\n\t});\n\n\t// Discover routes with feed items\n\tconst routesWithFeeds = await discoverRoutesWithFeeds(\n\t\tssrDataRoutes,\n\t\tcollections,\n\t\t{\n\t\t\tcwd,\n\t\t\tclientDir,\n\t\t\tbaseUrl,\n\t\t\tisWatchMode,\n\t\t\trssConfig,\n\t\t\tavailableFeeds,\n\t\t},\n\t);\n\n\t// Register SSR data route feeds\n\tregisterSSRDataFeedRoutes(app, routesWithFeeds, {\n\t\tcwd,\n\t\tbaseUrl,\n\t\tisWatchMode,\n\t\trssCache,\n\t\tformat,\n\t\tlimit,\n\t\tmaxAge,\n\t\tttlMs,\n\t\trssConfig,\n\t});\n\n\t(globalThis as Doc).__REROUTE_AVAILABLE_FEEDS__ = availableFeeds;\n\n\treturn app;\n}\n",
|
|
85
85
|
"import type { Elysia } from 'elysia';\nimport type { HeadingNode } from 'reroute-js/cli';\nimport { join } from 'reroute-js/core';\nimport { buildCacheControl } from '../libs/response';\n\ninterface SearchIndexEntry {\n\tid: string;\n\tcollection: string;\n\tname: string;\n\tslug: string;\n\thref: string;\n\ttitle: string;\n\texcerpt?: string;\n\tcontent?: string;\n\theadings: Array<{ level: number; text: string; slug: string }>;\n\tmeta: Record<string, unknown>;\n}\n\ninterface SearchHeading {\n\tlevel: number;\n\ttext: string;\n\tslug: string;\n}\n\ninterface SearchResultItem {\n\tid: string;\n\tcollection: string;\n\tslug: string;\n\thref: string;\n\ttitle: string;\n\texcerpt?: string;\n\tmatchedHeadings: SearchHeading[];\n}\n\ninterface SearchIndex {\n\tversion: number;\n\tgenerated: string;\n\tentries: SearchIndexEntry[];\n}\n\ninterface SearchOptions {\n\tcollections?: string[];\n\tpage?: number;\n\tpageSize?: number;\n}\n\nfunction scoreTitleMatch(title: string, term: string): number {\n\tconst lowerTitle = title.toLowerCase();\n\tif (!lowerTitle.includes(term)) return 0;\n\n\tlet score = 10;\n\tif (lowerTitle === term) score += 20;\n\treturn score;\n}\n\nfunction scoreHeadingMatches(\n\theadings: HeadingNode[],\n\tterm: string,\n\tmatchedHeadings: SearchHeading[],\n): number {\n\tlet score = 0;\n\tfor (const heading of headings) {\n\t\tif (heading.text.toLowerCase().includes(term)) {\n\t\t\tscore += 5;\n\t\t\tif (!matchedHeadings.some((h) => h.slug === heading.slug)) {\n\t\t\t\tmatchedHeadings.push(heading);\n\t\t\t}\n\t\t}\n\t}\n\treturn score;\n}\n\nfunction scoreMetaMatch(meta: Record<string, unknown>, term: string): number {\n\tlet score = 0;\n\tfor (const value of Object.values(meta)) {\n\t\tif (typeof value === 'string' && value.toLowerCase().includes(term)) {\n\t\t\tscore += 3;\n\t\t} else if (\n\t\t\tArray.isArray(value) &&\n\t\t\tvalue.some((v) => typeof v === 'string' && v.toLowerCase().includes(term))\n\t\t) {\n\t\t\tscore += 3;\n\t\t}\n\t}\n\treturn score;\n}\n\nfunction scoreEntry(\n\tentry: SearchIndexEntry,\n\tterms: string[],\n): {\n\tscore: number;\n\tmatchedHeadings: SearchHeading[];\n} {\n\tlet score = 0;\n\tconst matchedHeadings: SearchHeading[] = [];\n\n\tfor (const term of terms) {\n\t\tscore += scoreTitleMatch(entry.title, term);\n\t\tscore += scoreHeadingMatches(entry.headings, term, matchedHeadings);\n\t\tscore += scoreMetaMatch(entry.meta, term);\n\n\t\t// Content match (lower weight)\n\t\tif (entry.content?.toLowerCase().includes(term)) {\n\t\t\tscore += 1;\n\t\t}\n\t}\n\n\treturn { score, matchedHeadings };\n}\n\nfunction searchEntries(\n\tentries: SearchIndexEntry[],\n\tquery: string,\n\toptions: SearchOptions = {},\n): { results: SearchResultItem[]; total: number } {\n\tconst { collections, page = 1, pageSize = 20 } = options;\n\n\tconst terms = query\n\t\t.toLowerCase()\n\t\t.split(/\\s+/)\n\t\t.filter((t) => t.length > 1);\n\n\tif (terms.length === 0) return { results: [], total: 0 };\n\n\tconst scored = entries\n\t\t.filter(\n\t\t\t(entry) => !collections?.length || collections.includes(entry.collection),\n\t\t)\n\t\t.map((entry) => ({ entry, ...scoreEntry(entry, terms) }))\n\t\t.filter((item) => item.score > 0)\n\t\t.sort((a, b) => b.score - a.score);\n\n\tconst total = scored.length;\n\tconst startIndex = (page - 1) * pageSize;\n\tconst paginatedScored = scored.slice(startIndex, startIndex + pageSize);\n\n\tconst results = paginatedScored.map((item) => ({\n\t\tid: item.entry.id,\n\t\tcollection: item.entry.collection,\n\t\tslug: item.entry.slug,\n\t\thref: item.entry.href,\n\t\ttitle: item.entry.title,\n\t\texcerpt:\n\t\t\titem.entry.excerpt ??\n\t\t\tString(\n\t\t\t\titem.entry.meta.excerpt ?? item.entry.meta.description ?? '',\n\t\t\t).slice(0, 160),\n\t\tmatchedHeadings: item.matchedHeadings,\n\t}));\n\n\treturn { results, total };\n}\n\nexport function registerSearchRoute(\n\tapp: Elysia,\n\tcwd: string,\n\tdirective: string,\n\tmaxAge: number,\n\tsearchConfig?: {\n\t\tdefaultPageSize?: number;\n\t\tmaxPageSize?: number;\n\t},\n): Elysia {\n\tconst defaultPageSize = searchConfig?.defaultPageSize ?? 20;\n\tconst maxPageSize = searchConfig?.maxPageSize ?? 100;\n\n\tlet cachedIndex: SearchIndex | null = null;\n\tlet lastModified: number | null = null;\n\n\tasync function loadSearchIndex(): Promise<SearchIndex | null> {\n\t\ttry {\n\t\t\tconst indexPath = join(cwd, '.reroute', 'search.json');\n\t\t\tconst file = Bun.file(indexPath);\n\n\t\t\tif (!(await file.exists())) return null;\n\n\t\t\tconst stats = await file.stat();\n\t\t\tif (\n\t\t\t\t!(cachedIndex && lastModified) ||\n\t\t\t\tstats.mtime.getTime() > lastModified\n\t\t\t) {\n\t\t\t\tconst text = await file.text();\n\t\t\t\tcachedIndex = JSON.parse(text) as SearchIndex;\n\t\t\t\tlastModified = stats.mtime.getTime();\n\t\t\t}\n\n\t\t\treturn cachedIndex;\n\t\t} catch (error) {\n\t\t\tconsole.error('[reroute] Failed to load search index:', error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tapp.get('/__reroute_search', async ({ query }) => {\n\t\tconst searchQuery = String(query.q || query.query || '').trim();\n\n\t\tif (!searchQuery) {\n\t\t\treturn Response.json(\n\t\t\t\t{ error: 'Query parameter \"q\" is required' },\n\t\t\t\t{ status: 400 },\n\t\t\t);\n\t\t}\n\n\t\tconst index = await loadSearchIndex();\n\n\t\tif (!index) {\n\t\t\treturn Response.json(\n\t\t\t\t{ error: 'Search index not found. Enable search in reroute.config.ts' },\n\t\t\t\t{ status: 404 },\n\t\t\t);\n\t\t}\n\n\t\tconst collections = query.collections\n\t\t\t? String(query.collections).split(',').filter(Boolean)\n\t\t\t: undefined;\n\n\t\tconst page = query.page\n\t\t\t? Math.max(1, Number.parseInt(String(query.page), 10))\n\t\t\t: 1;\n\n\t\tconst requestedPageSize = query.pageSize\n\t\t\t? Number.parseInt(String(query.pageSize), 10)\n\t\t\t: defaultPageSize;\n\n\t\tconst pageSize = Math.min(Math.max(1, requestedPageSize), maxPageSize);\n\n\t\tconst { results, total } = searchEntries(index.entries, searchQuery, {\n\t\t\tcollections,\n\t\t\tpage,\n\t\t\tpageSize,\n\t\t});\n\n\t\treturn Response.json(\n\t\t\t{\n\t\t\t\ttotal,\n\t\t\t\tpage,\n\t\t\t\tpageSize,\n\t\t\t\ttotalPages: Math.ceil(total / pageSize),\n\t\t\t\tresults,\n\t\t\t},\n\t\t\t{\n\t\t\t\theaders: {\n\t\t\t\t\t'content-type': 'application/json; charset=utf-8',\n\t\t\t\t\t'cache-control': buildCacheControl(\n\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\tdirective as 'public' | 'private',\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\treturn app;\n}\n",
|
|
86
86
|
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport {\n\tdiscoverSitemapData,\n\tgenerateSitemap,\n\ttype LRUCache,\n\ttype SitemapOptions,\n} from 'reroute-js/core';\nimport { getIfValid, toTTL, type XmlCacheEntry } from '../libs/caching';\nimport { xmlResponse } from '../libs/response';\nimport type { Any } from '../types';\n\ntype SitemapRouteOptions = {\n\tcwd: string;\n\tcollections: string[];\n\tbaseUrl: string;\n\tmaxAge: number;\n\tisWatchMode: boolean;\n\tsitemapCache: LRUCache<string, XmlCacheEntry>;\n\tsitemapConfig?: SitemapOptions;\n};\n\nasync function generateAndCacheSitemap(\n\toptions: SitemapRouteOptions,\n\t_ttlMs: number,\n): Promise<{\n\txml: string;\n\tpages: Array<{ filename: string; xml: string }>;\n\tneedsIndex: boolean;\n}> {\n\tconst { cwd, collections, baseUrl, isWatchMode, sitemapConfig } = options;\n\n\tconst discovery = await discoverSitemapData(\n\t\tcwd,\n\t\tcollections,\n\t\tbaseUrl,\n\t\tisWatchMode,\n\t\tsitemapConfig,\n\t);\n\n\tconst result = await generateSitemap(discovery, baseUrl, {\n\t\tchangefreq: sitemapConfig?.changefreq,\n\t\tpriority: sitemapConfig?.priority,\n\t\tmaxUrlsPerPage: sitemapConfig?.maxUrlsPerPage,\n\t\texcludeRoutes: sitemapConfig?.excludeRoutes,\n\t});\n\n\treturn {\n\t\txml: result.needsIndex\n\t\t\t? (result.indexXml ?? '')\n\t\t\t: (result.pages[0]?.xml ?? ''),\n\t\tpages: result.pages,\n\t\tneedsIndex: result.needsIndex,\n\t};\n}\n\nexport function registerSitemapRoutes(\n\tapp: Elysia,\n\toptions: SitemapRouteOptions,\n): Elysia {\n\tconst { maxAge, sitemapCache } = options;\n\tconst ttlMs = toTTL(maxAge);\n\n\t// Main sitemap route\n\tapp.get('/sitemap.xml', async () => {\n\t\ttry {\n\t\t\tconst cached = getIfValid(sitemapCache, 'sitemap:main');\n\t\t\tif (cached) {\n\t\t\t\treturn xmlResponse(cached.xml, { maxAge, cacheStatus: 'HIT' });\n\t\t\t}\n\n\t\t\tconst result = await generateAndCacheSitemap(options, ttlMs);\n\n\t\t\t// Cache pages if index mode\n\t\t\tif (result.needsIndex) {\n\t\t\t\tfor (const page of result.pages) {\n\t\t\t\t\tsitemapCache.set(`sitemap:${page.filename}`, {\n\t\t\t\t\t\txml: page.xml,\n\t\t\t\t\t\texp: Date.now() + ttlMs,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cache main\n\t\t\tsitemapCache.set('sitemap:main', {\n\t\t\t\txml: result.xml,\n\t\t\t\texp: Date.now() + ttlMs,\n\t\t\t});\n\n\t\t\treturn xmlResponse(result.xml, { maxAge, cacheStatus: 'MISS' });\n\t\t} catch (error) {\n\t\t\tconsole.error('[reroute] Failed to generate sitemap:', error);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\t// Paginated sitemap routes\n\tapp.get('/sitemap-*', async ({ params }: Any) => {\n\t\tconst wildcardPath = params['*'] || '';\n\t\tconst pageMatch = wildcardPath.match(/^(\\d+)\\.xml$/);\n\n\t\tif (!pageMatch) {\n\t\t\tthrow new NotFoundError();\n\t\t}\n\n\t\tconst filename = `sitemap-${pageMatch[1]}.xml`;\n\t\tconst cacheKey = `sitemap:${filename}`;\n\n\t\ttry {\n\t\t\tconst cached = getIfValid(sitemapCache, cacheKey);\n\t\t\tif (cached) {\n\t\t\t\treturn xmlResponse(cached.xml, { maxAge, cacheStatus: 'HIT' });\n\t\t\t}\n\n\t\t\tconst result = await generateAndCacheSitemap(options, ttlMs);\n\t\t\tconst pageData = result.pages.find((p) => p.filename === filename);\n\n\t\t\tif (!pageData) {\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\n\t\t\tsitemapCache.set(cacheKey, {\n\t\t\t\txml: pageData.xml,\n\t\t\t\texp: Date.now() + ttlMs,\n\t\t\t});\n\n\t\t\treturn xmlResponse(pageData.xml, { maxAge, cacheStatus: 'MISS' });\n\t\t} catch (error) {\n\t\t\tif (error instanceof NotFoundError) throw error;\n\t\t\tconsole.error('[reroute] Failed to generate paginated sitemap:', error);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\treturn app;\n}\n",
|
|
87
|
-
"import { join } from 'node:path';\nimport { type Span, trace } from '@opentelemetry/api';\nimport type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport type { ReactElement } from 'react';\nimport {\n\tgzipIfAccepted,\n\tLRUCache,\n\ttype OGImageOptions,\n\trenderSSRDocument,\n\trenderSSRDocumentStream,\n} from 'reroute-js/core';\nimport { withParentSpan, withSpan } from 'reroute-js/telemetry/server';\nimport type { Any } from '../types';\n\n// CRITICAL: Add global handlers to prevent unhandled errors from crashing the server\n// These catch errors that escape all other error handling\nif (typeof process !== 'undefined') {\n\tprocess.on('unhandledRejection', (reason, _promise) => {\n\t\tconsole.error('[reroute] Unhandled Promise Rejection:', reason);\n\t\t// Don't exit - just log and continue\n\t});\n\n\tprocess.on('uncaughtException', (error) => {\n\t\tconsole.error('[reroute] Uncaught Exception:', error);\n\t\t// Don't exit for recoverable errors - just log\n\t\t// The server will continue running\n\t});\n}\n\n// Helper to check if OpenTelemetry is available\nlet otelAvailable: boolean | undefined;\n\nfunction isOtelAvailable(): boolean {\n\tif (otelAvailable !== undefined) return otelAvailable;\n\n\ttry {\n\t\t// Check if @opentelemetry/api is available\n\t\trequire('@opentelemetry/api');\n\t\totelAvailable = true;\n\t\treturn true;\n\t} catch {\n\t\totelAvailable = false;\n\t\treturn false;\n\t}\n}\n\ntype SSRRouteOptions = {\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tgetBundleUrl: () => Promise<string>;\n\tgetCollections: () => Promise<Record<string, unknown[]>>;\n\tgetTailwindCSS: () => Promise<string>;\n\tgetIndexHtml: () => Promise<string>;\n\tdebug?: boolean;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tmaxAge?: number;\n\tdirective?: string;\n\tcompression?: boolean;\n\tstreamingEnabled?: boolean;\n\tstreamingTimeout?: number;\n\togConfig?: OGImageOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n};\n\nfunction registerSSRRoutes(app: Elysia, options: SSRRouteOptions): Elysia {\n\tconst {\n\t\trootComponent,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tgetBundleUrl,\n\t\tgetCollections,\n\t\tgetTailwindCSS,\n\t\tgetIndexHtml,\n\t\tdebug = false,\n\t\thead = '',\n\t\tlang = 'en',\n\t\tappId = 'root',\n\t\tmaxAge = 3600,\n\t\tdirective = 'public',\n\t\tcompression = true,\n\t\tstreamingEnabled = false,\n\t} = options;\n\n\t// Cache SSR HTML in-memory based on maxAge config\n\t// If maxAge is 0, don't cache at all (user wants fresh data)\n\t// Otherwise use maxAge or default to 5 minutes\n\tconst SSR_HTML_TTL_MS = maxAge === 0 ? 0 : maxAge * 1000 || 5 * 60 * 1000;\n\tconst htmlCache = new LRUCache<\n\t\tstring,\n\t\t{\n\t\t\tstatus: number;\n\t\t\theaders: Record<string, string>;\n\t\t\tbody: BodyInit;\n\t\t\texp: number;\n\t\t}\n\t>(200);\n\tconst makeKey = (pathname: string, acceptEncoding: string | undefined) =>\n\t\t`${pathname}::${acceptEncoding || 'identity'}`;\n\n\t// Load routes from manifest.json\n\tlet staticRoutes: string[] = [];\n\tlet contentRoutes: string[] = [];\n\tlet dynamicRoutes: string[] = [];\n\ttry {\n\t\tconst manifestPath = join(cwd, '.reroute', 'manifest.json');\n\t\tconst { readFileSync } = require('node:fs');\n\t\tconst manifestText = readFileSync(manifestPath, 'utf-8');\n\t\tconst manifest = JSON.parse(manifestText);\n\t\tstaticRoutes = manifest.staticRoutes || [];\n\t\tcontentRoutes = manifest.contentRoutes || [];\n\t\tdynamicRoutes = manifest.dynamicRoutes || [];\n\t} catch {\n\t\t// Manifest not found, fallback to root only\n\t\tstaticRoutes = ['/'];\n\t}\n\n\t// Shared SSR handler function\n\n\tconst handleSSR = async ({\n\t\trequest,\n\t\tset,\n\t\tstore,\n\t}: {\n\t\trequest: Request;\n\t\tset: Any;\n\t\tstore: Any;\n\t}) => {\n\t\tconst t0 = performance.now();\n\t\tconst method = request.method || 'GET';\n\t\tif (method !== 'GET') throw new NotFoundError();\n\n\t\t// Only handle HTML requests (or Accept: */*)\n\t\tconst accept = request.headers.get('accept') || '';\n\t\t// Accept text/html, */* (any type), or missing Accept header\n\t\tif (accept && !/text\\/html|\\*\\/\\*/i.test(String(accept))) {\n\t\t\tthrow new NotFoundError();\n\t\t}\n\n\t\tconst url = new URL(request.url);\n\t\tconst pathname = url.pathname;\n\t\tconst fullPath = pathname;\n\t\tconst searchParams = url.searchParams;\n\t\tconst acceptEncoding = request.headers.get('accept-encoding') || '';\n\n\t\t// Extract request headers for SSR data functions\n\t\tconst headers: Record<string, string> = {};\n\t\trequest.headers.forEach((value, key) => {\n\t\t\theaders[key.toLowerCase()] = value;\n\t\t});\n\n\t\t// Execute SSR operations within parent span context\n\t\tconst parentSpan = (store as Record<string, unknown>).telemetrySpan as\n\t\t\t| Span\n\t\t\t| undefined;\n\n\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: SSR request handling involves many scenarios - streaming, caching, compression, and error handling\n\t\treturn withParentSpan(parentSpan, async () => {\n\t\t\t// Serve cached HTML if fresh (skip cache in watch mode)\n\t\t\t// For streaming mode, we track whether this is first or subsequent request\n\t\t\tlet isFirstStreamingRequest = false;\n\t\t\tif (!isWatchMode && SSR_HTML_TTL_MS > 0) {\n\t\t\t\ttry {\n\t\t\t\t\tconst ck = makeKey(pathname, acceptEncoding);\n\t\t\t\t\tconst cached = htmlCache.get(ck);\n\t\t\t\t\tif (cached && cached.exp > Date.now()) {\n\t\t\t\t\t\tif (isOtelAvailable()) {\n\t\t\t\t\t\t\tconst currentSpan = trace.getActiveSpan();\n\t\t\t\t\t\t\tcurrentSpan?.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.cache.hit': true,\n\t\t\t\t\t\t\t\t'reroute.cache.key': ck,\n\t\t\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tset.status = cached.status;\n\t\t\t\t\t\tObject.assign(set.headers, cached.headers);\n\t\t\t\t\t\tset.headers['Reroute-Cache'] = 'HIT';\n\t\t\t\t\t\treturn new Response(cached.body);\n\t\t\t\t\t}\n\n\t\t\t\t\t// For streaming mode: check if uncompressed version is cached\n\t\t\t\t\t// This helps us determine if it's the first request (no cache) or subsequent (has uncompressed cache)\n\t\t\t\t\tif (streamingEnabled && acceptEncoding) {\n\t\t\t\t\t\tconst uncompressedKey = makeKey(pathname, 'identity');\n\t\t\t\t\t\tconst uncompressedCached = htmlCache.get(uncompressedKey);\n\t\t\t\t\t\tisFirstStreamingRequest =\n\t\t\t\t\t\t\t!uncompressedCached || uncompressedCached.exp <= Date.now();\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tconst bundleUrl = await withSpan('ssr.get.bundle', async (span) => {\n\t\t\t\tspan.setAttribute('reroute.pathname', pathname);\n\t\t\t\tconst url = await getBundleUrl();\n\t\t\t\tif (debug)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[SSR] ${pathname} - bundleUrl: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t);\n\t\t\t\treturn url;\n\t\t\t});\n\n\t\t\t// Get cached collections, CSS, and template (instant in prod, reload in dev)\n\t\t\tconst { cachedCollections, cachedTailwindCSS, cachedIndexHtml } =\n\t\t\t\tawait withSpan('ssr.load.cache', async (span) => {\n\t\t\t\t\tconst collections = await getCollections();\n\t\t\t\t\tconst tailwindCSS = await getTailwindCSS();\n\t\t\t\t\tconst indexHtml = await getIndexHtml();\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t'reroute.collections.exists': !!collections,\n\t\t\t\t\t\t'reroute.collections.count': Object.keys(collections).length,\n\t\t\t\t\t});\n\t\t\t\t\tif (debug)\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[SSR] ${pathname} - cached setup: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcachedCollections: collections,\n\t\t\t\t\t\tcachedTailwindCSS: tailwindCSS,\n\t\t\t\t\t\tcachedIndexHtml: indexHtml,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Compose Early Hints (103) and Link header for main bundle\n\t\t\ttry {\n\t\t\t\tconst linkValue = `<${bundleUrl}>; rel=modulepreload; as=script`;\n\t\t\t\ttry {\n\t\t\t\t\tconst hints = new Headers({ Link: linkValue });\n\t\t\t\t\t(request as Any)?.sendEarlyHints?.(hints);\n\t\t\t\t} catch {}\n\t\t\t\tset.headers.link = set.headers.link\n\t\t\t\t\t? `${set.headers.link}, ${linkValue}`\n\t\t\t\t\t: linkValue;\n\t\t\t} catch {}\n\n\t\t\t// Use no-cache headers in watch mode to ensure fresh content\n\t\t\tconst cacheControlHeader = isWatchMode\n\t\t\t\t? 'no-cache, no-store, must-revalidate'\n\t\t\t\t: `${directive}, max-age=${maxAge}`;\n\n\t\t\tlet response: Response;\n\n\t\t\tif (streamingEnabled) {\n\t\t\t\t// Streaming SSR path\n\t\t\t\tif (debug)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[SSR] ${pathname} - starting stream: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t);\n\n\t\t\t\tconst { stream, status } = await withSpan(\n\t\t\t\t\t'ssr.document.render',\n\t\t\t\t\tasync (renderSpan) => {\n\t\t\t\t\t\trenderSpan?.setAttributes({\n\t\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t\t'reroute.cache.hit': false,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst result = await renderSSRDocumentStream({\n\t\t\t\t\t\t\tpathname: fullPath,\n\t\t\t\t\t\t\trootComponent,\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\tbundleUrl,\n\t\t\t\t\t\t\tcachedCollections,\n\t\t\t\t\t\t\tcachedTailwindCSS,\n\t\t\t\t\t\t\tcachedIndexHtml,\n\t\t\t\t\t\t\tdebug,\n\t\t\t\t\t\t\thead,\n\t\t\t\t\t\t\tlang,\n\t\t\t\t\t\t\tappId,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tsearchParams,\n\t\t\t\t\t\t\togConfig: options.ogConfig,\n\t\t\t\t\t\t\tbaseUrl: options.baseUrl,\n\t\t\t\t\t\t\tautoCanonical: options.autoCanonical,\n\t\t\t\t\t\t\tparentSpan: renderSpan,\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\ttimeout: options.streamingTimeout,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\trenderSpan?.setAttribute(\n\t\t\t\t\t\t\t'http.response.status_code',\n\t\t\t\t\t\t\tresult.status,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[SSR] ${pathname} - render completed: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\t// Determine if we should compress this streaming response\n\t\t\t\t// - First request: No compression (fast TTFB)\n\t\t\t\t// - Subsequent requests: Compress and cache (better transfer size)\n\t\t\t\tconst shouldCompressStream =\n\t\t\t\t\tcompression && acceptEncoding && !isFirstStreamingRequest;\n\n\t\t\t\tif (debug)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[SSR] ${pathname} - before compression check: ${(performance.now() - t0).toFixed(2)}ms, compression=${compression}, acceptEncoding=${!!acceptEncoding}, isFirstRequest=${isFirstStreamingRequest}, shouldCompress=${shouldCompressStream}`,\n\t\t\t\t\t);\n\n\t\t\t\t// When compression is enabled and not first request, buffer and compress the stream\n\t\t\t\tif (shouldCompressStream) {\n\t\t\t\t\t// Buffer all chunks with instrumentation\n\t\t\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Stream buffering with chunking\n\t\t\t\t\tconst fullHtml = await withSpan('ssr.buffer.stream', async (span) => {\n\t\t\t\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\t\t\t\tconst reader = stream.getReader();\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\t\t\t\t\tif (done) break;\n\t\t\t\t\t\t\t\tchunks.push(new Uint8Array(value));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\treader.releaseLock();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Combine chunks into single buffer\n\t\t\t\t\t\tconst totalLength = chunks.reduce((sum, c) => sum + c.length, 0);\n\t\t\t\t\t\tconst buffer = new Uint8Array(totalLength);\n\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\tfor (const chunk of chunks) {\n\t\t\t\t\t\t\tbuffer.set(chunk, offset);\n\t\t\t\t\t\t\toffset += chunk.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\t'reroute.stream.chunks': chunks.length,\n\t\t\t\t\t\t\t'reroute.stream.bytes': totalLength,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn buffer;\n\t\t\t\t\t});\n\n\t\t\t\t\t// Compress the buffered HTML\n\t\t\t\t\tconst { body, extraHeaders } = await withSpan(\n\t\t\t\t\t\t'ssr.compress',\n\t\t\t\t\t\tasync (span) => {\n\t\t\t\t\t\t\tconst result = gzipIfAccepted(\n\t\t\t\t\t\t\t\tfullHtml,\n\t\t\t\t\t\t\t\t'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\tacceptEncoding,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.size.original': fullHtml.length,\n\t\t\t\t\t\t\t\t'reroute.size.compressed': (result.body as Uint8Array).length,\n\t\t\t\t\t\t\t\t'reroute.encoding':\n\t\t\t\t\t\t\t\t\tresult.extraHeaders['Content-Encoding'] || 'none',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\t// Cache if needed\n\t\t\t\t\tif (!isWatchMode && SSR_HTML_TTL_MS > 0 && status === 200) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst ck = makeKey(pathname, acceptEncoding);\n\t\t\t\t\t\t\tconst cacheHeaders: Record<string, string> = {\n\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (set.headers.link) {\n\t\t\t\t\t\t\t\tcacheHeaders.Link = set.headers.link as string;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thtmlCache.set(ck, {\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\theaders: cacheHeaders,\n\t\t\t\t\t\t\t\tbody: body as BodyInit,\n\t\t\t\t\t\t\t\texp: Date.now() + SSR_HTML_TTL_MS,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst resHeaders: Record<string, string> = {\n\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t};\n\t\t\t\t\tif (set.headers.link) {\n\t\t\t\t\t\tresHeaders.Link = set.headers.link as string;\n\t\t\t\t\t}\n\n\t\t\t\t\tset.status = status;\n\n\t\t\t\t\tresponse = new Response(body as BodyInit, {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\theaders: resHeaders,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// No compression - stream with caching if enabled\n\t\t\t\t\tconst shouldCache =\n\t\t\t\t\t\t!isWatchMode && SSR_HTML_TTL_MS > 0 && status === 200;\n\n\t\t\t\t\tif (debug)\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[SSR] ${pathname} - no compression path, shouldCache=${shouldCache}`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\tif (shouldCache) {\n\t\t\t\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Response creation with transform stream caching\n\t\t\t\t\t\tresponse = await withSpan('ssr.create.response', async (span) => {\n\t\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t`[SSR] ${pathname} - creating caching stream: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// Cache the stream as it passes through\n\t\t\t\t\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\t\t\t\t\tconst cachingStream = stream.pipeThrough(\n\t\t\t\t\t\t\t\tnew TransformStream({\n\t\t\t\t\t\t\t\t\ttransform(chunk, controller) {\n\t\t\t\t\t\t\t\t\t\tchunks.push(new Uint8Array(chunk));\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Flush callback handles caching and error recovery for streaming\n\t\t\t\t\t\t\t\t\tflush() {\n\t\t\t\t\t\t\t\t\t\t// Cache the complete HTML after streaming finishes\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tconst totalLength = chunks.reduce(\n\t\t\t\t\t\t\t\t\t\t\t\t(sum, c) => sum + c.length,\n\t\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tconst fullHtml = new Uint8Array(totalLength);\n\t\t\t\t\t\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\t\t\t\t\t\tfor (const chunk of chunks) {\n\t\t\t\t\t\t\t\t\t\t\t\tfullHtml.set(chunk, offset);\n\t\t\t\t\t\t\t\t\t\t\t\toffset += chunk.length;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Cache as uncompressed with 'identity' encoding\n\t\t\t\t\t\t\t\t\t\t\t// This allows subsequent requests to detect it's cached and use compression\n\t\t\t\t\t\t\t\t\t\t\tconst ck = makeKey(pathname, 'identity');\n\t\t\t\t\t\t\t\t\t\t\tconst cacheHeaders: Record<string, string> = {\n\t\t\t\t\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\tif (set.headers.link) {\n\t\t\t\t\t\t\t\t\t\t\t\tcacheHeaders.Link = set.headers.link as string;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\thtmlCache.set(ck, {\n\t\t\t\t\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\t\t\t\t\theaders: cacheHeaders,\n\t\t\t\t\t\t\t\t\t\t\t\tbody: fullHtml,\n\t\t\t\t\t\t\t\t\t\t\t\texp: Date.now() + SSR_HTML_TTL_MS,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.error('[reroute] Failed to cache stream:', e);\n\t\t\t\t\t\t\t\t\t\t}\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\n\t\t\t\t\t\t\tset.status = status;\n\n\t\t\t\t\t\t\tconst tBeforeResponse = debug ? performance.now() : 0;\n\t\t\t\t\t\t\tconst res = new Response(cachingStream, {\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t`[SSR] ${pathname} - Response created (cached stream): ${(performance.now() - t0).toFixed(2)}ms (creation: ${(performance.now() - tBeforeResponse).toFixed(2)}ms)`,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tspan.setAttribute('reroute.cached', true);\n\t\t\t\t\t\t\treturn res;\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No caching - return stream directly\n\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[SSR] ${pathname} - creating direct stream response: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tset.status = status;\n\n\t\t\t\t\t\tresponse = new Response(stream, {\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[SSR] ${pathname} - Response created (direct stream): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Non-streaming SSR path\n\t\t\t\tlet html: string;\n\t\t\t\tlet status: number;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await withSpan(\n\t\t\t\t\t\t'ssr.render.sync',\n\t\t\t\t\t\tasync (renderSpan) => {\n\t\t\t\t\t\t\trenderSpan?.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t\t\t'reroute.cache.hit': false,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst renderResult = await renderSSRDocument({\n\t\t\t\t\t\t\t\tpathname: fullPath,\n\t\t\t\t\t\t\t\trootComponent,\n\t\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\t\tbundleUrl,\n\t\t\t\t\t\t\t\thead,\n\t\t\t\t\t\t\t\tlang,\n\t\t\t\t\t\t\t\tappId,\n\t\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\t\tsearchParams,\n\t\t\t\t\t\t\t\togConfig: options.ogConfig,\n\t\t\t\t\t\t\t\tbaseUrl: options.baseUrl,\n\t\t\t\t\t\t\t\tautoCanonical: options.autoCanonical,\n\t\t\t\t\t\t\t\tparentSpan: renderSpan, // Pass the ssr.render.sync span as parent\n\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\trenderSpan?.setAttribute(\n\t\t\t\t\t\t\t\t'http.response.status_code',\n\t\t\t\t\t\t\t\trenderResult.status,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn renderResult;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\thtml = result.html;\n\t\t\t\t\tstatus = result.status;\n\t\t\t\t} catch (ssrError) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'[reroute] SSR rendering failed, returning error page:',\n\t\t\t\t\t\tssrError,\n\t\t\t\t\t);\n\t\t\t\t\tset.status = 500; // Ensure telemetry captures 500 status\n\t\t\t\t\tconst errorHtml = `<!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>Error</title>\n <style>\n body { font-family: system-ui, sans-serif; padding: 2rem; background: #111; color: #fff; }\n h1 { color: #f87171; }\n pre { background: #222; padding: 1rem; border-radius: 0.5rem; overflow: auto; }\n </style>\n</head>\n<body>\n <h1>Server Error</h1>\n <p>An error occurred while rendering this page.</p>\n ${isWatchMode ? `<pre>${ssrError instanceof Error ? ssrError.stack : String(ssrError)}</pre>` : ''}\n <script type=\"module\" src=\"${bundleUrl}\"></script>\n</body>\n</html>`;\n\t\t\t\t\treturn new Response(errorHtml, {\n\t\t\t\t\t\tstatus: 500,\n\t\t\t\t\t\theaders: { 'Content-Type': 'text/html; charset=utf-8' },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Apply compression if enabled\n\t\t\t\tconst { body, extraHeaders } = compression\n\t\t\t\t\t? await withSpan('ssr.compress', async (span) => {\n\t\t\t\t\t\t\tconst result = gzipIfAccepted(\n\t\t\t\t\t\t\t\thtml,\n\t\t\t\t\t\t\t\t'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\tacceptEncoding,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.size.original': html.length,\n\t\t\t\t\t\t\t\t'reroute.size.compressed':\n\t\t\t\t\t\t\t\t\ttypeof result.body === 'string'\n\t\t\t\t\t\t\t\t\t\t? result.body.length\n\t\t\t\t\t\t\t\t\t\t: (result.body as Uint8Array).length,\n\t\t\t\t\t\t\t\t'reroute.encoding':\n\t\t\t\t\t\t\t\t\tresult.extraHeaders['Content-Encoding'] || 'none',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t})\n\t\t\t\t\t: { body: html, extraHeaders: {} };\n\n\t\t\t\tconst resHeaders: Record<string, string> = {\n\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t...extraHeaders,\n\t\t\t\t};\n\t\t\t\tif (set.headers.link) {\n\t\t\t\t\tresHeaders.Link = set.headers.link as string;\n\t\t\t\t}\n\n\t\t\t\tset.status = status;\n\n\t\t\t\tresponse = new Response(body as BodyInit, {\n\t\t\t\t\tstatus,\n\t\t\t\t\theaders: resHeaders,\n\t\t\t\t});\n\n\t\t\t\t// Cache the HTML if successful and cacheable\n\t\t\t\tif (\n\t\t\t\t\t!isWatchMode &&\n\t\t\t\t\tSSR_HTML_TTL_MS > 0 &&\n\t\t\t\t\tstatus >= 200 &&\n\t\t\t\t\tstatus < 300\n\t\t\t\t) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ck = makeKey(pathname, acceptEncoding);\n\t\t\t\t\t\thtmlCache.set(ck, {\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\theaders: resHeaders,\n\t\t\t\t\t\t\tbody: body as BodyInit,\n\t\t\t\t\t\t\texp: Date.now() + SSR_HTML_TTL_MS,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst tBeforeReturn = debug ? performance.now() : 0;\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[SSR] ${pathname} - about to return response: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\tconst returnValue = response;\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[SSR] ${pathname} - response returned: ${(performance.now() - t0).toFixed(2)}ms (return overhead: ${(performance.now() - tBeforeReturn).toFixed(2)}ms)`,\n\t\t\t\t);\n\t\t\treturn returnValue;\n\t\t});\n\t};\n\n\t// Register all routes from manifest\n\tconst allRoutes = [...staticRoutes, ...contentRoutes, ...dynamicRoutes];\n\tfor (const path of allRoutes) {\n\t\tapp.get(path, handleSSR);\n\t}\n\n\t// Register a catch-all route to handle 404s with custom not found pages\n\t// This must come after all other routes\n\tapp.get('*', handleSSR);\n\n\treturn app;\n}\n\nexport { registerSSRRoutes };\n",
|
|
87
|
+
"import { join } from 'node:path';\nimport { type Span, trace } from '@opentelemetry/api';\nimport type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport type { ReactElement } from 'react';\nimport {\n\tgzipIfAccepted,\n\tLRUCache,\n\ttype OGImageOptions,\n\ttype OGOptions,\n\trenderSSRDocument,\n\trenderSSRDocumentStream,\n} from 'reroute-js/core';\nimport { withParentSpan, withSpan } from 'reroute-js/telemetry/server';\nimport type { Any } from '../types';\n\n// CRITICAL: Add global handlers to prevent unhandled errors from crashing the server\n// These catch errors that escape all other error handling\nif (typeof process !== 'undefined') {\n\tprocess.on('unhandledRejection', (reason, _promise) => {\n\t\tconsole.error('[reroute] Unhandled Promise Rejection:', reason);\n\t\t// Don't exit - just log and continue\n\t});\n\n\tprocess.on('uncaughtException', (error) => {\n\t\tconsole.error('[reroute] Uncaught Exception:', error);\n\t\t// Don't exit for recoverable errors - just log\n\t\t// The server will continue running\n\t});\n}\n\n// Helper to check if OpenTelemetry is available\nlet otelAvailable: boolean | undefined;\n\nfunction isOtelAvailable(): boolean {\n\tif (otelAvailable !== undefined) return otelAvailable;\n\n\ttry {\n\t\t// Check if @opentelemetry/api is available\n\t\trequire('@opentelemetry/api');\n\t\totelAvailable = true;\n\t\treturn true;\n\t} catch {\n\t\totelAvailable = false;\n\t\treturn false;\n\t}\n}\n\ntype SSRRouteOptions = {\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tgetBundleUrl: () => Promise<string>;\n\tgetCollections: () => Promise<Record<string, unknown[]>>;\n\tgetTailwindCSS: () => Promise<string>;\n\tgetIndexHtml: () => Promise<string>;\n\tdebug?: boolean;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tmaxAge?: number;\n\tdirective?: string;\n\tcompression?: boolean;\n\tstreamingEnabled?: boolean;\n\tstreamingTimeout?: number;\n\togConfig?: OGImageOptions;\n\togMetaConfig?: OGOptions;\n\tbaseUrl?: string;\n\tautoCanonical?: boolean;\n};\n\nfunction registerSSRRoutes(app: Elysia, options: SSRRouteOptions): Elysia {\n\tconst {\n\t\trootComponent,\n\t\tclientDir,\n\t\tcwd,\n\t\tisWatchMode,\n\t\tgetBundleUrl,\n\t\tgetCollections,\n\t\tgetTailwindCSS,\n\t\tgetIndexHtml,\n\t\tdebug = false,\n\t\thead = '',\n\t\tlang = 'en',\n\t\tappId = 'root',\n\t\tmaxAge = 3600,\n\t\tdirective = 'public',\n\t\tcompression = true,\n\t\tstreamingEnabled = false,\n\t} = options;\n\n\t// Cache SSR HTML in-memory based on maxAge config\n\t// If maxAge is 0, don't cache at all (user wants fresh data)\n\t// Otherwise use maxAge or default to 5 minutes\n\tconst SSR_HTML_TTL_MS = maxAge === 0 ? 0 : maxAge * 1000 || 5 * 60 * 1000;\n\tconst htmlCache = new LRUCache<\n\t\tstring,\n\t\t{\n\t\t\tstatus: number;\n\t\t\theaders: Record<string, string>;\n\t\t\tbody: BodyInit;\n\t\t\texp: number;\n\t\t}\n\t>(200);\n\tconst makeKey = (pathname: string, acceptEncoding: string | undefined) =>\n\t\t`${pathname}::${acceptEncoding || 'identity'}`;\n\n\t// Load routes from manifest.json\n\tlet staticRoutes: string[] = [];\n\tlet contentRoutes: string[] = [];\n\tlet dynamicRoutes: string[] = [];\n\ttry {\n\t\tconst manifestPath = join(cwd, '.reroute', 'manifest.json');\n\t\tconst { readFileSync } = require('node:fs');\n\t\tconst manifestText = readFileSync(manifestPath, 'utf-8');\n\t\tconst manifest = JSON.parse(manifestText);\n\t\tstaticRoutes = manifest.staticRoutes || [];\n\t\tcontentRoutes = manifest.contentRoutes || [];\n\t\tdynamicRoutes = manifest.dynamicRoutes || [];\n\t} catch {\n\t\t// Manifest not found, fallback to root only\n\t\tstaticRoutes = ['/'];\n\t}\n\n\t// Shared SSR handler function\n\n\tconst handleSSR = async ({\n\t\trequest,\n\t\tset,\n\t\tstore,\n\t}: {\n\t\trequest: Request;\n\t\tset: Any;\n\t\tstore: Any;\n\t}) => {\n\t\tconst t0 = performance.now();\n\t\tconst method = request.method || 'GET';\n\t\tif (method !== 'GET') throw new NotFoundError();\n\n\t\t// Only handle HTML requests (or Accept: */*)\n\t\tconst accept = request.headers.get('accept') || '';\n\t\t// Accept text/html, */* (any type), or missing Accept header\n\t\tif (accept && !/text\\/html|\\*\\/\\*/i.test(String(accept))) {\n\t\t\tthrow new NotFoundError();\n\t\t}\n\n\t\tconst url = new URL(request.url);\n\t\tconst pathname = url.pathname;\n\t\tconst fullPath = pathname;\n\t\tconst searchParams = url.searchParams;\n\t\tconst acceptEncoding = request.headers.get('accept-encoding') || '';\n\n\t\t// Extract request headers for SSR data functions\n\t\tconst headers: Record<string, string> = {};\n\t\trequest.headers.forEach((value, key) => {\n\t\t\theaders[key.toLowerCase()] = value;\n\t\t});\n\n\t\t// Execute SSR operations within parent span context\n\t\tconst parentSpan = (store as Record<string, unknown>).telemetrySpan as\n\t\t\t| Span\n\t\t\t| undefined;\n\n\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: SSR request handling involves many scenarios - streaming, caching, compression, and error handling\n\t\treturn withParentSpan(parentSpan, async () => {\n\t\t\t// Serve cached HTML if fresh (skip cache in watch mode)\n\t\t\t// For streaming mode, we track whether this is first or subsequent request\n\t\t\tlet isFirstStreamingRequest = false;\n\t\t\tif (!isWatchMode && SSR_HTML_TTL_MS > 0) {\n\t\t\t\ttry {\n\t\t\t\t\tconst ck = makeKey(pathname, acceptEncoding);\n\t\t\t\t\tconst cached = htmlCache.get(ck);\n\t\t\t\t\tif (cached && cached.exp > Date.now()) {\n\t\t\t\t\t\tif (isOtelAvailable()) {\n\t\t\t\t\t\t\tconst currentSpan = trace.getActiveSpan();\n\t\t\t\t\t\t\tcurrentSpan?.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.cache.hit': true,\n\t\t\t\t\t\t\t\t'reroute.cache.key': ck,\n\t\t\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tset.status = cached.status;\n\t\t\t\t\t\tObject.assign(set.headers, cached.headers);\n\t\t\t\t\t\tset.headers['Reroute-Cache'] = 'HIT';\n\t\t\t\t\t\treturn new Response(cached.body);\n\t\t\t\t\t}\n\n\t\t\t\t\t// For streaming mode: check if uncompressed version is cached\n\t\t\t\t\t// This helps us determine if it's the first request (no cache) or subsequent (has uncompressed cache)\n\t\t\t\t\tif (streamingEnabled && acceptEncoding) {\n\t\t\t\t\t\tconst uncompressedKey = makeKey(pathname, 'identity');\n\t\t\t\t\t\tconst uncompressedCached = htmlCache.get(uncompressedKey);\n\t\t\t\t\t\tisFirstStreamingRequest =\n\t\t\t\t\t\t\t!uncompressedCached || uncompressedCached.exp <= Date.now();\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tconst bundleUrl = await withSpan('ssr.get.bundle', async (span) => {\n\t\t\t\tspan.setAttribute('reroute.pathname', pathname);\n\t\t\t\tconst url = await getBundleUrl();\n\t\t\t\tif (debug)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[SSR] ${pathname} - bundleUrl: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t);\n\t\t\t\treturn url;\n\t\t\t});\n\n\t\t\t// Get cached collections, CSS, and template (instant in prod, reload in dev)\n\t\t\tconst { cachedCollections, cachedTailwindCSS, cachedIndexHtml } =\n\t\t\t\tawait withSpan('ssr.load.cache', async (span) => {\n\t\t\t\t\tconst collections = await getCollections();\n\t\t\t\t\tconst tailwindCSS = await getTailwindCSS();\n\t\t\t\t\tconst indexHtml = await getIndexHtml();\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t'reroute.collections.exists': !!collections,\n\t\t\t\t\t\t'reroute.collections.count': Object.keys(collections).length,\n\t\t\t\t\t});\n\t\t\t\t\tif (debug)\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[SSR] ${pathname} - cached setup: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcachedCollections: collections,\n\t\t\t\t\t\tcachedTailwindCSS: tailwindCSS,\n\t\t\t\t\t\tcachedIndexHtml: indexHtml,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t// Compose Early Hints (103) and Link header for main bundle\n\t\t\ttry {\n\t\t\t\tconst linkValue = `<${bundleUrl}>; rel=modulepreload; as=script`;\n\t\t\t\ttry {\n\t\t\t\t\tconst hints = new Headers({ Link: linkValue });\n\t\t\t\t\t(request as Any)?.sendEarlyHints?.(hints);\n\t\t\t\t} catch {}\n\t\t\t\tset.headers.link = set.headers.link\n\t\t\t\t\t? `${set.headers.link}, ${linkValue}`\n\t\t\t\t\t: linkValue;\n\t\t\t} catch {}\n\n\t\t\t// Use no-cache headers in watch mode to ensure fresh content\n\t\t\tconst cacheControlHeader = isWatchMode\n\t\t\t\t? 'no-cache, no-store, must-revalidate'\n\t\t\t\t: `${directive}, max-age=${maxAge}`;\n\n\t\t\tlet response: Response;\n\n\t\t\tif (streamingEnabled) {\n\t\t\t\t// Streaming SSR path\n\t\t\t\tif (debug)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[SSR] ${pathname} - starting stream: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t);\n\n\t\t\t\tconst { stream, status } = await withSpan(\n\t\t\t\t\t'ssr.document.render',\n\t\t\t\t\tasync (renderSpan) => {\n\t\t\t\t\t\trenderSpan?.setAttributes({\n\t\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t\t'reroute.cache.hit': false,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst result = await renderSSRDocumentStream({\n\t\t\t\t\t\t\tpathname: fullPath,\n\t\t\t\t\t\t\trootComponent,\n\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\tbundleUrl,\n\t\t\t\t\t\t\tcachedCollections,\n\t\t\t\t\t\t\tcachedTailwindCSS,\n\t\t\t\t\t\t\tcachedIndexHtml,\n\t\t\t\t\t\t\tdebug,\n\t\t\t\t\t\t\thead,\n\t\t\t\t\t\t\tlang,\n\t\t\t\t\t\t\tappId,\n\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\tsearchParams,\n\t\t\t\t\t\t\togConfig: options.ogConfig,\n\t\t\t\t\t\t\togMetaConfig: options.ogMetaConfig,\n\t\t\t\t\t\t\tbaseUrl: options.baseUrl,\n\t\t\t\t\t\t\tautoCanonical: options.autoCanonical,\n\t\t\t\t\t\t\tparentSpan: renderSpan,\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\ttimeout: options.streamingTimeout,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\trenderSpan?.setAttribute(\n\t\t\t\t\t\t\t'http.response.status_code',\n\t\t\t\t\t\t\tresult.status,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[SSR] ${pathname} - render completed: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\t// Determine if we should compress this streaming response\n\t\t\t\t// - First request: No compression (fast TTFB)\n\t\t\t\t// - Subsequent requests: Compress and cache (better transfer size)\n\t\t\t\tconst shouldCompressStream =\n\t\t\t\t\tcompression && acceptEncoding && !isFirstStreamingRequest;\n\n\t\t\t\tif (debug)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[SSR] ${pathname} - before compression check: ${(performance.now() - t0).toFixed(2)}ms, compression=${compression}, acceptEncoding=${!!acceptEncoding}, isFirstRequest=${isFirstStreamingRequest}, shouldCompress=${shouldCompressStream}`,\n\t\t\t\t\t);\n\n\t\t\t\t// When compression is enabled and not first request, buffer and compress the stream\n\t\t\t\tif (shouldCompressStream) {\n\t\t\t\t\t// Buffer all chunks with instrumentation\n\t\t\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Stream buffering with chunking\n\t\t\t\t\tconst fullHtml = await withSpan('ssr.buffer.stream', async (span) => {\n\t\t\t\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\t\t\t\tconst reader = stream.getReader();\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\t\t\t\t\tif (done) break;\n\t\t\t\t\t\t\t\tchunks.push(new Uint8Array(value));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\treader.releaseLock();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Combine chunks into single buffer\n\t\t\t\t\t\tconst totalLength = chunks.reduce((sum, c) => sum + c.length, 0);\n\t\t\t\t\t\tconst buffer = new Uint8Array(totalLength);\n\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\tfor (const chunk of chunks) {\n\t\t\t\t\t\t\tbuffer.set(chunk, offset);\n\t\t\t\t\t\t\toffset += chunk.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\t'reroute.stream.chunks': chunks.length,\n\t\t\t\t\t\t\t'reroute.stream.bytes': totalLength,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn buffer;\n\t\t\t\t\t});\n\n\t\t\t\t\t// Compress the buffered HTML\n\t\t\t\t\tconst { body, extraHeaders } = await withSpan(\n\t\t\t\t\t\t'ssr.compress',\n\t\t\t\t\t\tasync (span) => {\n\t\t\t\t\t\t\tconst result = gzipIfAccepted(\n\t\t\t\t\t\t\t\tfullHtml,\n\t\t\t\t\t\t\t\t'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\tacceptEncoding,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.size.original': fullHtml.length,\n\t\t\t\t\t\t\t\t'reroute.size.compressed': (result.body as Uint8Array).length,\n\t\t\t\t\t\t\t\t'reroute.encoding':\n\t\t\t\t\t\t\t\t\tresult.extraHeaders['Content-Encoding'] || 'none',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\t// Cache if needed\n\t\t\t\t\tif (!isWatchMode && SSR_HTML_TTL_MS > 0 && status === 200) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst ck = makeKey(pathname, acceptEncoding);\n\t\t\t\t\t\t\tconst cacheHeaders: Record<string, string> = {\n\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (set.headers.link) {\n\t\t\t\t\t\t\t\tcacheHeaders.Link = set.headers.link as string;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thtmlCache.set(ck, {\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\theaders: cacheHeaders,\n\t\t\t\t\t\t\t\tbody: body as BodyInit,\n\t\t\t\t\t\t\t\texp: Date.now() + SSR_HTML_TTL_MS,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst resHeaders: Record<string, string> = {\n\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t};\n\t\t\t\t\tif (set.headers.link) {\n\t\t\t\t\t\tresHeaders.Link = set.headers.link as string;\n\t\t\t\t\t}\n\n\t\t\t\t\tset.status = status;\n\n\t\t\t\t\tresponse = new Response(body as BodyInit, {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\theaders: resHeaders,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// No compression - stream with caching if enabled\n\t\t\t\t\tconst shouldCache =\n\t\t\t\t\t\t!isWatchMode && SSR_HTML_TTL_MS > 0 && status === 200;\n\n\t\t\t\t\tif (debug)\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[SSR] ${pathname} - no compression path, shouldCache=${shouldCache}`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\tif (shouldCache) {\n\t\t\t\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Response creation with transform stream caching\n\t\t\t\t\t\tresponse = await withSpan('ssr.create.response', async (span) => {\n\t\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t`[SSR] ${pathname} - creating caching stream: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// Cache the stream as it passes through\n\t\t\t\t\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\t\t\t\t\tconst cachingStream = stream.pipeThrough(\n\t\t\t\t\t\t\t\tnew TransformStream({\n\t\t\t\t\t\t\t\t\ttransform(chunk, controller) {\n\t\t\t\t\t\t\t\t\t\tchunks.push(new Uint8Array(chunk));\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Flush callback handles caching and error recovery for streaming\n\t\t\t\t\t\t\t\t\tflush() {\n\t\t\t\t\t\t\t\t\t\t// Cache the complete HTML after streaming finishes\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tconst totalLength = chunks.reduce(\n\t\t\t\t\t\t\t\t\t\t\t\t(sum, c) => sum + c.length,\n\t\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tconst fullHtml = new Uint8Array(totalLength);\n\t\t\t\t\t\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\t\t\t\t\t\tfor (const chunk of chunks) {\n\t\t\t\t\t\t\t\t\t\t\t\tfullHtml.set(chunk, offset);\n\t\t\t\t\t\t\t\t\t\t\t\toffset += chunk.length;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Cache as uncompressed with 'identity' encoding\n\t\t\t\t\t\t\t\t\t\t\t// This allows subsequent requests to detect it's cached and use compression\n\t\t\t\t\t\t\t\t\t\t\tconst ck = makeKey(pathname, 'identity');\n\t\t\t\t\t\t\t\t\t\t\tconst cacheHeaders: Record<string, string> = {\n\t\t\t\t\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\tif (set.headers.link) {\n\t\t\t\t\t\t\t\t\t\t\t\tcacheHeaders.Link = set.headers.link as string;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\thtmlCache.set(ck, {\n\t\t\t\t\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\t\t\t\t\theaders: cacheHeaders,\n\t\t\t\t\t\t\t\t\t\t\t\tbody: fullHtml,\n\t\t\t\t\t\t\t\t\t\t\t\texp: Date.now() + SSR_HTML_TTL_MS,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.error('[reroute] Failed to cache stream:', e);\n\t\t\t\t\t\t\t\t\t\t}\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\n\t\t\t\t\t\t\tset.status = status;\n\n\t\t\t\t\t\t\tconst tBeforeResponse = debug ? performance.now() : 0;\n\t\t\t\t\t\t\tconst res = new Response(cachingStream, {\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t`[SSR] ${pathname} - Response created (cached stream): ${(performance.now() - t0).toFixed(2)}ms (creation: ${(performance.now() - tBeforeResponse).toFixed(2)}ms)`,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tspan.setAttribute('reroute.cached', true);\n\t\t\t\t\t\t\treturn res;\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No caching - return stream directly\n\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[SSR] ${pathname} - creating direct stream response: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tset.status = status;\n\n\t\t\t\t\t\tresponse = new Response(stream, {\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (debug)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[SSR] ${pathname} - Response created (direct stream): ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Non-streaming SSR path\n\t\t\t\tlet html: string;\n\t\t\t\tlet status: number;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await withSpan(\n\t\t\t\t\t\t'ssr.render.sync',\n\t\t\t\t\t\tasync (renderSpan) => {\n\t\t\t\t\t\t\trenderSpan?.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.pathname': pathname,\n\t\t\t\t\t\t\t\t'reroute.cache.hit': false,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst renderResult = await renderSSRDocument({\n\t\t\t\t\t\t\t\tpathname: fullPath,\n\t\t\t\t\t\t\t\trootComponent,\n\t\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\t\t\tbundleUrl,\n\t\t\t\t\t\t\t\thead,\n\t\t\t\t\t\t\t\tlang,\n\t\t\t\t\t\t\t\tappId,\n\t\t\t\t\t\t\t\tmaxAge,\n\t\t\t\t\t\t\t\tsearchParams,\n\t\t\t\t\t\t\t\togConfig: options.ogConfig,\n\t\t\t\t\t\t\t\togMetaConfig: options.ogMetaConfig,\n\t\t\t\t\t\t\t\tbaseUrl: options.baseUrl,\n\t\t\t\t\t\t\t\tautoCanonical: options.autoCanonical,\n\t\t\t\t\t\t\t\tparentSpan: renderSpan, // Pass the ssr.render.sync span as parent\n\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\trenderSpan?.setAttribute(\n\t\t\t\t\t\t\t\t'http.response.status_code',\n\t\t\t\t\t\t\t\trenderResult.status,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn renderResult;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\thtml = result.html;\n\t\t\t\t\tstatus = result.status;\n\t\t\t\t} catch (ssrError) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'[reroute] SSR rendering failed, returning error page:',\n\t\t\t\t\t\tssrError,\n\t\t\t\t\t);\n\t\t\t\t\tset.status = 500; // Ensure telemetry captures 500 status\n\t\t\t\t\tconst errorHtml = `<!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>Error</title>\n <style>\n body { font-family: system-ui, sans-serif; padding: 2rem; background: #111; color: #fff; }\n h1 { color: #f87171; }\n pre { background: #222; padding: 1rem; border-radius: 0.5rem; overflow: auto; }\n </style>\n</head>\n<body>\n <h1>Server Error</h1>\n <p>An error occurred while rendering this page.</p>\n ${isWatchMode ? `<pre>${ssrError instanceof Error ? ssrError.stack : String(ssrError)}</pre>` : ''}\n <script type=\"module\" src=\"${bundleUrl}\"></script>\n</body>\n</html>`;\n\t\t\t\t\treturn new Response(errorHtml, {\n\t\t\t\t\t\tstatus: 500,\n\t\t\t\t\t\theaders: { 'Content-Type': 'text/html; charset=utf-8' },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Apply compression if enabled\n\t\t\t\tconst { body, extraHeaders } = compression\n\t\t\t\t\t? await withSpan('ssr.compress', async (span) => {\n\t\t\t\t\t\t\tconst result = gzipIfAccepted(\n\t\t\t\t\t\t\t\thtml,\n\t\t\t\t\t\t\t\t'text/html; charset=utf-8',\n\t\t\t\t\t\t\t\tacceptEncoding,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\t\t'reroute.size.original': html.length,\n\t\t\t\t\t\t\t\t'reroute.size.compressed':\n\t\t\t\t\t\t\t\t\ttypeof result.body === 'string'\n\t\t\t\t\t\t\t\t\t\t? result.body.length\n\t\t\t\t\t\t\t\t\t\t: (result.body as Uint8Array).length,\n\t\t\t\t\t\t\t\t'reroute.encoding':\n\t\t\t\t\t\t\t\t\tresult.extraHeaders['Content-Encoding'] || 'none',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t})\n\t\t\t\t\t: { body: html, extraHeaders: {} };\n\n\t\t\t\tconst resHeaders: Record<string, string> = {\n\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t'Cache-Control': cacheControlHeader,\n\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t...extraHeaders,\n\t\t\t\t};\n\t\t\t\tif (set.headers.link) {\n\t\t\t\t\tresHeaders.Link = set.headers.link as string;\n\t\t\t\t}\n\n\t\t\t\tset.status = status;\n\n\t\t\t\tresponse = new Response(body as BodyInit, {\n\t\t\t\t\tstatus,\n\t\t\t\t\theaders: resHeaders,\n\t\t\t\t});\n\n\t\t\t\t// Cache the HTML if successful and cacheable\n\t\t\t\tif (\n\t\t\t\t\t!isWatchMode &&\n\t\t\t\t\tSSR_HTML_TTL_MS > 0 &&\n\t\t\t\t\tstatus >= 200 &&\n\t\t\t\t\tstatus < 300\n\t\t\t\t) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ck = makeKey(pathname, acceptEncoding);\n\t\t\t\t\t\thtmlCache.set(ck, {\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\theaders: resHeaders,\n\t\t\t\t\t\t\tbody: body as BodyInit,\n\t\t\t\t\t\t\texp: Date.now() + SSR_HTML_TTL_MS,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst tBeforeReturn = debug ? performance.now() : 0;\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[SSR] ${pathname} - about to return response: ${(performance.now() - t0).toFixed(2)}ms`,\n\t\t\t\t);\n\t\t\tconst returnValue = response;\n\t\t\tif (debug)\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[SSR] ${pathname} - response returned: ${(performance.now() - t0).toFixed(2)}ms (return overhead: ${(performance.now() - tBeforeReturn).toFixed(2)}ms)`,\n\t\t\t\t);\n\t\t\treturn returnValue;\n\t\t});\n\t};\n\n\t// Register all routes from manifest\n\tconst allRoutes = [...staticRoutes, ...contentRoutes, ...dynamicRoutes];\n\tfor (const path of allRoutes) {\n\t\tapp.get(path, handleSSR);\n\t}\n\n\t// Register a catch-all route to handle 404s with custom not found pages\n\t// This must come after all other routes\n\tapp.get('*', handleSSR);\n\n\treturn app;\n}\n\nexport { registerSSRRoutes };\n",
|
|
88
88
|
"import { trace } from '@opentelemetry/api';\nimport type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport {\n\tgetMimeType,\n\tgzipIfAccepted,\n\tjoin,\n\ttype LRUCache,\n} from 'reroute-js/core';\nimport { getEncoding } from '../libs/cache';\nimport { getAssetCacheControl } from '../libs/serving';\n\n// Helper to check if OpenTelemetry is available\nlet otelAvailable: boolean | undefined;\n\nfunction isOtelAvailable(): boolean {\n\tif (otelAvailable !== undefined) return otelAvailable;\n\n\ttry {\n\t\trequire('@opentelemetry/api');\n\t\totelAvailable = true;\n\t\treturn true;\n\t} catch {\n\t\totelAvailable = false;\n\t\treturn false;\n\t}\n}\n\ntype StaticRouteOptions = {\n\tstaticAssetsDir: string;\n\tmaxAge: number;\n\tdirective: string;\n\tstaticHeaders?: Record<string, string>;\n\tshouldIgnore: (file: string) => boolean;\n\tfileCache: LRUCache<string, Response>;\n\tisWatchMode?: boolean;\n\tcompression?: boolean;\n};\n\nexport function registerStaticRoutes(\n\tapp: Elysia,\n\toptions: StaticRouteOptions,\n): Elysia {\n\tconst {\n\t\tstaticAssetsDir,\n\t\tmaxAge,\n\t\tdirective,\n\t\tstaticHeaders = {},\n\t\tshouldIgnore,\n\t\tfileCache,\n\t\tisWatchMode = false,\n\t\tcompression = true,\n\t} = options;\n\n\tfunction setOtelAttributes(\n\t\tstatusCode: number,\n\t\tcachHit: boolean,\n\t\trequestPath: string,\n\t\tencoding?: string,\n\t\treason?: string,\n\t) {\n\t\tif (!isOtelAvailable()) return;\n\n\t\tconst currentSpan = trace.getActiveSpan();\n\t\tconst attrs: Record<string, string | number | boolean> = {\n\t\t\t'reroute.static.path': requestPath,\n\t\t};\n\n\t\tif (statusCode === 200) {\n\t\t\tattrs['reroute.cache.hit'] = cachHit;\n\t\t\tif (encoding) attrs['reroute.encoding'] = encoding;\n\t\t} else if (reason) {\n\t\t\tattrs['reroute.error.reason'] = reason;\n\t\t}\n\n\t\tcurrentSpan?.setAttributes(attrs);\n\t}\n\n\t// Static assets are served from /assets/* URL path\n\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Static file serving with caching, compression, and resolution\n\tapp.get('/assets/*', async function serveStaticFile({ params, headers }) {\n\t\tconst requestPath = params['*'];\n\t\t// Route /assets/* strips the prefix, so params['*'] is just the filename\n\t\t// Example: GET /assets/logo.svg -> params['*'] = 'logo.svg'\n\t\t// filePath = staticAssetsDir/logo.svg\n\t\tconst filePath = join(staticAssetsDir, requestPath);\n\n\t\ttry {\n\t\t\tconst acceptEncoding = headers['accept-encoding'] ?? '';\n\t\t\tconst encoding = getEncoding(acceptEncoding);\n\t\t\tconst cacheKey = `${filePath}:${encoding}`;\n\n\t\t\t// Check cache first\n\t\t\tconst cached = fileCache.get(cacheKey);\n\t\t\tif (cached) {\n\t\t\t\tsetOtelAttributes(200, true, requestPath, encoding);\n\t\t\t\tconst response = cached.clone();\n\t\t\t\tresponse.headers.set('Reroute-Cache', 'HIT');\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\t// Check if file exists\n\t\t\tconst exists = await Bun.file(filePath).exists();\n\t\t\tif (!exists) {\n\t\t\t\tsetOtelAttributes(\n\t\t\t\t\t404,\n\t\t\t\t\tfalse,\n\t\t\t\t\trequestPath,\n\t\t\t\t\tundefined,\n\t\t\t\t\t'file_not_exists',\n\t\t\t\t);\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\n\t\t\tif (shouldIgnore(filePath)) {\n\t\t\t\tsetOtelAttributes(404, false, requestPath, undefined, 'file_ignored');\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\n\t\t\tconst contentBuf = await Bun.file(filePath).arrayBuffer();\n\t\t\tconst content = new Uint8Array(contentBuf);\n\t\t\tconst contentType = getMimeType(filePath);\n\n\t\t\tconst { body, extraHeaders } = compression\n\t\t\t\t? gzipIfAccepted(content, contentType, acceptEncoding)\n\t\t\t\t: { body: content, extraHeaders: {} };\n\n\t\t\tconst cacheControl = getAssetCacheControl(\n\t\t\t\tfilePath,\n\t\t\t\tcontentType,\n\t\t\t\tmaxAge,\n\t\t\t\tdirective,\n\t\t\t\tisWatchMode,\n\t\t\t);\n\n\t\t\tconst response = new Response(body as BodyInit, {\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t'Cache-Control': cacheControl,\n\t\t\t\t\t'Reroute-Cache': 'MISS',\n\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t...staticHeaders,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tfileCache.set(cacheKey, response);\n\n\t\t\t// Track static file attributes\n\t\t\tif (isOtelAvailable()) {\n\t\t\t\tconst currentSpan = trace.getActiveSpan();\n\t\t\t\tcurrentSpan?.setAttributes({\n\t\t\t\t\t'reroute.static.path': requestPath,\n\t\t\t\t\t'reroute.content.type': contentType,\n\t\t\t\t\t'reroute.cache.hit': false,\n\t\t\t\t\t'reroute.compressed': !!extraHeaders['Content-Encoding'],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn response.clone();\n\t\t} catch (error) {\n\t\t\tif (error instanceof NotFoundError) {\n\t\t\t\t// 404 attributes already set above\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconsole.error(`[reroute] Error serving ${filePath}:`, error);\n\t\t\tif (isOtelAvailable()) {\n\t\t\t\tconst currentSpan = trace.getActiveSpan();\n\t\t\t\tcurrentSpan?.setAttribute('reroute.static.path', requestPath);\n\t\t\t}\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\treturn app;\n}\n"
|
|
89
89
|
],
|
|
90
|
-
"mappings": "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",
|
|
91
|
-
"debugId": "
|
|
90
|
+
"mappings": "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",
|
|
91
|
+
"debugId": "EE0ACEF1418C00E864756E2164756E21",
|
|
92
92
|
"names": []
|
|
93
93
|
}
|