reroute-js 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +1 -0
  2. package/_/basic/package.json +4 -4
  3. package/_/basic/src/client/index.html +1 -1
  4. package/_/basic/src/index.ts +1 -3
  5. package/_/blog/package.json +4 -4
  6. package/_/blog/src/client/App.tsx +1 -0
  7. package/_/blog/src/client/index.html +1 -1
  8. package/_/blog/src/client/routes/blog/content/1-hello-world.tsx +1 -1
  9. package/_/blog/src/client/routes/blog/content/3-markdown-with-syntax-highlighting.mdx +213 -0
  10. package/_/blog/src/client/routes/blog/content/4-content-in-markdown.md +143 -0
  11. package/_/blog/src/client/routes/blog/content/5-mdx-with-components.mdx +267 -0
  12. package/_/blog/src/client/routes/blog/index.tsx +59 -0
  13. package/_/blog/src/client/routes/client.tsx +564 -0
  14. package/_/blog/src/client/routes/docs.tsx +670 -0
  15. package/_/blog/src/client/routes/index.tsx +37 -0
  16. package/_/blog/src/client/routes/markdown-demo.md +169 -0
  17. package/_/blog/src/client/routes/markdown.tsx +160 -0
  18. package/_/blog/src/index.ts +5 -2
  19. package/_/store/package.json +4 -4
  20. package/_/store/src/client/index.html +1 -1
  21. package/_/store/src/index.ts +1 -1
  22. package/cli/bin.d.ts +1 -1
  23. package/cli/bin.js +806 -14
  24. package/cli/bin.js.map +11 -7
  25. package/cli/index.d.ts +1 -1
  26. package/cli/index.js +52 -3
  27. package/cli/index.js.map +4 -3
  28. package/cli/src/cli.d.ts +1 -1
  29. package/cli/src/commands/boot.d.ts +1 -1
  30. package/cli/src/commands/build.d.ts +19 -0
  31. package/cli/src/commands/build.d.ts.map +1 -0
  32. package/cli/src/commands/dev.d.ts +18 -0
  33. package/cli/src/commands/dev.d.ts.map +1 -0
  34. package/cli/src/commands/gen.d.ts +1 -1
  35. package/cli/src/commands/init.d.ts +1 -1
  36. package/cli/src/commands/start.d.ts +19 -0
  37. package/cli/src/commands/start.d.ts.map +1 -0
  38. package/cli/src/libs/index.d.ts +2 -1
  39. package/cli/src/libs/index.d.ts.map +1 -1
  40. package/cli/src/libs/log.d.ts +46 -0
  41. package/cli/src/libs/log.d.ts.map +1 -0
  42. package/cli/src/libs/markdown-processor.d.ts +1 -1
  43. package/cli/src/libs/markdown.d.ts +1 -1
  44. package/cli/src/libs/tailwind.d.ts +1 -1
  45. package/cli/src/libs/version.d.ts +1 -1
  46. package/core/index.d.ts +1 -1
  47. package/core/index.js +5 -5
  48. package/core/index.js.map +3 -3
  49. package/core/src/bundler/hash.d.ts +1 -1
  50. package/core/src/bundler/index.d.ts +1 -1
  51. package/core/src/bundler/transpile.d.ts +1 -1
  52. package/core/src/content/discovery.d.ts +1 -1
  53. package/core/src/content/index.d.ts +1 -1
  54. package/core/src/content/metadata.d.ts +1 -1
  55. package/core/src/content/registry.d.ts +1 -1
  56. package/core/src/index.d.ts +1 -1
  57. package/core/src/ssr/data.d.ts +1 -1
  58. package/core/src/ssr/index.d.ts +1 -1
  59. package/core/src/ssr/modules.d.ts +1 -1
  60. package/core/src/ssr/render.d.ts +1 -1
  61. package/core/src/ssr/seed.d.ts +1 -1
  62. package/core/src/template/html.d.ts +1 -1
  63. package/core/src/template/index.d.ts +1 -1
  64. package/core/src/types.d.ts +1 -1
  65. package/core/src/utils/cache.d.ts +1 -1
  66. package/core/src/utils/compression.d.ts +1 -1
  67. package/core/src/utils/index.d.ts +1 -1
  68. package/core/src/utils/mime.d.ts +1 -1
  69. package/core/src/utils/path.d.ts +1 -1
  70. package/elysia/index.d.ts +1 -1
  71. package/elysia/index.js +5 -5
  72. package/elysia/index.js.map +3 -3
  73. package/elysia/src/index.d.ts +1 -1
  74. package/elysia/src/libs/http.d.ts +1 -1
  75. package/elysia/src/libs/image.d.ts +1 -1
  76. package/elysia/src/plugin.d.ts +1 -1
  77. package/elysia/src/routes/artifacts.d.ts +1 -1
  78. package/elysia/src/routes/content.d.ts +1 -1
  79. package/elysia/src/routes/dev.d.ts +1 -1
  80. package/elysia/src/routes/image.d.ts +1 -1
  81. package/elysia/src/routes/ssr.d.ts +1 -1
  82. package/elysia/src/routes/static.d.ts +1 -1
  83. package/elysia/src/types.d.ts +1 -1
  84. package/package.json +6 -1
  85. package/react/index.d.ts +1 -1
  86. package/react/index.js +50 -24
  87. package/react/index.js.map +3 -3
  88. package/react/src/components/ClientOnly.d.ts +1 -1
  89. package/react/src/components/ContentRoute.d.ts +1 -1
  90. package/react/src/components/Image.d.ts +1 -1
  91. package/react/src/components/Link.d.ts +1 -1
  92. package/react/src/components/Markdown.d.ts +1 -1
  93. package/react/src/components/Outlet.d.ts +1 -1
  94. package/react/src/components/index.d.ts +1 -1
  95. package/react/src/hooks/index.d.ts +1 -1
  96. package/react/src/hooks/useContent.d.ts +1 -1
  97. package/react/src/hooks/useData.d.ts +1 -1
  98. package/react/src/hooks/useNavigate.d.ts +1 -1
  99. package/react/src/hooks/useParams.d.ts +1 -1
  100. package/react/src/hooks/useRouter.d.ts +1 -1
  101. package/react/src/hooks/useSearchParams.d.ts +1 -1
  102. package/react/src/index.d.ts +1 -1
  103. package/react/src/providers/ContentProvider.d.ts +1 -1
  104. package/react/src/providers/RerouteProvider.d.ts +1 -1
  105. package/react/src/providers/RouterProvider.d.ts +1 -1
  106. package/react/src/providers/RouterProvider.d.ts.map +1 -1
  107. package/react/src/providers/index.d.ts +1 -1
  108. package/react/src/types/any.d.ts +1 -1
  109. package/react/src/types/index.d.ts +1 -1
  110. package/react/src/types/router.d.ts +1 -1
  111. package/react/src/utils/content.d.ts +1 -1
  112. package/react/src/utils/head.d.ts +1 -1
  113. package/react/src/utils/index.d.ts +1 -1
  114. package/_/blog/src/client/components/Counter.tsx +0 -14
