reroute-js 0.8.0 → 0.9.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 +110 -20
- package/cli/bin.js.map +5 -5
- package/cli/index.d.ts +1 -1
- package/cli/index.js +2 -2
- 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/boot.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/init.d.ts +1 -1
- package/cli/src/commands/start.d.ts +1 -1
- package/cli/src/libs/command.d.ts +1 -1
- package/cli/src/libs/index.d.ts +1 -1
- package/cli/src/libs/log.d.ts +1 -1
- package/cli/src/libs/markdown-processor.d.ts +1 -1
- package/cli/src/libs/markdown.d.ts +1 -1
- package/cli/src/libs/production.d.ts +1 -1
- package/cli/src/libs/tailwind.d.ts +1 -1
- package/cli/src/libs/version.d.ts +1 -1
- package/core/index.d.ts +1 -1
- package/core/index.js +106 -16
- package/core/index.js.map +7 -7
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/bundler/transpile.d.ts +2 -1
- package/core/src/bundler/transpile.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 +1 -1
- package/core/src/content/registry.d.ts +1 -1
- package/core/src/index.d.ts +1 -1
- package/core/src/ssr/data.d.ts +1 -1
- package/core/src/ssr/index.d.ts +1 -1
- package/core/src/ssr/modules.d.ts +1 -1
- package/core/src/ssr/render.d.ts +1 -1
- package/core/src/ssr/render.d.ts.map +1 -1
- package/core/src/ssr/seed.d.ts +1 -1
- package/core/src/template/html.d.ts +1 -1
- package/core/src/template/index.d.ts +1 -1
- package/core/src/types.d.ts +9 -1
- package/core/src/types.d.ts.map +1 -1
- package/core/src/utils/cache.d.ts +1 -1
- package/core/src/utils/compression.d.ts +2 -1
- package/core/src/utils/compression.d.ts.map +1 -1
- package/core/src/utils/index.d.ts +1 -1
- package/core/src/utils/mime.d.ts +1 -1
- package/core/src/utils/path.d.ts +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +225 -26
- package/elysia/index.js.map +8 -8
- package/elysia/src/index.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/plugin.d.ts +1 -1
- package/elysia/src/routes/artifacts.d.ts +1 -1
- package/elysia/src/routes/content.d.ts +1 -1
- package/elysia/src/routes/dev.d.ts +1 -1
- package/elysia/src/routes/image.d.ts +1 -1
- package/elysia/src/routes/ssr.d.ts +2 -2
- package/elysia/src/routes/ssr.d.ts.map +1 -1
- package/elysia/src/routes/static.d.ts +1 -1
- package/elysia/src/routes/static.d.ts.map +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/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/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/useSearchParams.d.ts +1 -1
- package/react/src/index.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/react/src/utils/content.d.ts +1 -1
- package/react/src/utils/head.d.ts +1 -1
- package/react/src/utils/index.d.ts +1 -1
package/elysia/index.js.map
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../packages/core/src/utils/path.ts", "../../packages/core/src/bundler/hash.ts", "../../packages/cli/src/libs/tailwind.ts", "../../packages/core/src/bundler/transpile.ts", "../../packages/core/src/content/discovery.ts", "../../packages/core/src/content/metadata.ts", "../../packages/core/src/content/registry.ts", "../../packages/core/src/ssr/data.ts", "../../packages/core/src/ssr/modules.ts", "../../packages/core/src/ssr/seed.ts", "../../packages/core/src/ssr/render.ts", "../../node_modules/dedent/dist/dedent.mjs", "../../packages/core/src/template/html.ts", "../../packages/core/src/utils/cache.ts", "../../packages/core/src/utils/
|
|
3
|
+
"sources": ["../../packages/core/src/utils/path.ts", "../../packages/core/src/bundler/hash.ts", "../../packages/cli/src/libs/tailwind.ts", "../../packages/core/src/bundler/transpile.ts", "../../packages/core/src/content/discovery.ts", "../../packages/core/src/content/metadata.ts", "../../packages/core/src/content/registry.ts", "../../packages/core/src/ssr/data.ts", "../../packages/core/src/ssr/modules.ts", "../../packages/core/src/ssr/seed.ts", "../../packages/core/src/ssr/render.ts", "../../node_modules/dedent/dist/dedent.mjs", "../../packages/core/src/template/html.ts", "../../packages/core/src/utils/cache.ts", "../../packages/core/src/utils/compression.ts", "../../packages/core/src/utils/mime.ts", "../../packages/elysia/src/libs/http.ts", "../../packages/elysia/src/libs/image.ts", "../../packages/elysia/src/routes/artifacts.ts", "../../packages/elysia/src/routes/content.ts", "../../packages/elysia/src/routes/dev.ts", "../../packages/elysia/src/routes/image.ts", "../../packages/elysia/src/routes/ssr.ts", "../../packages/elysia/src/routes/static.ts", "../../packages/elysia/src/plugin.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"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",
|
|
6
6
|
"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",
|
|
7
7
|
"/**\n * Tailwind CSS v4 integration utility\n *\n * Manages Tailwind CLI integration for the Reroute framework\n */\n\nimport { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/**\n * Check if Tailwind CSS v4 is available in the project\n */\nfunction isTailwindAvailable(cwd: string): boolean {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst deps = {\n\t\t\t...packageJson.dependencies,\n\t\t\t...packageJson.devDependencies,\n\t\t};\n\n\t\treturn '@tailwindcss/cli' in deps;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Get the default paths for Tailwind CSS\n */\nfunction getTailwindPaths(cwd: string) {\n\tconst input = join(cwd, 'src/client/theme.css');\n\tconst output = join(cwd, '.reroute/theme.css');\n\n\treturn { input, output };\n}\n\n/**\n * Check if Tailwind input file exists and uses v4 format\n */\nfunction hasTailwindInput(cwd: string): boolean {\n\tconst { input } = getTailwindPaths(cwd);\n\n\tif (!existsSync(input)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(input, 'utf-8');\n\t\t// v4 uses @import \"tailwindcss\"\n\t\treturn content.includes('tailwindcss');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction resolveTailwindBin(cwd: string): string {\n\t// Try to find tailwindcss binary, checking up to 3 levels up\n\tconst pathsToTry = [\n\t\tjoin(cwd, '../node_modules/.bin/tailwindcss'),\n\t\tjoin(cwd, '../../node_modules/.bin/tailwindcss'),\n\t\tjoin(cwd, '../../../node_modules/.bin/tailwindcss'),\n\t];\n\n\tfor (const binPath of pathsToTry) {\n\t\tif (existsSync(binPath)) {\n\t\t\treturn binPath;\n\t\t}\n\t}\n\n\t// Fallback to the default location if none found\n\treturn join(cwd, 'node_modules/.bin/tailwindcss');\n}\n\n/**\n * Build Tailwind CSS using the Tailwind CLI\n */\nasync function buildTailwind(cwd: string): Promise<void> {\n\tconst { input, output } = getTailwindPaths(cwd);\n\n\treturn new Promise((resolve, reject) => {\n\t\tconst tailwindBin = resolveTailwindBin(cwd);\n\t\tconst args = ['-i', input, '-o', output];\n\n\t\tconsole.log(`[reroute/tailwind] build start: -i ${input} -o ${output}`);\n\n\t\tconst tailwind = spawn(tailwindBin, args, {\n\t\t\tcwd,\n\t\t\tstdio: 'pipe',\n\t\t});\n\n\t\ttailwind.stdout?.on('data', (data) => {\n\t\t\tconst line = data.toString().trim();\n\t\t\tif (line) {\n\t\t\t\tconsole.log(`[reroute/tailwind] ${line}`);\n\t\t\t}\n\t\t});\n\n\t\ttailwind.stderr?.on('data', (data) => {\n\t\t\tconst line = data.toString().trim();\n\t\t\tif (line) {\n\t\t\t\tconsole.log(`[reroute/tailwind] ${line}`);\n\t\t\t}\n\t\t});\n\n\t\ttailwind.on('close', (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tconsole.log('[reroute/tailwind] build done');\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\treject(new Error(`Tailwind CSS build failed with code ${code}`));\n\t\t\t}\n\t\t});\n\n\t\ttailwind.on('error', (error) => {\n\t\t\treject(error);\n\t\t});\n\t});\n}\n\n/**\n * Build Tailwind once if installed and input exists.\n * Returns true if a build was attempted (success or failure), false if skipped.\n */\nexport async function buildTailwindIfConfigured(cwd: string): Promise<boolean> {\n\ttry {\n\t\tif (isTailwindAvailable(cwd) && hasTailwindInput(cwd)) {\n\t\t\tawait buildTailwind(cwd);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} catch (e) {\n\t\tconsole.warn('[reroute/tailwind] build failed:', e);\n\t\treturn true;\n\t}\n}\n",
|
|
8
|
-
"import type { BuildOutput } from 'bun';\nimport { buildTailwindIfConfigured } from 'reroute-js/cli';\nimport type { BundleInfo, BundleOptions } from '../types';\nimport { basename, extname } from '../utils/path';\nimport { generateContentHash } from './hash';\n\nfunction isWatchMode() {\n\ttry {\n\t\treturn (\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\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport async function transpileFile(\n\tfilePath: string,\n\toriginalPath: string,\n\toptions: BundleOptions,\n\tbundleCache: Map<string, BundleInfo>,\n): Promise<BundleInfo> {\n\tconst src = await Bun.file(filePath).text();\n\tconst cacheKey = `${filePath}-${await generateContentHash(src)}`;\n\n\tif (bundleCache.has(cacheKey)) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: it's okay\n\t\treturn bundleCache.get(cacheKey)!;\n\t}\n\n\tconsole.log(\n\t\t`[reroute] Building ${originalPath}${options.minify ? ' (minified)' : ''}...`,\n\t);\n\n\t// In dev watch mode, rebuild Tailwind CSS output first so SSR can inline fresh CSS\n\ttry {\n\t\tif (isWatchMode()) {\n\t\t\tconst cwd =\n\t\t\t\ttypeof process !== 'undefined' && process.cwd ? process.cwd() : '';\n\t\t\tif (cwd) {\n\t\t\t\tawait buildTailwindIfConfigured(cwd);\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn('[reroute/tailwind] rebuild failed:', e);\n\t}\n\n\tasync function doBuild(sm: 'external' | 'none') {\n\t\treturn await Bun.build({\n\t\t\tentrypoints: [filePath],\n\t\t\ttarget: 'browser',\n\t\t\tformat: 'esm',\n\t\t\tminify: options.minify,\n\t\t\tsplitting:
|
|
8
|
+
"import type { BuildOutput } from 'bun';\nimport { buildTailwindIfConfigured } from 'reroute-js/cli';\nimport type { BundleInfo, BundleOptions } from '../types';\nimport { basename, extname } from '../utils/path';\nimport { generateContentHash } from './hash';\n\n// Registry for mapping final entry URL -> its static dependencies (URL paths)\nconst entryUrlToStaticDeps = new Map<string, string[]>();\n\nfunction isWatchMode() {\n\ttry {\n\t\treturn (\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\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport async function transpileFile(\n\tfilePath: string,\n\toriginalPath: string,\n\toptions: BundleOptions,\n\tbundleCache: Map<string, BundleInfo>,\n): Promise<BundleInfo> {\n\tconst src = await Bun.file(filePath).text();\n\tconst cacheKey = `${filePath}-${await generateContentHash(src)}`;\n\n\tif (bundleCache.has(cacheKey)) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: it's okay\n\t\treturn bundleCache.get(cacheKey)!;\n\t}\n\n\tconsole.log(\n\t\t`[reroute] Building ${originalPath}${options.minify ? ' (minified)' : ''}...`,\n\t);\n\n\t// In dev watch mode, rebuild Tailwind CSS output first so SSR can inline fresh CSS\n\ttry {\n\t\tif (isWatchMode()) {\n\t\t\tconst cwd =\n\t\t\t\ttypeof process !== 'undefined' && process.cwd ? process.cwd() : '';\n\t\t\tif (cwd) {\n\t\t\t\tawait buildTailwindIfConfigured(cwd);\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn('[reroute/tailwind] rebuild failed:', e);\n\t}\n\n\tasync function doBuild(sm: 'external' | 'none') {\n\t\treturn await Bun.build({\n\t\t\tentrypoints: [filePath],\n\t\t\t// Use browser target; Bun's type definitions accept this and keep output modern\n\t\t\ttarget: 'browser',\n\t\t\tformat: 'esm',\n\t\t\tminify: options.minify,\n\t\t\t// Enable splitting so static deps are emitted as separate files\n\t\t\tsplitting: true,\n\t\t\tsourcemap: sm,\n\t\t\t// Ensure React automatic runtime and strip dev JSX where applicable\n\t\t\tjsx: {\n\t\t\t\truntime: 'automatic',\n\t\t\t\timportSource: 'react',\n\t\t\t\tdevelopment: !options.minify,\n\t\t\t},\n\t\t\tdefine: {\n\t\t\t\t'process.env.NODE_ENV': options.minify\n\t\t\t\t\t? '\"production\"'\n\t\t\t\t\t: '\"development\"',\n\t\t\t\t// Common dev flags used by libraries and apps\n\t\t\t\t__DEV__: options.minify ? 'false' : 'true',\n\t\t\t\t'import.meta.env.MODE': options.minify\n\t\t\t\t\t? '\"production\"'\n\t\t\t\t\t: '\"development\"',\n\t\t\t},\n\t\t\t// Drop obvious debug statements in production\n\t\t\t...(options.minify ? { drop: ['console', 'debugger'] } : {}),\n\t\t});\n\t}\n\n\tlet result: BuildOutput;\n\ttry {\n\t\tresult = await doBuild(options.sourcemap ? 'external' : 'none');\n\t} catch (error) {\n\t\t// Bun.build may throw (e.g., EISDIR) instead of returning success=false\n\t\tconsole.warn(\n\t\t\t`[reroute] Build errored for ${originalPath} (sourcemap external). Retrying without sourcemap...`,\n\t\t\terror,\n\t\t);\n\t\tresult = await doBuild('none');\n\t}\n\n\tif (!result.success) {\n\t\tconsole.error(`[reroute] Failed to build ${filePath}`);\n\t\tfor (const log of result.logs) console.error(log);\n\t\tthrow new Error(`Failed to transpile ${filePath}`);\n\t}\n\n\t// Collect outputs and infer entry/chunks\n\tconst outputs = await Promise.all(\n\t\tresult.outputs.map(async (o) => ({\n\t\t\tpath: o.path,\n\t\t\ttext: await o.text(),\n\t\t})),\n\t);\n\tconst entryBase = basename(originalPath, extname(originalPath));\n\tlet entry = outputs.find((o) => o.path.endsWith(`${entryBase}.js`));\n\tif (!entry) {\n\t\t// Fallback to the largest JS file as entry\n\t\tentry = outputs\n\t\t\t.filter((o) => o.path.endsWith('.js'))\n\t\t\t.sort((a, b) => b.text.length - a.text.length)[0];\n\t}\n\tif (!entry) {\n\t\tthrow new Error(`[reroute] No JS output generated for ${originalPath}`);\n\t}\n\tconst code = entry.text;\n\n\tlet sourceMap: string | undefined;\n\tif (options.sourcemap && result.outputs.length > 1) {\n\t\tconst mapOutput = result.outputs.find((o) => o.path.endsWith('.map'));\n\t\tif (mapOutput) {\n\t\t\tsourceMap = await mapOutput.text();\n\t\t}\n\t}\n\n\tconst contentHash = await generateContentHash(code);\n\n\t// Build chunk list and static dependency graph\n\tconst chunks = outputs\n\t\t.filter((o) => o !== entry && o.path.endsWith('.js'))\n\t\t.map((o) => ({\n\t\t\tfileName: basename(o.path),\n\t\t\tcode: o.text,\n\t\t\thash: '',\n\t\t\tisEntry: false,\n\t\t\timports: [],\n\t\t}));\n\tfor (const c of chunks) {\n\t\tc.hash = await generateContentHash(c.code);\n\t\t// Heuristic: find static imports of this chunk from the entry\n\t\ttry {\n\t\t\tconst bn = c.fileName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\t\tconst re = new RegExp(`[\"'\\`]((?:\\\\./)?${bn})[\"'\\`]`, 'g');\n\t\t\tconst matches = [...code.matchAll(re)];\n\t\t\tif (matches.length) {\n\t\t\t\tc.isEntry = false;\n\t\t\t}\n\t\t} catch {}\n\t}\n\tconst staticDepNames: string[] = [];\n\ttry {\n\t\tfor (const c of chunks) {\n\t\t\tconst bn = c.fileName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\t\tconst re = new RegExp(`[\"'\\`]((?:\\\\./)?${bn})[\"'\\`]`, 'g');\n\t\t\tif (re.test(code)) staticDepNames.push(c.fileName);\n\t\t}\n\t} catch {}\n\n\tconst bundleInfo: BundleInfo = {\n\t\thash: contentHash,\n\t\tcode,\n\t\tsourceMap,\n\t\tchunks,\n\t};\n\n\tbundleCache.set(cacheKey, bundleInfo);\n\n\tconst sizeKB = (code.length / 1024).toFixed(2);\n\tconst gzippedSize = Bun.gzipSync(new TextEncoder().encode(code)).length;\n\tconst gzippedKB = (gzippedSize / 1024).toFixed(2);\n\tconsole.log(\n\t\t`[reroute] Built ${originalPath} -> ${sizeKB} KB (${gzippedKB} KB gzipped)`,\n\t);\n\n\treturn bundleInfo;\n}\n\n// (no helpers)\n\nexport async function getBundleUrlsFor(\n\tmodules: string | string[],\n\tclientDir: string,\n\tprefix: string,\n\toptions: BundleOptions,\n\tbundleCache: Map<string, BundleInfo>,\n): Promise<string[]> {\n\tconst mods = Array.isArray(modules) ? modules : [modules];\n\tconst urls: string[] = [];\n\tconst { join } = await import('../utils/path');\n\n\tfor (const mod of mods) {\n\t\tconst rel = mod.replace(/^\\.\\//, '');\n\t\tconst fullPath = join(clientDir, rel);\n\t\ttry {\n\t\t\tconst bundleInfo = await transpileFile(\n\t\t\t\tfullPath,\n\t\t\t\trel,\n\t\t\t\toptions,\n\t\t\t\tbundleCache,\n\t\t\t);\n\t\t\tconst base = basename(rel, extname(rel));\n\t\t\tconst entryUrl = `${prefix}/${base}.${bundleInfo.hash}.js`;\n\t\t\turls.push(entryUrl);\n\t\t\t// Record static dependency URLs so SSR can modulepreload and send Early Hints\n\t\t\ttry {\n\t\t\t\tconst depNames = Array.isArray(bundleInfo.chunks)\n\t\t\t\t\t? bundleInfo.chunks\n\t\t\t\t\t\t\t.map((c) => c.fileName)\n\t\t\t\t\t\t\t.filter((name) =>\n\t\t\t\t\t\t\t\t// Include only those referenced by entry (static deps)\n\t\t\t\t\t\t\t\tnew RegExp(\n\t\t\t\t\t\t\t\t\t`[\"'\\`]((?:\\\\./)?${name.replace(\n\t\t\t\t\t\t\t\t\t\t/[.*+?^${}()|[\\]\\\\]/g,\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\t'g',\n\t\t\t\t\t\t\t\t).test(bundleInfo.code),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\t\tconst depUrls = depNames.map((n) =>\n\t\t\t\t\t`${prefix}/${n}`.replace(/\\/+/g, '/'),\n\t\t\t\t);\n\t\t\t\tentryUrlToStaticDeps.set(entryUrl, depUrls);\n\t\t\t} catch {}\n\t\t} catch (error) {\n\t\t\tconsole.error(`[reroute] Error getting bundle URL for ${rel}:`, error);\n\t\t\turls.push(`${prefix}/${rel}`);\n\t\t}\n\t}\n\treturn urls;\n}\n\nexport function getStaticDepsForUrl(entryUrl: string): string[] {\n\treturn entryUrlToStaticDeps.get(entryUrl) || [];\n}\n",
|
|
9
9
|
"import { readdir, stat } from 'node:fs/promises';\nimport type { ContentItemDTO } from '../types';\nimport { basename, join, stripEnd, stripStart } from '../utils/path';\nimport { getContentMeta } from './metadata';\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\nexport async function buildContentDTOs(\n\tcollectionPath: string,\n\tclientDir: string,\n\tprefix: string,\n\tisWatchMode: boolean,\n): Promise<ContentItemDTO[]> {\n\tconst normalized = stripStart(stripEnd(collectionPath, '/'), '/');\n\tconst contentRelDir = join('routes', normalized, 'content');\n\tconst contentAbsDir = join(clientDir, contentRelDir);\n\n\tconst files = await listContentFiles(contentAbsDir, '');\n\tconst items: ContentItemDTO[] = [];\n\tfor (const rel of files) {\n\t\tconst fullRelPath = join(contentRelDir, rel);\n\t\tconst absPath = join(clientDir, fullRelPath);\n\t\tconst noExt = rel.replace(/\\.(tsx|ts)$/, '');\n\t\tconst name = basename(noExt);\n\n\t\t// Use raw TSX path; served and transpiled on-demand by static route\n\t\tconst moduleUrl = `${prefix}/${fullRelPath}`.replace(/\\/+/g, '/');\n\t\tconst meta = await getContentMeta(absPath, isWatchMode);\n\t\t// Use the last path segment for href to fit current '/blog/:slug' route\n\t\tconst href = `/${normalized}/${name}`.replace(/\\\\+/g, '/');\n\n\t\titems.push({\n\t\t\tslug: noExt,\n\t\t\tname,\n\t\t\tpath: fullRelPath,\n\t\t\tmodule: moduleUrl,\n\t\t\tmeta,\n\t\t\thref,\n\t\t});\n\t}\n\treturn items;\n}\n\nexport async function discoverCollections(\n\tclientDir: string,\n): Promise<string[]> {\n\tconst root = join(clientDir, 'routes');\n\tconst collections = new Set<string>();\n\ttry {\n\t\tconst entries = await readdir(root, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tconst contentDir = join(root, entry.name, 'content');\n\t\t\t\ttry {\n\t\t\t\t\tawait stat(contentDir);\n\t\t\t\t\tcollections.add(entry.name);\n\t\t\t\t} catch {\n\t\t\t\t\t// content directory doesn't exist, skip\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// routes directory doesn't exist\n\t}\n\treturn Array.from(collections);\n}\n",
|
|
10
10
|
"import { stat } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport type { ContentMeta, Doc } from '../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 || (mod as Doc).frontmatter || {};\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",
|
|
11
11
|
"import { join } from '../utils/path';\n\nexport async function generateContentRegistry(cwd: string): Promise<void> {\n\t// Use pre-built routes written by the example build step (.reroute/content.ts)\n\t// Avoid generating at runtime to prevent dev loops.\n\ttry {\n\t\tconst p = join(cwd, '.reroute', 'content.ts');\n\t\tconst exists = await Bun.file(p).exists();\n\t\tconsole.log(\n\t\t\texists\n\t\t\t\t? '[reroute] Content registry up-to-date'\n\t\t\t\t: '[reroute] Warning: .reroute/content.ts not found',\n\t\t);\n\t} catch {}\n}\n",
|
|
12
12
|
"import { pathToFileURL } from 'node:url';\nimport type { Doc } from '../types';\nimport { join } from '../utils/path';\nimport { seedSSRModuleForPath } from './seed';\n\ntype ComputeParams = {\n\tpathname: string;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n};\n\nexport async function computeSSRDataForPath(\n\tparams: ComputeParams,\n): Promise<unknown> {\n\tconst { pathname, clientDir, cwd, isWatchMode } = 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\n\t// 1) Try content-level export ssr.data if available\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length >= 2) {\n\t\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\t\tconst g = globalThis as Doc;\n\t\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t\t| { ssr?: { data?: (ctx: Doc) => unknown | Promise<unknown> } }\n\t\t\t\t| undefined;\n\t\t\tconst dataFn = (exp as Doc)?.ssr?.data as\n\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t| undefined;\n\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\treturn await dataFn({ pathname, params: { name: parts[1] } } as Doc);\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\t// 2) Route-level export ssr.data (non-content routes)\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst m = await import(\n\t\t\tpathToFileURL(routesPath).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t);\n\t\tconst match =\n\t\t\ttypeof (m as Doc).matchRoute === 'function'\n\t\t\t\t? (m as Doc).matchRoute(pathname)\n\t\t\t\t: null;\n\t\tconst r = (match as Doc | null | undefined)?.route as Doc | undefined;\n\t\tconst paramsValue = ((match as Doc | null | undefined)?.params ||\n\t\t\t{}) as Record<string, string>;\n\t\tif (r && typeof (r as Doc).path === 'string') {\n\t\t\ttry {\n\t\t\t\tconst abs = join(clientDir, 'routes', String((r as Doc).path));\n\t\t\t\tconst mod = (await import(\n\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t)) as Doc;\n\t\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t| undefined;\n\t\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t\treturn await dataFn({ pathname, params: paramsValue } as Doc);\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t}\n\t} catch {}\n\n\treturn null;\n}\n",
|
|
13
13
|
"import { readdir, stat } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport type { Doc } from '../types';\nimport { join } from '../utils/path';\n\n/**\n * Import a content module for a given pathname like \"/collection/name\".\n * Prefer the latest built chunk in .reroute to align with the client preload,\n * then fall back to source TS/TSX if no chunk exists.\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\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return null;\n\t\tconst collection = parts[0];\n\t\tconst name = parts[1];\n\n\t\t// 1) Prefer registry mapping from .reroute/content.ts to get exact chunk path\n\t\ttry {\n\t\t\tconst registryPath = join(cwd, '.reroute', 'content.ts');\n\t\t\tconst reg = (await import(\n\t\t\t\tpathToFileURL(registryPath).href +\n\t\t\t\t\t(isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t)) as Doc;\n\t\t\tconst get = (reg as Doc)?.getContentEntry as\n\t\t\t\t| ((c: string, n: string) => { module?: string } | undefined)\n\t\t\t\t| undefined;\n\t\t\tconst entry =\n\t\t\t\ttypeof get === 'function' ? get(collection, name) : undefined;\n\t\t\tconst moduleUrl = (entry as Doc)?.module as string | undefined;\n\t\t\tif (moduleUrl?.endsWith('.js')) {\n\t\t\t\tconst abs = join(cwd, moduleUrl.replace(/^\\//, ''));\n\t\t\t\tconst href =\n\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '');\n\t\t\t\tconst mod = await import(href);\n\t\t\t\treturn mod as Doc;\n\t\t\t}\n\t\t} catch {}\n\n\t\t// 2) Try latest prebuilt chunk from .reroute (fallback)\n\t\ttry {\n\t\t\tconst chunkDir = join(cwd, '.reroute', 'chunks', collection);\n\t\t\tconst files = await readdir(chunkDir);\n\t\t\tconst matches = files.filter(\n\t\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t\t);\n\t\t\tif (matches.length) {\n\t\t\t\tlet latest = matches[0];\n\t\t\t\tlet latestM = 0;\n\t\t\t\tfor (const f of matches) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst s = await stat(join(chunkDir, f));\n\t\t\t\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\t\t\t\tlatest = f;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t\tconst absChunk = join(chunkDir, latest);\n\t\t\t\tconst href =\n\t\t\t\t\tpathToFileURL(absChunk).href +\n\t\t\t\t\t(isWatchMode ? `?t=${Date.now()}` : '');\n\t\t\t\tconst mod = await import(href);\n\t\t\t\treturn mod as Doc;\n\t\t\t}\n\t\t} catch {}\n\n\t\t// 3) Fallback to source (TSX/TS)\n\t\ttry {\n\t\t\tconst srcTsx = join(\n\t\t\t\tclientDir,\n\t\t\t\t'routes',\n\t\t\t\tcollection,\n\t\t\t\t'content',\n\t\t\t\t`${name}.tsx`,\n\t\t\t);\n\t\t\tconst srcTs = join(\n\t\t\t\tclientDir,\n\t\t\t\t'routes',\n\t\t\t\tcollection,\n\t\t\t\t'content',\n\t\t\t\t`${name}.ts`,\n\t\t\t);\n\t\t\tlet absSrc: string | null = null;\n\t\t\tif (await Bun.file(srcTsx).exists()) absSrc = srcTsx;\n\t\t\telse if (await Bun.file(srcTs).exists()) absSrc = srcTs;\n\t\t\tif (absSrc) {\n\t\t\t\tconst href = pathToFileURL(absSrc).href;\n\t\t\t\tconst mod = await import(\n\t\t\t\t\tisWatchMode ? `${href}?t=${Date.now()}` : href\n\t\t\t\t);\n\t\t\t\treturn mod as Doc;\n\t\t\t}\n\t\t} catch {}\n\t} catch {}\n\treturn null;\n}\n",
|
|
14
14
|
"import type { Doc } from '../types';\nimport { importContentModuleForPath } from './modules';\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 parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length < 2) return;\n\t\tconst collection = parts[0];\n\t\tconst name = parts[1];\n\t\tconst key = `${collection}:${name}`;\n\n\t\tconst mod = await importContentModuleForPath(\n\t\t\tpathname,\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tisWatchMode,\n\t\t);\n\n\t\tif (!mod) return;\n\n\t\tconst C = (mod as Doc).default || (mod as Doc);\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] = C;\n\n\t\t// Also capture exported meta/frontmatter and optional ssr config for head injection\n\t\ttry {\n\t\t\tconst pageMeta = (mod as Doc).meta || (mod as Doc).frontmatter || {};\n\t\t\tconst pageSSR = (mod as Doc).ssr || {};\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: pageMeta,\n\t\t\t\tssr: pageSSR,\n\t\t\t};\n\t\t} catch {}\n\t} catch {}\n}\n",
|
|
15
|
-
"import { readdir, stat } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport dedent from 'dedent';\nimport { cloneElement, type ReactElement } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { buildHeadFromMeta } from '../content/metadata';\nimport { applyIndexTemplate, loadIndexHtml } from '../template';\nimport type { Doc } from '../types';\nimport { join } from '../utils/path';\nimport { seedSSRModuleForPath } from './seed';\n\ntype SSRRenderOptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\t// When true, also attempt to minify inlined assets like CSS\n\tminify?: boolean;\n};\n\ntype SSRRenderResult = {\n\thtml: string;\n\tstatus: number;\n};\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\tminify = false,\n\t} = options;\n\n\tconst scripts = [bundleUrl];\n\tlet hydrationScript = '';\n\tlet extraHead = '';\n\n\t// Track HTTP status override (e.g., 404 when content entry missing)\n\tlet statusOverride: number | undefined;\n\n\t// Reset per-request SSR access tracking to avoid cross-request leakage\n\t// Shape: { [collection]: { limit: number|Infinity, sort: 'date-desc'|'date-asc'|'none'|'custom' } }\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_SSR_ACCESSED__ = {} as unknown as Doc;\n\t} catch {}\n\n\t// If current page is a content page (/collection/name) AND the collection exists,\n\t// preload its module for instant hydration. Avoid treating non-content dynamic\n\t// routes (e.g., /products/19) as missing content, which would set 404.\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length >= 2) {\n\t\t\tconst collection = parts[0];\n\t\t\tconst name = parts[1];\n\t\t\tlet modulePath = '';\n\n\t\t\t// Only consider this a content collection if routes/<collection>/content exists\n\t\t\tlet isContentCollection = false;\n\t\t\ttry {\n\t\t\t\tconst maybeDir = join(clientDir, 'routes', collection, 'content');\n\t\t\t\tconst s = await stat(maybeDir);\n\t\t\t\tisContentCollection =\n\t\t\t\t\ttypeof s?.isDirectory === 'function' ? s.isDirectory() : true;\n\t\t\t} catch {\n\t\t\t\tisContentCollection = false;\n\t\t\t}\n\n\t\t\tif (!isContentCollection) {\n\t\t\t\t// Not a content collection path; skip content preloading logic\n\t\t\t\t// to avoid incorrectly marking the request as 404.\n\t\t\t\tthrow new Error('skip-content-preload');\n\t\t\t}\n\n\t\t\t// Prefer registry mapping from .reroute/content.ts for exact chunk\n\t\t\ttry {\n\t\t\t\tconst registryPath = join(cwd, '.reroute', 'content.ts');\n\t\t\t\tconst reg = (await import(\n\t\t\t\t\tpathToFileURL(registryPath).href +\n\t\t\t\t\t\t(isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t)) as Doc;\n\t\t\t\tconst get = (reg as Doc)?.getContentEntry as\n\t\t\t\t\t| ((c: string, n: string) => { module?: string } | undefined)\n\t\t\t\t\t| undefined;\n\t\t\t\tconst entry =\n\t\t\t\t\ttypeof get === 'function' ? get(collection, name) : undefined;\n\t\t\t\tconst moduleUrl = (entry as Doc)?.module as string | undefined;\n\t\t\t\tif (moduleUrl?.endsWith('.js')) {\n\t\t\t\t\tmodulePath = moduleUrl;\n\t\t\t\t}\n\t\t\t} catch {}\n\n\t\t\t// Fallback: pick newest chunk if registry unavailable\n\t\t\tif (!modulePath) {\n\t\t\t\ttry {\n\t\t\t\t\tconst chunkDir = join(cwd, '.reroute', 'chunks', collection);\n\t\t\t\t\tconst files = await readdir(chunkDir);\n\t\t\t\t\tconst candidates = files.filter(\n\t\t\t\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t\t\t\t);\n\t\t\t\t\tif (candidates.length) {\n\t\t\t\t\t\tlet latest = candidates[0];\n\t\t\t\t\t\tlet latestM = 0;\n\t\t\t\t\t\tfor (const candidateName of candidates) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst s = await stat(join(chunkDir, candidateName));\n\t\t\t\t\t\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\t\t\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\t\t\t\t\t\tlatest = candidateName;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodulePath = `/${join('.reroute', 'chunks', collection, latest).replace(/\\\\+/g, '/')}`;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\t// Fallback to raw source if chunk missing\n\t\t\tif (!modulePath) {\n\t\t\t\tconst tsx = join(\n\t\t\t\t\tclientDir,\n\t\t\t\t\t'routes',\n\t\t\t\t\tcollection,\n\t\t\t\t\t'content',\n\t\t\t\t\t`${name}.tsx`,\n\t\t\t\t);\n\t\t\t\tconst ts = join(\n\t\t\t\t\tclientDir,\n\t\t\t\t\t'routes',\n\t\t\t\t\tcollection,\n\t\t\t\t\t'content',\n\t\t\t\t\t`${name}.ts`,\n\t\t\t\t);\n\t\t\t\tlet srcUrl = '';\n\t\t\t\tif (await Bun.file(tsx).exists()) {\n\t\t\t\t\tsrcUrl = `/${join('routes', collection, 'content', `${name}.tsx`).replace(/\\\\+/g, '/')}`;\n\t\t\t\t} else if (await Bun.file(ts).exists()) {\n\t\t\t\t\tsrcUrl = `/${join('routes', collection, 'content', `${name}.ts`).replace(/\\\\+/g, '/')}`;\n\t\t\t\t}\n\t\t\t\tif (srcUrl) {\n\t\t\t\t\tmodulePath = srcUrl;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!modulePath) {\n\t\t\t\tstatusOverride = 404;\n\t\t\t}\n\n\t\t\tif (modulePath) {\n\t\t\t\tconst key = `${collection}:${name}`;\n\t\t\t\t// Hint the browser to fetch the module ASAP\n\t\t\t\textraHead += `\\n<link rel=\"modulepreload\" href=\"${modulePath}\" />`;\n\t\t\t\t// Ensure the module is evaluated before the main app module runs via external module\n\t\t\t\tconst qs = `src=${encodeURIComponent(modulePath)}&key=${encodeURIComponent(key)}`;\n\t\t\t\thydrationScript += `<script type=\"module\" src=\"/__reroute_preload?${qs}\"></script>`;\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\t// Seed SSR store with content component so BlogPost can render on server\n\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\n\n\t// Route component module preload removed to avoid extra requests.\n\n\t// Execute optional route/content ssr.data and expose per-request store\n\tconst __SSR_DATA__: Record<string, unknown> = {};\n\ttry {\n\t\t// Content page ssr.data exported from the content module (if any)\n\t\ttry {\n\t\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\t\tif (parts.length >= 2) {\n\t\t\t\tconst g = globalThis as Doc;\n\t\t\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\t\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t\t\t| { ssr?: { data?: (ctx: Doc) => unknown | Promise<unknown> } }\n\t\t\t\t\t| undefined;\n\t\t\t\tconst dataFn = (exp as Doc)?.ssr?.data as\n\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t| undefined;\n\t\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t\tconst out = await dataFn({\n\t\t\t\t\t\tpathname,\n\t\t\t\t\t\tparams: { name: parts[1] },\n\t\t\t\t\t} as Doc);\n\t\t\t\t\t__SSR_DATA__[pathname] = out as unknown;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\n\t\t// Route-level ssr.data from route module (non-content routes)\n\t\ttry {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst m = await import(\n\t\t\t\tpathToFileURL(routesPath).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t);\n\t\t\tconst match =\n\t\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathname) : null;\n\t\t\tconst r = match?.route as Doc | undefined;\n\t\t\tconst params = (match?.params || {}) as Record<string, string>;\n\n\t\t\tif (r && typeof r.path === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\t\t\tconst mod = (await import(\n\t\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t\t)) as Doc;\n\t\t\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t\t\tconst out = await dataFn({ pathname, params } as Doc);\n\t\t\t\t\t\t__SSR_DATA__[pathname] = out as unknown;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} catch {}\n\t} catch {}\n\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_DATA__ = __SSR_DATA__ as Doc;\n\t} catch {}\n\n\t// Seed content collections on the server for SSR rendering (no client delivery yet).\n\t// We'll only inline the collections actually accessed during this render, captured\n\t// via the hook-level tracker.\n\tlet __byCollectionForSSR: Record<string, unknown[]> = {};\n\ttry {\n\t\tconst p = join(cwd, '.reroute', 'content.ts');\n\t\tconst mod = await import(\n\t\t\tpathToFileURL(p).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t);\n\t\t__byCollectionForSSR = ((mod as Doc)?.byCollection || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown[]\n\t\t>;\n\t\ttry {\n\t\t\t(globalThis as Doc).__REROUTE_COLLECTIONS__ = __byCollectionForSSR as Doc;\n\t\t} catch {}\n\t} catch {}\n\n\t// (moved) Entry + dev watcher scripts are appended later, after we inline\n\t// any accessed collections so data is available before app boot.\n\n\tconst componentWithPathname = cloneElement<Doc>(rootComponent, {\n\t\tpathname,\n\t});\n\tconst appHtml = renderToString(componentWithPathname);\n\tconst baseTemplate = await loadIndexHtml(clientDir);\n\n\t// Inline compiled Tailwind CSS output if present (generated by CLI):\n\t// Prefer theme.css relative to clientDir (e.g., src/client/theme.css -> ../../.reroute/theme.css)\n\tlet inlineStyleTag = '';\n\ttry {\n\t\tconst candidates = [\n\t\t\tjoin(clientDir, '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '..', '.reroute', 'theme.css'),\n\t\t];\n\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\t\tif (cssPath) {\n\t\t\tlet css = await Bun.file(cssPath).text();\n\t\t\tif (minify) {\n\t\t\t\t// Best-effort, safe-ish CSS minification without external deps\n\t\t\t\tcss = css\n\t\t\t\t\t// Remove /* block comments */\n\t\t\t\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n\t\t\t\t\t// Collapse whitespace\n\t\t\t\t\t.replace(/\\s+/g, ' ')\n\t\t\t\t\t// Remove space around selectors, braces, colons and semicolons\n\t\t\t\t\t.replace(/\\s*([{}:;,>+~])\\s*/g, '$1')\n\t\t\t\t\t// Remove final semicolons before closing brace\n\t\t\t\t\t.replace(/;}/g, '}')\n\t\t\t\t\t// Trim\n\t\t\t\t\t.trim();\n\t\t\t}\n\t\t\tinlineStyleTag = `<style data-reroute=\"tailwind\">${css}</style>`;\n\t\t}\n\t} catch {}\n\n\t// After rendering, inline only the content collections that were actually\n\t// accessed during this SSR render. This preserves SSR for static routes that\n\t// use useContent(), while avoiding shipping the entire content index to pages\n\t// that don't need it (e.g., a single post entry without lists).\n\ttry {\n\t\tconst g = globalThis as unknown as { __REROUTE_SSR_ACCESSED__?: unknown };\n\t\tconst acc = g.__REROUTE_SSR_ACCESSED__ as Doc;\n\n\t\t// Helper for date ordering\n\t\tconst sortByDate = (order: 'asc' | 'desc') => (a: Doc, b: Doc) => {\n\t\t\tconst da = a?.meta?.date ? Date.parse(String(a.meta.date)) : 0;\n\t\t\tconst db = b?.meta?.date ? Date.parse(String(b.meta.date)) : 0;\n\t\t\treturn order === 'asc' ? da - db : db - da;\n\t\t};\n\n\t\t// Normalize tracker into a map of collection -> { limit, sort }\n\t\tconst usage: Record<string, { limit: number; sort: string }> = {};\n\t\tif (acc && typeof acc.forEach === 'function') {\n\t\t\t// Back-compat with old Set<string> form: treat as full list\n\t\t\t(acc as Set<string>).forEach((c) => {\n\t\t\t\tif (typeof c === 'string')\n\t\t\t\t\tusage[c] = { limit: Number.POSITIVE_INFINITY, sort: 'custom' };\n\t\t\t});\n\t\t} else if (acc && typeof acc === 'object') {\n\t\t\tfor (const [k, v] of Object.entries(acc as Record<string, Doc>)) {\n\t\t\t\tconst lim =\n\t\t\t\t\ttypeof v?.limit === 'number' ? v.limit : Number.POSITIVE_INFINITY;\n\t\t\t\tconst s = typeof v?.sort === 'string' ? v.sort : 'custom';\n\t\t\t\tusage[k] = { limit: lim, sort: s };\n\t\t\t}\n\t\t}\n\n\t\tconst collections = Object.keys(usage);\n\t\tif (collections.length) {\n\t\t\tconst subset: Record<string, unknown[]> = {};\n\t\t\tconst partial: Record<string, boolean> = {};\n\t\t\tfor (const c of collections) {\n\t\t\t\tconst conf = usage[c];\n\t\t\t\tconst full = __byCollectionForSSR?.[c] || [];\n\t\t\t\tlet arr: unknown[] = full;\n\t\t\t\tif (\n\t\t\t\t\tNumber.isFinite(conf.limit) &&\n\t\t\t\t\tconf.limit > 0 &&\n\t\t\t\t\tconf.sort !== 'custom'\n\t\t\t\t) {\n\t\t\t\t\tif (conf.sort === 'date-desc') {\n\t\t\t\t\t\tarr = [...full].sort(sortByDate('desc')).slice(0, conf.limit);\n\t\t\t\t\t} else if (conf.sort === 'date-asc') {\n\t\t\t\t\t\tarr = [...full].sort(sortByDate('asc')).slice(0, conf.limit);\n\t\t\t\t\t} else if (conf.sort === 'none') {\n\t\t\t\t\t\tarr = full.slice(0, conf.limit);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsubset[c] = arr;\n\t\t\t\tpartial[c] =\n\t\t\t\t\tArray.isArray(arr) && Array.isArray(full)\n\t\t\t\t\t\t? arr.length < full.length\n\t\t\t\t\t\t: false;\n\t\t\t}\n\t\t\tconst subsetJson = JSON.stringify(subset);\n\t\t\tconst partialJson = JSON.stringify(partial);\n\t\t\thydrationScript += `\\n<script>\\n (function(){ try {\\n var w = (typeof window!== 'undefined'? window : globalThis);\\n w.__REROUTE_COLLECTIONS__ = w.__REROUTE_COLLECTIONS__ || {};\\n Object.assign(w.__REROUTE_COLLECTIONS__, ${subsetJson});\\n w.__REROUTE_COLLECTIONS_PARTIAL__ = w.__REROUTE_COLLECTIONS_PARTIAL__ || {};\\n Object.assign(w.__REROUTE_COLLECTIONS_PARTIAL__, ${partialJson});\\n } catch(e){} })();\\n</script>`;\n\t\t}\n\t} catch {}\n\n\t// Inline SSR data before client entry loads\n\ttry {\n\t\tconst seededJson = JSON.stringify(__SSR_DATA__);\n\t\thydrationScript += `\\n<script>\\n (function(){ try {\\n var w = (typeof window!== 'undefined'? window : globalThis);\\n w.__REROUTE_DATA__ = Object.assign({}, w.__REROUTE_DATA__ || {}, ${seededJson});\\n } catch(e){} })();\\n</script>`;\n\t} catch {}\n\n\t// Append client entry module only after inlining accessed collections\n\thydrationScript += scripts\n\t\t.map((src) => `<script type=\"module\" src=\"${src}\"></script>`)\n\t\t.join('');\n\n\t// (Dev) Load live reload module (no inline script)\n\tif (isWatchMode) {\n\t\thydrationScript += `<script type=\"module\" src=\"/__reroute_watch.js\"></script>`;\n\t}\n\n\t// Derive per-page head from exported meta/ssr if available\n\tlet perPageHead = '';\n\tlet pageLang: string | undefined;\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length >= 2) {\n\t\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\t\tconst g = globalThis as Doc;\n\t\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t\t| { meta?: unknown; ssr?: unknown }\n\t\t\t\t| undefined;\n\t\t\tconst meta = (exp as Doc)?.meta;\n\t\t\tconst ssr = (exp as Doc)?.ssr;\n\t\t\tperPageHead += buildHeadFromMeta(meta);\n\t\t\tconst ssrHead =\n\t\t\t\ttypeof ssr?.head === 'string'\n\t\t\t\t\t? ssr.head\n\t\t\t\t\t: Array.isArray(ssr?.head)\n\t\t\t\t\t\t? String(ssr.head.join('\\n'))\n\t\t\t\t\t\t: '';\n\t\t\tif (ssrHead) perPageHead += `\\n${ssrHead}`;\n\t\t\tif (typeof ssr?.lang === 'string' && ssr.lang.trim()) {\n\t\t\t\tpageLang = ssr.lang.trim();\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\t// Additionally, import the matched route module to apply route-level meta/ssr for non-content routes\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst m = await import(\n\t\t\tpathToFileURL(routesPath).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t);\n\t\tconst match =\n\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathname) : null;\n\t\tconst r = match?.route as Doc | undefined;\n\t\tif (!r) {\n\t\t\t// No route matched; mark as 404 for status\n\t\t\tstatusOverride = statusOverride || 404;\n\t\t}\n\t\tif (r && typeof r.path === 'string') {\n\t\t\ttry {\n\t\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\t\tconst mod = (await import(\n\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t)) as Doc;\n\t\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\tif (meta) perPageHead += buildHeadFromMeta(meta);\n\t\t\t\tif (ssr) {\n\t\t\t\t\tconst ssrHead =\n\t\t\t\t\t\ttypeof ssr.head === 'string'\n\t\t\t\t\t\t\t? ssr.head\n\t\t\t\t\t\t\t: Array.isArray(ssr.head)\n\t\t\t\t\t\t\t\t? String((ssr.head as unknown[]).join('\\n'))\n\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\tif (ssrHead) perPageHead += `\\n${ssrHead}`;\n\t\t\t\t\tif (typeof ssr.lang === 'string' && ssr.lang.trim()) {\n\t\t\t\t\t\tpageLang = ssr.lang.trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\t// If route matched but we will render a custom 404 (e.g., content missing),\n\t\t\t// try to also apply the closest notFound meta if available.\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tconst list = (m as Doc)?.notFoundRoutes as Doc[] | undefined;\n\t\t\t\tif (Array.isArray(list)) {\n\t\t\t\t\t// choose most specific by longest pattern prefix\n\t\t\t\t\tlet chosen: Doc | undefined;\n\t\t\t\t\tlet bestLen = -1;\n\t\t\t\t\tfor (const nf of list) {\n\t\t\t\t\t\tconst pat = String((nf as Doc)?.pattern || '/');\n\t\t\t\t\t\tif (!pathname.startsWith(pat)) continue;\n\t\t\t\t\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\t\t\t\t\tif (len >= bestLen) {\n\t\t\t\t\t\t\tbestLen = len;\n\t\t\t\t\t\t\tchosen = nf;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (chosen && typeof (chosen as Doc).path === 'string') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst abs = join(\n\t\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\t\t'routes',\n\t\t\t\t\t\t\t\tString((chosen as Doc).path),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst mod = (await import(\n\t\t\t\t\t\t\t\tpathToFileURL(abs).href +\n\t\t\t\t\t\t\t\t\t(isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t\t\t\t)) as Doc;\n\t\t\t\t\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\t\t\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t\t\t\tif (meta) perPageHead += buildHeadFromMeta(meta);\n\t\t\t\t\t\t\tconst ssrHead =\n\t\t\t\t\t\t\t\ttypeof ssr?.head === 'string'\n\t\t\t\t\t\t\t\t\t? ssr.head\n\t\t\t\t\t\t\t\t\t: Array.isArray(ssr?.head)\n\t\t\t\t\t\t\t\t\t\t? String((ssr.head as unknown[]).join('\\n'))\n\t\t\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\t\tif (ssrHead) perPageHead += `\\n${ssrHead}`;\n\t\t\t\t\t\t\tif (typeof ssr?.lang === 'string' && ssr.lang?.trim()) {\n\t\t\t\t\t\t\t\tpageLang = String(ssr.lang).trim();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t}\n\t} catch {}\n\n\tconst combinedHead = dedent(\n\t\t[dedent(head) || '', dedent(extraHead), dedent(perPageHead)]\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n'),\n\t);\n\tconst html = applyIndexTemplate(baseTemplate, appHtml, {\n\t\thead: [inlineStyleTag, combinedHead].filter(Boolean).join('\\n'),\n\t\thydrationScript,\n\t\tlang: pageLang || lang,\n\t\tappId,\n\t});\n\n\treturn {\n\t\thtml,\n\t\tstatus: statusOverride || 200,\n\t};\n}\n\nexport { renderSSRDocument, type SSRRenderOptions, type SSRRenderResult };\n",
|
|
15
|
+
"import { readdir, stat } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport dedent from 'dedent';\nimport { cloneElement, type ReactElement } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { getStaticDepsForUrl } from '../bundler';\nimport { buildHeadFromMeta } from '../content/metadata';\nimport { applyIndexTemplate, loadIndexHtml } from '../template';\nimport type { Doc } from '../types';\nimport { join } from '../utils/path';\nimport { seedSSRModuleForPath } from './seed';\n\ntype SSRRenderOptions = {\n\tpathname: string;\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tbundleUrl: string;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\t// When true, also attempt to minify inlined assets like CSS\n\tminify?: boolean;\n};\n\ntype SSRRenderResult = {\n\thtml: string;\n\tstatus: number;\n};\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\tminify = false,\n\t} = options;\n\n\tconst scripts = [bundleUrl];\n\tlet hydrationScript = '';\n\tlet extraHead = '';\n\n\t// Preload the main client entry for earlier fetch start\n\ttry {\n\t\tif (typeof bundleUrl === 'string' && bundleUrl.endsWith('.js')) {\n\t\t\textraHead += `\\n<link rel=\"modulepreload\" href=\"${bundleUrl}\" />`;\n\t\t}\n\t} catch {}\n\n\t// Also preload static dependencies of the entry (split chunks)\n\ttry {\n\t\tconst staticDeps = getStaticDepsForUrl(bundleUrl);\n\t\tif (Array.isArray(staticDeps) && staticDeps.length) {\n\t\t\tfor (const dep of staticDeps) {\n\t\t\t\textraHead += `\\n<link rel=\"modulepreload\" href=\"${dep}\" />`;\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\t// Track HTTP status override (e.g., 404 when content entry missing)\n\tlet statusOverride: number | undefined;\n\n\t// Reset per-request SSR access tracking to avoid cross-request leakage\n\t// Shape: { [collection]: { limit: number|Infinity, sort: 'date-desc'|'date-asc'|'none'|'custom' } }\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_SSR_ACCESSED__ = {} as unknown as Doc;\n\t} catch {}\n\n\t// If current page is a content page (/collection/name) AND the collection exists,\n\t// preload its module for instant hydration. Avoid treating non-content dynamic\n\t// routes (e.g., /products/19) as missing content, which would set 404.\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length >= 2) {\n\t\t\tconst collection = parts[0];\n\t\t\tconst name = parts[1];\n\t\t\tlet modulePath = '';\n\n\t\t\t// Only consider this a content collection if routes/<collection>/content exists\n\t\t\tlet isContentCollection = false;\n\t\t\ttry {\n\t\t\t\tconst maybeDir = join(clientDir, 'routes', collection, 'content');\n\t\t\t\tconst s = await stat(maybeDir);\n\t\t\t\tisContentCollection =\n\t\t\t\t\ttypeof s?.isDirectory === 'function' ? s.isDirectory() : true;\n\t\t\t} catch {\n\t\t\t\tisContentCollection = false;\n\t\t\t}\n\n\t\t\tif (!isContentCollection) {\n\t\t\t\t// Not a content collection path; skip content preloading logic\n\t\t\t\t// to avoid incorrectly marking the request as 404.\n\t\t\t\tthrow new Error('skip-content-preload');\n\t\t\t}\n\n\t\t\t// Prefer registry mapping from .reroute/content.ts for exact chunk\n\t\t\ttry {\n\t\t\t\tconst registryPath = join(cwd, '.reroute', 'content.ts');\n\t\t\t\tconst reg = (await import(\n\t\t\t\t\tpathToFileURL(registryPath).href +\n\t\t\t\t\t\t(isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t)) as Doc;\n\t\t\t\tconst get = (reg as Doc)?.getContentEntry as\n\t\t\t\t\t| ((c: string, n: string) => { module?: string } | undefined)\n\t\t\t\t\t| undefined;\n\t\t\t\tconst entry =\n\t\t\t\t\ttypeof get === 'function' ? get(collection, name) : undefined;\n\t\t\t\tconst moduleUrl = (entry as Doc)?.module as string | undefined;\n\t\t\t\tif (moduleUrl?.endsWith('.js')) {\n\t\t\t\t\tmodulePath = moduleUrl;\n\t\t\t\t}\n\t\t\t} catch {}\n\n\t\t\t// Fallback: pick newest chunk if registry unavailable\n\t\t\tif (!modulePath) {\n\t\t\t\ttry {\n\t\t\t\t\tconst chunkDir = join(cwd, '.reroute', 'chunks', collection);\n\t\t\t\t\tconst files = await readdir(chunkDir);\n\t\t\t\t\tconst candidates = files.filter(\n\t\t\t\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t\t\t\t);\n\t\t\t\t\tif (candidates.length) {\n\t\t\t\t\t\tlet latest = candidates[0];\n\t\t\t\t\t\tlet latestM = 0;\n\t\t\t\t\t\tfor (const candidateName of candidates) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst s = await stat(join(chunkDir, candidateName));\n\t\t\t\t\t\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\t\t\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\t\t\t\t\t\tlatest = candidateName;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodulePath = `/${join('.reroute', 'chunks', collection, latest).replace(/\\\\+/g, '/')}`;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\t// Fallback to raw source if chunk missing\n\t\t\tif (!modulePath) {\n\t\t\t\tconst tsx = join(\n\t\t\t\t\tclientDir,\n\t\t\t\t\t'routes',\n\t\t\t\t\tcollection,\n\t\t\t\t\t'content',\n\t\t\t\t\t`${name}.tsx`,\n\t\t\t\t);\n\t\t\t\tconst ts = join(\n\t\t\t\t\tclientDir,\n\t\t\t\t\t'routes',\n\t\t\t\t\tcollection,\n\t\t\t\t\t'content',\n\t\t\t\t\t`${name}.ts`,\n\t\t\t\t);\n\t\t\t\tlet srcUrl = '';\n\t\t\t\tif (await Bun.file(tsx).exists()) {\n\t\t\t\t\tsrcUrl = `/${join('routes', collection, 'content', `${name}.tsx`).replace(/\\\\+/g, '/')}`;\n\t\t\t\t} else if (await Bun.file(ts).exists()) {\n\t\t\t\t\tsrcUrl = `/${join('routes', collection, 'content', `${name}.ts`).replace(/\\\\+/g, '/')}`;\n\t\t\t\t}\n\t\t\t\tif (srcUrl) {\n\t\t\t\t\tmodulePath = srcUrl;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!modulePath) {\n\t\t\t\tstatusOverride = 404;\n\t\t\t}\n\n\t\t\tif (modulePath) {\n\t\t\t\tconst key = `${collection}:${name}`;\n\t\t\t\t// Hint the browser to fetch the module ASAP\n\t\t\t\textraHead += `\\n<link rel=\"modulepreload\" href=\"${modulePath}\" />`;\n\t\t\t\t// Ensure the module is evaluated before the main app module runs via external module\n\t\t\t\tconst qs = `src=${encodeURIComponent(modulePath)}&key=${encodeURIComponent(key)}`;\n\t\t\t\thydrationScript += `<script type=\"module\" src=\"/__reroute_preload?${qs}\"></script>`;\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\t// Seed SSR store with content component so BlogPost can render on server\n\tawait seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);\n\n\t// Route component module preload removed to avoid extra requests.\n\n\t// Execute optional route/content ssr.data and expose per-request store\n\tconst __SSR_DATA__: Record<string, unknown> = {};\n\ttry {\n\t\t// Content page ssr.data exported from the content module (if any)\n\t\ttry {\n\t\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\t\tif (parts.length >= 2) {\n\t\t\t\tconst g = globalThis as Doc;\n\t\t\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\t\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t\t\t| { ssr?: { data?: (ctx: Doc) => unknown | Promise<unknown> } }\n\t\t\t\t\t| undefined;\n\t\t\t\tconst dataFn = (exp as Doc)?.ssr?.data as\n\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t| undefined;\n\t\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t\tconst out = await dataFn({\n\t\t\t\t\t\tpathname,\n\t\t\t\t\t\tparams: { name: parts[1] },\n\t\t\t\t\t} as Doc);\n\t\t\t\t\t__SSR_DATA__[pathname] = out as unknown;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\n\t\t// Route-level ssr.data from route module (non-content routes)\n\t\ttry {\n\t\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\t\tconst m = await import(\n\t\t\t\tpathToFileURL(routesPath).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t);\n\t\t\tconst match =\n\t\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathname) : null;\n\t\t\tconst r = match?.route as Doc | undefined;\n\t\t\tconst params = (match?.params || {}) as Record<string, string>;\n\n\t\t\tif (r && typeof r.path === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\t\t\tconst mod = (await import(\n\t\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t\t)) as Doc;\n\t\t\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t\tconst dataFn = (ssr as Doc)?.data as\n\t\t\t\t\t\t| ((ctx: Doc) => unknown | Promise<unknown>)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tif (typeof dataFn === 'function') {\n\t\t\t\t\t\tconst out = await dataFn({ pathname, params } as Doc);\n\t\t\t\t\t\t__SSR_DATA__[pathname] = out as unknown;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} catch {}\n\t} catch {}\n\n\ttry {\n\t\t(globalThis as Doc).__REROUTE_DATA__ = __SSR_DATA__ as Doc;\n\t} catch {}\n\n\t// Seed content collections on the server for SSR rendering (no client delivery yet).\n\t// We'll only inline the collections actually accessed during this render, captured\n\t// via the hook-level tracker.\n\tlet __byCollectionForSSR: Record<string, unknown[]> = {};\n\ttry {\n\t\tconst p = join(cwd, '.reroute', 'content.ts');\n\t\tconst mod = await import(\n\t\t\tpathToFileURL(p).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t);\n\t\t__byCollectionForSSR = ((mod as Doc)?.byCollection || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown[]\n\t\t>;\n\t\ttry {\n\t\t\t(globalThis as Doc).__REROUTE_COLLECTIONS__ = __byCollectionForSSR as Doc;\n\t\t} catch {}\n\t} catch {}\n\n\t// (moved) Entry + dev watcher scripts are appended later, after we inline\n\t// any accessed collections so data is available before app boot.\n\n\tconst componentWithPathname = cloneElement<Doc>(rootComponent, {\n\t\tpathname,\n\t});\n\tconst appHtml = renderToString(componentWithPathname);\n\tconst baseTemplate = await loadIndexHtml(clientDir);\n\n\t// Inline compiled Tailwind CSS output if present (generated by CLI):\n\t// Prefer theme.css relative to clientDir (e.g., src/client/theme.css -> ../../.reroute/theme.css)\n\tlet inlineStyleTag = '';\n\ttry {\n\t\tconst candidates = [\n\t\t\tjoin(clientDir, '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '.reroute', 'theme.css'),\n\t\t\tjoin(clientDir, '..', '..', '..', '..', '.reroute', 'theme.css'),\n\t\t];\n\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\t\tif (cssPath) {\n\t\t\tlet css = await Bun.file(cssPath).text();\n\t\t\tif (minify) {\n\t\t\t\t// Best-effort, safe-ish CSS minification without external deps\n\t\t\t\tcss = css\n\t\t\t\t\t// Remove /* block comments */\n\t\t\t\t\t.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n\t\t\t\t\t// Collapse whitespace\n\t\t\t\t\t.replace(/\\s+/g, ' ')\n\t\t\t\t\t// Remove space around selectors, braces, colons and semicolons\n\t\t\t\t\t.replace(/\\s*([{}:;,>+~])\\s*/g, '$1')\n\t\t\t\t\t// Remove final semicolons before closing brace\n\t\t\t\t\t.replace(/;}/g, '}')\n\t\t\t\t\t// Trim\n\t\t\t\t\t.trim();\n\t\t\t}\n\t\t\tinlineStyleTag = `<style data-reroute=\"tailwind\">${css}</style>`;\n\t\t}\n\t} catch {}\n\n\t// After rendering, inline only the content collections that were actually\n\t// accessed during this SSR render. This preserves SSR for static routes that\n\t// use useContent(), while avoiding shipping the entire content index to pages\n\t// that don't need it (e.g., a single post entry without lists).\n\ttry {\n\t\tconst g = globalThis as unknown as { __REROUTE_SSR_ACCESSED__?: unknown };\n\t\tconst acc = g.__REROUTE_SSR_ACCESSED__ as Doc;\n\n\t\t// Helper for date ordering\n\t\tconst sortByDate = (order: 'asc' | 'desc') => (a: Doc, b: Doc) => {\n\t\t\tconst da = a?.meta?.date ? Date.parse(String(a.meta.date)) : 0;\n\t\t\tconst db = b?.meta?.date ? Date.parse(String(b.meta.date)) : 0;\n\t\t\treturn order === 'asc' ? da - db : db - da;\n\t\t};\n\n\t\t// Normalize tracker into a map of collection -> { limit, sort }\n\t\tconst usage: Record<string, { limit: number; sort: string }> = {};\n\t\tif (acc && typeof acc.forEach === 'function') {\n\t\t\t// Back-compat with old Set<string> form: treat as full list\n\t\t\t(acc as Set<string>).forEach((c) => {\n\t\t\t\tif (typeof c === 'string')\n\t\t\t\t\tusage[c] = { limit: Number.POSITIVE_INFINITY, sort: 'custom' };\n\t\t\t});\n\t\t} else if (acc && typeof acc === 'object') {\n\t\t\tfor (const [k, v] of Object.entries(acc as Record<string, Doc>)) {\n\t\t\t\tconst lim =\n\t\t\t\t\ttypeof v?.limit === 'number' ? v.limit : Number.POSITIVE_INFINITY;\n\t\t\t\tconst s = typeof v?.sort === 'string' ? v.sort : 'custom';\n\t\t\t\tusage[k] = { limit: lim, sort: s };\n\t\t\t}\n\t\t}\n\n\t\tconst collections = Object.keys(usage);\n\t\tif (collections.length) {\n\t\t\tconst subset: Record<string, unknown[]> = {};\n\t\t\tconst partial: Record<string, boolean> = {};\n\t\t\tfor (const c of collections) {\n\t\t\t\tconst conf = usage[c];\n\t\t\t\tconst full = __byCollectionForSSR?.[c] || [];\n\t\t\t\tlet arr: unknown[] = full;\n\t\t\t\tif (\n\t\t\t\t\tNumber.isFinite(conf.limit) &&\n\t\t\t\t\tconf.limit > 0 &&\n\t\t\t\t\tconf.sort !== 'custom'\n\t\t\t\t) {\n\t\t\t\t\tif (conf.sort === 'date-desc') {\n\t\t\t\t\t\tarr = [...full].sort(sortByDate('desc')).slice(0, conf.limit);\n\t\t\t\t\t} else if (conf.sort === 'date-asc') {\n\t\t\t\t\t\tarr = [...full].sort(sortByDate('asc')).slice(0, conf.limit);\n\t\t\t\t\t} else if (conf.sort === 'none') {\n\t\t\t\t\t\tarr = full.slice(0, conf.limit);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsubset[c] = arr;\n\t\t\t\tpartial[c] =\n\t\t\t\t\tArray.isArray(arr) && Array.isArray(full)\n\t\t\t\t\t\t? arr.length < full.length\n\t\t\t\t\t\t: false;\n\t\t\t}\n\t\t\tconst subsetJson = JSON.stringify(subset);\n\t\t\tconst partialJson = JSON.stringify(partial);\n\t\t\thydrationScript += `\\n<script>\\n (function(){ try {\\n var w = (typeof window!== 'undefined'? window : globalThis);\\n w.__REROUTE_COLLECTIONS__ = w.__REROUTE_COLLECTIONS__ || {};\\n Object.assign(w.__REROUTE_COLLECTIONS__, ${subsetJson});\\n w.__REROUTE_COLLECTIONS_PARTIAL__ = w.__REROUTE_COLLECTIONS_PARTIAL__ || {};\\n Object.assign(w.__REROUTE_COLLECTIONS_PARTIAL__, ${partialJson});\\n } catch(e){} })();\\n</script>`;\n\t\t}\n\t} catch {}\n\n\t// Inline SSR data before client entry loads\n\ttry {\n\t\tconst seededJson = JSON.stringify(__SSR_DATA__);\n\t\thydrationScript += `\\n<script>\\n (function(){ try {\\n var w = (typeof window!== 'undefined'? window : globalThis);\\n w.__REROUTE_DATA__ = Object.assign({}, w.__REROUTE_DATA__ || {}, ${seededJson});\\n } catch(e){} })();\\n</script>`;\n\t} catch {}\n\n\t// Append client entry module only after inlining accessed collections\n\thydrationScript += scripts\n\t\t.map((src) => `<script type=\"module\" src=\"${src}\"></script>`)\n\t\t.join('');\n\n\t// (Dev) Load live reload module (no inline script)\n\tif (isWatchMode) {\n\t\thydrationScript += `<script type=\"module\" src=\"/__reroute_watch.js\"></script>`;\n\t}\n\n\t// Derive per-page head from exported meta/ssr if available\n\tlet perPageHead = '';\n\tlet pageLang: string | undefined;\n\ttry {\n\t\tconst parts = pathname.split('/').filter(Boolean);\n\t\tif (parts.length >= 2) {\n\t\t\tconst key = `${parts[0]}:${parts[1]}`;\n\t\t\tconst g = globalThis as Doc;\n\t\t\tconst exp = g.__REROUTE_SSR_EXPORTS__?.[key] as\n\t\t\t\t| { meta?: unknown; ssr?: unknown }\n\t\t\t\t| undefined;\n\t\t\tconst meta = (exp as Doc)?.meta;\n\t\t\tconst ssr = (exp as Doc)?.ssr;\n\t\t\tperPageHead += buildHeadFromMeta(meta);\n\t\t\tconst ssrHead =\n\t\t\t\ttypeof ssr?.head === 'string'\n\t\t\t\t\t? ssr.head\n\t\t\t\t\t: Array.isArray(ssr?.head)\n\t\t\t\t\t\t? String(ssr.head.join('\\n'))\n\t\t\t\t\t\t: '';\n\t\t\tif (ssrHead) perPageHead += `\\n${ssrHead}`;\n\t\t\tif (typeof ssr?.lang === 'string' && ssr.lang.trim()) {\n\t\t\t\tpageLang = ssr.lang.trim();\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\t// Additionally, import the matched route module to apply route-level meta/ssr for non-content routes\n\ttry {\n\t\tconst routesPath = join(cwd, '.reroute', 'routes.ts');\n\t\tconst m = await import(\n\t\t\tpathToFileURL(routesPath).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t);\n\t\tconst match =\n\t\t\ttypeof m.matchRoute === 'function' ? m.matchRoute(pathname) : null;\n\t\tconst r = match?.route as Doc | undefined;\n\t\tif (!r) {\n\t\t\t// No route matched; mark as 404 for status\n\t\t\tstatusOverride = statusOverride || 404;\n\t\t}\n\t\tif (r && typeof r.path === 'string') {\n\t\t\ttry {\n\t\t\t\tconst abs = join(clientDir, 'routes', String(r.path));\n\t\t\t\tconst mod = (await import(\n\t\t\t\t\tpathToFileURL(abs).href + (isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t)) as Doc;\n\t\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\tif (meta) perPageHead += buildHeadFromMeta(meta);\n\t\t\t\tif (ssr) {\n\t\t\t\t\tconst ssrHead =\n\t\t\t\t\t\ttypeof ssr.head === 'string'\n\t\t\t\t\t\t\t? ssr.head\n\t\t\t\t\t\t\t: Array.isArray(ssr.head)\n\t\t\t\t\t\t\t\t? String((ssr.head as unknown[]).join('\\n'))\n\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\tif (ssrHead) perPageHead += `\\n${ssrHead}`;\n\t\t\t\t\tif (typeof ssr.lang === 'string' && ssr.lang.trim()) {\n\t\t\t\t\t\tpageLang = ssr.lang.trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\t// If route matched but we will render a custom 404 (e.g., content missing),\n\t\t\t// try to also apply the closest notFound meta if available.\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tconst list = (m as Doc)?.notFoundRoutes as Doc[] | undefined;\n\t\t\t\tif (Array.isArray(list)) {\n\t\t\t\t\t// choose most specific by longest pattern prefix\n\t\t\t\t\tlet chosen: Doc | undefined;\n\t\t\t\t\tlet bestLen = -1;\n\t\t\t\t\tfor (const nf of list) {\n\t\t\t\t\t\tconst pat = String((nf as Doc)?.pattern || '/');\n\t\t\t\t\t\tif (!pathname.startsWith(pat)) continue;\n\t\t\t\t\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\t\t\t\t\tif (len >= bestLen) {\n\t\t\t\t\t\t\tbestLen = len;\n\t\t\t\t\t\t\tchosen = nf;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (chosen && typeof (chosen as Doc).path === 'string') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst abs = join(\n\t\t\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\t\t\t'routes',\n\t\t\t\t\t\t\t\tString((chosen as Doc).path),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst mod = (await import(\n\t\t\t\t\t\t\t\tpathToFileURL(abs).href +\n\t\t\t\t\t\t\t\t\t(isWatchMode ? `?t=${Date.now()}` : '')\n\t\t\t\t\t\t\t)) as Doc;\n\t\t\t\t\t\t\tconst meta = (mod as Doc)?.meta;\n\t\t\t\t\t\t\tconst ssr = (mod as Doc)?.ssr as Doc | undefined;\n\t\t\t\t\t\t\tif (meta) perPageHead += buildHeadFromMeta(meta);\n\t\t\t\t\t\t\tconst ssrHead =\n\t\t\t\t\t\t\t\ttypeof ssr?.head === 'string'\n\t\t\t\t\t\t\t\t\t? ssr.head\n\t\t\t\t\t\t\t\t\t: Array.isArray(ssr?.head)\n\t\t\t\t\t\t\t\t\t\t? String((ssr.head as unknown[]).join('\\n'))\n\t\t\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\t\tif (ssrHead) perPageHead += `\\n${ssrHead}`;\n\t\t\t\t\t\t\tif (typeof ssr?.lang === 'string' && ssr.lang?.trim()) {\n\t\t\t\t\t\t\t\tpageLang = String(ssr.lang).trim();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t}\n\t} catch {}\n\n\tconst combinedHead = dedent(\n\t\t[dedent(head) || '', dedent(extraHead), dedent(perPageHead)]\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n'),\n\t);\n\tconst html = applyIndexTemplate(baseTemplate, appHtml, {\n\t\thead: [inlineStyleTag, combinedHead].filter(Boolean).join('\\n'),\n\t\thydrationScript,\n\t\tlang: pageLang || lang,\n\t\tappId,\n\t});\n\n\treturn {\n\t\thtml,\n\t\tstatus: statusOverride || 200,\n\t};\n}\n\nexport { renderSSRDocument, type SSRRenderOptions, type SSRRenderResult };\n",
|
|
16
16
|
"function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nconst dedent = createDedent({});\nexport default dedent;\nfunction createDedent(options) {\n dedent.withOptions = newOptions => createDedent(_objectSpread(_objectSpread({}, options), newOptions));\n return dedent;\n function dedent(strings, ...values) {\n const raw = typeof strings === \"string\" ? [strings] : strings.raw;\n const {\n alignValues = false,\n escapeSpecialCharacters = Array.isArray(strings),\n trimWhitespace = true\n } = options;\n\n // first, perform interpolation\n let result = \"\";\n for (let i = 0; i < raw.length; i++) {\n let next = raw[i];\n if (escapeSpecialCharacters) {\n // handle escaped newlines, backticks, and interpolation characters\n next = next.replace(/\\\\\\n[ \\t]*/g, \"\").replace(/\\\\`/g, \"`\").replace(/\\\\\\$/g, \"$\").replace(/\\\\\\{/g, \"{\");\n }\n result += next;\n if (i < values.length) {\n const value = alignValues ? alignValue(values[i], result) : values[i];\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n result += value;\n }\n }\n\n // now strip indentation\n const lines = result.split(\"\\n\");\n let mindent = null;\n for (const l of lines) {\n const m = l.match(/^(\\s+)\\S+/);\n if (m) {\n const indent = m[1].length;\n if (!mindent) {\n // this is the first indented line\n mindent = indent;\n } else {\n mindent = Math.min(mindent, indent);\n }\n }\n }\n if (mindent !== null) {\n const m = mindent; // appease TypeScript\n result = lines\n // https://github.com/typescript-eslint/typescript-eslint/issues/7140\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n .map(l => l[0] === \" \" || l[0] === \"\\t\" ? l.slice(m) : l).join(\"\\n\");\n }\n\n // dedent eats leading and trailing whitespace too\n if (trimWhitespace) {\n result = result.trim();\n }\n\n // handle escaped newlines at the end to ensure they don't get stripped too\n if (escapeSpecialCharacters) {\n result = result.replace(/\\\\n/g, \"\\n\");\n }\n return result;\n }\n}\n\n/**\n * Adjusts the indentation of a multi-line interpolated value to match the current line.\n */\nfunction alignValue(value, precedingText) {\n if (typeof value !== \"string\" || !value.includes(\"\\n\")) {\n return value;\n }\n const currentLine = precedingText.slice(precedingText.lastIndexOf(\"\\n\") + 1);\n const indentMatch = currentLine.match(/^(\\s+)/);\n if (indentMatch) {\n const indent = indentMatch[1];\n return value.replace(/\\n/g, `\\n${indent}`);\n }\n return value;\n}\n",
|
|
17
17
|
"import type { TemplateContext } from '../types';\nimport { join } from '../utils/path';\n\nexport async function loadIndexHtml(clientDir: string): Promise<string> {\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 (error) {\n\t\tconsole.error(\n\t\t\t`[reroute] Failed to load template from ${templatePath}:`,\n\t\t\terror,\n\t\t);\n\t\t// Minimal fallback (kept simple; will still be transformed below)\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\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// If incoming head contains <title> or a description meta, prefer replacing\n\t// existing ones in the template instead of duplicating.\n\tlet headToInject = head || '';\n\ttry {\n\t\tconst titleMatch = headToInject.match(/<title[\\s\\S]*?<\\/title>/i);\n\t\tif (titleMatch) {\n\t\t\tconst titleTag = titleMatch[0];\n\t\t\tif (/<title[\\s\\S]*?<\\/title>/i.test(html)) {\n\t\t\t\thtml = html.replace(/<title[\\s\\S]*?<\\/title>/i, titleTag);\n\t\t\t} else {\n\t\t\t\t// No title in template; will be injected below\n\t\t\t\t// keep titleTag in headToInject\n\t\t\t}\n\t\t\t// Remove the title from the extra head to avoid duplication when injecting\n\t\t\theadToInject = headToInject.replace(titleTag, '');\n\t\t}\n\n\t\tconst descRe = /<meta\\s+name\\s*=\\s*['\"]description['\"][^>]*>/i;\n\t\tconst descMatch = headToInject.match(descRe);\n\t\tif (descMatch) {\n\t\t\tconst descTag = descMatch[0];\n\t\t\tif (descRe.test(html)) {\n\t\t\t\thtml = html.replace(descRe, descTag);\n\t\t\t}\n\t\t\theadToInject = headToInject.replace(descTag, '');\n\t\t}\n\t} catch {}\n\n\t// Inject remaining head content before </head>\n\tif (headToInject) {\n\t\thtml = html.replace(/<\\/head>/i, `${headToInject}\\n\\t</head>`);\n\t}\n\n\t// Remove any TS/TSX script tags to avoid double-loading in SSR\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// Replace content of the app root (e.g., <div id=\"root\"></div>)\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\tif (rootDivRegex.test(html)) {\n\t\thtml = html.replace(rootDivRegex, `$1${appHtml}$4`);\n\t} else {\n\t\t// If missing, inject just before </body>\n\t\thtml = html.replace(\n\t\t\t/<\\/body>/i,\n\t\t\t`\\t\\t<div id=\"${appId}\">${appHtml}</div>\\n\\t</body>`,\n\t\t);\n\t}\n\n\t// Append hydration scripts just 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",
|
|
18
18
|
"class LRUCache<K, V> {\n\tprivate cache: Map<K, V>;\n\tprivate maxSize: number;\n\n\tconstructor(maxSize: number = 100) {\n\t\tthis.cache = new Map();\n\t\tthis.maxSize = maxSize;\n\t}\n\n\tget(key: K): V | undefined {\n\t\tif (!this.cache.has(key)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Move to end (most recently used)\n\t\t// biome-ignore lint/style/noNonNullAssertion: it's all good\n\t\tconst value = this.cache.get(key)!;\n\t\tthis.cache.delete(key);\n\t\tthis.cache.set(key, value);\n\n\t\treturn value;\n\t}\n\n\tset(key: K, value: V): void {\n\t\t// Delete if exists to reinsert at end\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.delete(key);\n\t\t}\n\n\t\tthis.cache.set(key, value);\n\n\t\t// Evict least recently used if over size\n\t\tif (this.cache.size > this.maxSize) {\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tthis.cache.delete(firstKey as K);\n\t\t}\n\t}\n\n\thas(key: K): boolean {\n\t\treturn this.cache.has(key);\n\t}\n\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n\n\tget size(): number {\n\t\treturn this.cache.size;\n\t}\n}\n\nexport { LRUCache };\n",
|
|
19
|
+
"import { brotliCompressSync } from 'node:zlib';\nimport type { CompressionResult } from '../types';\nimport { isCompressible } from './mime';\n\nexport function acceptsGzip(acceptEncoding?: string): boolean {\n\treturn Boolean(acceptEncoding && /gzip/i.test(acceptEncoding));\n}\n\nexport function acceptsBrotli(acceptEncoding?: string): boolean {\n\treturn Boolean(acceptEncoding && /\\bbr\\b/i.test(acceptEncoding));\n}\n\nexport function toBytes(\n\tinput: string | Uint8Array,\n): Uint8Array<ArrayBuffer> | string {\n\treturn typeof input === 'string'\n\t\t? new TextEncoder().encode(input)\n\t\t: (input as Uint8Array<ArrayBuffer>);\n}\n\nexport function gzipIfAccepted(\n\tbody: string | Uint8Array,\n\tcontentType: string,\n\tacceptEncoding?: string,\n): CompressionResult {\n\tconst extraHeaders: Record<string, string> = {};\n\tif (isCompressible(contentType)) {\n\t\t// Prefer Brotli if supported by the client\n\t\tif (acceptsBrotli(acceptEncoding)) {\n\t\t\ttry {\n\t\t\t\tconst compressed = brotliCompressSync(toBytes(body) as Uint8Array);\n\t\t\t\textraHeaders['Content-Encoding'] = 'br';\n\t\t\t\textraHeaders.Vary = 'Accept-Encoding';\n\t\t\t\treturn { body: compressed, extraHeaders };\n\t\t\t} catch {\n\t\t\t\t// ignore and fallthrough to gzip\n\t\t\t}\n\t\t}\n\t\t// Fallback to gzip\n\t\tif (acceptsGzip(acceptEncoding)) {\n\t\t\ttry {\n\t\t\t\tconst compressed = Bun.gzipSync(toBytes(body));\n\t\t\t\textraHeaders['Content-Encoding'] = 'gzip';\n\t\t\t\textraHeaders.Vary = 'Accept-Encoding';\n\t\t\t\treturn { body: compressed, extraHeaders };\n\t\t\t} catch {\n\t\t\t\t// ignore and fallthrough\n\t\t\t}\n\t\t}\n\t}\n\treturn { body, extraHeaders };\n}\n",
|
|
19
20
|
"export function getMimeType(filePath: string): string {\n\tconst ext = filePath.split('.').pop()?.toLowerCase();\n\tconst mimeTypes: Record<string, string> = {\n\t\thtml: 'text/html',\n\t\tcss: 'text/css',\n\t\tjs: 'application/javascript',\n\t\tts: 'application/javascript',\n\t\tjson: 'application/json',\n\t\tpng: 'image/png',\n\t\tjpg: 'image/jpeg',\n\t\tjpeg: 'image/jpeg',\n\t\tgif: 'image/gif',\n\t\tsvg: 'image/svg+xml',\n\t\tico: 'image/x-icon',\n\t\twoff: 'font/woff',\n\t\twoff2: 'font/woff2',\n\t\tttf: 'font/ttf',\n\t};\n\treturn mimeTypes[ext || ''] || 'application/octet-stream';\n}\n\nexport function isCompressible(contentType: string): boolean {\n\tif (!contentType) return false;\n\tconst ct = contentType.split(';')[0].trim();\n\treturn (\n\t\tct.startsWith('text/') ||\n\t\tct === 'application/javascript' ||\n\t\tct === 'application/json' ||\n\t\tct === 'application/xml' ||\n\t\tct === 'image/svg+xml'\n\t);\n}\n",
|
|
20
|
-
"import type { CompressionResult } from '../types';\nimport { isCompressible } from './mime';\n\nexport function acceptsGzip(acceptEncoding?: string): boolean {\n\treturn Boolean(acceptEncoding && /gzip/i.test(acceptEncoding));\n}\n\nexport function toBytes(\n\tinput: string | Uint8Array,\n): Uint8Array<ArrayBuffer> | string {\n\treturn typeof input === 'string'\n\t\t? new TextEncoder().encode(input)\n\t\t: (input as Uint8Array<ArrayBuffer>);\n}\n\nexport function gzipIfAccepted(\n\tbody: string | Uint8Array,\n\tcontentType: string,\n\tacceptEncoding?: string,\n): CompressionResult {\n\tconst extraHeaders: Record<string, string> = {};\n\tif (acceptsGzip(acceptEncoding) && isCompressible(contentType)) {\n\t\ttry {\n\t\t\tconst compressed = Bun.gzipSync(toBytes(body));\n\t\t\textraHeaders['Content-Encoding'] = 'gzip';\n\t\t\textraHeaders.Vary = 'Accept-Encoding';\n\t\t\treturn { body: compressed, extraHeaders };\n\t\t} catch {\n\t\t\t// ignore and fallthrough\n\t\t}\n\t}\n\treturn { body, extraHeaders };\n}\n",
|
|
21
21
|
"// Small helpers for JSON responses with caching/ETag\n// Keep local to Elysia package to avoid core dependency surface changes\n\n// biome-ignore lint/suspicious/noExplicitAny: Bun env types vary\ntype Any = any;\n\nconst makeETag = (s: string) => {\n\ttry {\n\t\t// Prefer Bun.hash if available (fast)\n\t\tconst h = (globalThis as Any)?.Bun?.hash?.(s) ?? 0;\n\t\treturn `W/\"${s.length.toString(16)}-${Number(h).toString(36)}\"`;\n\t} catch {\n\t\t// Fallback: length-based weak tag\n\t\treturn `W/\"${s.length.toString(16)}-0\"`;\n\t}\n};\n\nconst getIfNoneMatch = (headers?: Headers | Record<string, string>) => {\n\ttry {\n\t\tif (!headers) return undefined;\n\t\t// Elysia provides Headers-like and plain-record in different hooks\n\t\t// Try .get first, then record access in lower/normal case\n\t\tconst h: Any = headers as Any;\n\t\tif (typeof h?.get === 'function')\n\t\t\treturn String(h.get('if-none-match') || '');\n\t\treturn String((h['if-none-match'] || h['If-None-Match'] || '') as string);\n\t} catch {\n\t\treturn undefined;\n\t}\n};\n\nexport function jsonWithCache(\n\tpayload: Any,\n\tcacheControl: string,\n\treqHeaders?: Headers | Record<string, string>,\n): Response {\n\tconst body = typeof payload === 'string' ? payload : JSON.stringify(payload);\n\tconst etag = makeETag(body);\n\tconst inm = getIfNoneMatch(reqHeaders) || '';\n\n\tif (etag && inm && inm === etag) {\n\t\treturn new Response(null, {\n\t\t\tstatus: 304,\n\t\t\theaders: {\n\t\t\t\tETag: etag,\n\t\t\t\t'Cache-Control': cacheControl,\n\t\t\t},\n\t\t});\n\t}\n\n\treturn new Response(body, {\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json; charset=utf-8',\n\t\t\t'Cache-Control': cacheControl,\n\t\t\tETag: etag,\n\t\t},\n\t});\n}\n\nexport function jsonError(message: string, status = 500): Response {\n\treturn new Response(JSON.stringify({ error: message }), {\n\t\tstatus,\n\t\theaders: { 'Content-Type': 'application/json; charset=utf-8' },\n\t});\n}\n",
|
|
22
22
|
"import { createHash } from 'node:crypto';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\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 hash = createHash('sha256')\n\t\t.update(`${imagePath}:${optionsString}`)\n\t\t.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 readFile(cachePath, 'utf-8'));\n\t\tconst buffer = await readFile(imagePath);\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\t// Ensure cache directory exists\n\t\tawait mkdir(diskCacheDir, { recursive: true });\n\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 writeFile(\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 writeFile(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 */\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\t// Add to memory cache\n\t\tif (imageCache.size >= MAX_CACHE_SIZE) {\n\t\t\t// Remove oldest entry\n\t\t\tconst firstKey = imageCache.keys().next().value;\n\t\t\tif (firstKey) {\n\t\t\t\timageCache.delete(firstKey);\n\t\t\t}\n\t\t}\n\t\timageCache.set(cacheKey, diskCached);\n\t\treturn diskCached;\n\t}\n\n\t// Read source image\n\tlet sourceBuffer: Buffer;\n\tif (imagePath.startsWith('http://') || imagePath.startsWith('https://')) {\n\t\t// Fetch remote image\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\tsourceBuffer = Buffer.from(arrayBuffer);\n\t} else {\n\t\t// Read local file\n\t\tsourceBuffer = await readFile(imagePath);\n\t}\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, // Don't upscale images\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\n\tswitch (format) {\n\t\tcase 'webp':\n\t\t\ttransformer = transformer.webp({\n\t\t\t\tquality,\n\t\t\t\teffort: 4, // Balance between speed and compression\n\t\t\t});\n\t\t\tbreak;\n\t\tcase 'avif':\n\t\t\ttransformer = transformer.avif({\n\t\t\t\tquality,\n\t\t\t\teffort: 4,\n\t\t\t});\n\t\t\tbreak;\n\t\tcase 'png':\n\t\t\ttransformer = 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\t\tbreak;\n\t\tdefault:\n\t\t\ttransformer = transformer.jpeg({\n\t\t\t\tquality,\n\t\t\t\tmozjpeg: true, // Use mozjpeg for better compression\n\t\t\t});\n\t\t\tbreak;\n\t}\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",
|
|
23
23
|
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport { getMimeType, gzipIfAccepted, join } from 'reroute-js/core';\n\nexport function registerArtifactsRoutes(app: Elysia, cwd: string): Elysia {\n\t// Serve generated routes and content chunks from project root .reroute\n\tapp.get('/.reroute/*', async ({ params, headers }) => {\n\t\tconst sub = String(params['*'] || '').replace(/^\\/+/, '');\n\t\tif (!sub) throw new NotFoundError();\n\t\tconst abs = join(cwd, '.reroute', sub);\n\t\ttry {\n\t\t\tconst exists = await Bun.file(abs).exists();\n\t\t\tif (!exists) throw new NotFoundError();\n\t\t\tconst buf = await Bun.file(abs).arrayBuffer();\n\t\t\tconst content = new Uint8Array(buf);\n\t\t\tconst contentType = getMimeType(abs);\n\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\tcontent,\n\t\t\t\tcontentType,\n\t\t\t\theaders['accept-encoding'],\n\t\t\t);\n\t\t\treturn new Response(body as string, {\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t// Artifacts/chunks are hashed; cache aggressively\n\t\t\t\t\t'Cache-Control': 'public, max-age=31536000, immutable',\n\t\t\t\t\t...extraHeaders,\n\t\t\t\t},\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 .reroute file:', abs, e);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\treturn app;\n}\n",
|
|
24
24
|
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport { buildContentDTOs } from 'reroute-js/core';\n\nexport function registerContentRoutes(\n\tapp: Elysia,\n\tclientDir: string,\n\tprefix: string,\n\tisWatchMode: boolean,\n): Elysia {\n\t// Content manifest endpoint (JSON)\n\tapp.get('/__content/*', async ({ params, set }) => {\n\t\tconst collectionPath = String(params['*'] || '').trim();\n\t\tif (!collectionPath) throw new NotFoundError();\n\t\tconst items = await buildContentDTOs(\n\t\t\tcollectionPath,\n\t\t\tclientDir,\n\t\t\tprefix,\n\t\t\tisWatchMode,\n\t\t);\n\t\tconst body = JSON.stringify({ collection: collectionPath, items });\n\t\tset.status = 200;\n\t\tset.headers['content-type'] = 'application/json; charset=utf-8';\n\t\treturn new Response(body);\n\t});\n\n\treturn app;\n}\n",
|
|
25
25
|
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport { computeSSRDataForPath, type LRUCache } from 'reroute-js/core';\nimport { jsonError, jsonWithCache } from '../libs/http';\n\nexport function registerDevRoutes(\n\tapp: Elysia,\n\tliveReloadClients: Set<ReadableStreamDefaultController>,\n\tisWatchMode: boolean,\n\topts?: {\n\t\tclientDir: string;\n\t\tcwd: string;\n\t\tdataCacheControl?: string;\n\t\tdataCache?: LRUCache<string, unknown>;\n\t},\n): Elysia {\n\t// Always register preload endpoint (used in SSR in all modes)\n\tapp.get('/__reroute_preload', async ({ query }) => {\n\t\tconst rawSrc = String(query.src || '').trim();\n\t\tconst key = String(query.key || '').trim();\n\t\tlet src = rawSrc;\n\t\ttry {\n\t\t\tsrc = decodeURIComponent(rawSrc);\n\t\t} catch {}\n\t\tconst safeChunk =\n\t\t\tsrc.startsWith('/.reroute/chunks/') && /^[A-Za-z0-9_./-]+\\.js$/.test(src);\n\t\tconst safeSource =\n\t\t\tsrc.startsWith('/routes/') &&\n\t\t\t/^[A-Za-z0-9_./\\-[\\]]+\\.(tsx?|js)$/.test(src);\n\t\tconst safe = (safeChunk || safeSource) && !src.includes('..');\n\t\tif (!safe || !key) throw new NotFoundError();\n\n\t\t// Use static import to guarantee execution ordering and avoid race during hydration\n\t\tconst code =\n\t\t\t`// preload for ${key}\\n` +\n\t\t\t`import * as __m from '${src}';\\n` +\n\t\t\t`const __C = __m.default || __m;\\n` +\n\t\t\t`(globalThis.__REROUTE_MODULES__ ||= {});\\n` +\n\t\t\t`globalThis.__REROUTE_MODULES__['${key}'] = __C;\\n` +\n\t\t\t`export {};`;\n\t\treturn new Response(code, {\n\t\t\theaders: {\n\t\t\t\t'content-type': 'application/javascript; charset=utf-8',\n\t\t\t\t'cache-control': isWatchMode\n\t\t\t\t\t? 'no-cache'\n\t\t\t\t\t: 'public, max-age=31536000, immutable',\n\t\t\t},\n\t\t});\n\t});\n\n\t// Lightweight data endpoint used by Link prefetch and client navigations\n\tapp.get('/__reroute_data', async ({ query, headers }) => {\n\t\tconst p = String(query.path || query.p || '/');\n\t\tlet pathname = '/';\n\t\ttry {\n\t\t\tconst u = new URL(p, 'http://localhost');\n\t\t\tpathname = u.pathname + u.search;\n\t\t} catch {\n\t\t\tpathname = String(p);\n\t\t}\n\t\ttry {\n\t\t\t// Check cache first (skip in watch mode for fresh data)\n\t\t\tlet data = isWatchMode ? undefined : opts?.dataCache?.get(pathname);\n\n\t\t\tif (data === undefined) {\n\t\t\t\tdata = await computeSSRDataForPath({\n\t\t\t\t\tpathname,\n\t\t\t\t\tclientDir: opts?.clientDir || '',\n\t\t\t\t\tcwd: opts?.cwd || '',\n\t\t\t\t\tisWatchMode,\n\t\t\t\t});\n\t\t\t\t// Cache the result (even in watch mode for request deduplication)\n\t\t\t\topts?.dataCache?.set(pathname, data);\n\t\t\t}\n\n\t\t\treturn jsonWithCache(\n\t\t\t\t{ data },\n\t\t\t\topts?.dataCacheControl || 'no-cache',\n\t\t\t\theaders as Record<string, string>,\n\t\t\t);\n\t\t} catch (_e) {\n\t\t\treturn jsonError('failed', 500);\n\t\t}\n\t});\n\n\tif (!isWatchMode) return app;\n\n\t// SSE endpoint for live reload\n\tconsole.log('[reroute] Registering SSE endpoint at /__reroute_watch');\n\tapp.get('/__reroute_watch', () => {\n\t\tconst encoder = new TextEncoder();\n\t\tlet interval: NodeJS.Timeout;\n\t\tconst stream = new ReadableStream({\n\t\t\tstart(controller) {\n\t\t\t\tliveReloadClients.add(controller);\n\t\t\t\tconsole.log('[reroute] Browser connected for live reload');\n\t\t\t\t// Send connect + retry hint\n\t\t\t\tcontroller.enqueue(encoder.encode('retry: 1000\\n'));\n\t\t\t\tcontroller.enqueue(encoder.encode('data: connected\\n\\n'));\n\t\t\t\t// Heartbeat every 25s to keep connections alive behind proxies\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcontroller.enqueue(encoder.encode(': ping\\n\\n'));\n\t\t\t\t\t} catch {}\n\t\t\t\t}, 25000);\n\t\t\t},\n\t\t\tcancel() {\n\t\t\t\tif (interval) clearInterval(interval);\n\t\t\t\tconsole.log('[reroute] Browser disconnected from live reload');\n\t\t\t},\n\t\t});\n\n\t\treturn new Response(stream, {\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'text/event-stream',\n\t\t\t\t'Cache-Control': 'no-cache',\n\t\t\t\tConnection: 'keep-alive',\n\t\t\t},\n\t\t});\n\t});\n\n\t// External preload module: imports a content chunk and seeds client store\n\t// Dev live-reload client as a separate module\n\tapp.get('/__reroute_watch.js', () => {\n\t\tconst code =\n\t\t\t`// live-reload client\\n` +\n\t\t\t`const url='/__reroute_watch';\\n` +\n\t\t\t`let es; let reloading=false;\\n` +\n\t\t\t`function waitServerThenReload(){\\n` +\n\t\t\t` const ping = () => fetch(location.origin, { cache: 'no-store' })\\n` +\n\t\t\t` .then(()=>location.reload())\\n` +\n\t\t\t` .catch(()=>setTimeout(ping, 300));\\n` +\n\t\t\t` ping();\\n` +\n\t\t\t`}\\n` +\n\t\t\t`function connect(){\\n` +\n\t\t\t` es=new EventSource(url);\\n` +\n\t\t\t` es.onopen=()=>console.log('[reroute] watching changes');\\n` +\n\t\t\t` es.onmessage=(e)=>{ if(e.data==='reload'){ reloading=true; try{ es.close(); }catch{} waitServerThenReload(); } };\\n` +\n\t\t\t` es.onerror=()=>{ if(!reloading){ reloading=true; try{ es.close(); }catch{} waitServerThenReload(); } };\\n` +\n\t\t\t`}\\n` +\n\t\t\t`connect();\\nexport {};`;\n\t\treturn new Response(code, {\n\t\t\theaders: {\n\t\t\t\t'content-type': 'application/javascript; charset=utf-8',\n\t\t\t\t'cache-control': 'no-cache',\n\t\t\t},\n\t\t});\n\t});\n\n\treturn app;\n}\n",
|
|
26
26
|
"import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Elysia } from 'elysia';\nimport { isImageFile, optimizeImage } from '../libs/image';\n\ninterface ImageRouteOptions {\n\tclientDir: string;\n\tmaxAge?: number;\n\tallowedDomains?: string[];\n\tmaxWidth?: number;\n\tmaxHeight?: number;\n}\n\n/**\n * Register image optimization routes\n */\nexport function registerImageRoutes(\n\tapp: Elysia,\n\toptions: ImageRouteOptions,\n): void {\n\tconst {\n\t\tclientDir,\n\t\tmaxAge = 31536000, // 1 year in seconds\n\t\tallowedDomains = [],\n\t\tmaxWidth = 3840,\n\t\tmaxHeight = 2160,\n\t} = options;\n\n\tapp.get('/_reroute_image', async ({ query, headers, set }) => {\n\t\ttry {\n\t\t\t// Parse query parameters\n\t\t\tconst url = query.url as string | undefined;\n\t\t\tconst widthParam = query.w as string | undefined;\n\t\t\tconst heightParam = query.h as string | undefined;\n\t\t\tconst qualityParam = query.q as string | undefined;\n\t\t\tconst formatParam = query.f as string | undefined;\n\n\t\t\t// Validate required parameters\n\t\t\tif (!url) {\n\t\t\t\tset.status = 400;\n\t\t\t\treturn { error: 'Missing required parameter: url' };\n\t\t\t}\n\n\t\t\t// Parse numeric parameters\n\t\t\tconst width = widthParam ? Number.parseInt(widthParam, 10) : undefined;\n\t\t\tconst height = heightParam ? Number.parseInt(heightParam, 10) : undefined;\n\t\t\tconst quality = qualityParam\n\t\t\t\t? Number.parseInt(qualityParam, 10)\n\t\t\t\t: undefined;\n\n\t\t\t// Validate numeric parameters\n\t\t\tif (width !== undefined && (Number.isNaN(width) || width <= 0)) {\n\t\t\t\tset.status = 400;\n\t\t\t\treturn { error: 'Invalid width parameter' };\n\t\t\t}\n\n\t\t\tif (height !== undefined && (Number.isNaN(height) || height <= 0)) {\n\t\t\t\tset.status = 400;\n\t\t\t\treturn { error: 'Invalid height parameter' };\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tquality !== undefined &&\n\t\t\t\t(Number.isNaN(quality) || quality < 1 || quality > 100)\n\t\t\t) {\n\t\t\t\tset.status = 400;\n\t\t\t\treturn { error: 'Invalid quality parameter (must be 1-100)' };\n\t\t\t}\n\n\t\t\t// Enforce maximum dimensions\n\t\t\tconst finalWidth = width && width > maxWidth ? maxWidth : width;\n\t\t\tconst finalHeight = height && height > maxHeight ? maxHeight : height;\n\n\t\t\t// Resolve image path\n\t\t\tlet imagePath: string;\n\n\t\t\t// Check if URL is external or internal\n\t\t\tif (url.startsWith('http://') || url.startsWith('https://')) {\n\t\t\t\t// External URL - check if domain is allowed\n\t\t\t\tconst urlObj = new URL(url);\n\t\t\t\tconst isAllowed = allowedDomains.some(\n\t\t\t\t\t(domain) =>\n\t\t\t\t\t\turlObj.hostname === domain ||\n\t\t\t\t\t\turlObj.hostname.endsWith(`.${domain}`),\n\t\t\t\t);\n\n\t\t\t\tif (!isAllowed) {\n\t\t\t\t\tset.status = 403;\n\t\t\t\t\treturn { error: 'Domain not allowed' };\n\t\t\t\t}\n\n\t\t\t\t// Use URL as cache key - don't fetch until cache miss\n\t\t\t\timagePath = url;\n\t\t\t} else {\n\t\t\t\t// Internal path - resolve relative to clientDir\n\t\t\t\tconst cleanUrl = url.startsWith('/') ? url.slice(1) : url;\n\t\t\t\timagePath = join(clientDir, cleanUrl);\n\n\t\t\t\t// Security check: ensure path is within clientDir\n\t\t\t\tconst normalizedPath = join(clientDir, cleanUrl);\n\t\t\t\tif (!normalizedPath.startsWith(clientDir)) {\n\t\t\t\t\tset.status = 403;\n\t\t\t\t\treturn { error: 'Access denied' };\n\t\t\t\t}\n\n\t\t\t\t// Check if file exists\n\t\t\t\tif (!existsSync(imagePath)) {\n\t\t\t\t\tset.status = 404;\n\t\t\t\t\treturn { error: 'Image not found' };\n\t\t\t\t}\n\n\t\t\t\t// Check if file is an image\n\t\t\t\tif (!isImageFile(imagePath)) {\n\t\t\t\t\tset.status = 400;\n\t\t\t\t\treturn { error: 'File is not a supported image format' };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Determine output format\n\t\t\tconst acceptHeader = headers.accept;\n\t\t\tconst format = formatParam || 'auto';\n\n\t\t\t// Optimize image\n\t\t\tconst result = await optimizeImage(\n\t\t\t\timagePath,\n\t\t\t\t{\n\t\t\t\t\twidth: finalWidth,\n\t\t\t\t\theight: finalHeight,\n\t\t\t\t\tquality,\n\t\t\t\t\tformat: format as 'webp' | 'avif' | 'jpeg' | 'png' | 'auto',\n\t\t\t\t\tfit: 'cover',\n\t\t\t\t},\n\t\t\t\tacceptHeader,\n\t\t\t);\n\n\t\t\t// Set response headers\n\t\t\tset.headers = {\n\t\t\t\t'Content-Type': result.contentType,\n\t\t\t\t'Cache-Control': `public, max-age=${maxAge}, immutable`,\n\t\t\t\t'Content-Length': result.size.toString(),\n\t\t\t\t'X-Image-Width': result.width.toString(),\n\t\t\t\t'X-Image-Height': result.height.toString(),\n\t\t\t\t'X-Image-Format': result.format,\n\t\t\t\tVary: 'Accept',\n\t\t\t};\n\n\t\t\treturn new Response(result.buffer as BodyInit);\n\t\t} catch (error) {\n\t\t\tconsole.error('Image optimization error:', error);\n\t\t\tset.status = 500;\n\t\t\treturn { error: 'Failed to optimize image' };\n\t\t}\n\t});\n}\n",
|
|
27
|
-
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport type { ReactElement } from 'react';\nimport {\n\tcomputeSSRDataForPath,\n\tgenerateContentRegistry,\n\tgzipIfAccepted,\n\
|
|
28
|
-
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport {\n\ttype BundleInfo,\n\tgetMimeType,\n\tgzipIfAccepted,\n\tjoin,\n\ttype LRUCache,\n\ttranspileFile,\n} from 'reroute-js/core';\n\ntype StaticRouteOptions = {\n\tclientDir: string;\n\tprefix: string;\n\tmaxAge: number;\n\tdirective: string;\n\tindexHTML: boolean;\n\tstaticHeaders?: Record<string, string>;\n\tminify: boolean;\n\tsourcemap: boolean;\n\tshouldIgnore: (file: string) => boolean;\n\tbundleCache: Map<string, BundleInfo>;\n\tfileCache: LRUCache<string, Response>;\n\tisWatchMode?: boolean;\n};\n\nfunction registerStaticRoutes(\n\tapp: Elysia,\n\toptions: StaticRouteOptions,\n): Elysia {\n\tconst {\n\t\tclientDir,\n\t\tprefix,\n\t\tmaxAge,\n\t\tdirective,\n\t\tindexHTML,\n\t\tstaticHeaders,\n\t\tminify,\n\t\tsourcemap,\n\t\tshouldIgnore,\n\t\tbundleCache,\n\t\tfileCache,\n\t\tisWatchMode,\n\t} = options;\n\n\t// Static files route (scoped under prefix, e.g. '/assets/*')\n\tapp.get(`${prefix}/*`, async ({ params, headers }) => {\n\t\tconst requestPath = params['*'];\n\n\t\t// Handle hashed JS bundles (e.g., index.abc123.js)\n\t\tconst hashedJsMatch = requestPath.match(/^(.+)\\.([a-f0-9]{8})\\.js$/);\n\t\tif (hashedJsMatch) {\n\t\t\t// Check file cache first (includes gzipped response)\n\t\t\tconst acceptEncoding = headers['accept-encoding'] || '';\n\t\t\tconst cacheKey = `${requestPath}:${acceptEncoding}`;\n\t\t\tconst cached = fileCache.get(cacheKey);\n\t\t\tif (cached) {\n\t\t\t\treturn cached.clone();\n\t\t\t}\n\n\t\t\tconst [, filename, hash] = hashedJsMatch;\n\n\t\t\tconst tsxPath = join(clientDir, `${filename}.tsx`);\n\t\t\tconst tsPath = join(clientDir, `${filename}.ts`);\n\n\t\t\tlet filePath: string | null = null;\n\t\t\tif (await Bun.file(tsxPath).exists()) {\n\t\t\t\tfilePath = tsxPath;\n\t\t\t} else if (await Bun.file(tsPath).exists()) {\n\t\t\t\tfilePath = tsPath;\n\t\t\t}\n\n\t\t\tif (filePath) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bundleInfo = await transpileFile(\n\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\t`${filename}.tsx`,\n\t\t\t\t\t\t{ minify, sourcemap },\n\t\t\t\t\t\tbundleCache,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (bundleInfo.hash === hash) {\n\t\t\t\t\t\tconst contentType = 'application/javascript; charset=utf-8';\n\t\t\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\t\t\tbundleInfo.code,\n\t\t\t\t\t\t\tcontentType,\n\t\t\t\t\t\t\tacceptEncoding,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst response = new Response(body as string, {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t\t\t'Cache-Control': `${directive}, max-age=${365 * 24 * 60 * 60}, immutable`,\n\t\t\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t\t\t...staticHeaders,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Cache the response (including gzipped body)\n\t\t\t\t\t\tfileCache.set(cacheKey, response.clone());\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`[reroute] Error serving bundle:`, error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle sourcemaps (e.g., index.abc123.js.map)\n\t\tconst sourceMapMatch = requestPath.match(/^(.+)\\.([a-f0-9]{8})\\.js\\.map$/);\n\t\tif (sourceMapMatch) {\n\t\t\tconst [, filename, hash] = sourceMapMatch;\n\n\t\t\tconst tsxPath = join(clientDir, `${filename}.tsx`);\n\t\t\tconst tsPath = join(clientDir, `${filename}.ts`);\n\n\t\t\tlet filePath: string | null = null;\n\t\t\tif (await Bun.file(tsxPath).exists()) {\n\t\t\t\tfilePath = tsxPath;\n\t\t\t} else if (await Bun.file(tsPath).exists()) {\n\t\t\t\tfilePath = tsPath;\n\t\t\t}\n\n\t\t\tif (filePath) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bundleInfo = await transpileFile(\n\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\t`${filename}.tsx`,\n\t\t\t\t\t\t{ minify, sourcemap },\n\t\t\t\t\t\tbundleCache,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (bundleInfo.hash === hash && bundleInfo.sourceMap) {\n\t\t\t\t\t\tconst contentType = 'application/json; charset=utf-8';\n\t\t\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\t\t\tbundleInfo.sourceMap,\n\t\t\t\t\t\t\tcontentType,\n\t\t\t\t\t\t\theaders['accept-encoding'],\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn new Response(body as string, {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t\t\t'Cache-Control': `${directive}, max-age=${365 * 24 * 60 * 60}, immutable`,\n\t\t\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t\t\t...staticHeaders,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`[reroute] Error serving sourcemap:`, error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle .tsx/.ts files\n\t\tif (requestPath.endsWith('.tsx') || requestPath.endsWith('.ts')) {\n\t\t\t// Special-case content modules: redirect to prebuilt chunk to avoid on-the-fly bundling in dev\n\t\t\ttry {\n\t\t\t\tconst m = requestPath.match(\n\t\t\t\t\t/^routes\\/([^/]+)\\/content\\/([^/]+)\\.(tsx|ts)$/,\n\t\t\t\t);\n\t\t\t\tif (m) {\n\t\t\t\t\tconst collection = m[1];\n\t\t\t\t\tconst name = m[2];\n\t\t\t\t\t// Use registry mapping if available for exact chunk selection\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst cwd = process.cwd();\n\t\t\t\t\t\tconst regPath = join(cwd, '.reroute', 'content.ts');\n\t\t\t\t\t\tconst reg = await import(\n\t\t\t\t\t\t\t(await import('node:url')).pathToFileURL(regPath).href +\n\t\t\t\t\t\t\t\t`?t=${Date.now()}`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst get = reg?.getContentEntry as (\n\t\t\t\t\t\t\tc: string,\n\t\t\t\t\t\t\tn: string,\n\t\t\t\t\t\t) => { module?: string } | undefined;\n\t\t\t\t\t\tconst entry =\n\t\t\t\t\t\t\ttypeof get === 'function' ? get(collection, name) : undefined;\n\t\t\t\t\t\tconst mod = entry?.module as string | undefined;\n\t\t\t\t\t\tif (mod?.endsWith('.js')) {\n\t\t\t\t\t\t\treturn new Response(null, {\n\t\t\t\t\t\t\t\tstatus: 302,\n\t\t\t\t\t\t\t\theaders: { Location: mod },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\n\t\t\t\t\t// Fallback: choose newest by mtime\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst chunkDir = join(\n\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t'.reroute',\n\t\t\t\t\t\t\t'chunks',\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst files = await (await import('node:fs/promises')).readdir(\n\t\t\t\t\t\t\tchunkDir,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst candidates = files.filter(\n\t\t\t\t\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (candidates.length) {\n\t\t\t\t\t\t\tlet latest = candidates[0];\n\t\t\t\t\t\t\tlet latestM = 0;\n\t\t\t\t\t\t\tconst { stat } = await import('node:fs/promises');\n\t\t\t\t\t\t\tfor (const f of candidates) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst s = await stat(join(chunkDir, f));\n\t\t\t\t\t\t\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\t\t\t\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\t\t\t\t\t\t\tlatest = f;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst loc = `/${join('.reroute', 'chunks', collection, latest).replace(/\\\\+/g, '/')}`;\n\t\t\t\t\t\t\treturn new Response(null, {\n\t\t\t\t\t\t\t\tstatus: 302,\n\t\t\t\t\t\t\t\theaders: { Location: loc },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t} catch {}\n\n\t\t\tconst filePath = join(clientDir, requestPath);\n\n\t\t\tif (shouldIgnore(filePath)) throw new NotFoundError();\n\n\t\t\ttry {\n\t\t\t\tconst exists = await Bun.file(filePath).exists();\n\t\t\t\tif (!exists) throw new NotFoundError();\n\n\t\t\t\tconst bundleInfo = await transpileFile(\n\t\t\t\t\tfilePath,\n\t\t\t\t\trequestPath,\n\t\t\t\t\t{ minify, sourcemap },\n\t\t\t\t\tbundleCache,\n\t\t\t\t);\n\n\t\t\t\tconst contentType = 'application/javascript; charset=utf-8';\n\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\tbundleInfo.code,\n\t\t\t\t\tcontentType,\n\t\t\t\t\theaders['accept-encoding'],\n\t\t\t\t);\n\t\t\t\treturn new Response(body as string, {\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': isWatchMode\n\t\t\t\t\t\t\t? 'no-cache'\n\t\t\t\t\t\t\t: `${directive}, max-age=${maxAge}`,\n\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t...staticHeaders,\n\t\t\t\t\t},\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(`[reroute] Error:`, error);\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\t\t}\n\n\t\tconst filePath = join(clientDir, requestPath);\n\n\t\ttry {\n\t\t\tlet actualFilePath = filePath;\n\t\t\tlet exists = await Bun.file(actualFilePath).exists();\n\t\t\tif (!exists && indexHTML) {\n\t\t\t\tactualFilePath = join(filePath, 'index.html');\n\t\t\t\texists = await Bun.file(actualFilePath).exists();\n\t\t\t}\n\t\t\tif (!exists) throw new NotFoundError();\n\n\t\t\t// Check if the resolved file should be ignored (e.g., index.html)\n\t\t\tif (shouldIgnore(actualFilePath)) throw new NotFoundError();\n\n\t\t\t// Check cache after resolving and validating the file\n\t\t\tconst cached = fileCache.get(filePath);\n\t\t\tif (cached) return cached.clone();\n\n\t\t\tconst contentBuf = await Bun.file(actualFilePath).arrayBuffer();\n\t\t\tconst content = new Uint8Array(contentBuf);\n\t\t\tconst contentType = getMimeType(actualFilePath);\n\n\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\tcontent,\n\t\t\t\tcontentType,\n\t\t\t\theaders['accept-encoding'],\n\t\t\t);\n\n\t\t\t// Determine cache duration based on content type\n\t\t\tconst isLongLivedAsset =\n\t\t\t\tcontentType.startsWith('image/') ||\n\t\t\t\tcontentType.startsWith('font/') ||\n\t\t\t\tcontentType.includes('woff') ||\n\t\t\t\tcontentType.includes('ttf') ||\n\t\t\t\tcontentType.includes('otf');\n\n\t\t\tconst cacheMaxAge =\n\t\t\t\tmaxAge === 0 ? 0 : isLongLivedAsset ? 365 * 24 * 60 * 60 : maxAge;\n\n\t\t\tconst response = new Response(body as string, {\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t'Cache-Control':\n\t\t\t\t\t\tcacheMaxAge > 0\n\t\t\t\t\t\t\t? `${directive}, max-age=${cacheMaxAge}${isLongLivedAsset ? ', immutable' : ''}`\n\t\t\t\t\t\t\t: 'no-cache',\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(filePath, response);\n\n\t\t\treturn response.clone();\n\t\t} catch (error) {\n\t\t\tif (error instanceof NotFoundError) throw error;\n\t\t\tconsole.error(`[reroute] Error serving ${filePath}:`, error);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\treturn app;\n}\n\nexport { registerStaticRoutes };\n",
|
|
27
|
+
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport type { ReactElement } from 'react';\nimport {\n\tcomputeSSRDataForPath,\n\tgenerateContentRegistry,\n\tgetStaticDepsForUrl,\n\tgzipIfAccepted,\n\tLRUCache,\n\trenderSSRDocument,\n} from 'reroute-js/core';\nimport { jsonError, jsonWithCache } from '../libs/http';\n\ntype SSRRouteOptions = {\n\trootComponent: ReactElement;\n\tclientDir: string;\n\tcwd: string;\n\tisWatchMode: boolean;\n\tgetBundleUrl: () => Promise<string>;\n\thead?: string;\n\tlang?: string;\n\tappId?: string;\n\tcollections: string[];\n\tminify?: boolean;\n\tmaxAge?: number;\n\tdirective?: string;\n\tdataCacheControl?: string;\n\tdataCache?: LRUCache<string, unknown>;\n\tshouldIgnorePathname?: (pathname: string) => 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\thead = '',\n\t\tlang = 'en',\n\t\tappId = 'root',\n\t\tcollections,\n\t\tminify = false,\n\t\tmaxAge = 3600,\n\t\tdirective = 'public',\n\t\tdataCacheControl,\n\t\tdataCache,\n\t\tshouldIgnorePathname,\n\t} = options;\n\n\t// Cache SSR HTML in-memory for 5 minutes (disabled in watch mode)\n\tconst SSR_HTML_TTL_MS = isWatchMode ? 0 : 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// Register SSR routes for each collection\n\tfor (const collection of collections) {\n\t\tapp.get(`/${collection}/*`, async ({ request, headers }) => {\n\t\t\tconst method = request.method || 'GET';\n\t\t\tif (method !== 'GET') throw new NotFoundError();\n\t\t\tconst accept = request.headers.get?.('accept') || '';\n\t\t\tif (!/text\\/html/i.test(String(accept))) throw new NotFoundError();\n\t\t\ttry {\n\t\t\t\tconst url = new URL(request.url);\n\t\t\t\tconst pathname = url.pathname;\n\t\t\t\tconst acceptEncoding = headers['accept-encoding'] || '';\n\n\t\t\t\t// Serve cached HTML if fresh\n\t\t\t\tif (SSR_HTML_TTL_MS > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ck = makeKey(pathname, acceptEncoding);\n\t\t\t\t\t\tconst cached = htmlCache.get(ck);\n\t\t\t\t\t\tif (cached && cached.exp > Date.now()) {\n\t\t\t\t\t\t\treturn new Response(cached.body, {\n\t\t\t\t\t\t\t\tstatus: cached.status,\n\t\t\t\t\t\t\t\theaders: cached.headers,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\n\t\t\t\tconst bundleUrl = await getBundleUrl();\n\t\t\t\t// Compose Early Hints (103) and Link header for entry + static deps\n\t\t\t\ttry {\n\t\t\t\t\tconst deps = getStaticDepsForUrl(bundleUrl);\n\t\t\t\t\tconst all = [bundleUrl, ...deps];\n\t\t\t\t\tif (all.length) {\n\t\t\t\t\t\tconst linkValue = all\n\t\t\t\t\t\t\t.map((u) => `<${u}>; rel=modulepreload; as=script`)\n\t\t\t\t\t\t\t.join(', ');\n\t\t\t\t\t\t// Best-effort Early Hints (if supported by runtime)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst hints = new Headers({ Link: linkValue });\n\t\t\t\t\t\t\t// @ts-expect-error runtime specific hook\n\t\t\t\t\t\t\t(request as Any)?.sendEarlyHints?.(hints);\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t// Also attach Link on final response\n\t\t\t\t\t\theaders.link = headers.link\n\t\t\t\t\t\t\t? `${headers.link}, ${linkValue}`\n\t\t\t\t\t\t\t: linkValue;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t\tconst result = await renderSSRDocument({\n\t\t\t\t\tpathname,\n\t\t\t\t\trootComponent,\n\t\t\t\t\tclientDir,\n\t\t\t\t\tcwd,\n\t\t\t\t\tisWatchMode,\n\t\t\t\t\tbundleUrl,\n\t\t\t\t\thead,\n\t\t\t\t\tlang,\n\t\t\t\t\tappId,\n\t\t\t\t\tminify,\n\t\t\t\t});\n\n\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\tresult.html,\n\t\t\t\t\t'text/html; charset=utf-8',\n\t\t\t\t\tacceptEncoding,\n\t\t\t\t);\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': isWatchMode\n\t\t\t\t\t\t? 'no-cache'\n\t\t\t\t\t\t: `${directive}, max-age=${maxAge}`,\n\t\t\t\t\t...(headers.link ? { link: headers.link } : {}),\n\t\t\t\t\t...extraHeaders,\n\t\t\t\t};\n\n\t\t\t\tconst response = new Response(body as BodyInit, {\n\t\t\t\t\tstatus: result.status,\n\t\t\t\t\theaders: resHeaders,\n\t\t\t\t});\n\n\t\t\t\t// Cache successful renders\n\t\t\t\tif (SSR_HTML_TTL_MS > 0 && result.status === 200) {\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: result.status,\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\n\t\t\t\treturn response;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(`[reroute] SSR ${collection} render error:`, e);\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\t\t});\n\t}\n\n\t// Global error handler for SSR fallback\n\tapp.onError(async ({ code, request, set }) => {\n\t\tif (code === 'NOT_FOUND') {\n\t\t\tconst url = new URL(request.url);\n\t\t\tconst pathname = url.pathname;\n\t\t\tconst method = request.method || 'GET';\n\t\t\tconst isInternal =\n\t\t\t\tpathname.startsWith('/__reroute_watch') ||\n\t\t\t\tpathname.startsWith('/__content/') ||\n\t\t\t\tpathname.startsWith('/__reroute_preload') ||\n\t\t\t\tpathname.startsWith('/__reroute_data') ||\n\t\t\t\tpathname.startsWith('/__reroute_watch.js');\n\n\t\t\tif (!isInternal && typeof shouldIgnorePathname === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tif (shouldIgnorePathname(pathname)) {\n\t\t\t\t\t\treturn new Response('Not Found', { status: 404 });\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tif (pathname === '/__reroute_data' && method === 'GET') {\n\t\t\t\ttry {\n\t\t\t\t\tconst p = url.searchParams.get('path') || '/';\n\n\t\t\t\t\t// Check cache first (skip in watch mode for fresh data)\n\t\t\t\t\tlet data = isWatchMode ? undefined : dataCache?.get(p);\n\n\t\t\t\t\tif (data === undefined) {\n\t\t\t\t\t\tdata = await computeSSRDataForPath({\n\t\t\t\t\t\t\tpathname: p,\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});\n\t\t\t\t\t\t// Cache the result (even in watch mode for request deduplication)\n\t\t\t\t\t\tdataCache?.set(p, data);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jsonWithCache(\n\t\t\t\t\t\t{ data },\n\t\t\t\t\t\tdataCacheControl || 'no-cache',\n\t\t\t\t\t\trequest.headers,\n\t\t\t\t\t);\n\t\t\t\t} catch (_e) {\n\t\t\t\t\treturn jsonError('failed', 500);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (method === 'GET' && !isInternal) {\n\t\t\t\ttry {\n\t\t\t\t\tif (isWatchMode) {\n\t\t\t\t\t\tawait generateContentRegistry(cwd);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst acceptEncoding = request.headers.get('accept-encoding') || '';\n\t\t\t\t\t// Serve cached HTML if fresh\n\t\t\t\t\tif (SSR_HTML_TTL_MS > 0) {\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 cached = htmlCache.get(ck);\n\t\t\t\t\t\t\tif (cached && cached.exp > Date.now()) {\n\t\t\t\t\t\t\t\tset.status = cached.status;\n\t\t\t\t\t\t\t\tObject.assign(set.headers, cached.headers);\n\t\t\t\t\t\t\t\treturn new Response(cached.body);\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 bundleUrl = await getBundleUrl();\n\t\t\t\t\t// Compose Early Hints (103) and Link header for entry + static deps\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst deps = getStaticDepsForUrl(bundleUrl);\n\t\t\t\t\t\tconst all = [bundleUrl, ...deps];\n\t\t\t\t\t\tif (all.length) {\n\t\t\t\t\t\t\tconst linkValue = all\n\t\t\t\t\t\t\t\t.map((u) => `<${u}>; rel=modulepreload; as=script`)\n\t\t\t\t\t\t\t\t.join(', ');\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst hints = new Headers({ Link: linkValue });\n\t\t\t\t\t\t\t\t// @ts-expect-error runtime specific hook\n\t\t\t\t\t\t\t\t(request as Any)?.sendEarlyHints?.(hints);\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\tset.headers.link = set.headers.link\n\t\t\t\t\t\t\t\t? `${set.headers.link}, ${linkValue}`\n\t\t\t\t\t\t\t\t: linkValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\t\t\t\t\tconst result = await renderSSRDocument({\n\t\t\t\t\t\tpathname,\n\t\t\t\t\t\trootComponent,\n\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t\tbundleUrl,\n\t\t\t\t\t\thead,\n\t\t\t\t\t\tlang,\n\t\t\t\t\t\tappId,\n\t\t\t\t\t\tminify,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\t\tresult.html,\n\t\t\t\t\t\t'text/html; charset=utf-8',\n\t\t\t\t\t\tacceptEncoding,\n\t\t\t\t\t);\n\n\t\t\t\t\tset.status = result.status;\n\t\t\t\t\tset.headers['content-type'] = 'text/html; charset=utf-8';\n\t\t\t\t\tset.headers['cache-control'] = isWatchMode\n\t\t\t\t\t\t? 'no-cache'\n\t\t\t\t\t\t: `${directive}, max-age=${maxAge}`;\n\n\t\t\t\t\tif (extraHeaders['Content-Encoding']) {\n\t\t\t\t\t\tset.headers['content-encoding'] = extraHeaders['Content-Encoding'];\n\t\t\t\t\t}\n\t\t\t\t\tif (extraHeaders.Vary) {\n\t\t\t\t\t\tset.headers.vary = extraHeaders.Vary;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst response = new Response(body as BodyInit);\n\n\t\t\t\t\t// Cache successful renders\n\t\t\t\t\tif (SSR_HTML_TTL_MS > 0 && result.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\thtmlCache.set(ck, {\n\t\t\t\t\t\t\t\tstatus: result.status,\n\t\t\t\t\t\t\t\theaders: Object.fromEntries(\n\t\t\t\t\t\t\t\t\tObject.entries(set.headers).map(([k, v]) => [k, String(v)]),\n\t\t\t\t\t\t\t\t) as Record<string, string>,\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\treturn response;\n\t\t\t\t} catch {\n\t\t\t\t\t// fallthrough to default 404 if template fails\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn app;\n}\n\nexport { registerSSRRoutes };\n",
|
|
28
|
+
"import type { Elysia } from 'elysia';\nimport { NotFoundError } from 'elysia';\nimport {\n\ttype BundleInfo,\n\tgetMimeType,\n\tgzipIfAccepted,\n\tjoin,\n\ttype LRUCache,\n\ttranspileFile,\n} from 'reroute-js/core';\n\ntype StaticRouteOptions = {\n\tclientDir: string;\n\tprefix: string;\n\tmaxAge: number;\n\tdirective: string;\n\tindexHTML: boolean;\n\tstaticHeaders?: Record<string, string>;\n\tminify: boolean;\n\tsourcemap: boolean;\n\tshouldIgnore: (file: string) => boolean;\n\tbundleCache: Map<string, BundleInfo>;\n\tfileCache: LRUCache<string, Response>;\n\tisWatchMode?: boolean;\n};\n\nfunction registerStaticRoutes(\n\tapp: Elysia,\n\toptions: StaticRouteOptions,\n): Elysia {\n\tconst {\n\t\tclientDir,\n\t\tprefix,\n\t\tmaxAge,\n\t\tdirective,\n\t\tindexHTML,\n\t\tstaticHeaders,\n\t\tminify,\n\t\tsourcemap,\n\t\tshouldIgnore,\n\t\tbundleCache,\n\t\tfileCache,\n\t\tisWatchMode,\n\t} = options;\n\n\t// Static files route (scoped under prefix, e.g. '/assets/*')\n\tapp.get(`${prefix}/*`, async ({ params, headers }) => {\n\t\tconst requestPath = params['*'];\n\n\t\t// Handle hashed JS bundles (e.g., index.abc123.js)\n\t\tconst hashedJsMatch = requestPath.match(/^(.+)\\.([a-f0-9]{8})\\.js$/);\n\t\tif (hashedJsMatch) {\n\t\t\t// Check file cache first (includes gzipped response)\n\t\t\tconst acceptEncoding = headers['accept-encoding'] || '';\n\t\t\tconst cacheKey = `${requestPath}:${acceptEncoding}`;\n\t\t\tconst cached = fileCache.get(cacheKey);\n\t\t\tif (cached) {\n\t\t\t\treturn cached.clone();\n\t\t\t}\n\n\t\t\tconst [, filename, hash] = hashedJsMatch;\n\n\t\t\tconst tsxPath = join(clientDir, `${filename}.tsx`);\n\t\t\tconst tsPath = join(clientDir, `${filename}.ts`);\n\n\t\t\tlet filePath: string | null = null;\n\t\t\tif (await Bun.file(tsxPath).exists()) {\n\t\t\t\tfilePath = tsxPath;\n\t\t\t} else if (await Bun.file(tsPath).exists()) {\n\t\t\t\tfilePath = tsPath;\n\t\t\t}\n\n\t\t\tif (filePath) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bundleInfo = await transpileFile(\n\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\t`${filename}.tsx`,\n\t\t\t\t\t\t{ minify, sourcemap },\n\t\t\t\t\t\tbundleCache,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (bundleInfo.hash === hash) {\n\t\t\t\t\t\tconst contentType = 'application/javascript; charset=utf-8';\n\t\t\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\t\t\tbundleInfo.code,\n\t\t\t\t\t\t\tcontentType,\n\t\t\t\t\t\t\tacceptEncoding,\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// Pre-populate chunk responses for split outputs to avoid waterfalls\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tArray.isArray(bundleInfo.chunks) &&\n\t\t\t\t\t\t\t\tbundleInfo.chunks.length\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfor (const chunk of bundleInfo.chunks) {\n\t\t\t\t\t\t\t\t\tconst chunkPath = `${prefix}/${chunk.fileName}`.replace(\n\t\t\t\t\t\t\t\t\t\t/\\/+/g,\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\t// Identity (no compression)\n\t\t\t\t\t\t\t\t\tconst identityResp = new Response(chunk.code, {\n\t\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t\t\t\t\t\t'Cache-Control': `${directive}, max-age=${365 * 24 * 60 * 60}, immutable`,\n\t\t\t\t\t\t\t\t\t\t\t...staticHeaders,\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\tfileCache.set(chunkPath, identityResp);\n\t\t\t\t\t\t\t\t\t// Compressed variant for current client\n\t\t\t\t\t\t\t\t\tconst enc = headers['accept-encoding'] || '';\n\t\t\t\t\t\t\t\t\tconst comp = gzipIfAccepted(chunk.code, contentType, enc);\n\t\t\t\t\t\t\t\t\tconst compressedResp = new Response(comp.body as string, {\n\t\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t\t\t\t\t\t'Cache-Control': `${directive}, max-age=${365 * 24 * 60 * 60}, immutable`,\n\t\t\t\t\t\t\t\t\t\t\t...comp.extraHeaders,\n\t\t\t\t\t\t\t\t\t\t\t...staticHeaders,\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\tfileCache.set(`${chunkPath}:${enc}`, compressedResp);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\tconst response = new Response(body as string, {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t\t\t'Cache-Control': `${directive}, max-age=${365 * 24 * 60 * 60}, immutable`,\n\t\t\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t\t\t...staticHeaders,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Cache the response (including gzipped body)\n\t\t\t\t\t\tfileCache.set(cacheKey, response.clone());\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`[reroute] Error serving bundle:`, error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle sourcemaps (e.g., index.abc123.js.map)\n\t\tconst sourceMapMatch = requestPath.match(/^(.+)\\.([a-f0-9]{8})\\.js\\.map$/);\n\t\tif (sourceMapMatch) {\n\t\t\tconst [, filename, hash] = sourceMapMatch;\n\n\t\t\tconst tsxPath = join(clientDir, `${filename}.tsx`);\n\t\t\tconst tsPath = join(clientDir, `${filename}.ts`);\n\n\t\t\tlet filePath: string | null = null;\n\t\t\tif (await Bun.file(tsxPath).exists()) {\n\t\t\t\tfilePath = tsxPath;\n\t\t\t} else if (await Bun.file(tsPath).exists()) {\n\t\t\t\tfilePath = tsPath;\n\t\t\t}\n\n\t\t\tif (filePath) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bundleInfo = await transpileFile(\n\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\t`${filename}.tsx`,\n\t\t\t\t\t\t{ minify, sourcemap },\n\t\t\t\t\t\tbundleCache,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (bundleInfo.hash === hash && bundleInfo.sourceMap) {\n\t\t\t\t\t\tconst contentType = 'application/json; charset=utf-8';\n\t\t\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\t\t\tbundleInfo.sourceMap,\n\t\t\t\t\t\t\tcontentType,\n\t\t\t\t\t\t\theaders['accept-encoding'],\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn new Response(body as string, {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t\t\t\t'Cache-Control': `${directive}, max-age=${365 * 24 * 60 * 60}, immutable`,\n\t\t\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t\t\t...staticHeaders,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(`[reroute] Error serving sourcemap:`, error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Serve prebuilt split chunks by name (e.g., chunk-*.js) from cache\n\t\tif (requestPath.endsWith('.js')) {\n\t\t\tconst acceptEncoding = headers['accept-encoding'] || '';\n\t\t\tconst pathWithEnc = `${prefix}/${requestPath}`.replace(/\\/+/g, '/');\n\t\t\tconst cachedVariant =\n\t\t\t\tfileCache.get(`${pathWithEnc}:${acceptEncoding}`) ||\n\t\t\t\tfileCache.get(pathWithEnc);\n\t\t\tif (cachedVariant) {\n\t\t\t\treturn cachedVariant.clone();\n\t\t\t}\n\t\t}\n\n\t\t// Handle .tsx/.ts files\n\t\tif (requestPath.endsWith('.tsx') || requestPath.endsWith('.ts')) {\n\t\t\t// Special-case content modules: redirect to prebuilt chunk to avoid on-the-fly bundling in dev\n\t\t\ttry {\n\t\t\t\tconst m = requestPath.match(\n\t\t\t\t\t/^routes\\/([^/]+)\\/content\\/([^/]+)\\.(tsx|ts)$/,\n\t\t\t\t);\n\t\t\t\tif (m) {\n\t\t\t\t\tconst collection = m[1];\n\t\t\t\t\tconst name = m[2];\n\t\t\t\t\t// Use registry mapping if available for exact chunk selection\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst cwd = process.cwd();\n\t\t\t\t\t\tconst regPath = join(cwd, '.reroute', 'content.ts');\n\t\t\t\t\t\tconst reg = await import(\n\t\t\t\t\t\t\t(await import('node:url')).pathToFileURL(regPath).href +\n\t\t\t\t\t\t\t\t`?t=${Date.now()}`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst get = reg?.getContentEntry as (\n\t\t\t\t\t\t\tc: string,\n\t\t\t\t\t\t\tn: string,\n\t\t\t\t\t\t) => { module?: string } | undefined;\n\t\t\t\t\t\tconst entry =\n\t\t\t\t\t\t\ttypeof get === 'function' ? get(collection, name) : undefined;\n\t\t\t\t\t\tconst mod = entry?.module as string | undefined;\n\t\t\t\t\t\tif (mod?.endsWith('.js')) {\n\t\t\t\t\t\t\treturn new Response(null, {\n\t\t\t\t\t\t\t\tstatus: 302,\n\t\t\t\t\t\t\t\theaders: { Location: mod },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\n\t\t\t\t\t// Fallback: choose newest by mtime\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst chunkDir = join(\n\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t'.reroute',\n\t\t\t\t\t\t\t'chunks',\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst files = await (await import('node:fs/promises')).readdir(\n\t\t\t\t\t\t\tchunkDir,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst candidates = files.filter(\n\t\t\t\t\t\t\t(n) => n.startsWith(`${name}.`) && n.endsWith('.js'),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (candidates.length) {\n\t\t\t\t\t\t\tlet latest = candidates[0];\n\t\t\t\t\t\t\tlet latestM = 0;\n\t\t\t\t\t\t\tconst { stat } = await import('node:fs/promises');\n\t\t\t\t\t\t\tfor (const f of candidates) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst s = await stat(join(chunkDir, f));\n\t\t\t\t\t\t\t\t\tif (s.mtimeMs >= latestM) {\n\t\t\t\t\t\t\t\t\t\tlatestM = s.mtimeMs;\n\t\t\t\t\t\t\t\t\t\tlatest = f;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst loc = `/${join('.reroute', 'chunks', collection, latest).replace(/\\\\+/g, '/')}`;\n\t\t\t\t\t\t\treturn new Response(null, {\n\t\t\t\t\t\t\t\tstatus: 302,\n\t\t\t\t\t\t\t\theaders: { Location: loc },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t} catch {}\n\n\t\t\tconst filePath = join(clientDir, requestPath);\n\n\t\t\tif (shouldIgnore(filePath)) throw new NotFoundError();\n\n\t\t\ttry {\n\t\t\t\tconst exists = await Bun.file(filePath).exists();\n\t\t\t\tif (!exists) throw new NotFoundError();\n\n\t\t\t\tconst bundleInfo = await transpileFile(\n\t\t\t\t\tfilePath,\n\t\t\t\t\trequestPath,\n\t\t\t\t\t{ minify, sourcemap },\n\t\t\t\t\tbundleCache,\n\t\t\t\t);\n\n\t\t\t\tconst contentType = 'application/javascript; charset=utf-8';\n\t\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\t\tbundleInfo.code,\n\t\t\t\t\tcontentType,\n\t\t\t\t\theaders['accept-encoding'],\n\t\t\t\t);\n\t\t\t\treturn new Response(body as string, {\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': isWatchMode\n\t\t\t\t\t\t\t? 'no-cache'\n\t\t\t\t\t\t\t: `${directive}, max-age=${maxAge}`,\n\t\t\t\t\t\t...extraHeaders,\n\t\t\t\t\t\t...staticHeaders,\n\t\t\t\t\t},\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(`[reroute] Error:`, error);\n\t\t\t\tthrow new NotFoundError();\n\t\t\t}\n\t\t}\n\n\t\tconst filePath = join(clientDir, requestPath);\n\n\t\ttry {\n\t\t\tlet actualFilePath = filePath;\n\t\t\tlet exists = await Bun.file(actualFilePath).exists();\n\t\t\tif (!exists && indexHTML) {\n\t\t\t\tactualFilePath = join(filePath, 'index.html');\n\t\t\t\texists = await Bun.file(actualFilePath).exists();\n\t\t\t}\n\t\t\tif (!exists) throw new NotFoundError();\n\n\t\t\t// Check if the resolved file should be ignored (e.g., index.html)\n\t\t\tif (shouldIgnore(actualFilePath)) throw new NotFoundError();\n\n\t\t\t// Check cache after resolving and validating the file\n\t\t\tconst cached = fileCache.get(filePath);\n\t\t\tif (cached) return cached.clone();\n\n\t\t\tconst contentBuf = await Bun.file(actualFilePath).arrayBuffer();\n\t\t\tconst content = new Uint8Array(contentBuf);\n\t\t\tconst contentType = getMimeType(actualFilePath);\n\n\t\t\tconst { body, extraHeaders } = gzipIfAccepted(\n\t\t\t\tcontent,\n\t\t\t\tcontentType,\n\t\t\t\theaders['accept-encoding'],\n\t\t\t);\n\n\t\t\t// Determine cache duration based on content type\n\t\t\tconst isLongLivedAsset =\n\t\t\t\tcontentType.startsWith('image/') ||\n\t\t\t\tcontentType.startsWith('font/') ||\n\t\t\t\tcontentType.includes('woff') ||\n\t\t\t\tcontentType.includes('ttf') ||\n\t\t\t\tcontentType.includes('otf');\n\n\t\t\tconst cacheMaxAge =\n\t\t\t\tmaxAge === 0 ? 0 : isLongLivedAsset ? 365 * 24 * 60 * 60 : maxAge;\n\n\t\t\tconst response = new Response(body as string, {\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': contentType,\n\t\t\t\t\t'Cache-Control':\n\t\t\t\t\t\tcacheMaxAge > 0\n\t\t\t\t\t\t\t? `${directive}, max-age=${cacheMaxAge}${isLongLivedAsset ? ', immutable' : ''}`\n\t\t\t\t\t\t\t: 'no-cache',\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(filePath, response);\n\n\t\t\treturn response.clone();\n\t\t} catch (error) {\n\t\t\tif (error instanceof NotFoundError) throw error;\n\t\t\tconsole.error(`[reroute] Error serving ${filePath}:`, error);\n\t\t\tthrow new NotFoundError();\n\t\t}\n\t});\n\n\treturn app;\n}\n\nexport { registerStaticRoutes };\n",
|
|
29
29
|
"// All file watching happens in the CLI (reroute gen --watch)\n\nimport type { Elysia } from 'elysia';\nimport type { ReactElement } from 'react';\nimport {\n\ttype BundleInfo,\n\tcomputeSSRDataForPath,\n\tdiscoverCollections,\n\tgenerateContentRegistry,\n\tgetBundleUrlsFor,\n\tLRUCache,\n} from 'reroute-js/core';\nimport { jsonError, jsonWithCache } from './libs/http';\nimport { initImageCache } from './libs/image';\nimport { registerArtifactsRoutes } from './routes/artifacts';\nimport { registerContentRoutes } from './routes/content';\nimport { registerDevRoutes } from './routes/dev';\nimport { registerImageRoutes } from './routes/image';\nimport { registerSSRRoutes } from './routes/ssr';\nimport { registerStaticRoutes } from './routes/static';\nimport type { RerouteOptions } from './types';\n\nconst reroute =\n\t(options: RerouteOptions = {}) =>\n\tasync (app: Elysia) => {\n\t\t// SSR configuration\n\t\tconst ssrHead = options.head || '';\n\t\tconst ssrLang = options.lang || 'en';\n\t\tconst ssrAppId = options.appId || 'root';\n\t\tconst entrypoint = options.entrypoint || 'index.tsx';\n\t\tconst rootComponent = options.app;\n\n\t\t// Static serving configuration\n\t\tconst assets = options.assets || 'src/client';\n\t\tlet prefix = options.prefix || '/';\n\t\tconst ignorePatterns = options.ignorePatterns || [\n\t\t\t'.DS_Store',\n\t\t\t'.git',\n\t\t\t'.env',\n\t\t\t'index.html', // Template file, not a static asset\n\t\t\t/favicon\\.ico/,\n\t\t\t/\\.well-known/,\n\t\t];\n\t\tconst staticHeaders = options.staticHeaders;\n\t\tconst maxAge = options.maxAge ?? 3600;\n\t\tconst directive = options.directive || 'public';\n\t\tconst indexHTML = options.indexHTML ?? true;\n\n\t\t// Build configuration\n\t\tconst minify = options.minify ?? process.env.NODE_ENV === 'production';\n\t\tconst sourcemap = options.sourcemap ?? true;\n\n\t\t// Image optimization configuration\n\t\tconst imageMaxAge = options.imageMaxAge ?? 31536000; // 1 year\n\t\tconst imageAllowedDomains = options.imageAllowedDomains || [];\n\t\tconst imageMaxWidth = options.imageMaxWidth ?? 3840;\n\t\tconst imageMaxHeight = options.imageMaxHeight ?? 2160;\n\n\t\t// Normalize prefix\n\t\tif (prefix === '/') prefix = '';\n\n\t\tconst fileCache = new LRUCache<string, Response>(100);\n\t\tconst dataCache = new LRUCache<string, unknown>(100);\n\t\tconst bundleCache = new Map<string, BundleInfo>();\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// Live reload SSE clients\n\t\tconst liveReloadClients = new Set<ReadableStreamDefaultController>();\n\t\tconst notifyReload = () => {\n\t\t\tconst encoder = new TextEncoder();\n\t\t\tconst message = encoder.encode('data: reload\\n\\n');\n\t\t\tfor (const controller of liveReloadClients) {\n\t\t\t\ttry {\n\t\t\t\t\tcontroller.enqueue(message);\n\t\t\t\t} catch {\n\t\t\t\t\tliveReloadClients.delete(controller);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst clientDir: string = assets.startsWith('/')\n\t\t\t? assets\n\t\t\t: `${cwd.replace(/\\/$/, '')}/${assets.replace(/^\\.\\//, '')}`;\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) =>\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// Generate content registry at startup (write-only-if-changed)\n\t\tawait generateContentRegistry(cwd);\n\n\t\t// Lazy compute default bundle URL on first usage\n\t\tlet cachedBundleUrlPromise: Promise<string> | null = null;\n\t\tconst ensureBundleUrl = () => {\n\t\t\tif (!cachedBundleUrlPromise) {\n\t\t\t\tcachedBundleUrlPromise = getBundleUrlsFor(\n\t\t\t\t\tentrypoint,\n\t\t\t\t\tclientDir,\n\t\t\t\t\tprefix,\n\t\t\t\t\t{ minify, sourcemap },\n\t\t\t\t\tbundleCache,\n\t\t\t\t).then((u) => u[0]);\n\t\t\t}\n\t\t\treturn cachedBundleUrlPromise;\n\t\t};\n\n\t\t// Register content routes\n\t\tregisterContentRoutes(app, clientDir, prefix, isWatchMode);\n\n\t\t// Register dev mode routes (SSE, live reload, preload)\n\t\tregisterDevRoutes(app, liveReloadClients, isWatchMode, {\n\t\t\tclientDir,\n\t\t\tcwd,\n\t\t\tdataCacheControl,\n\t\t\tdataCache,\n\t\t});\n\n\t\t// Data prefetch endpoint for client Link prefetch (all modes)\n\t\tapp.get('/__reroute_data', async ({ query, headers }) => {\n\t\t\tconst p = String(query.path || query.p || '/');\n\t\t\tlet pathname = '/';\n\t\t\ttry {\n\t\t\t\tconst u = new URL(p, 'http://localhost');\n\t\t\t\tpathname = u.pathname + u.search;\n\t\t\t} catch {\n\t\t\t\tpathname = String(p);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t// Check cache first (skip in watch mode for fresh data)\n\t\t\t\tlet data = isWatchMode ? undefined : dataCache.get(pathname);\n\n\t\t\t\tif (data === undefined) {\n\t\t\t\t\tdata = await computeSSRDataForPath({\n\t\t\t\t\t\tpathname,\n\t\t\t\t\t\tclientDir,\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tisWatchMode,\n\t\t\t\t\t});\n\t\t\t\t\t// Cache the result (even in watch mode for request deduplication)\n\t\t\t\t\tdataCache.set(pathname, data);\n\t\t\t\t}\n\n\t\t\t\treturn jsonWithCache(\n\t\t\t\t\t{ data },\n\t\t\t\t\tdataCacheControl,\n\t\t\t\t\theaders as Record<string, string>,\n\t\t\t\t);\n\t\t\t} catch (_e) {\n\t\t\t\treturn jsonError('failed', 500);\n\t\t\t}\n\t\t});\n\n\t\t// File system watcher (dev): trigger build + client reload on changes under assets\n\t\t// No internal fs watcher here. The CLI rebuilds artifacts and can hit\n\t\t// /__reroute_reload to trigger client reloads.\n\t\tif (isWatchMode) {\n\t\t\tapp.post('/__reroute_reload', () => {\n\t\t\t\ttry {\n\t\t\t\t\t// Clear data cache on reload to ensure fresh data after file changes\n\t\t\t\t\tdataCache.clear();\n\t\t\t\t\tnotifyReload();\n\t\t\t\t\treturn new Response(JSON.stringify({ ok: true }), {\n\t\t\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\t\t});\n\t\t\t\t} catch {\n\t\t\t\t\treturn new Response(JSON.stringify({ ok: false }), {\n\t\t\t\t\t\tstatus: 500,\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);\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});\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\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: ensureBundleUrl,\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\tcollections,\n\t\t\t\t\tminify,\n\t\t\t\t\tmaxAge,\n\t\t\t\t\tdirective,\n\t\t\t\t\tdataCacheControl,\n\t\t\t\t\tdataCache,\n\t\t\t\t\tshouldIgnorePathname: (pathname: string) => {\n\t\t\t\t\t\t// Honor ignorePatterns for SSR fallback as well\n\t\t\t\t\t\tif (!ignorePatterns.length) return false;\n\t\t\t\t\t\treturn Boolean(\n\t\t\t\t\t\t\tignorePatterns.find((pattern) =>\n\t\t\t\t\t\t\t\ttypeof pattern === 'string'\n\t\t\t\t\t\t\t\t\t? pathname.includes(pattern)\n\t\t\t\t\t\t\t\t\t: pattern.test(pathname),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\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// Register static file serving (must be last as it's a catch-all)\n\t\tregisterStaticRoutes(app, {\n\t\t\tclientDir,\n\t\t\tprefix,\n\t\t\tmaxAge,\n\t\t\tdirective,\n\t\t\tindexHTML,\n\t\t\tstaticHeaders,\n\t\t\tminify,\n\t\t\tsourcemap,\n\t\t\tshouldIgnore: shouldIgnore as () => boolean,\n\t\t\tbundleCache,\n\t\t\tfileCache,\n\t\t\tisWatchMode,\n\t\t});\n\n\t\treturn app;\n\t};\n\nexport { reroute };\n"
|
|
30
30
|
],
|
|
31
|
-
"mappings": "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",
|
|
32
|
-
"debugId": "
|
|
31
|
+
"mappings": "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",
|
|
32
|
+
"debugId": "76563F260B520FB764756E2164756E21",
|
|
33
33
|
"names": []
|
|
34
34
|
}
|