reroute-js 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +144 -0
  2. package/cli/bin.d.ts +3 -0
  3. package/cli/bin.d.ts.map +1 -0
  4. package/cli/bin.js +812 -0
  5. package/cli/bin.js.map +15 -0
  6. package/cli/src/commands/build.d.ts +8 -0
  7. package/cli/src/commands/build.d.ts.map +1 -0
  8. package/cli/src/commands/dev.d.ts +8 -0
  9. package/cli/src/commands/dev.d.ts.map +1 -0
  10. package/cli/src/commands/gen.d.ts +3 -0
  11. package/cli/src/commands/gen.d.ts.map +1 -0
  12. package/cli/src/commands/init.d.ts +8 -0
  13. package/cli/src/commands/init.d.ts.map +1 -0
  14. package/cli/src/index.d.ts +8 -0
  15. package/cli/src/index.d.ts.map +1 -0
  16. package/cli/src/libs/tailwind.d.ts +18 -0
  17. package/cli/src/libs/tailwind.d.ts.map +1 -0
  18. package/core/index.d.ts +2 -0
  19. package/core/index.d.ts.map +1 -0
  20. package/core/index.js +1174 -0
  21. package/core/index.js.map +25 -0
  22. package/core/src/bundler/hash.d.ts +2 -0
  23. package/core/src/bundler/hash.d.ts.map +1 -0
  24. package/core/src/bundler/index.d.ts +3 -0
  25. package/core/src/bundler/index.d.ts.map +1 -0
  26. package/core/src/bundler/transpile.d.ts +4 -0
  27. package/core/src/bundler/transpile.d.ts.map +1 -0
  28. package/core/src/content/builder.d.ts +2 -0
  29. package/core/src/content/builder.d.ts.map +1 -0
  30. package/core/src/content/discovery.d.ts +5 -0
  31. package/core/src/content/discovery.d.ts.map +1 -0
  32. package/core/src/content/index.d.ts +5 -0
  33. package/core/src/content/index.d.ts.map +1 -0
  34. package/core/src/content/metadata.d.ts +9 -0
  35. package/core/src/content/metadata.d.ts.map +1 -0
  36. package/core/src/content/registry.d.ts +2 -0
  37. package/core/src/content/registry.d.ts.map +1 -0
  38. package/core/src/index.d.ts +7 -0
  39. package/core/src/index.d.ts.map +1 -0
  40. package/core/src/ssr/data.d.ts +9 -0
  41. package/core/src/ssr/data.d.ts.map +1 -0
  42. package/core/src/ssr/index.d.ts +4 -0
  43. package/core/src/ssr/index.d.ts.map +1 -0
  44. package/core/src/ssr/modules.d.ts +8 -0
  45. package/core/src/ssr/modules.d.ts.map +1 -0
  46. package/core/src/ssr/render.d.ts +20 -0
  47. package/core/src/ssr/render.d.ts.map +1 -0
  48. package/core/src/ssr/seed.d.ts +2 -0
  49. package/core/src/ssr/seed.d.ts.map +1 -0
  50. package/core/src/template/html.d.ts +4 -0
  51. package/core/src/template/html.d.ts.map +1 -0
  52. package/core/src/template/index.d.ts +2 -0
  53. package/core/src/template/index.d.ts.map +1 -0
  54. package/core/src/types.d.ts +50 -0
  55. package/core/src/types.d.ts.map +1 -0
  56. package/core/src/utils/cache.d.ts +12 -0
  57. package/core/src/utils/cache.d.ts.map +1 -0
  58. package/core/src/utils/compression.d.ts +5 -0
  59. package/core/src/utils/compression.d.ts.map +1 -0
  60. package/core/src/utils/index.d.ts +5 -0
  61. package/core/src/utils/index.d.ts.map +1 -0
  62. package/core/src/utils/mime.d.ts +3 -0
  63. package/core/src/utils/mime.d.ts.map +1 -0
  64. package/core/src/utils/path.d.ts +6 -0
  65. package/core/src/utils/path.d.ts.map +1 -0
  66. package/elysia/index.d.ts +2 -0
  67. package/elysia/index.d.ts.map +1 -0
  68. package/elysia/index.js +1829 -0
  69. package/elysia/index.js.map +32 -0
  70. package/elysia/src/index.d.ts +3 -0
  71. package/elysia/src/index.d.ts.map +1 -0
  72. package/elysia/src/plugin.d.ts +32 -0
  73. package/elysia/src/plugin.d.ts.map +1 -0
  74. package/elysia/src/routes/artifacts.d.ts +3 -0
  75. package/elysia/src/routes/artifacts.d.ts.map +1 -0
  76. package/elysia/src/routes/content.d.ts +3 -0
  77. package/elysia/src/routes/content.d.ts.map +1 -0
  78. package/elysia/src/routes/dev.d.ts +7 -0
  79. package/elysia/src/routes/dev.d.ts.map +1 -0
  80. package/elysia/src/routes/ssr.d.ts +18 -0
  81. package/elysia/src/routes/ssr.d.ts.map +1 -0
  82. package/elysia/src/routes/static.d.ts +19 -0
  83. package/elysia/src/routes/static.d.ts.map +1 -0
  84. package/elysia/src/types.d.ts +31 -0
  85. package/elysia/src/types.d.ts.map +1 -0
  86. package/elysia/src/utils/http.d.ts +5 -0
  87. package/elysia/src/utils/http.d.ts.map +1 -0
  88. package/package.json +74 -0
  89. package/react/index.d.ts +2 -0
  90. package/react/index.d.ts.map +1 -0
  91. package/react/index.js +1152 -0
  92. package/react/index.js.map +23 -0
  93. package/react/src/components/ContentRoute.d.ts +13 -0
  94. package/react/src/components/ContentRoute.d.ts.map +1 -0
  95. package/react/src/components/Link.d.ts +8 -0
  96. package/react/src/components/Link.d.ts.map +1 -0
  97. package/react/src/components/Outlet.d.ts +7 -0
  98. package/react/src/components/Outlet.d.ts.map +1 -0
  99. package/react/src/components/index.d.ts +4 -0
  100. package/react/src/components/index.d.ts.map +1 -0
  101. package/react/src/hooks/index.d.ts +7 -0
  102. package/react/src/hooks/index.d.ts.map +1 -0
  103. package/react/src/hooks/useContent.d.ts +26 -0
  104. package/react/src/hooks/useContent.d.ts.map +1 -0
  105. package/react/src/hooks/useData.d.ts +10 -0
  106. package/react/src/hooks/useData.d.ts.map +1 -0
  107. package/react/src/hooks/useNavigate.d.ts +6 -0
  108. package/react/src/hooks/useNavigate.d.ts.map +1 -0
  109. package/react/src/hooks/useParams.d.ts +6 -0
  110. package/react/src/hooks/useParams.d.ts.map +1 -0
  111. package/react/src/hooks/useRouter.d.ts +7 -0
  112. package/react/src/hooks/useRouter.d.ts.map +1 -0
  113. package/react/src/hooks/useSearchParams.d.ts +6 -0
  114. package/react/src/hooks/useSearchParams.d.ts.map +1 -0
  115. package/react/src/index.d.ts +6 -0
  116. package/react/src/index.d.ts.map +1 -0
  117. package/react/src/providers/ContentProvider.d.ts +35 -0
  118. package/react/src/providers/ContentProvider.d.ts.map +1 -0
  119. package/react/src/providers/RerouteProvider.d.ts +25 -0
  120. package/react/src/providers/RerouteProvider.d.ts.map +1 -0
  121. package/react/src/providers/RouterProvider.d.ts +23 -0
  122. package/react/src/providers/RouterProvider.d.ts.map +1 -0
  123. package/react/src/providers/index.d.ts +4 -0
  124. package/react/src/providers/index.d.ts.map +1 -0
  125. package/react/src/types/any.d.ts +3 -0
  126. package/react/src/types/any.d.ts.map +1 -0
  127. package/react/src/types/index.d.ts +3 -0
  128. package/react/src/types/index.d.ts.map +1 -0
  129. package/react/src/types/router.d.ts +32 -0
  130. package/react/src/types/router.d.ts.map +1 -0
  131. package/react/src/utils/content.d.ts +8 -0
  132. package/react/src/utils/content.d.ts.map +1 -0
  133. package/react/src/utils/head.d.ts +6 -0
  134. package/react/src/utils/head.d.ts.map +1 -0
  135. package/react/src/utils/index.d.ts +3 -0
  136. package/react/src/utils/index.d.ts.map +1 -0