package/cli/bin.js.map CHANGED
@@ -1,17 +1,21 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../packages/cli/src/libs/version.ts", "../../packages/cli/src/commands/init.ts", "../../packages/cli/src/libs/markdown.ts", "../../packages/cli/src/libs/markdown-processor.ts", "../../packages/cli/src/libs/tailwind.ts", "../../packages/cli/src/commands/gen.ts", "../../packages/cli/src/commands/boot.ts", "../../packages/cli/src/cli.ts"],
3
+ "sources": ["../../packages/cli/src/libs/version.ts", "../../packages/cli/src/commands/init.ts", "../../packages/cli/src/libs/markdown.ts", "../../packages/cli/src/libs/markdown-processor.ts", "../../packages/cli/src/libs/tailwind.ts", "../../packages/cli/src/commands/gen.ts", "../../packages/cli/src/commands/boot.ts", "../../packages/cli/src/libs/log.ts", "../../packages/cli/src/commands/dev.ts", "../../packages/cli/src/commands/start.ts", "../../packages/cli/src/commands/build.ts", "../../packages/cli/src/cli.ts"],
4
4
  "sourcesContent": [
5
5
  "import path from 'node:path';\n\n// Version and commit injected at build time\ndeclare const __REROUTE_VERSION__: string;\ndeclare const __REROUTE_COMMIT__: string;\n\nexport async function getVersionString(): Promise<string> {\n\tconst version = await getVersion();\n\tconst commit = await getCommit();\n\treturn `Reroute v${version} ${commit}`;\n}\n\nasync function getVersion(): Promise<string> {\n\t// Use version injected at build time\n\tif (typeof __REROUTE_VERSION__ !== 'undefined') {\n\t\treturn __REROUTE_VERSION__;\n\t}\n\n\t// Fallback for development: try to find package.json\n\tconst possiblePaths = [\n\t\tpath.join(import.meta.dir, '../../../../package.json'),\n\t\tpath.join(import.meta.dir, '../../../package.json'),\n\t\tpath.join(import.meta.dir, '../../package.json'),\n\t\tpath.join(import.meta.dir, '../package.json'),\n\t];\n\n\tfor (const pkgPath of possiblePaths) {\n\t\ttry {\n\t\t\tconst pkg = await Bun.file(pkgPath).json();\n\t\t\treturn pkg.version;\n\t\t} catch {}\n\t}\n\n\treturn 'unknown';\n}\n\nasync function getCommit(): Promise<string> {\n\t// Use commit injected at build time\n\tif (typeof __REROUTE_COMMIT__ !== 'undefined') {\n\t\treturn __REROUTE_COMMIT__;\n\t}\n\n\t// Fallback for development\n\treturn 'dev';\n}\n",
6
- "#!/usr/bin/env bun\n\n/**\n * Reroute init command\n *\n * Scaffold a new Reroute project with templates\n */\n\nimport { existsSync } from 'node:fs';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { getVersionString } from '../libs/version';\n\ninterface InitOptions {\n\tprojectName: string;\n\ttemplate: 'basic' | 'blog' | 'store';\n}\n\nexport default async function init(args: string[]) {\n\tconst options = parseArgs(args);\n\n\tif (!options) {\n\t\tawait printHelp();\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\tawait scaffoldProject(options);\n\t} catch (error) {\n\t\tconsole.error('Error scaffolding project:', error);\n\t\tprocess.exit(1);\n\t}\n}\n\nfunction parseArgs(args: string[]): InitOptions | null {\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\treturn null;\n\t}\n\n\tconst projectName = args[0];\n\n\tif (!projectName || projectName.startsWith('-')) {\n\t\tconsole.error('Error: Project name is required');\n\t\treturn null;\n\t}\n\n\t// Validate project name\n\tif (!/^[a-z0-9-_]+$/i.test(projectName)) {\n\t\tconsole.error(\n\t\t\t'Error: Project name can only contain letters, numbers, hyphens, and underscores',\n\t\t);\n\t\treturn null;\n\t}\n\n\tlet template: 'basic' | 'blog' | 'store' = 'basic';\n\n\t// Parse template flag\n\tconst templateIndex = args.indexOf('--template');\n\tif (templateIndex !== -1 && args[templateIndex + 1]) {\n\t\tconst templateArg = args[templateIndex + 1];\n\t\tif (['basic', 'blog', 'store'].includes(templateArg)) {\n\t\t\ttemplate = templateArg as 'basic' | 'blog' | 'store';\n\t\t} else {\n\t\t\tconsole.error(\n\t\t\t\t`Error: Unknown template \"${templateArg}\". Available templates: basic, blog, store`,\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn { projectName, template };\n}\n\nasync function scaffoldProject(options: InitOptions) {\n\tconst { projectName, template } = options;\n\tconst projectPath = join(process.cwd(), projectName);\n\n\t// Check if directory already exists\n\tif (existsSync(projectPath)) {\n\t\tconsole.error(`Error: Directory \"${projectName}\" already exists`);\n\t\tprocess.exit(1);\n\t}\n\n\tconsole.log(`\\n🏗️ Creating project: ${projectName}`);\n\tconsole.log(`\\n📦 Template: ${template}\\n`);\n\n\t// Get template directory path\n\tconst templatePath = join(import.meta.dir, '..', '_', template);\n\n\tif (!existsSync(templatePath)) {\n\t\tconsole.error(`Error: Template directory not found at ${templatePath}`);\n\t\tprocess.exit(1);\n\t}\n\n\t// Create project directory\n\tawait mkdir(projectPath, { recursive: true });\n\n\t// Copy template files\n\tawait copyTemplateFiles(templatePath, projectPath, {\n\t\tPROJECT_NAME: projectName,\n\t});\n\n\t// Run bun install\n\tconsole.log('📥 Installing dependencies...\\n');\n\tconst proc = Bun.spawn(['bun', 'install'], {\n\t\tcwd: projectPath,\n\t\tstdout: 'inherit',\n\t\tstderr: 'inherit',\n\t});\n\n\tawait proc.exited;\n\n\t// Print success message\n\tprintSuccess(projectName, template);\n}\n\nasync function copyTemplateFiles(\n\ttemplatePath: string,\n\ttargetPath: string,\n\tvariables: Record<string, string>,\n) {\n\tconst entries = await readdir(templatePath, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst sourcePath = join(templatePath, entry.name);\n\t\tconst destPath = join(targetPath, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Create directory and recurse\n\t\t\tawait mkdir(destPath, { recursive: true });\n\t\t\tawait copyTemplateFiles(sourcePath, destPath, variables);\n\t\t} else if (entry.isFile()) {\n\t\t\t// Read file content\n\t\t\tconst content = await readFile(sourcePath, 'utf-8');\n\n\t\t\t// Replace variables in content\n\t\t\tlet processedContent = content;\n\t\t\tfor (const [key, value] of Object.entries(variables)) {\n\t\t\t\tconst placeholder = `{{${key}}}`;\n\t\t\t\tprocessedContent = processedContent.split(placeholder).join(value);\n\t\t\t}\n\n\t\t\t// Write file\n\t\t\tawait writeFile(destPath, processedContent);\n\t\t}\n\t}\n}\n\nfunction printSuccess(projectName: string, template: string) {\n\tconsole.log('\\n🏎️ Project created successfully!\\n');\n\tconsole.log('Next steps:\\n');\n\tconsole.log(` cd ${projectName}`);\n\tconsole.log(' bun dev\\n');\n\tconsole.log('Your app will be running at http://localhost:3000\\n');\n\tconsole.log('Project structure:');\n\tconsole.log(' src/');\n\tconsole.log(' |-- index.ts # Server entry point');\n\tconsole.log(' +-- client/');\n\tconsole.log(' |-- App.tsx # Root React component');\n\tconsole.log(' |-- index.tsx # Client entry point');\n\tconsole.log(' |-- index.html # HTML template');\n\tconsole.log(' |-- routes/ # File-based routes');\n\tif (template === 'blog') {\n\t\tconsole.log(' | |-- blog/');\n\t\tconsole.log(' | | |-- content/ # Blog posts');\n\t\tconsole.log(' | | |-- [slug].tsx');\n\t\tconsole.log(' | | +-- index.tsx');\n\t}\n\tif (template === 'store') {\n\t\tconsole.log(' | |-- products/');\n\t\tconsole.log(' | |-- categories/');\n\t\tconsole.log(' |-- lib/ # API client & utilities');\n\t\tconsole.log(' +-- theme.css # Tailwind CSS v4');\n\t}\n\tconsole.log(' | |-- index.tsx');\n\tconsole.log(' | +-- about.tsx');\n\tconsole.log(' +-- components/ # React components\\n');\n\tconsole.log('Learn more at https://github.com/stewones/reroute');\n}\n\nasync function printHelp() {\n\tconsole.log(await getVersionString());\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log(' reroute init <project-name> [options]');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log(' --template <name> Template to use (basic, blog, store)');\n\tconsole.log(' -h, --help Show help');\n\tconsole.log('');\n\tconsole.log('Examples:');\n\tconsole.log(' reroute init my-app');\n\tconsole.log(' reroute init my-blog --template blog');\n\tconsole.log(' reroute init my-store --template store');\n}\n",
6
+ "#!/usr/bin/env bun\n\n/**\n * Reroute init command\n *\n * Scaffold a new Reroute project with templates\n */\n\nimport { existsSync } from 'node:fs';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { getVersionString } from '../libs/version';\n\ninterface InitOptions {\n\tprojectName: string;\n\ttemplate: 'basic' | 'blog' | 'store';\n}\n\nexport default async function init(args: string[]) {\n\tconst options = parseArgs(args);\n\n\tif (!options) {\n\t\tawait printHelp();\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\tawait scaffoldProject(options);\n\t} catch (error) {\n\t\tconsole.error('Error scaffolding project:', error);\n\t\tprocess.exit(1);\n\t}\n}\n\nfunction parseArgs(args: string[]): InitOptions | null {\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\treturn null;\n\t}\n\n\tconst projectName = args[0];\n\n\tif (!projectName || projectName.startsWith('-')) {\n\t\tconsole.error('Error: Project name is required');\n\t\treturn null;\n\t}\n\n\t// Validate project name\n\tif (!/^[a-z0-9-_]+$/i.test(projectName)) {\n\t\tconsole.error(\n\t\t\t'Error: Project name can only contain letters, numbers, hyphens, and underscores',\n\t\t);\n\t\treturn null;\n\t}\n\n\tlet template: 'basic' | 'blog' | 'store' = 'basic';\n\n\t// Parse template flag\n\tconst templateIndex = args.indexOf('--template');\n\tif (templateIndex !== -1 && args[templateIndex + 1]) {\n\t\tconst templateArg = args[templateIndex + 1];\n\t\tif (['basic', 'blog', 'store'].includes(templateArg)) {\n\t\t\ttemplate = templateArg as 'basic' | 'blog' | 'store';\n\t\t} else {\n\t\t\tconsole.error(\n\t\t\t\t`Error: Unknown template \"${templateArg}\". Available templates: basic, blog, store`,\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn { projectName, template };\n}\n\nasync function scaffoldProject(options: InitOptions) {\n\tconst { projectName, template } = options;\n\tconst projectPath = join(process.cwd(), projectName);\n\n\t// Check if directory already exists\n\tif (existsSync(projectPath)) {\n\t\tconsole.error(`Error: Directory \"${projectName}\" already exists`);\n\t\tprocess.exit(1);\n\t}\n\n\tconsole.log(`\\n🏗️ Creating project: ${projectName}`);\n\tconsole.log(`\\n📦 Template: ${template}\\n`);\n\n\t// Get template directory path (for non-src files like package.json, tsconfig.json)\n\t// Try multiple possible paths to find template directory (dev vs production)\n\tconst possibleTemplatePaths = [\n\t\t// When running from source: packages/cli/src/commands -> packages/cli/src/_\n\t\tjoin(import.meta.dir, '..', '_', template),\n\t\t// When running from production build: dist/cli/src/commands -> dist/_\n\t\tjoin(import.meta.dir, '..', '..', '..', '_', template),\n\t];\n\n\tlet templatePath: string | undefined;\n\tfor (const path of possibleTemplatePaths) {\n\t\tif (existsSync(path)) {\n\t\t\ttemplatePath = path;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!templatePath) {\n\t\tconsole.error(\n\t\t\t`Error: Template directory not found for template \"${template}\"`,\n\t\t);\n\t\tconsole.error(`Tried paths: ${possibleTemplatePaths.join(', ')}`);\n\t\tprocess.exit(1);\n\t}\n\n\t// Get examples directory path (for src folder)\n\t// Try multiple possible paths to find examples directory\n\tconst possibleExamplesPaths = [\n\t\t// When running from source: packages/cli/src/commands -> examples\n\t\tjoin(import.meta.dir, '..', '..', '..', '..', 'examples', template, 'src'),\n\t\t// Alternative path structure\n\t\tjoin(\n\t\t\timport.meta.dir,\n\t\t\t'..',\n\t\t\t'..',\n\t\t\t'..',\n\t\t\t'..',\n\t\t\t'..',\n\t\t\t'examples',\n\t\t\ttemplate,\n\t\t\t'src',\n\t\t),\n\t];\n\n\tlet examplesPath: string | undefined;\n\tfor (const path of possibleExamplesPaths) {\n\t\tif (existsSync(path)) {\n\t\t\texamplesPath = path;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Create project directory\n\tawait mkdir(projectPath, { recursive: true });\n\n\t// Copy template files (excluding src folder)\n\tawait copyTemplateFiles(templatePath, projectPath, {\n\t\tPROJECT_NAME: projectName,\n\t});\n\n\t// Variables to replace in source files\n\tconst sourceVariables = {\n\t\tPROJECT_NAME: projectName,\n\t};\n\n\t// Copy src folder from examples (or fallback to template if examples not found)\n\tif (examplesPath) {\n\t\t// Copy src folder from examples (always up-to-date)\n\t\tawait copySourceFiles(\n\t\t\texamplesPath,\n\t\t\tjoin(projectPath, 'src'),\n\t\t\tsourceVariables,\n\t\t);\n\t} else {\n\t\t// Fallback: copy src folder from template (for distribution scenarios)\n\t\tconst templateSrcPath = join(templatePath, 'src');\n\t\tif (existsSync(templateSrcPath)) {\n\t\t\tawait copySourceFiles(\n\t\t\t\ttemplateSrcPath,\n\t\t\t\tjoin(projectPath, 'src'),\n\t\t\t\tsourceVariables,\n\t\t\t);\n\t\t} else {\n\t\t\tconsole.error(`Error: No src directory found for template \"${template}\"`);\n\t\t\tconsole.error(\n\t\t\t\t`Tried examples paths: ${possibleExamplesPaths.join(', ')}`,\n\t\t\t);\n\t\t\tconsole.error(`Tried template path: ${templateSrcPath}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\t// Run bun install\n\tconsole.log('📥 Installing dependencies...\\n');\n\tconst proc = Bun.spawn(['bun', 'install'], {\n\t\tcwd: projectPath,\n\t\tstdout: 'inherit',\n\t\tstderr: 'inherit',\n\t});\n\n\tawait proc.exited;\n\n\t// Print success message\n\tprintSuccess(projectName, template);\n}\n\nasync function copyTemplateFiles(\n\ttemplatePath: string,\n\ttargetPath: string,\n\tvariables: Record<string, string>,\n) {\n\tconst entries = await readdir(templatePath, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\t// Skip src directory - it will be copied from examples\n\t\tif (entry.isDirectory() && entry.name === 'src') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst sourcePath = join(templatePath, entry.name);\n\t\tconst destPath = join(targetPath, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Create directory and recurse\n\t\t\tawait mkdir(destPath, { recursive: true });\n\t\t\tawait copyTemplateFiles(sourcePath, destPath, variables);\n\t\t} else if (entry.isFile()) {\n\t\t\t// Read file content\n\t\t\tconst content = await readFile(sourcePath, 'utf-8');\n\n\t\t\t// Replace variables in content\n\t\t\tlet processedContent = content;\n\t\t\tfor (const [key, value] of Object.entries(variables)) {\n\t\t\t\tconst placeholder = `{{${key}}}`;\n\t\t\t\tprocessedContent = processedContent.split(placeholder).join(value);\n\t\t\t}\n\n\t\t\t// Write file\n\t\t\tawait writeFile(destPath, processedContent);\n\t\t}\n\t}\n}\n\n/**\n * File patterns that should have variable replacements applied\n * Add more patterns here as needed for future variables\n */\nconst VARIABLE_REPLACEMENT_PATTERNS = [\n\t/\\.html$/i, // HTML files (e.g., index.html)\n\t// Add more patterns here as needed:\n\t// /\\.md$/i, // Markdown files\n\t// /\\.txt$/i, // Text files\n];\n\n/**\n * Apply variable replacements to file content based on file type\n * This allows examples to remain as working projects while still customizing them during init\n */\nfunction applyVariableReplacements(\n\tcontent: string,\n\tfileName: string,\n\tvariables: Record<string, string>,\n): string {\n\t// Check if this file type should have variables replaced\n\tconst shouldReplaceVariables = VARIABLE_REPLACEMENT_PATTERNS.some((pattern) =>\n\t\tpattern.test(fileName),\n\t);\n\n\tif (!shouldReplaceVariables) {\n\t\treturn content;\n\t}\n\n\tlet processedContent = content;\n\n\t// For HTML files, replace title tag content\n\tif (/\\.html$/i.test(fileName)) {\n\t\t// Replace title tag content with PROJECT_NAME if available\n\t\tif (variables.PROJECT_NAME) {\n\t\t\t// Match <title>...</title> and replace content\n\t\t\tprocessedContent = processedContent.replace(\n\t\t\t\t/<title>.*?<\\/title>/i,\n\t\t\t\t`<title>${variables.PROJECT_NAME}</title>`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Add more file-specific replacements here as needed\n\t// For example, for markdown files:\n\t// if (/\\.md$/i.test(fileName)) {\n\t// processedContent = processedContent.replace(/{{PROJECT_NAME}}/g, variables.PROJECT_NAME);\n\t// }\n\n\treturn processedContent;\n}\n\n/**\n * Copy source files from examples, optionally applying variable replacements\n */\nasync function copySourceFiles(\n\tsourcePath: string,\n\ttargetPath: string,\n\tvariables?: Record<string, string>,\n) {\n\tconst entries = await readdir(sourcePath, { withFileTypes: true });\n\n\t// Create target directory\n\tawait mkdir(targetPath, { recursive: true });\n\n\tfor (const entry of entries) {\n\t\tconst sourceEntryPath = join(sourcePath, entry.name);\n\t\tconst targetEntryPath = join(targetPath, entry.name);\n\n\t\tif (entry.isDirectory()) {\n\t\t\t// Recursively copy directory\n\t\t\tawait copySourceFiles(sourceEntryPath, targetEntryPath, variables);\n\t\t} else if (entry.isFile()) {\n\t\t\t// Read file content\n\t\t\tconst content = await readFile(sourceEntryPath, 'utf-8');\n\n\t\t\t// Apply variable replacements if variables are provided\n\t\t\tconst processedContent = variables\n\t\t\t\t? applyVariableReplacements(content, entry.name, variables)\n\t\t\t\t: content;\n\n\t\t\t// Write file\n\t\t\tawait writeFile(targetEntryPath, processedContent);\n\t\t}\n\t}\n}\n\nfunction printSuccess(projectName: string, template: string) {\n\tconsole.log('\\n🏎️ Project created successfully!\\n');\n\tconsole.log('Next steps:\\n');\n\tconsole.log(` cd ${projectName}`);\n\tconsole.log(' bun dev\\n');\n\tconsole.log('Your app will be running at http://localhost:3000\\n');\n\tconsole.log('Project structure:');\n\tconsole.log(' src/');\n\tconsole.log(' |-- index.ts # Server entry point');\n\tconsole.log(' +-- client/');\n\tconsole.log(' |-- App.tsx # Root React component');\n\tconsole.log(' |-- index.tsx # Client entry point');\n\tconsole.log(' |-- index.html # HTML template');\n\tconsole.log(' |-- routes/ # File-based routes');\n\tif (template === 'blog') {\n\t\tconsole.log(' | |-- blog/');\n\t\tconsole.log(' | | |-- content/ # Blog posts');\n\t\tconsole.log(' | | |-- [slug].tsx');\n\t\tconsole.log(' | | +-- index.tsx');\n\t}\n\tif (template === 'store') {\n\t\tconsole.log(' | |-- products/');\n\t\tconsole.log(' | |-- categories/');\n\t\tconsole.log(' |-- lib/ # API client & utilities');\n\t\tconsole.log(' +-- theme.css # Tailwind CSS v4');\n\t}\n\tconsole.log(' | |-- index.tsx');\n\tconsole.log(' | +-- about.tsx');\n\tconsole.log(' +-- components/ # React components\\n');\n\tconsole.log('Learn more at https://github.com/stewones/reroute');\n}\n\nasync function printHelp() {\n\tconsole.log(await getVersionString());\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log(' reroute init <project-name> [options]');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log(' --template <name> Template to use (basic, blog, store)');\n\tconsole.log(' -h, --help Show help');\n\tconsole.log('');\n\tconsole.log('Examples:');\n\tconsole.log(' reroute init my-app');\n\tconsole.log(' reroute init my-blog --template blog');\n\tconsole.log(' reroute init my-store --template store');\n}\n",
7
7
  "/**\n * Markdown integration utility\n *\n * Manages markdown and syntax highlighting packages for the Reroute framework\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\n/**\n * Check if a package is available in package.json, searching up to 5 parent directories\n */\nfunction isPackageAvailable(cwd: string, packageName: string): boolean {\n\tlet currentDir = cwd;\n\n\t// Check up to 5 levels up\n\tfor (let i = 0; i < 5; i++) {\n\t\tconst packageJsonPath = join(currentDir, 'package.json');\n\n\t\tif (existsSync(packageJsonPath)) {\n\t\t\ttry {\n\t\t\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\t\t\tconst deps = {\n\t\t\t\t\t...packageJson.dependencies,\n\t\t\t\t\t...packageJson.devDependencies,\n\t\t\t\t\t...packageJson.peerDependencies,\n\t\t\t\t};\n\n\t\t\t\tif (packageName in deps) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Continue to parent directory\n\t\t\t}\n\t\t}\n\n\t\tconst parentDir = dirname(currentDir);\n\t\t// Stop if we've reached the root\n\t\tif (parentDir === currentDir) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = parentDir;\n\t}\n\n\treturn false;\n}\n\n/**\n * Check if react-markdown is available in the project\n */\nfunction isReactMarkdownAvailable(cwd: string): boolean {\n\treturn isPackageAvailable(cwd, 'react-markdown');\n}\n\n/**\n * Check if Shiki is available in the project\n */\nfunction isShikiAvailable(cwd: string): boolean {\n\treturn isPackageAvailable(cwd, '@shikijs/rehype');\n}\n\n/**\n * Check if remark-gfm (GitHub Flavored Markdown) is available\n */\nfunction isRemarkGfmAvailable(cwd: string): boolean {\n\treturn isPackageAvailable(cwd, 'remark-gfm');\n}\n\n/**\n * Check if @mdx-js/mdx is available in the project\n */\nfunction isMdxAvailable(cwd: string): boolean {\n\treturn isPackageAvailable(cwd, '@mdx-js/mdx');\n}\n\n/**\n * Get markdown configuration status for the project\n */\nexport function getMarkdownConfig(cwd: string) {\n\tconst hasReactMarkdown = isReactMarkdownAvailable(cwd);\n\tconst hasShiki = isShikiAvailable(cwd);\n\tconst hasRemarkGfm = isRemarkGfmAvailable(cwd);\n\tconst hasMdx = isMdxAvailable(cwd);\n\n\treturn {\n\t\thasReactMarkdown,\n\t\thasShiki,\n\t\thasRemarkGfm,\n\t\thasMdx,\n\t\tisConfigured: hasReactMarkdown,\n\t};\n}\n\n/**\n * Log markdown configuration status\n */\nexport function logMarkdownStatus(cwd: string): void {\n\tconst config = getMarkdownConfig(cwd);\n\n\tif (config.isConfigured) {\n\t\tconsole.log('[reroute/markdown] Markdown rendering available');\n\t\tif (config.hasShiki) {\n\t\t\tconsole.log('[reroute/markdown] ✓ Shiki syntax highlighting enabled');\n\t\t}\n\t\tif (config.hasRemarkGfm) {\n\t\t\tconsole.log('[reroute/markdown] ✓ GitHub Flavored Markdown enabled');\n\t\t}\n\t\tif (config.hasMdx) {\n\t\t\tconsole.log(\n\t\t\t\t'[reroute/markdown] ✓ MDX compiler enabled (JSX in markdown)',\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Check if markdown packages are configured and log status\n */\nexport function checkMarkdownIfConfigured(cwd: string): boolean {\n\ttry {\n\t\tconst config = getMarkdownConfig(cwd);\n\t\tif (config.isConfigured) {\n\t\t\tlogMarkdownStatus(cwd);\n\t\t}\n\t\treturn config.isConfigured;\n\t} catch (e) {\n\t\tconsole.warn('[reroute/markdown] check failed:', e);\n\t\treturn false;\n\t}\n}\n",
8
8
  "/**\n * Markdown/MDX processor for route files\n *\n * Processes .md and .mdx files with frontmatter support for use in the routing system\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { basename, dirname, extname, join } from 'node:path';\n\n// biome-ignore lint/suspicious/noExplicitAny: yes\ntype Any = any;\n\nexport interface MarkdownFrontmatter {\n\ttitle?: string;\n\tdescription?: string;\n\tdate?: string;\n\tslug?: string;\n\texcerpt?: string;\n\t[key: string]: Any;\n}\n\nexport interface ProcessedMarkdown {\n\tfrontmatter: MarkdownFrontmatter;\n\tcontent: string;\n\trawContent: string;\n\thasJSX: boolean;\n}\n\n/**\n * Simple frontmatter parser (YAML-like)\n * Extracts metadata from markdown files between --- delimiters\n */\nfunction parseFrontmatter(content: string): {\n\tdata: MarkdownFrontmatter;\n\tcontent: string;\n} {\n\tconst frontmatterRegex = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)$/;\n\tconst match = content.match(frontmatterRegex);\n\n\tif (!match) {\n\t\treturn { data: {}, content };\n\t}\n\n\tconst [, frontmatterText, markdownContent] = match;\n\tconst data: MarkdownFrontmatter = {};\n\n\t// Parse simple key: value pairs\n\tconst lines = frontmatterText.split('\\n');\n\tfor (const line of lines) {\n\t\tconst colonIndex = line.indexOf(':');\n\t\tif (colonIndex === -1) continue;\n\n\t\tconst key = line.slice(0, colonIndex).trim();\n\t\tlet value = line.slice(colonIndex + 1).trim();\n\n\t\t// Remove quotes if present\n\t\tif (\n\t\t\t(value.startsWith('\"') && value.endsWith('\"')) ||\n\t\t\t(value.startsWith(\"'\") && value.endsWith(\"'\"))\n\t\t) {\n\t\t\tvalue = value.slice(1, -1);\n\t\t}\n\n\t\t// Parse arrays (simple format: [item1, item2])\n\t\tif (value.startsWith('[') && value.endsWith(']')) {\n\t\t\tdata[key] = value\n\t\t\t\t.slice(1, -1)\n\t\t\t\t.split(',')\n\t\t\t\t.map((v) => v.trim().replace(/^[\"']|[\"']$/g, ''));\n\t\t}\n\t\t// Parse booleans\n\t\telse if (value === 'true' || value === 'false') {\n\t\t\tdata[key] = value === 'true';\n\t\t}\n\t\t// Parse numbers\n\t\telse if (!Number.isNaN(Number(value))) {\n\t\t\tdata[key] = Number(value);\n\t\t}\n\t\t// String value\n\t\telse {\n\t\t\tdata[key] = value;\n\t\t}\n\t}\n\n\treturn { data, content: markdownContent };\n}\n\n/**\n * Check if markdown content contains JSX syntax\n */\nfunction hasJSXSyntax(content: string): boolean {\n\t// Simple heuristic: look for JSX-like patterns\n\tconst jsxPatterns = [\n\t\t/<[A-Z][a-zA-Z0-9]*/, // Component tags like <Component>\n\t\t/import\\s+{[^}]+}\\s+from/, // ES6 imports\n\t\t/import\\s+\\w+\\s+from/, // Default imports\n\t\t/export\\s+(default|const|function)/, // Exports\n\t\t/<\\w+\\s+\\w+={/, // Props with curly braces\n\t];\n\n\treturn jsxPatterns.some((pattern) => pattern.test(content));\n}\n\n/**\n * Process a markdown/MDX file and return structured data\n */\nexport function processMarkdownFile(filePath: string): ProcessedMarkdown {\n\tconst rawContent = readFileSync(filePath, 'utf-8');\n\tconst { data, content } = parseFrontmatter(rawContent);\n\tconst hasJSX = hasJSXSyntax(content);\n\n\treturn {\n\t\tfrontmatter: data,\n\t\tcontent,\n\t\trawContent,\n\t\thasJSX,\n\t};\n}\n\n/**\n * Check if @mdx-js/mdx is available in the project\n */\nfunction isMdxAvailable(cwd: string): boolean {\n\tlet currentDir = cwd;\n\n\t// Check up to 5 levels up\n\tfor (let i = 0; i < 5; i++) {\n\t\tconst packageJsonPath = join(currentDir, 'package.json');\n\n\t\tif (existsSync(packageJsonPath)) {\n\t\t\ttry {\n\t\t\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\t\t\tconst deps = {\n\t\t\t\t\t...packageJson.dependencies,\n\t\t\t\t\t...packageJson.devDependencies,\n\t\t\t\t\t...packageJson.peerDependencies,\n\t\t\t\t};\n\n\t\t\t\tif ('@mdx-js/mdx' in deps) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Continue to parent directory\n\t\t\t}\n\t\t}\n\n\t\tconst parentDir = dirname(currentDir);\n\t\t// Stop if we've reached the root\n\t\tif (parentDir === currentDir) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrentDir = parentDir;\n\t}\n\n\treturn false;\n}\n\n/**\n * Compile MDX content to JSX using @mdx-js/mdx\n */\nasync function compileMdx(\n\tcontent: string,\n\tcwd: string,\n\toptions: {\n\t\tenableGfm?: boolean;\n\t\ttheme?: string;\n\t} = {},\n): Promise<string | null> {\n\tif (!isMdxAvailable(cwd)) {\n\t\tconsole.warn(\n\t\t\t'[reroute/mdx] @mdx-js/mdx not installed. Install with: bun add @mdx-js/mdx',\n\t\t);\n\t\treturn null;\n\t}\n\n\ttry {\n\t\t// Try to find @mdx-js/mdx in workspace, checking up to 3 levels up\n\t\tlet compile: Any;\n\t\tconst pathsToTry = [\n\t\t\tjoin(cwd, 'node_modules/@mdx-js/mdx'),\n\t\t\tjoin(cwd, '../node_modules/@mdx-js/mdx'),\n\t\t\tjoin(cwd, '../../node_modules/@mdx-js/mdx'),\n\t\t\tjoin(cwd, '../../../node_modules/@mdx-js/mdx'),\n\t\t];\n\n\t\tfor (const mdxPath of pathsToTry) {\n\t\t\ttry {\n\t\t\t\tconst mdxModule = require(mdxPath);\n\t\t\t\tcompile = mdxModule.compile;\n\t\t\t\tbreak;\n\t\t\t} catch {\n\t\t\t\t// Try next path\n\t\t\t}\n\t\t}\n\n\t\tif (!compile) {\n\t\t\tconsole.error('[reroute/mdx] Could not load @mdx-js/mdx from any path');\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { enableGfm = true, theme = 'github-dark' } = options;\n\n\t\tconst remarkPlugins = [] as Any[];\n\t\tconst rehypePlugins = [] as Any[];\n\n\t\t// Add GFM support if requested\n\t\tif (enableGfm) {\n\t\t\tconst gfmPathsToTry = [\n\t\t\t\tjoin(cwd, 'node_modules/remark-gfm'),\n\t\t\t\tjoin(cwd, '../node_modules/remark-gfm'),\n\t\t\t\tjoin(cwd, '../../node_modules/remark-gfm'),\n\t\t\t\tjoin(cwd, '../../../node_modules/remark-gfm'),\n\t\t\t];\n\n\t\t\tlet remarkGfm: Any = null;\n\t\t\tfor (const gfmPath of gfmPathsToTry) {\n\t\t\t\ttry {\n\t\t\t\t\tremarkGfm = require(gfmPath);\n\t\t\t\t\tbreak;\n\t\t\t\t} catch {\n\t\t\t\t\t// Try next path\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (remarkGfm) {\n\t\t\t\tremarkPlugins.push(remarkGfm.default || remarkGfm);\n\t\t\t} else {\n\t\t\t\tconsole.warn('[reroute/mdx] remark-gfm not available, skipping');\n\t\t\t}\n\t\t}\n\n\t\t// Add Shiki highlighting if available (compile-time only, safe for SSR)\n\t\tconst shikiPathsToTry = [\n\t\t\tjoin(cwd, 'node_modules/@shikijs/rehype'),\n\t\t\tjoin(cwd, '../node_modules/@shikijs/rehype'),\n\t\t\tjoin(cwd, '../../node_modules/@shikijs/rehype'),\n\t\t\tjoin(cwd, '../../../node_modules/@shikijs/rehype'),\n\t\t];\n\n\t\tlet rehypeShiki: Any = null;\n\t\tfor (const shikiPath of shikiPathsToTry) {\n\t\t\ttry {\n\t\t\t\trehypeShiki = require(shikiPath);\n\t\t\t\tbreak;\n\t\t\t} catch {\n\t\t\t\t// Try next path\n\t\t\t}\n\t\t}\n\n\t\tif (rehypeShiki) {\n\t\t\trehypePlugins.push([rehypeShiki.default || rehypeShiki, { theme }]);\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t'[reroute/mdx] @shikijs/rehype not available, skipping highlighting',\n\t\t\t);\n\t\t}\n\n\t\tconst result = await compile(content, {\n\t\t\tremarkPlugins,\n\t\t\trehypePlugins,\n\t\t\toutputFormat: 'program',\n\t\t\tdevelopment: false,\n\t\t});\n\n\t\treturn String(result);\n\t} catch (error) {\n\t\tconsole.error('[reroute/mdx] Compilation failed:', error);\n\t\treturn null;\n\t}\n}\n\n/**\n * Generate a React component wrapper for markdown content\n * This creates a TypeScript module that can be imported as a route\n */\nexport async function generateMarkdownModule(\n\tprocessed: ProcessedMarkdown,\n\tcwd: string,\n\toptions: {\n\t\tenableGfm?: boolean;\n\t\ttheme?: string;\n\t\tisMdx?: boolean;\n\t} = {},\n): Promise<string> {\n\tconst { frontmatter, content } = processed;\n\tconst { enableGfm = true, theme = 'github-dark', isMdx = false } = options;\n\n\t// Prefer MDX engine for both .mdx and .md when available to ensure\n\t// identical SSR/CSR output. MD is a subset of MDX, so compile it too.\n\tconst compiledMdx = await compileMdx(content, cwd, { enableGfm, theme });\n\tif (compiledMdx) {\n\t\t// Already a complete program that exports a default component\n\t\treturn `// Generated from ${isMdx ? 'MDX' : 'Markdown'} file with @mdx-js/mdx\n\n// MDX compiled content with imports and component\n${compiledMdx}\n\n// Add metadata exports\nexport const meta = ${JSON.stringify(frontmatter, null, 2)};\n\nexport const ssr = {\n head: [\n '<meta property=\"og:type\" content=\"article\" />',\n '<meta name=\"twitter:card\" content=\"summary_large_image\" />',\n ],\n};\n`;\n\t}\n\n\tconsole.warn(\n\t\t'[reroute/mdx] MDX compile unavailable; falling back to react-markdown',\n\t);\n\n\t// Regular markdown - wrap with Markdown component\n\tconst escapedContent = content\n\t\t.replace(/\\\\/g, '\\\\\\\\')\n\t\t.replace(/`/g, '\\\\`')\n\t\t.replace(/\\$/g, '\\\\$');\n\n\t// Build plugin imports\n\tconst pluginImports: string[] = [];\n\tconst remarkPluginsList: string[] = [];\n\tconst rehypePluginsList: string[] = [];\n\n\tif (enableGfm) {\n\t\tpluginImports.push(\"import remarkGfm from 'remark-gfm';\");\n\t\tremarkPluginsList.push('remarkGfm');\n\t}\n\n\t// Note: Shiki is async and breaks SSR - skip it\n\n\tconst pluginImportsStr =\n\t\tpluginImports.length > 0 ? `${pluginImports.join('\\n')}\\n` : '';\n\tconst remarkPluginsStr =\n\t\tremarkPluginsList.length > 0\n\t\t\t? `remarkPlugins={[${remarkPluginsList.join(', ')}]}`\n\t\t\t: '';\n\tconst rehypePluginsStr =\n\t\trehypePluginsList.length > 0\n\t\t\t? `rehypePlugins={[${rehypePluginsList.join(', ')}]}`\n\t\t\t: '';\n\tconst pluginsPropsStr = [remarkPluginsStr, rehypePluginsStr]\n\t\t.filter(Boolean)\n\t\t.join('\\n ');\n\n\treturn `// Generated from markdown file\nimport { Markdown } from 'reroute-js/react';\n${pluginImportsStr}\nconst meta = ${JSON.stringify(frontmatter, null, 2)};\n\nconst ssr = {\n head: [\n '<meta property=\"og:type\" content=\"article\" />',\n '<meta name=\"twitter:card\" content=\"summary_large_image\" />',\n ],\n};\n\nconst markdownContent = \\`${escapedContent}\\`;\n\nfunction MarkdownRoute() {\n return (\n <div>\n <Markdown\n ${pluginsPropsStr}\n >\n {markdownContent}\n </Markdown>\n </div>\n );\n}\n\nexport { meta, ssr };\nexport default MarkdownRoute;\n`;\n}\n\n/**\n * Generate a plain fallback TSX module when markdown tooling\n * is not configured. Renders raw markdown content in a <pre> block\n * so routes still work without extra deps.\n */\nexport function generatePlainMarkdownModule(\n\tprocessed: ProcessedMarkdown,\n): string {\n\tconst { frontmatter, content } = processed;\n\tconst escapedContent = content\n\t\t.replace(/\\\\/g, '\\\\\\\\')\n\t\t.split(String.fromCharCode(96))\n\t\t.join(`\\\\${String.fromCharCode(96)}`)\n\t\t.split('$')\n\t\t.join('\\\\$');\n\n\treturn `// Generated from markdown file (plain fallback)\n// No markdown renderer detected; showing raw content.\nexport const meta = ${JSON.stringify(frontmatter, null, 2)};\n\nexport const ssr = {\n head: [\n '<meta property=\"og:type\" content=\"article\" />',\n '<meta name=\"twitter:card\" content=\"summary_large_image\" />',\n ],\n};\n\nconst markdownContent = \\`${escapedContent}\\`;\n\nexport default function MarkdownFallback() {\n return (\n <div style={{ padding: '1rem' }}>\n {meta?.title && (\n <h1 style={{ fontSize: '1.5rem', fontWeight: 600 }}>{meta.title}</h1>\n )}\n <div style={{\n margin: '0.75rem 0',\n padding: '0.75rem',\n borderLeft: '4px solid #eab308',\n background: '#fefce8',\n color: '#713f12'\n }}>\n <strong>Markdown rendering not configured.</strong>\n <div style={{ marginTop: '0.25rem' }}>\n Install: react-markdown (required), remark-gfm (optional), @mdx-js/mdx (optional), @shikijs/rehype (optional).\n </div>\n </div>\n <pre style={{ whiteSpace: 'pre-wrap', lineHeight: 1.6 }}>{markdownContent}</pre>\n </div>\n );\n}\n`;\n}\n\n/**\n * Check if a file is a markdown file\n */\nexport function isMarkdownFile(filePath: string): boolean {\n\tconst ext = extname(filePath).toLowerCase();\n\treturn ext === '.md' || ext === '.mdx';\n}\n\n/**\n * Get the route name from a markdown filename\n * Converts kebab-case to the route path\n */\nexport function getMarkdownRouteName(filePath: string): string {\n\tconst name = basename(filePath, extname(filePath));\n\treturn name;\n}\n",
9
9
  "/**\n * Tailwind CSS v4 integration utility\n *\n * Manages Tailwind CLI integration for the Reroute framework\n */\n\nimport { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/**\n * Check if Tailwind CSS v4 is available in the project\n */\nfunction isTailwindAvailable(cwd: string): boolean {\n\tconst packageJsonPath = join(cwd, 'package.json');\n\tif (!existsSync(packageJsonPath)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\tconst deps = {\n\t\t\t...packageJson.dependencies,\n\t\t\t...packageJson.devDependencies,\n\t\t};\n\n\t\treturn '@tailwindcss/cli' in deps;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Get the default paths for Tailwind CSS\n */\nfunction getTailwindPaths(cwd: string) {\n\tconst input = join(cwd, 'src/client/theme.css');\n\tconst output = join(cwd, '.reroute/theme.css');\n\n\treturn { input, output };\n}\n\n/**\n * Check if Tailwind input file exists and uses v4 format\n */\nfunction hasTailwindInput(cwd: string): boolean {\n\tconst { input } = getTailwindPaths(cwd);\n\n\tif (!existsSync(input)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(input, 'utf-8');\n\t\t// v4 uses @import \"tailwindcss\"\n\t\treturn content.includes('tailwindcss');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction resolveTailwindBin(cwd: string): string {\n\t// Try to find tailwindcss binary, checking up to 3 levels up\n\tconst pathsToTry = [\n\t\tjoin(cwd, '../node_modules/.bin/tailwindcss'),\n\t\tjoin(cwd, '../../node_modules/.bin/tailwindcss'),\n\t\tjoin(cwd, '../../../node_modules/.bin/tailwindcss'),\n\t];\n\n\tfor (const binPath of pathsToTry) {\n\t\tif (existsSync(binPath)) {\n\t\t\treturn binPath;\n\t\t}\n\t}\n\n\t// Fallback to the default location if none found\n\treturn join(cwd, 'node_modules/.bin/tailwindcss');\n}\n\n/**\n * Build Tailwind CSS using the Tailwind CLI\n */\nasync function buildTailwind(cwd: string): Promise<void> {\n\tconst { input, output } = getTailwindPaths(cwd);\n\n\treturn new Promise((resolve, reject) => {\n\t\tconst tailwindBin = resolveTailwindBin(cwd);\n\t\tconst args = ['-i', input, '-o', output];\n\n\t\tconsole.log(`[reroute/tailwind] build start: -i ${input} -o ${output}`);\n\n\t\tconst tailwind = spawn(tailwindBin, args, {\n\t\t\tcwd,\n\t\t\tstdio: 'pipe',\n\t\t});\n\n\t\ttailwind.stdout?.on('data', (data) => {\n\t\t\tconst line = data.toString().trim();\n\t\t\tif (line) {\n\t\t\t\tconsole.log(`[reroute/tailwind] ${line}`);\n\t\t\t}\n\t\t});\n\n\t\ttailwind.stderr?.on('data', (data) => {\n\t\t\tconst line = data.toString().trim();\n\t\t\tif (line) {\n\t\t\t\tconsole.log(`[reroute/tailwind] ${line}`);\n\t\t\t}\n\t\t});\n\n\t\ttailwind.on('close', (code) => {\n\t\t\tif (code === 0) {\n\t\t\t\tconsole.log('[reroute/tailwind] build done');\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\treject(new Error(`Tailwind CSS build failed with code ${code}`));\n\t\t\t}\n\t\t});\n\n\t\ttailwind.on('error', (error) => {\n\t\t\treject(error);\n\t\t});\n\t});\n}\n\n/**\n * Build Tailwind once if installed and input exists.\n * Returns true if a build was attempted (success or failure), false if skipped.\n */\nexport async function buildTailwindIfConfigured(cwd: string): Promise<boolean> {\n\ttry {\n\t\tif (isTailwindAvailable(cwd) && hasTailwindInput(cwd)) {\n\t\t\tawait buildTailwind(cwd);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} catch (e) {\n\t\tconsole.warn('[reroute/tailwind] build failed:', e);\n\t\treturn true;\n\t}\n}\n",
10
- "#!/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 { checkMarkdownIfConfigured, getMarkdownConfig } from '../libs/markdown';\nimport {\n\tgenerateMarkdownModule,\n\tgeneratePlainMarkdownModule,\n\tisMarkdownFile,\n\tprocessMarkdownFile,\n} from '../libs/markdown-processor';\nimport { buildTailwindIfConfigured } 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') ||\n\t\t\t\tentry.name.endsWith('.ts') ||\n\t\t\t\tentry.name.endsWith('.md') ||\n\t\t\t\tentry.name.endsWith('.mdx'))\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') ||\n\t\tfilePath.endsWith('[layout].ts') ||\n\t\tfilePath.endsWith('[layout].md') ||\n\t\tfilePath.endsWith('[layout].mdx');\n\n\t// Remove extension\n\tlet routePath = filePath.replace(/\\.(tsx|ts|md|mdx)$/, '');\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\n/**\n * Generate import path for a route file\n * Markdown files are imported from .reroute/markdown/, others from src/client/routes/\n */\nfunction getImportPath(filePath: string): string {\n\tconst isMarkdown = /\\.(md|mdx)$/.test(filePath);\n\n\tif (isMarkdown) {\n\t\t// Import from converted markdown in .reroute/markdown/\n\t\tconst pathWithoutExt = filePath.replace(/\\.(md|mdx)$/, '');\n\t\treturn `./markdown/${pathWithoutExt}`;\n\t}\n\n\t// Import from source\n\tconst pathWithoutExt = filePath.replace(/\\.(tsx|ts)$/, '');\n\treturn `../src/client/routes/${pathWithoutExt}`;\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) => `import Route${i} from '${getImportPath(r.filePath)}';`,\n\t\t),\n\t\t...tree.layouts.map(\n\t\t\t(l, i) => `import Layout${i} from '${getImportPath(l.filePath)}';`,\n\t\t),\n\t\t...tree.notFoundRoutes.map(\n\t\t\t(nf, i) => `import NotFound${i} from '${getImportPath(nf.filePath)}';`,\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() &&\n\t\t\t\t\t/\\.(tsx|ts|md|mdx)$/.test(e.name) &&\n\t\t\t\t\t!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\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|md|mdx)$/, '');\n\t\t\tconst absSrc = join(contentDir, file);\n\t\t\tconst isMarkdown = /\\.(md|mdx)$/.test(file);\n\n\t\t\t// For markdown files, use the converted version from .reroute/markdown/\n\n\t\t\tconst buildSrc = isMarkdown\n\t\t\t\t? join(\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t'.reroute',\n\t\t\t\t\t\t'markdown',\n\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t'content',\n\t\t\t\t\t\t`${name}.tsx`,\n\t\t\t\t\t)\n\t\t\t\t: absSrc;\n\n\t\t\t// If targeting a converted markdown module, ensure it exists\n\t\t\tif (isMarkdown) {\n\t\t\t\ttry {\n\t\t\t\t\tconst exists = await Bun.file(buildSrc).exists();\n\t\t\t\t\tif (!exists) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`[reroute/content] Converted markdown missing, skipping: ${buildSrc}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\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 ${buildSrc}`);\n\t\t\t\tconst result = await Bun.build({\n\t\t\t\t\tentrypoints: [buildSrc],\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: Bun.env.NODE_ENV === 'production' ? 'linked' : 'none',\n\t\t\t\t\tminify: Bun.env.NODE_ENV === 'production',\n\t\t\t\t\tdefine: {\n\t\t\t\t\t\t'process.env.NODE_ENV':\n\t\t\t\t\t\t\tBun.env.NODE_ENV === 'production'\n\t\t\t\t\t\t\t\t? '\"production\"'\n\t\t\t\t\t\t\t\t: '\"development\"',\n\t\t\t\t\t},\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 ${buildSrc}`);\n\t\t\t\tconst url = `${pathToFileURL(buildSrc).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 preprocessMarkdownFiles(cwd: string): Promise<void> {\n\tconsole.log('[reroute/markdown] Starting markdown preprocessing...');\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\tconst markdownDir = join(cwd, '.reroute', 'markdown');\n\n\t// Clean up previous markdown conversions\n\ttry {\n\t\tawait rm(markdownDir, { force: true, recursive: true });\n\t} catch {}\n\n\t// Check configuration but continue regardless (we will fallback if needed)\n\tconst markdownConfig = getMarkdownConfig(cwd);\n\tconsole.log('[reroute/markdown] Config:', markdownConfig);\n\n\t// Ensure base markdown directory exists before writing any files\n\ttry {\n\t\tawait mkdir(markdownDir, { recursive: true });\n\t} catch {}\n\n\t// Scan for markdown files (including in content directories)\n\tasync function scanMarkdown(dir: string, base = ''): Promise<string[]> {\n\t\tconst files: string[] = [];\n\t\ttry {\n\t\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst fullPath = join(dir, entry.name);\n\t\t\t\tconst relativePath = join(base, entry.name);\n\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\t// Process content directories too\n\t\t\t\t\tconst nested = await scanMarkdown(fullPath, relativePath);\n\t\t\t\t\tfiles.push(...nested);\n\t\t\t\t} else if (entry.isFile() && isMarkdownFile(entry.name)) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[reroute/markdown] Found markdown file: ${relativePath}`,\n\t\t\t\t\t);\n\t\t\t\t\tfiles.push(relativePath);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(`[reroute/markdown] Error scanning ${dir}:`, err);\n\t\t}\n\n\t\treturn files;\n\t}\n\n\tconsole.log(\n\t\t`[reroute/markdown] Scanning ${routesPath} for markdown files...`,\n\t);\n\tconst markdownFiles = await scanMarkdown(routesPath);\n\tconsole.log(`[reroute/markdown] Scan complete. Found files:`, markdownFiles);\n\n\tif (markdownFiles.length === 0) {\n\t\tconsole.log(\n\t\t\t'[reroute/markdown] No markdown files found, skipping preprocessing',\n\t\t);\n\t\treturn;\n\t}\n\n\tconsole.log(\n\t\t`[reroute/markdown] Found ${markdownFiles.length} markdown file(s)`,\n\t);\n\n\t// Ensure output directory exists\n\tawait mkdir(markdownDir, { recursive: true });\n\n\t// Process each markdown file\n\tfor (const file of markdownFiles) {\n\t\tconst sourcePath = join(routesPath, file);\n\t\tconst targetPath = join(markdownDir, file.replace(/\\.mdx?$/, '.tsx'));\n\n\t\ttry {\n\t\t\tconst processed = processMarkdownFile(sourcePath);\n\t\t\tconst isMdx = file.endsWith('.mdx');\n\n\t\t\tlet moduleCode: string;\n\t\t\tif (markdownConfig.isConfigured) {\n\t\t\t\tmoduleCode = await generateMarkdownModule(processed, cwd, {\n\t\t\t\t\tenableGfm: markdownConfig.hasRemarkGfm,\n\t\t\t\t\ttheme: 'github-dark',\n\t\t\t\t\tisMdx,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmoduleCode = generatePlainMarkdownModule(processed);\n\t\t\t}\n\n\t\t\t// Ensure target directory exists\n\t\t\tconst targetDir = join(\n\t\t\t\tmarkdownDir,\n\t\t\t\tfile.split('/').slice(0, -1).join('/'),\n\t\t\t);\n\t\t\tif (targetDir !== markdownDir) {\n\t\t\t\tawait mkdir(targetDir, { recursive: true });\n\t\t\t}\n\n\t\t\tawait writeFile(targetPath, moduleCode, 'utf-8');\n\t\t\tconsole.log(`[reroute/markdown] Processed ${file} -> ${targetPath}`);\n\t\t} catch (error) {\n\t\t\tconsole.error(`[reroute/markdown] Failed to process ${file}:`, error);\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// Preprocess markdown files before route generation\n\tawait preprocessMarkdownFiles(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\n\t\t// Keep markdown routes; preprocess will generate fallback modules\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\tawait buildTailwindIfConfigured(cwd);\n\t\tcheckMarkdownIfConfigured(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 buildTailwindIfConfigured(cwd);\n\t\tcheckMarkdownIfConfigured(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 buildTailwindIfConfigured(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 buildTailwindIfConfigured(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",
11
- "/**\n * Boot command - Initialize .reroute folder with stub files\n *\n * This command creates the .reroute directory with minimal stub files\n * to prevent import errors when running the app for the first time\n * before the gen command has completed.\n */\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\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\nconst STUB_ROUTES = `// 🚨 Auto-generated stub by Reroute - DO NOT EDIT 🚨\n// Run 'reroute gen' to generate actual routes\n/* eslint-disable */\n// @ts-nocheck\n\nexport const layouts: any[] = [];\nexport const notFoundRoutes: any[] = [];\n\nexport function matchRoute(pathname: string): any {\n return null;\n}\n\nexport type RouteParams = Record<string, never>;\n`;\n\nconst STUB_CONTENT = `// 🚨 Auto-generated stub by Reroute - DO NOT EDIT 🚨\n// Run 'reroute gen' to generate actual content\n/* eslint-disable */\n// @ts-nocheck\n\nexport const contentRegistry: Record<string, any> = {};\n`;\n\nconst STUB_INDEX = `// 🚨 Auto-generated stub by Reroute - DO NOT EDIT 🚨\n// Run 'reroute gen' to generate actual artifacts\n/* eslint-disable */\n// @ts-nocheck\n\nimport { layouts, matchRoute, notFoundRoutes } from './routes';\n\nexport const artifacts = {\n layouts,\n matchRoute,\n notFoundRoutes,\n contentBaseUrl: '/.reroute/collections'\n} as const;\n\nexport type RerouteArtifacts = typeof artifacts;\n`;\n\nexport default async function boot(_: string[]) {\n\tconst cwd = process.cwd();\n\n\ttry {\n\t\tconsole.log('[reroute/boot] Initializing .reroute directory...');\n\n\t\t// Create .reroute directory\n\t\tawait mkdir(join(cwd, OUTPUT_DIR), { recursive: true });\n\n\t\t// Create collections directory\n\t\tawait mkdir(join(cwd, OUTPUT_COLLECTIONS_DIR), { recursive: true });\n\n\t\t// Write stub routes.ts\n\t\tawait writeFile(join(cwd, OUTPUT_ROUTES), STUB_ROUTES, 'utf-8');\n\t\tconsole.log(`[reroute/boot] Created stub: ${OUTPUT_ROUTES}`);\n\n\t\t// Write stub content.ts\n\t\tawait writeFile(join(cwd, OUTPUT_CONTENT_TS), STUB_CONTENT, 'utf-8');\n\t\tconsole.log(`[reroute/boot] Created stub: ${OUTPUT_CONTENT_TS}`);\n\n\t\t// Write stub index.ts\n\t\tawait writeFile(join(cwd, OUTPUT_INDEX), STUB_INDEX, 'utf-8');\n\t\tconsole.log(`[reroute/boot] Created stub: ${OUTPUT_INDEX}`);\n\n\t\tconsole.log('[reroute/boot] Initialization complete!');\n\t\tconsole.log(\n\t\t\t'[reroute/boot] Run \"reroute gen\" to generate actual routes and content.',\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('[reroute/boot] Failed to initialize:', error);\n\t\tthrow error;\n\t}\n}\n",
12
- "#!/usr/bin/env bun\n\n/**\n * Reroute CLI\n *\n * Command-line interface for Reroute framework operations.\n */\n\nimport path from 'node:path';\n\n// Version and commit injected at build time\ndeclare const __REROUTE_VERSION__: string;\ndeclare const __REROUTE_COMMIT__: string;\n\nconst commands = {\n\tinit: () => import('./commands/init'),\n\tgen: () => import('./commands/gen'),\n\tboot: () => import('./commands/boot'),\n};\n\ntype Command = keyof typeof commands;\n\nasync function main() {\n\tconst args = process.argv.slice(2);\n\n\tif (args[0] === '--version' || args[0] === '-v') {\n\t\tconst version = await getVersionString();\n\t\tconsole.log(version);\n\t\tprocess.exit(0);\n\t}\n\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\tawait printHelp();\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\tawait printHelp();\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\nasync function printHelp() {\n\tconsole.log(await getVersionString());\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log(' reroute <command> [options]');\n\tconsole.log('');\n\tconsole.log('Commands:');\n\tconsole.log(' boot Initialize .reroute directory with stub files');\n\tconsole.log(' gen Generate content registry and static assets');\n\tconsole.log(' init Scaffold a new Reroute project');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log(' -h, --help Show help');\n\tconsole.log(' -v, --version Show version');\n\tconsole.log('');\n\tconsole.log('Examples:');\n\tconsole.log(' reroute boot');\n\tconsole.log(' reroute gen');\n\tconsole.log(' reroute gen --watch');\n\tconsole.log(' reroute init my-app');\n}\n\nasync function getVersionString(): Promise<string> {\n\tconst version = await getVersion();\n\tconst commit = await getCommit();\n\treturn `Reroute v${version} ${commit}`;\n}\n\nasync function getVersion(): Promise<string> {\n\t// Use version injected at build time\n\tif (typeof __REROUTE_VERSION__ !== 'undefined') {\n\t\treturn __REROUTE_VERSION__;\n\t}\n\n\t// Fallback for development: try to find package.json\n\tconst possiblePaths = [\n\t\tpath.join(import.meta.dir, '../../../package.json'),\n\t\tpath.join(import.meta.dir, '../../package.json'),\n\t\tpath.join(import.meta.dir, '../package.json'),\n\t];\n\n\tfor (const pkgPath of possiblePaths) {\n\t\ttry {\n\t\t\tconst pkg = await Bun.file(pkgPath).json();\n\t\t\treturn pkg.version;\n\t\t} catch {}\n\t}\n\n\treturn 'unknown';\n}\n\nasync function getCommit(): Promise<string> {\n\t// Use commit injected at build time\n\tif (typeof __REROUTE_COMMIT__ !== 'undefined') {\n\t\treturn __REROUTE_COMMIT__;\n\t}\n\n\t// Fallback for development\n\treturn 'dev';\n}\n\nmain();\n"
10
+ "#!/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 { checkMarkdownIfConfigured, getMarkdownConfig } from '../libs/markdown';\nimport {\n\tgenerateMarkdownModule,\n\tgeneratePlainMarkdownModule,\n\tisMarkdownFile,\n\tprocessMarkdownFile,\n} from '../libs/markdown-processor';\nimport { buildTailwindIfConfigured } 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') ||\n\t\t\t\tentry.name.endsWith('.ts') ||\n\t\t\t\tentry.name.endsWith('.md') ||\n\t\t\t\tentry.name.endsWith('.mdx'))\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') ||\n\t\tfilePath.endsWith('[layout].ts') ||\n\t\tfilePath.endsWith('[layout].md') ||\n\t\tfilePath.endsWith('[layout].mdx');\n\n\t// Remove extension\n\tlet routePath = filePath.replace(/\\.(tsx|ts|md|mdx)$/, '');\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\n/**\n * Generate import path for a route file\n * Markdown files are imported from .reroute/markdown/, others from src/client/routes/\n */\nfunction getImportPath(filePath: string): string {\n\tconst isMarkdown = /\\.(md|mdx)$/.test(filePath);\n\n\tif (isMarkdown) {\n\t\t// Import from converted markdown in .reroute/markdown/\n\t\tconst pathWithoutExt = filePath.replace(/\\.(md|mdx)$/, '');\n\t\treturn `./markdown/${pathWithoutExt}`;\n\t}\n\n\t// Import from source\n\tconst pathWithoutExt = filePath.replace(/\\.(tsx|ts)$/, '');\n\treturn `../src/client/routes/${pathWithoutExt}`;\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) => `import Route${i} from '${getImportPath(r.filePath)}';`,\n\t\t),\n\t\t...tree.layouts.map(\n\t\t\t(l, i) => `import Layout${i} from '${getImportPath(l.filePath)}';`,\n\t\t),\n\t\t...tree.notFoundRoutes.map(\n\t\t\t(nf, i) => `import NotFound${i} from '${getImportPath(nf.filePath)}';`,\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() &&\n\t\t\t\t\t/\\.(tsx|ts|md|mdx)$/.test(e.name) &&\n\t\t\t\t\t!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\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|md|mdx)$/, '');\n\t\t\tconst absSrc = join(contentDir, file);\n\t\t\tconst isMarkdown = /\\.(md|mdx)$/.test(file);\n\n\t\t\t// For markdown files, use the converted version from .reroute/markdown/\n\n\t\t\tconst buildSrc = isMarkdown\n\t\t\t\t? join(\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t'.reroute',\n\t\t\t\t\t\t'markdown',\n\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t'content',\n\t\t\t\t\t\t`${name}.tsx`,\n\t\t\t\t\t)\n\t\t\t\t: absSrc;\n\n\t\t\t// If targeting a converted markdown module, ensure it exists\n\t\t\tif (isMarkdown) {\n\t\t\t\ttry {\n\t\t\t\t\tconst exists = await Bun.file(buildSrc).exists();\n\t\t\t\t\tif (!exists) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`[reroute/content] Converted markdown missing, skipping: ${buildSrc}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\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 ${buildSrc}`);\n\t\t\t\tconst result = await Bun.build({\n\t\t\t\t\tentrypoints: [buildSrc],\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: Bun.env.NODE_ENV === 'production' ? 'linked' : 'none',\n\t\t\t\t\tminify: Bun.env.NODE_ENV === 'production',\n\t\t\t\t\tdefine: {\n\t\t\t\t\t\t'process.env.NODE_ENV':\n\t\t\t\t\t\t\tBun.env.NODE_ENV === 'production'\n\t\t\t\t\t\t\t\t? '\"production\"'\n\t\t\t\t\t\t\t\t: '\"development\"',\n\t\t\t\t\t},\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 ${buildSrc}`);\n\t\t\t\tconst url = `${pathToFileURL(buildSrc).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 preprocessMarkdownFiles(cwd: string): Promise<void> {\n\tconsole.log('[reroute/markdown] Starting markdown preprocessing...');\n\tconst routesPath = join(cwd, ROUTES_DIR);\n\tconst markdownDir = join(cwd, '.reroute', 'markdown');\n\n\t// Clean up previous markdown conversions\n\ttry {\n\t\tawait rm(markdownDir, { force: true, recursive: true });\n\t} catch {}\n\n\t// Check configuration but continue regardless (we will fallback if needed)\n\tconst markdownConfig = getMarkdownConfig(cwd);\n\tconsole.log('[reroute/markdown] Config:', markdownConfig);\n\n\t// Ensure base markdown directory exists before writing any files\n\ttry {\n\t\tawait mkdir(markdownDir, { recursive: true });\n\t} catch {}\n\n\t// Scan for markdown files (including in content directories)\n\tasync function scanMarkdown(dir: string, base = ''): Promise<string[]> {\n\t\tconst files: string[] = [];\n\t\ttry {\n\t\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst fullPath = join(dir, entry.name);\n\t\t\t\tconst relativePath = join(base, entry.name);\n\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\t// Process content directories too\n\t\t\t\t\tconst nested = await scanMarkdown(fullPath, relativePath);\n\t\t\t\t\tfiles.push(...nested);\n\t\t\t\t} else if (entry.isFile() && isMarkdownFile(entry.name)) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[reroute/markdown] Found markdown file: ${relativePath}`,\n\t\t\t\t\t);\n\t\t\t\t\tfiles.push(relativePath);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(`[reroute/markdown] Error scanning ${dir}:`, err);\n\t\t}\n\n\t\treturn files;\n\t}\n\n\tconsole.log(\n\t\t`[reroute/markdown] Scanning ${routesPath} for markdown files...`,\n\t);\n\tconst markdownFiles = await scanMarkdown(routesPath);\n\tconsole.log(`[reroute/markdown] Scan complete. Found files:`, markdownFiles);\n\n\tif (markdownFiles.length === 0) {\n\t\tconsole.log(\n\t\t\t'[reroute/markdown] No markdown files found, skipping preprocessing',\n\t\t);\n\t\treturn;\n\t}\n\n\tconsole.log(\n\t\t`[reroute/markdown] Found ${markdownFiles.length} markdown file(s)`,\n\t);\n\n\t// Ensure output directory exists\n\tawait mkdir(markdownDir, { recursive: true });\n\n\t// Process each markdown file\n\tfor (const file of markdownFiles) {\n\t\tconst sourcePath = join(routesPath, file);\n\t\tconst targetPath = join(markdownDir, file.replace(/\\.mdx?$/, '.tsx'));\n\n\t\ttry {\n\t\t\tconst processed = processMarkdownFile(sourcePath);\n\t\t\tconst isMdx = file.endsWith('.mdx');\n\n\t\t\tlet moduleCode: string;\n\t\t\tif (markdownConfig.isConfigured) {\n\t\t\t\tmoduleCode = await generateMarkdownModule(processed, cwd, {\n\t\t\t\t\tenableGfm: markdownConfig.hasRemarkGfm,\n\t\t\t\t\ttheme: 'github-dark',\n\t\t\t\t\tisMdx,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmoduleCode = generatePlainMarkdownModule(processed);\n\t\t\t}\n\n\t\t\t// Ensure target directory exists\n\t\t\tconst targetDir = join(\n\t\t\t\tmarkdownDir,\n\t\t\t\tfile.split('/').slice(0, -1).join('/'),\n\t\t\t);\n\t\t\tif (targetDir !== markdownDir) {\n\t\t\t\tawait mkdir(targetDir, { recursive: true });\n\t\t\t}\n\n\t\t\tawait writeFile(targetPath, moduleCode, 'utf-8');\n\t\t\tconsole.log(`[reroute/markdown] Processed ${file} -> ${targetPath}`);\n\t\t} catch (error) {\n\t\t\tconsole.error(`[reroute/markdown] Failed to process ${file}:`, error);\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// Preprocess markdown files before route generation\n\tawait preprocessMarkdownFiles(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\n\t\t// Keep markdown routes; preprocess will generate fallback modules\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\tawait buildTailwindIfConfigured(cwd);\n\t\tcheckMarkdownIfConfigured(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 buildTailwindIfConfigured(cwd);\n\t\tcheckMarkdownIfConfigured(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 buildTailwindIfConfigured(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 buildTailwindIfConfigured(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",
11
+ "/**\n * Boot command - Initialize .reroute folder with stub files\n *\n * This command creates the .reroute directory with minimal stub files\n * to prevent import errors when running the app for the first time\n * before the gen command has completed.\n */\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\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\nconst STUB_ROUTES = `// 🚨 Auto-generated stub by Reroute - DO NOT EDIT 🚨\n// Run 'reroute gen' to generate actual routes\n/* eslint-disable */\n// @ts-nocheck\n\nexport const layouts: any[] = [];\nexport const notFoundRoutes: any[] = [];\n\nexport function matchRoute(pathname: string): any {\n return null;\n}\n\nexport type RouteParams = Record<string, never>;\n`;\n\nconst STUB_CONTENT = `// 🚨 Auto-generated stub by Reroute - DO NOT EDIT 🚨\n// Run 'reroute gen' to generate actual content\n/* eslint-disable */\n// @ts-nocheck\n\nexport const contentRegistry: Record<string, any> = {};\n`;\n\nconst STUB_INDEX = `// 🚨 Auto-generated stub by Reroute - DO NOT EDIT 🚨\n// Run 'reroute gen' to generate actual artifacts\n/* eslint-disable */\n// @ts-nocheck\n\nimport { layouts, matchRoute, notFoundRoutes } from './routes';\n\nexport const artifacts = {\n layouts,\n matchRoute,\n notFoundRoutes,\n contentBaseUrl: '/.reroute/collections'\n} as const;\n\nexport type RerouteArtifacts = typeof artifacts;\n`;\n\nexport default async function boot(_: string[]) {\n\tconst cwd = process.cwd();\n\n\ttry {\n\t\tconsole.log('[reroute/boot] Initializing .reroute directory...');\n\n\t\t// Create .reroute directory\n\t\tawait mkdir(join(cwd, OUTPUT_DIR), { recursive: true });\n\n\t\t// Create collections directory\n\t\tawait mkdir(join(cwd, OUTPUT_COLLECTIONS_DIR), { recursive: true });\n\n\t\t// Write stub routes.ts\n\t\tawait writeFile(join(cwd, OUTPUT_ROUTES), STUB_ROUTES, 'utf-8');\n\t\tconsole.log(`[reroute/boot] Created stub: ${OUTPUT_ROUTES}`);\n\n\t\t// Write stub content.ts\n\t\tawait writeFile(join(cwd, OUTPUT_CONTENT_TS), STUB_CONTENT, 'utf-8');\n\t\tconsole.log(`[reroute/boot] Created stub: ${OUTPUT_CONTENT_TS}`);\n\n\t\t// Write stub index.ts\n\t\tawait writeFile(join(cwd, OUTPUT_INDEX), STUB_INDEX, 'utf-8');\n\t\tconsole.log(`[reroute/boot] Created stub: ${OUTPUT_INDEX}`);\n\n\t\tconsole.log('[reroute/boot] Initialization complete');\n\t\tconsole.log(\n\t\t\t'[reroute/boot] Run \"reroute gen\" to generate actual routes and content.',\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('[reroute/boot] Failed to initialize:', error);\n\t\tthrow error;\n\t}\n}\n",
12
+ "/**\n * Log colorization utilities\n *\n * Provides colorization for log prefixes in both blessed (TUI) and ANSI (console) formats.\n * Consumers can use [api] and [app] prefixes to differentiate their application logs.\n */\n\n/**\n * Map of prefix patterns to blessed color tags\n * Each prefix has a unique color for easy visual distinction\n */\nconst PREFIX_COLORS: Record<string, string> = {\n\t'[reroute]': '{cyan-fg}', // Base reroute logs - cyan\n\t'[reroute/gen]': '{bright-blue-fg}', // Generator - bright blue\n\t'[reroute/content]': '{magenta-fg}', // Content - magenta\n\t'[reroute/markdown]': '{yellow-fg}', // Markdown - yellow\n\t'[reroute/tailwind]': '{red-fg}', // Tailwind - red\n\t'[reroute/mdx]': '{bright-red-fg}', // MDX - bright red\n\t'[reroute/boot]': '{bright-yellow-fg}', // Boot - bright yellow\n\t'[reroute/dev]': '{green-fg}', // Dev command - green\n\t'[reroute/start]': '{bright-cyan-fg}', // Start command - bright cyan\n\t'[reroute/build]': '{bright-magenta-fg}', // Build command - bright magenta\n\t'[api]': '{blue-fg}', // API logs - blue\n\t'[app]': '{bright-green-fg}', // App logs - bright green\n};\n\n/**\n * Colorize log prefixes using blessed color tags (for TUI output)\n *\n * @param text - The log text to colorize\n * @returns Text with colorized prefixes using blessed tags\n */\nexport function colorizeLogPrefix(text: string): string {\n\tlet colored = text;\n\t// Sort prefixes by length (longest first) to match more specific prefixes before general ones\n\t// e.g., [reroute/markdown] should match before [reroute]\n\tconst sortedPrefixes = Object.entries(PREFIX_COLORS).sort(\n\t\t([a], [b]) => b.length - a.length,\n\t);\n\n\tfor (const [prefix, colorTag] of sortedPrefixes) {\n\t\t// Replace prefix with colored version\n\t\tcolored = colored.replace(\n\t\t\tnew RegExp(`(${prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')})`, 'g'),\n\t\t\t`${colorTag}$1{/}`,\n\t\t);\n\t}\n\n\treturn colored;\n}\n\n/**\n * Convert blessed color tags to ANSI escape codes (for console output)\n *\n * @param text - Text with blessed color tags\n * @returns Text with ANSI escape codes\n */\nexport function blessedToAnsi(text: string): string {\n\treturn (\n\t\ttext\n\t\t\t// Standard colors\n\t\t\t.replace(/\\{cyan-fg\\}/g, '\\x1b[36m')\n\t\t\t.replace(/\\{blue-fg\\}/g, '\\x1b[34m')\n\t\t\t.replace(/\\{magenta-fg\\}/g, '\\x1b[35m')\n\t\t\t.replace(/\\{yellow-fg\\}/g, '\\x1b[33m')\n\t\t\t.replace(/\\{green-fg\\}/g, '\\x1b[32m')\n\t\t\t.replace(/\\{red-fg\\}/g, '\\x1b[31m')\n\t\t\t// Bright colors\n\t\t\t.replace(/\\{bright-cyan-fg\\}/g, '\\x1b[96m')\n\t\t\t.replace(/\\{bright-blue-fg\\}/g, '\\x1b[94m')\n\t\t\t.replace(/\\{bright-magenta-fg\\}/g, '\\x1b[95m')\n\t\t\t.replace(/\\{bright-yellow-fg\\}/g, '\\x1b[93m')\n\t\t\t.replace(/\\{bright-green-fg\\}/g, '\\x1b[92m')\n\t\t\t.replace(/\\{bright-red-fg\\}/g, '\\x1b[91m')\n\t\t\t.replace(/\\{\\/\\}/g, '\\x1b[0m')\n\t);\n}\n\n/**\n * Colorize log prefixes and convert to ANSI codes (for console output)\n *\n * @param text - The log text to colorize\n * @returns Text with colorized prefixes using ANSI escape codes\n */\nexport function colorizeLogPrefixAnsi(text: string): string {\n\treturn blessedToAnsi(colorizeLogPrefix(text));\n}\n\n/**\n * Create a handler function for server output that colorizes logs\n *\n * @param buffer - Reference to a buffer string for incomplete lines\n * @returns Handler function for Buffer data\n */\nexport function createServerOutputHandler(buffer: { current: string }) {\n\treturn (data: Buffer) => {\n\t\tconst text = buffer.current + data.toString();\n\t\tconst lines = text.split('\\n');\n\t\tbuffer.current = lines.pop() || ''; // Keep last incomplete line\n\n\t\tfor (const line of lines) {\n\t\t\t// Skip empty lines\n\t\t\tconst trimmedLine = line.trim();\n\t\t\tif (!trimmedLine) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Colorize the line (preserves existing prefixes or leaves unprefixed lines as-is)\n\t\t\tconst ansiColored = colorizeLogPrefixAnsi(line);\n\t\t\tconsole.log(ansiColored);\n\t\t}\n\t};\n}\n",
13
+ "/**\n * Dev command - Start development environment\n *\n * This command runs:\n * 1. `reroute boot` (waits for completion)\n * 2. `reroute gen --watch` and `bun --watch src/index.ts` in parallel with side-by-side logs\n */\n\nimport { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n\tcolorizeLogPrefix,\n\tcolorizeLogPrefixAnsi,\n\tcreateServerOutputHandler,\n} from '../libs/log';\nimport boot from './boot';\n\nfunction getRerouteCommand(): string {\n\t// Check if we're running from source (development mode)\n\t// Look for bin.ts in the expected location relative to this file\n\tconst binPath = join(import.meta.dir, '..', '..', 'bin.ts');\n\tconst isBunDev = existsSync(binPath);\n\n\tif (isBunDev) {\n\t\t// Running via bun during development from source\n\t\treturn `bun ${binPath}`;\n\t}\n\n\t// Check for reroute binary in node_modules/.bin, checking up to 3 levels up\n\tconst cwd = process.cwd();\n\tconst nodeModulesPaths = [\n\t\tjoin(cwd, 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', '..', 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', '..', '..', 'node_modules', '.bin', 'reroute'),\n\t];\n\n\tfor (const binPath of nodeModulesPaths) {\n\t\tif (existsSync(binPath)) {\n\t\t\treturn binPath;\n\t\t}\n\t}\n\n\t// Fallback: assume reroute is installed globally and available in PATH\n\treturn 'reroute';\n}\n\nexport default async function dev(args: string[]) {\n\tconst singleColumn = args.includes('--single') || args.includes('-s');\n\ttry {\n\t\t// Step 1: Run boot first\n\t\tconsole.log('[reroute/dev] Running boot...');\n\t\tawait boot([]);\n\t\tconsole.log('[reroute/dev] Boot complete\\n');\n\n\t\t// Step 2 & 3: Run gen --watch and bun --watch in parallel\n\t\tconsole.log('[reroute/dev] Starting development servers...');\n\t\tconsole.log('[reroute/dev] Press Ctrl+C to stop\\n');\n\n\t\tconst rerouteCmd = getRerouteCommand();\n\n\t\t// Spawn gen process\n\t\t// If rerouteCmd contains spaces (like \"bun packages/cli/bin.ts\"), use shell mode\n\t\t// Otherwise, it's either an absolute path or 'reroute' command\n\t\tconst useShell = rerouteCmd.includes(' ');\n\t\tconst genCommand = useShell ? `${rerouteCmd} gen --watch` : rerouteCmd;\n\t\tconst genArgs = useShell ? [] : ['gen', '--watch'];\n\n\t\tconst genProcess = spawn(genCommand, genArgs, {\n\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t\tshell: useShell,\n\t\t});\n\n\t\t// Spawn server process\n\t\tconst serverProcess = spawn('bun', ['--watch', 'src/index.ts'], {\n\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t});\n\n\t\tif (singleColumn) {\n\t\t\t// Single column mode - use regular console output with colors\n\t\t\t// Buffer for incomplete lines\n\t\t\tconst genBuffer = { current: '' };\n\t\t\tconst serverBuffer = { current: '' };\n\n\t\t\tconst handleGenOutput = (data: Buffer) => {\n\t\t\t\tconst text = genBuffer.current + data.toString();\n\t\t\t\tconst lines = text.split('\\n');\n\t\t\t\tgenBuffer.current = lines.pop() || ''; // Keep last incomplete line\n\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t// Skip empty lines\n\t\t\t\t\tif (!line.trim()) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst ansiColored = colorizeLogPrefixAnsi(line);\n\t\t\t\t\tconsole.log(ansiColored);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst handleServerOutput = createServerOutputHandler(serverBuffer);\n\n\t\t\tgenProcess.stdout?.on('data', handleGenOutput);\n\t\t\tgenProcess.stderr?.on('data', handleGenOutput);\n\t\t\tserverProcess.stdout?.on('data', handleServerOutput);\n\t\t\tserverProcess.stderr?.on('data', handleServerOutput);\n\n\t\t\tgenProcess.on('exit', (code) => {\n\t\t\t\tconsole.log(`\\n[reroute/gen] Process exited with code ${code}`);\n\t\t\t});\n\n\t\t\tserverProcess.on('exit', (code) => {\n\t\t\t\tconsole.log(`\\n[server] Process exited with code ${code}`);\n\t\t\t});\n\n\t\t\t// Handle Ctrl+C\n\t\t\tprocess.on('SIGINT', () => {\n\t\t\t\tconsole.log('\\n[reroute/dev] Shutting down...');\n\t\t\t\tgenProcess.kill('SIGINT');\n\t\t\t\tserverProcess.kill('SIGINT');\n\t\t\t\tprocess.exit(0);\n\t\t\t});\n\t\t} else {\n\t\t\t// Side-by-side mode - use blessed-contrib\n\t\t\tconst blessed = await import('blessed');\n\t\t\tconst contrib = await import('blessed-contrib');\n\n\t\t\tconst screen = blessed.default.screen({\n\t\t\t\tsmartCSR: true,\n\t\t\t\ttitle: 'reroute dev',\n\t\t\t\tmouse: true, // Enable mouse support for scrolling\n\t\t\t});\n\n\t\t\tconst grid = new contrib.default.grid({\n\t\t\t\trows: 1,\n\t\t\t\tcols: 2,\n\t\t\t\tscreen: screen,\n\t\t\t});\n\n\t\t\t// Create log boxes for each process\n\t\t\tconst genBox = grid.set(0, 0, 1, 1, blessed.default.log, {\n\t\t\t\tlabel: ' reroute gen --watch ',\n\t\t\t\tborder: { type: 'line' },\n\t\t\t\tstyle: {\n\t\t\t\t\tborder: { fg: 'cyan' },\n\t\t\t\t},\n\t\t\t\tscrollable: true,\n\t\t\t\talwaysScroll: true,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tch: ' ',\n\t\t\t\t\tinverse: true,\n\t\t\t\t},\n\t\t\t\ttags: true, // Enable color tags\n\t\t\t\tkeys: true, // Enable key bindings\n\t\t\t\tvi: true, // Enable vi keys\n\t\t\t\tmouse: true, // Enable mouse support\n\t\t\t\tinput: true, // Allow input focus for text selection\n\t\t\t\tclickable: true, // Make boxes clickable\n\t\t\t});\n\n\t\t\tconst serverBox = grid.set(0, 1, 1, 1, blessed.default.log, {\n\t\t\t\tlabel: ' bun --watch src/index.ts ',\n\t\t\t\tborder: { type: 'line' },\n\t\t\t\tstyle: {\n\t\t\t\t\tborder: { fg: 'green' },\n\t\t\t\t},\n\t\t\t\tscrollable: true,\n\t\t\t\talwaysScroll: true,\n\t\t\t\tscrollbar: {\n\t\t\t\t\tch: ' ',\n\t\t\t\t\tinverse: true,\n\t\t\t\t},\n\t\t\t\ttags: true, // Enable color tags\n\t\t\t\tkeys: true, // Enable key bindings\n\t\t\t\tvi: true, // Enable vi keys\n\t\t\t\tmouse: true, // Enable mouse support\n\t\t\t\tinput: true, // Allow input focus for text selection\n\t\t\t\tclickable: true, // Make boxes clickable\n\t\t\t});\n\n\t\t\t// Add scrolling key bindings for genBox\n\t\t\tgenBox.key(['up', 'k'], () => {\n\t\t\t\tgenBox.scroll(-1);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tgenBox.key(['down', 'j'], () => {\n\t\t\t\tgenBox.scroll(1);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tgenBox.key(['pageup'], () => {\n\t\t\t\tgenBox.scroll(-genBox.height);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tgenBox.key(['pagedown'], () => {\n\t\t\t\tgenBox.scroll(genBox.height);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tgenBox.key(['home', 'g'], () => {\n\t\t\t\tgenBox.setScrollPerc(0);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tgenBox.key(['end', 'G'], () => {\n\t\t\t\tgenBox.setScrollPerc(100);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\t// Add scrolling key bindings for serverBox\n\t\t\tserverBox.key(['up', 'k'], () => {\n\t\t\t\tserverBox.scroll(-1);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.key(['down', 'j'], () => {\n\t\t\t\tserverBox.scroll(1);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.key(['pageup'], () => {\n\t\t\t\tserverBox.scroll(-serverBox.height);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.key(['pagedown'], () => {\n\t\t\t\tserverBox.scroll(serverBox.height);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.key(['home', 'g'], () => {\n\t\t\t\tserverBox.setScrollPerc(0);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.key(['end', 'G'], () => {\n\t\t\t\tserverBox.setScrollPerc(100);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\t// Add mouse wheel support\n\t\t\tgenBox.on('wheeldown', () => {\n\t\t\t\tgenBox.scroll(3);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tgenBox.on('wheelup', () => {\n\t\t\t\tgenBox.scroll(-3);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.on('wheeldown', () => {\n\t\t\t\tserverBox.scroll(3);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.on('wheelup', () => {\n\t\t\t\tserverBox.scroll(-3);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\t// Focus handling - click to focus a box\n\t\t\tgenBox.on('click', () => {\n\t\t\t\tgenBox.focus();\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverBox.on('click', () => {\n\t\t\t\tserverBox.focus();\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\t// Tab to switch between boxes\n\t\t\tscreen.key(['tab'], () => {\n\t\t\t\tif (screen.focused === genBox) {\n\t\t\t\t\tserverBox.focus();\n\t\t\t\t} else {\n\t\t\t\t\tgenBox.focus();\n\t\t\t\t}\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\t// Start with genBox focused\n\t\t\tgenBox.focus();\n\n\t\t\tscreen.render();\n\n\t\t\t// Handle gen output with colorization\n\t\t\tgenProcess.stdout?.on('data', (data: Buffer) => {\n\t\t\t\tconst text = data.toString();\n\t\t\t\t// Filter out empty lines\n\t\t\t\tconst lines = text.split('\\n').filter((line) => line.trim());\n\t\t\t\tif (lines.length > 0) {\n\t\t\t\t\tconst colored = colorizeLogPrefix(lines.join('\\n'));\n\t\t\t\t\tgenBox.log(colored);\n\t\t\t\t\tscreen.render();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tgenProcess.stderr?.on('data', (data: Buffer) => {\n\t\t\t\tconst text = data.toString();\n\t\t\t\t// Filter out empty lines\n\t\t\t\tconst lines = text.split('\\n').filter((line) => line.trim());\n\t\t\t\tif (lines.length > 0) {\n\t\t\t\t\tconst colored = colorizeLogPrefix(lines.join('\\n'));\n\t\t\t\t\tgenBox.log(colored);\n\t\t\t\t\tscreen.render();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle server output\n\t\t\tserverProcess.stdout?.on('data', (data: Buffer) => {\n\t\t\t\tconst text = data.toString();\n\t\t\t\t// Filter out empty lines and colorize\n\t\t\t\tconst filteredText = text\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.filter((line) => line.trim()) // Filter out empty lines\n\t\t\t\t\t.join('\\n');\n\t\t\t\tif (filteredText) {\n\t\t\t\t\tconst colored = colorizeLogPrefix(filteredText);\n\t\t\t\t\tserverBox.log(colored);\n\t\t\t\t\tscreen.render();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tserverProcess.stderr?.on('data', (data: Buffer) => {\n\t\t\t\tconst text = data.toString();\n\t\t\t\t// Filter out empty lines and colorize\n\t\t\t\tconst filteredText = text\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.filter((line) => line.trim()) // Filter out empty lines\n\t\t\t\t\t.join('\\n');\n\t\t\t\tif (filteredText) {\n\t\t\t\t\tconst colored = colorizeLogPrefix(filteredText);\n\t\t\t\t\tserverBox.log(colored);\n\t\t\t\t\tscreen.render();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle process exit\n\t\t\tgenProcess.on('exit', (code) => {\n\t\t\t\tgenBox.log(`\\n[Process exited with code ${code}]`);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\tserverProcess.on('exit', (code) => {\n\t\t\t\tserverBox.log(`\\n[Process exited with code ${code}]`);\n\t\t\t\tscreen.render();\n\t\t\t});\n\n\t\t\t// Handle Ctrl+C\n\t\t\tscreen.key(['escape', 'q', 'C-c'], () => {\n\t\t\t\tgenProcess.kill('SIGINT');\n\t\t\t\tserverProcess.kill('SIGINT');\n\t\t\t\tscreen.destroy();\n\t\t\t\tprocess.exit(0);\n\t\t\t});\n\n\t\t\t// Handle window resize\n\t\t\tscreen.on('resize', () => {\n\t\t\t\tscreen.render();\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\t// Handle Ctrl+C gracefully\n\t\tif ((error as { code?: string }).code === 'SIGINT') {\n\t\t\tconsole.log('\\n[reroute/dev] Shutting down...');\n\t\t\tprocess.exit(0);\n\t\t}\n\t\tconsole.error('[reroute/dev] Error:', error);\n\t\tthrow error;\n\t}\n}\n",
14
+ "/**\n * Start command - Run production-like server\n *\n * This command runs:\n * 1. `reroute boot` (waits for completion)\n * 2. `reroute gen` (waits for completion, no watch)\n * 3. `bun src/index.ts` (runs the server, no watch)\n */\n\nimport { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { colorizeLogPrefixAnsi, createServerOutputHandler } from '../libs/log';\n\nfunction getRerouteCommand(): string {\n\t// Check if we're running from source (development mode)\n\t// Look for bin.ts in the expected location relative to this file\n\tconst binPath = join(import.meta.dir, '..', '..', 'bin.ts');\n\tconst isBunDev = existsSync(binPath);\n\n\tif (isBunDev) {\n\t\t// Running via bun during development from source\n\t\treturn `bun ${binPath}`;\n\t}\n\n\t// Check for reroute binary in node_modules/.bin, checking up to 3 levels up\n\tconst cwd = process.cwd();\n\tconst nodeModulesPaths = [\n\t\tjoin(cwd, 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', '..', 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', '..', '..', 'node_modules', '.bin', 'reroute'),\n\t];\n\n\tfor (const binPath of nodeModulesPaths) {\n\t\tif (existsSync(binPath)) {\n\t\t\treturn binPath;\n\t\t}\n\t}\n\n\t// Fallback: assume reroute is installed globally and available in PATH\n\treturn 'reroute';\n}\n\nexport default async function start(_args: string[]) {\n\ttry {\n\t\tconst rerouteCmd = getRerouteCommand();\n\t\tconst useShell = rerouteCmd.includes(' ');\n\n\t\t// Buffer for incomplete lines\n\t\tconst bootBuffer = { current: '' };\n\t\tconst genBuffer = { current: '' };\n\n\t\tconst handleBootOutput = (data: Buffer) => {\n\t\t\tconst text = bootBuffer.current + data.toString();\n\t\t\tconst lines = text.split('\\n');\n\t\t\tbootBuffer.current = lines.pop() || '';\n\n\t\t\tfor (const line of lines) {\n\t\t\t\t// Skip empty lines\n\t\t\t\tif (!line.trim()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst ansiColored = colorizeLogPrefixAnsi(line);\n\t\t\t\tconsole.log(ansiColored);\n\t\t\t}\n\t\t};\n\n\t\tconst handleGenOutput = (data: Buffer) => {\n\t\t\tconst text = genBuffer.current + data.toString();\n\t\t\tconst lines = text.split('\\n');\n\t\t\tgenBuffer.current = lines.pop() || '';\n\n\t\t\tfor (const line of lines) {\n\t\t\t\t// Skip empty lines\n\t\t\t\tif (!line.trim()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst ansiColored = colorizeLogPrefixAnsi(line);\n\t\t\t\tconsole.log(ansiColored);\n\t\t\t}\n\t\t};\n\n\t\t// Step 1: Run boot first\n\t\tprocess.stdout.write(\n\t\t\t`${colorizeLogPrefixAnsi('[reroute/start] Running boot...')}\\n`,\n\t\t);\n\t\tconst bootCommand = useShell ? `${rerouteCmd} boot` : rerouteCmd;\n\t\tconst bootArgs = useShell ? [] : ['boot'];\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst bootProcess = spawn(bootCommand, bootArgs, {\n\t\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t\t\tshell: useShell,\n\t\t\t});\n\n\t\t\tbootProcess.stdout?.on('data', handleBootOutput);\n\t\t\tbootProcess.stderr?.on('data', handleBootOutput);\n\n\t\t\tbootProcess.on('exit', (code) => {\n\t\t\t\tif (code !== null && code !== 0) {\n\t\t\t\t\treject(new Error(`Boot exited with code ${code}`));\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tbootProcess.on('error', (error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t\tprocess.stdout.write(\n\t\t\tcolorizeLogPrefixAnsi('[reroute/start] Boot complete\\n'),\n\t\t);\n\n\t\t// Step 2: Run gen (without watch)\n\t\tprocess.stdout.write(\n\t\t\t`${colorizeLogPrefixAnsi('[reroute/start] Running gen...')}\\n`,\n\t\t);\n\t\tconst genCommand = useShell ? `${rerouteCmd} gen` : rerouteCmd;\n\t\tconst genArgs = useShell ? [] : ['gen'];\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst genProcess = spawn(genCommand, genArgs, {\n\t\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t\t\tshell: useShell,\n\t\t\t});\n\n\t\t\tgenProcess.stdout?.on('data', handleGenOutput);\n\t\t\tgenProcess.stderr?.on('data', handleGenOutput);\n\n\t\t\tgenProcess.on('exit', (code) => {\n\t\t\t\tif (code !== null && code !== 0) {\n\t\t\t\t\treject(new Error(`Gen exited with code ${code}`));\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tgenProcess.on('error', (error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t\tprocess.stdout.write(\n\t\t\tcolorizeLogPrefixAnsi('[reroute/start] Generation complete\\n'),\n\t\t);\n\n\t\t// Step 3: Run the server\n\t\tprocess.stdout.write(\n\t\t\t`${colorizeLogPrefixAnsi('[reroute/start] Starting server...')}\\n`,\n\t\t);\n\t\tprocess.stdout.write(\n\t\t\tcolorizeLogPrefixAnsi('[reroute/start] Press Ctrl+C to stop\\n'),\n\t\t);\n\n\t\tconst serverProcess = spawn('bun', ['src/index.ts'], {\n\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t});\n\n\t\t// Buffer for incomplete lines\n\t\tconst serverBuffer = { current: '' };\n\t\tconst handleServerOutput = createServerOutputHandler(serverBuffer);\n\n\t\tserverProcess.stdout?.on('data', handleServerOutput);\n\t\tserverProcess.stderr?.on('data', handleServerOutput);\n\n\t\t// Handle Ctrl+C\n\t\tprocess.on('SIGINT', () => {\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${colorizeLogPrefixAnsi('\\n[reroute/start] Shutting down...')}\\n`,\n\t\t\t);\n\t\t\tserverProcess.kill('SIGINT');\n\t\t\tprocess.exit(0);\n\t\t});\n\n\t\t// Wait for the server process to exit\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tserverProcess.on('exit', (code) => {\n\t\t\t\tif (code !== null && code !== 0) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\tcolorizeLogPrefixAnsi(\n\t\t\t\t\t\t\t`[reroute/start] Server exited with code ${code}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treject(new Error(`Server exited with code ${code}`));\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tserverProcess.on('error', (error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t} catch (error) {\n\t\t// Handle Ctrl+C gracefully\n\t\tif ((error as { code?: string }).code === 'SIGINT') {\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${colorizeLogPrefixAnsi('\\n[reroute/start] Shutting down...')}\\n`,\n\t\t\t);\n\t\t\tprocess.exit(0);\n\t\t}\n\t\tprocess.stderr.write(\n\t\t\t`${colorizeLogPrefixAnsi('[reroute/start] Error: ') + String(error)}\\n`,\n\t\t);\n\t\tthrow error;\n\t}\n}\n",
15
+ "/**\n * Build command - Build production binary\n *\n * This command runs:\n * 1. `reroute boot` (waits for completion)\n * 2. `reroute gen` (waits for completion, no watch)\n * 3. `bun build src/index.ts --target bun --compile --outfile ./dist/{name}`\n */\n\nimport { spawn } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { colorizeLogPrefixAnsi } from '../libs/log';\n\nfunction getRerouteCommand(): string {\n\t// Check if we're running from source (development mode)\n\t// Look for bin.ts in the expected location relative to this file\n\tconst binPath = join(import.meta.dir, '..', '..', 'bin.ts');\n\tconst isBunDev = existsSync(binPath);\n\n\tif (isBunDev) {\n\t\t// Running via bun during development from source\n\t\treturn `bun ${binPath}`;\n\t}\n\n\t// Check for reroute binary in node_modules/.bin, checking up to 3 levels up\n\tconst cwd = process.cwd();\n\tconst nodeModulesPaths = [\n\t\tjoin(cwd, 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', '..', 'node_modules', '.bin', 'reroute'),\n\t\tjoin(cwd, '..', '..', '..', 'node_modules', '.bin', 'reroute'),\n\t];\n\n\tfor (const binPath of nodeModulesPaths) {\n\t\tif (existsSync(binPath)) {\n\t\t\treturn binPath;\n\t\t}\n\t}\n\n\t// Fallback: assume reroute is installed globally and available in PATH\n\treturn 'reroute';\n}\n\nfunction getOutputName(): string {\n\tconst cwd = process.cwd();\n\tconst packageJsonPath = join(cwd, 'package.json');\n\n\tif (existsSync(packageJsonPath)) {\n\t\ttry {\n\t\t\tconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n\t\t\tconst name = packageJson.name;\n\t\t\tif (name) {\n\t\t\t\t// Extract name from package.json (e.g., \"reroute-blog-example\" -> \"blog\")\n\t\t\t\t// Or use the name directly if it's simple\n\t\t\t\tconst parts = name.split('-');\n\t\t\t\t// If name has multiple parts, use the second-to-last or last meaningful part\n\t\t\t\tif (parts.length > 1 && parts[parts.length - 1] === 'example') {\n\t\t\t\t\treturn parts[parts.length - 2] || 'app';\n\t\t\t\t}\n\t\t\t\t// Use last part or full name if simple\n\t\t\t\treturn parts[parts.length - 1] || name;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fallback to 'app' if package.json parsing fails\n\t\t}\n\t}\n\n\treturn 'app';\n}\n\nexport default async function build(args: string[]) {\n\ttry {\n\t\tconst rerouteCmd = getRerouteCommand();\n\t\tconst useShell = rerouteCmd.includes(' ');\n\n\t\t// Parse output path from args or derive from package.json\n\t\tlet outputPath = `./dist/${getOutputName()}`;\n\t\tconst outfileIndex = args.indexOf('--outfile');\n\t\tconst shortOutfileIndex = args.indexOf('-o');\n\t\tconst outfileArgIndex =\n\t\t\toutfileIndex !== -1 ? outfileIndex : shortOutfileIndex;\n\n\t\tif (outfileArgIndex !== -1 && args[outfileArgIndex + 1]) {\n\t\t\toutputPath = args[outfileArgIndex + 1];\n\t\t}\n\n\t\t// Buffer for incomplete lines\n\t\tconst bootBuffer = { current: '' };\n\t\tconst genBuffer = { current: '' };\n\n\t\tconst handleBootOutput = (data: Buffer) => {\n\t\t\tconst text = bootBuffer.current + data.toString();\n\t\t\tconst lines = text.split('\\n');\n\t\t\tbootBuffer.current = lines.pop() || '';\n\n\t\t\tfor (const line of lines) {\n\t\t\t\t// Skip empty lines\n\t\t\t\tif (!line.trim()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst ansiColored = colorizeLogPrefixAnsi(line);\n\t\t\t\tconsole.log(ansiColored);\n\t\t\t}\n\t\t};\n\n\t\tconst handleGenOutput = (data: Buffer) => {\n\t\t\tconst text = genBuffer.current + data.toString();\n\t\t\tconst lines = text.split('\\n');\n\t\t\tgenBuffer.current = lines.pop() || '';\n\n\t\t\tfor (const line of lines) {\n\t\t\t\t// Skip empty lines\n\t\t\t\tif (!line.trim()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst ansiColored = colorizeLogPrefixAnsi(line);\n\t\t\t\tconsole.log(ansiColored);\n\t\t\t}\n\t\t};\n\n\t\t// Step 1: Run boot first\n\t\tprocess.stdout.write(\n\t\t\t`${colorizeLogPrefixAnsi('[reroute/build] Running boot...')}\\n`,\n\t\t);\n\t\tconst bootCommand = useShell ? `${rerouteCmd} boot` : rerouteCmd;\n\t\tconst bootArgs = useShell ? [] : ['boot'];\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst bootProcess = spawn(bootCommand, bootArgs, {\n\t\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t\t\tshell: useShell,\n\t\t\t});\n\n\t\t\tbootProcess.stdout?.on('data', handleBootOutput);\n\t\t\tbootProcess.stderr?.on('data', handleBootOutput);\n\n\t\t\tbootProcess.on('exit', (code) => {\n\t\t\t\tif (code !== null && code !== 0) {\n\t\t\t\t\treject(new Error(`Boot exited with code ${code}`));\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tbootProcess.on('error', (error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t\tprocess.stdout.write(\n\t\t\tcolorizeLogPrefixAnsi('[reroute/build] Boot complete\\n'),\n\t\t);\n\n\t\t// Step 2: Run gen (without watch)\n\t\tprocess.stdout.write(\n\t\t\t`${colorizeLogPrefixAnsi('[reroute/build] Running gen...')}\\n`,\n\t\t);\n\t\tconst genCommand = useShell ? `${rerouteCmd} gen` : rerouteCmd;\n\t\tconst genArgs = useShell ? [] : ['gen'];\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst genProcess = spawn(genCommand, genArgs, {\n\t\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t\t\tshell: useShell,\n\t\t\t});\n\n\t\t\tgenProcess.stdout?.on('data', handleGenOutput);\n\t\t\tgenProcess.stderr?.on('data', handleGenOutput);\n\n\t\t\tgenProcess.on('exit', (code) => {\n\t\t\t\tif (code !== null && code !== 0) {\n\t\t\t\t\treject(new Error(`Gen exited with code ${code}`));\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tgenProcess.on('error', (error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t\tprocess.stdout.write(\n\t\t\tcolorizeLogPrefixAnsi('[reroute/build] Generation complete\\n'),\n\t\t);\n\n\t\t// Step 3: Build the binary\n\t\tprocess.stdout.write(\n\t\t\t`${colorizeLogPrefixAnsi(`[reroute/build] Building binary to ${outputPath}...`)}\\n`,\n\t\t);\n\n\t\t// Check if we're in production mode\n\t\tconst isProduction =\n\t\t\tprocess.env.NODE_ENV === 'production' || args.includes('--minify');\n\n\t\t// Build bun build args, filtering out --outfile/-o flags since we handle them\n\t\tconst buildArgs = ['build', 'src/index.ts', '--target', 'bun', '--compile'];\n\n\t\t// Add minify flag for production builds\n\t\tif (isProduction) {\n\t\t\tbuildArgs.push('--minify');\n\t\t}\n\n\t\t// Filter out --outfile/-o and its value, then add our parsed outputPath\n\t\t// Also filter out --minify/--no-minify/--production since we handle them\n\t\tconst filteredArgs = args.filter((arg, idx) => {\n\t\t\tif (outfileArgIndex !== -1) {\n\t\t\t\tif (idx === outfileArgIndex || idx === outfileArgIndex + 1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn (\n\t\t\t\targ !== '--outfile' &&\n\t\t\t\targ !== '-o' &&\n\t\t\t\targ !== '--minify' &&\n\t\t\t\targ !== '--no-minify'\n\t\t\t);\n\t\t});\n\n\t\tbuildArgs.push(...filteredArgs, '--outfile', outputPath);\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst buildProcess = spawn('bun', buildArgs, {\n\t\t\t\tstdio: 'inherit',\n\t\t\t});\n\n\t\t\tbuildProcess.on('exit', (code) => {\n\t\t\t\tif (code !== null && code !== 0) {\n\t\t\t\t\treject(new Error(`Build exited with code ${code}`));\n\t\t\t\t} else {\n\t\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t\tcolorizeLogPrefixAnsi(\n\t\t\t\t\t\t\t`[reroute/build] Build complete: ${outputPath}\\n`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tbuildProcess.on('error', (error) => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t} catch (error) {\n\t\tprocess.stderr.write(\n\t\t\t`${colorizeLogPrefixAnsi('[reroute/build] Error: ') + String(error)}\\n`,\n\t\t);\n\t\tthrow error;\n\t}\n}\n",
16
+ "#!/usr/bin/env bun\n\n/**\n * Reroute CLI\n *\n * Command-line interface for Reroute framework operations.\n */\n\nimport path from 'node:path';\n\n// Version and commit injected at build time\ndeclare const __REROUTE_VERSION__: string;\ndeclare const __REROUTE_COMMIT__: string;\n\nconst commands = {\n\tinit: () => import('./commands/init'),\n\tgen: () => import('./commands/gen'),\n\tboot: () => import('./commands/boot'),\n\tdev: () => import('./commands/dev'),\n\tstart: () => import('./commands/start'),\n\tbuild: () => import('./commands/build'),\n};\n\ntype Command = keyof typeof commands;\n\nasync function main() {\n\tconst args = process.argv.slice(2);\n\n\tif (args[0] === '--version' || args[0] === '-v') {\n\t\tconst version = await getVersionString();\n\t\tconsole.log(version);\n\t\tprocess.exit(0);\n\t}\n\n\tif (args.length === 0 || args[0] === '--help' || args[0] === '-h') {\n\t\tawait printHelp();\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\tawait printHelp();\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\nasync function printHelp() {\n\tconsole.log('');\n\tconsole.log(await getVersionString());\n\tconsole.log('');\n\tconsole.log('');\n\tconsole.log('Usage:');\n\tconsole.log('');\n\tconsole.log(' reroute <command> [options]');\n\tconsole.log('');\n\tconsole.log('');\n\tconsole.log('Commands:');\n\tconsole.log('');\n\tconsole.log(' init Scaffold a new Reroute project');\n\tconsole.log(' boot Initialize .reroute directory with stub files');\n\tconsole.log(' gen Generate content registry and static assets');\n\tconsole.log(' dev Start development environment');\n\tconsole.log(' start Run production-like server locally');\n\tconsole.log(' build Build production binary');\n\tconsole.log('');\n\tconsole.log('');\n\tconsole.log('Options:');\n\tconsole.log('');\n\tconsole.log(' -h, --help Show help');\n\tconsole.log(' -v, --version Show version');\n\tconsole.log('');\n\tconsole.log('');\n\tconsole.log('Examples:');\n\tconsole.log('');\n\tconsole.log(' reroute init my-app');\n\tconsole.log(' reroute boot');\n\tconsole.log('');\n\tconsole.log(' reroute gen');\n\tconsole.log(' reroute gen -w');\n\tconsole.log(' reroute gen --watch');\n\tconsole.log('');\n\tconsole.log(' reroute dev');\n\tconsole.log(' reroute dev -s');\n\tconsole.log(' reroute dev --single');\n\tconsole.log('');\n\tconsole.log(' reroute start');\n\tconsole.log('');\n\tconsole.log(' reroute build');\n\tconsole.log(' reroute build -o ./dist/myapp');\n\tconsole.log(' reroute build --outfile ./dist/myapp');\n}\n\nasync function getVersionString(): Promise<string> {\n\tconst version = await getVersion();\n\tconst commit = await getCommit();\n\treturn `Reroute v${version} ${commit}`;\n}\n\nasync function getVersion(): Promise<string> {\n\t// Use version injected at build time\n\tif (typeof __REROUTE_VERSION__ !== 'undefined') {\n\t\treturn __REROUTE_VERSION__;\n\t}\n\n\t// Fallback for development: try to find package.json\n\tconst possiblePaths = [\n\t\tpath.join(import.meta.dir, '../../../package.json'),\n\t\tpath.join(import.meta.dir, '../../package.json'),\n\t\tpath.join(import.meta.dir, '../package.json'),\n\t];\n\n\tfor (const pkgPath of possiblePaths) {\n\t\ttry {\n\t\t\tconst pkg = await Bun.file(pkgPath).json();\n\t\t\treturn pkg.version;\n\t\t} catch {}\n\t}\n\n\treturn 'unknown';\n}\n\nasync function getCommit(): Promise<string> {\n\t// Use commit injected at build time\n\tif (typeof __REROUTE_COMMIT__ !== 'undefined') {\n\t\treturn __REROUTE_COMMIT__;\n\t}\n\n\t// Fallback for development\n\treturn 'dev';\n}\n\nmain();\n"
13
17
  ],
