reroute-js 0.0.9 → 0.0.11
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.js +2 -2
- package/cli/bin.js.map +3 -3
- package/core/index.js +33 -184
- package/core/index.js.map +4 -5
- package/core/src/bundler/transpile.d.ts.map +1 -1
- package/core/src/content/index.d.ts +0 -1
- package/core/src/content/index.d.ts.map +1 -1
- package/elysia/index.js +8 -3
- package/elysia/index.js.map +3 -3
- package/package.json +11 -6
- package/react/index.js +2 -2
- package/react/index.js.map +3 -3
- package/react/src/hooks/useData.d.ts.map +1 -1
- package/core/src/content/builder.d.ts +0 -2
- package/core/src/content/builder.d.ts.map +0 -1
package/cli/bin.js
CHANGED
|
@@ -566,7 +566,7 @@ async function buildContentChunks(cwd) {
|
|
|
566
566
|
splitting: false,
|
|
567
567
|
sourcemap: "none",
|
|
568
568
|
minify: false,
|
|
569
|
-
define: { "process.env.
|
|
569
|
+
define: { "process.env.NODE_ENV": '"production"' }
|
|
570
570
|
});
|
|
571
571
|
if (!result.success)
|
|
572
572
|
throw new Error("build failed");
|
|
@@ -844,4 +844,4 @@ function printHelp2() {
|
|
|
844
844
|
}
|
|
845
845
|
main();
|
|
846
846
|
|
|
847
|
-
//# debugId=
|
|
847
|
+
//# debugId=35E92044471CB3FF64756E2164756E21
|
package/cli/bin.js.map
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
"#!/usr/bin/env bun\n\n/**\n * Reroute build command\n *\n * Build your Reroute application for production\n */\n\nexport default async function build(_args: string[]) {\n\tconsole.log('reroute build - Coming Soon');\n\tconsole.log('');\n\tconsole.log(\n\t\t'This command will build your Reroute application for production.',\n\t);\n\tconsole.log('');\n\tconsole.log('Planned usage:');\n\tconsole.log(' reroute build');\n\tconsole.log(' reroute build --minify');\n\tconsole.log(' reroute build --analyze');\n\tconsole.log('');\n\tconsole.log(\n\t\t'For now, please use your own build setup or check the examples.',\n\t);\n}\n",
|
|
7
7
|
"#!/usr/bin/env bun\n\n/**\n * Reroute dev command\n *\n * Start a development server with live reload\n */\n\nexport default async function dev(_args: string[]) {\n\tconsole.log('reroute dev - Coming Soon');\n\tconsole.log('');\n\tconsole.log('This command will start a development server with live reload.');\n\tconsole.log('');\n\tconsole.log('Planned usage:');\n\tconsole.log(' reroute dev');\n\tconsole.log(' reroute dev --port 3000');\n\tconsole.log(' reroute dev --host 0.0.0.0');\n\tconsole.log('');\n\tconsole.log('Note: dev already generates content registry and static assets');\n\tconsole.log('');\n\tconsole.log(\n\t\t'For now, please use your own dev server setup or check the examples.',\n\t);\n}\n",
|
|
8
8
|
"/**\n * Tailwind CSS v4 integration utility\n *\n * Manages Tailwind CLI integration for the Reroute framework\n */\n\nimport type { ChildProcess } from 'node:child_process';\nimport { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport interface TailwindProcess {\n\tprocess: ChildProcess;\n\tstop: () => void;\n}\n\n/**\n * Check if Tailwind CSS v4 is available in the project\n */\nexport function isTailwindAvailable(cwd: string): boolean {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\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 */\nexport function 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 */\nexport function 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('@import \"tailwindcss\"');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function 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\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 */\nexport async 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\n/**\n * Start Tailwind CSS in watch mode\n */\nexport function watchTailwind(cwd: string): TailwindProcess {\n\tconst { input, output } = getTailwindPaths(cwd);\n\n\tconst tailwindBin = resolveTailwindBin(cwd);\n\tconst args = ['-i', input, '-o', output, '--watch'];\n\n\tconsole.log('[reroute/tailwind] Starting Tailwind CSS v4 in watch mode...');\n\n\tconst tailwind = spawn(tailwindBin, args, {\n\t\tcwd,\n\t\tstdio: 'inherit',\n\t});\n\n\ttailwind.on('error', (error) => {\n\t\tconsole.error('[reroute/tailwind] Error:', error);\n\t});\n\n\tconst stop = () => {\n\t\tconsole.log('[reroute/tailwind] Stopping Tailwind CSS...');\n\t\ttailwind.kill();\n\t};\n\n\treturn {\n\t\tprocess: tailwind,\n\t\tstop,\n\t};\n}\n\n/**\n * Initialize Tailwind CSS integration\n * Returns null if Tailwind is not available or configured\n */\nexport function initTailwind(cwd: string): TailwindProcess | null {\n\t// Check if Tailwind is installed\n\tif (!isTailwindAvailable(cwd)) {\n\t\treturn null;\n\t}\n\n\t// Check if input file exists and uses v4 format\n\tif (!hasTailwindInput(cwd)) {\n\t\tconsole.log(\n\t\t\t'[reroute/tailwind] theme.css not found or missing @import \"tailwindcss\", skipping...',\n\t\t);\n\t\treturn null;\n\t}\n\n\tconsole.log('[reroute/tailwind] Detected Tailwind CSS v4');\n\n\t// For non-watch mode, build once and return null\n\tbuildTailwind(cwd)\n\t\t.then(() => {\n\t\t\tconsole.log('[reroute/tailwind] Built successfully');\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('[reroute/tailwind] Build failed:', error);\n\t\t});\n\n\treturn null;\n}\n",
|
|
9
|
-
"#!/usr/bin/env bun\nimport { watch } from 'node:fs';\nimport { mkdir, readdir, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { buildTailwind, initTailwind } from '../libs/tailwind';\n\n// biome-ignore lint/suspicious/noExplicitAny: flexible content meta type\ntype Doc = any;\n\ninterface RouteFile {\n\tpath: string;\n\tpattern: string;\n\tfilePath: string;\n\tisLayout: boolean;\n\tisDynamic: boolean;\n\tparams: string[];\n\t/** special case for [404].tsx */\n\tisNotFound?: boolean;\n\t/** when isNotFound, this is the base pattern to match as a prefix */\n\tnotFoundBasePattern?: string;\n}\n\ninterface RouteTree {\n\troutes: RouteFile[];\n\tlayouts: RouteFile[];\n\tnotFoundRoutes: RouteFile[];\n}\n\nconst ROUTES_DIR = 'src/client/routes';\nconst OUTPUT_DIR = '.reroute';\nconst OUTPUT_ROUTES = '.reroute/routes.ts';\nconst OUTPUT_CONTENT_TS = '.reroute/content.ts';\nconst OUTPUT_COLLECTIONS_DIR = '.reroute/collections';\nconst OUTPUT_INDEX = '.reroute/index.ts';\n\nasync function cleanupOutputDir(cwd: string) {\n\ttry {\n\t\t// Remove generated files\n\t\tawait rm(join(cwd, OUTPUT_DIR), { force: true });\n\t\t// Ensure .reroute exists for subsequent writes\n\t\tawait mkdir(join(cwd, OUTPUT_DIR), { recursive: true });\n\t\tconsole.log('[reroute/gen] Cleaned up generated artifacts in .reroute');\n\t} catch {\n\t\t// Ignore cleanup errors\n\t}\n}\n\nasync function scanDirectory(dir: string, base = ''): Promise<string[]> {\n\tconst files: string[] = [];\n\tconst entries = await readdir(dir, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst fullPath = join(dir, entry.name);\n\t\tconst relativePath = join(base, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Skip content directories; those are not routes\n\t\t\tif (entry.name === 'content') continue;\n\t\t\tconst nested = await scanDirectory(fullPath, relativePath);\n\t\t\tfiles.push(...nested);\n\t\t} else if (\n\t\t\tentry.isFile() &&\n\t\t\t(entry.name.endsWith('.tsx') || entry.name.endsWith('.ts'))\n\t\t) {\n\t\t\t// Skip non-route files and any files under a content/ segment\n\t\t\tif (\n\t\t\t\trelativePath.includes('/content/') ||\n\t\t\t\trelativePath.startsWith('content/')\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!entry.name.startsWith('_') || entry.name === '[layout].tsx') {\n\t\t\t\tfiles.push(relativePath);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn files;\n}\n\n// Recursively scan for [404].tsx or [404].ts anywhere under routes, including content dirs\nasync function scan404Files(dir: string, base = ''): Promise<string[]> {\n\tconst files: string[] = [];\n\tconst entries = await readdir(dir, { withFileTypes: true });\n\tfor (const entry of entries) {\n\t\tconst fullPath = join(dir, entry.name);\n\t\tconst relativePath = join(base, entry.name);\n\t\tif (entry.isDirectory()) {\n\t\t\tconst nested = await scan404Files(fullPath, relativePath);\n\t\t\tfiles.push(...nested);\n\t\t} else if (entry.isFile()) {\n\t\t\tif (/^\\[404]\\.(tsx|ts)$/.test(entry.name)) files.push(relativePath);\n\t\t}\n\t}\n\treturn files;\n}\n\nfunction fileToRoute(filePath: string): RouteFile {\n\tconst isLayout =\n\t\tfilePath.endsWith('[layout].tsx') || filePath.endsWith('[layout].ts');\n\n\t// Remove extension\n\tlet routePath = filePath.replace(/\\.(tsx|ts)$/, '');\n\n\t// Handle layouts\n\tif (isLayout) {\n\t\troutePath = routePath.replace(/[layout]$/, '').replace(/\\/$/, '');\n\t}\n\n\t// Convert index to /\n\troutePath = routePath.replace(/\\/index$/, '').replace(/^index$/, '');\n\n\t// Extract params from [param] syntax\n\tconst params: string[] = [];\n\tconst pattern = routePath.replace(/\\[([^\\]]+)\\]/g, (_, param) => {\n\t\tparams.push(param);\n\t\treturn `:${param}`;\n\t});\n\n\t// Ensure leading slash\n\tconst normalizedPattern = pattern === '' ? '/' : `/${pattern}`;\n\n\t// Special case: [404].tsx files act as NotFound entries for their directory\n\tconst isNotFound = /(^|\\/)\\[404\\]$/.test(routePath);\n\tlet notFoundBasePattern: string | undefined;\n\tif (isNotFound) {\n\t\tconst base = routePath.replace(/(^|\\/)\\[404\\]$/, '').replace(/\\/$/, '');\n\t\tnotFoundBasePattern = base ? `/${base}` : '/';\n\t}\n\n\treturn {\n\t\tpath: routePath,\n\t\tpattern: normalizedPattern,\n\t\tfilePath,\n\t\tisLayout,\n\t\tisDynamic: params.length > 0,\n\t\tparams,\n\t\tisNotFound,\n\t\tnotFoundBasePattern,\n\t};\n}\n\nfunction sortRoutes(routes: RouteFile[]): RouteFile[] {\n\t// Sort by specificity: static routes first, then dynamic, then catch-all\n\treturn routes.sort((a, b) => {\n\t\tconst aDepth = a.pattern.split('/').length;\n\t\tconst bDepth = b.pattern.split('/').length;\n\n\t\t// Deeper routes first\n\t\tif (aDepth !== bDepth) return bDepth - aDepth;\n\n\t\t// Static before dynamic\n\t\tif (!a.isDynamic && b.isDynamic) return -1;\n\t\tif (a.isDynamic && !b.isDynamic) return 1;\n\n\t\t// Alphabetical\n\t\treturn a.pattern.localeCompare(b.pattern);\n\t});\n}\n\nfunction generateRouteTree(files: string[]): RouteTree {\n\tconst routes: RouteFile[] = [];\n\tconst layouts: RouteFile[] = [];\n\tconst notFoundRoutes: RouteFile[] = [];\n\n\tfor (const file of files) {\n\t\tconst route = fileToRoute(file);\n\t\tif (route.isLayout) {\n\t\t\tlayouts.push(route);\n\t\t} else if (route.isNotFound) {\n\t\t\t// Do not include [404] as a normal route; store separately\n\t\t\tnotFoundRoutes.push(route);\n\t\t} else {\n\t\t\troutes.push(route);\n\t\t}\n\t}\n\n\treturn {\n\t\troutes: sortRoutes(routes),\n\t\tlayouts,\n\t\tnotFoundRoutes: notFoundRoutes,\n\t};\n}\n\nfunction generateTypeScript(tree: RouteTree): string {\n\t// Import only default exports so optional named exports like\n\t// `ssr` and `meta` can be tree-shaken from the client bundle.\n\tconst imports = [\n\t\t...tree.routes.map(\n\t\t\t(r, i) =>\n\t\t\t\t`import Route${i} from '../src/client/routes/${r.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t\t...tree.layouts.map(\n\t\t\t(l, i) =>\n\t\t\t\t`import Layout${i} from '../src/client/routes/${l.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t\t...tree.notFoundRoutes.map(\n\t\t\t(nf, i) =>\n\t\t\t\t`import NotFound${i} from '../src/client/routes/${nf.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t].join('\\n');\n\n\tconst routesArray = tree.routes\n\t\t.map((r, i) => {\n\t\t\treturn ` {\n pattern: \"${r.pattern}\",\n path: \"${r.path}\",\n component: Route${i},\n params: ${JSON.stringify(r.params)},\n isDynamic: ${r.isDynamic},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\tconst routePatterns = tree.routes.map((r) => ` | \"${r.pattern}\"`).join('\\n');\n\n\tconst routeParamsUnion = tree.routes\n\t\t.filter((r) => r.isDynamic)\n\t\t.map((r) => {\n\t\t\tconst params = r.params.map((p) => `${p}: string`).join('; ');\n\t\t\treturn ` T extends \"${r.pattern}\" ? { ${params} } :`;\n\t\t})\n\t\t.join('\\n');\n\n\tconst layoutsArray = tree.layouts\n\t\t.map((l, i) => {\n\t\t\treturn ` {\n pattern: \"${l.pattern}\",\n path: \"${l.path}\",\n component: Layout${i},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\tconst notFoundRoutesArray = tree.notFoundRoutes\n\t\t.map((nf, i) => {\n\t\t\treturn ` {\n pattern: \"${nf.notFoundBasePattern || '/'}\",\n path: \"${nf.path}\",\n component: NotFound${i},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\treturn `// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨\n/* eslint-disable */\n// @ts-nocheck\n\n${imports}\n\nexport const routes: RouteInfo = [\n${routesArray}\n] as const;\n\nexport const layouts = [\n${layoutsArray || ''}\n] as const;\n\nexport const notFoundRoutes = [\n${notFoundRoutesArray || ''}\n] as const;\n\nexport type RoutePath =\n${routePatterns || ' | \"/\"'};\n\nexport type RouteParams<T extends RoutePath> = ${\n\t\trouteParamsUnion\n\t\t\t? `\\n${routeParamsUnion}\\n Record<string, never>;`\n\t\t\t: 'Record<string, never>;'\n\t}\n\nexport interface Route {\n pattern: string;\n path: string;\n component: any;\n params: string[];\n isDynamic: boolean;\n}\n\nexport function matchRoute(pathname: string): { route: Route; params: Record<string, string> } | null {\n for (const route of routes) {\n const match = matchPattern(route.pattern, pathname);\n if (match) {\n return { route, params: match };\n }\n }\n return null;\n}\n\nfunction matchPattern(pattern: string, pathname: string): Record<string, string> | null {\n const patternParts = pattern.split('/').filter(Boolean);\n const pathnameParts = pathname.split('/').filter(Boolean);\n\n if (patternParts.length !== pathnameParts.length) {\n return null;\n }\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathnamePart = pathnameParts[i];\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = pathnamePart;\n } else if (patternPart !== pathnamePart) {\n return null;\n }\n }\n\n return params;\n}\n`;\n}\n\nasync function listContentFiles(collectionDir: string): Promise<string[]> {\n\ttry {\n\t\tconst entries = await readdir(collectionDir, { withFileTypes: true });\n\t\treturn entries\n\t\t\t.filter(\n\t\t\t\t(e) =>\n\t\t\t\t\te.isFile() && /\\.(tsx|ts)$/.test(e.name) && !e.name.startsWith('_'),\n\t\t\t)\n\t\t\t.map((e) => e.name);\n\t} catch {\n\t\treturn [];\n\t}\n}\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 buildContentChunks(cwd: string) {\n\tconst routesRoot = join(cwd, ROUTES_DIR);\n\tconsole.log(`[reroute/content] scan ${routesRoot}`);\n\t// Find any '<collection>/content/*.(ts|tsx)'\n\tconst collections = await readdir(routesRoot, { withFileTypes: true });\n\tconst results: 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\tfor (const c of collections) {\n\t\tif (!c.isDirectory()) continue;\n\t\tconst collection = c.name;\n\t\tconst contentDir = join(routesRoot, collection, 'content');\n\t\tconsole.log(`[reroute/content] collection ${collection} dir ${contentDir}`);\n\t\tconst files = await listContentFiles(contentDir);\n\t\tconsole.log(`[reroute/content] files ${files.join(',')}`);\n\t\tif (!files.length) continue;\n\n\t\tfor (const file of files) {\n\t\t\tconst name = file.replace(/\\.(tsx|ts)$/, '');\n\t\t\tconst absSrc = join(contentDir, file);\n\t\t\t// Build to JS once (no minify) for dev reliability\n\t\t\tlet code = '';\n\t\t\ttry {\n\t\t\t\tconsole.log(`[reroute/content] build ${absSrc}`);\n\t\t\t\tconst result = await Bun.build({\n\t\t\t\t\tentrypoints: [absSrc],\n\t\t\t\t\ttarget: 'browser',\n\t\t\t\t\tformat: 'esm',\n\t\t\t\t\tsplitting: false,\n\t\t\t\t\tsourcemap: 'none',\n\t\t\t\t\tminify: false,\n\t\t\t\t\tdefine: { 'process.env.BUN_ENV': '\"production\"' },\n\t\t\t\t});\n\t\t\t\tif (!result.success) throw new Error('build failed');\n\t\t\t\tcode = await result.outputs[0].text();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'[reroute/gen] Failed to build content chunk:',\n\t\t\t\t\tabsSrc,\n\t\t\t\t\te,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst hash = await sha8(code);\n\t\t\tconst chunkRelDir = join('.reroute', 'chunks', collection);\n\t\t\tconst chunkAbsDir = join(cwd, chunkRelDir);\n\t\t\tconst outFile = `${name}.${hash}.js`;\n\t\t\tconst absOut = join(chunkAbsDir, outFile);\n\t\t\tawait mkdir(chunkAbsDir, { recursive: true });\n\t\t\ttry {\n\t\t\t\tconst exists = await Bun.file(absOut).exists();\n\t\t\t\tif (!exists) await writeFile(absOut, code, 'utf-8');\n\t\t\t} catch {}\n\n\t\t\t// Meta via source import (not bundled)\n\t\t\tlet meta: Doc = {};\n\t\t\ttry {\n\t\t\t\tconsole.log(`[reroute/content] meta ${absSrc}`);\n\t\t\t\tconst url = `${pathToFileURL(absSrc).href}?t=${Date.now()}`;\n\t\t\t\tconst m = await import(url);\n\t\t\t\tmeta = (m as Doc).meta || {};\n\t\t\t} catch {}\n\n\t\t\tresults.push({\n\t\t\t\tcollection,\n\t\t\t\tname,\n\t\t\t\tslug: name,\n\t\t\t\thref: `/${collection}/${name}`,\n\t\t\t\tmoduleUrl: (\n\t\t\t\t\t'/' +\n\t\t\t\t\tchunkRelDir.replace(/\\\\/g, '/') +\n\t\t\t\t\t'/' +\n\t\t\t\t\toutFile\n\t\t\t\t).replace(/\\\\+/g, '/'),\n\t\t\t\tmeta,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Write .reroute/content.ts (types for tooling only)\n\tconst lines: string[] = [];\n\tlines.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\tlines.push('/* eslint-disable */');\n\tlines.push('// @ts-nocheck');\n\tlines.push('');\n\tlines.push('export const contents = [');\n\tfor (const e of results) {\n\t\tlines.push(\n\t\t\t\" { collection: '\" +\n\t\t\t\te.collection +\n\t\t\t\t\"', slug: '\" +\n\t\t\t\te.slug +\n\t\t\t\t\"', name: '\" +\n\t\t\t\te.name +\n\t\t\t\t\"', href: '\" +\n\t\t\t\te.href +\n\t\t\t\t\"', module: '\" +\n\t\t\t\te.moduleUrl +\n\t\t\t\t\"', meta: \" +\n\t\t\t\tJSON.stringify(e.meta || {}) +\n\t\t\t\t' },',\n\t\t);\n\t}\n\tlines.push('] as const;');\n\tlines.push('');\n\tlines.push('export const byCollection: Record<string, any[]> = {};');\n\tlines.push(\n\t\t'for (const c of contents) { (byCollection[c.collection] ||= []).push(c as any); }',\n\t);\n\tlines.push('');\n\tlines.push(\n\t\t'export const byCollectionAndName: Record<string, Record<string, any>> = {};',\n\t);\n\tlines.push(\n\t\t'for (const c of contents) { ((byCollectionAndName[c.collection] ||= {})[c.name] = c as any); }',\n\t);\n\tlines.push('');\n\tlines.push('export type Collections = keyof typeof byCollection;');\n\tlines.push(\n\t\t'export type Names<C extends Collections> = keyof (typeof byCollectionAndName)[C];',\n\t);\n\tlines.push('export type ContentEntry = (typeof contents)[number];');\n\tlines.push('');\n\tlines.push(\n\t\t'export function getContentEntry<C extends string, N extends string>(collection: C, name: N) {',\n\t);\n\tlines.push(' const m = (byCollectionAndName as any)[collection];');\n\tlines.push(' return m ? (m as Record<string, any>)[name] : undefined;');\n\tlines.push('}');\n\tlines.push('');\n\n\tawait mkdir(join(cwd, '.reroute'), { recursive: true });\n\tawait writeFile(join(cwd, OUTPUT_CONTENT_TS), lines.join('\\n'), 'utf-8');\n\tconsole.log(`[reroute/content] wrote ${join(cwd, OUTPUT_CONTENT_TS)}`);\n\n\t// Write per-collection runtime ESM files under .reroute/collections/<collection>.js\n\tconst collectionsSet = new Set(results.map((r) => r.collection));\n\tawait mkdir(join(cwd, OUTPUT_COLLECTIONS_DIR), { recursive: true });\n\tfor (const collection of collectionsSet) {\n\t\tconst items = results.filter((r) => r.collection === collection);\n\t\tconst js: string[] = [];\n\t\tjs.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\t\tjs.push('');\n\t\tjs.push('export const items = [');\n\t\tfor (const e of items) {\n\t\t\tjs.push(\n\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);\n\t\t}\n\t\tjs.push('];');\n\t\tjs.push('');\n\t\tjs.push('export const byName = {};');\n\t\tjs.push('for (const it of items) { byName[it.name] = it; }');\n\t\tjs.push('');\n\t\tjs.push('export function get(collectionName, name) {');\n\t\tjs.push(` if (collectionName !== '${collection}') return undefined;`);\n\t\tjs.push(' return byName[name];');\n\t\tjs.push('}');\n\t\tjs.push('');\n\n\t\tawait writeFile(\n\t\t\tjoin(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`),\n\t\t\tjs.join('\\n'),\n\t\t\t'utf-8',\n\t\t);\n\t\tconsole.log(\n\t\t\t`[reroute/content] wrote ${join(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`)}`,\n\t\t);\n\t}\n}\n\nasync function generate(cwd: string) {\n\tconsole.log('[reroute/gen] Starting generation...');\n\n\t// Cleanup old generated files due to SSR issues\n\tawait cleanupOutputDir(cwd);\n\n\t// Routes\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\ttry {\n\t\tconst files = await scanDirectory(routesPath);\n\t\tconst nfFiles = await scan404Files(routesPath);\n\t\tconst all = Array.from(new Set([...files, ...nfFiles]));\n\t\tconst tree = generateRouteTree(all.map((f) => f.replace(/\\\\/g, '/')));\n\t\tconst ts = generateTypeScript(tree);\n\t\tawait mkdir(join(cwd, '.reroute'), { recursive: true });\n\t\tawait writeFile(join(cwd, OUTPUT_ROUTES), ts, 'utf-8');\n\t\tconsole.log(`[reroute/gen] Generated routes: ${join(cwd, OUTPUT_ROUTES)}`);\n\t} catch (error) {\n\t\tconsole.error('[reroute/gen] Failed to generate routes:', error);\n\t\tthrow error;\n\t}\n\n\t// Content\n\ttry {\n\t\tawait buildContentChunks(cwd);\n\t\tconsole.log(\n\t\t\t`[reroute/gen] Generated content: ${join(cwd, OUTPUT_CONTENT_TS)} + collections/*.js`,\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('[reroute/gen] Failed to generate content:', error);\n\t\tthrow error;\n\t}\n\n\t// Write .reroute/index.ts aggregator\n\tconst indexLines: string[] = [];\n\tindexLines.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\tindexLines.push('/* eslint-disable */');\n\tindexLines.push('// @ts-nocheck');\n\tindexLines.push('');\n\tindexLines.push(\n\t\t\"import { layouts, matchRoute, notFoundRoutes } from './routes';\",\n\t);\n\tindexLines.push('');\n\tindexLines.push('export const artifacts = {');\n\tindexLines.push(' layouts,');\n\tindexLines.push(' matchRoute,');\n\tindexLines.push(' notFoundRoutes,');\n\tindexLines.push(\" contentBaseUrl: '/.reroute/collections'\");\n\tindexLines.push('} as const;');\n\tindexLines.push('');\n\tindexLines.push('export type RerouteArtifacts = typeof artifacts;');\n\n\tawait writeFile(join(cwd, OUTPUT_INDEX), indexLines.join('\\n'), 'utf-8');\n\n\tconsole.log(`[reroute/gen] Generated index: ${join(cwd, OUTPUT_INDEX)}`);\n\tconsole.log('[reroute/gen] ✅ Generation complete!');\n}\n\nexport default async function gen(args: string[]) {\n\tconst cwd = process.cwd();\n\tconst watchMode = args.includes('--watch') || args.includes('-w');\n\n\tif (!watchMode) {\n\t\tawait generate(cwd);\n\t\tinitTailwind(cwd);\n\t\treturn;\n\t}\n\n\tconsole.log('[reroute/gen] Watch mode enabled');\n\tconsole.log('[reroute/gen] Initial generation...');\n\tawait generate(cwd);\n\n\ttry {\n\t\tawait buildTailwind(cwd);\n\t} catch {}\n\n\t// Helper: notify server to reload connected browsers (best-effort)\n\tconst notifyReload = async (reason: string) => {\n\t\tconst ports = [\n\t\t\tNumber(process.env.PORT || '0') || 0,\n\t\t\tNumber(process.env.REROUTE_PORT || '0') || 0,\n\t\t\t3001,\n\t\t\t3000,\n\t\t].filter(Boolean) as number[];\n\t\tfor (const p of ports) {\n\t\t\ttry {\n\t\t\t\tawait fetch(`http://localhost:${p}/__reroute_reload`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t});\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[reroute/gen] reload notified (port ${p})${reason ? `: ${reason}` : ''}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t} catch {}\n\t\t}\n\t};\n\n\t// Watch routes for generation + Tailwind rebuild\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\tconsole.log(`[reroute/gen] Watching ${routesPath} for changes...`);\n\tlet debounce: NodeJS.Timeout | null = null;\n\tconst routesWatcher = watch(\n\t\troutesPath,\n\t\t{ recursive: true },\n\t\t(_ev, filename) => {\n\t\t\tif (!filename) return;\n\t\t\tif (debounce) clearTimeout(debounce);\n\t\t\tdebounce = setTimeout(async () => {\n\t\t\t\tconsole.log('[reroute/gen] Change detected, regenerating...');\n\t\t\t\ttry {\n\t\t\t\t\tawait generate(cwd);\n\t\t\t\t\tawait buildTailwind(cwd);\n\t\t\t\t\tawait notifyReload('routes change');\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('[reroute/gen] Error during regeneration:', e);\n\t\t\t\t}\n\t\t\t}, 120);\n\t\t},\n\t);\n\n\t// Watch src/client for Tailwind-related changes\n\tconst clientPath = join(cwd, 'src', 'client');\n\tconsole.log(\n\t\t`[reroute/gen] Watching ${clientPath} for Tailwind class changes...`,\n\t);\n\tlet twDebounce: NodeJS.Timeout | null = null;\n\tconst twWatcher = watch(clientPath, { recursive: true }, (_ev, filename) => {\n\t\tif (!filename) return;\n\t\tconst name = String(filename);\n\t\tif (name.includes('.reroute') || name.includes('node_modules')) return;\n\t\tif (name.includes('routes/') || name.includes('routes\\\\')) return;\n\t\tif (!/\\.(tsx|ts|jsx|js|html|md|mdx|css)$/.test(name)) return;\n\t\tif (twDebounce) clearTimeout(twDebounce);\n\t\ttwDebounce = setTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tawait buildTailwind(cwd);\n\t\t\t\tawait notifyReload('client change');\n\t\t\t} catch {}\n\t\t}, 150);\n\t});\n\n\t// Keep process running until SIGINT\n\tprocess.on('SIGINT', () => {\n\t\tconsole.log('\\n[reroute/gen] Stopping watch mode...');\n\t\ttry {\n\t\t\troutesWatcher.close();\n\t\t} catch {}\n\t\ttry {\n\t\t\ttwWatcher.close();\n\t\t} catch {}\n\t\tprocess.exit(0);\n\t});\n}\n",
|
|
9
|
+
"#!/usr/bin/env bun\nimport { watch } from 'node:fs';\nimport { mkdir, readdir, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { buildTailwind, initTailwind } from '../libs/tailwind';\n\n// biome-ignore lint/suspicious/noExplicitAny: flexible content meta type\ntype Doc = any;\n\ninterface RouteFile {\n\tpath: string;\n\tpattern: string;\n\tfilePath: string;\n\tisLayout: boolean;\n\tisDynamic: boolean;\n\tparams: string[];\n\t/** special case for [404].tsx */\n\tisNotFound?: boolean;\n\t/** when isNotFound, this is the base pattern to match as a prefix */\n\tnotFoundBasePattern?: string;\n}\n\ninterface RouteTree {\n\troutes: RouteFile[];\n\tlayouts: RouteFile[];\n\tnotFoundRoutes: RouteFile[];\n}\n\nconst ROUTES_DIR = 'src/client/routes';\nconst OUTPUT_DIR = '.reroute';\nconst OUTPUT_ROUTES = '.reroute/routes.ts';\nconst OUTPUT_CONTENT_TS = '.reroute/content.ts';\nconst OUTPUT_COLLECTIONS_DIR = '.reroute/collections';\nconst OUTPUT_INDEX = '.reroute/index.ts';\n\nasync function cleanupOutputDir(cwd: string) {\n\ttry {\n\t\t// Remove generated files\n\t\tawait rm(join(cwd, OUTPUT_DIR), { force: true });\n\t\t// Ensure .reroute exists for subsequent writes\n\t\tawait mkdir(join(cwd, OUTPUT_DIR), { recursive: true });\n\t\tconsole.log('[reroute/gen] Cleaned up generated artifacts in .reroute');\n\t} catch {\n\t\t// Ignore cleanup errors\n\t}\n}\n\nasync function scanDirectory(dir: string, base = ''): Promise<string[]> {\n\tconst files: string[] = [];\n\tconst entries = await readdir(dir, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst fullPath = join(dir, entry.name);\n\t\tconst relativePath = join(base, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Skip content directories; those are not routes\n\t\t\tif (entry.name === 'content') continue;\n\t\t\tconst nested = await scanDirectory(fullPath, relativePath);\n\t\t\tfiles.push(...nested);\n\t\t} else if (\n\t\t\tentry.isFile() &&\n\t\t\t(entry.name.endsWith('.tsx') || entry.name.endsWith('.ts'))\n\t\t) {\n\t\t\t// Skip non-route files and any files under a content/ segment\n\t\t\tif (\n\t\t\t\trelativePath.includes('/content/') ||\n\t\t\t\trelativePath.startsWith('content/')\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!entry.name.startsWith('_') || entry.name === '[layout].tsx') {\n\t\t\t\tfiles.push(relativePath);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn files;\n}\n\n// Recursively scan for [404].tsx or [404].ts anywhere under routes, including content dirs\nasync function scan404Files(dir: string, base = ''): Promise<string[]> {\n\tconst files: string[] = [];\n\tconst entries = await readdir(dir, { withFileTypes: true });\n\tfor (const entry of entries) {\n\t\tconst fullPath = join(dir, entry.name);\n\t\tconst relativePath = join(base, entry.name);\n\t\tif (entry.isDirectory()) {\n\t\t\tconst nested = await scan404Files(fullPath, relativePath);\n\t\t\tfiles.push(...nested);\n\t\t} else if (entry.isFile()) {\n\t\t\tif (/^\\[404]\\.(tsx|ts)$/.test(entry.name)) files.push(relativePath);\n\t\t}\n\t}\n\treturn files;\n}\n\nfunction fileToRoute(filePath: string): RouteFile {\n\tconst isLayout =\n\t\tfilePath.endsWith('[layout].tsx') || filePath.endsWith('[layout].ts');\n\n\t// Remove extension\n\tlet routePath = filePath.replace(/\\.(tsx|ts)$/, '');\n\n\t// Handle layouts\n\tif (isLayout) {\n\t\troutePath = routePath.replace(/[layout]$/, '').replace(/\\/$/, '');\n\t}\n\n\t// Convert index to /\n\troutePath = routePath.replace(/\\/index$/, '').replace(/^index$/, '');\n\n\t// Extract params from [param] syntax\n\tconst params: string[] = [];\n\tconst pattern = routePath.replace(/\\[([^\\]]+)\\]/g, (_, param) => {\n\t\tparams.push(param);\n\t\treturn `:${param}`;\n\t});\n\n\t// Ensure leading slash\n\tconst normalizedPattern = pattern === '' ? '/' : `/${pattern}`;\n\n\t// Special case: [404].tsx files act as NotFound entries for their directory\n\tconst isNotFound = /(^|\\/)\\[404\\]$/.test(routePath);\n\tlet notFoundBasePattern: string | undefined;\n\tif (isNotFound) {\n\t\tconst base = routePath.replace(/(^|\\/)\\[404\\]$/, '').replace(/\\/$/, '');\n\t\tnotFoundBasePattern = base ? `/${base}` : '/';\n\t}\n\n\treturn {\n\t\tpath: routePath,\n\t\tpattern: normalizedPattern,\n\t\tfilePath,\n\t\tisLayout,\n\t\tisDynamic: params.length > 0,\n\t\tparams,\n\t\tisNotFound,\n\t\tnotFoundBasePattern,\n\t};\n}\n\nfunction sortRoutes(routes: RouteFile[]): RouteFile[] {\n\t// Sort by specificity: static routes first, then dynamic, then catch-all\n\treturn routes.sort((a, b) => {\n\t\tconst aDepth = a.pattern.split('/').length;\n\t\tconst bDepth = b.pattern.split('/').length;\n\n\t\t// Deeper routes first\n\t\tif (aDepth !== bDepth) return bDepth - aDepth;\n\n\t\t// Static before dynamic\n\t\tif (!a.isDynamic && b.isDynamic) return -1;\n\t\tif (a.isDynamic && !b.isDynamic) return 1;\n\n\t\t// Alphabetical\n\t\treturn a.pattern.localeCompare(b.pattern);\n\t});\n}\n\nfunction generateRouteTree(files: string[]): RouteTree {\n\tconst routes: RouteFile[] = [];\n\tconst layouts: RouteFile[] = [];\n\tconst notFoundRoutes: RouteFile[] = [];\n\n\tfor (const file of files) {\n\t\tconst route = fileToRoute(file);\n\t\tif (route.isLayout) {\n\t\t\tlayouts.push(route);\n\t\t} else if (route.isNotFound) {\n\t\t\t// Do not include [404] as a normal route; store separately\n\t\t\tnotFoundRoutes.push(route);\n\t\t} else {\n\t\t\troutes.push(route);\n\t\t}\n\t}\n\n\treturn {\n\t\troutes: sortRoutes(routes),\n\t\tlayouts,\n\t\tnotFoundRoutes: notFoundRoutes,\n\t};\n}\n\nfunction generateTypeScript(tree: RouteTree): string {\n\t// Import only default exports so optional named exports like\n\t// `ssr` and `meta` can be tree-shaken from the client bundle.\n\tconst imports = [\n\t\t...tree.routes.map(\n\t\t\t(r, i) =>\n\t\t\t\t`import Route${i} from '../src/client/routes/${r.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t\t...tree.layouts.map(\n\t\t\t(l, i) =>\n\t\t\t\t`import Layout${i} from '../src/client/routes/${l.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t\t...tree.notFoundRoutes.map(\n\t\t\t(nf, i) =>\n\t\t\t\t`import NotFound${i} from '../src/client/routes/${nf.filePath.replace(/\\.(tsx|ts)$/, '')}';`,\n\t\t),\n\t].join('\\n');\n\n\tconst routesArray = tree.routes\n\t\t.map((r, i) => {\n\t\t\treturn ` {\n pattern: \"${r.pattern}\",\n path: \"${r.path}\",\n component: Route${i},\n params: ${JSON.stringify(r.params)},\n isDynamic: ${r.isDynamic},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\tconst routePatterns = tree.routes.map((r) => ` | \"${r.pattern}\"`).join('\\n');\n\n\tconst routeParamsUnion = tree.routes\n\t\t.filter((r) => r.isDynamic)\n\t\t.map((r) => {\n\t\t\tconst params = r.params.map((p) => `${p}: string`).join('; ');\n\t\t\treturn ` T extends \"${r.pattern}\" ? { ${params} } :`;\n\t\t})\n\t\t.join('\\n');\n\n\tconst layoutsArray = tree.layouts\n\t\t.map((l, i) => {\n\t\t\treturn ` {\n pattern: \"${l.pattern}\",\n path: \"${l.path}\",\n component: Layout${i},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\tconst notFoundRoutesArray = tree.notFoundRoutes\n\t\t.map((nf, i) => {\n\t\t\treturn ` {\n pattern: \"${nf.notFoundBasePattern || '/'}\",\n path: \"${nf.path}\",\n component: NotFound${i},\n } as const`;\n\t\t})\n\t\t.join(',\\n');\n\n\treturn `// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨\n/* eslint-disable */\n// @ts-nocheck\n\n${imports}\n\nexport const routes: RouteInfo = [\n${routesArray}\n] as const;\n\nexport const layouts = [\n${layoutsArray || ''}\n] as const;\n\nexport const notFoundRoutes = [\n${notFoundRoutesArray || ''}\n] as const;\n\nexport type RoutePath =\n${routePatterns || ' | \"/\"'};\n\nexport type RouteParams<T extends RoutePath> = ${\n\t\trouteParamsUnion\n\t\t\t? `\\n${routeParamsUnion}\\n Record<string, never>;`\n\t\t\t: 'Record<string, never>;'\n\t}\n\nexport interface Route {\n pattern: string;\n path: string;\n component: any;\n params: string[];\n isDynamic: boolean;\n}\n\nexport function matchRoute(pathname: string): { route: Route; params: Record<string, string> } | null {\n for (const route of routes) {\n const match = matchPattern(route.pattern, pathname);\n if (match) {\n return { route, params: match };\n }\n }\n return null;\n}\n\nfunction matchPattern(pattern: string, pathname: string): Record<string, string> | null {\n const patternParts = pattern.split('/').filter(Boolean);\n const pathnameParts = pathname.split('/').filter(Boolean);\n\n if (patternParts.length !== pathnameParts.length) {\n return null;\n }\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathnamePart = pathnameParts[i];\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = pathnamePart;\n } else if (patternPart !== pathnamePart) {\n return null;\n }\n }\n\n return params;\n}\n`;\n}\n\nasync function listContentFiles(collectionDir: string): Promise<string[]> {\n\ttry {\n\t\tconst entries = await readdir(collectionDir, { withFileTypes: true });\n\t\treturn entries\n\t\t\t.filter(\n\t\t\t\t(e) =>\n\t\t\t\t\te.isFile() && /\\.(tsx|ts)$/.test(e.name) && !e.name.startsWith('_'),\n\t\t\t)\n\t\t\t.map((e) => e.name);\n\t} catch {\n\t\treturn [];\n\t}\n}\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 buildContentChunks(cwd: string) {\n\tconst routesRoot = join(cwd, ROUTES_DIR);\n\tconsole.log(`[reroute/content] scan ${routesRoot}`);\n\t// Find any '<collection>/content/*.(ts|tsx)'\n\tconst collections = await readdir(routesRoot, { withFileTypes: true });\n\tconst results: 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\tfor (const c of collections) {\n\t\tif (!c.isDirectory()) continue;\n\t\tconst collection = c.name;\n\t\tconst contentDir = join(routesRoot, collection, 'content');\n\t\tconsole.log(`[reroute/content] collection ${collection} dir ${contentDir}`);\n\t\tconst files = await listContentFiles(contentDir);\n\t\tconsole.log(`[reroute/content] files ${files.join(',')}`);\n\t\tif (!files.length) continue;\n\n\t\tfor (const file of files) {\n\t\t\tconst name = file.replace(/\\.(tsx|ts)$/, '');\n\t\t\tconst absSrc = join(contentDir, file);\n\t\t\t// Build to JS once (no minify) for dev reliability\n\t\t\tlet code = '';\n\t\t\ttry {\n\t\t\t\tconsole.log(`[reroute/content] build ${absSrc}`);\n\t\t\t\tconst result = await Bun.build({\n\t\t\t\t\tentrypoints: [absSrc],\n\t\t\t\t\ttarget: 'browser',\n\t\t\t\t\tformat: 'esm',\n\t\t\t\t\tsplitting: false,\n\t\t\t\t\tsourcemap: 'none',\n\t\t\t\t\tminify: false,\n\t\t\t\t\tdefine: { 'process.env.NODE_ENV': '\"production\"' },\n\t\t\t\t});\n\t\t\t\tif (!result.success) throw new Error('build failed');\n\t\t\t\tcode = await result.outputs[0].text();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'[reroute/gen] Failed to build content chunk:',\n\t\t\t\t\tabsSrc,\n\t\t\t\t\te,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst hash = await sha8(code);\n\t\t\tconst chunkRelDir = join('.reroute', 'chunks', collection);\n\t\t\tconst chunkAbsDir = join(cwd, chunkRelDir);\n\t\t\tconst outFile = `${name}.${hash}.js`;\n\t\t\tconst absOut = join(chunkAbsDir, outFile);\n\t\t\tawait mkdir(chunkAbsDir, { recursive: true });\n\t\t\ttry {\n\t\t\t\tconst exists = await Bun.file(absOut).exists();\n\t\t\t\tif (!exists) await writeFile(absOut, code, 'utf-8');\n\t\t\t} catch {}\n\n\t\t\t// Meta via source import (not bundled)\n\t\t\tlet meta: Doc = {};\n\t\t\ttry {\n\t\t\t\tconsole.log(`[reroute/content] meta ${absSrc}`);\n\t\t\t\tconst url = `${pathToFileURL(absSrc).href}?t=${Date.now()}`;\n\t\t\t\tconst m = await import(url);\n\t\t\t\tmeta = (m as Doc).meta || {};\n\t\t\t} catch {}\n\n\t\t\tresults.push({\n\t\t\t\tcollection,\n\t\t\t\tname,\n\t\t\t\tslug: name,\n\t\t\t\thref: `/${collection}/${name}`,\n\t\t\t\tmoduleUrl: (\n\t\t\t\t\t'/' +\n\t\t\t\t\tchunkRelDir.replace(/\\\\/g, '/') +\n\t\t\t\t\t'/' +\n\t\t\t\t\toutFile\n\t\t\t\t).replace(/\\\\+/g, '/'),\n\t\t\t\tmeta,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Write .reroute/content.ts (types for tooling only)\n\tconst lines: string[] = [];\n\tlines.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\tlines.push('/* eslint-disable */');\n\tlines.push('// @ts-nocheck');\n\tlines.push('');\n\tlines.push('export const contents = [');\n\tfor (const e of results) {\n\t\tlines.push(\n\t\t\t\" { collection: '\" +\n\t\t\t\te.collection +\n\t\t\t\t\"', slug: '\" +\n\t\t\t\te.slug +\n\t\t\t\t\"', name: '\" +\n\t\t\t\te.name +\n\t\t\t\t\"', href: '\" +\n\t\t\t\te.href +\n\t\t\t\t\"', module: '\" +\n\t\t\t\te.moduleUrl +\n\t\t\t\t\"', meta: \" +\n\t\t\t\tJSON.stringify(e.meta || {}) +\n\t\t\t\t' },',\n\t\t);\n\t}\n\tlines.push('] as const;');\n\tlines.push('');\n\tlines.push('export const byCollection: Record<string, any[]> = {};');\n\tlines.push(\n\t\t'for (const c of contents) { (byCollection[c.collection] ||= []).push(c as any); }',\n\t);\n\tlines.push('');\n\tlines.push(\n\t\t'export const byCollectionAndName: Record<string, Record<string, any>> = {};',\n\t);\n\tlines.push(\n\t\t'for (const c of contents) { ((byCollectionAndName[c.collection] ||= {})[c.name] = c as any); }',\n\t);\n\tlines.push('');\n\tlines.push('export type Collections = keyof typeof byCollection;');\n\tlines.push(\n\t\t'export type Names<C extends Collections> = keyof (typeof byCollectionAndName)[C];',\n\t);\n\tlines.push('export type ContentEntry = (typeof contents)[number];');\n\tlines.push('');\n\tlines.push(\n\t\t'export function getContentEntry<C extends string, N extends string>(collection: C, name: N) {',\n\t);\n\tlines.push(' const m = (byCollectionAndName as any)[collection];');\n\tlines.push(' return m ? (m as Record<string, any>)[name] : undefined;');\n\tlines.push('}');\n\tlines.push('');\n\n\tawait mkdir(join(cwd, '.reroute'), { recursive: true });\n\tawait writeFile(join(cwd, OUTPUT_CONTENT_TS), lines.join('\\n'), 'utf-8');\n\tconsole.log(`[reroute/content] wrote ${join(cwd, OUTPUT_CONTENT_TS)}`);\n\n\t// Write per-collection runtime ESM files under .reroute/collections/<collection>.js\n\tconst collectionsSet = new Set(results.map((r) => r.collection));\n\tawait mkdir(join(cwd, OUTPUT_COLLECTIONS_DIR), { recursive: true });\n\tfor (const collection of collectionsSet) {\n\t\tconst items = results.filter((r) => r.collection === collection);\n\t\tconst js: string[] = [];\n\t\tjs.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\t\tjs.push('');\n\t\tjs.push('export const items = [');\n\t\tfor (const e of items) {\n\t\t\tjs.push(\n\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);\n\t\t}\n\t\tjs.push('];');\n\t\tjs.push('');\n\t\tjs.push('export const byName = {};');\n\t\tjs.push('for (const it of items) { byName[it.name] = it; }');\n\t\tjs.push('');\n\t\tjs.push('export function get(collectionName, name) {');\n\t\tjs.push(` if (collectionName !== '${collection}') return undefined;`);\n\t\tjs.push(' return byName[name];');\n\t\tjs.push('}');\n\t\tjs.push('');\n\n\t\tawait writeFile(\n\t\t\tjoin(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`),\n\t\t\tjs.join('\\n'),\n\t\t\t'utf-8',\n\t\t);\n\t\tconsole.log(\n\t\t\t`[reroute/content] wrote ${join(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`)}`,\n\t\t);\n\t}\n}\n\nasync function generate(cwd: string) {\n\tconsole.log('[reroute/gen] Starting generation...');\n\n\t// Cleanup old generated files due to SSR issues\n\tawait cleanupOutputDir(cwd);\n\n\t// Routes\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\ttry {\n\t\tconst files = await scanDirectory(routesPath);\n\t\tconst nfFiles = await scan404Files(routesPath);\n\t\tconst all = Array.from(new Set([...files, ...nfFiles]));\n\t\tconst tree = generateRouteTree(all.map((f) => f.replace(/\\\\/g, '/')));\n\t\tconst ts = generateTypeScript(tree);\n\t\tawait mkdir(join(cwd, '.reroute'), { recursive: true });\n\t\tawait writeFile(join(cwd, OUTPUT_ROUTES), ts, 'utf-8');\n\t\tconsole.log(`[reroute/gen] Generated routes: ${join(cwd, OUTPUT_ROUTES)}`);\n\t} catch (error) {\n\t\tconsole.error('[reroute/gen] Failed to generate routes:', error);\n\t\tthrow error;\n\t}\n\n\t// Content\n\ttry {\n\t\tawait buildContentChunks(cwd);\n\t\tconsole.log(\n\t\t\t`[reroute/gen] Generated content: ${join(cwd, OUTPUT_CONTENT_TS)} + collections/*.js`,\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('[reroute/gen] Failed to generate content:', error);\n\t\tthrow error;\n\t}\n\n\t// Write .reroute/index.ts aggregator\n\tconst indexLines: string[] = [];\n\tindexLines.push('// 🚨 Auto-generated by Reroute - DO NOT EDIT 🚨');\n\tindexLines.push('/* eslint-disable */');\n\tindexLines.push('// @ts-nocheck');\n\tindexLines.push('');\n\tindexLines.push(\n\t\t\"import { layouts, matchRoute, notFoundRoutes } from './routes';\",\n\t);\n\tindexLines.push('');\n\tindexLines.push('export const artifacts = {');\n\tindexLines.push(' layouts,');\n\tindexLines.push(' matchRoute,');\n\tindexLines.push(' notFoundRoutes,');\n\tindexLines.push(\" contentBaseUrl: '/.reroute/collections'\");\n\tindexLines.push('} as const;');\n\tindexLines.push('');\n\tindexLines.push('export type RerouteArtifacts = typeof artifacts;');\n\n\tawait writeFile(join(cwd, OUTPUT_INDEX), indexLines.join('\\n'), 'utf-8');\n\n\tconsole.log(`[reroute/gen] Generated index: ${join(cwd, OUTPUT_INDEX)}`);\n\tconsole.log('[reroute/gen] ✅ Generation complete!');\n}\n\nexport default async function gen(args: string[]) {\n\tconst cwd = process.cwd();\n\tconst watchMode = args.includes('--watch') || args.includes('-w');\n\n\tif (!watchMode) {\n\t\tawait generate(cwd);\n\t\tinitTailwind(cwd);\n\t\treturn;\n\t}\n\n\tconsole.log('[reroute/gen] Watch mode enabled');\n\tconsole.log('[reroute/gen] Initial generation...');\n\tawait generate(cwd);\n\n\ttry {\n\t\tawait buildTailwind(cwd);\n\t} catch {}\n\n\t// Helper: notify server to reload connected browsers (best-effort)\n\tconst notifyReload = async (reason: string) => {\n\t\tconst ports = [\n\t\t\tNumber(process.env.PORT || '0') || 0,\n\t\t\tNumber(process.env.REROUTE_PORT || '0') || 0,\n\t\t\t3001,\n\t\t\t3000,\n\t\t].filter(Boolean) as number[];\n\t\tfor (const p of ports) {\n\t\t\ttry {\n\t\t\t\tawait fetch(`http://localhost:${p}/__reroute_reload`, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t});\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[reroute/gen] reload notified (port ${p})${reason ? `: ${reason}` : ''}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t} catch {}\n\t\t}\n\t};\n\n\t// Watch routes for generation + Tailwind rebuild\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\tconsole.log(`[reroute/gen] Watching ${routesPath} for changes...`);\n\tlet debounce: NodeJS.Timeout | null = null;\n\tconst routesWatcher = watch(\n\t\troutesPath,\n\t\t{ recursive: true },\n\t\t(_ev, filename) => {\n\t\t\tif (!filename) return;\n\t\t\tif (debounce) clearTimeout(debounce);\n\t\t\tdebounce = setTimeout(async () => {\n\t\t\t\tconsole.log('[reroute/gen] Change detected, regenerating...');\n\t\t\t\ttry {\n\t\t\t\t\tawait generate(cwd);\n\t\t\t\t\tawait buildTailwind(cwd);\n\t\t\t\t\tawait notifyReload('routes change');\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('[reroute/gen] Error during regeneration:', e);\n\t\t\t\t}\n\t\t\t}, 120);\n\t\t},\n\t);\n\n\t// Watch src/client for Tailwind-related changes\n\tconst clientPath = join(cwd, 'src', 'client');\n\tconsole.log(\n\t\t`[reroute/gen] Watching ${clientPath} for Tailwind class changes...`,\n\t);\n\tlet twDebounce: NodeJS.Timeout | null = null;\n\tconst twWatcher = watch(clientPath, { recursive: true }, (_ev, filename) => {\n\t\tif (!filename) return;\n\t\tconst name = String(filename);\n\t\tif (name.includes('.reroute') || name.includes('node_modules')) return;\n\t\tif (name.includes('routes/') || name.includes('routes\\\\')) return;\n\t\tif (!/\\.(tsx|ts|jsx|js|html|md|mdx|css)$/.test(name)) return;\n\t\tif (twDebounce) clearTimeout(twDebounce);\n\t\ttwDebounce = setTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tawait buildTailwind(cwd);\n\t\t\t\tawait notifyReload('client change');\n\t\t\t} catch {}\n\t\t}, 150);\n\t});\n\n\t// Keep process running until SIGINT\n\tprocess.on('SIGINT', () => {\n\t\tconsole.log('\\n[reroute/gen] Stopping watch mode...');\n\t\ttry {\n\t\t\troutesWatcher.close();\n\t\t} catch {}\n\t\ttry {\n\t\t\ttwWatcher.close();\n\t\t} catch {}\n\t\tprocess.exit(0);\n\t});\n}\n",
|
|
10
10
|
"#!/usr/bin/env bun\n\n/**\n * Reroute CLI\n *\n * Command-line interface for Reroute framework operations.\n */\n\nconst commands = {\n\tinit: () => import('./commands/init'),\n\tbuild: () => import('./commands/build'),\n\tdev: () => import('./commands/dev'),\n\tgen: () => import('./commands/gen'),\n};\n\ntype Command = keyof typeof commands;\n\nasync function main() {\n\tconst args = process.argv.slice(2);\n\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\tprintHelp();\n\t\tprocess.exit(0);\n\t}\n\n\tconst command = args[0] as Command;\n\n\tif (!commands[command]) {\n\t\tconsole.error(`Unknown command: ${command}`);\n\t\tconsole.error('');\n\t\tprintHelp();\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\tconst module = await commands[command]();\n\t\tawait module.default(args.slice(1));\n\t} catch (error) {\n\t\tconsole.error('Error executing command:', error);\n\t\tprocess.exit(1);\n\t}\n}\n\nfunction printHelp() {\n\tconsole.log('Reroute CLI - File-based routing framework');\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log(' reroute <command> [options]');\n\tconsole.log('');\n\tconsole.log('Commands:');\n\tconsole.log(' gen Generate content registry and static assets');\n\tconsole.log(' init Scaffold a new Reroute project');\n\tconsole.log(' build Build for production');\n\tconsole.log(' dev Start development server');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log(' -h, --help Show help');\n\tconsole.log('');\n\tconsole.log('Examples:');\n\tconsole.log(' reroute gen');\n\tconsole.log(' reroute gen --watch');\n\tconsole.log(' reroute init my-app');\n\tconsole.log(' reroute build --minify');\n\tconsole.log(' reroute dev --port 3000');\n}\n\nmain();\n\nexport {};\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAQA;AACA;AACA;AAOA,eAA8B,IAAI,CAAC,MAAgB;AAAA,EAClD,MAAM,UAAU,UAAU,IAAI;AAAA,EAE9B,IAAI,CAAC,SAAS;AAAA,IACb,UAAU;AAAA,IACV,QAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAEA,IAAI;AAAA,IACH,MAAM,gBAAgB,OAAO;AAAA,IAC5B,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,8BAA8B,KAAK;AAAA,IACjD,QAAQ,KAAK,CAAC;AAAA;AAAA;AAIhB,SAAS,SAAS,CAAC,MAAoC;AAAA,EACtD,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,YAAY,KAAK,OAAO,MAAM;AAAA,IAClE,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,cAAc,KAAK;AAAA,EAEzB,IAAI,CAAC,eAAe,YAAY,WAAW,GAAG,GAAG;AAAA,IAChD,QAAQ,MAAM,iCAAiC;AAAA,IAC/C,OAAO;AAAA,EACR;AAAA,EAGA,IAAI,CAAC,iBAAiB,KAAK,WAAW,GAAG;AAAA,IACxC,QAAQ,MACP,iFACD;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,IAAI,WAA6B;AAAA,EAGjC,MAAM,gBAAgB,KAAK,QAAQ,YAAY;AAAA,EAC/C,IAAI,kBAAkB,MAAM,KAAK,gBAAgB,IAAI;AAAA,IACpD,MAAM,cAAc,KAAK,gBAAgB;AAAA,IACzC,IAAI,gBAAgB,WAAW,gBAAgB,QAAQ;AAAA,MACtD,WAAW;AAAA,IACZ,EAAO;AAAA,MACN,QAAQ,MACP,4BAA4B,gDAC7B;AAAA,MACA,OAAO;AAAA;AAAA,EAET;AAAA,EAEA,OAAO,EAAE,aAAa,SAAS;AAAA;AAGhC,eAAe,eAAe,CAAC,SAAsB;AAAA,EACpD,QAAQ,aAAa,aAAa;AAAA,EAClC,MAAM,cAAc,KAAK,QAAQ,IAAI,GAAG,WAAW;AAAA,EAGnD,IAAI,WAAW,WAAW,GAAG;AAAA,IAC5B,QAAQ,MAAM,qBAAqB,6BAA6B;AAAA,IAChE,QAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAEA,QAAQ,IAAI;AAAA,6CAAqC,aAAa;AAAA,EAC9D,QAAQ,IAAI,0BAAe;AAAA,CAAY;AAAA,EAGvC,MAAM,eAAe,KAAK,YAAY,KAAK,MAAM,KAAK,QAAQ;AAAA,EAE9D,IAAI,CAAC,WAAW,YAAY,GAAG;AAAA,IAC9B,QAAQ,MAAM,0CAA0C,cAAc;AAAA,IACtE,QAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAGA,MAAM,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,EAG5C,MAAM,kBAAkB,cAAc,aAAa;AAAA,IAClD,cAAc;AAAA,EACf,CAAC;AAAA,EAGD,QAAQ,IAAI;AAAA,CAAgC;AAAA,EAC5C,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,SAAS,GAAG;AAAA,IAC1C,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACT,CAAC;AAAA,EAED,MAAM,KAAK;AAAA,EAGX,aAAa,aAAa,QAAQ;AAAA;AAGnC,eAAe,iBAAiB,CAC/B,cACA,YACA,WACC;AAAA,EACD,MAAM,UAAU,MAAM,QAAQ,cAAc,EAAE,eAAe,KAAK,CAAC;AAAA,EAEnE,WAAW,SAAS,SAAS;AAAA,IAC5B,MAAM,aAAa,KAAK,cAAc,MAAM,IAAI;AAAA,IAChD,MAAM,WAAW,KAAK,YAAY,MAAM,IAAI;AAAA,IAE5C,IAAI,MAAM,YAAY,GAAG;AAAA,MAExB,MAAM,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,MACzC,MAAM,kBAAkB,YAAY,UAAU,SAAS;AAAA,IACxD,EAAO,SAAI,MAAM,OAAO,GAAG;AAAA,MAE1B,MAAM,UAAU,MAAM,SAAS,YAAY,OAAO;AAAA,MAGlD,IAAI,mBAAmB;AAAA,MACvB,YAAY,KAAK,UAAU,OAAO,QAAQ,SAAS,GAAG;AAAA,QACrD,MAAM,cAAc,KAAK;AAAA,QACzB,mBAAmB,iBAAiB,MAAM,WAAW,EAAE,KAAK,KAAK;AAAA,MAClE;AAAA,MAGA,MAAM,UAAU,UAAU,gBAAgB;AAAA,IAC3C;AAAA,EACD;AAAA;AAGD,SAAS,YAAY,CAAC,aAAqB,UAAkB;AAAA,EAC5D,QAAQ,IAAI;AAAA;AAAA,CAAsC;AAAA,EAClD,QAAQ,IAAI;AAAA,CAAe;AAAA,EAC3B,QAAQ,IAAI,QAAQ,aAAa;AAAA,EACjC,QAAQ,IAAI;AAAA,CAAa;AAAA,EACzB,QAAQ,IAAI;AAAA,CAAqD;AAAA,EACjE,QAAQ,IAAI,oBAAoB;AAAA,EAChC,QAAQ,IAAI,QAAQ;AAAA,EACpB,QAAQ,IAAI,kDAAkD;AAAA,EAC9D,QAAQ,IAAI,eAAe;AAAA,EAC3B,QAAQ,IAAI,oDAAoD;AAAA,EAChE,QAAQ,IAAI,kDAAkD;AAAA,EAC9D,QAAQ,IAAI,6CAA6C;AAAA,EACzD,QAAQ,IAAI,iDAAiD;AAAA,EAC7D,IAAI,aAAa,QAAQ;AAAA,IACxB,QAAQ,IAAI,qBAAqB;AAAA,IACjC,QAAQ,IAAI,0CAA0C;AAAA,IACtD,QAAQ,IAAI,8BAA8B;AAAA,IAC1C,QAAQ,IAAI,6BAA6B;AAAA,EAC1C;AAAA,EACA,QAAQ,IAAI,yBAAyB;AAAA,EACrC,QAAQ,IAAI,yBAAyB;AAAA,EACrC,QAAQ,IAAI;AAAA,CAAkD;AAAA,EAC9D,QAAQ,IAAI,mDAAmD;AAAA;AAGhE,SAAS,SAAS,GAAG;AAAA,EACpB,QAAQ,IAAI,+CAA+C;AAAA,EAC3D,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,QAAQ;AAAA,EACpB,QAAQ,IAAI,yCAAyC;AAAA,EACrD,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,UAAU;AAAA,EACtB,QAAQ,IAAI,oDAAoD;AAAA,EAChE,QAAQ,IAAI,gCAAgC;AAAA,EAC5C,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,WAAW;AAAA,EACvB,QAAQ,IAAI,uBAAuB;AAAA,EACnC,QAAQ,IAAI,wCAAwC;AAAA;AAAA;;;;;;;ACjLrD,eAA8B,KAAK,CAAC,OAAiB;AAAA,EACpD,QAAQ,IAAI,6BAA6B;AAAA,EACzC,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IACP,kEACD;AAAA,EACA,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,gBAAgB;AAAA,EAC5B,QAAQ,IAAI,iBAAiB;AAAA,EAC7B,QAAQ,IAAI,0BAA0B;AAAA,EACtC,QAAQ,IAAI,2BAA2B;AAAA,EACvC,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IACP,iEACD;AAAA;;;;;;;ACdD,eAA8B,GAAG,CAAC,OAAiB;AAAA,EAClD,QAAQ,IAAI,2BAA2B;AAAA,EACvC,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,gEAAgE;AAAA,EAC5E,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,gBAAgB;AAAA,EAC5B,QAAQ,IAAI,eAAe;AAAA,EAC3B,QAAQ,IAAI,2BAA2B;AAAA,EACvC,QAAQ,IAAI,8BAA8B;AAAA,EAC1C,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,gEAAgE;AAAA,EAC5E,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IACP,sEACD;AAAA;;;ACfD;AACA,uBAAS;AACT,iBAAS;AAUF,SAAS,mBAAmB,CAAC,KAAsB;AAAA,EACzD,MAAM,kBAAkB,MAAK,KAAK,cAAc;AAAA,EAEhD,IAAI,CAAC,YAAW,eAAe,GAAG;AAAA,IACjC,OAAO;AAAA,EACR;AAAA,EAEA,IAAI;AAAA,IACH,MAAM,cAAc,KAAK,MAAM,aAAa,iBAAiB,OAAO,CAAC;AAAA,IACrE,MAAM,OAAO;AAAA,SACT,YAAY;AAAA,SACZ,YAAY;AAAA,IAChB;AAAA,IAEA,OAAO,sBAAsB;AAAA,IAC5B,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAOF,SAAS,gBAAgB,CAAC,KAAa;AAAA,EAC7C,MAAM,QAAQ,MAAK,KAAK,sBAAsB;AAAA,EAC9C,MAAM,SAAS,MAAK,KAAK,oBAAoB;AAAA,EAE7C,OAAO,EAAE,OAAO,OAAO;AAAA;AAMjB,SAAS,gBAAgB,CAAC,KAAsB;AAAA,EACtD,QAAQ,UAAU,iBAAiB,GAAG;AAAA,EAEtC,IAAI,CAAC,YAAW,KAAK,GAAG;AAAA,IACvB,OAAO;AAAA,EACR;AAAA,EAEA,IAAI;AAAA,IACH,MAAM,UAAU,aAAa,OAAO,OAAO;AAAA,IAE3C,OAAO,QAAQ,SAAS,uBAAuB;AAAA,IAC9C,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIF,SAAS,kBAAkB,CAAC,KAAqB;AAAA,EAEvD,MAAM,aAAa;AAAA,IAClB,MAAK,KAAK,+BAA+B;AAAA,IACzC,MAAK,KAAK,kCAAkC;AAAA,IAC5C,MAAK,KAAK,qCAAqC;AAAA,IAC/C,MAAK,KAAK,wCAAwC;AAAA,EACnD;AAAA,EAEA,WAAW,WAAW,YAAY;AAAA,IACjC,IAAI,YAAW,OAAO,GAAG;AAAA,MACxB,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAGA,OAAO,MAAK,KAAK,+BAA+B;AAAA;AAMjD,eAAsB,aAAa,CAAC,KAA4B;AAAA,EAC/D,QAAQ,OAAO,WAAW,iBAAiB,GAAG;AAAA,EAE9C,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACvC,MAAM,cAAc,mBAAmB,GAAG;AAAA,IAC1C,MAAM,OAAO,CAAC,MAAM,OAAO,MAAM,MAAM;AAAA,IAEvC,QAAQ,IAAI,sCAAsC,YAAY,QAAQ;AAAA,IAEtE,MAAM,WAAW,MAAM,aAAa,MAAM;AAAA,MACzC;AAAA,MACA,OAAO;AAAA,IACR,CAAC;AAAA,IAED,SAAS,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAAA,MACrC,MAAM,OAAO,KAAK,SAAS,EAAE,KAAK;AAAA,MAClC,IAAI,MAAM;AAAA,QACT,QAAQ,IAAI,sBAAsB,MAAM;AAAA,MACzC;AAAA,KACA;AAAA,IAED,SAAS,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAAA,MACrC,MAAM,OAAO,KAAK,SAAS,EAAE,KAAK;AAAA,MAClC,IAAI,MAAM;AAAA,QACT,QAAQ,IAAI,sBAAsB,MAAM;AAAA,MACzC;AAAA,KACA;AAAA,IAED,SAAS,GAAG,SAAS,CAAC,SAAS;AAAA,MAC9B,IAAI,SAAS,GAAG;AAAA,QACf,QAAQ,IAAI,+BAA+B;AAAA,QAC3C,QAAQ;AAAA,MACT,EAAO;AAAA,QACN,OAAO,IAAI,MAAM,uCAAuC,MAAM,CAAC;AAAA;AAAA,KAEhE;AAAA,IAED,SAAS,GAAG,SAAS,CAAC,UAAU;AAAA,MAC/B,OAAO,KAAK;AAAA,KACZ;AAAA,GACD;AAAA;AAuDK,SAAS,YAAY,CAAC,KAAqC;AAAA,EAEjE,IAAI,CAAC,oBAAoB,GAAG,GAAG;AAAA,IAC9B,OAAO;AAAA,EACR;AAAA,EAGA,IAAI,CAAC,iBAAiB,GAAG,GAAG;AAAA,IAC3B,QAAQ,IACP,sFACD;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,QAAQ,IAAI,6CAA6C;AAAA,EAGzD,cAAc,GAAG,EACf,KAAK,MAAM;AAAA,IACX,QAAQ,IAAI,uCAAuC;AAAA,GACnD,EACA,MAAM,CAAC,UAAU;AAAA,IACjB,QAAQ,MAAM,oCAAoC,KAAK;AAAA,GACvD;AAAA,EAEF,OAAO;AAAA;AAAA;;;;;;;ACjNR;AACA,kBAAS,mBAAO,2BAAa;AAC7B,iBAAS;AACT;AAgCA,eAAe,gBAAgB,CAAC,KAAa;AAAA,EAC5C,IAAI;AAAA,IAEH,MAAM,GAAG,MAAK,KAAK,UAAU,GAAG,EAAE,OAAO,KAAK,CAAC;AAAA,IAE/C,MAAM,OAAM,MAAK,KAAK,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACtD,QAAQ,IAAI,0DAA0D;AAAA,IACrE,MAAM;AAAA;AAKT,eAAe,aAAa,CAAC,KAAa,OAAO,IAAuB;AAAA,EACvE,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,UAAU,MAAM,SAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,EAE1D,WAAW,SAAS,SAAS;AAAA,IAC5B,MAAM,WAAW,MAAK,KAAK,MAAM,IAAI;AAAA,IACrC,MAAM,eAAe,MAAK,MAAM,MAAM,IAAI;AAAA,IAE1C,IAAI,MAAM,YAAY,GAAG;AAAA,MAExB,IAAI,MAAM,SAAS;AAAA,QAAW;AAAA,MAC9B,MAAM,SAAS,MAAM,cAAc,UAAU,YAAY;AAAA,MACzD,MAAM,KAAK,GAAG,MAAM;AAAA,IACrB,EAAO,SACN,MAAM,OAAO,MACZ,MAAM,KAAK,SAAS,MAAM,KAAK,MAAM,KAAK,SAAS,KAAK,IACxD;AAAA,MAED,IACC,aAAa,SAAS,WAAW,KACjC,aAAa,WAAW,UAAU,GACjC;AAAA,QACD;AAAA,MACD;AAAA,MACA,IAAI,CAAC,MAAM,KAAK,WAAW,GAAG,KAAK,MAAM,SAAS,gBAAgB;AAAA,QACjE,MAAM,KAAK,YAAY;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;AAIR,eAAe,YAAY,CAAC,KAAa,OAAO,IAAuB;AAAA,EACtE,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,UAAU,MAAM,SAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,EAC1D,WAAW,SAAS,SAAS;AAAA,IAC5B,MAAM,WAAW,MAAK,KAAK,MAAM,IAAI;AAAA,IACrC,MAAM,eAAe,MAAK,MAAM,MAAM,IAAI;AAAA,IAC1C,IAAI,MAAM,YAAY,GAAG;AAAA,MACxB,MAAM,SAAS,MAAM,aAAa,UAAU,YAAY;AAAA,MACxD,MAAM,KAAK,GAAG,MAAM;AAAA,IACrB,EAAO,SAAI,MAAM,OAAO,GAAG;AAAA,MAC1B,IAAI,qBAAqB,KAAK,MAAM,IAAI;AAAA,QAAG,MAAM,KAAK,YAAY;AAAA,IACnE;AAAA,EACD;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,WAAW,CAAC,UAA6B;AAAA,EACjD,MAAM,WACL,SAAS,SAAS,cAAc,KAAK,SAAS,SAAS,aAAa;AAAA,EAGrE,IAAI,YAAY,SAAS,QAAQ,eAAe,EAAE;AAAA,EAGlD,IAAI,UAAU;AAAA,IACb,YAAY,UAAU,QAAQ,aAAa,EAAE,EAAE,QAAQ,OAAO,EAAE;AAAA,EACjE;AAAA,EAGA,YAAY,UAAU,QAAQ,YAAY,EAAE,EAAE,QAAQ,WAAW,EAAE;AAAA,EAGnE,MAAM,SAAmB,CAAC;AAAA,EAC1B,MAAM,UAAU,UAAU,QAAQ,iBAAiB,CAAC,GAAG,UAAU;AAAA,IAChE,OAAO,KAAK,KAAK;AAAA,IACjB,OAAO,IAAI;AAAA,GACX;AAAA,EAGD,MAAM,oBAAoB,YAAY,KAAK,MAAM,IAAI;AAAA,EAGrD,MAAM,aAAa,iBAAiB,KAAK,SAAS;AAAA,EAClD,IAAI;AAAA,EACJ,IAAI,YAAY;AAAA,IACf,MAAM,OAAO,UAAU,QAAQ,kBAAkB,EAAE,EAAE,QAAQ,OAAO,EAAE;AAAA,IACtE,sBAAsB,OAAO,IAAI,SAAS;AAAA,EAC3C;AAAA,EAEA,OAAO;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,WAAW,OAAO,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;AAGD,SAAS,UAAU,CAAC,QAAkC;AAAA,EAErD,OAAO,OAAO,KAAK,CAAC,GAAG,MAAM;AAAA,IAC5B,MAAM,SAAS,EAAE,QAAQ,MAAM,GAAG,EAAE;AAAA,IACpC,MAAM,SAAS,EAAE,QAAQ,MAAM,GAAG,EAAE;AAAA,IAGpC,IAAI,WAAW;AAAA,MAAQ,OAAO,SAAS;AAAA,IAGvC,IAAI,CAAC,EAAE,aAAa,EAAE;AAAA,MAAW,OAAO;AAAA,IACxC,IAAI,EAAE,aAAa,CAAC,EAAE;AAAA,MAAW,OAAO;AAAA,IAGxC,OAAO,EAAE,QAAQ,cAAc,EAAE,OAAO;AAAA,GACxC;AAAA;AAGF,SAAS,iBAAiB,CAAC,OAA4B;AAAA,EACtD,MAAM,SAAsB,CAAC;AAAA,EAC7B,MAAM,UAAuB,CAAC;AAAA,EAC9B,MAAM,iBAA8B,CAAC;AAAA,EAErC,WAAW,QAAQ,OAAO;AAAA,IACzB,MAAM,QAAQ,YAAY,IAAI;AAAA,IAC9B,IAAI,MAAM,UAAU;AAAA,MACnB,QAAQ,KAAK,KAAK;AAAA,IACnB,EAAO,SAAI,MAAM,YAAY;AAAA,MAE5B,eAAe,KAAK,KAAK;AAAA,IAC1B,EAAO;AAAA,MACN,OAAO,KAAK,KAAK;AAAA;AAAA,EAEnB;AAAA,EAEA,OAAO;AAAA,IACN,QAAQ,WAAW,MAAM;AAAA,IACzB;AAAA,IACA;AAAA,EACD;AAAA;AAGD,SAAS,kBAAkB,CAAC,MAAyB;AAAA,EAGpD,MAAM,UAAU;AAAA,IACf,GAAG,KAAK,OAAO,IACd,CAAC,GAAG,MACH,eAAe,gCAAgC,EAAE,SAAS,QAAQ,eAAe,EAAE,KACrF;AAAA,IACA,GAAG,KAAK,QAAQ,IACf,CAAC,GAAG,MACH,gBAAgB,gCAAgC,EAAE,SAAS,QAAQ,eAAe,EAAE,KACtF;AAAA,IACA,GAAG,KAAK,eAAe,IACtB,CAAC,IAAI,MACJ,kBAAkB,gCAAgC,GAAG,SAAS,QAAQ,eAAe,EAAE,KACzF;AAAA,EACD,EAAE,KAAK;AAAA,CAAI;AAAA,EAEX,MAAM,cAAc,KAAK,OACvB,IAAI,CAAC,GAAG,MAAM;AAAA,IACd,OAAO;AAAA,gBACM,EAAE;AAAA,aACL,EAAE;AAAA,sBACO;AAAA,cACR,KAAK,UAAU,EAAE,MAAM;AAAA,iBACpB,EAAE;AAAA;AAAA,GAEhB,EACA,KAAK;AAAA,CAAK;AAAA,EAEZ,MAAM,gBAAgB,KAAK,OAAO,IAAI,CAAC,MAAM,QAAQ,EAAE,UAAU,EAAE,KAAK;AAAA,CAAI;AAAA,EAE5E,MAAM,mBAAmB,KAAK,OAC5B,OAAO,CAAC,MAAM,EAAE,SAAS,EACzB,IAAI,CAAC,MAAM;AAAA,IACX,MAAM,SAAS,EAAE,OAAO,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,KAAK,IAAI;AAAA,IAC5D,OAAO,gBAAgB,EAAE,gBAAgB;AAAA,GACzC,EACA,KAAK;AAAA,CAAI;AAAA,EAEX,MAAM,eAAe,KAAK,QACxB,IAAI,CAAC,GAAG,MAAM;AAAA,IACd,OAAO;AAAA,gBACM,EAAE;AAAA,aACL,EAAE;AAAA,uBACQ;AAAA;AAAA,GAEpB,EACA,KAAK;AAAA,CAAK;AAAA,EAEZ,MAAM,sBAAsB,KAAK,eAC/B,IAAI,CAAC,IAAI,MAAM;AAAA,IACf,OAAO;AAAA,gBACM,GAAG,uBAAuB;AAAA,aAC7B,GAAG;AAAA,yBACS;AAAA;AAAA,GAEtB,EACA,KAAK;AAAA,CAAK;AAAA,EAEZ,OAAO;AAAA;AAAA;AAAA;AAAA,EAIN;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA;AAAA,EAIA,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAIhB,uBAAuB;AAAA;AAAA;AAAA;AAAA,EAIvB,iBAAiB;AAAA;AAAA,iDAGjB,mBACG;AAAA,EAAK;AAAA,4BACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CL,eAAe,gBAAgB,CAAC,eAA0C;AAAA,EACzE,IAAI;AAAA,IACH,MAAM,UAAU,MAAM,SAAQ,eAAe,EAAE,eAAe,KAAK,CAAC;AAAA,IACpE,OAAO,QACL,OACA,CAAC,MACA,EAAE,OAAO,KAAK,cAAc,KAAK,EAAE,IAAI,KAAK,CAAC,EAAE,KAAK,WAAW,GAAG,CACpE,EACC,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAClB,MAAM;AAAA,IACP,OAAO,CAAC;AAAA;AAAA;AAIV,eAAe,IAAI,CAAC,MAA+B;AAAA,EAClD,MAAM,OAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AAAA,EAC1C,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,WAAW,IAAI;AAAA,EACtD,IAAI,MAAM;AAAA,EACV,WAAW,KAAK,IAAI,WAAW,GAAG;AAAA,IAAG,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EAC1E,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA;AAGtB,eAAe,kBAAkB,CAAC,KAAa;AAAA,EAC9C,MAAM,aAAa,MAAK,KAAK,UAAU;AAAA,EACvC,QAAQ,IAAI,0BAA0B,YAAY;AAAA,EAElD,MAAM,cAAc,MAAM,SAAQ,YAAY,EAAE,eAAe,KAAK,CAAC;AAAA,EACrE,MAAM,UAOD,CAAC;AAAA,EAEN,WAAW,KAAK,aAAa;AAAA,IAC5B,IAAI,CAAC,EAAE,YAAY;AAAA,MAAG;AAAA,IACtB,MAAM,aAAa,EAAE;AAAA,IACrB,MAAM,aAAa,MAAK,YAAY,YAAY,SAAS;AAAA,IACzD,QAAQ,IAAI,gCAAgC,kBAAkB,YAAY;AAAA,IAC1E,MAAM,QAAQ,MAAM,iBAAiB,UAAU;AAAA,IAC/C,QAAQ,IAAI,2BAA2B,MAAM,KAAK,GAAG,GAAG;AAAA,IACxD,IAAI,CAAC,MAAM;AAAA,MAAQ;AAAA,IAEnB,WAAW,QAAQ,OAAO;AAAA,MACzB,MAAM,OAAO,KAAK,QAAQ,eAAe,EAAE;AAAA,MAC3C,MAAM,SAAS,MAAK,YAAY,IAAI;AAAA,MAEpC,IAAI,OAAO;AAAA,MACX,IAAI;AAAA,QACH,QAAQ,IAAI,2BAA2B,QAAQ;AAAA,QAC/C,MAAM,SAAS,MAAM,IAAI,MAAM;AAAA,UAC9B,aAAa,CAAC,MAAM;AAAA,UACpB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ,EAAE,uBAAuB,eAAe;AAAA,QACjD,CAAC;AAAA,QACD,IAAI,CAAC,OAAO;AAAA,UAAS,MAAM,IAAI,MAAM,cAAc;AAAA,QACnD,OAAO,MAAM,OAAO,QAAQ,GAAG,KAAK;AAAA,QACnC,OAAO,GAAG;AAAA,QACX,QAAQ,MACP,gDACA,QACA,CACD;AAAA,QACA;AAAA;AAAA,MAGD,MAAM,OAAO,MAAM,KAAK,IAAI;AAAA,MAC5B,MAAM,cAAc,MAAK,YAAY,UAAU,UAAU;AAAA,MACzD,MAAM,cAAc,MAAK,KAAK,WAAW;AAAA,MACzC,MAAM,UAAU,GAAG,QAAQ;AAAA,MAC3B,MAAM,SAAS,MAAK,aAAa,OAAO;AAAA,MACxC,MAAM,OAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,MAC5C,IAAI;AAAA,QACH,MAAM,SAAS,MAAM,IAAI,KAAK,MAAM,EAAE,OAAO;AAAA,QAC7C,IAAI,CAAC;AAAA,UAAQ,MAAM,WAAU,QAAQ,MAAM,OAAO;AAAA,QACjD,MAAM;AAAA,MAGR,IAAI,OAAY,CAAC;AAAA,MACjB,IAAI;AAAA,QACH,QAAQ,IAAI,0BAA0B,QAAQ;AAAA,QAC9C,MAAM,MAAM,GAAG,cAAc,MAAM,EAAE,UAAU,KAAK,IAAI;AAAA,QACxD,MAAM,IAAI,MAAa;AAAA,QACvB,OAAQ,EAAU,QAAQ,CAAC;AAAA,QAC1B,MAAM;AAAA,MAER,QAAQ,KAAK;AAAA,QACZ;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,MAAM,IAAI,cAAc;AAAA,QACxB,YACC,MACA,YAAY,QAAQ,OAAO,GAAG,IAC9B,MACA,SACC,QAAQ,QAAQ,GAAG;AAAA,QACrB;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAGA,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,KAAK,sEAAiD;AAAA,EAC5D,MAAM,KAAK,sBAAsB;AAAA,EACjC,MAAM,KAAK,gBAAgB;AAAA,EAC3B,MAAM,KAAK,EAAE;AAAA,EACb,MAAM,KAAK,2BAA2B;AAAA,EACtC,WAAW,KAAK,SAAS;AAAA,IACxB,MAAM,KACL,sBACC,EAAE,aACF,eACA,EAAE,OACF,eACA,EAAE,OACF,eACA,EAAE,OACF,iBACA,EAAE,YACF,cACA,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,IAC3B,KACF;AAAA,EACD;AAAA,EACA,MAAM,KAAK,aAAa;AAAA,EACxB,MAAM,KAAK,EAAE;AAAA,EACb,MAAM,KAAK,wDAAwD;AAAA,EACnE,MAAM,KACL,mFACD;AAAA,EACA,MAAM,KAAK,EAAE;AAAA,EACb,MAAM,KACL,6EACD;AAAA,EACA,MAAM,KACL,gGACD;AAAA,EACA,MAAM,KAAK,EAAE;AAAA,EACb,MAAM,KAAK,sDAAsD;AAAA,EACjE,MAAM,KACL,mFACD;AAAA,EACA,MAAM,KAAK,uDAAuD;AAAA,EAClE,MAAM,KAAK,EAAE;AAAA,EACb,MAAM,KACL,+FACD;AAAA,EACA,MAAM,KAAK,uDAAuD;AAAA,EAClE,MAAM,KAAK,4DAA4D;AAAA,EACvE,MAAM,KAAK,GAAG;AAAA,EACd,MAAM,KAAK,EAAE;AAAA,EAEb,MAAM,OAAM,MAAK,KAAK,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EACtD,MAAM,WAAU,MAAK,KAAK,iBAAiB,GAAG,MAAM,KAAK;AAAA,CAAI,GAAG,OAAO;AAAA,EACvE,QAAQ,IAAI,2BAA2B,MAAK,KAAK,iBAAiB,GAAG;AAAA,EAGrE,MAAM,iBAAiB,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;AAAA,EAC/D,MAAM,OAAM,MAAK,KAAK,sBAAsB,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAClE,WAAW,cAAc,gBAAgB;AAAA,IACxC,MAAM,QAAQ,QAAQ,OAAO,CAAC,MAAM,EAAE,eAAe,UAAU;AAAA,IAC/D,MAAM,KAAe,CAAC;AAAA,IACtB,GAAG,KAAK,sEAAiD;AAAA,IACzD,GAAG,KAAK,EAAE;AAAA,IACV,GAAG,KAAK,wBAAwB;AAAA,IAChC,WAAW,KAAK,OAAO;AAAA,MACtB,GAAG,KACF,oBAAoB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,MAC3J;AAAA,IACD;AAAA,IACA,GAAG,KAAK,IAAI;AAAA,IACZ,GAAG,KAAK,EAAE;AAAA,IACV,GAAG,KAAK,2BAA2B;AAAA,IACnC,GAAG,KAAK,mDAAmD;AAAA,IAC3D,GAAG,KAAK,EAAE;AAAA,IACV,GAAG,KAAK,6CAA6C;AAAA,IACrD,GAAG,KAAK,6BAA6B,gCAAgC;AAAA,IACrE,GAAG,KAAK,wBAAwB;AAAA,IAChC,GAAG,KAAK,GAAG;AAAA,IACX,GAAG,KAAK,EAAE;AAAA,IAEV,MAAM,WACL,MAAK,KAAK,wBAAwB,GAAG,eAAe,GACpD,GAAG,KAAK;AAAA,CAAI,GACZ,OACD;AAAA,IACA,QAAQ,IACP,2BAA2B,MAAK,KAAK,wBAAwB,GAAG,eAAe,GAChF;AAAA,EACD;AAAA;AAGD,eAAe,QAAQ,CAAC,KAAa;AAAA,EACpC,QAAQ,IAAI,sCAAsC;AAAA,EAGlD,MAAM,iBAAiB,GAAG;AAAA,EAG1B,MAAM,aAAa,MAAK,KAAK,UAAU;AAAA,EACvC,IAAI;AAAA,IACH,MAAM,QAAQ,MAAM,cAAc,UAAU;AAAA,IAC5C,MAAM,UAAU,MAAM,aAAa,UAAU;AAAA,IAC7C,MAAM,MAAM,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;AAAA,IACtD,MAAM,OAAO,kBAAkB,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,OAAO,GAAG,CAAC,CAAC;AAAA,IACpE,MAAM,KAAK,mBAAmB,IAAI;AAAA,IAClC,MAAM,OAAM,MAAK,KAAK,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACtD,MAAM,WAAU,MAAK,KAAK,aAAa,GAAG,IAAI,OAAO;AAAA,IACrD,QAAQ,IAAI,mCAAmC,MAAK,KAAK,aAAa,GAAG;AAAA,IACxE,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,4CAA4C,KAAK;AAAA,IAC/D,MAAM;AAAA;AAAA,EAIP,IAAI;AAAA,IACH,MAAM,mBAAmB,GAAG;AAAA,IAC5B,QAAQ,IACP,oCAAoC,MAAK,KAAK,iBAAiB,sBAChE;AAAA,IACC,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,6CAA6C,KAAK;AAAA,IAChE,MAAM;AAAA;AAAA,EAIP,MAAM,aAAuB,CAAC;AAAA,EAC9B,WAAW,KAAK,sEAAiD;AAAA,EACjE,WAAW,KAAK,sBAAsB;AAAA,EACtC,WAAW,KAAK,gBAAgB;AAAA,EAChC,WAAW,KAAK,EAAE;AAAA,EAClB,WAAW,KACV,iEACD;AAAA,EACA,WAAW,KAAK,EAAE;AAAA,EAClB,WAAW,KAAK,4BAA4B;AAAA,EAC5C,WAAW,KAAK,YAAY;AAAA,EAC5B,WAAW,KAAK,eAAe;AAAA,EAC/B,WAAW,KAAK,mBAAmB;AAAA,EACnC,WAAW,KAAK,2CAA2C;AAAA,EAC3D,WAAW,KAAK,aAAa;AAAA,EAC7B,WAAW,KAAK,EAAE;AAAA,EAClB,WAAW,KAAK,kDAAkD;AAAA,EAElE,MAAM,WAAU,MAAK,KAAK,YAAY,GAAG,WAAW,KAAK;AAAA,CAAI,GAAG,OAAO;AAAA,EAEvE,QAAQ,IAAI,kCAAkC,MAAK,KAAK,YAAY,GAAG;AAAA,EACvE,QAAQ,IAAI,sCAAqC;AAAA;AAGlD,eAA8B,GAAG,CAAC,MAAgB;AAAA,EACjD,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,MAAM,YAAY,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,IAAI;AAAA,EAEhE,IAAI,CAAC,WAAW;AAAA,IACf,MAAM,SAAS,GAAG;AAAA,IAClB,aAAa,GAAG;AAAA,IAChB;AAAA,EACD;AAAA,EAEA,QAAQ,IAAI,kCAAkC;AAAA,EAC9C,QAAQ,IAAI,qCAAqC;AAAA,EACjD,MAAM,SAAS,GAAG;AAAA,EAElB,IAAI;AAAA,IACH,MAAM,cAAc,GAAG;AAAA,IACtB,MAAM;AAAA,EAGR,MAAM,eAAe,OAAO,WAAmB;AAAA,IAC9C,MAAM,QAAQ;AAAA,MACb,OAAO,QAAQ,IAAI,QAAQ,GAAG,KAAK;AAAA,MACnC,OAAO,QAAQ,IAAI,gBAAgB,GAAG,KAAK;AAAA,MAC3C;AAAA,MACA;AAAA,IACD,EAAE,OAAO,OAAO;AAAA,IAChB,WAAW,KAAK,OAAO;AAAA,MACtB,IAAI;AAAA,QACH,MAAM,MAAM,oBAAoB,sBAAsB;AAAA,UACrD,QAAQ;AAAA,QACT,CAAC;AAAA,QACD,QAAQ,IACP,uCAAuC,KAAK,SAAS,KAAK,WAAW,IACtE;AAAA,QACA;AAAA,QACC,MAAM;AAAA,IACT;AAAA;AAAA,EAID,MAAM,aAAa,MAAK,KAAK,UAAU;AAAA,EACvC,QAAQ,IAAI,0BAA0B,2BAA2B;AAAA,EACjE,IAAI,WAAkC;AAAA,EACtC,MAAM,gBAAgB,MACrB,YACA,EAAE,WAAW,KAAK,GAClB,CAAC,KAAK,aAAa;AAAA,IAClB,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,IAAI;AAAA,MAAU,aAAa,QAAQ;AAAA,IACnC,WAAW,WAAW,YAAY;AAAA,MACjC,QAAQ,IAAI,gDAAgD;AAAA,MAC5D,IAAI;AAAA,QACH,MAAM,SAAS,GAAG;AAAA,QAClB,MAAM,cAAc,GAAG;AAAA,QACvB,MAAM,aAAa,eAAe;AAAA,QACjC,OAAO,GAAG;AAAA,QACX,QAAQ,MAAM,4CAA4C,CAAC;AAAA;AAAA,OAE1D,GAAG;AAAA,GAER;AAAA,EAGA,MAAM,aAAa,MAAK,KAAK,OAAO,QAAQ;AAAA,EAC5C,QAAQ,IACP,0BAA0B,0CAC3B;AAAA,EACA,IAAI,aAAoC;AAAA,EACxC,MAAM,YAAY,MAAM,YAAY,EAAE,WAAW,KAAK,GAAG,CAAC,KAAK,aAAa;AAAA,IAC3E,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,MAAM,OAAO,OAAO,QAAQ;AAAA,IAC5B,IAAI,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,cAAc;AAAA,MAAG;AAAA,IAChE,IAAI,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,UAAU;AAAA,MAAG;AAAA,IAC3D,IAAI,CAAC,qCAAqC,KAAK,IAAI;AAAA,MAAG;AAAA,IACtD,IAAI;AAAA,MAAY,aAAa,UAAU;AAAA,IACvC,aAAa,WAAW,YAAY;AAAA,MACnC,IAAI;AAAA,QACH,MAAM,cAAc,GAAG;AAAA,QACvB,MAAM,aAAa,eAAe;AAAA,QACjC,MAAM;AAAA,OACN,GAAG;AAAA,GACN;AAAA,EAGD,QAAQ,GAAG,UAAU,MAAM;AAAA,IAC1B,QAAQ,IAAI;AAAA,qCAAwC;AAAA,IACpD,IAAI;AAAA,MACH,cAAc,MAAM;AAAA,MACnB,MAAM;AAAA,IACR,IAAI;AAAA,MACH,UAAU,MAAM;AAAA,MACf,MAAM;AAAA,IACR,QAAQ,KAAK,CAAC;AAAA,GACd;AAAA;AAAA,IA9nBI,aAAa,qBACb,aAAa,YACb,gBAAgB,sBAChB,oBAAoB,uBACpB,yBAAyB,wBACzB,eAAe;AAAA;AAAA,EA7BrB;AAAA;;;ACGA,IAAM,WAAW;AAAA,EAChB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AACN;AAIA,eAAe,IAAI,GAAG;AAAA,EACrB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,EAEjC,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,YAAY,KAAK,OAAO,MAAM;AAAA,IAClE,WAAU;AAAA,IACV,QAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAEA,MAAM,UAAU,KAAK;AAAA,EAErB,IAAI,CAAC,SAAS,UAAU;AAAA,IACvB,QAAQ,MAAM,oBAAoB,SAAS;AAAA,IAC3C,QAAQ,MAAM,EAAE;AAAA,IAChB,WAAU;AAAA,IACV,QAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAEA,IAAI;AAAA,IACH,MAAM,SAAS,MAAM,SAAS,SAAS;AAAA,IACvC,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,IACjC,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,4BAA4B,KAAK;AAAA,IAC/C,QAAQ,KAAK,CAAC;AAAA;AAAA;AAIhB,SAAS,UAAS,GAAG;AAAA,EACpB,QAAQ,IAAI,4CAA4C;AAAA,EACxD,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,QAAQ;AAAA,EACpB,QAAQ,IAAI,+BAA+B;AAAA,EAC3C,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,WAAW;AAAA,EACvB,QAAQ,IAAI,2DAA2D;AAAA,EACvE,QAAQ,IAAI,8CAA8C;AAAA,EAC1D,QAAQ,IAAI,oCAAoC;AAAA,EAChD,QAAQ,IAAI,wCAAwC;AAAA,EACpD,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,UAAU;AAAA,EACtB,QAAQ,IAAI,yBAAyB;AAAA,EACrC,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,WAAW;AAAA,EACvB,QAAQ,IAAI,eAAe;AAAA,EAC3B,QAAQ,IAAI,uBAAuB;AAAA,EACnC,QAAQ,IAAI,uBAAuB;AAAA,EACnC,QAAQ,IAAI,0BAA0B;AAAA,EACtC,QAAQ,IAAI,2BAA2B;AAAA;AAGxC,KAAK;",
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "35E92044471CB3FF64756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/core/index.js
CHANGED
|
@@ -161,11 +161,16 @@ async function transpileFile(filePath, originalPath, options, bundleCache) {
|
|
|
161
161
|
entrypoints: [filePath],
|
|
162
162
|
target: "browser",
|
|
163
163
|
format: "esm",
|
|
164
|
-
minify: options.minify
|
|
164
|
+
minify: options.minify ? {
|
|
165
|
+
syntax: false,
|
|
166
|
+
identifiers: true,
|
|
167
|
+
whitespace: true,
|
|
168
|
+
keepNames: true
|
|
169
|
+
} : false,
|
|
165
170
|
splitting: false,
|
|
166
171
|
sourcemap: sm,
|
|
167
172
|
define: {
|
|
168
|
-
"process.env.
|
|
173
|
+
"process.env.NODE_ENV": options.minify ? '"production"' : '"development"'
|
|
169
174
|
}
|
|
170
175
|
});
|
|
171
176
|
}
|
|
@@ -222,170 +227,15 @@ async function getBundleUrlsFor(modules, clientDir, prefix, options, bundleCache
|
|
|
222
227
|
}
|
|
223
228
|
return urls;
|
|
224
229
|
}
|
|
225
|
-
// packages/core/src/content/builder.ts
|
|
226
|
-
import { mkdir, readdir } from "node:fs/promises";
|
|
227
|
-
import { pathToFileURL } from "node:url";
|
|
228
|
-
async function sha8(text) {
|
|
229
|
-
const data = new TextEncoder().encode(text);
|
|
230
|
-
const buf = await crypto.subtle.digest("SHA-256", data);
|
|
231
|
-
let hex = "";
|
|
232
|
-
for (const b of new Uint8Array(buf))
|
|
233
|
-
hex += b.toString(16).padStart(2, "0");
|
|
234
|
-
return hex.slice(0, 8);
|
|
235
|
-
}
|
|
236
|
-
async function buildChunkFor(absSrc, cwd, collection, name) {
|
|
237
|
-
try {
|
|
238
|
-
const result = await Bun.build({
|
|
239
|
-
entrypoints: [absSrc],
|
|
240
|
-
target: "browser",
|
|
241
|
-
format: "esm",
|
|
242
|
-
splitting: false,
|
|
243
|
-
sourcemap: "none",
|
|
244
|
-
minify: false,
|
|
245
|
-
define: { "process.env.BUN_ENV": '"production"' }
|
|
246
|
-
});
|
|
247
|
-
if (!result.success)
|
|
248
|
-
return null;
|
|
249
|
-
const code = await result.outputs[0]?.text();
|
|
250
|
-
const hash2 = await sha8(code);
|
|
251
|
-
const relDir = join2(".reroute", "chunks", collection);
|
|
252
|
-
const absDir = join2(cwd, relDir);
|
|
253
|
-
const outFile = `${name}.${hash2}.js`;
|
|
254
|
-
const outPath = join2(absDir, outFile);
|
|
255
|
-
await mkdir(absDir, { recursive: true });
|
|
256
|
-
const exists = await Bun.file(outPath).exists();
|
|
257
|
-
if (!exists)
|
|
258
|
-
await Bun.write(outPath, code);
|
|
259
|
-
const url = `/${join2(relDir, outFile).replace(/\\+/g, "/")}`;
|
|
260
|
-
return { outPath, url, code };
|
|
261
|
-
} catch (e) {
|
|
262
|
-
console.error("[reroute] Failed to build content chunk:", absSrc, e);
|
|
263
|
-
return null;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
async function getMetaFor(absSrc, isWatchMode2) {
|
|
267
|
-
try {
|
|
268
|
-
const url = pathToFileURL(absSrc).href + (isWatchMode2 ? `?t=${Date.now()}` : "");
|
|
269
|
-
const m = await import(url);
|
|
270
|
-
return m.meta || m.frontmatter || {};
|
|
271
|
-
} catch {
|
|
272
|
-
return {};
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
async function rebuildContentArtifacts(cwd, clientDir, isWatchMode2 = true) {
|
|
276
|
-
const routesRoot = join2(clientDir, "routes");
|
|
277
|
-
const items = [];
|
|
278
|
-
try {
|
|
279
|
-
const entries = await readdir(routesRoot, { withFileTypes: true });
|
|
280
|
-
for (const dir of entries) {
|
|
281
|
-
if (!dir.isDirectory())
|
|
282
|
-
continue;
|
|
283
|
-
const collection = dir.name;
|
|
284
|
-
const contentDir = join2(routesRoot, collection, "content");
|
|
285
|
-
let contentFiles = [];
|
|
286
|
-
try {
|
|
287
|
-
const list = await readdir(contentDir, { withFileTypes: true });
|
|
288
|
-
contentFiles = list.filter((e) => e.isFile() && /\.(tsx|ts)$/.test(e.name) && !e.name.startsWith("_")).map((e) => e.name);
|
|
289
|
-
} catch {
|
|
290
|
-
continue;
|
|
291
|
-
}
|
|
292
|
-
for (const file of contentFiles) {
|
|
293
|
-
const name = file.replace(/\.(tsx|ts)$/, "");
|
|
294
|
-
const absSrc = join2(contentDir, file);
|
|
295
|
-
const chunk = await buildChunkFor(absSrc, cwd, collection, name);
|
|
296
|
-
if (!chunk)
|
|
297
|
-
continue;
|
|
298
|
-
const meta = await getMetaFor(absSrc, isWatchMode2);
|
|
299
|
-
items.push({
|
|
300
|
-
collection,
|
|
301
|
-
name,
|
|
302
|
-
slug: name,
|
|
303
|
-
href: `/${collection}/${name}`,
|
|
304
|
-
moduleUrl: chunk.url,
|
|
305
|
-
meta
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
} catch (e) {
|
|
310
|
-
console.error("[reroute] Failed to scan content routes:", e);
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
try {
|
|
314
|
-
const lines = [];
|
|
315
|
-
lines.push("// \uD83D\uDEA8 Auto-generated by Reroute - DO NOT EDIT \uD83D\uDEA8");
|
|
316
|
-
lines.push("/* eslint-disable */");
|
|
317
|
-
lines.push("// @ts-nocheck");
|
|
318
|
-
lines.push("");
|
|
319
|
-
lines.push("export const contents = [");
|
|
320
|
-
for (const e of items) {
|
|
321
|
-
lines.push(" { collection: '" + e.collection + "', slug: '" + e.slug + "', name: '" + e.name + "', href: '" + e.href + "', module: '" + e.moduleUrl + "', meta: " + JSON.stringify(e.meta || {}) + " },");
|
|
322
|
-
}
|
|
323
|
-
lines.push("] as const;");
|
|
324
|
-
lines.push("");
|
|
325
|
-
lines.push("export const byCollection: Record<string, any[]> = {};");
|
|
326
|
-
lines.push("for (const c of contents) { (byCollection[c.collection] ||= []).push(c as any); }");
|
|
327
|
-
lines.push("");
|
|
328
|
-
lines.push("export const byCollectionAndName: Record<string, Record<string, any>> = {};");
|
|
329
|
-
lines.push("for (const c of contents) { ((byCollectionAndName[c.collection] ||= {})[c.name] = c as any); }");
|
|
330
|
-
lines.push("");
|
|
331
|
-
lines.push("export type Collections = keyof typeof byCollection;");
|
|
332
|
-
lines.push("export type Names<C extends Collections> = keyof (typeof byCollectionAndName)[C];");
|
|
333
|
-
lines.push("export type ContentEntry = (typeof contents)[number];");
|
|
334
|
-
lines.push("");
|
|
335
|
-
lines.push("export function getContentEntry<C extends string, N extends string>(collection: C, name: N) {");
|
|
336
|
-
lines.push(" const m = (byCollectionAndName as any)[collection];");
|
|
337
|
-
lines.push(" return m ? (m as Record<string, any>)[name] : undefined;");
|
|
338
|
-
lines.push("}");
|
|
339
|
-
lines.push("");
|
|
340
|
-
await mkdir(join2(cwd, ".reroute"), { recursive: true });
|
|
341
|
-
await Bun.write(join2(cwd, ".reroute", "content.ts"), lines.join(`
|
|
342
|
-
`));
|
|
343
|
-
} catch (e) {
|
|
344
|
-
console.error("[reroute] Failed to write .reroute/content.ts:", e);
|
|
345
|
-
}
|
|
346
|
-
try {
|
|
347
|
-
const byCol = new Map;
|
|
348
|
-
for (const it of items) {
|
|
349
|
-
const arr = byCol.get(it.collection) || [];
|
|
350
|
-
arr.push(it);
|
|
351
|
-
byCol.set(it.collection, arr);
|
|
352
|
-
}
|
|
353
|
-
await mkdir(join2(cwd, ".reroute", "collections"), { recursive: true });
|
|
354
|
-
for (const [collection, list] of byCol) {
|
|
355
|
-
const js = [];
|
|
356
|
-
js.push("// \uD83D\uDEA8 Auto-generated by Reroute - DO NOT EDIT \uD83D\uDEA8");
|
|
357
|
-
js.push("");
|
|
358
|
-
js.push("export const items = [");
|
|
359
|
-
for (const e of list) {
|
|
360
|
-
js.push(` { collection: '${e.collection}', slug: '${e.slug}', name: '${e.name}', href: '${e.href}', module: '${e.moduleUrl}', meta: ${JSON.stringify(e.meta || {})} },`);
|
|
361
|
-
}
|
|
362
|
-
js.push("];");
|
|
363
|
-
js.push("");
|
|
364
|
-
js.push("export const byName = {};");
|
|
365
|
-
js.push("for (const it of items) { byName[it.name] = it; }");
|
|
366
|
-
js.push("");
|
|
367
|
-
js.push("export function get(collectionName, name) {");
|
|
368
|
-
js.push(` if (collectionName !== '${collection}') return undefined;`);
|
|
369
|
-
js.push(" return byName[name];");
|
|
370
|
-
js.push("}");
|
|
371
|
-
js.push("");
|
|
372
|
-
await Bun.write(join2(cwd, ".reroute", "collections", `${collection}.js`), js.join(`
|
|
373
|
-
`));
|
|
374
|
-
}
|
|
375
|
-
} catch (e) {
|
|
376
|
-
console.error("[reroute] Failed to write .reroute/collections/*:", e);
|
|
377
|
-
}
|
|
378
|
-
console.log("[reroute] Content artifacts up-to-date");
|
|
379
|
-
}
|
|
380
230
|
// packages/core/src/content/discovery.ts
|
|
381
|
-
import { readdir
|
|
231
|
+
import { readdir, stat as stat2 } from "node:fs/promises";
|
|
382
232
|
|
|
383
233
|
// packages/core/src/content/metadata.ts
|
|
384
234
|
import { stat } from "node:fs/promises";
|
|
385
|
-
import { pathToFileURL
|
|
235
|
+
import { pathToFileURL } from "node:url";
|
|
386
236
|
async function getContentMeta(absPath, isWatchMode2) {
|
|
387
237
|
try {
|
|
388
|
-
const url =
|
|
238
|
+
const url = pathToFileURL(absPath).href;
|
|
389
239
|
const mod = await import(`${url}${isWatchMode2 ? `?t=${Date.now()}` : ""}`);
|
|
390
240
|
const meta = mod.meta || mod.frontmatter || {};
|
|
391
241
|
if (meta && typeof meta === "object")
|
|
@@ -422,7 +272,7 @@ function escapeHtml(input) {
|
|
|
422
272
|
async function listContentFiles(dir, baseRel) {
|
|
423
273
|
const out = [];
|
|
424
274
|
try {
|
|
425
|
-
const entries = await
|
|
275
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
426
276
|
for (const entry of entries) {
|
|
427
277
|
const full = join2(dir, entry.name);
|
|
428
278
|
const rel = join2(baseRel, entry.name);
|
|
@@ -467,7 +317,7 @@ async function discoverCollections(clientDir) {
|
|
|
467
317
|
const root = join2(clientDir, "routes");
|
|
468
318
|
const collections = new Set;
|
|
469
319
|
try {
|
|
470
|
-
const entries = await
|
|
320
|
+
const entries = await readdir(root, { withFileTypes: true });
|
|
471
321
|
for (const entry of entries) {
|
|
472
322
|
if (entry.isDirectory()) {
|
|
473
323
|
const contentDir = join2(root, entry.name, "content");
|
|
@@ -489,11 +339,11 @@ async function generateContentRegistry(cwd) {
|
|
|
489
339
|
} catch {}
|
|
490
340
|
}
|
|
491
341
|
// packages/core/src/ssr/data.ts
|
|
492
|
-
import { pathToFileURL as
|
|
342
|
+
import { pathToFileURL as pathToFileURL3 } from "node:url";
|
|
493
343
|
|
|
494
344
|
// packages/core/src/ssr/modules.ts
|
|
495
|
-
import { readdir as
|
|
496
|
-
import { pathToFileURL as
|
|
345
|
+
import { readdir as readdir2, stat as stat3 } from "node:fs/promises";
|
|
346
|
+
import { pathToFileURL as pathToFileURL2 } from "node:url";
|
|
497
347
|
async function importContentModuleForPath(pathname, clientDir, cwd, isWatchMode2) {
|
|
498
348
|
try {
|
|
499
349
|
const parts = pathname.split("/").filter(Boolean);
|
|
@@ -503,20 +353,20 @@ async function importContentModuleForPath(pathname, clientDir, cwd, isWatchMode2
|
|
|
503
353
|
const name = parts[1];
|
|
504
354
|
try {
|
|
505
355
|
const registryPath = join2(cwd, ".reroute", "content.ts");
|
|
506
|
-
const reg = await import(
|
|
356
|
+
const reg = await import(pathToFileURL2(registryPath).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
507
357
|
const get = reg?.getContentEntry;
|
|
508
358
|
const entry = typeof get === "function" ? get(collection, name) : undefined;
|
|
509
359
|
const moduleUrl = entry?.module;
|
|
510
360
|
if (moduleUrl?.endsWith(".js")) {
|
|
511
361
|
const abs = join2(cwd, moduleUrl.replace(/^\//, ""));
|
|
512
|
-
const href =
|
|
362
|
+
const href = pathToFileURL2(abs).href + (isWatchMode2 ? `?t=${Date.now()}` : "");
|
|
513
363
|
const mod = await import(href);
|
|
514
364
|
return mod;
|
|
515
365
|
}
|
|
516
366
|
} catch {}
|
|
517
367
|
try {
|
|
518
368
|
const chunkDir = join2(cwd, ".reroute", "chunks", collection);
|
|
519
|
-
const files = await
|
|
369
|
+
const files = await readdir2(chunkDir);
|
|
520
370
|
const matches = files.filter((n) => n.startsWith(`${name}.`) && n.endsWith(".js"));
|
|
521
371
|
if (matches.length) {
|
|
522
372
|
let latest = matches[0];
|
|
@@ -531,7 +381,7 @@ async function importContentModuleForPath(pathname, clientDir, cwd, isWatchMode2
|
|
|
531
381
|
} catch {}
|
|
532
382
|
}
|
|
533
383
|
const absChunk = join2(chunkDir, latest);
|
|
534
|
-
const href =
|
|
384
|
+
const href = pathToFileURL2(absChunk).href + (isWatchMode2 ? `?t=${Date.now()}` : "");
|
|
535
385
|
const mod = await import(href);
|
|
536
386
|
return mod;
|
|
537
387
|
}
|
|
@@ -545,7 +395,7 @@ async function importContentModuleForPath(pathname, clientDir, cwd, isWatchMode2
|
|
|
545
395
|
else if (await Bun.file(srcTs).exists())
|
|
546
396
|
absSrc = srcTs;
|
|
547
397
|
if (absSrc) {
|
|
548
|
-
const href =
|
|
398
|
+
const href = pathToFileURL2(absSrc).href;
|
|
549
399
|
const mod = await (isWatchMode2 ? import(`${href}?t=${Date.now()}`) : import(href));
|
|
550
400
|
return mod;
|
|
551
401
|
}
|
|
@@ -601,14 +451,14 @@ async function computeSSRDataForPath(params) {
|
|
|
601
451
|
} catch {}
|
|
602
452
|
try {
|
|
603
453
|
const routesPath = join2(cwd, ".reroute", "routes.ts");
|
|
604
|
-
const m = await import(
|
|
454
|
+
const m = await import(pathToFileURL3(routesPath).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
605
455
|
const match = typeof m.matchRoute === "function" ? m.matchRoute(pathname) : null;
|
|
606
456
|
const r = match?.route;
|
|
607
457
|
const paramsValue = match?.params || {};
|
|
608
458
|
if (r && typeof r.path === "string") {
|
|
609
459
|
try {
|
|
610
460
|
const abs = join2(clientDir, "routes", String(r.path));
|
|
611
|
-
const mod = await import(
|
|
461
|
+
const mod = await import(pathToFileURL3(abs).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
612
462
|
const ssr = mod?.ssr;
|
|
613
463
|
const dataFn = ssr?.data;
|
|
614
464
|
if (typeof dataFn === "function") {
|
|
@@ -620,8 +470,8 @@ async function computeSSRDataForPath(params) {
|
|
|
620
470
|
return null;
|
|
621
471
|
}
|
|
622
472
|
// packages/core/src/ssr/render.ts
|
|
623
|
-
import { readdir as
|
|
624
|
-
import { pathToFileURL as
|
|
473
|
+
import { readdir as readdir3, stat as stat4 } from "node:fs/promises";
|
|
474
|
+
import { pathToFileURL as pathToFileURL4 } from "node:url";
|
|
625
475
|
|
|
626
476
|
// node_modules/dedent/dist/dedent.mjs
|
|
627
477
|
function ownKeys(object, enumerableOnly) {
|
|
@@ -855,7 +705,7 @@ async function renderSSRDocument(options) {
|
|
|
855
705
|
}
|
|
856
706
|
try {
|
|
857
707
|
const registryPath = join2(cwd, ".reroute", "content.ts");
|
|
858
|
-
const reg = await import(
|
|
708
|
+
const reg = await import(pathToFileURL4(registryPath).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
859
709
|
const get = reg?.getContentEntry;
|
|
860
710
|
const entry = typeof get === "function" ? get(collection, name) : undefined;
|
|
861
711
|
const moduleUrl = entry?.module;
|
|
@@ -866,7 +716,7 @@ async function renderSSRDocument(options) {
|
|
|
866
716
|
if (!modulePath) {
|
|
867
717
|
try {
|
|
868
718
|
const chunkDir = join2(cwd, ".reroute", "chunks", collection);
|
|
869
|
-
const files = await
|
|
719
|
+
const files = await readdir3(chunkDir);
|
|
870
720
|
const candidates = files.filter((n) => n.startsWith(`${name}.`) && n.endsWith(".js"));
|
|
871
721
|
if (candidates.length) {
|
|
872
722
|
let latest = candidates[0];
|
|
@@ -930,14 +780,14 @@ async function renderSSRDocument(options) {
|
|
|
930
780
|
} catch {}
|
|
931
781
|
try {
|
|
932
782
|
const routesPath = join2(cwd, ".reroute", "routes.ts");
|
|
933
|
-
const m = await import(
|
|
783
|
+
const m = await import(pathToFileURL4(routesPath).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
934
784
|
const match = typeof m.matchRoute === "function" ? m.matchRoute(pathname) : null;
|
|
935
785
|
const r = match?.route;
|
|
936
786
|
const params = match?.params || {};
|
|
937
787
|
if (r && typeof r.path === "string") {
|
|
938
788
|
try {
|
|
939
789
|
const abs = join2(clientDir, "routes", String(r.path));
|
|
940
|
-
const mod = await import(
|
|
790
|
+
const mod = await import(pathToFileURL4(abs).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
941
791
|
const ssr = mod?.ssr;
|
|
942
792
|
const dataFn = ssr?.data;
|
|
943
793
|
if (typeof dataFn === "function") {
|
|
@@ -954,7 +804,7 @@ async function renderSSRDocument(options) {
|
|
|
954
804
|
let __byCollectionForSSR = {};
|
|
955
805
|
try {
|
|
956
806
|
const p = join2(cwd, ".reroute", "content.ts");
|
|
957
|
-
const mod = await import(
|
|
807
|
+
const mod = await import(pathToFileURL4(p).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
958
808
|
__byCollectionForSSR = mod?.byCollection || {};
|
|
959
809
|
try {
|
|
960
810
|
globalThis.__REROUTE_COLLECTIONS__ = __byCollectionForSSR;
|
|
@@ -1080,7 +930,7 @@ ${ssrHead}`;
|
|
|
1080
930
|
} catch {}
|
|
1081
931
|
try {
|
|
1082
932
|
const routesPath = join2(cwd, ".reroute", "routes.ts");
|
|
1083
|
-
const m = await import(
|
|
933
|
+
const m = await import(pathToFileURL4(routesPath).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
1084
934
|
const match = typeof m.matchRoute === "function" ? m.matchRoute(pathname) : null;
|
|
1085
935
|
const r = match?.route;
|
|
1086
936
|
if (!r) {
|
|
@@ -1089,7 +939,7 @@ ${ssrHead}`;
|
|
|
1089
939
|
if (r && typeof r.path === "string") {
|
|
1090
940
|
try {
|
|
1091
941
|
const abs = join2(clientDir, "routes", String(r.path));
|
|
1092
|
-
const mod = await import(
|
|
942
|
+
const mod = await import(pathToFileURL4(abs).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
1093
943
|
const meta = mod?.meta;
|
|
1094
944
|
const ssr = mod?.ssr;
|
|
1095
945
|
if (meta)
|
|
@@ -1124,7 +974,7 @@ ${ssrHead}`;
|
|
|
1124
974
|
if (chosen && typeof chosen.path === "string") {
|
|
1125
975
|
try {
|
|
1126
976
|
const abs = join2(clientDir, "routes", String(chosen.path));
|
|
1127
|
-
const mod = await import(
|
|
977
|
+
const mod = await import(pathToFileURL4(abs).href + (isWatchMode2 ? `?t=${Date.now()}` : ""));
|
|
1128
978
|
const meta = mod?.meta;
|
|
1129
979
|
const ssr = mod?.ssr;
|
|
1130
980
|
if (meta)
|
|
@@ -1248,7 +1098,6 @@ export {
|
|
|
1248
1098
|
stripEnd,
|
|
1249
1099
|
seedSSRModuleForPath,
|
|
1250
1100
|
renderSSRDocument,
|
|
1251
|
-
rebuildContentArtifacts,
|
|
1252
1101
|
loadIndexHtml,
|
|
1253
1102
|
listContentFiles,
|
|
1254
1103
|
join2 as join,
|
|
@@ -1270,4 +1119,4 @@ export {
|
|
|
1270
1119
|
LRUCache
|
|
1271
1120
|
};
|
|
1272
1121
|
|
|
1273
|
-
//# debugId=
|
|
1122
|
+
//# debugId=7C4A82EE42515C3664756E2164756E21
|