@@ -0,0 +1,25 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/core/src/utils/path.ts", "../../packages/core/src/bundler/hash.ts", "../../packages/core/src/bundler/transpile.ts", "../../packages/core/src/content/builder.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/mime.ts", "../../packages/core/src/utils/compression.ts"],
4
+ "sourcesContent": [
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
+ "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
+ "import type { BuildOutput } from 'bun';\nimport type { BundleInfo, BundleOptions } from '../types';\nimport { basename, extname } from '../utils/path';\nimport { generateContentHash } from './hash';\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\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: false,\n\t\t\tsourcemap: sm,\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},\n\t\t});\n\t}\n\n\tlet result: BuildOutput;\n\ttry {\n\t\tresult = await doBuild(options.sourcemap ? 'external' : 'none');\n\t\tif (!result.success) {\n\t\t\tconsole.warn(\n\t\t\t\t`[reroute] Build failed for ${originalPath}, retrying without sourcemap...`,\n\t\t\t);\n\t\t\tresult = await doBuild('none');\n\t\t}\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\tconst output = result.outputs[0];\n\tconst code = await output.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\tconst bundleInfo: BundleInfo = {\n\t\thash: contentHash,\n\t\tcode,\n\t\tsourceMap,\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\turls.push(`${prefix}/${base}.${bundleInfo.hash}.js`);\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",
8
+ "import { mkdir, readdir } from 'node:fs/promises';\nimport { pathToFileURL } from 'node:url';\nimport type { Doc } from '../types';\nimport { join } from '../utils/path';\n\nasync function sha8(text: string): Promise<string> {\n\tconst data = new TextEncoder().encode(text);\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\nasync function buildChunkFor(\n\tabsSrc: string,\n\tcwd: string,\n\tcollection: string,\n\tname: string,\n): Promise<{ outPath: string; url: string; code: string } | null> {\n\ttry {\n\t\tconst result = await Bun.build({\n\t\t\tentrypoints: [absSrc],\n\t\t\ttarget: 'browser',\n\t\t\tformat: 'esm',\n\t\t\tsplitting: false,\n\t\t\tsourcemap: 'none',\n\t\t\tminify: false,\n\t\t\tdefine: { 'process.env.NODE_ENV': '\"production\"' },\n\t\t});\n\t\tif (!result.success) return null;\n\t\tconst code = await result.outputs[0]?.text();\n\t\tconst hash = await sha8(code);\n\t\tconst relDir = join('.reroute', 'chunks', collection);\n\t\tconst absDir = join(cwd, relDir);\n\t\tconst outFile = `${name}.${hash}.js`;\n\t\tconst outPath = join(absDir, outFile);\n\t\tawait mkdir(absDir, { recursive: true });\n\t\tconst exists = await Bun.file(outPath).exists();\n\t\tif (!exists) await Bun.write(outPath, code);\n\t\tconst url = `/${join(relDir, outFile).replace(/\\\\+/g, '/')}`;\n\t\treturn { outPath, url, code };\n\t} catch (e) {\n\t\tconsole.error('[reroute] Failed to build content chunk:', absSrc, e);\n\t\treturn null;\n\t}\n}\n\nasync function getMetaFor(absSrc: string, isWatchMode: boolean): Promise<Doc> {\n\ttry {\n\t\tconst url =\n\t\t\tpathToFileURL(absSrc).href + (isWatchMode ? `?t=${Date.now()}` : '');\n\t\tconst m = (await import(url)) as Doc;\n\t\treturn (m as Doc).meta || (m as Doc).frontmatter || {};\n\t} catch {\n\t\treturn {} as Doc;\n\t}\n}\n\nexport async function rebuildContentArtifacts(\n\tcwd: string,\n\tclientDir: string,\n\tisWatchMode = true,\n): Promise<void> {\n\tconst routesRoot = join(clientDir, 'routes');\n\tconst items: Array<{\n\t\tcollection: string;\n\t\tname: string;\n\t\tslug: string;\n\t\thref: string;\n\t\tmoduleUrl: string;\n\t\tmeta: Doc;\n\t}> = [];\n\n\ttry {\n\t\tconst entries = await readdir(routesRoot, { withFileTypes: true });\n\t\tfor (const dir of entries) {\n\t\t\tif (!dir.isDirectory()) continue;\n\t\t\tconst collection = dir.name;\n\t\t\tconst contentDir = join(routesRoot, collection, 'content');\n\t\t\tlet contentFiles: string[] = [];\n\t\t\ttry {\n\t\t\t\tconst list = await readdir(contentDir, { withFileTypes: true });\n\t\t\t\tcontentFiles = list\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(e) =>\n\t\t\t\t\t\t\te.isFile() &&\n\t\t\t\t\t\t\t/\\.(tsx|ts)$/.test(e.name) &&\n\t\t\t\t\t\t\t!e.name.startsWith('_'),\n\t\t\t\t\t)\n\t\t\t\t\t.map((e) => e.name);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const file of contentFiles) {\n\t\t\t\tconst name = file.replace(/\\.(tsx|ts)$/, '');\n\t\t\t\tconst absSrc = join(contentDir, file);\n\t\t\t\tconst chunk = await buildChunkFor(absSrc, cwd, collection, name);\n\t\t\t\tif (!chunk) continue;\n\t\t\t\tconst meta = await getMetaFor(absSrc, isWatchMode);\n\t\t\t\titems.push({\n\t\t\t\t\tcollection,\n\t\t\t\t\tname,\n\t\t\t\t\tslug: name,\n\t\t\t\t\thref: `/${collection}/${name}`,\n\t\t\t\t\tmoduleUrl: chunk.url,\n\t\t\t\t\tmeta,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error('[reroute] Failed to scan content routes:', e);\n\t\treturn;\n\t}\n\n\t// Write .reroute/content.ts\n\ttry {\n\t\tconst lines: string[] = [];\n\t\tlines.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\t\tlines.push('/* eslint-disable */');\n\t\tlines.push('// @ts-nocheck');\n\t\tlines.push('');\n\t\tlines.push('export const contents = [');\n\t\tfor (const e of items) {\n\t\t\tlines.push(\n\t\t\t\t\" { collection: '\" +\n\t\t\t\t\te.collection +\n\t\t\t\t\t\"', slug: '\" +\n\t\t\t\t\te.slug +\n\t\t\t\t\t\"', name: '\" +\n\t\t\t\t\te.name +\n\t\t\t\t\t\"', href: '\" +\n\t\t\t\t\te.href +\n\t\t\t\t\t\"', module: '\" +\n\t\t\t\t\te.moduleUrl +\n\t\t\t\t\t\"', meta: \" +\n\t\t\t\t\tJSON.stringify(e.meta || {}) +\n\t\t\t\t\t' },',\n\t\t\t);\n\t\t}\n\t\tlines.push('] as const;');\n\t\tlines.push('');\n\t\tlines.push('export const byCollection: Record<string, any[]> = {};');\n\t\tlines.push(\n\t\t\t'for (const c of contents) { (byCollection[c.collection] ||= []).push(c as any); }',\n\t\t);\n\t\tlines.push('');\n\t\tlines.push(\n\t\t\t'export const byCollectionAndName: Record<string, Record<string, any>> = {};',\n\t\t);\n\t\tlines.push(\n\t\t\t'for (const c of contents) { ((byCollectionAndName[c.collection] ||= {})[c.name] = c as any); }',\n\t\t);\n\t\tlines.push('');\n\t\tlines.push('export type Collections = keyof typeof byCollection;');\n\t\tlines.push(\n\t\t\t'export type Names<C extends Collections> = keyof (typeof byCollectionAndName)[C];',\n\t\t);\n\t\tlines.push('export type ContentEntry = (typeof contents)[number];');\n\t\tlines.push('');\n\t\tlines.push(\n\t\t\t'export function getContentEntry<C extends string, N extends string>(collection: C, name: N) {',\n\t\t);\n\t\tlines.push(' const m = (byCollectionAndName as any)[collection];');\n\t\tlines.push(' return m ? (m as Record<string, any>)[name] : undefined;');\n\t\tlines.push('}');\n\t\tlines.push('');\n\n\t\tawait mkdir(join(cwd, '.reroute'), { recursive: true });\n\t\tawait Bun.write(join(cwd, '.reroute', 'content.ts'), lines.join('\\n'));\n\t} catch (e) {\n\t\tconsole.error('[reroute] Failed to write .reroute/content.ts:', e);\n\t}\n\n\t// Write per-collection files\n\ttry {\n\t\tconst byCol = new Map<string, typeof items>();\n\t\tfor (const it of items) {\n\t\t\tconst arr = byCol.get(it.collection) || ([] as typeof items);\n\t\t\tarr.push(it);\n\t\t\tbyCol.set(it.collection, arr);\n\t\t}\n\t\tawait mkdir(join(cwd, '.reroute', 'collections'), { recursive: true });\n\t\tfor (const [collection, list] of byCol) {\n\t\t\tconst js: string[] = [];\n\t\t\tjs.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\t\t\tjs.push('');\n\t\t\tjs.push('export const items = [');\n\t\t\tfor (const e of list) {\n\t\t\t\tjs.push(\n\t\t\t\t\t` { collection: '${e.collection}', slug: '${e.slug}', name: '${e.name}', href: '${e.href}', module: '${e.moduleUrl}', meta: ${JSON.stringify(e.meta || {})} },`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tjs.push('];');\n\t\t\tjs.push('');\n\t\t\tjs.push('export const byName = {};');\n\t\t\tjs.push('for (const it of items) { byName[it.name] = it; }');\n\t\t\tjs.push('');\n\t\t\tjs.push('export function get(collectionName, name) {');\n\t\t\tjs.push(` if (collectionName !== '${collection}') return undefined;`);\n\t\t\tjs.push(' return byName[name];');\n\t\t\tjs.push('}');\n\t\t\tjs.push('');\n\t\t\tawait Bun.write(\n\t\t\t\tjoin(cwd, '.reroute', 'collections', `${collection}.js`),\n\t\t\t\tjs.join('\\n'),\n\t\t\t);\n\t\t}\n\t} catch (e) {\n\t\tconsole.error('[reroute] Failed to write .reroute/collections/*:', e);\n\t}\n\n\tconsole.log('[reroute] Content artifacts up-to-date');\n}\n",
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
+ "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, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;')\n\t\t.replace(/'/g, '&#39;');\n}\n",
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
+ "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
+ "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
+ "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",
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
+ "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
+ "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
+ "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
+ ],
22
+ "mappings": "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",
23
+ "debugId": "3C32F25BA85F27F764756E2164756E21",
24
+ "names": []
25
+ }
@@ -0,0 +1,2 @@
1
+ export declare function generateContentHash(content: string): Promise<string>;
2
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/bundler/hash.ts"],"names":[],"mappings":"AAAA,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1E"}
@@ -0,0 +1,3 @@
1
+ export * from './hash';
2
+ export * from './transpile';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/bundler/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BundleInfo, BundleOptions } from '../types';
2
+ export declare function transpileFile(filePath: string, originalPath: string, options: BundleOptions, bundleCache: Map<string, BundleInfo>): Promise<BundleInfo>;
3
+ export declare function getBundleUrlsFor(modules: string | string[], clientDir: string, prefix: string, options: BundleOptions, bundleCache: Map<string, BundleInfo>): Promise<string[]>;
4
+ //# sourceMappingURL=transpile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpile.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/bundler/transpile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI1D,wBAAsB,aAAa,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAClC,OAAO,CAAC,UAAU,CAAC,CAkFrB;AAID,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAClC,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB"}
@@ -0,0 +1,2 @@
1
+ export declare function rebuildContentArtifacts(cwd: string, clientDir: string, isWatchMode?: boolean): Promise<void>;
2
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/content/builder.ts"],"names":[],"mappings":"AA0DA,wBAAsB,uBAAuB,CAC5C,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,WAAW,UAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAsJf"}
@@ -0,0 +1,5 @@
1
+ import type { ContentItemDTO } from '../types';
2
+ export declare function listContentFiles(dir: string, baseRel: string): Promise<string[]>;
3
+ export declare function buildContentDTOs(collectionPath: string, clientDir: string, prefix: string, isWatchMode: boolean): Promise<ContentItemDTO[]>;
4
+ export declare function discoverCollections(clientDir: string): Promise<string[]>;
5
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/content/discovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAED,wBAAsB,gBAAgB,CACrC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC,CA6B3B;AAED,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB"}
@@ -0,0 +1,5 @@
1
+ export * from './builder';
2
+ export * from './discovery';
3
+ export * from './metadata';
4
+ export * from './registry';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/content/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ContentMeta } from '../types';
2
+ export declare function getContentMeta(absPath: string, isWatchMode: boolean): Promise<ContentMeta>;
3
+ /**
4
+ * Build a minimal <head> snippet from content metadata.
5
+ * - <title>
6
+ * - <meta name="description">
7
+ */
8
+ export declare function buildHeadFromMeta(meta: ContentMeta | undefined | null): string;
9
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/content/metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAO,MAAM,UAAU,CAAC;AAEjD,wBAAsB,cAAc,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,GAClB,OAAO,CAAC,WAAW,CAAC,CAetB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,GAClC,MAAM,CAgBR"}
@@ -0,0 +1,2 @@
1
+ export declare function generateContentRegistry(cwd: string): Promise<void>;
2
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/content/registry.ts"],"names":[],"mappings":"AAEA,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxE"}
@@ -0,0 +1,7 @@
1
+ export * from './bundler';
2
+ export * from './content';
3
+ export * from './ssr';
4
+ export * from './template';
5
+ export * from './types';
6
+ export * from './utils';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAE1B,cAAc,WAAW,CAAC;AAE1B,cAAc,OAAO,CAAC;AAEtB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,9 @@
1
+ type ComputeParams = {
2
+ pathname: string;
3
+ clientDir: string;
4
+ cwd: string;
5
+ isWatchMode: boolean;
6
+ };
7
+ export declare function computeSSRDataForPath(params: ComputeParams): Promise<unknown>;
8
+ export {};
9
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/data.ts"],"names":[],"mappings":"AAKA,KAAK,aAAa,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,OAAO,CAAC,CAyDlB"}
@@ -0,0 +1,4 @@
1
+ export * from './data';
2
+ export * from './render';
3
+ export * from './seed';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Doc } from '../types';
2
+ /**
3
+ * Import a content module for a given pathname like "/collection/name".
4
+ * Prefer the latest built chunk in .reroute to align with the client preload,
5
+ * then fall back to source TS/TSX if no chunk exists.
6
+ */
7
+ export declare function importContentModuleForPath(pathname: string, clientDir: string, cwd: string, isWatchMode: boolean): Promise<Doc | null>;
8
+ //# sourceMappingURL=modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/modules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC/C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,GAClB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAsFrB"}
@@ -0,0 +1,20 @@
1
+ import { type ReactElement } from 'react';
2
+ type SSRRenderOptions = {
3
+ pathname: string;
4
+ rootComponent: ReactElement;
5
+ clientDir: string;
6
+ cwd: string;
7
+ isWatchMode: boolean;
8
+ bundleUrl: string;
9
+ head?: string;
10
+ lang?: string;
11
+ appId?: string;
12
+ minify?: boolean;
13
+ };
14
+ type SSRRenderResult = {
15
+ html: string;
16
+ status: number;
17
+ };
18
+ declare function renderSSRDocument(options: SSRRenderOptions): Promise<SSRRenderResult>;
19
+ export { renderSSRDocument, type SSRRenderOptions, type SSRRenderResult };
20
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/render.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAQxD,KAAK,gBAAgB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,YAAY,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,eAAe,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,iBAAe,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,CA2d1B;AAED,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function seedSSRModuleForPath(pathname: string, clientDir: string, cwd: string, isWatchMode: boolean): Promise<void>;
2
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/seed.ts"],"names":[],"mappings":"AAGA,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAkCf"}
@@ -0,0 +1,4 @@
1
+ import type { TemplateContext } from '../types';
2
+ export declare function loadIndexHtml(clientDir: string): Promise<string>;
3
+ export declare function applyIndexTemplate(templateHtml: string, appHtml: string, { head, hydrationScript, lang, appId, }: TemplateContext): string;
4
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/template/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAatE;AAED,wBAAgB,kBAAkB,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,EACC,IAAS,EACT,eAAoB,EACpB,IAAW,EACX,KAAc,GACd,EAAE,eAAe,GAChB,MAAM,CAyER"}
@@ -0,0 +1,2 @@
1
+ export * from './html';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/template/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,50 @@
1
+ type Doc = any;
2
+ type TemplateContext = {
3
+ head?: string;
4
+ hydrationScript?: string;
5
+ lang?: string;
6
+ appId?: string;
7
+ };
8
+ type BundleInfo = {
9
+ hash: string;
10
+ code: string;
11
+ sourceMap?: string;
12
+ };
13
+ type ContentMeta = {
14
+ title?: string;
15
+ description?: string;
16
+ excerpt?: string;
17
+ date?: string;
18
+ [key: string]: unknown;
19
+ };
20
+ type ContentItemDTO = {
21
+ slug: string;
22
+ name: string;
23
+ path: string;
24
+ module: string;
25
+ meta: ContentMeta;
26
+ href: string;
27
+ };
28
+ type CoreConfig = {
29
+ cwd: string;
30
+ clientDir: string;
31
+ head?: string;
32
+ lang?: string;
33
+ appId?: string;
34
+ entrypoint?: string;
35
+ prefix?: string;
36
+ ignorePatterns?: (string | RegExp)[];
37
+ minify?: boolean;
38
+ sourcemap?: boolean;
39
+ isWatchMode: boolean;
40
+ };
41
+ type BundleOptions = {
42
+ minify: boolean;
43
+ sourcemap: boolean;
44
+ };
45
+ type CompressionResult = {
46
+ body: string | Uint8Array;
47
+ extraHeaders: Record<string, string>;
48
+ };
49
+ export type { BundleInfo, BundleOptions, CompressionResult, ContentItemDTO, ContentMeta, CoreConfig, Doc, TemplateContext, };
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/types.ts"],"names":[],"mappings":"AACA,KAAK,GAAG,GAAG,GAAG,CAAC;AAEf,KAAK,eAAe,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,UAAU,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,WAAW,GAAG;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,cAAc,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,UAAU,GAAG;IAEjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAGlB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAGrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,KAAK,aAAa,GAAG;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACxB,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAAC;AAEF,YAAY,EACX,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,UAAU,EACV,GAAG,EACH,eAAe,GACf,CAAC"}
@@ -0,0 +1,12 @@
1
+ declare class LRUCache<K, V> {
2
+ private cache;
3
+ private maxSize;
4
+ constructor(maxSize?: number);
5
+ get(key: K): V | undefined;
6
+ set(key: K, value: V): void;
7
+ has(key: K): boolean;
8
+ clear(): void;
9
+ get size(): number;
10
+ }
11
+ export { LRUCache };
12
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/utils/cache.ts"],"names":[],"mappings":"AAAA,cAAM,QAAQ,CAAC,CAAC,EAAE,CAAC;IAClB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAY;IAKjC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAc1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAe3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CompressionResult } from '../types';
2
+ export declare function acceptsGzip(acceptEncoding?: string): boolean;
3
+ export declare function toBytes(input: string | Uint8Array): Uint8Array<ArrayBuffer> | string;
4
+ export declare function gzipIfAccepted(body: string | Uint8Array, contentType: string, acceptEncoding?: string): CompressionResult;
5
+ //# sourceMappingURL=compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/utils/compression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,wBAAgB,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,OAAO,CACtB,KAAK,EAAE,MAAM,GAAG,UAAU,GACxB,UAAU,CAAC,WAAW,CAAC,GAAG,MAAM,CAIlC;AAED,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACrB,iBAAiB,CAanB"}
@@ -0,0 +1,5 @@
1
+ export * from './cache';
2
+ export * from './compression';
3
+ export * from './mime';
4
+ export * from './path';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function getMimeType(filePath: string): string;
2
+ export declare function isCompressible(contentType: string): boolean;
3
+ //# sourceMappingURL=mime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/utils/mime.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmBpD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAU3D"}
@@ -0,0 +1,6 @@
1
+ export declare function join(...parts: string[]): string;
2
+ export declare function extname(p: string): string;
3
+ export declare function basename(p: string, ext?: string): string;
4
+ export declare function stripStart(p: string, ch: string): string;
5
+ export declare function stripEnd(p: string, ch: string): string;
6
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/utils/path.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE/C;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,2 @@
1
+ export * from './src';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/elysia/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC"}