14
- "mappings": "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",
15
- "debugId": "2D274D049C51338A64756E2164756E21",
18
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAMA,eAAsB,gBAAgB,GAAoB;AAAA,EACzD,MAAM,UAAU,MAAM,WAAW;AAAA,EACjC,MAAM,SAAS,MAAM,UAAU;AAAA,EAC/B,OAAO,YAAY,WAAW;AAAA;AAG/B,eAAe,UAAU,GAAoB;AAAA,EAE5C,IAAI,MAA4C;AAAA,IAC/C,OAAO;AAAA,EACR;AAAA,EAGA,MAAM,gBAAgB;AAAA,IACrB,KAAK,KAAK,YAAY,KAAK,0BAA0B;AAAA,IACrD,KAAK,KAAK,YAAY,KAAK,uBAAuB;AAAA,IAClD,KAAK,KAAK,YAAY,KAAK,oBAAoB;AAAA,IAC/C,KAAK,KAAK,YAAY,KAAK,iBAAiB;AAAA,EAC7C;AAAA,EAEA,WAAW,WAAW,eAAe;AAAA,IACpC,IAAI;AAAA,MACH,MAAM,MAAM,MAAM,IAAI,KAAK,OAAO,EAAE,KAAK;AAAA,MACzC,OAAO,IAAI;AAAA,MACV,MAAM;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGR,eAAe,SAAS,GAAoB;AAAA,EAE3C,IAAI,MAA2C;AAAA,IAC9C,OAAO;AAAA,EACR;AAAA,EAGA,OAAO;AAAA;AAAA;;;;;;;ACnCR;AACA;AACA;AAQA,eAA8B,IAAI,CAAC,MAAgB;AAAA,EAClD,MAAM,UAAU,UAAU,IAAI;AAAA,EAE9B,IAAI,CAAC,SAAS;AAAA,IACb,MAAM,UAAU;AAAA,IAChB,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,WAAuC;AAAA,EAG3C,MAAM,gBAAgB,KAAK,QAAQ,YAAY;AAAA,EAC/C,IAAI,kBAAkB,MAAM,KAAK,gBAAgB,IAAI;AAAA,IACpD,MAAM,cAAc,KAAK,gBAAgB;AAAA,IACzC,IAAI,CAAC,SAAS,QAAQ,OAAO,EAAE,SAAS,WAAW,GAAG;AAAA,MACrD,WAAW;AAAA,IACZ,EAAO;AAAA,MACN,QAAQ,MACP,4BAA4B,uDAC7B;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,kCAA0B,aAAa;AAAA,EACnD,QAAQ,IAAI;AAAA,0BAAkB;AAAA,CAAY;AAAA,EAI1C,MAAM,wBAAwB;AAAA,IAE7B,KAAK,YAAY,KAAK,MAAM,KAAK,QAAQ;AAAA,IAEzC,KAAK,YAAY,KAAK,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,EACtD;AAAA,EAEA,IAAI;AAAA,EACJ,WAAW,SAAQ,uBAAuB;AAAA,IACzC,IAAI,WAAW,KAAI,GAAG;AAAA,MACrB,eAAe;AAAA,MACf;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAAI,CAAC,cAAc;AAAA,IAClB,QAAQ,MACP,qDAAqD,WACtD;AAAA,IACA,QAAQ,MAAM,gBAAgB,sBAAsB,KAAK,IAAI,GAAG;AAAA,IAChE,QAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAIA,MAAM,wBAAwB;AAAA,IAE7B,KAAK,YAAY,KAAK,MAAM,MAAM,MAAM,MAAM,YAAY,UAAU,KAAK;AAAA,IAEzE,KACC,YAAY,KACZ,MACA,MACA,MACA,MACA,MACA,YACA,UACA,KACD;AAAA,EACD;AAAA,EAEA,IAAI;AAAA,EACJ,WAAW,SAAQ,uBAAuB;AAAA,IACzC,IAAI,WAAW,KAAI,GAAG;AAAA,MACrB,eAAe;AAAA,MACf;AAAA,IACD;AAAA,EACD;AAAA,EAGA,MAAM,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,EAG5C,MAAM,kBAAkB,cAAc,aAAa;AAAA,IAClD,cAAc;AAAA,EACf,CAAC;AAAA,EAGD,MAAM,kBAAkB;AAAA,IACvB,cAAc;AAAA,EACf;AAAA,EAGA,IAAI,cAAc;AAAA,IAEjB,MAAM,gBACL,cACA,KAAK,aAAa,KAAK,GACvB,eACD;AAAA,EACD,EAAO;AAAA,IAEN,MAAM,kBAAkB,KAAK,cAAc,KAAK;AAAA,IAChD,IAAI,WAAW,eAAe,GAAG;AAAA,MAChC,MAAM,gBACL,iBACA,KAAK,aAAa,KAAK,GACvB,eACD;AAAA,IACD,EAAO;AAAA,MACN,QAAQ,MAAM,+CAA+C,WAAW;AAAA,MACxE,QAAQ,MACP,yBAAyB,sBAAsB,KAAK,IAAI,GACzD;AAAA,MACA,QAAQ,MAAM,wBAAwB,iBAAiB;AAAA,MACvD,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA,EAKhB,QAAQ,IAAI;AAAA,CAAiC;AAAA,EAC7C,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,IAE5B,IAAI,MAAM,YAAY,KAAK,MAAM,SAAS,OAAO;AAAA,MAChD;AAAA,IACD;AAAA,IAEA,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;AAkBD,SAAS,yBAAyB,CACjC,SACA,UACA,WACS;AAAA,EAET,MAAM,yBAAyB,8BAA8B,KAAK,CAAC,YAClE,QAAQ,KAAK,QAAQ,CACtB;AAAA,EAEA,IAAI,CAAC,wBAAwB;AAAA,IAC5B,OAAO;AAAA,EACR;AAAA,EAEA,IAAI,mBAAmB;AAAA,EAGvB,IAAI,WAAW,KAAK,QAAQ,GAAG;AAAA,IAE9B,IAAI,UAAU,cAAc;AAAA,MAE3B,mBAAmB,iBAAiB,QACnC,wBACA,UAAU,UAAU,sBACrB;AAAA,IACD;AAAA,EACD;AAAA,EAQA,OAAO;AAAA;AAMR,eAAe,eAAe,CAC7B,YACA,YACA,WACC;AAAA,EACD,MAAM,UAAU,MAAM,QAAQ,YAAY,EAAE,eAAe,KAAK,CAAC;AAAA,EAGjE,MAAM,MAAM,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,EAE3C,WAAW,SAAS,SAAS;AAAA,IAC5B,MAAM,kBAAkB,KAAK,YAAY,MAAM,IAAI;AAAA,IACnD,MAAM,kBAAkB,KAAK,YAAY,MAAM,IAAI;AAAA,IAEnD,IAAI,MAAM,YAAY,GAAG;AAAA,MAExB,MAAM,gBAAgB,iBAAiB,iBAAiB,SAAS;AAAA,IAClE,EAAO,SAAI,MAAM,OAAO,GAAG;AAAA,MAE1B,MAAM,UAAU,MAAM,SAAS,iBAAiB,OAAO;AAAA,MAGvD,MAAM,mBAAmB,YACtB,0BAA0B,SAAS,MAAM,MAAM,SAAS,IACxD;AAAA,MAGH,MAAM,UAAU,iBAAiB,gBAAgB;AAAA,IAClD;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,0DAA0D;AAAA,EACtE,QAAQ,IAAI,eAAe;AAAA,EAC3B,QAAQ,IAAI,4DAA4D;AAAA,EACxE,QAAQ,IAAI,0DAA0D;AAAA,EACtE,QAAQ,IAAI,qDAAqD;AAAA,EACjE,QAAQ,IAAI,yDAAyD;AAAA,EACrE,IAAI,aAAa,QAAQ;AAAA,IACxB,QAAQ,IAAI,qBAAqB;AAAA,IACjC,QAAQ,IAAI,kDAAkD;AAAA,IAC9D,QAAQ,IAAI,8BAA8B;AAAA,IAC1C,QAAQ,IAAI,6BAA6B;AAAA,EAC1C;AAAA,EACA,IAAI,aAAa,SAAS;AAAA,IACzB,QAAQ,IAAI,yBAAyB;AAAA,IACrC,QAAQ,IAAI,2BAA2B;AAAA,IACvC,QAAQ,IAAI,8DAA8D;AAAA,IAC1E,QAAQ,IAAI,uDAAuD;AAAA,EACpE;AAAA,EACA,QAAQ,IAAI,yBAAyB;AAAA,EACrC,QAAQ,IAAI,yBAAyB;AAAA,EACrC,QAAQ,IAAI;AAAA,CAA0D;AAAA,EACtE,QAAQ,IAAI,mDAAmD;AAAA;AAGhE,eAAe,SAAS,GAAG;AAAA,EAC1B,QAAQ,IAAI,MAAM,iBAAiB,CAAC;AAAA,EACpC,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,2DAA2D;AAAA,EACvE,QAAQ,IAAI,gCAAgC;AAAA,EAC5C,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,WAAW;AAAA,EACvB,QAAQ,IAAI,uBAAuB;AAAA,EACnC,QAAQ,IAAI,wCAAwC;AAAA,EACpD,QAAQ,IAAI,0CAA0C;AAAA;AAAA,IAhIjD;AAAA;AAAA,EA9NN;AAAA,EA8NM,gCAAgC;AAAA,IACrC;AAAA,EAID;AAAA;;;ACxOA,uBAAS;AACT,0BAAkB;AAKlB,SAAS,kBAAkB,CAAC,KAAa,aAA8B;AAAA,EACtE,IAAI,aAAa;AAAA,EAGjB,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK;AAAA,IAC3B,MAAM,kBAAkB,MAAK,YAAY,cAAc;AAAA,IAEvD,IAAI,YAAW,eAAe,GAAG;AAAA,MAChC,IAAI;AAAA,QACH,MAAM,cAAc,KAAK,MAAM,aAAa,iBAAiB,OAAO,CAAC;AAAA,QACrE,MAAM,OAAO;AAAA,aACT,YAAY;AAAA,aACZ,YAAY;AAAA,aACZ,YAAY;AAAA,QAChB;AAAA,QAEA,IAAI,eAAe,MAAM;AAAA,UACxB,OAAO;AAAA,QACR;AAAA,QACC,MAAM;AAAA,IAGT;AAAA,IAEA,MAAM,YAAY,QAAQ,UAAU;AAAA,IAEpC,IAAI,cAAc,YAAY;AAAA,MAC7B;AAAA,IACD;AAAA,IACA,aAAa;AAAA,EACd;AAAA,EAEA,OAAO;AAAA;AAMR,SAAS,wBAAwB,CAAC,KAAsB;AAAA,EACvD,OAAO,mBAAmB,KAAK,gBAAgB;AAAA;AAMhD,SAAS,gBAAgB,CAAC,KAAsB;AAAA,EAC/C,OAAO,mBAAmB,KAAK,iBAAiB;AAAA;AAMjD,SAAS,oBAAoB,CAAC,KAAsB;AAAA,EACnD,OAAO,mBAAmB,KAAK,YAAY;AAAA;AAM5C,SAAS,cAAc,CAAC,KAAsB;AAAA,EAC7C,OAAO,mBAAmB,KAAK,aAAa;AAAA;AAMtC,SAAS,iBAAiB,CAAC,KAAa;AAAA,EAC9C,MAAM,mBAAmB,yBAAyB,GAAG;AAAA,EACrD,MAAM,WAAW,iBAAiB,GAAG;AAAA,EACrC,MAAM,eAAe,qBAAqB,GAAG;AAAA,EAC7C,MAAM,SAAS,eAAe,GAAG;AAAA,EAEjC,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EACf;AAAA;AAMM,SAAS,iBAAiB,CAAC,KAAmB;AAAA,EACpD,MAAM,SAAS,kBAAkB,GAAG;AAAA,EAEpC,IAAI,OAAO,cAAc;AAAA,IACxB,QAAQ,IAAI,iDAAiD;AAAA,IAC7D,IAAI,OAAO,UAAU;AAAA,MACpB,QAAQ,IAAI,wDAAuD;AAAA,IACpE;AAAA,IACA,IAAI,OAAO,cAAc;AAAA,MACxB,QAAQ,IAAI,uDAAsD;AAAA,IACnE;AAAA,IACA,IAAI,OAAO,QAAQ;AAAA,MAClB,QAAQ,IACP,6DACD;AAAA,IACD;AAAA,EACD;AAAA;AAMM,SAAS,yBAAyB,CAAC,KAAsB;AAAA,EAC/D,IAAI;AAAA,IACH,MAAM,SAAS,kBAAkB,GAAG;AAAA,IACpC,IAAI,OAAO,cAAc;AAAA,MACxB,kBAAkB,GAAG;AAAA,IACtB;AAAA,IACA,OAAO,OAAO;AAAA,IACb,OAAO,GAAG;AAAA,IACX,QAAQ,KAAK,oCAAoC,CAAC;AAAA,IAClD,OAAO;AAAA;AAAA;AAAA;;;ACzHT,uBAAS,6BAAY;AACrB,8BAAmB,2BAAkB;AAyBrC,SAAS,gBAAgB,CAAC,SAGxB;AAAA,EACD,MAAM,mBAAmB;AAAA,EACzB,MAAM,QAAQ,QAAQ,MAAM,gBAAgB;AAAA,EAE5C,IAAI,CAAC,OAAO;AAAA,IACX,OAAO,EAAE,MAAM,CAAC,GAAG,QAAQ;AAAA,EAC5B;AAAA,EAEA,SAAS,iBAAiB,mBAAmB;AAAA,EAC7C,MAAM,OAA4B,CAAC;AAAA,EAGnC,MAAM,QAAQ,gBAAgB,MAAM;AAAA,CAAI;AAAA,EACxC,WAAW,QAAQ,OAAO;AAAA,IACzB,MAAM,aAAa,KAAK,QAAQ,GAAG;AAAA,IACnC,IAAI,eAAe;AAAA,MAAI;AAAA,IAEvB,MAAM,MAAM,KAAK,MAAM,GAAG,UAAU,EAAE,KAAK;AAAA,IAC3C,IAAI,QAAQ,KAAK,MAAM,aAAa,CAAC,EAAE,KAAK;AAAA,IAG5C,IACE,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,KAC3C,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAC3C;AAAA,MACD,QAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,IAC1B;AAAA,IAGA,IAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,MACjD,KAAK,OAAO,MACV,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,gBAAgB,EAAE,CAAC;AAAA,IAClD,EAEK,SAAI,UAAU,UAAU,UAAU,SAAS;AAAA,MAC/C,KAAK,OAAO,UAAU;AAAA,IACvB,EAEK,SAAI,CAAC,OAAO,MAAM,OAAO,KAAK,CAAC,GAAG;AAAA,MACtC,KAAK,OAAO,OAAO,KAAK;AAAA,IACzB,EAEK;AAAA,MACJ,KAAK,OAAO;AAAA;AAAA,EAEd;AAAA,EAEA,OAAO,EAAE,MAAM,SAAS,gBAAgB;AAAA;AAMzC,SAAS,YAAY,CAAC,SAA0B;AAAA,EAE/C,MAAM,cAAc;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EAEA,OAAO,YAAY,KAAK,CAAC,YAAY,QAAQ,KAAK,OAAO,CAAC;AAAA;AAMpD,SAAS,mBAAmB,CAAC,UAAqC;AAAA,EACxE,MAAM,aAAa,cAAa,UAAU,OAAO;AAAA,EACjD,QAAQ,MAAM,YAAY,iBAAiB,UAAU;AAAA,EACrD,MAAM,SAAS,aAAa,OAAO;AAAA,EAEnC,OAAO;AAAA,IACN,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;AAMD,SAAS,eAAc,CAAC,KAAsB;AAAA,EAC7C,IAAI,aAAa;AAAA,EAGjB,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK;AAAA,IAC3B,MAAM,kBAAkB,MAAK,YAAY,cAAc;AAAA,IAEvD,IAAI,YAAW,eAAe,GAAG;AAAA,MAChC,IAAI;AAAA,QACH,MAAM,cAAc,KAAK,MAAM,cAAa,iBAAiB,OAAO,CAAC;AAAA,QACrE,MAAM,OAAO;AAAA,aACT,YAAY;AAAA,aACZ,YAAY;AAAA,aACZ,YAAY;AAAA,QAChB;AAAA,QAEA,IAAI,iBAAiB,MAAM;AAAA,UAC1B,OAAO;AAAA,QACR;AAAA,QACC,MAAM;AAAA,IAGT;AAAA,IAEA,MAAM,YAAY,SAAQ,UAAU;AAAA,IAEpC,IAAI,cAAc,YAAY;AAAA,MAC7B;AAAA,IACD;AAAA,IACA,aAAa;AAAA,EACd;AAAA,EAEA,OAAO;AAAA;AAMR,eAAe,UAAU,CACxB,SACA,KACA,UAGI,CAAC,GACoB;AAAA,EACzB,IAAI,CAAC,gBAAe,GAAG,GAAG;AAAA,IACzB,QAAQ,KACP,4EACD;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,IAAI;AAAA,IAEH,IAAI;AAAA,IACJ,MAAM,aAAa;AAAA,MAClB,MAAK,KAAK,0BAA0B;AAAA,MACpC,MAAK,KAAK,6BAA6B;AAAA,MACvC,MAAK,KAAK,gCAAgC;AAAA,MAC1C,MAAK,KAAK,mCAAmC;AAAA,IAC9C;AAAA,IAEA,WAAW,WAAW,YAAY;AAAA,MACjC,IAAI;AAAA,QACH,MAAM,YAAY,UAAQ,OAAO;AAAA,QACjC,UAAU,UAAU;AAAA,QACpB;AAAA,QACC,MAAM;AAAA,IAGT;AAAA,IAEA,IAAI,CAAC,SAAS;AAAA,MACb,QAAQ,MAAM,wDAAwD;AAAA,MACtE,OAAO;AAAA,IACR;AAAA,IAEA,QAAQ,YAAY,MAAM,QAAQ,kBAAkB;AAAA,IAEpD,MAAM,gBAAgB,CAAC;AAAA,IACvB,MAAM,gBAAgB,CAAC;AAAA,IAGvB,IAAI,WAAW;AAAA,MACd,MAAM,gBAAgB;AAAA,QACrB,MAAK,KAAK,yBAAyB;AAAA,QACnC,MAAK,KAAK,4BAA4B;AAAA,QACtC,MAAK,KAAK,+BAA+B;AAAA,QACzC,MAAK,KAAK,kCAAkC;AAAA,MAC7C;AAAA,MAEA,IAAI,YAAiB;AAAA,MACrB,WAAW,WAAW,eAAe;AAAA,QACpC,IAAI;AAAA,UACH,YAAY,UAAQ,OAAO;AAAA,UAC3B;AAAA,UACC,MAAM;AAAA,MAGT;AAAA,MAEA,IAAI,WAAW;AAAA,QACd,cAAc,KAAK,UAAU,WAAW,SAAS;AAAA,MAClD,EAAO;AAAA,QACN,QAAQ,KAAK,kDAAkD;AAAA;AAAA,IAEjE;AAAA,IAGA,MAAM,kBAAkB;AAAA,MACvB,MAAK,KAAK,8BAA8B;AAAA,MACxC,MAAK,KAAK,iCAAiC;AAAA,MAC3C,MAAK,KAAK,oCAAoC;AAAA,MAC9C,MAAK,KAAK,uCAAuC;AAAA,IAClD;AAAA,IAEA,IAAI,cAAmB;AAAA,IACvB,WAAW,aAAa,iBAAiB;AAAA,MACxC,IAAI;AAAA,QACH,cAAc,UAAQ,SAAS;AAAA,QAC/B;AAAA,QACC,MAAM;AAAA,IAGT;AAAA,IAEA,IAAI,aAAa;AAAA,MAChB,cAAc,KAAK,CAAC,YAAY,WAAW,aAAa,EAAE,MAAM,CAAC,CAAC;AAAA,IACnE,EAAO;AAAA,MACN,QAAQ,KACP,oEACD;AAAA;AAAA,IAGD,MAAM,SAAS,MAAM,QAAQ,SAAS;AAAA,MACrC;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd,aAAa;AAAA,IACd,CAAC;AAAA,IAED,OAAO,OAAO,MAAM;AAAA,IACnB,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,qCAAqC,KAAK;AAAA,IACxD,OAAO;AAAA;AAAA;AAQT,eAAsB,sBAAsB,CAC3C,WACA,KACA,UAII,CAAC,GACa;AAAA,EAClB,QAAQ,aAAa,YAAY;AAAA,EACjC,QAAQ,YAAY,MAAM,QAAQ,eAAe,QAAQ,UAAU;AAAA,EAInE,MAAM,cAAc,MAAM,WAAW,SAAS,KAAK,EAAE,WAAW,MAAM,CAAC;AAAA,EACvE,IAAI,aAAa;AAAA,IAEhB,OAAO,qBAAqB,QAAQ,QAAQ;AAAA;AAAA;AAAA,EAG5C;AAAA;AAAA;AAAA,sBAGoB,KAAK,UAAU,aAAa,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxD;AAAA,EAEA,QAAQ,KACP,uEACD;AAAA,EAGA,MAAM,iBAAiB,QACrB,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,KAAK,EACnB,QAAQ,OAAO,KAAK;AAAA,EAGtB,MAAM,gBAA0B,CAAC;AAAA,EACjC,MAAM,oBAA8B,CAAC;AAAA,EACrC,MAAM,oBAA8B,CAAC;AAAA,EAErC,IAAI,WAAW;AAAA,IACd,cAAc,KAAK,qCAAqC;AAAA,IACxD,kBAAkB,KAAK,WAAW;AAAA,EACnC;AAAA,EAIA,MAAM,mBACL,cAAc,SAAS,IAAI,GAAG,cAAc,KAAK;AAAA,CAAI;AAAA,IAAQ;AAAA,EAC9D,MAAM,mBACL,kBAAkB,SAAS,IACxB,mBAAmB,kBAAkB,KAAK,IAAI,QAC9C;AAAA,EACJ,MAAM,mBACL,kBAAkB,SAAS,IACxB,mBAAmB,kBAAkB,KAAK,IAAI,QAC9C;AAAA,EACJ,MAAM,kBAAkB,CAAC,kBAAkB,gBAAgB,EACzD,OAAO,OAAO,EACd,KAAK;AAAA,SAAY;AAAA,EAEnB,OAAO;AAAA;AAAA,EAEN;AAAA,eACa,KAAK,UAAU,aAAa,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAStB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBH,SAAS,2BAA2B,CAC1C,WACS;AAAA,EACT,QAAQ,aAAa,YAAY;AAAA,EACjC,MAAM,iBAAiB,QACrB,QAAQ,OAAO,MAAM,EACrB,MAAM,OAAO,aAAa,EAAE,CAAC,EAC7B,KAAK,KAAK,OAAO,aAAa,EAAE,GAAG,EACnC,MAAM,GAAG,EACT,KAAK,KAAK;AAAA,EAEZ,OAAO;AAAA;AAAA,sBAEc,KAAK,UAAU,aAAa,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAS7B;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;AA8BrB,SAAS,cAAc,CAAC,UAA2B;AAAA,EACzD,MAAM,MAAM,QAAQ,QAAQ,EAAE,YAAY;AAAA,EAC1C,OAAO,QAAQ,SAAS,QAAQ;AAAA;AAAA;;;AC7ajC;AACA,uBAAS,6BAAY;AACrB,iBAAS;AAKT,SAAS,mBAAmB,CAAC,KAAsB;AAAA,EAClD,MAAM,kBAAkB,MAAK,KAAK,cAAc;AAAA,EAChD,IAAI,CAAC,YAAW,eAAe,GAAG;AAAA,IACjC,OAAO;AAAA,EACR;AAAA,EAEA,IAAI;AAAA,IACH,MAAM,cAAc,KAAK,MAAM,cAAa,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;AAOT,SAAS,gBAAgB,CAAC,KAAa;AAAA,EACtC,MAAM,QAAQ,MAAK,KAAK,sBAAsB;AAAA,EAC9C,MAAM,SAAS,MAAK,KAAK,oBAAoB;AAAA,EAE7C,OAAO,EAAE,OAAO,OAAO;AAAA;AAMxB,SAAS,gBAAgB,CAAC,KAAsB;AAAA,EAC/C,QAAQ,UAAU,iBAAiB,GAAG;AAAA,EAEtC,IAAI,CAAC,YAAW,KAAK,GAAG;AAAA,IACvB,OAAO;AAAA,EACR;AAAA,EAEA,IAAI;AAAA,IACH,MAAM,UAAU,cAAa,OAAO,OAAO;AAAA,IAE3C,OAAO,QAAQ,SAAS,aAAa;AAAA,IACpC,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,kBAAkB,CAAC,KAAqB;AAAA,EAEhD,MAAM,aAAa;AAAA,IAClB,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,eAAe,aAAa,CAAC,KAA4B;AAAA,EACxD,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;AAOF,eAAsB,yBAAyB,CAAC,KAA+B;AAAA,EAC9E,IAAI;AAAA,IACH,IAAI,oBAAoB,GAAG,KAAK,iBAAiB,GAAG,GAAG;AAAA,MACtD,MAAM,cAAc,GAAG;AAAA,MACvB,OAAO;AAAA,IACR;AAAA,IACA,OAAO;AAAA,IACN,OAAO,GAAG;AAAA,IACX,QAAQ,KAAK,oCAAoC,CAAC;AAAA,IAClD,OAAO;AAAA;AAAA;AAAA;;;;;;;ACzIT;AACA,kBAAS,mBAAO,2BAAa;AAC7B,iBAAS;AACT;AAuCA,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,KAC1B,MAAM,KAAK,SAAS,KAAK,KACzB,MAAM,KAAK,SAAS,KAAK,KACzB,MAAM,KAAK,SAAS,MAAM,IAC1B;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,KAChC,SAAS,SAAS,aAAa,KAC/B,SAAS,SAAS,aAAa,KAC/B,SAAS,SAAS,cAAc;AAAA,EAGjC,IAAI,YAAY,SAAS,QAAQ,sBAAsB,EAAE;AAAA,EAGzD,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;AAOD,SAAS,aAAa,CAAC,UAA0B;AAAA,EAChD,MAAM,aAAa,cAAc,KAAK,QAAQ;AAAA,EAE9C,IAAI,YAAY;AAAA,IAEf,MAAM,kBAAiB,SAAS,QAAQ,eAAe,EAAE;AAAA,IACzD,OAAO,cAAc;AAAA,EACtB;AAAA,EAGA,MAAM,iBAAiB,SAAS,QAAQ,eAAe,EAAE;AAAA,EACzD,OAAO,wBAAwB;AAAA;AAGhC,SAAS,kBAAkB,CAAC,MAAyB;AAAA,EAGpD,MAAM,UAAU;AAAA,IACf,GAAG,KAAK,OAAO,IACd,CAAC,GAAG,MAAM,eAAe,WAAW,cAAc,EAAE,QAAQ,KAC7D;AAAA,IACA,GAAG,KAAK,QAAQ,IACf,CAAC,GAAG,MAAM,gBAAgB,WAAW,cAAc,EAAE,QAAQ,KAC9D;AAAA,IACA,GAAG,KAAK,eAAe,IACtB,CAAC,IAAI,MAAM,kBAAkB,WAAW,cAAc,GAAG,QAAQ,KAClE;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,KACT,qBAAqB,KAAK,EAAE,IAAI,KAChC,CAAC,EAAE,KAAK,WAAW,GAAG,CACxB,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,EAErE,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,sBAAsB,EAAE;AAAA,MAClD,MAAM,SAAS,MAAK,YAAY,IAAI;AAAA,MACpC,MAAM,aAAa,cAAc,KAAK,IAAI;AAAA,MAI1C,MAAM,WAAW,aACd,MACA,KACA,YACA,YACA,YACA,WACA,GAAG,UACJ,IACC;AAAA,MAGH,IAAI,YAAY;AAAA,QACf,IAAI;AAAA,UACH,MAAM,SAAS,MAAM,IAAI,KAAK,QAAQ,EAAE,OAAO;AAAA,UAC/C,IAAI,CAAC,QAAQ;AAAA,YACZ,QAAQ,KACP,2DAA2D,UAC5D;AAAA,YACA;AAAA,UACD;AAAA,UACC,MAAM;AAAA,MACT;AAAA,MAEA,IAAI,OAAO;AAAA,MACX,IAAI;AAAA,QACH,QAAQ,IAAI,2BAA2B,UAAU;AAAA,QACjD,MAAM,SAAS,MAAM,IAAI,MAAM;AAAA,UAC9B,aAAa,CAAC,QAAQ;AAAA,UACtB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,WAAW,IAAI,IAAI,aAAa,eAAe,WAAW;AAAA,UAC1D,QAAQ,IAAI,IAAI,aAAa;AAAA,UAC7B,QAAQ;AAAA,YACP,wBACC,IAAI,IAAI,aAAa,eAClB,iBACA;AAAA,UACL;AAAA,QACD,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,UAAU;AAAA,QAChD,MAAM,MAAM,GAAG,cAAc,QAAQ,EAAE,UAAU,KAAK,IAAI;AAAA,QAC1D,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,uBAAuB,CAAC,KAA4B;AAAA,EAClE,QAAQ,IAAI,uDAAuD;AAAA,EACnE,MAAM,aAAa,MAAK,KAAK,UAAU;AAAA,EACvC,MAAM,cAAc,MAAK,KAAK,YAAY,UAAU;AAAA,EAGpD,IAAI;AAAA,IACH,MAAM,GAAG,aAAa,EAAE,OAAO,MAAM,WAAW,KAAK,CAAC;AAAA,IACrD,MAAM;AAAA,EAGR,MAAM,iBAAiB,kBAAkB,GAAG;AAAA,EAC5C,QAAQ,IAAI,8BAA8B,cAAc;AAAA,EAGxD,IAAI;AAAA,IACH,MAAM,OAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,IAC3C,MAAM;AAAA,EAGR,eAAe,YAAY,CAAC,KAAa,OAAO,IAAuB;AAAA,IACtE,MAAM,QAAkB,CAAC;AAAA,IACzB,IAAI;AAAA,MACH,MAAM,UAAU,MAAM,SAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,MAE1D,WAAW,SAAS,SAAS;AAAA,QAC5B,MAAM,WAAW,MAAK,KAAK,MAAM,IAAI;AAAA,QACrC,MAAM,eAAe,MAAK,MAAM,MAAM,IAAI;AAAA,QAE1C,IAAI,MAAM,YAAY,GAAG;AAAA,UAExB,MAAM,SAAS,MAAM,aAAa,UAAU,YAAY;AAAA,UACxD,MAAM,KAAK,GAAG,MAAM;AAAA,QACrB,EAAO,SAAI,MAAM,OAAO,KAAK,eAAe,MAAM,IAAI,GAAG;AAAA,UACxD,QAAQ,IACP,2CAA2C,cAC5C;AAAA,UACA,MAAM,KAAK,YAAY;AAAA,QACxB;AAAA,MACD;AAAA,MACC,OAAO,KAAK;AAAA,MACb,QAAQ,MAAM,qCAAqC,QAAQ,GAAG;AAAA;AAAA,IAG/D,OAAO;AAAA;AAAA,EAGR,QAAQ,IACP,+BAA+B,kCAChC;AAAA,EACA,MAAM,gBAAgB,MAAM,aAAa,UAAU;AAAA,EACnD,QAAQ,IAAI,kDAAkD,aAAa;AAAA,EAE3E,IAAI,cAAc,WAAW,GAAG;AAAA,IAC/B,QAAQ,IACP,oEACD;AAAA,IACA;AAAA,EACD;AAAA,EAEA,QAAQ,IACP,4BAA4B,cAAc,yBAC3C;AAAA,EAGA,MAAM,OAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,EAG5C,WAAW,QAAQ,eAAe;AAAA,IACjC,MAAM,aAAa,MAAK,YAAY,IAAI;AAAA,IACxC,MAAM,aAAa,MAAK,aAAa,KAAK,QAAQ,WAAW,MAAM,CAAC;AAAA,IAEpE,IAAI;AAAA,MACH,MAAM,YAAY,oBAAoB,UAAU;AAAA,MAChD,MAAM,QAAQ,KAAK,SAAS,MAAM;AAAA,MAElC,IAAI;AAAA,MACJ,IAAI,eAAe,cAAc;AAAA,QAChC,aAAa,MAAM,uBAAuB,WAAW,KAAK;AAAA,UACzD,WAAW,eAAe;AAAA,UAC1B,OAAO;AAAA,UACP;AAAA,QACD,CAAC;AAAA,MACF,EAAO;AAAA,QACN,aAAa,4BAA4B,SAAS;AAAA;AAAA,MAInD,MAAM,YAAY,MACjB,aACA,KAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CACtC;AAAA,MACA,IAAI,cAAc,aAAa;AAAA,QAC9B,MAAM,OAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,MAC3C;AAAA,MAEA,MAAM,WAAU,YAAY,YAAY,OAAO;AAAA,MAC/C,QAAQ,IAAI,gCAAgC,WAAW,YAAY;AAAA,MAClE,OAAO,OAAO;AAAA,MACf,QAAQ,MAAM,wCAAwC,SAAS,KAAK;AAAA;AAAA,EAEtE;AAAA;AAGD,eAAe,QAAQ,CAAC,KAAa;AAAA,EACpC,QAAQ,IAAI,sCAAsC;AAAA,EAGlD,MAAM,iBAAiB,GAAG;AAAA,EAG1B,MAAM,wBAAwB,GAAG;AAAA,EAGjC,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,IAGtD,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,mCAAmC;AAAA;AAGhD,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,MAAM,0BAA0B,GAAG;AAAA,IACnC,0BAA0B,GAAG;AAAA,IAC7B;AAAA,EACD;AAAA,EAEA,QAAQ,IAAI,kCAAkC;AAAA,EAC9C,QAAQ,IAAI,qCAAqC;AAAA,EACjD,MAAM,SAAS,GAAG;AAAA,EAElB,IAAI;AAAA,IACH,MAAM,0BAA0B,GAAG;AAAA,IACnC,0BAA0B,GAAG;AAAA,IAC5B,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,0BAA0B,GAAG;AAAA,QACnC,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,0BAA0B,GAAG;AAAA,QACnC,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,IAryBI,aAAa,qBACb,aAAa,YACb,gBAAgB,sBAChB,oBAAoB,uBACpB,yBAAyB,wBACzB,eAAe;AAAA;AAAA,EApCrB;AAAA,EACA;AAAA,EAMA;AAAA;;;;;;;ACJA,kBAAS,qBAAO;AAChB,iBAAS;AAgDT,eAA8B,IAAI,CAAC,GAAa;AAAA,EAC/C,MAAM,MAAM,QAAQ,IAAI;AAAA,EAExB,IAAI;AAAA,IACH,QAAQ,IAAI,mDAAmD;AAAA,IAG/D,MAAM,OAAM,MAAK,KAAK,WAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IAGtD,MAAM,OAAM,MAAK,KAAK,uBAAsB,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IAGlE,MAAM,WAAU,MAAK,KAAK,cAAa,GAAG,aAAa,OAAO;AAAA,IAC9D,QAAQ,IAAI,gCAAgC,gBAAe;AAAA,IAG3D,MAAM,WAAU,MAAK,KAAK,kBAAiB,GAAG,cAAc,OAAO;AAAA,IACnE,QAAQ,IAAI,gCAAgC,oBAAmB;AAAA,IAG/D,MAAM,WAAU,MAAK,KAAK,aAAY,GAAG,YAAY,OAAO;AAAA,IAC5D,QAAQ,IAAI,gCAAgC,eAAc;AAAA,IAE1D,QAAQ,IAAI,wCAAwC;AAAA,IACpD,QAAQ,IACP,yEACD;AAAA,IACC,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,wCAAwC,KAAK;AAAA,IAC3D,MAAM;AAAA;AAAA;AAAA,IA5EF,cAAa,YACb,iBAAgB,sBAChB,qBAAoB,uBACpB,0BAAyB,wBACzB,gBAAe,qBAEf,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAed,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQf,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACRZ,SAAS,iBAAiB,CAAC,MAAsB;AAAA,EACvD,IAAI,UAAU;AAAA,EAGd,MAAM,iBAAiB,OAAO,QAAQ,aAAa,EAAE,KACpD,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,MAC5B;AAAA,EAEA,YAAY,QAAQ,aAAa,gBAAgB;AAAA,IAEhD,UAAU,QAAQ,QACjB,IAAI,OAAO,IAAI,OAAO,QAAQ,uBAAuB,MAAM,MAAM,GAAG,GACpE,GAAG,eACJ;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;AASD,SAAS,aAAa,CAAC,MAAsB;AAAA,EACnD,OACC,KAEE,QAAQ,gBAAgB,UAAU,EAClC,QAAQ,gBAAgB,UAAU,EAClC,QAAQ,mBAAmB,UAAU,EACrC,QAAQ,kBAAkB,UAAU,EACpC,QAAQ,iBAAiB,UAAU,EACnC,QAAQ,eAAe,UAAU,EAEjC,QAAQ,uBAAuB,UAAU,EACzC,QAAQ,uBAAuB,UAAU,EACzC,QAAQ,0BAA0B,UAAU,EAC5C,QAAQ,yBAAyB,UAAU,EAC3C,QAAQ,wBAAwB,UAAU,EAC1C,QAAQ,sBAAsB,UAAU,EACxC,QAAQ,WAAW,SAAS;AAAA;AAUzB,SAAS,qBAAqB,CAAC,MAAsB;AAAA,EAC3D,OAAO,cAAc,kBAAkB,IAAI,CAAC;AAAA;AAStC,SAAS,yBAAyB,CAAC,QAA6B;AAAA,EACtE,OAAO,CAAC,SAAiB;AAAA,IACxB,MAAM,OAAO,OAAO,UAAU,KAAK,SAAS;AAAA,IAC5C,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI;AAAA,IAC7B,OAAO,UAAU,MAAM,IAAI,KAAK;AAAA,IAEhC,WAAW,QAAQ,OAAO;AAAA,MAEzB,MAAM,cAAc,KAAK,KAAK;AAAA,MAC9B,IAAI,CAAC,aAAa;AAAA,QACjB;AAAA,MACD;AAAA,MAGA,MAAM,cAAc,sBAAsB,IAAI;AAAA,MAC9C,QAAQ,IAAI,WAAW;AAAA,IACxB;AAAA;AAAA;AAAA,IAnGI;AAAA;AAAA,kBAAwC;AAAA,IAC7C,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,EACV;AAAA;;;;;;;AChBA,kBAAS;AACT,uBAAS;AACT,iBAAS;AAQT,SAAS,iBAAiB,GAAW;AAAA,EAGpC,MAAM,UAAU,MAAK,YAAY,KAAK,MAAM,MAAM,QAAQ;AAAA,EAC1D,MAAM,WAAW,YAAW,OAAO;AAAA,EAEnC,IAAI,UAAU;AAAA,IAEb,OAAO,OAAO;AAAA,EACf;AAAA,EAGA,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,MAAM,mBAAmB;AAAA,IACxB,MAAK,KAAK,gBAAgB,QAAQ,SAAS;AAAA,IAC3C,MAAK,KAAK,MAAM,gBAAgB,QAAQ,SAAS;AAAA,IACjD,MAAK,KAAK,MAAM,MAAM,gBAAgB,QAAQ,SAAS;AAAA,IACvD,MAAK,KAAK,MAAM,MAAM,MAAM,gBAAgB,QAAQ,SAAS;AAAA,EAC9D;AAAA,EAEA,WAAW,YAAW,kBAAkB;AAAA,IACvC,IAAI,YAAW,QAAO,GAAG;AAAA,MACxB,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAGA,OAAO;AAAA;AAGR,eAA8B,GAAG,CAAC,MAAgB;AAAA,EACjD,MAAM,eAAe,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,IAAI;AAAA,EACpE,IAAI;AAAA,IAEH,QAAQ,IAAI,+BAA+B;AAAA,IAC3C,MAAM,KAAK,CAAC,CAAC;AAAA,IACb,QAAQ,IAAI;AAAA,CAA+B;AAAA,IAG3C,QAAQ,IAAI,+CAA+C;AAAA,IAC3D,QAAQ,IAAI;AAAA,CAAsC;AAAA,IAElD,MAAM,aAAa,kBAAkB;AAAA,IAKrC,MAAM,WAAW,WAAW,SAAS,GAAG;AAAA,IACxC,MAAM,aAAa,WAAW,GAAG,2BAA2B;AAAA,IAC5D,MAAM,UAAU,WAAW,CAAC,IAAI,CAAC,OAAO,SAAS;AAAA,IAEjD,MAAM,aAAa,OAAM,YAAY,SAAS;AAAA,MAC7C,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,MAChC,OAAO;AAAA,IACR,CAAC;AAAA,IAGD,MAAM,gBAAgB,OAAM,OAAO,CAAC,WAAW,cAAc,GAAG;AAAA,MAC/D,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IACjC,CAAC;AAAA,IAED,IAAI,cAAc;AAAA,MAGjB,MAAM,YAAY,EAAE,SAAS,GAAG;AAAA,MAChC,MAAM,eAAe,EAAE,SAAS,GAAG;AAAA,MAEnC,MAAM,kBAAkB,CAAC,SAAiB;AAAA,QACzC,MAAM,OAAO,UAAU,UAAU,KAAK,SAAS;AAAA,QAC/C,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI;AAAA,QAC7B,UAAU,UAAU,MAAM,IAAI,KAAK;AAAA,QAEnC,WAAW,QAAQ,OAAO;AAAA,UAEzB,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,YACjB;AAAA,UACD;AAAA,UACA,MAAM,cAAc,sBAAsB,IAAI;AAAA,UAC9C,QAAQ,IAAI,WAAW;AAAA,QACxB;AAAA;AAAA,MAGD,MAAM,qBAAqB,0BAA0B,YAAY;AAAA,MAEjE,WAAW,QAAQ,GAAG,QAAQ,eAAe;AAAA,MAC7C,WAAW,QAAQ,GAAG,QAAQ,eAAe;AAAA,MAC7C,cAAc,QAAQ,GAAG,QAAQ,kBAAkB;AAAA,MACnD,cAAc,QAAQ,GAAG,QAAQ,kBAAkB;AAAA,MAEnD,WAAW,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,QAAQ,IAAI;AAAA,yCAA4C,MAAM;AAAA,OAC9D;AAAA,MAED,cAAc,GAAG,QAAQ,CAAC,SAAS;AAAA,QAClC,QAAQ,IAAI;AAAA,oCAAuC,MAAM;AAAA,OACzD;AAAA,MAGD,QAAQ,GAAG,UAAU,MAAM;AAAA,QAC1B,QAAQ,IAAI;AAAA,+BAAkC;AAAA,QAC9C,WAAW,KAAK,QAAQ;AAAA,QACxB,cAAc,KAAK,QAAQ;AAAA,QAC3B,QAAQ,KAAK,CAAC;AAAA,OACd;AAAA,IACF,EAAO;AAAA,MAEN,MAAM,UAAU,MAAa;AAAA,MAC7B,MAAM,UAAU,MAAa;AAAA,MAE7B,MAAM,SAAS,QAAQ,QAAQ,OAAO;AAAA,QACrC,UAAU;AAAA,QACV,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC;AAAA,MAED,MAAM,OAAO,IAAI,QAAQ,QAAQ,KAAK;AAAA,QACrC,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACD,CAAC;AAAA,MAGD,MAAM,SAAS,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,QAAQ,QAAQ,KAAK;AAAA,QACxD,OAAO;AAAA,QACP,QAAQ,EAAE,MAAM,OAAO;AAAA,QACvB,OAAO;AAAA,UACN,QAAQ,EAAE,IAAI,OAAO;AAAA,QACtB;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,WAAW;AAAA,UACV,IAAI;AAAA,UACJ,SAAS;AAAA,QACV;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,MACZ,CAAC;AAAA,MAED,MAAM,YAAY,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,QAAQ,QAAQ,KAAK;AAAA,QAC3D,OAAO;AAAA,QACP,QAAQ,EAAE,MAAM,OAAO;AAAA,QACvB,OAAO;AAAA,UACN,QAAQ,EAAE,IAAI,QAAQ;AAAA,QACvB;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,WAAW;AAAA,UACV,IAAI;AAAA,UACJ,SAAS;AAAA,QACV;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,MACZ,CAAC;AAAA,MAGD,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,MAAM;AAAA,QAC7B,OAAO,OAAO,EAAE;AAAA,QAChB,OAAO,OAAO;AAAA,OACd;AAAA,MAED,OAAO,IAAI,CAAC,QAAQ,GAAG,GAAG,MAAM;AAAA,QAC/B,OAAO,OAAO,CAAC;AAAA,QACf,OAAO,OAAO;AAAA,OACd;AAAA,MAED,OAAO,IAAI,CAAC,QAAQ,GAAG,MAAM;AAAA,QAC5B,OAAO,OAAO,CAAC,OAAO,MAAM;AAAA,QAC5B,OAAO,OAAO;AAAA,OACd;AAAA,MAED,OAAO,IAAI,CAAC,UAAU,GAAG,MAAM;AAAA,QAC9B,OAAO,OAAO,OAAO,MAAM;AAAA,QAC3B,OAAO,OAAO;AAAA,OACd;AAAA,MAED,OAAO,IAAI,CAAC,QAAQ,GAAG,GAAG,MAAM;AAAA,QAC/B,OAAO,cAAc,CAAC;AAAA,QACtB,OAAO,OAAO;AAAA,OACd;AAAA,MAED,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,MAAM;AAAA,QAC9B,OAAO,cAAc,GAAG;AAAA,QACxB,OAAO,OAAO;AAAA,OACd;AAAA,MAGD,UAAU,IAAI,CAAC,MAAM,GAAG,GAAG,MAAM;AAAA,QAChC,UAAU,OAAO,EAAE;AAAA,QACnB,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,IAAI,CAAC,QAAQ,GAAG,GAAG,MAAM;AAAA,QAClC,UAAU,OAAO,CAAC;AAAA,QAClB,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,IAAI,CAAC,QAAQ,GAAG,MAAM;AAAA,QAC/B,UAAU,OAAO,CAAC,UAAU,MAAM;AAAA,QAClC,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,IAAI,CAAC,UAAU,GAAG,MAAM;AAAA,QACjC,UAAU,OAAO,UAAU,MAAM;AAAA,QACjC,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,IAAI,CAAC,QAAQ,GAAG,GAAG,MAAM;AAAA,QAClC,UAAU,cAAc,CAAC;AAAA,QACzB,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,IAAI,CAAC,OAAO,GAAG,GAAG,MAAM;AAAA,QACjC,UAAU,cAAc,GAAG;AAAA,QAC3B,OAAO,OAAO;AAAA,OACd;AAAA,MAGD,OAAO,GAAG,aAAa,MAAM;AAAA,QAC5B,OAAO,OAAO,CAAC;AAAA,QACf,OAAO,OAAO;AAAA,OACd;AAAA,MAED,OAAO,GAAG,WAAW,MAAM;AAAA,QAC1B,OAAO,OAAO,EAAE;AAAA,QAChB,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,GAAG,aAAa,MAAM;AAAA,QAC/B,UAAU,OAAO,CAAC;AAAA,QAClB,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,GAAG,WAAW,MAAM;AAAA,QAC7B,UAAU,OAAO,EAAE;AAAA,QACnB,OAAO,OAAO;AAAA,OACd;AAAA,MAGD,OAAO,GAAG,SAAS,MAAM;AAAA,QACxB,OAAO,MAAM;AAAA,QACb,OAAO,OAAO;AAAA,OACd;AAAA,MAED,UAAU,GAAG,SAAS,MAAM;AAAA,QAC3B,UAAU,MAAM;AAAA,QAChB,OAAO,OAAO;AAAA,OACd;AAAA,MAGD,OAAO,IAAI,CAAC,KAAK,GAAG,MAAM;AAAA,QACzB,IAAI,OAAO,YAAY,QAAQ;AAAA,UAC9B,UAAU,MAAM;AAAA,QACjB,EAAO;AAAA,UACN,OAAO,MAAM;AAAA;AAAA,QAEd,OAAO,OAAO;AAAA,OACd;AAAA,MAGD,OAAO,MAAM;AAAA,MAEb,OAAO,OAAO;AAAA,MAGd,WAAW,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAAA,QAC/C,MAAM,OAAO,KAAK,SAAS;AAAA,QAE3B,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC;AAAA,QAC3D,IAAI,MAAM,SAAS,GAAG;AAAA,UACrB,MAAM,UAAU,kBAAkB,MAAM,KAAK;AAAA,CAAI,CAAC;AAAA,UAClD,OAAO,IAAI,OAAO;AAAA,UAClB,OAAO,OAAO;AAAA,QACf;AAAA,OACA;AAAA,MAED,WAAW,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAAA,QAC/C,MAAM,OAAO,KAAK,SAAS;AAAA,QAE3B,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC;AAAA,QAC3D,IAAI,MAAM,SAAS,GAAG;AAAA,UACrB,MAAM,UAAU,kBAAkB,MAAM,KAAK;AAAA,CAAI,CAAC;AAAA,UAClD,OAAO,IAAI,OAAO;AAAA,UAClB,OAAO,OAAO;AAAA,QACf;AAAA,OACA;AAAA,MAGD,cAAc,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAAA,QAClD,MAAM,OAAO,KAAK,SAAS;AAAA,QAE3B,MAAM,eAAe,KACnB,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,EAC5B,KAAK;AAAA,CAAI;AAAA,QACX,IAAI,cAAc;AAAA,UACjB,MAAM,UAAU,kBAAkB,YAAY;AAAA,UAC9C,UAAU,IAAI,OAAO;AAAA,UACrB,OAAO,OAAO;AAAA,QACf;AAAA,OACA;AAAA,MAED,cAAc,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAAA,QAClD,MAAM,OAAO,KAAK,SAAS;AAAA,QAE3B,MAAM,eAAe,KACnB,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,EAC5B,KAAK;AAAA,CAAI;AAAA,QACX,IAAI,cAAc;AAAA,UACjB,MAAM,UAAU,kBAAkB,YAAY;AAAA,UAC9C,UAAU,IAAI,OAAO;AAAA,UACrB,OAAO,OAAO;AAAA,QACf;AAAA,OACA;AAAA,MAGD,WAAW,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,OAAO,IAAI;AAAA,4BAA+B,OAAO;AAAA,QACjD,OAAO,OAAO;AAAA,OACd;AAAA,MAED,cAAc,GAAG,QAAQ,CAAC,SAAS;AAAA,QAClC,UAAU,IAAI;AAAA,4BAA+B,OAAO;AAAA,QACpD,OAAO,OAAO;AAAA,OACd;AAAA,MAGD,OAAO,IAAI,CAAC,UAAU,KAAK,KAAK,GAAG,MAAM;AAAA,QACxC,WAAW,KAAK,QAAQ;AAAA,QACxB,cAAc,KAAK,QAAQ;AAAA,QAC3B,OAAO,QAAQ;AAAA,QACf,QAAQ,KAAK,CAAC;AAAA,OACd;AAAA,MAGD,OAAO,GAAG,UAAU,MAAM;AAAA,QACzB,OAAO,OAAO;AAAA,OACd;AAAA;AAAA,IAED,OAAO,OAAO;AAAA,IAEf,IAAK,MAA4B,SAAS,UAAU;AAAA,MACnD,QAAQ,IAAI;AAAA,+BAAkC;AAAA,MAC9C,QAAQ,KAAK,CAAC;AAAA,IACf;AAAA,IACA,QAAQ,MAAM,wBAAwB,KAAK;AAAA,IAC3C,MAAM;AAAA;AAAA;AAAA;AAAA,EAzWR;AAAA,EAKA;AAAA;;;;;;;ACPA,kBAAS;AACT,uBAAS;AACT,iBAAS;AAGT,SAAS,kBAAiB,GAAW;AAAA,EAGpC,MAAM,UAAU,MAAK,YAAY,KAAK,MAAM,MAAM,QAAQ;AAAA,EAC1D,MAAM,WAAW,YAAW,OAAO;AAAA,EAEnC,IAAI,UAAU;AAAA,IAEb,OAAO,OAAO;AAAA,EACf;AAAA,EAGA,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,MAAM,mBAAmB;AAAA,IACxB,MAAK,KAAK,gBAAgB,QAAQ,SAAS;AAAA,IAC3C,MAAK,KAAK,MAAM,gBAAgB,QAAQ,SAAS;AAAA,IACjD,MAAK,KAAK,MAAM,MAAM,gBAAgB,QAAQ,SAAS;AAAA,IACvD,MAAK,KAAK,MAAM,MAAM,MAAM,gBAAgB,QAAQ,SAAS;AAAA,EAC9D;AAAA,EAEA,WAAW,YAAW,kBAAkB;AAAA,IACvC,IAAI,YAAW,QAAO,GAAG;AAAA,MACxB,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAGA,OAAO;AAAA;AAGR,eAA8B,KAAK,CAAC,OAAiB;AAAA,EACpD,IAAI;AAAA,IACH,MAAM,aAAa,mBAAkB;AAAA,IACrC,MAAM,WAAW,WAAW,SAAS,GAAG;AAAA,IAGxC,MAAM,aAAa,EAAE,SAAS,GAAG;AAAA,IACjC,MAAM,YAAY,EAAE,SAAS,GAAG;AAAA,IAEhC,MAAM,mBAAmB,CAAC,SAAiB;AAAA,MAC1C,MAAM,OAAO,WAAW,UAAU,KAAK,SAAS;AAAA,MAChD,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI;AAAA,MAC7B,WAAW,UAAU,MAAM,IAAI,KAAK;AAAA,MAEpC,WAAW,QAAQ,OAAO;AAAA,QAEzB,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,UACjB;AAAA,QACD;AAAA,QACA,MAAM,cAAc,sBAAsB,IAAI;AAAA,QAC9C,QAAQ,IAAI,WAAW;AAAA,MACxB;AAAA;AAAA,IAGD,MAAM,kBAAkB,CAAC,SAAiB;AAAA,MACzC,MAAM,OAAO,UAAU,UAAU,KAAK,SAAS;AAAA,MAC/C,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI;AAAA,MAC7B,UAAU,UAAU,MAAM,IAAI,KAAK;AAAA,MAEnC,WAAW,QAAQ,OAAO;AAAA,QAEzB,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,UACjB;AAAA,QACD;AAAA,QACA,MAAM,cAAc,sBAAsB,IAAI;AAAA,QAC9C,QAAQ,IAAI,WAAW;AAAA,MACxB;AAAA;AAAA,IAID,QAAQ,OAAO,MACd,GAAG,sBAAsB,iCAAiC;AAAA,CAC3D;AAAA,IACA,MAAM,cAAc,WAAW,GAAG,oBAAoB;AAAA,IACtD,MAAM,WAAW,WAAW,CAAC,IAAI,CAAC,MAAM;AAAA,IAExC,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,MAC5C,MAAM,cAAc,OAAM,aAAa,UAAU;AAAA,QAChD,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,QAChC,OAAO;AAAA,MACR,CAAC;AAAA,MAED,YAAY,QAAQ,GAAG,QAAQ,gBAAgB;AAAA,MAC/C,YAAY,QAAQ,GAAG,QAAQ,gBAAgB;AAAA,MAE/C,YAAY,GAAG,QAAQ,CAAC,SAAS;AAAA,QAChC,IAAI,SAAS,QAAQ,SAAS,GAAG;AAAA,UAChC,OAAO,IAAI,MAAM,yBAAyB,MAAM,CAAC;AAAA,QAClD,EAAO;AAAA,UACN,QAAQ;AAAA;AAAA,OAET;AAAA,MAED,YAAY,GAAG,SAAS,CAAC,UAAU;AAAA,QAClC,OAAO,KAAK;AAAA,OACZ;AAAA,KACD;AAAA,IACD,QAAQ,OAAO,MACd,sBAAsB;AAAA,CAAiC,CACxD;AAAA,IAGA,QAAQ,OAAO,MACd,GAAG,sBAAsB,gCAAgC;AAAA,CAC1D;AAAA,IACA,MAAM,aAAa,WAAW,GAAG,mBAAmB;AAAA,IACpD,MAAM,UAAU,WAAW,CAAC,IAAI,CAAC,KAAK;AAAA,IAEtC,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,MAC5C,MAAM,aAAa,OAAM,YAAY,SAAS;AAAA,QAC7C,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,QAChC,OAAO;AAAA,MACR,CAAC;AAAA,MAED,WAAW,QAAQ,GAAG,QAAQ,eAAe;AAAA,MAC7C,WAAW,QAAQ,GAAG,QAAQ,eAAe;AAAA,MAE7C,WAAW,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,IAAI,SAAS,QAAQ,SAAS,GAAG;AAAA,UAChC,OAAO,IAAI,MAAM,wBAAwB,MAAM,CAAC;AAAA,QACjD,EAAO;AAAA,UACN,QAAQ;AAAA;AAAA,OAET;AAAA,MAED,WAAW,GAAG,SAAS,CAAC,UAAU;AAAA,QACjC,OAAO,KAAK;AAAA,OACZ;AAAA,KACD;AAAA,IACD,QAAQ,OAAO,MACd,sBAAsB;AAAA,CAAuC,CAC9D;AAAA,IAGA,QAAQ,OAAO,MACd,GAAG,sBAAsB,oCAAoC;AAAA,CAC9D;AAAA,IACA,QAAQ,OAAO,MACd,sBAAsB;AAAA,CAAwC,CAC/D;AAAA,IAEA,MAAM,gBAAgB,OAAM,OAAO,CAAC,cAAc,GAAG;AAAA,MACpD,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IACjC,CAAC;AAAA,IAGD,MAAM,eAAe,EAAE,SAAS,GAAG;AAAA,IACnC,MAAM,qBAAqB,0BAA0B,YAAY;AAAA,IAEjE,cAAc,QAAQ,GAAG,QAAQ,kBAAkB;AAAA,IACnD,cAAc,QAAQ,GAAG,QAAQ,kBAAkB;AAAA,IAGnD,QAAQ,GAAG,UAAU,MAAM;AAAA,MAC1B,QAAQ,OAAO,MACd,GAAG,sBAAsB;AAAA,iCAAoC;AAAA,CAC9D;AAAA,MACA,cAAc,KAAK,QAAQ;AAAA,MAC3B,QAAQ,KAAK,CAAC;AAAA,KACd;AAAA,IAGD,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,MAC5C,cAAc,GAAG,QAAQ,CAAC,SAAS;AAAA,QAClC,IAAI,SAAS,QAAQ,SAAS,GAAG;AAAA,UAChC,QAAQ,MACP,sBACC,2CAA2C,MAC5C,CACD;AAAA,UACA,OAAO,IAAI,MAAM,2BAA2B,MAAM,CAAC;AAAA,QACpD,EAAO;AAAA,UACN,QAAQ;AAAA;AAAA,OAET;AAAA,MAED,cAAc,GAAG,SAAS,CAAC,UAAU;AAAA,QACpC,OAAO,KAAK;AAAA,OACZ;AAAA,KACD;AAAA,IACA,OAAO,OAAO;AAAA,IAEf,IAAK,MAA4B,SAAS,UAAU;AAAA,MACnD,QAAQ,OAAO,MACd,GAAG,sBAAsB;AAAA,iCAAoC;AAAA,CAC9D;AAAA,MACA,QAAQ,KAAK,CAAC;AAAA,IACf;AAAA,IACA,QAAQ,OAAO,MACd,GAAG,sBAAsB,yBAAyB,IAAI,OAAO,KAAK;AAAA,CACnE;AAAA,IACA,MAAM;AAAA;AAAA;AAAA;AAAA,EAjMR;AAAA;;;;;;;ACHA,kBAAS;AACT,uBAAS,6BAAY;AACrB,iBAAS;AAGT,SAAS,kBAAiB,GAAW;AAAA,EAGpC,MAAM,UAAU,MAAK,YAAY,KAAK,MAAM,MAAM,QAAQ;AAAA,EAC1D,MAAM,WAAW,YAAW,OAAO;AAAA,EAEnC,IAAI,UAAU;AAAA,IAEb,OAAO,OAAO;AAAA,EACf;AAAA,EAGA,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,MAAM,mBAAmB;AAAA,IACxB,MAAK,KAAK,gBAAgB,QAAQ,SAAS;AAAA,IAC3C,MAAK,KAAK,MAAM,gBAAgB,QAAQ,SAAS;AAAA,IACjD,MAAK,KAAK,MAAM,MAAM,gBAAgB,QAAQ,SAAS;AAAA,IACvD,MAAK,KAAK,MAAM,MAAM,MAAM,gBAAgB,QAAQ,SAAS;AAAA,EAC9D;AAAA,EAEA,WAAW,YAAW,kBAAkB;AAAA,IACvC,IAAI,YAAW,QAAO,GAAG;AAAA,MACxB,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAGA,OAAO;AAAA;AAGR,SAAS,aAAa,GAAW;AAAA,EAChC,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,MAAM,kBAAkB,MAAK,KAAK,cAAc;AAAA,EAEhD,IAAI,YAAW,eAAe,GAAG;AAAA,IAChC,IAAI;AAAA,MACH,MAAM,cAAc,KAAK,MAAM,cAAa,iBAAiB,OAAO,CAAC;AAAA,MACrE,MAAM,OAAO,YAAY;AAAA,MACzB,IAAI,MAAM;AAAA,QAGT,MAAM,QAAQ,KAAK,MAAM,GAAG;AAAA,QAE5B,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,WAAW;AAAA,UAC9D,OAAO,MAAM,MAAM,SAAS,MAAM;AAAA,QACnC;AAAA,QAEA,OAAO,MAAM,MAAM,SAAS,MAAM;AAAA,MACnC;AAAA,MACC,MAAM;AAAA,EAGT;AAAA,EAEA,OAAO;AAAA;AAGR,eAA8B,KAAK,CAAC,MAAgB;AAAA,EACnD,IAAI;AAAA,IACH,MAAM,aAAa,mBAAkB;AAAA,IACrC,MAAM,WAAW,WAAW,SAAS,GAAG;AAAA,IAGxC,IAAI,aAAa,UAAU,cAAc;AAAA,IACzC,MAAM,eAAe,KAAK,QAAQ,WAAW;AAAA,IAC7C,MAAM,oBAAoB,KAAK,QAAQ,IAAI;AAAA,IAC3C,MAAM,kBACL,iBAAiB,KAAK,eAAe;AAAA,IAEtC,IAAI,oBAAoB,MAAM,KAAK,kBAAkB,IAAI;AAAA,MACxD,aAAa,KAAK,kBAAkB;AAAA,IACrC;AAAA,IAGA,MAAM,aAAa,EAAE,SAAS,GAAG;AAAA,IACjC,MAAM,YAAY,EAAE,SAAS,GAAG;AAAA,IAEhC,MAAM,mBAAmB,CAAC,SAAiB;AAAA,MAC1C,MAAM,OAAO,WAAW,UAAU,KAAK,SAAS;AAAA,MAChD,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI;AAAA,MAC7B,WAAW,UAAU,MAAM,IAAI,KAAK;AAAA,MAEpC,WAAW,QAAQ,OAAO;AAAA,QAEzB,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,UACjB;AAAA,QACD;AAAA,QACA,MAAM,cAAc,sBAAsB,IAAI;AAAA,QAC9C,QAAQ,IAAI,WAAW;AAAA,MACxB;AAAA;AAAA,IAGD,MAAM,kBAAkB,CAAC,SAAiB;AAAA,MACzC,MAAM,OAAO,UAAU,UAAU,KAAK,SAAS;AAAA,MAC/C,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI;AAAA,MAC7B,UAAU,UAAU,MAAM,IAAI,KAAK;AAAA,MAEnC,WAAW,QAAQ,OAAO;AAAA,QAEzB,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,UACjB;AAAA,QACD;AAAA,QACA,MAAM,cAAc,sBAAsB,IAAI;AAAA,QAC9C,QAAQ,IAAI,WAAW;AAAA,MACxB;AAAA;AAAA,IAID,QAAQ,OAAO,MACd,GAAG,sBAAsB,iCAAiC;AAAA,CAC3D;AAAA,IACA,MAAM,cAAc,WAAW,GAAG,oBAAoB;AAAA,IACtD,MAAM,WAAW,WAAW,CAAC,IAAI,CAAC,MAAM;AAAA,IAExC,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,MAC5C,MAAM,cAAc,OAAM,aAAa,UAAU;AAAA,QAChD,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,QAChC,OAAO;AAAA,MACR,CAAC;AAAA,MAED,YAAY,QAAQ,GAAG,QAAQ,gBAAgB;AAAA,MAC/C,YAAY,QAAQ,GAAG,QAAQ,gBAAgB;AAAA,MAE/C,YAAY,GAAG,QAAQ,CAAC,SAAS;AAAA,QAChC,IAAI,SAAS,QAAQ,SAAS,GAAG;AAAA,UAChC,OAAO,IAAI,MAAM,yBAAyB,MAAM,CAAC;AAAA,QAClD,EAAO;AAAA,UACN,QAAQ;AAAA;AAAA,OAET;AAAA,MAED,YAAY,GAAG,SAAS,CAAC,UAAU;AAAA,QAClC,OAAO,KAAK;AAAA,OACZ;AAAA,KACD;AAAA,IACD,QAAQ,OAAO,MACd,sBAAsB;AAAA,CAAiC,CACxD;AAAA,IAGA,QAAQ,OAAO,MACd,GAAG,sBAAsB,gCAAgC;AAAA,CAC1D;AAAA,IACA,MAAM,aAAa,WAAW,GAAG,mBAAmB;AAAA,IACpD,MAAM,UAAU,WAAW,CAAC,IAAI,CAAC,KAAK;AAAA,IAEtC,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,MAC5C,MAAM,aAAa,OAAM,YAAY,SAAS;AAAA,QAC7C,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,QAChC,OAAO;AAAA,MACR,CAAC;AAAA,MAED,WAAW,QAAQ,GAAG,QAAQ,eAAe;AAAA,MAC7C,WAAW,QAAQ,GAAG,QAAQ,eAAe;AAAA,MAE7C,WAAW,GAAG,QAAQ,CAAC,SAAS;AAAA,QAC/B,IAAI,SAAS,QAAQ,SAAS,GAAG;AAAA,UAChC,OAAO,IAAI,MAAM,wBAAwB,MAAM,CAAC;AAAA,QACjD,EAAO;AAAA,UACN,QAAQ;AAAA;AAAA,OAET;AAAA,MAED,WAAW,GAAG,SAAS,CAAC,UAAU;AAAA,QACjC,OAAO,KAAK;AAAA,OACZ;AAAA,KACD;AAAA,IACD,QAAQ,OAAO,MACd,sBAAsB;AAAA,CAAuC,CAC9D;AAAA,IAGA,QAAQ,OAAO,MACd,GAAG,sBAAsB,sCAAsC,eAAe;AAAA,CAC/E;AAAA,IAGA,MAAM,eACL;AAAA,IAGD,MAAM,YAAY,CAAC,SAAS,gBAAgB,YAAY,OAAO,WAAW;AAAA,IAG1E,IAAI,cAAc;AAAA,MACjB,UAAU,KAAK,UAAU;AAAA,IAC1B;AAAA,IAIA,MAAM,eAAe,KAAK,OAAO,CAAC,KAAK,QAAQ;AAAA,MAC9C,IAAI,oBAAoB,IAAI;AAAA,QAC3B,IAAI,QAAQ,mBAAmB,QAAQ,kBAAkB,GAAG;AAAA,UAC3D,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,OACC,QAAQ,eACR,QAAQ,QACR,QAAQ,cACR,QAAQ;AAAA,KAET;AAAA,IAED,UAAU,KAAK,GAAG,cAAc,aAAa,UAAU;AAAA,IAEvD,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,MAC5C,MAAM,eAAe,OAAM,OAAO,WAAW;AAAA,QAC5C,OAAO;AAAA,MACR,CAAC;AAAA,MAED,aAAa,GAAG,QAAQ,CAAC,SAAS;AAAA,QACjC,IAAI,SAAS,QAAQ,SAAS,GAAG;AAAA,UAChC,OAAO,IAAI,MAAM,0BAA0B,MAAM,CAAC;AAAA,QACnD,EAAO;AAAA,UACN,QAAQ,OAAO,MACd,sBACC,mCAAmC;AAAA,CACpC,CACD;AAAA,UACA,QAAQ;AAAA;AAAA,OAET;AAAA,MAED,aAAa,GAAG,SAAS,CAAC,UAAU;AAAA,QACnC,OAAO,KAAK;AAAA,OACZ;AAAA,KACD;AAAA,IACA,OAAO,OAAO;AAAA,IACf,QAAQ,OAAO,MACd,GAAG,sBAAsB,yBAAyB,IAAI,OAAO,KAAK;AAAA,CACnE;AAAA,IACA,MAAM;AAAA;AAAA;AAAA;AAAA,EA1OR;AAAA;;;ACJA;AAMA,IAAM,WAAW;AAAA,EAChB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AACR;AAIA,eAAe,IAAI,GAAG;AAAA,EACrB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,EAEjC,IAAI,KAAK,OAAO,eAAe,KAAK,OAAO,MAAM;AAAA,IAChD,MAAM,UAAU,MAAM,kBAAiB;AAAA,IACvC,QAAQ,IAAI,OAAO;AAAA,IACnB,QAAQ,KAAK,CAAC;AAAA,EACf;AAAA,EAEA,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,YAAY,KAAK,OAAO,MAAM;AAAA,IAClE,MAAM,WAAU;AAAA,IAChB,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,MAAM,WAAU;AAAA,IAChB,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,eAAe,UAAS,GAAG;AAAA,EAC1B,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,MAAM,kBAAiB,CAAC;AAAA,EACpC,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,QAAQ;AAAA,EACpB,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,+BAA+B;AAAA,EAC3C,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,WAAW;AAAA,EACvB,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,8CAA8C;AAAA,EAC1D,QAAQ,IAAI,6DAA6D;AAAA,EACzE,QAAQ,IAAI,2DAA2D;AAAA,EACvE,QAAQ,IAAI,6CAA6C;AAAA,EACzD,QAAQ,IAAI,kDAAkD;AAAA,EAC9D,QAAQ,IAAI,uCAAuC;AAAA,EACnD,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,UAAU;AAAA,EACtB,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,4BAA4B;AAAA,EACxC,QAAQ,IAAI,+BAA+B;AAAA,EAC3C,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,WAAW;AAAA,EACvB,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,uBAAuB;AAAA,EACnC,QAAQ,IAAI,gBAAgB;AAAA,EAC5B,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,eAAe;AAAA,EAC3B,QAAQ,IAAI,kBAAkB;AAAA,EAC9B,QAAQ,IAAI,uBAAuB;AAAA,EACnC,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,eAAe;AAAA,EAC3B,QAAQ,IAAI,kBAAkB;AAAA,EAC9B,QAAQ,IAAI,wBAAwB;AAAA,EACpC,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,iBAAiB;AAAA,EAC7B,QAAQ,IAAI,EAAE;AAAA,EACd,QAAQ,IAAI,iBAAiB;AAAA,EAC7B,QAAQ,IAAI,iCAAiC;AAAA,EAC7C,QAAQ,IAAI,wCAAwC;AAAA;AAGrD,eAAe,iBAAgB,GAAoB;AAAA,EAClD,MAAM,UAAU,MAAM,YAAW;AAAA,EACjC,MAAM,SAAS,MAAM,WAAU;AAAA,EAC/B,OAAO,YAAY,WAAW;AAAA;AAG/B,eAAe,WAAU,GAAoB;AAAA,EAE5C,IAAI,MAA4C;AAAA,IAC/C,OAAO;AAAA,EACR;AAAA,EAGA,MAAM,gBAAgB;AAAA,IACrB,MAAK,KAAK,YAAY,KAAK,uBAAuB;AAAA,IAClD,MAAK,KAAK,YAAY,KAAK,oBAAoB;AAAA,IAC/C,MAAK,KAAK,YAAY,KAAK,iBAAiB;AAAA,EAC7C;AAAA,EAEA,WAAW,WAAW,eAAe;AAAA,IACpC,IAAI;AAAA,MACH,MAAM,MAAM,MAAM,IAAI,KAAK,OAAO,EAAE,KAAK;AAAA,MACzC,OAAO,IAAI;AAAA,MACV,MAAM;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGR,eAAe,UAAS,GAAoB;AAAA,EAE3C,IAAI,MAA2C;AAAA,IAC9C,OAAO;AAAA,EACR;AAAA,EAGA,OAAO;AAAA;AAGR,KAAK;",
19
+ "debugId": "B8066BB70A3F2A9464756E2164756E21",
16
20
  "names": []
17
21
  }
package/cli/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.6.0
2
+ * reroute-js v0.7.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2025 stewones <hi@stewan.io>