olova 2.0.54 → 2.0.56

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 (96) hide show
  1. package/README.md +34 -283
  2. package/dist/chunk-23UAGQ6N.js +2208 -0
  3. package/dist/chunk-23UAGQ6N.js.map +1 -0
  4. package/dist/chunk-D7SIC5TC.js +367 -0
  5. package/dist/chunk-D7SIC5TC.js.map +1 -0
  6. package/dist/entry-server.cjs +2341 -0
  7. package/dist/entry-server.cjs.map +1 -0
  8. package/dist/entry-server.js +114 -0
  9. package/dist/entry-server.js.map +1 -0
  10. package/dist/entry-worker.cjs +2354 -0
  11. package/dist/entry-worker.cjs.map +1 -0
  12. package/dist/entry-worker.js +126 -0
  13. package/dist/entry-worker.js.map +1 -0
  14. package/dist/main.cjs +18 -0
  15. package/dist/main.cjs.map +1 -0
  16. package/dist/main.js +16 -0
  17. package/dist/main.js.map +1 -0
  18. package/dist/olova.cjs +1684 -0
  19. package/dist/olova.cjs.map +1 -0
  20. package/dist/olova.d.cts +72 -0
  21. package/dist/olova.d.ts +72 -0
  22. package/dist/olova.js +1325 -0
  23. package/dist/olova.js.map +1 -0
  24. package/dist/performance.cjs +386 -0
  25. package/dist/performance.cjs.map +1 -0
  26. package/dist/performance.js +3 -0
  27. package/dist/performance.js.map +1 -0
  28. package/dist/router.cjs +646 -0
  29. package/dist/router.cjs.map +1 -0
  30. package/dist/router.d.cts +113 -0
  31. package/dist/router.d.ts +113 -0
  32. package/dist/router.js +632 -0
  33. package/dist/router.js.map +1 -0
  34. package/main.tsx +76 -0
  35. package/olova.ts +619 -0
  36. package/package.json +37 -55
  37. package/src/entry-server.tsx +165 -0
  38. package/src/entry-worker.tsx +201 -0
  39. package/src/generator/index.ts +409 -0
  40. package/src/hydration/flight.ts +320 -0
  41. package/src/hydration/index.ts +12 -0
  42. package/src/hydration/types.ts +225 -0
  43. package/src/logger.ts +182 -0
  44. package/src/main.tsx +24 -0
  45. package/src/performance.ts +488 -0
  46. package/src/plugin/index.ts +204 -0
  47. package/src/router/ErrorBoundary.tsx +145 -0
  48. package/src/router/Link.tsx +117 -0
  49. package/src/router/OlovaRouter.tsx +354 -0
  50. package/src/router/Outlet.tsx +8 -0
  51. package/src/router/context.ts +117 -0
  52. package/src/router/index.ts +29 -0
  53. package/src/router/matching.ts +63 -0
  54. package/src/router/router.tsx +23 -0
  55. package/src/router/search-params.ts +29 -0
  56. package/src/scanner/index.ts +116 -0
  57. package/src/types/index.ts +191 -0
  58. package/src/utils/export.ts +85 -0
  59. package/src/utils/index.ts +4 -0
  60. package/src/utils/naming.ts +54 -0
  61. package/src/utils/path.ts +45 -0
  62. package/tsup.config.ts +35 -0
  63. package/dist/client-BBLXpllK.d.ts +0 -487
  64. package/dist/client-C0av_vTZ.d.cts +0 -487
  65. package/dist/client.cjs +0 -850
  66. package/dist/client.cjs.map +0 -1
  67. package/dist/client.d.cts +0 -5
  68. package/dist/client.d.ts +0 -5
  69. package/dist/client.js +0 -816
  70. package/dist/client.js.map +0 -1
  71. package/dist/image.cjs +0 -25
  72. package/dist/image.cjs.map +0 -1
  73. package/dist/image.d.cts +0 -1
  74. package/dist/image.d.ts +0 -1
  75. package/dist/image.js +0 -3
  76. package/dist/image.js.map +0 -1
  77. package/dist/index.cjs +0 -907
  78. package/dist/index.cjs.map +0 -1
  79. package/dist/index.d.cts +0 -31
  80. package/dist/index.d.ts +0 -31
  81. package/dist/index.js +0 -868
  82. package/dist/index.js.map +0 -1
  83. package/dist/plugin/index.cjs +0 -1550
  84. package/dist/plugin/index.cjs.map +0 -1
  85. package/dist/plugin/index.d.cts +0 -131
  86. package/dist/plugin/index.d.ts +0 -131
  87. package/dist/plugin/index.js +0 -1490
  88. package/dist/plugin/index.js.map +0 -1
  89. package/dist/serialization-xKcOESDh.d.cts +0 -122
  90. package/dist/serialization-xKcOESDh.d.ts +0 -122
  91. package/dist/server.cjs +0 -547
  92. package/dist/server.cjs.map +0 -1
  93. package/dist/server.d.cts +0 -148
  94. package/dist/server.d.ts +0 -148
  95. package/dist/server.js +0 -493
  96. package/dist/server.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/plugin/hooks/config.ts","../../src/plugin/config.ts","../../src/plugin/css/detection.ts","../../src/plugin/css/collection.ts","../../src/plugin/css/generator.ts","../../src/plugin/css/config.ts","../../src/plugin/css/utils.ts","../../src/plugin/chunks/collector.ts","../../src/plugin/chunks/manifest.ts","../../src/plugin/chunks/utils.ts","../../src/plugin/chunks/manual.ts","../../src/plugin/hooks/server.ts","../../src/plugin/utils.ts","../../src/plugin/hooks/server/manifests.ts","../../src/plugin/cache.ts","../../src/plugin/hooks/server/logging.ts","../../src/plugin/html/head.ts","../../src/hydration/serialization.ts","../../src/hydration/generation.ts","../../src/plugin/html/hydration.ts","../../src/plugin/html/preload.ts","../../src/plugin/html/prefetch.ts","../../src/plugin/html/template.ts","../../src/plugin/hooks/server/middleware.ts","../../src/plugin/hooks/transform.ts","../../src/plugin/constants.ts","../../src/plugin/hooks/bundle.ts","../../src/plugin/ssg/config.ts","../../src/plugin/ssg/seo.ts","../../src/plugin/ssg/renderer.ts","../../src/plugin/ssg/runner.ts","../../src/plugin/hooks/bundle/collection.ts","../../src/plugin/hooks/bundle/mapping.ts","../../src/plugin/plugin.ts","../../src/plugin/index.ts"],"sourcesContent":["import path from 'path';\r\nimport type { UserConfig } from 'vite';\r\nimport { \r\n loadOlovaConfig, \r\n getConfig \r\n} from '../config.js';\r\nimport {\r\n detectTailwindConfig,\r\n detectPostCSSConfig,\r\n createDefaultPostCSSConfig,\r\n collectCSSFiles,\r\n logCSSStatus,\r\n type TailwindDetectionResult,\r\n} from '../css.js';\r\nimport { createManualChunks } from '../chunks.js';\r\n\r\n/**\r\n * Handle Vite configuration hook\r\n * Explicitly typed to avoid TS4058 errors in DTS generation\r\n */\r\nexport async function handleConfig(): Promise<UserConfig> {\r\n const userConfig = await loadOlovaConfig();\r\n const olovaConfig = getConfig();\r\n \r\n console.log('\\n \\x1b[1m\\x1b[35m🔮 Olova Framework\\x1b[0m');\r\n if (Object.keys(userConfig).length > 0) {\r\n console.log(' ✓ Loaded olova.config.ts');\r\n }\r\n\r\n const cssConfig = userConfig.css || {};\r\n const tailwindResult = cssConfig.tailwind !== false \r\n ? await detectTailwindConfig() \r\n : { detected: false } as TailwindDetectionResult;\r\n const postcssResult = await detectPostCSSConfig();\r\n const srcDir = path.resolve(process.cwd(), 'src');\r\n const cssFiles = collectCSSFiles(srcDir);\r\n\r\n logCSSStatus(tailwindResult, postcssResult, cssFiles.globalCSS);\r\n\r\n let postcssConfig: any = undefined;\r\n if (cssConfig.postcss !== false && !postcssResult.detected) {\r\n postcssConfig = createDefaultPostCSSConfig(tailwindResult);\r\n }\r\n \r\n const config: UserConfig = {\r\n build: {\r\n outDir: olovaConfig.outDir,\r\n chunkSizeWarningLimit: 500,\r\n copyPublicDir: true,\r\n rollupOptions: {\r\n input: 'virtual:olova-entry-client',\r\n output: {\r\n manualChunks: createManualChunks(path.resolve(process.cwd(), 'src')),\r\n chunkFileNames: (chunkInfo: any) => {\r\n const name = chunkInfo.name || '';\r\n if (name.startsWith('framework-react-dom')) return '_olova/static/chunks/framework-[hash].js';\r\n if (name.startsWith('framework-') || name.startsWith('vendor-')) return '_olova/static/chunks/[name]-[hash].js';\r\n if (name.startsWith('pages/') || name.startsWith('pages-')) return '_olova/static/chunks/pages/[name]-[hash].js';\r\n return '_olova/static/chunks/[name]-[hash].js';\r\n },\r\n entryFileNames: '_olova/static/chunks/main-[hash].js',\r\n assetFileNames: (assetInfo: any) => {\r\n const fileName = assetInfo.name || '';\r\n if (fileName.endsWith('.css')) {\r\n const baseName = fileName.split('/').pop()?.replace('.css', '') || 'style';\r\n return `_olova/static/css/${baseName}-[hash][extname]`;\r\n }\r\n return '_olova/static/media/[name]-[hash][extname]';\r\n },\r\n }\r\n },\r\n minify: 'terser',\r\n terserOptions: { compress: { drop_console: false, drop_debugger: true } },\r\n sourcemap: false,\r\n target: 'esnext',\r\n },\r\n css: {\r\n modules: cssConfig.modules !== false ? {\r\n localsConvention: 'camelCaseOnly' as const,\r\n generateScopedName: '[name]__[local]___[hash:base64:5]',\r\n } : false,\r\n postcss: postcssConfig,\r\n devSourcemap: cssConfig.devSourceMap !== false,\r\n },\r\n resolve: { alias: { '@': path.resolve(process.cwd(), 'src') } },\r\n ...olovaConfig.vite,\r\n };\r\n\r\n return config;\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport { pathToFileURL } from 'url';\r\nimport { createRequire } from 'module';\r\nimport type { OlovaConfig } from '../core/index.js';\r\n\r\nlet userConfig: OlovaConfig = {};\r\n\r\nexport async function loadOlovaConfig(): Promise<OlovaConfig> {\r\n const configPath = path.resolve(process.cwd(), 'olova.config.ts');\r\n \r\n if (!fs.existsSync(configPath)) {\r\n console.log(' ⚠ No olova.config.ts found, using defaults');\r\n return {};\r\n }\r\n\r\n try {\r\n const require = createRequire(import.meta.url);\r\n const esbuild = require('esbuild');\r\n \r\n const result = await esbuild.build({\r\n entryPoints: [configPath],\r\n bundle: true,\r\n platform: 'node',\r\n format: 'cjs',\r\n write: false,\r\n external: [\r\n 'vite',\r\n 'esbuild',\r\n 'util', 'path', 'fs', 'url', 'os', 'crypto', 'stream', 'events',\r\n 'buffer', 'querystring', 'http', 'https', 'net', 'tls', 'child_process',\r\n 'cluster', 'dgram', 'dns', 'domain', 'readline', 'repl', 'tty', 'v8',\r\n 'vm', 'zlib', 'assert', 'async_hooks', 'console', 'constants', 'module',\r\n 'perf_hooks', 'process', 'string_decoder', 'timers', 'trace_events',\r\n 'worker_threads',\r\n ],\r\n });\r\n \r\n const code = result.outputFiles[0].text;\r\n const tempPath = path.resolve(process.cwd(), '.olova/temp-config.cjs');\r\n \r\n const olovaDir = path.resolve(process.cwd(), '.olova');\r\n if (!fs.existsSync(olovaDir)) {\r\n fs.mkdirSync(olovaDir, { recursive: true });\r\n }\r\n \r\n fs.writeFileSync(tempPath, code);\r\n const mod = await import(pathToFileURL(tempPath).href);\r\n fs.unlinkSync(tempPath);\r\n \r\n userConfig = mod.default?.default || mod.default || {};\r\n \r\n return userConfig;\r\n } catch (err: any) {\r\n console.error(' ⚠ Failed to load olova.config.ts:', err.message);\r\n return {};\r\n }\r\n}\r\n\r\nexport function getConfig(): OlovaConfig {\r\n return {\r\n outDir: '.olova/dist',\r\n basePath: '/',\r\n trailingSlash: false,\r\n experimental: {\r\n prefetch: true,\r\n ...userConfig.experimental,\r\n },\r\n staticGeneration: {\r\n timeout: 30000,\r\n fallback: 'blocking',\r\n ...userConfig.staticGeneration,\r\n },\r\n ...userConfig,\r\n };\r\n}\r\n\r\nexport function setUserConfig(config: OlovaConfig) {\r\n userConfig = config;\r\n}\r\n\r\nexport function getUserConfig(): OlovaConfig {\r\n return userConfig;\r\n}\r\n","import fs from \"fs\";\r\nimport path from \"path\";\r\nimport type { TailwindDetectionResult, PostCSSDetectionResult } from \"./types.js\";\r\n\r\nexport async function detectTailwindConfig(baseDir: string = process.cwd()): Promise<TailwindDetectionResult> {\r\n const configFiles = [\"tailwind.config.js\", \"tailwind.config.ts\", \"tailwind.config.mjs\", \"tailwind.config.cjs\"];\r\n for (const configFile of configFiles) {\r\n const configPath = path.resolve(baseDir, configFile);\r\n if (fs.existsSync(configPath)) {\r\n const content = fs.readFileSync(configPath, \"utf-8\");\r\n const isV4 = content.includes(\"@tailwindcss\") || content.includes(\"theme:\");\r\n return { detected: true, configPath, version: isV4 ? \"4\" : \"3\" };\r\n }\r\n }\r\n const packageJsonPath = path.resolve(baseDir, \"package.json\");\r\n if (fs.existsSync(packageJsonPath)) {\r\n try {\r\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\r\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\r\n if (deps[\"tailwindcss\"]) {\r\n const version = deps[\"tailwindcss\"].replace(/^[\\^~>=<]+/, '');\r\n return { detected: true, version: version.startsWith(\"4\") ? \"4\" : \"3\" };\r\n }\r\n } catch {}\r\n }\r\n return { detected: false };\r\n}\r\n\r\nexport async function detectPostCSSConfig(baseDir: string = process.cwd()): Promise<PostCSSDetectionResult> {\r\n const configFiles = [\"postcss.config.js\", \"postcss.config.cjs\", \"postcss.config.mjs\", \"postcss.config.ts\", \".postcssrc\", \".postcssrc.js\", \".postcssrc.json\"];\r\n for (const configFile of configFiles) {\r\n const configPath = path.resolve(baseDir, configFile);\r\n if (fs.existsSync(configPath)) return { detected: true, configPath };\r\n }\r\n return { detected: false };\r\n}\r\n","import fs from \"fs\";\r\nimport path from \"path\";\r\nimport type { CSSCollectionResult } from \"./types.js\";\r\n\r\nexport function collectCSSFiles(srcDir: string): CSSCollectionResult {\r\n const globalCSS: string[] = [];\r\n const cssModules: string[] = [];\r\n\r\n function scanDirectory(dir: string) {\r\n if (!fs.existsSync(dir)) return;\r\n const entries = fs.readdirSync(dir, { withFileTypes: true });\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n if (entry.isDirectory() && !entry.name.startsWith(\".\") && entry.name !== \"node_modules\") {\r\n scanDirectory(fullPath);\r\n } else if (entry.isFile()) {\r\n if (entry.name.endsWith(\".module.css\") || entry.name.endsWith(\".module.scss\")) {\r\n cssModules.push(fullPath);\r\n } else if (entry.name.endsWith(\".css\") || entry.name.endsWith(\".scss\")) {\r\n if (dir === srcDir) globalCSS.push(fullPath);\r\n }\r\n }\r\n }\r\n }\r\n scanDirectory(srcDir);\r\n return { globalCSS, cssModules };\r\n}\r\n\r\nexport function getCSSForBuild(outDir: string): string[] {\r\n const cssFiles: string[] = [];\r\n function scanCSSDir(dir: string, basePath: string) {\r\n if (!fs.existsSync(dir)) return;\r\n const entries = fs.readdirSync(dir, { withFileTypes: true });\r\n for (const entry of entries) {\r\n if (entry.isDirectory()) scanCSSDir(path.join(dir, entry.name), basePath + entry.name + '/');\r\n else if (entry.isFile() && entry.name.endsWith('.css')) cssFiles.push(basePath + entry.name);\r\n }\r\n }\r\n const olovaCssDir = path.join(outDir, \"_olova\", \"static\", \"css\");\r\n if (fs.existsSync(olovaCssDir)) scanCSSDir(olovaCssDir, '/_olova/static/css/');\r\n const legacyCssDir = path.join(outDir, \"assets\", \"css\");\r\n if (cssFiles.length === 0 && fs.existsSync(legacyCssDir)) scanCSSDir(legacyCssDir, '/assets/css/');\r\n return cssFiles;\r\n}\r\n","import path from \"path\";\r\n\r\nexport function generateCSSLinks(cssFiles: string[], basePath: string = \"/\"): string {\r\n return cssFiles.map((file) => {\r\n const href = basePath + file.replace(/\\\\/g, \"/\");\r\n return `<link rel=\"stylesheet\" href=\"${href}\" />`;\r\n }).join(\"\\n \");\r\n}\r\n\r\nexport function generateCSSImports(cssFiles: string[], srcDir: string): string {\r\n return cssFiles.map((file) => {\r\n const relativePath = path.relative(srcDir, file).replace(/\\\\/g, \"/\");\r\n return `import '@/${relativePath}';`;\r\n }).join(\"\\n\");\r\n}\r\n","import type { CSSOptions } from \"vite\";\r\nimport type { CSSConfig, TailwindDetectionResult } from \"./types.js\";\r\nimport { detectTailwindConfig, detectPostCSSConfig } from \"./detection.js\";\r\n\r\nexport function createDefaultPostCSSConfig(tailwindResult: TailwindDetectionResult): any {\r\n const plugins: any[] = [];\r\n if (tailwindResult.detected && tailwindResult.version !== \"4\") {\r\n plugins.push([\"tailwindcss\", tailwindResult.configPath ? { config: tailwindResult.configPath } : {}]);\r\n }\r\n if (plugins.length > 0) plugins.push([\"autoprefixer\", {}]);\r\n return plugins.length > 0 ? { plugins } : undefined;\r\n}\r\n\r\nexport async function createViteCSSConfig(cssConfig: CSSConfig = {}, baseDir: string = process.cwd()): Promise<CSSOptions> {\r\n const tailwindResult = cssConfig.tailwind !== false ? await detectTailwindConfig(baseDir) : { detected: false };\r\n const postcssResult = await detectPostCSSConfig(baseDir);\r\n const cssOptions: CSSOptions = {\r\n modules: cssConfig.modules !== false ? { localsConvention: \"camelCaseOnly\", generateScopedName: \"[name]__[local]___[hash:base64:5]\" } : false,\r\n };\r\n if (cssConfig.postcss !== false && !postcssResult.detected) {\r\n cssOptions.postcss = createDefaultPostCSSConfig(tailwindResult);\r\n }\r\n return cssOptions;\r\n}\r\n","import path from \"path\";\r\nimport type { TailwindDetectionResult, PostCSSDetectionResult } from \"./types.js\";\r\n\r\nexport function isCSSModule(filePath: string): boolean {\r\n return /\\.module\\.(css|scss|sass|less)$/.test(filePath);\r\n}\r\n\r\nexport function isCSSFile(filePath: string): boolean {\r\n return /\\.(css|scss|sass|less)$/.test(filePath);\r\n}\r\n\r\nexport function logCSSStatus(tailwindResult: TailwindDetectionResult, postcssResult: PostCSSDetectionResult, globalCSS: string[]): void {\r\n console.log(\"\\n \\x1b[1m\\x1b[36m🎨 CSS Configuration\\x1b[0m\");\r\n if (tailwindResult.detected) console.log(` ✓ Tailwind CSS ${tailwindResult.version === \"4\" ? \"v4\" : \"v3\"} detected`);\r\n if (postcssResult.detected) console.log(` ✓ PostCSS config found: ${path.basename(postcssResult.configPath!)}`);\r\n else console.log(\" ○ Using default PostCSS config (autoprefixer)\");\r\n if (globalCSS.length > 0) console.log(` ✓ Global CSS files: ${globalCSS.map(f => path.basename(f)).join(\", \")}`);\r\n console.log(\"\");\r\n}\r\n","import type { ChunkCollector, ChunkDependency, AssetInfo } from './types.js';\r\n\r\nexport function createChunkCollector(): ChunkCollector {\r\n return {\r\n routes: new Map(),\r\n shared: new Set(),\r\n assets: new Map(),\r\n framework: { react: null, reactDom: null, scheduler: null, router: null },\r\n chunkGroups: new Map(),\r\n };\r\n}\r\n\r\nexport function addRouteChunk(\r\n collector: ChunkCollector,\r\n routePath: string,\r\n chunkFile: string,\r\n size: number,\r\n isStatic: boolean = false,\r\n isDynamic: boolean = false,\r\n css: string[] = [],\r\n dependencies: ChunkDependency[] = [],\r\n priority: 'critical' | 'high' | 'normal' | 'low' = 'normal'\r\n): void {\r\n collector.routes.set(routePath, { chunk: chunkFile, size, isStatic, isDynamic, css, dependencies, priority });\r\n}\r\n\r\nexport function addSharedChunk(collector: ChunkCollector, chunkFile: string): void {\r\n collector.shared.add(chunkFile);\r\n}\r\n\r\nexport function addAsset(collector: ChunkCollector, fileName: string, size: number, type: 'js' | 'css' | 'other'): void {\r\n collector.assets.set(fileName, { size, type });\r\n}\r\n\r\nexport function trackFrameworkChunk(collector: ChunkCollector, chunkName: string, fileName: string): void {\r\n if (chunkName === 'framework-react') collector.framework.react = fileName;\r\n else if (chunkName === 'framework-react-dom') collector.framework.reactDom = fileName;\r\n else if (chunkName === 'framework-scheduler') collector.framework.scheduler = fileName;\r\n}\r\n\r\nexport function addToChunkGroup(collector: ChunkCollector, groupName: string, chunkFile: string): void {\r\n if (!collector.chunkGroups.has(groupName)) collector.chunkGroups.set(groupName, new Set());\r\n collector.chunkGroups.get(groupName)!.add(chunkFile);\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport type { ChunkCollector, ChunkManifest, PreloadHint, ChunkDependency, RouteChunk, AssetInfo } from './types.js';\r\n\r\nfunction generatePreloadHints(chunk: string, css: string[], dependencies: ChunkDependency[]): PreloadHint[] {\r\n const hints: PreloadHint[] = [{ href: chunk, as: 'script', priority: 'critical', crossorigin: true }];\r\n for (const cssFile of css) hints.push({ href: cssFile, as: 'style', priority: 'high' });\r\n for (const dep of dependencies) hints.push({ href: dep.chunk, as: 'script', priority: dep.priority, crossorigin: true });\r\n return hints;\r\n}\r\n\r\nexport function generateChunkManifest(collector: ChunkCollector): ChunkManifest {\r\n const routes: Record<string, RouteChunk> = {};\r\n const preloadMap: Record<string, PreloadHint[]> = {};\r\n collector.routes.forEach((info, routePath) => {\r\n const preloadHints = generatePreloadHints(info.chunk, info.css, info.dependencies);\r\n routes[routePath] = { ...info, preloadHints };\r\n preloadMap[routePath] = preloadHints;\r\n });\r\n const assets: Record<string, AssetInfo> = {};\r\n collector.assets.forEach((info, fileName) => { assets[fileName] = info; });\r\n const chunkGroups: Record<string, string[]> = {};\r\n collector.chunkGroups.forEach((chunks, groupName) => { chunkGroups[groupName] = Array.from(chunks); });\r\n return { version: 2, buildTime: new Date().toISOString(), routes, shared: Array.from(collector.shared), assets, framework: collector.framework, preloadMap, chunkGroups };\r\n}\r\n\r\nexport function writeChunkManifest(outDir: string, manifest: ChunkManifest): void {\r\n const olovaDir = path.join(outDir, '_olova');\r\n if (!fs.existsSync(olovaDir)) fs.mkdirSync(olovaDir, { recursive: true });\r\n fs.writeFileSync(path.join(olovaDir, 'chunks-manifest.json'), JSON.stringify(manifest, null, 2));\r\n console.log(` ✓ Generated chunks-manifest.json (${Object.keys(manifest.routes).length} routes)`);\r\n}\r\n","/**\r\n * Route path to chunk name conversion and path utilities\r\n */\r\n\r\nexport function routePathToChunkName(routePath: string): string {\r\n if (routePath === '/') return 'index';\r\n return routePath\r\n .replace(/^\\//, '')\r\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, '$1')\r\n .replace(/\\[(\\w+)\\]/g, '$1')\r\n .replace(/:/g, '')\r\n .replace(/\\*/g, '')\r\n .replace(/\\//g, '-')\r\n .toLowerCase();\r\n}\r\n\r\nexport function isPageModule(id: string, srcDir: string): boolean {\r\n if (!id.includes(srcDir)) return false;\r\n const relativePath = id.replace(srcDir, '').replace(/\\\\/g, '/');\r\n return /\\/page\\.(tsx?|jsx?)$/.test(relativePath);\r\n}\r\n\r\nexport function extractRoutePath(id: string, srcDir: string): string | null {\r\n if (!isPageModule(id, srcDir)) return null;\r\n const relativePath = id.replace(srcDir, '').replace(/\\\\/g, '/').replace(/\\/page\\.(tsx?|jsx?)$/, '');\r\n if (relativePath === '' || relativePath === '/') return '/';\r\n return relativePath.replace(/\\[\\.\\.\\.(\\w+)\\]/g, '*$1').replace(/\\[(\\w+)\\]/g, ':$1');\r\n}\r\n","import { routePathToChunkName, isPageModule, extractRoutePath } from './utils.js';\r\n\r\nconst isOfType = (id: string, srcDir: string, pattern: RegExp) => {\r\n if (!id.includes(srcDir)) return false;\r\n return pattern.test(id.replace(srcDir, '').replace(/\\\\/g, '/'));\r\n};\r\n\r\nconst getVendorChunkGroup = (packageName: string): string => {\r\n if (packageName === 'react' || packageName.startsWith('react-')) return `framework-${packageName}`;\r\n if (packageName === 'scheduler') return 'framework-scheduler';\r\n const groups: Record<string, string[]> = {\r\n 'vendor-ui': ['@radix-ui', '@headlessui', '@heroicons', 'lucide-react', 'clsx', 'class-variance-authority'],\r\n 'vendor-forms': ['react-hook-form', 'zod', 'yup', '@hookform'],\r\n 'vendor-date': ['date-fns', 'dayjs', 'moment', 'luxon'],\r\n 'vendor-animation': ['framer-motion', 'gsap', 'animejs', '@react-spring'],\r\n 'vendor-state': ['zustand', 'jotai', 'recoil', '@tanstack/query', 'swr']\r\n };\r\n for (const [group, libs] of Object.entries(groups)) {\r\n if (libs.some(lib => packageName.startsWith(lib))) return group;\r\n }\r\n return `vendor-${packageName}`;\r\n};\r\n\r\nexport function createManualChunks(srcDir: string) {\r\n const normSrc = srcDir.replace(/\\\\/g, '/');\r\n return (id: string) => {\r\n const normId = id.replace(/\\\\/g, '/');\r\n if (normId.includes('node_modules/react-dom')) return 'framework-react-dom';\r\n if (normId.includes('node_modules/react/')) return 'framework-react';\r\n if (normId.includes('node_modules/scheduler')) return 'framework-scheduler';\r\n \r\n if (isOfType(normId, normSrc, /\\/layout\\.(tsx?|jsx?)$/)) {\r\n const rel = normId.replace(normSrc, '');\r\n if (rel === '/layout.tsx' || rel === '/layout.jsx') return 'layouts/root';\r\n return `layouts/${rel.replace(/\\/layout\\.(tsx?|jsx?)$/, '').replace(/^\\//, '').replace(/\\//g, '-') || 'root'}`;\r\n }\r\n if (isOfType(normId, normSrc, /\\/template\\.(tsx?|jsx?)$/)) return 'shared/template';\r\n if (isOfType(normId, normSrc, /\\/loading\\.(tsx?|jsx?)$/)) return 'shared/loading';\r\n if (isOfType(normId, normSrc, /\\/error\\.(tsx?|jsx?)$/)) return 'shared/error';\r\n \r\n if (isPageModule(normId, normSrc)) {\r\n const route = extractRoutePath(normId, normSrc);\r\n if (route) return `pages/${routePathToChunkName(route)}`;\r\n }\r\n \r\n if (normId.includes('/components/')) {\r\n const match = normId.replace(normSrc, '').match(/\\/components\\/([^/]+)\\//);\r\n return match ? `components/${match[1]}` : 'components/shared';\r\n }\r\n \r\n if (normId.includes('/hooks/')) return 'shared/hooks';\r\n if (normId.includes('/lib/') || normId.includes('/utils/') || normId.includes('/helpers/')) return 'shared/utils';\r\n \r\n if (normId.includes('node_modules')) {\r\n const parts = normId.split('node_modules/');\r\n const pkg = parts[parts.length - 1];\r\n const pkgName = pkg.startsWith('@') ? pkg.split('/').slice(0, 2).join('-').replace('@', '') : pkg.split('/')[0];\r\n return getVendorChunkGroup(pkgName);\r\n }\r\n return undefined;\r\n };\r\n}\r\n","import path from 'path';\r\nimport fs from 'fs';\r\nimport type { ViteDevServer, PreviewServer } from 'vite';\r\nimport { findPages } from '../utils.js';\r\nimport { getUserConfig, getConfig } from '../config.js';\r\nimport { setupServerManifests } from './server/manifests.js';\r\nimport { logServerRoutes } from './server/logging.js';\r\nimport { createSsrMiddleware } from './server/middleware.js';\r\n\r\nexport function handleConfigureServer(server: ViteDevServer) {\r\n const baseDir = process.cwd();\r\n const srcDir = path.resolve(baseDir, 'src');\r\n const userConfig = getUserConfig();\r\n const pages = findPages(srcDir, srcDir, userConfig);\r\n \r\n setupServerManifests(baseDir, srcDir, pages);\r\n logServerRoutes(pages);\r\n \r\n const pageRoutes = new Map(pages.map(p => [p.path, p]));\r\n server.middlewares.use(createSsrMiddleware(server, srcDir, pageRoutes));\r\n}\r\n\r\nexport function handleConfigurePreviewServer(server: PreviewServer) {\r\n server.middlewares.use((req, res, next) => {\r\n const url = req.url?.split('?')[0];\r\n if (!url || url === '/' || url.includes('.')) return next();\r\n\r\n const config = getConfig();\r\n const baseDir = process.cwd();\r\n const outDir = path.resolve(baseDir, config.outDir || '.olova/dist');\r\n\r\n try {\r\n const indexHtml = path.join(outDir, url, 'index.html');\r\n if (fs.existsSync(indexHtml)) {\r\n req.url = url + '/index.html';\r\n return next();\r\n }\r\n const fileHtml = path.join(outDir, url + '.html');\r\n if (fs.existsSync(fileHtml)) {\r\n req.url = url + '.html';\r\n return next();\r\n }\r\n } catch (e) {}\r\n next();\r\n });\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport type { PageInfo } from './types.js';\r\nimport type { OlovaConfig } from '../core/index.js';\r\n\r\ninterface DirectoryContext {\r\n layouts: string[];\r\n loading?: string;\r\n error?: string;\r\n notFound?: string;\r\n template?: string;\r\n}\r\n\r\nexport function findPages(\r\n dir: string, \r\n baseDir: string, \r\n userConfig: OlovaConfig, \r\n pages: PageInfo[] = [],\r\n context: DirectoryContext = { layouts: [] }\r\n): PageInfo[] {\r\n const files = fs.readdirSync(dir);\r\n \r\n const currentContext: DirectoryContext = {\r\n layouts: [...context.layouts],\r\n loading: context.loading,\r\n error: context.error,\r\n notFound: context.notFound,\r\n template: context.template,\r\n };\r\n\r\n // First pass: detect special files in current directory\r\n for (const file of files) {\r\n const fullPath = path.join(dir, file).replace(/\\\\/g, '/');\r\n if (file === 'layout.tsx' || file === 'layout.jsx') currentContext.layouts.push(fullPath);\r\n if (file === 'loading.tsx' || file === 'loading.jsx') currentContext.loading = fullPath;\r\n if (file === 'error.tsx' || file === 'error.jsx') currentContext.error = fullPath;\r\n if (file === 'not-found.tsx' || file === 'not-found.jsx') currentContext.notFound = fullPath;\r\n if (file === 'template.tsx' || file === 'template.jsx') currentContext.template = fullPath;\r\n }\r\n\r\n for (const file of files) {\r\n const fullPath = path.join(dir, file);\r\n const isDirectory = fs.statSync(fullPath).isDirectory();\r\n\r\n // Handle grouped routes (e.g. (admin)) - they inherit context but don't add to path\r\n if (isDirectory && file.startsWith('(') && file.endsWith(')')) {\r\n findPages(fullPath, baseDir, userConfig, pages, currentContext);\r\n continue;\r\n }\r\n\r\n if (isDirectory && file !== 'assets' && file !== 'node_modules') {\r\n findPages(fullPath, baseDir, userConfig, pages, currentContext);\r\n } else if (file === 'page.tsx' || file === 'page.jsx') {\r\n let relativePath = path.relative(baseDir, dir);\r\n \r\n // Remove grouping syntax from path\r\n relativePath = relativePath.replace(/\\([^)]+\\)\\/?/g, '');\r\n \r\n let routePath = '/' + relativePath.replace(/\\\\/g, '/');\r\n routePath = routePath.replace(/\\/+/g, '/');\r\n const isDynamic = routePath.includes('[') && routePath.includes(']');\r\n \r\n if (isDynamic) {\r\n routePath = routePath\r\n .replace(/\\[\\[\\.{3}(.+?)\\]\\]/g, '*$1?')\r\n .replace(/\\[\\.{3}(.+?)\\]/g, '*$1')\r\n .replace(/\\[(.+?)\\]/g, ':$1');\r\n }\r\n\r\n const finalPath = routePath === '/' ? '/' : routePath.replace(/\\/$/, '');\r\n const content = fs.readFileSync(fullPath, 'utf-8');\r\n const hasStaticDirective = content.trimStart().startsWith('\"use static\"') || \r\n content.trimStart().startsWith(\"'use static'\");\r\n \r\n // SSG: Static pages are pre-rendered at build time\r\n const isStatic = !isDynamic && (\r\n hasStaticDirective || \r\n !!userConfig.ssg?.enabled\r\n );\r\n\r\n pages.push({\r\n path: finalPath,\r\n componentPath: fullPath.replace(/\\\\/g, '/'),\r\n layoutPaths: currentContext.layouts,\r\n loadingPath: currentContext.loading,\r\n errorPath: currentContext.error,\r\n notFoundPath: currentContext.notFound,\r\n templatePath: currentContext.template,\r\n isStatic,\r\n isDynamic\r\n });\r\n }\r\n }\r\n return pages;\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport { initCacheDir, generatePrerenderManifest } from '../../cache.js';\r\n\r\nexport function setupServerManifests(baseDir: string, srcDir: string, pages: any[]) {\r\n initCacheDir(baseDir, 'development');\r\n \r\n const routesManifest = {\r\n version: 1,\r\n basePath: '',\r\n pages: pages.map(p => ({\r\n path: p.path,\r\n componentPath: p.componentPath,\r\n isStatic: p.isStatic,\r\n isDynamic: p.isDynamic || false,\r\n })),\r\n staticRoutes: pages.filter(p => p.isStatic).map(p => ({ path: p.path })),\r\n dynamicRoutes: pages.filter(p => p.isDynamic).map(p => ({ \r\n path: p.path,\r\n regex: p.path.replace(/:\\w+/g, '[^/]+').replace(/\\*/g, '.*'),\r\n })),\r\n };\r\n \r\n const olovaDir = path.join(baseDir, '.olova');\r\n fs.writeFileSync(path.join(olovaDir, 'routes-manifest.json'), JSON.stringify(routesManifest, null, 2));\r\n \r\n const appPathsManifest: Record<string, string[]> = {};\r\n pages.forEach(p => {\r\n appPathsManifest[p.path] = [p.componentPath.replace(srcDir, '').replace(/\\\\/g, '/')];\r\n });\r\n fs.writeFileSync(path.join(olovaDir, 'app-paths-manifest.json'), JSON.stringify(appPathsManifest, null, 2));\r\n \r\n generatePrerenderManifest(baseDir, pages);\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport crypto from 'crypto';\r\n\r\n// Cache directory structure (like Next.js .next)\r\nconst OLOVA_DIR = '.olova';\r\nconst CACHE_DIR = '.olova/cache';\r\nconst PAGES_CACHE = '.olova/cache/pages';\r\nconst DATA_CACHE = '.olova/cache/fetch-cache';\r\nconst SERVER_DIR = '.olova/server';\r\n\r\nexport interface CacheEntry {\r\n hash: string;\r\n timestamp: number;\r\n data: any;\r\n}\r\n\r\nexport interface PrerenderManifest {\r\n version: string;\r\n routes: {\r\n [path: string]: {\r\n dataRoute: string | null;\r\n isStatic: boolean;\r\n srcHash: string;\r\n };\r\n };\r\n dynamicRoutes: {\r\n [pattern: string]: {\r\n routeRegex: string;\r\n };\r\n };\r\n preview?: boolean;\r\n}\r\n\r\nexport interface BuildInfo {\r\n version: string;\r\n buildId: string;\r\n startTime: string;\r\n mode: 'development' | 'production';\r\n nodeVersion: string;\r\n olovaVersion: string;\r\n}\r\n\r\n/**\r\n * Generate hash for a file\r\n */\r\nexport function generateFileHash(filePath: string): string {\r\n if (!fs.existsSync(filePath)) return '';\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n return crypto.createHash('md5').update(content).digest('hex').slice(0, 8);\r\n}\r\n\r\n/**\r\n * Generate a unique build ID\r\n */\r\nexport function generateBuildId(): string {\r\n return Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\r\n}\r\n\r\n/**\r\n * Initialize .olova directory structure (like Next.js .next)\r\n */\r\nexport function initCacheDir(baseDir: string, mode: 'development' | 'production' = 'production'): void {\r\n const olovaDir = path.join(baseDir, OLOVA_DIR);\r\n const cacheDir = path.join(baseDir, CACHE_DIR);\r\n const pagesCache = path.join(baseDir, PAGES_CACHE);\r\n const dataCache = path.join(baseDir, DATA_CACHE);\r\n const serverDir = path.join(baseDir, SERVER_DIR);\r\n\r\n // Create all directories\r\n [olovaDir, cacheDir, pagesCache, dataCache, serverDir].forEach(dir => {\r\n if (!fs.existsSync(dir)) {\r\n fs.mkdirSync(dir, { recursive: true });\r\n }\r\n });\r\n\r\n // Write build info\r\n const buildInfo: BuildInfo = {\r\n version: '1.0.0',\r\n buildId: generateBuildId(),\r\n startTime: new Date().toISOString(),\r\n mode,\r\n nodeVersion: process.version,\r\n olovaVersion: '2.0.48',\r\n };\r\n fs.writeFileSync(path.join(olovaDir, 'build-info.json'), JSON.stringify(buildInfo, null, 2));\r\n\r\n // Write package info for development\r\n const packageInfo = {\r\n name: 'olova',\r\n version: '2.0.48',\r\n };\r\n fs.writeFileSync(path.join(olovaDir, 'package.json'), JSON.stringify(packageInfo, null, 2));\r\n\r\n // Create required-server-files.json (like Next.js)\r\n const serverFiles = {\r\n version: 1,\r\n config: {\r\n env: {},\r\n basePath: '',\r\n trailingSlash: false,\r\n },\r\n files: [],\r\n };\r\n fs.writeFileSync(path.join(olovaDir, 'required-server-files.json'), JSON.stringify(serverFiles, null, 2));\r\n}\r\n\r\n/**\r\n * Get cached page\r\n */\r\nexport function getCachedPage(baseDir: string, pagePath: string): CacheEntry | null {\r\n const cacheFile = path.join(baseDir, PAGES_CACHE, `${pagePath.replace(/\\//g, '_')}.json`);\r\n if (fs.existsSync(cacheFile)) {\r\n try {\r\n return JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));\r\n } catch {\r\n return null;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Set page cache\r\n */\r\nexport function setCachedPage(baseDir: string, pagePath: string, data: any, hash: string): void {\r\n const cacheFile = path.join(baseDir, PAGES_CACHE, `${pagePath.replace(/\\//g, '_') || '_root'}.json`);\r\n const entry: CacheEntry = {\r\n hash,\r\n timestamp: Date.now(),\r\n data\r\n };\r\n fs.writeFileSync(cacheFile, JSON.stringify(entry, null, 2));\r\n}\r\n\r\n/**\r\n * Get cached data (for getStaticProps)\r\n */\r\nexport function getCachedData(baseDir: string, pagePath: string): CacheEntry | null {\r\n const cacheFile = path.join(baseDir, DATA_CACHE, `${pagePath.replace(/\\//g, '_') || '_root'}.json`);\r\n if (fs.existsSync(cacheFile)) {\r\n try {\r\n return JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));\r\n } catch {\r\n return null;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Set data cache\r\n */\r\nexport function setCachedData(baseDir: string, pagePath: string, data: any, hash: string): void {\r\n const cacheFile = path.join(baseDir, DATA_CACHE, `${pagePath.replace(/\\//g, '_') || '_root'}.json`);\r\n const entry: CacheEntry = {\r\n hash,\r\n timestamp: Date.now(),\r\n data\r\n };\r\n fs.writeFileSync(cacheFile, JSON.stringify(entry, null, 2));\r\n}\r\n\r\n/**\r\n * Check if cache is valid\r\n */\r\nexport function isCacheValid(cached: CacheEntry | null, currentHash: string): boolean {\r\n if (!cached) return false;\r\n return cached.hash === currentHash;\r\n}\r\n\r\n/**\r\n * Generate prerender manifest (like Next.js)\r\n */\r\nexport function generatePrerenderManifest(\r\n baseDir: string, \r\n pages: Array<{ path: string; componentPath: string; isStatic: boolean }>\r\n): PrerenderManifest {\r\n const manifest: PrerenderManifest = {\r\n version: '1.0',\r\n routes: {},\r\n dynamicRoutes: {},\r\n };\r\n\r\n for (const page of pages) {\r\n manifest.routes[page.path] = {\r\n dataRoute: page.isStatic ? `/data${page.path === '/' ? '/index' : page.path}.json` : null,\r\n isStatic: page.isStatic,\r\n srcHash: generateFileHash(page.componentPath),\r\n };\r\n }\r\n\r\n const manifestPath = path.join(baseDir, '.olova', 'prerender-manifest.json');\r\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));\r\n\r\n return manifest;\r\n}\r\n\r\n/**\r\n * Clear all caches\r\n */\r\nexport function clearCache(baseDir: string): void {\r\n const cacheDir = path.join(baseDir, CACHE_DIR);\r\n if (fs.existsSync(cacheDir)) {\r\n fs.rmSync(cacheDir, { recursive: true, force: true });\r\n }\r\n initCacheDir(baseDir);\r\n}\r\n\r\n/**\r\n * Get cache age in seconds\r\n */\r\nexport function getCacheAge(cached: CacheEntry): number {\r\n return Math.floor((Date.now() - cached.timestamp) / 1000);\r\n}\r\n","export function logServerRoutes(pages: any[]) {\r\n console.log('\\n \\x1b[1m\\x1b[36m⚡ Olova Dev Server\\x1b[0m\\n');\r\n console.log(' \\x1b[90m▲ .olova directory created\\x1b[0m\\n');\r\n console.log(' \\x1b[1mRoutes:\\x1b[0m');\r\n console.log(' ┌─────────────────────────────────┐');\r\n for (const page of pages) {\r\n let icon = '\\x1b[33m○\\x1b[0m';\r\n let type = '\\x1b[33mCSR\\x1b[0m';\r\n if (page.isStatic) {\r\n icon = '\\x1b[32m●\\x1b[0m';\r\n type = '\\x1b[32mSSG\\x1b[0m';\r\n }\r\n console.log(` │ ${icon} ${page.path.padEnd(20)} ${type.padEnd(10)}│`);\r\n }\r\n console.log(' └─────────────────────────────────┘');\r\n console.log(' \\x1b[32m●\\x1b[0m SSG (Static) \\x1b[33m○\\x1b[0m CSR (Client)\\n');\r\n}\r\n","import type { PageMetadata } from '../types.js';\r\n\r\nexport function generateMetaTags(metadata?: PageMetadata, siteUrl: string = '', route: string = '', isCanonicalEnabled: boolean = true): string {\r\n let metaTags = '';\r\n if (!metadata) return '';\r\n\r\n const tags = {\r\n description: metadata.description,\r\n keywords: metadata.keywords,\r\n author: metadata.author,\r\n robots: metadata.robots\r\n };\r\n\r\n for (const [name, content] of Object.entries(tags)) {\r\n if (content) metaTags += ` <meta name=\"${name}\" content=\"${content}\" />\\n`;\r\n }\r\n\r\n if (metadata.canonical) {\r\n metaTags += ` <link rel=\"canonical\" href=\"${metadata.canonical}\" />\\n`;\r\n } else if (isCanonicalEnabled && siteUrl && route) {\r\n const canonicalUrl = `${siteUrl}${route === '/' ? '' : route}`;\r\n metaTags += ` <link rel=\"canonical\" href=\"${canonicalUrl}\" />\\n`;\r\n }\r\n\r\n if (metadata.openGraph) {\r\n for (const [prop, content] of Object.entries(metadata.openGraph)) {\r\n if (content) metaTags += ` <meta property=\"og:${prop}\" content=\"${content}\" />\\n`;\r\n }\r\n }\r\n\r\n if (metadata.twitter) {\r\n for (const [name, content] of Object.entries(metadata.twitter)) {\r\n if (content) metaTags += ` <meta name=\"twitter:${name}\" content=\"${content}\" />\\n`;\r\n }\r\n }\r\n\r\n return metaTags;\r\n}\r\n","import type { FlightPayload, FlightChunk } from './types.js';\r\n\r\n/**\r\n * Safely stringify JSON for embedding in script tags\r\n * Escapes <, >, /, \\u2028, and \\u2029 to prevent XSS and syntax errors\r\n */\r\nexport function safeStringify(data: unknown): string {\r\n return JSON.stringify(data).replace(/[<>\\/\\u2028\\u2029]/g, (char) => {\r\n switch (char) {\r\n case '<': return '\\\\u003c';\r\n case '>': return '\\\\u003e';\r\n case '/': return '\\\\u002f';\r\n case '\\u2028': return '\\\\u2028';\r\n case '\\u2029': return '\\\\u2029';\r\n default: return char;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Serialize props for transfer (remove functions, handle special types)\r\n */\r\nexport function serializeProps(props: Record<string, any>): Record<string, any> {\r\n const serialized: Record<string, any> = {};\r\n \r\n for (const [key, value] of Object.entries(props)) {\r\n if (key === 'children') continue;\r\n if (typeof value === 'function') continue;\r\n \r\n if (value instanceof Date) {\r\n serialized[key] = { __type: 'Date', value: value.toISOString() };\r\n } else if (value instanceof Map) {\r\n serialized[key] = { __type: 'Map', value: Array.from(value.entries()) };\r\n } else if (value instanceof Set) {\r\n serialized[key] = { __type: 'Set', value: Array.from(value) };\r\n } else if (typeof value === 'object' && value !== null) {\r\n serialized[key] = serializeProps(value);\r\n } else {\r\n serialized[key] = value;\r\n }\r\n }\r\n \r\n return serialized;\r\n}\r\n\r\n/**\r\n * Deserialize props from Flight format\r\n */\r\nexport function deserializeProps(props: Record<string, any>): Record<string, any> {\r\n const result: Record<string, any> = {};\r\n \r\n for (const [key, value] of Object.entries(props)) {\r\n if (value && typeof value === 'object') {\r\n if (value.__type === 'Date') {\r\n result[key] = new Date(value.value);\r\n } else if (value.__type === 'Map') {\r\n result[key] = new Map(value.value);\r\n } else if (value.__type === 'Set') {\r\n result[key] = new Set(value.value);\r\n } else {\r\n result[key] = deserializeProps(value);\r\n }\r\n } else {\r\n result[key] = value;\r\n }\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Serialize Flight payload to string\r\n */\r\nexport function serializeFlightPayload(payload: FlightPayload): string {\r\n return JSON.stringify(payload);\r\n}\r\n\r\n/**\r\n * Generate script tag for embedding Flight payload\r\n */\r\nexport function generateFlightScript(payload: FlightPayload): string {\r\n const serialized = serializeFlightPayload(payload);\r\n const escaped = serialized\r\n .replace(/</g, '\\\\u003c')\r\n .replace(/>/g, '\\\\u003e')\r\n .replace(/&/g, '\\\\u0026');\r\n \r\n return `<script>self.__FLIGHT__=${escaped}</script>`;\r\n}\r\n\r\n/**\r\n * Generate streaming chunk script\r\n */\r\nexport function generateChunkScript(chunk: FlightChunk): string {\r\n const serialized = JSON.stringify(chunk)\r\n .replace(/</g, '\\\\u003c')\r\n .replace(/>/g, '\\\\u003e');\r\n \r\n return `<script>self.__FLIGHT_CHUNK__(${serialized})</script>`;\r\n}\r\n\r\n/**\r\n * Parse Flight payload from window\r\n */\r\nexport function parseFlightPayload(): FlightPayload | null {\r\n if (typeof window === 'undefined') return null;\r\n const flight = (window as any).__FLIGHT__;\r\n return (flight as FlightPayload) || null;\r\n}\r\n\r\n/**\r\n * Get component data from Flight payload\r\n */\r\nexport function getFlightData<T = any>(key: string): T | null {\r\n const payload = parseFlightPayload();\r\n if (!payload) return null;\r\n return payload.data[key] ?? null;\r\n}\r\n","import type { OlovaHydrationData, FlightChunk } from './types.js';\r\nimport { safeStringify } from './serialization.js';\r\n\r\n/**\r\n * Generate Olova hydration scripts using the Flight format\r\n * Creates chunked data that streams into the __olova_f array\r\n */\r\nexport function generateOlovaHydration(data: OlovaHydrationData, buildId: string): string {\r\n const meta = (data.metadata || {}) as Record<string, unknown>;\r\n const scripts: string[] = [];\r\n\r\n scripts.push(`<script>self.__olova_f=self.__olova_f||[];function _oF(d){self.__olova_f.push(d)}</script>`);\r\n\r\n const routeChunk: FlightChunk = {\r\n id: '0',\r\n html: '',\r\n ready: true,\r\n data: {\r\n path: data.route,\r\n params: data.params || {},\r\n pattern: data.route === '/' ? '/' : data.route.replace(/\\/[^/]+$/, '/:slug'),\r\n isStatic: data.isStatic ?? true,\r\n buildId: buildId\r\n },\r\n order: 0\r\n };\r\n scripts.push(`<script>_oF([0,\"R\",${safeStringify(routeChunk.data)}])</script>`);\r\n\r\n const metadataChunk: FlightChunk = {\r\n id: '1',\r\n html: '',\r\n ready: true,\r\n data: {\r\n title: meta.title || 'Olova App',\r\n description: meta.description || '',\r\n keywords: Array.isArray(meta.keywords) ? meta.keywords : [],\r\n robots: meta.robots || 'index, follow',\r\n canonical: meta.canonical || null,\r\n og: { type: 'website', locale: 'en_US', ...((meta.openGraph as object) || {}) },\r\n twitter: { card: 'summary_large_image', ...((meta.twitter as object) || {}) }\r\n },\r\n order: 1\r\n };\r\n scripts.push(`<script>_oF([1,\"M\",${safeStringify(metadataChunk.data)}])</script>`);\r\n\r\n const treeChunk: FlightChunk = {\r\n id: '2',\r\n html: '',\r\n ready: true,\r\n data: { layout: 'RootLayout', page: 'Page', template: null, loading: null, error: null, notFound: null },\r\n order: 2\r\n };\r\n scripts.push(`<script>_oF([2,\"T\",${safeStringify(treeChunk.data)}])</script>`);\r\n\r\n const structuredData: FlightChunk = {\r\n id: '3',\r\n html: '',\r\n ready: true,\r\n data: [\r\n { '@context': 'https://schema.org', '@type': 'WebPage', name: meta.title || 'Olova App', description: meta.description || '', url: data.route },\r\n { '@context': 'https://schema.org', '@type': 'WebApplication', name: 'Olova', applicationCategory: 'WebApplication', operatingSystem: 'Any' }\r\n ],\r\n order: 3\r\n };\r\n scripts.push(`<script>_oF([3,\"D\",${safeStringify(structuredData.data)}])</script>`);\r\n\r\n const assetsChunk: FlightChunk = {\r\n id: '4',\r\n html: '',\r\n ready: true,\r\n data: { chunks: data.chunks || [], styles: [], prefetch: (data.chunks || []).slice(0, 5) },\r\n order: 4\r\n };\r\n scripts.push(`<script>_oF([4,\"A\",${safeStringify(assetsChunk.data)}])</script>`);\r\n\r\n const hintsChunk: FlightChunk = {\r\n id: '5',\r\n html: '',\r\n ready: true,\r\n data: { dnsPrefetch: ['fonts.googleapis.com'], preconnect: ['https://fonts.googleapis.com'], modulePreload: (data.chunks || []).slice(0, 3) },\r\n order: 5\r\n };\r\n scripts.push(`<script>_oF([5,\"H\",${safeStringify(hintsChunk.data)}])</script>`);\r\n\r\n const stateChunk: FlightChunk = {\r\n id: '6',\r\n html: '',\r\n ready: true,\r\n data: { hydrated: false, streaming: false, ready: true, timestamp: Date.now(), version: '1.0.0', buildId: buildId },\r\n order: 6\r\n };\r\n scripts.push(`<script>_oF([6,\"S\",${safeStringify(stateChunk.data)}])</script>`);\r\n scripts.push(`<script>_oF([7,\"E\",null])</script>`);\r\n\r\n const globalPayload = { $route: routeChunk.data, $meta: metadataChunk.data, $tree: treeChunk.data, $schema: structuredData.data, $assets: assetsChunk.data, $hints: hintsChunk.data, $state: stateChunk.data, $build: { id: buildId, version: '1.0.0', timestamp: Date.now(), env: 'production' } };\r\n scripts.push(`<script>$OLOVA=${safeStringify(globalPayload)}</script>`);\r\n\r\n return scripts.join('');\r\n}\r\n\r\n/**\r\n * Generate JSON-LD structured data script for SEO\r\n */\r\nexport function generateJsonLd(data: OlovaHydrationData): string {\r\n const meta = (data.metadata || {}) as Record<string, unknown>;\r\n const jsonLd = {\r\n '@context': 'https://schema.org',\r\n '@graph': [\r\n { '@type': 'WebPage', '@id': data.route, name: meta.title || 'Olova App', description: meta.description || '', url: data.route, isPartOf: { '@type': 'WebSite', name: 'Olova App' } },\r\n { '@type': 'BreadcrumbList', itemListElement: data.route.split('/').filter(Boolean).map((segment, index, arr) => ({ '@type': 'ListItem', position: index + 1, name: segment.charAt(0).toUpperCase() + segment.slice(1), item: '/' + arr.slice(0, index + 1).join('/') })) }\r\n ]\r\n };\r\n if (meta.schema) {\r\n const schemas = Array.isArray(meta.schema) ? meta.schema : [meta.schema];\r\n (jsonLd['@graph'] as any[]).push(...schemas);\r\n }\r\n return `<script type=\"application/ld+json\">${JSON.stringify(jsonLd)}</script>`;\r\n}\r\n","import type { PageMetadata } from '../types.js';\r\nimport { generateOlovaHydration, generateJsonLd } from '../../hydration/generation.js';\r\nimport type { OlovaHydrationData } from '../../hydration/types.js';\r\n\r\nexport function handleHtmlHydration(\r\n content: string, \r\n pageData: any, \r\n metadata: PageMetadata | undefined, \r\n flightPayload: any, \r\n buildId: string\r\n) {\r\n const hydrationData: OlovaHydrationData = {\r\n route: flightPayload?.route || '/',\r\n metadata: {\r\n title: metadata?.title,\r\n description: metadata?.description,\r\n keywords: metadata?.keywords,\r\n robots: metadata?.robots,\r\n canonical: metadata?.canonical,\r\n openGraph: metadata?.openGraph,\r\n twitter: metadata?.twitter,\r\n schema: metadata?.schema,\r\n },\r\n params: flightPayload?.params || {},\r\n chunks: [],\r\n isStatic: !!pageData || !!content,\r\n };\r\n\r\n const flightHydration = generateOlovaHydration(hydrationData, buildId);\r\n const jsonLdScript = generateJsonLd(hydrationData);\r\n \r\n const olovaData = {\r\n props: { pageProps: pageData || {} },\r\n page: flightPayload?.route || '/',\r\n query: {},\r\n buildId,\r\n flight: flightPayload || null,\r\n runtimeConfig: {},\r\n isFallback: false,\r\n gsp: !!pageData,\r\n gssp: false,\r\n };\r\n\r\n const olovaDataScript = `<script id=\"__OLOVA_DATA__\" type=\"application/json\">${\r\n JSON.stringify(olovaData)\r\n .replace(/</g, '\\\\u003c')\r\n .replace(/>/g, '\\\\u003e')\r\n .replace(/&/g, '\\\\u0026')\r\n .replace(/'/g, '\\\\u0027')\r\n }</script>`;\r\n\r\n return { flightHydration, jsonLdScript, olovaDataScript };\r\n}\r\n","import type { ChunkManifest } from '../chunks.js';\r\n\r\nexport function generatePreloadTags(manifest: ChunkManifest | undefined, routePath: string, scriptPath: string, cssLinks: string[]): string {\r\n let preloadTags = '';\r\n if (manifest) {\r\n const frameworkChunks = [manifest.framework.react, manifest.framework.reactDom, manifest.framework.scheduler].filter(Boolean);\r\n for (const chunk of frameworkChunks) preloadTags += ` <link rel=\"modulepreload\" href=\"/${chunk}\" crossorigin />\\n`;\r\n const routeChunk = manifest.routes[routePath];\r\n if (routeChunk) {\r\n preloadTags += ` <link rel=\"modulepreload\" href=\"/${routeChunk.chunk}\" crossorigin />\\n`;\r\n for (const css of routeChunk.css) preloadTags += ` <link rel=\"preload\" href=\"/${css}\" as=\"style\" />\\n`;\r\n for (const dep of routeChunk.dependencies) {\r\n if (dep.priority === 'critical' || dep.priority === 'high') preloadTags += ` <link rel=\"modulepreload\" href=\"/${dep.chunk}\" crossorigin />\\n`;\r\n }\r\n }\r\n } else {\r\n if (scriptPath) preloadTags += ` <link rel=\"modulepreload\" href=\"${scriptPath}\" />\\n`;\r\n cssLinks.forEach(href => { preloadTags += ` <link rel=\"preload\" href=\"${href}\" as=\"style\" />\\n`; });\r\n }\r\n return preloadTags;\r\n}\r\n","import type { ChunkManifest } from '../chunks.js';\r\n\r\nexport function generatePrefetchScript(manifest: ChunkManifest | undefined): string {\r\n if (!manifest) return '';\r\n const manifestData = JSON.stringify({\r\n routes: Object.fromEntries(Object.entries(manifest.routes).map(([path, chunk]) => [path, { chunk: chunk.chunk, css: chunk.css }])),\r\n framework: manifest.framework,\r\n });\r\n return `\r\n <script type=\"module\">\r\n (function(){\r\n const m=${manifestData};\r\n const p=new Set(),q=[],MAX=3;let a=0;\r\n function f(h){\r\n if(p.has(h)||a>=MAX){if(!p.has(h))q.push(h);return}\r\n p.add(h);a++;\r\n const l=document.createElement('link');\r\n l.rel='prefetch';l.href='/'+h;l.as=h.endsWith('.css')?'style':'script';\r\n l.onload=l.onerror=()=>{a--;if(q.length)f(q.shift())};\r\n document.head.appendChild(l);\r\n }\r\n function r(path){\r\n const c=m.routes[path]||m.routes[path.replace(/\\\\/$/,'')];\r\n if(c){f(c.chunk);c.css.forEach(f)}\r\n }\r\n const obs=new IntersectionObserver(e=>{\r\n e.forEach(en=>{\r\n if(en.isIntersecting){\r\n const h=en.target.getAttribute('href');\r\n if(h&&h.startsWith('/'))r(h);\r\n obs.unobserve(en.target);\r\n }\r\n });\r\n },{rootMargin:'50px'});\r\n function init(){\r\n document.querySelectorAll('a[href^=\"/\"]').forEach(l=>{\r\n if(!l.dataset.noPrefetch){\r\n obs.observe(l);\r\n let t;\r\n l.addEventListener('mouseenter',()=>{t=setTimeout(()=>{\r\n const h=l.getAttribute('href');if(h)r(h);\r\n },100)});\r\n l.addEventListener('mouseleave',()=>clearTimeout(t));\r\n }\r\n });\r\n }\r\n if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);\r\n else init();\r\n window.addEventListener('olova:navigate',init);\r\n })();\r\n </script>`;\r\n}\r\n","import type { PageMetadata } from '../types.js';\r\nimport { generateMetaTags } from './head.js';\r\nimport { handleHtmlHydration } from './hydration.js';\r\nimport { generatePreloadTags } from './preload.js';\r\nimport { generatePrefetchScript } from './prefetch.js';\r\n\r\nexport interface PreloadConfig {\r\n manifest?: any;\r\n routePath?: string;\r\n injectPrefetchScript?: boolean;\r\n}\r\n\r\nexport function generateHtmlTemplate(\r\n content: string, \r\n scriptPath: string, \r\n cssLinks: string[] = [],\r\n pageData?: any,\r\n metadata?: PageMetadata,\r\n flightPayload?: any,\r\n olovaConfig?: any,\r\n preloadConfig?: PreloadConfig\r\n) {\r\n const buildId = Date.now().toString(36);\r\n const siteUrl = olovaConfig?.siteUrl || '';\r\n const route = flightPayload?.route || '/';\r\n \r\n const metaTags = generateMetaTags(metadata, siteUrl, route, olovaConfig?.seo?.canonical !== false);\r\n const { flightHydration, jsonLdScript, olovaDataScript } = handleHtmlHydration(content, pageData, metadata, flightPayload, buildId);\r\n const preloadTags = generatePreloadTags(preloadConfig?.manifest, preloadConfig?.routePath || '/', scriptPath, cssLinks);\r\n \r\n const cssLinkTags = cssLinks.length > 0 \r\n ? cssLinks.map(href => ` <link rel=\"stylesheet\" href=\"${href}\" />`).join('\\n')\r\n : '';\r\n\r\n const prefetchScript = preloadConfig?.injectPrefetchScript ? generatePrefetchScript(preloadConfig.manifest) : '';\r\n\r\n return `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n <title>${metadata?.title || 'Olova App'}</title>\r\n${metaTags}${preloadTags}${cssLinkTags ? cssLinkTags + '\\n' : ''} ${jsonLdScript}\r\n </head>\r\n <body>\r\n <div id=\"root\">${content}</div>\r\n ${olovaDataScript}\r\n ${flightHydration}\r\n <script type=\"module\" src=\"${scriptPath}\"></script>${prefetchScript}\r\n </body>\r\n</html>`;\r\n}\r\n","import path from 'path';\r\nimport fs from 'fs';\r\nimport type { ViteDevServer } from 'vite';\r\nimport { generateHtmlTemplate } from '../../html.js';\r\nimport type { PageMetadata } from '../../types.js';\r\n\r\nexport function createSsrMiddleware(server: ViteDevServer, srcDir: string, pageRoutes: Map<string, any>) {\r\n return async (req: any, res: any, next: any) => {\r\n const url = req.url || '';\r\n const shouldSkip = url.includes('.') || url.startsWith('/@') || url.startsWith('/__') || url.startsWith('/node_modules') || url.includes('virtual:') || url.startsWith('/src') || req.method !== 'GET';\r\n \r\n if (shouldSkip) return next();\r\n \r\n const urlPath = url.split('?')[0];\r\n const normalizedPath = urlPath === '/' ? '/' : urlPath.replace(/\\/$/, '');\r\n const page = pageRoutes.get(normalizedPath);\r\n \r\n // @ts-ignore\r\n const React = await import('react');\r\n\r\n let content = '';\r\n let pageMetadata: PageMetadata | undefined;\r\n \r\n if (page) {\r\n try {\r\n const pageModule = await server.ssrLoadModule(page.componentPath);\r\n pageMetadata = (pageModule.metadata || pageModule.default.metadata) as PageMetadata;\r\n \r\n // Load layouts\r\n const layoutModules = await Promise.all(\r\n (page.layoutPaths || []).map((lp: string) => server.ssrLoadModule(lp))\r\n );\r\n const Layouts = layoutModules.map(m => m.default);\r\n\r\n if (page.isStatic) {\r\n const { renderToString } = await import('react-dom/server');\r\n const Page = pageModule.default;\r\n \r\n let pageContent: any = React.createElement(Page, null);\r\n // Wrap with layouts bottom-up\r\n for (let i = Layouts.length - 1; i >= 0; i--) {\r\n pageContent = React.createElement(Layouts[i], { children: pageContent });\r\n }\r\n \r\n content = renderToString(pageContent);\r\n console.log(` \\x1b[32m● SSG\\x1b[0m ${normalizedPath}`);\r\n }\r\n } catch (err: any) {\r\n if (page.isStatic) console.error(` \\x1b[31m✗ SSG failed\\x1b[0m ${normalizedPath}: ${err.message}`);\r\n }\r\n }\r\n \r\n const html = generateHtmlTemplate(content, '/src/entry-client.tsx', [], undefined, pageMetadata);\r\n res.setHeader('Content-Type', 'text/html');\r\n server.transformIndexHtml(url, html).then(transformedHtml => res.end(transformedHtml)).catch(next);\r\n };\r\n}\r\n","import path from 'path';\r\nimport { findPages } from '../utils.js';\r\nimport { getUserConfig } from '../config.js';\r\nimport { ENTRY_CLIENT_CODE } from '../constants.js';\r\n\r\nconst virtualModuleId = 'virtual:olova-routes';\r\nconst resolvedVirtualModuleId = '\\0' + virtualModuleId;\r\nconst virtualEntryId = 'virtual:olova-entry-client';\r\nconst resolvedVirtualEntryId = '\\0' + virtualEntryId;\r\n\r\nexport function handleResolveId(id: string) {\r\n if (id === virtualModuleId) return resolvedVirtualModuleId;\r\n if (id === virtualEntryId || id === '/src/entry-client.tsx') return resolvedVirtualEntryId;\r\n return null;\r\n}\r\n\r\nexport function handleLoad(id: string) {\r\n if (id === resolvedVirtualEntryId) return ENTRY_CLIENT_CODE;\r\n \r\n if (id === resolvedVirtualModuleId) {\r\n const srcDir = path.resolve(process.cwd(), 'src');\r\n const userConfig = getUserConfig();\r\n const pages = findPages(srcDir, srcDir, userConfig);\r\n const routesCode = pages.map((p) => {\r\n const importPath = p.componentPath.replace(/\\\\/g, '/');\r\n const layouts = p.layoutPaths.map(lp => `() => import('${lp.replace(/\\\\/g, '/')}')`).join(', ');\r\n \r\n let extra = '';\r\n if (p.loadingPath) extra += `, loading: () => import('${p.loadingPath.replace(/\\\\/g, '/')}')`;\r\n if (p.errorPath) extra += `, error: () => import('${p.errorPath.replace(/\\\\/g, '/')}')`;\r\n if (p.notFoundPath) extra += `, notFound: () => import('${p.notFoundPath.replace(/\\\\/g, '/')}')`;\r\n if (p.templatePath) extra += `, template: () => import('${p.templatePath.replace(/\\\\/g, '/')}')`;\r\n\r\n return `{ \r\n path: '${p.path}', \r\n component: () => import('${importPath}'), \r\n layouts: [${layouts}],\r\n static: ${p.isStatic}, \r\n dynamic: ${p.isDynamic || false}${extra} \r\n }`;\r\n }).join(',\\n ');\r\n return `export const routes = [\\n ${routesCode}\\n];`;\r\n }\r\n return null;\r\n}\r\n\r\nexport function handleTransform(code: string) {\r\n if (code.includes('\"use static\"') || code.includes(\"'use static'\")) {\r\n return code.replace(/['\"]use static['\"];?/, '');\r\n }\r\n return null;\r\n}\r\n","export const HTML_MINIFY_OPTIONS = {\r\n collapseWhitespace: true,\r\n removeComments: true,\r\n removeRedundantAttributes: true,\r\n removeScriptTypeAttributes: true,\r\n removeStyleLinkTypeAttributes: true,\r\n useShortDoctype: true,\r\n minifyCSS: true,\r\n minifyJS: true,\r\n sortAttributes: true,\r\n sortClassName: true,\r\n};\r\n\r\n// Virtual entry-client code - served by the plugin\r\n// Using React.createElement instead of JSX to avoid transform issues\r\nexport const ENTRY_CLIENT_CODE = `\r\nimport React from 'react';\r\nimport { createRoot, hydrateRoot } from 'react-dom/client';\r\nimport { Router, HeadProvider } from 'olova/client';\r\nimport { routes } from 'virtual:olova-routes';\r\nimport Layout from '@/layout';\r\n\r\n// Global CSS imports (auto-detected from src directory)\r\nimport '@/index.css';\r\n\r\n// Chunk manifest for route-based code splitting\r\nlet chunkManifest = null;\r\n\r\nasync function loadChunkManifest() {\r\n try {\r\n const response = await fetch('/_olova/chunks-manifest.json');\r\n if (response.ok) {\r\n chunkManifest = await response.json();\r\n window.__OLOVA_CHUNK_MANIFEST__ = chunkManifest;\r\n console.log('[Olova] Loaded chunk manifest:', Object.keys(chunkManifest.routes || {}).length, 'routes');\r\n }\r\n } catch (error) {\r\n // Manifest may not exist in dev mode, that's fine\r\n console.debug('[Olova] Chunk manifest not available (normal in dev mode)');\r\n }\r\n}\r\n\r\nfunction getOlovaData() {\r\n if (typeof document === 'undefined') return null;\r\n try {\r\n const script = document.getElementById('__OLOVA_DATA__');\r\n if (!script) return null;\r\n return JSON.parse(script.textContent || '{}');\r\n } catch (error) {\r\n console.error('[Olova] Failed to parse __OLOVA_DATA__:', error);\r\n return null;\r\n }\r\n}\r\n\r\nfunction getFlightPayload() {\r\n try {\r\n const olovaData = getOlovaData();\r\n if (olovaData?.flight && olovaData.flight.v === 1) {\r\n return olovaData.flight;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error('[Olova] Failed to parse Flight payload:', error);\r\n return null;\r\n }\r\n}\r\n\r\nfunction progressiveHydrate(rootElement, app, payload) {\r\n try {\r\n hydrateRoot(rootElement, app, {\r\n onRecoverableError(error) {\r\n console.warn('[Olova] Hydration mismatch:', error);\r\n },\r\n });\r\n requestAnimationFrame(() => {\r\n document.documentElement.classList.add('olova-hydrated');\r\n window.dispatchEvent(new CustomEvent('olova:ready'));\r\n });\r\n } catch (error) {\r\n console.error('[Olova] Hydration failed:', error);\r\n createRoot(rootElement).render(app);\r\n }\r\n}\r\n\r\n// Load chunk manifest early (non-blocking)\r\nloadChunkManifest();\r\n\r\nwindow.__OLOVA_ROUTES__ = routes;\r\n\r\nconst App = () => React.createElement(\r\n HeadProvider,\r\n null,\r\n React.createElement(\r\n Layout,\r\n null,\r\n React.createElement(Router, { routes: routes })\r\n )\r\n);\r\n\r\nconst rootElement = document.getElementById('root');\r\nconst flightPayload = getFlightPayload();\r\nconst hasServerContent = rootElement.innerHTML.trim().length > 0;\r\n\r\nif (hasServerContent) {\r\n console.log('[Olova] Hydrating');\r\n progressiveHydrate(rootElement, React.createElement(App), flightPayload);\r\n} else {\r\n console.log('[Olova] Client-side rendering');\r\n createRoot(rootElement).render(React.createElement(App));\r\n requestAnimationFrame(() => {\r\n document.documentElement.classList.add('olova-hydrated');\r\n window.dispatchEvent(new CustomEvent('olova:ready'));\r\n });\r\n}\r\n\r\nif (import.meta.hot) {\r\n import.meta.hot.accept();\r\n}\r\n`;\r\n","import path from 'path';\r\nimport { findPages } from '../utils.js';\r\nimport { getUserConfig, getConfig } from '../config.js';\r\nimport { \r\n createChunkCollector, \r\n generateChunkManifest, \r\n writeChunkManifest \r\n} from '../chunks.js';\r\nimport { runSSG } from '../ssg.js';\r\nimport { collectAssetsAndChunks } from './bundle/collection.js';\r\nimport { mapRoutesToChunks } from './bundle/mapping.js';\r\nimport type { ChunkCollector } from '../chunks.js';\r\n\r\nexport function handleGenerateBundle(bundle: any, isBuild: boolean) {\r\n for (const fileName of Object.keys(bundle)) {\r\n if (fileName.startsWith('src/')) delete bundle[fileName];\r\n }\r\n\r\n if (!isBuild) return createChunkCollector();\r\n\r\n const baseDir = process.cwd();\r\n const srcDir = path.resolve(baseDir, 'src');\r\n const userConfig = getUserConfig();\r\n const pages = findPages(srcDir, srcDir, userConfig);\r\n const chunkCollector = createChunkCollector();\r\n\r\n const cssFiles = collectAssetsAndChunks(bundle, chunkCollector);\r\n mapRoutesToChunks(pages, bundle, chunkCollector, cssFiles);\r\n\r\n return chunkCollector;\r\n}\r\n\r\nexport async function handleCloseBundle(isBuild: boolean, chunkCollector: ChunkCollector) {\r\n if (!isBuild) return;\r\n \r\n const baseDir = process.cwd();\r\n const srcDir = path.resolve(baseDir, 'src');\r\n const userConfig = getUserConfig();\r\n const pages = findPages(srcDir, srcDir, userConfig);\r\n const olovaConfig = getConfig();\r\n\r\n const manifest = generateChunkManifest(chunkCollector);\r\n const outDir = path.resolve(baseDir, olovaConfig.outDir || '.olova/dist');\r\n writeChunkManifest(outDir, manifest);\r\n \r\n await runSSG(baseDir, pages, olovaConfig);\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport { getCSSForBuild } from '../css.js';\r\n\r\nexport function discoverEntries(outDir: string) {\r\n let jsEntry = '';\r\n const cssEntries = getCSSForBuild(outDir);\r\n const chunksDir = path.join(outDir, '_olova', 'static', 'chunks');\r\n if (fs.existsSync(chunksDir)) {\r\n const chunks = fs.readdirSync(chunksDir);\r\n for (const chunk of chunks) {\r\n if (chunk.startsWith('main') && chunk.endsWith('.js')) {\r\n jsEntry = '/_olova/static/chunks/' + chunk;\r\n break;\r\n }\r\n }\r\n }\r\n return { jsEntry, cssEntries };\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport type { PageInfo } from '../types.js';\r\n\r\nexport function generateSeoFiles(outDir: string, pages: PageInfo[], siteUrl: string, seo: any) {\r\n if (!siteUrl) return;\r\n\r\n if (seo?.sitemap !== false) {\r\n const sitemap = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n${pages.map(page => ` <url>\r\n <loc>${siteUrl}${page.path === '/' ? '' : page.path}</loc>\r\n <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\r\n <changefreq>daily</changefreq>\r\n <priority>${page.path === '/' ? '1.0' : '0.8'}</priority>\r\n </url>`).join('\\n')}\r\n</urlset>`;\r\n fs.writeFileSync(path.join(outDir, 'sitemap.xml'), sitemap);\r\n }\r\n\r\n if (seo?.robots !== false) {\r\n let content = (typeof seo?.robots === 'object' && seo.robots.rules) \r\n ? seo.robots.rules \r\n : `User-agent: *\\nAllow: /\\n\\nSitemap: ${siteUrl}/sitemap.xml`;\r\n \r\n if (typeof seo?.robots === 'object' && seo.robots.sitemaps) {\r\n seo.robots.sitemaps.forEach((s: string) => { content += `\\nSitemap: ${s}`; });\r\n }\r\n fs.writeFileSync(path.join(outDir, 'robots.txt'), content);\r\n }\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport { pathToFileURL } from 'url';\r\nimport { build as viteBuild } from 'vite';\r\n\r\nexport async function renderStaticPage(baseDir: string, srcDir: string, page: any) {\r\n const tempSSRDir = path.join(baseDir, '.olova/ssr');\r\n if (!fs.existsSync(tempSSRDir)) fs.mkdirSync(tempSSRDir, { recursive: true });\r\n \r\n const pkgPath = path.join(tempSSRDir, 'package.json');\r\n if (!fs.existsSync(pkgPath)) fs.writeFileSync(pkgPath, JSON.stringify({ type: 'module' }));\r\n\r\n const layoutPath = fs.existsSync(path.join(srcDir, 'layout.tsx')) ? path.join(srcDir, 'layout.tsx') : (fs.existsSync(path.join(srcDir, 'layout.jsx')) ? path.join(srcDir, 'layout.jsx') : null);\r\n const layoutImport = layoutPath ? `import Layout from '${layoutPath.replace(/\\\\/g, '/')}';` : '';\r\n const layoutUsage = layoutPath ? ['<Layout>', '</Layout>'] : ['<>', '</>'];\r\n\r\n const tempEntry = path.join(tempSSRDir, `entry-${Math.random().toString(36).substring(7)}.tsx`);\r\n const content = `import React from 'react';\\nimport { renderToString } from 'react-dom/server';\\n${layoutImport}\\nimport Page from '${page.componentPath.replace(/\\\\/g, '/')}';\\nexport default function render() { return renderToString(${layoutUsage[0]}<Page />${layoutUsage[1]}); }`;\r\n fs.writeFileSync(tempEntry, content);\r\n\r\n try {\r\n await viteBuild({\r\n configFile: false, root: baseDir, build: { ssr: true, write: true, outDir: tempSSRDir, emptyOutDir: false, rollupOptions: { input: tempEntry, output: { format: 'esm', entryFileNames: '[name].js' }, onwarn: (w, h) => { if (w.code !== 'MODULE_LEVEL_DIRECTIVE') h(w); } } },\r\n plugins: [{ name: 'olova-ssr-transforms', transform: (c) => c.replace(/['\"]use static['\"];?/, '') }],\r\n logLevel: 'silent'\r\n });\r\n\r\n const builtPath = tempEntry.replace('.tsx', '.js');\r\n if (fs.existsSync(builtPath)) {\r\n const mod = await import(pathToFileURL(builtPath).href);\r\n return { content: mod.default(), metadata: mod.metadata };\r\n }\r\n throw new Error('Built artifact not found');\r\n } finally {\r\n if (fs.existsSync(tempEntry)) fs.unlinkSync(tempEntry);\r\n const builtPath = tempEntry.replace('.tsx', '.js');\r\n if (fs.existsSync(builtPath)) fs.unlinkSync(builtPath);\r\n }\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport { initCacheDir, generatePrerenderManifest } from '../cache.js';\r\nimport { generateHtmlTemplate } from '../html.js';\r\nimport { HTML_MINIFY_OPTIONS } from '../constants.js';\r\nimport { discoverEntries } from './config.js';\r\nimport { generateSeoFiles } from './seo.js';\r\nimport { renderStaticPage } from './renderer.js';\r\n\r\nexport async function runSSG(baseDir: string, pages: any[], olovaConfig: any) {\r\n initCacheDir(baseDir);\r\n console.log('\\n📦 Generating pages...');\r\n const outDir = path.resolve(baseDir, olovaConfig.outDir || '.olova/dist');\r\n const srcDir = path.resolve(baseDir, 'src');\r\n const { jsEntry, cssEntries } = discoverEntries(outDir);\r\n const { minify } = await import('html-minifier-terser');\r\n \r\n const srcInDist = path.join(outDir, 'src');\r\n if (fs.existsSync(srcInDist)) fs.rmSync(srcInDist, { recursive: true, force: true });\r\n \r\n if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });\r\n fs.writeFileSync(path.join(outDir, 'prerender-manifest.json'), JSON.stringify(generatePrerenderManifest(baseDir, pages), null, 2));\r\n\r\n for (const page of pages) {\r\n const startTime = Date.now();\r\n const htmlPath = page.path === '/' ? path.join(outDir, 'index.html') : path.join(outDir, page.path, 'index.html');\r\n if (page.path !== '/' && !fs.existsSync(path.dirname(htmlPath))) fs.mkdirSync(path.dirname(htmlPath), { recursive: true });\r\n\r\n let content = '', metadata = undefined;\r\n if (page.isStatic) {\r\n try {\r\n const result = await renderStaticPage(baseDir, srcDir, page);\r\n content = result.content; metadata = result.metadata;\r\n console.log(` \\x1b[32m● SSG\\x1b[0m ${page.path} \\x1b[90m(${Date.now() - startTime}ms)\\x1b[0m`);\r\n } catch (err: any) { console.error(` \\x1b[31m✗ SSG failed\\x1b[0m ${page.path}: ${err.message}`); }\r\n }\r\n\r\n const fullHtml = generateHtmlTemplate(content, jsEntry, cssEntries, undefined, metadata, { route: page.path, params: {}, v: 1 }, olovaConfig);\r\n fs.writeFileSync(htmlPath, await minify(fullHtml, HTML_MINIFY_OPTIONS));\r\n }\r\n\r\n const buildManifest = {\r\n version: Date.now().toString(36), buildTime: new Date().toISOString(),\r\n pages: pages.map(p => ({ path: p.path, isStatic: p.isStatic })),\r\n assets: { main: jsEntry, css: cssEntries },\r\n };\r\n fs.writeFileSync(path.join(outDir, 'build-manifest.json'), JSON.stringify(buildManifest, null, 2));\r\n\r\n generateSeoFiles(outDir, pages, olovaConfig?.siteUrl, olovaConfig?.seo);\r\n console.log(`\\n✅ Build complete!\\n`);\r\n}\r\n","import { \r\n trackFrameworkChunk, \r\n addSharedChunk, \r\n addToChunkGroup, \r\n type ChunkCollector \r\n} from '../../chunks.js';\r\n\r\nexport function collectAssetsAndChunks(bundle: any, chunkCollector: ChunkCollector) {\r\n const cssFiles = new Map<string, string>();\r\n \r\n for (const [fileName, asset] of Object.entries(bundle)) {\r\n if ((asset as any).type === 'asset' && fileName.endsWith('.css')) {\r\n const name = (asset as any).name || fileName;\r\n cssFiles.set(name, fileName);\r\n }\r\n \r\n if ((asset as any).type === 'chunk') {\r\n const chunk = asset as any;\r\n const name = chunk.name || '';\r\n \r\n if (['framework-react', 'framework-react-dom', 'framework-scheduler'].includes(name)) {\r\n trackFrameworkChunk(chunkCollector, name as any, fileName);\r\n }\r\n \r\n if (name.startsWith('framework-') || name.startsWith('vendor-')) {\r\n addSharedChunk(chunkCollector, fileName);\r\n addToChunkGroup(chunkCollector, name.startsWith('framework-') ? 'framework' : 'vendor', fileName);\r\n }\r\n \r\n const categories = ['layouts', 'components', 'shared'];\r\n for (const cat of categories) {\r\n if (name.startsWith(`${cat}/`)) addToChunkGroup(chunkCollector, cat, fileName);\r\n }\r\n }\r\n }\r\n \r\n return cssFiles;\r\n}\r\n","import { \r\n addRouteChunk, \r\n routePathToChunkName, \r\n addToChunkGroup, \r\n type ChunkCollector, \r\n type ChunkDependency \r\n} from '../../chunks.js';\r\n\r\nexport function mapRoutesToChunks(pages: any[], bundle: any, chunkCollector: ChunkCollector, cssFiles: Map<string, string>) {\r\n for (const page of pages) {\r\n const chunkName = `pages/${routePathToChunkName(page.path)}`;\r\n \r\n for (const [fileName, chunk] of Object.entries(bundle)) {\r\n if ((chunk as any).type === 'chunk' && (chunk as any).name === chunkName) {\r\n const dependencies: ChunkDependency[] = [];\r\n \r\n if (chunkCollector.framework.react) dependencies.push({ chunk: chunkCollector.framework.react, priority: 'critical' });\r\n if (chunkCollector.framework.reactDom) dependencies.push({ chunk: chunkCollector.framework.reactDom, priority: 'critical' });\r\n \r\n const layoutChunks = chunkCollector.chunkGroups.get('layouts');\r\n if (layoutChunks) {\r\n for (const layoutChunk of layoutChunks) dependencies.push({ chunk: layoutChunk, priority: 'high' });\r\n }\r\n \r\n const routeCss: string[] = [];\r\n for (const [_, cssPath] of cssFiles) {\r\n if (cssPath.includes('app') || cssPath.includes('index') || cssPath.includes('main')) routeCss.push(cssPath);\r\n }\r\n \r\n addRouteChunk(\r\n chunkCollector,\r\n page.path,\r\n fileName,\r\n ((chunk as any).code || '').length,\r\n page.isStatic || false,\r\n page.isDynamic || false,\r\n routeCss,\r\n dependencies,\r\n page.path === '/' ? 'high' : 'normal'\r\n );\r\n \r\n addToChunkGroup(chunkCollector, 'pages', fileName);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","import type { Plugin } from 'vite';\r\nimport { \r\n handleConfig, \r\n handleConfigureServer, \r\n handleResolveId, \r\n handleLoad, \r\n handleTransform, \r\n handleGenerateBundle, \r\n handleConfigurePreviewServer, \r\n handleCloseBundle \r\n} from './hooks/index.js';\r\nimport type { ChunkCollector } from './chunks.js';\r\nimport { createChunkCollector } from './chunks.js';\r\n\r\nexport function olova(): Plugin {\r\n let isBuild = false;\r\n let chunkCollector: ChunkCollector = createChunkCollector();\r\n\r\n return {\r\n name: 'vite-plugin-olova',\r\n config: () => handleConfig(),\r\n configResolved(config) {\r\n isBuild = config.command === 'build';\r\n },\r\n configureServer: (server) => handleConfigureServer(server),\r\n resolveId: (id) => handleResolveId(id),\r\n load: (id) => handleLoad(id),\r\n transform: (code) => handleTransform(code),\r\n generateBundle(_, bundle) {\r\n chunkCollector = handleGenerateBundle(bundle, isBuild);\r\n },\r\n configurePreviewServer: (server) => handleConfigurePreviewServer(server),\r\n closeBundle: () => handleCloseBundle(isBuild, chunkCollector),\r\n };\r\n}\r\n","/**\r\n * Olova Vite Plugin Module\r\n */\r\n\r\nexport * from './plugin.js';\r\nexport * from './cache.js';\r\nexport * from './css.js';\r\n\r\nimport { olova } from './plugin.js';\r\nexport default olova;\r\n"],"mappings":";AAAA,OAAOA,WAAU;;;ACAjB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAG9B,IAAI,aAA0B,CAAC;AAE/B,eAAsB,kBAAwC;AAC5D,QAAM,aAAa,KAAK,QAAQ,QAAQ,IAAI,GAAG,iBAAiB;AAEhE,MAAI,CAAC,GAAG,WAAW,UAAU,GAAG;AAC9B,YAAQ,IAAI,mDAA8C;AAC1D,WAAO,CAAC;AAAA,EACV;AAEA,MAAI;AACF,UAAMC,WAAU,cAAc,YAAY,GAAG;AAC7C,UAAM,UAAUA,SAAQ,SAAS;AAEjC,UAAM,SAAS,MAAM,QAAQ,MAAM;AAAA,MACjC,aAAa,CAAC,UAAU;AAAA,MACxB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAM;AAAA,QAAO;AAAA,QAAM;AAAA,QAAU;AAAA,QAAU;AAAA,QACvD;AAAA,QAAU;AAAA,QAAe;AAAA,QAAQ;AAAA,QAAS;AAAA,QAAO;AAAA,QAAO;AAAA,QACxD;AAAA,QAAW;AAAA,QAAS;AAAA,QAAO;AAAA,QAAU;AAAA,QAAY;AAAA,QAAQ;AAAA,QAAO;AAAA,QAChE;AAAA,QAAM;AAAA,QAAQ;AAAA,QAAU;AAAA,QAAe;AAAA,QAAW;AAAA,QAAa;AAAA,QAC/D;AAAA,QAAc;AAAA,QAAW;AAAA,QAAkB;AAAA,QAAU;AAAA,QACrD;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,OAAO,OAAO,YAAY,CAAC,EAAE;AACnC,UAAM,WAAW,KAAK,QAAQ,QAAQ,IAAI,GAAG,wBAAwB;AAErE,UAAM,WAAW,KAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ;AACrD,QAAI,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC5B,SAAG,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,IAC5C;AAEA,OAAG,cAAc,UAAU,IAAI;AAC/B,UAAM,MAAM,MAAM,OAAO,cAAc,QAAQ,EAAE;AACjD,OAAG,WAAW,QAAQ;AAEtB,iBAAa,IAAI,SAAS,WAAW,IAAI,WAAW,CAAC;AAErD,WAAO;AAAA,EACT,SAAS,KAAU;AACjB,YAAQ,MAAM,4CAAuC,IAAI,OAAO;AAChE,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,YAAyB;AACvC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,eAAe;AAAA,IACf,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,GAAG,WAAW;AAAA,IAChB;AAAA,IACA,kBAAkB;AAAA,MAChB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,GAAG,WAAW;AAAA,IAChB;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAMO,SAAS,gBAA6B;AAC3C,SAAO;AACT;;;ACnFA,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAGjB,eAAsB,qBAAqB,UAAkB,QAAQ,IAAI,GAAqC;AAC5G,QAAM,cAAc,CAAC,sBAAsB,sBAAsB,uBAAuB,qBAAqB;AAC7G,aAAW,cAAc,aAAa;AACpC,UAAM,aAAaA,MAAK,QAAQ,SAAS,UAAU;AACnD,QAAID,IAAG,WAAW,UAAU,GAAG;AAC7B,YAAM,UAAUA,IAAG,aAAa,YAAY,OAAO;AACnD,YAAM,OAAO,QAAQ,SAAS,cAAc,KAAK,QAAQ,SAAS,QAAQ;AAC1E,aAAO,EAAE,UAAU,MAAM,YAAY,SAAS,OAAO,MAAM,IAAI;AAAA,IACjE;AAAA,EACF;AACA,QAAM,kBAAkBC,MAAK,QAAQ,SAAS,cAAc;AAC5D,MAAID,IAAG,WAAW,eAAe,GAAG;AAClC,QAAI;AACF,YAAM,MAAM,KAAK,MAAMA,IAAG,aAAa,iBAAiB,OAAO,CAAC;AAChE,YAAM,OAAO,EAAE,GAAG,IAAI,cAAc,GAAG,IAAI,gBAAgB;AAC3D,UAAI,KAAK,aAAa,GAAG;AACvB,cAAM,UAAU,KAAK,aAAa,EAAE,QAAQ,cAAc,EAAE;AAC5D,eAAO,EAAE,UAAU,MAAM,SAAS,QAAQ,WAAW,GAAG,IAAI,MAAM,IAAI;AAAA,MACxE;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AACA,SAAO,EAAE,UAAU,MAAM;AAC3B;AAEA,eAAsB,oBAAoB,UAAkB,QAAQ,IAAI,GAAoC;AAC1G,QAAM,cAAc,CAAC,qBAAqB,sBAAsB,sBAAsB,qBAAqB,cAAc,iBAAiB,iBAAiB;AAC3J,aAAW,cAAc,aAAa;AACpC,UAAM,aAAaC,MAAK,QAAQ,SAAS,UAAU;AACnD,QAAID,IAAG,WAAW,UAAU,EAAG,QAAO,EAAE,UAAU,MAAM,WAAW;AAAA,EACrE;AACA,SAAO,EAAE,UAAU,MAAM;AAC3B;;;ACnCA,OAAOE,SAAQ;AACf,OAAOC,WAAU;AAGV,SAAS,gBAAgB,QAAqC;AACnE,QAAM,YAAsB,CAAC;AAC7B,QAAM,aAAuB,CAAC;AAE9B,WAAS,cAAc,KAAa;AAClC,QAAI,CAACD,IAAG,WAAW,GAAG,EAAG;AACzB,UAAM,UAAUA,IAAG,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAC3D,eAAW,SAAS,SAAS;AAC3B,YAAM,WAAWC,MAAK,KAAK,KAAK,MAAM,IAAI;AAC1C,UAAI,MAAM,YAAY,KAAK,CAAC,MAAM,KAAK,WAAW,GAAG,KAAK,MAAM,SAAS,gBAAgB;AACvF,sBAAc,QAAQ;AAAA,MACxB,WAAW,MAAM,OAAO,GAAG;AACzB,YAAI,MAAM,KAAK,SAAS,aAAa,KAAK,MAAM,KAAK,SAAS,cAAc,GAAG;AAC7E,qBAAW,KAAK,QAAQ;AAAA,QAC1B,WAAW,MAAM,KAAK,SAAS,MAAM,KAAK,MAAM,KAAK,SAAS,OAAO,GAAG;AACtE,cAAI,QAAQ,OAAQ,WAAU,KAAK,QAAQ;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,gBAAc,MAAM;AACpB,SAAO,EAAE,WAAW,WAAW;AACjC;AAEO,SAAS,eAAe,QAA0B;AACvD,QAAM,WAAqB,CAAC;AAC5B,WAAS,WAAW,KAAa,UAAkB;AACjD,QAAI,CAACD,IAAG,WAAW,GAAG,EAAG;AACzB,UAAM,UAAUA,IAAG,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAC3D,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,YAAY,EAAG,YAAWC,MAAK,KAAK,KAAK,MAAM,IAAI,GAAG,WAAW,MAAM,OAAO,GAAG;AAAA,eAClF,MAAM,OAAO,KAAK,MAAM,KAAK,SAAS,MAAM,EAAG,UAAS,KAAK,WAAW,MAAM,IAAI;AAAA,IAC7F;AAAA,EACF;AACA,QAAM,cAAcA,MAAK,KAAK,QAAQ,UAAU,UAAU,KAAK;AAC/D,MAAID,IAAG,WAAW,WAAW,EAAG,YAAW,aAAa,qBAAqB;AAC7E,QAAM,eAAeC,MAAK,KAAK,QAAQ,UAAU,KAAK;AACtD,MAAI,SAAS,WAAW,KAAKD,IAAG,WAAW,YAAY,EAAG,YAAW,cAAc,cAAc;AACjG,SAAO;AACT;;;AC3CA,OAAOE,WAAU;AAEV,SAAS,iBAAiB,UAAoB,WAAmB,KAAa;AACnF,SAAO,SAAS,IAAI,CAAC,SAAS;AAC5B,UAAM,OAAO,WAAW,KAAK,QAAQ,OAAO,GAAG;AAC/C,WAAO,gCAAgC,IAAI;AAAA,EAC7C,CAAC,EAAE,KAAK,QAAQ;AAClB;AAEO,SAAS,mBAAmB,UAAoB,QAAwB;AAC7E,SAAO,SAAS,IAAI,CAAC,SAAS;AAC5B,UAAM,eAAeA,MAAK,SAAS,QAAQ,IAAI,EAAE,QAAQ,OAAO,GAAG;AACnE,WAAO,aAAa,YAAY;AAAA,EAClC,CAAC,EAAE,KAAK,IAAI;AACd;;;ACVO,SAAS,2BAA2B,gBAA8C;AACvF,QAAM,UAAiB,CAAC;AACxB,MAAI,eAAe,YAAY,eAAe,YAAY,KAAK;AAC7D,YAAQ,KAAK,CAAC,eAAe,eAAe,aAAa,EAAE,QAAQ,eAAe,WAAW,IAAI,CAAC,CAAC,CAAC;AAAA,EACtG;AACA,MAAI,QAAQ,SAAS,EAAG,SAAQ,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACzD,SAAO,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI;AAC5C;AAEA,eAAsB,oBAAoB,YAAuB,CAAC,GAAG,UAAkB,QAAQ,IAAI,GAAwB;AACzH,QAAM,iBAAiB,UAAU,aAAa,QAAQ,MAAM,qBAAqB,OAAO,IAAI,EAAE,UAAU,MAAM;AAC9G,QAAM,gBAAgB,MAAM,oBAAoB,OAAO;AACvD,QAAM,aAAyB;AAAA,IAC7B,SAAS,UAAU,YAAY,QAAQ,EAAE,kBAAkB,iBAAiB,oBAAoB,oCAAoC,IAAI;AAAA,EAC1I;AACA,MAAI,UAAU,YAAY,SAAS,CAAC,cAAc,UAAU;AAC1D,eAAW,UAAU,2BAA2B,cAAc;AAAA,EAChE;AACA,SAAO;AACT;;;ACvBA,OAAOC,WAAU;AAGV,SAAS,YAAY,UAA2B;AACrD,SAAO,kCAAkC,KAAK,QAAQ;AACxD;AAEO,SAAS,UAAU,UAA2B;AACnD,SAAO,0BAA0B,KAAK,QAAQ;AAChD;AAEO,SAAS,aAAa,gBAAyC,eAAuC,WAA2B;AACtI,UAAQ,IAAI,uDAAgD;AAC5D,MAAI,eAAe,SAAU,SAAQ,IAAI,yBAAoB,eAAe,YAAY,MAAM,OAAO,IAAI,WAAW;AACpH,MAAI,cAAc,SAAU,SAAQ,IAAI,kCAA6BA,MAAK,SAAS,cAAc,UAAW,CAAC,EAAE;AAAA,MAC1G,SAAQ,IAAI,sDAAiD;AAClE,MAAI,UAAU,SAAS,EAAG,SAAQ,IAAI,8BAAyB,UAAU,IAAI,OAAKA,MAAK,SAAS,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;AAChH,UAAQ,IAAI,EAAE;AAChB;;;AChBO,SAAS,uBAAuC;AACrD,SAAO;AAAA,IACL,QAAQ,oBAAI,IAAI;AAAA,IAChB,QAAQ,oBAAI,IAAI;AAAA,IAChB,QAAQ,oBAAI,IAAI;AAAA,IAChB,WAAW,EAAE,OAAO,MAAM,UAAU,MAAM,WAAW,MAAM,QAAQ,KAAK;AAAA,IACxE,aAAa,oBAAI,IAAI;AAAA,EACvB;AACF;AAEO,SAAS,cACd,WACA,WACA,WACA,MACA,WAAoB,OACpB,YAAqB,OACrB,MAAgB,CAAC,GACjB,eAAkC,CAAC,GACnC,WAAmD,UAC7C;AACN,YAAU,OAAO,IAAI,WAAW,EAAE,OAAO,WAAW,MAAM,UAAU,WAAW,KAAK,cAAc,SAAS,CAAC;AAC9G;AAEO,SAAS,eAAe,WAA2B,WAAyB;AACjF,YAAU,OAAO,IAAI,SAAS;AAChC;AAMO,SAAS,oBAAoB,WAA2B,WAAmB,UAAwB;AACxG,MAAI,cAAc,kBAAmB,WAAU,UAAU,QAAQ;AAAA,WACxD,cAAc,sBAAuB,WAAU,UAAU,WAAW;AAAA,WACpE,cAAc,sBAAuB,WAAU,UAAU,YAAY;AAChF;AAEO,SAAS,gBAAgB,WAA2B,WAAmB,WAAyB;AACrG,MAAI,CAAC,UAAU,YAAY,IAAI,SAAS,EAAG,WAAU,YAAY,IAAI,WAAW,oBAAI,IAAI,CAAC;AACzF,YAAU,YAAY,IAAI,SAAS,EAAG,IAAI,SAAS;AACrD;;;AC3CA,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAGjB,SAAS,qBAAqB,OAAe,KAAe,cAAgD;AAC1G,QAAM,QAAuB,CAAC,EAAE,MAAM,OAAO,IAAI,UAAU,UAAU,YAAY,aAAa,KAAK,CAAC;AACpG,aAAW,WAAW,IAAK,OAAM,KAAK,EAAE,MAAM,SAAS,IAAI,SAAS,UAAU,OAAO,CAAC;AACtF,aAAW,OAAO,aAAc,OAAM,KAAK,EAAE,MAAM,IAAI,OAAO,IAAI,UAAU,UAAU,IAAI,UAAU,aAAa,KAAK,CAAC;AACvH,SAAO;AACT;AAEO,SAAS,sBAAsB,WAA0C;AAC9E,QAAM,SAAqC,CAAC;AAC5C,QAAM,aAA4C,CAAC;AACnD,YAAU,OAAO,QAAQ,CAAC,MAAM,cAAc;AAC5C,UAAM,eAAe,qBAAqB,KAAK,OAAO,KAAK,KAAK,KAAK,YAAY;AACjF,WAAO,SAAS,IAAI,EAAE,GAAG,MAAM,aAAa;AAC5C,eAAW,SAAS,IAAI;AAAA,EAC1B,CAAC;AACD,QAAM,SAAoC,CAAC;AAC3C,YAAU,OAAO,QAAQ,CAAC,MAAM,aAAa;AAAE,WAAO,QAAQ,IAAI;AAAA,EAAM,CAAC;AACzE,QAAM,cAAwC,CAAC;AAC/C,YAAU,YAAY,QAAQ,CAAC,QAAQ,cAAc;AAAE,gBAAY,SAAS,IAAI,MAAM,KAAK,MAAM;AAAA,EAAG,CAAC;AACrG,SAAO,EAAE,SAAS,GAAG,YAAW,oBAAI,KAAK,GAAE,YAAY,GAAG,QAAQ,QAAQ,MAAM,KAAK,UAAU,MAAM,GAAG,QAAQ,WAAW,UAAU,WAAW,YAAY,YAAY;AAC1K;AAEO,SAAS,mBAAmB,QAAgB,UAA+B;AAChF,QAAM,WAAWA,MAAK,KAAK,QAAQ,QAAQ;AAC3C,MAAI,CAACD,IAAG,WAAW,QAAQ,EAAG,CAAAA,IAAG,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AACxE,EAAAA,IAAG,cAAcC,MAAK,KAAK,UAAU,sBAAsB,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC/F,UAAQ,IAAI,4CAAuC,OAAO,KAAK,SAAS,MAAM,EAAE,MAAM,UAAU;AAClG;;;AC3BO,SAAS,qBAAqB,WAA2B;AAC9D,MAAI,cAAc,IAAK,QAAO;AAC9B,SAAO,UACJ,QAAQ,OAAO,EAAE,EACjB,QAAQ,oBAAoB,IAAI,EAChC,QAAQ,cAAc,IAAI,EAC1B,QAAQ,MAAM,EAAE,EAChB,QAAQ,OAAO,EAAE,EACjB,QAAQ,OAAO,GAAG,EAClB,YAAY;AACjB;AAEO,SAAS,aAAa,IAAY,QAAyB;AAChE,MAAI,CAAC,GAAG,SAAS,MAAM,EAAG,QAAO;AACjC,QAAM,eAAe,GAAG,QAAQ,QAAQ,EAAE,EAAE,QAAQ,OAAO,GAAG;AAC9D,SAAO,uBAAuB,KAAK,YAAY;AACjD;AAEO,SAAS,iBAAiB,IAAY,QAA+B;AAC1E,MAAI,CAAC,aAAa,IAAI,MAAM,EAAG,QAAO;AACtC,QAAM,eAAe,GAAG,QAAQ,QAAQ,EAAE,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,wBAAwB,EAAE;AAClG,MAAI,iBAAiB,MAAM,iBAAiB,IAAK,QAAO;AACxD,SAAO,aAAa,QAAQ,oBAAoB,KAAK,EAAE,QAAQ,cAAc,KAAK;AACpF;;;ACzBA,IAAM,WAAW,CAAC,IAAY,QAAgB,YAAoB;AAChE,MAAI,CAAC,GAAG,SAAS,MAAM,EAAG,QAAO;AACjC,SAAO,QAAQ,KAAK,GAAG,QAAQ,QAAQ,EAAE,EAAE,QAAQ,OAAO,GAAG,CAAC;AAChE;AAEA,IAAM,sBAAsB,CAAC,gBAAgC;AAC3D,MAAI,gBAAgB,WAAW,YAAY,WAAW,QAAQ,EAAG,QAAO,aAAa,WAAW;AAChG,MAAI,gBAAgB,YAAa,QAAO;AACxC,QAAM,SAAmC;AAAA,IACvC,aAAa,CAAC,aAAa,eAAe,cAAc,gBAAgB,QAAQ,0BAA0B;AAAA,IAC1G,gBAAgB,CAAC,mBAAmB,OAAO,OAAO,WAAW;AAAA,IAC7D,eAAe,CAAC,YAAY,SAAS,UAAU,OAAO;AAAA,IACtD,oBAAoB,CAAC,iBAAiB,QAAQ,WAAW,eAAe;AAAA,IACxE,gBAAgB,CAAC,WAAW,SAAS,UAAU,mBAAmB,KAAK;AAAA,EACzE;AACA,aAAW,CAAC,OAAO,IAAI,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,QAAI,KAAK,KAAK,SAAO,YAAY,WAAW,GAAG,CAAC,EAAG,QAAO;AAAA,EAC5D;AACA,SAAO,UAAU,WAAW;AAC9B;AAEO,SAAS,mBAAmB,QAAgB;AACjD,QAAM,UAAU,OAAO,QAAQ,OAAO,GAAG;AACzC,SAAO,CAAC,OAAe;AACrB,UAAM,SAAS,GAAG,QAAQ,OAAO,GAAG;AACpC,QAAI,OAAO,SAAS,wBAAwB,EAAG,QAAO;AACtD,QAAI,OAAO,SAAS,qBAAqB,EAAG,QAAO;AACnD,QAAI,OAAO,SAAS,wBAAwB,EAAG,QAAO;AAEtD,QAAI,SAAS,QAAQ,SAAS,wBAAwB,GAAG;AACvD,YAAM,MAAM,OAAO,QAAQ,SAAS,EAAE;AACtC,UAAI,QAAQ,iBAAiB,QAAQ,cAAe,QAAO;AAC3D,aAAO,WAAW,IAAI,QAAQ,0BAA0B,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,GAAG,KAAK,MAAM;AAAA,IAC9G;AACA,QAAI,SAAS,QAAQ,SAAS,0BAA0B,EAAG,QAAO;AAClE,QAAI,SAAS,QAAQ,SAAS,yBAAyB,EAAG,QAAO;AACjE,QAAI,SAAS,QAAQ,SAAS,uBAAuB,EAAG,QAAO;AAE/D,QAAI,aAAa,QAAQ,OAAO,GAAG;AACjC,YAAM,QAAQ,iBAAiB,QAAQ,OAAO;AAC9C,UAAI,MAAO,QAAO,SAAS,qBAAqB,KAAK,CAAC;AAAA,IACxD;AAEA,QAAI,OAAO,SAAS,cAAc,GAAG;AACnC,YAAM,QAAQ,OAAO,QAAQ,SAAS,EAAE,EAAE,MAAM,yBAAyB;AACzE,aAAO,QAAQ,cAAc,MAAM,CAAC,CAAC,KAAK;AAAA,IAC5C;AAEA,QAAI,OAAO,SAAS,SAAS,EAAG,QAAO;AACvC,QAAI,OAAO,SAAS,OAAO,KAAK,OAAO,SAAS,SAAS,KAAK,OAAO,SAAS,WAAW,EAAG,QAAO;AAEnG,QAAI,OAAO,SAAS,cAAc,GAAG;AACnC,YAAM,QAAQ,OAAO,MAAM,eAAe;AAC1C,YAAM,MAAM,MAAM,MAAM,SAAS,CAAC;AAClC,YAAM,UAAU,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;AAC9G,aAAO,oBAAoB,OAAO;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AACF;;;AVzCA,eAAsB,eAAoC;AACxD,QAAMC,cAAa,MAAM,gBAAgB;AACzC,QAAM,cAAc,UAAU;AAE9B,UAAQ,IAAI,qDAA8C;AAC1D,MAAI,OAAO,KAAKA,WAAU,EAAE,SAAS,GAAG;AACtC,YAAQ,IAAI,iCAA4B;AAAA,EAC1C;AAEA,QAAM,YAAYA,YAAW,OAAO,CAAC;AACrC,QAAM,iBAAiB,UAAU,aAAa,QAC1C,MAAM,qBAAqB,IAC3B,EAAE,UAAU,MAAM;AACtB,QAAM,gBAAgB,MAAM,oBAAoB;AAChD,QAAM,SAASC,MAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAChD,QAAM,WAAW,gBAAgB,MAAM;AAEvC,eAAa,gBAAgB,eAAe,SAAS,SAAS;AAE9D,MAAI,gBAAqB;AACzB,MAAI,UAAU,YAAY,SAAS,CAAC,cAAc,UAAU;AAC1D,oBAAgB,2BAA2B,cAAc;AAAA,EAC3D;AAEA,QAAM,SAAqB;AAAA,IACzB,OAAO;AAAA,MACL,QAAQ,YAAY;AAAA,MACpB,uBAAuB;AAAA,MACvB,eAAe;AAAA,MACf,eAAe;AAAA,QACb,OAAO;AAAA,QACP,QAAQ;AAAA,UACN,cAAc,mBAAmBA,MAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK,CAAC;AAAA,UACnE,gBAAgB,CAAC,cAAmB;AAClC,kBAAM,OAAO,UAAU,QAAQ;AAC/B,gBAAI,KAAK,WAAW,qBAAqB,EAAG,QAAO;AACnD,gBAAI,KAAK,WAAW,YAAY,KAAK,KAAK,WAAW,SAAS,EAAG,QAAO;AACxE,gBAAI,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,QAAQ,EAAG,QAAO;AACnE,mBAAO;AAAA,UACT;AAAA,UACA,gBAAgB;AAAA,UAChB,gBAAgB,CAAC,cAAmB;AAClC,kBAAM,WAAW,UAAU,QAAQ;AACnC,gBAAI,SAAS,SAAS,MAAM,GAAG;AAC7B,oBAAM,WAAW,SAAS,MAAM,GAAG,EAAE,IAAI,GAAG,QAAQ,QAAQ,EAAE,KAAK;AACnE,qBAAO,qBAAqB,QAAQ;AAAA,YACtC;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,MACR,eAAe,EAAE,UAAU,EAAE,cAAc,OAAO,eAAe,KAAK,EAAE;AAAA,MACxE,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACH,SAAS,UAAU,YAAY,QAAQ;AAAA,QACrC,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,MACtB,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,cAAc,UAAU,iBAAiB;AAAA,IAC3C;AAAA,IACA,SAAS,EAAE,OAAO,EAAE,KAAKA,MAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK,EAAE,EAAE;AAAA,IAC9D,GAAG,YAAY;AAAA,EACjB;AAEA,SAAO;AACT;;;AWzFA,OAAOC,YAAU;AACjB,OAAOC,SAAQ;;;ACDf,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAYV,SAAS,UACd,KACA,SACAC,aACA,QAAoB,CAAC,GACrB,UAA4B,EAAE,SAAS,CAAC,EAAE,GAC9B;AACZ,QAAM,QAAQF,IAAG,YAAY,GAAG;AAEhC,QAAM,iBAAmC;AAAA,IACvC,SAAS,CAAC,GAAG,QAAQ,OAAO;AAAA,IAC5B,SAAS,QAAQ;AAAA,IACjB,OAAO,QAAQ;AAAA,IACf,UAAU,QAAQ;AAAA,IAClB,UAAU,QAAQ;AAAA,EACpB;AAGA,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAWC,MAAK,KAAK,KAAK,IAAI,EAAE,QAAQ,OAAO,GAAG;AACxD,QAAI,SAAS,gBAAgB,SAAS,aAAc,gBAAe,QAAQ,KAAK,QAAQ;AACxF,QAAI,SAAS,iBAAiB,SAAS,cAAe,gBAAe,UAAU;AAC/E,QAAI,SAAS,eAAe,SAAS,YAAa,gBAAe,QAAQ;AACzE,QAAI,SAAS,mBAAmB,SAAS,gBAAiB,gBAAe,WAAW;AACpF,QAAI,SAAS,kBAAkB,SAAS,eAAgB,gBAAe,WAAW;AAAA,EACpF;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAWA,MAAK,KAAK,KAAK,IAAI;AACpC,UAAM,cAAcD,IAAG,SAAS,QAAQ,EAAE,YAAY;AAGtD,QAAI,eAAe,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAC7D,gBAAU,UAAU,SAASE,aAAY,OAAO,cAAc;AAC9D;AAAA,IACF;AAEA,QAAI,eAAe,SAAS,YAAY,SAAS,gBAAgB;AAC/D,gBAAU,UAAU,SAASA,aAAY,OAAO,cAAc;AAAA,IAChE,WAAW,SAAS,cAAc,SAAS,YAAY;AACrD,UAAI,eAAeD,MAAK,SAAS,SAAS,GAAG;AAG7C,qBAAe,aAAa,QAAQ,iBAAiB,EAAE;AAEvD,UAAI,YAAY,MAAM,aAAa,QAAQ,OAAO,GAAG;AACrD,kBAAY,UAAU,QAAQ,QAAQ,GAAG;AACzC,YAAM,YAAY,UAAU,SAAS,GAAG,KAAK,UAAU,SAAS,GAAG;AAEnE,UAAI,WAAW;AACb,oBAAY,UACT,QAAQ,uBAAuB,MAAM,EACrC,QAAQ,mBAAmB,KAAK,EAChC,QAAQ,cAAc,KAAK;AAAA,MAChC;AAEA,YAAM,YAAY,cAAc,MAAM,MAAM,UAAU,QAAQ,OAAO,EAAE;AACvE,YAAM,UAAUD,IAAG,aAAa,UAAU,OAAO;AACjD,YAAM,qBAAqB,QAAQ,UAAU,EAAE,WAAW,cAAc,KAC/C,QAAQ,UAAU,EAAE,WAAW,cAAc;AAGtE,YAAM,WAAW,CAAC,cAChB,sBACA,CAAC,CAACE,YAAW,KAAK;AAGpB,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,eAAe,SAAS,QAAQ,OAAO,GAAG;AAAA,QAC1C,aAAa,eAAe;AAAA,QAC5B,aAAa,eAAe;AAAA,QAC5B,WAAW,eAAe;AAAA,QAC1B,cAAc,eAAe;AAAA,QAC7B,cAAc,eAAe;AAAA,QAC7B;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;;;AC9FA,OAAOC,SAAQ;AACf,OAAOC,YAAU;;;ACDjB,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAO,YAAY;AAGnB,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,aAAa;AACnB,IAAM,aAAa;AAqCZ,SAAS,iBAAiB,UAA0B;AACzD,MAAI,CAACD,IAAG,WAAW,QAAQ,EAAG,QAAO;AACrC,QAAM,UAAUA,IAAG,aAAa,UAAU,OAAO;AACjD,SAAO,OAAO,WAAW,KAAK,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAC1E;AAKO,SAAS,kBAA0B;AACxC,SAAO,KAAK,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;AACxE;AAKO,SAAS,aAAa,SAAiB,OAAqC,cAAoB;AACrG,QAAM,WAAWC,MAAK,KAAK,SAAS,SAAS;AAC7C,QAAM,WAAWA,MAAK,KAAK,SAAS,SAAS;AAC7C,QAAM,aAAaA,MAAK,KAAK,SAAS,WAAW;AACjD,QAAM,YAAYA,MAAK,KAAK,SAAS,UAAU;AAC/C,QAAM,YAAYA,MAAK,KAAK,SAAS,UAAU;AAG/C,GAAC,UAAU,UAAU,YAAY,WAAW,SAAS,EAAE,QAAQ,SAAO;AACpE,QAAI,CAACD,IAAG,WAAW,GAAG,GAAG;AACvB,MAAAA,IAAG,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACvC;AAAA,EACF,CAAC;AAGD,QAAM,YAAuB;AAAA,IAC3B,SAAS;AAAA,IACT,SAAS,gBAAgB;AAAA,IACzB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC;AAAA,IACA,aAAa,QAAQ;AAAA,IACrB,cAAc;AAAA,EAChB;AACA,EAAAA,IAAG,cAAcC,MAAK,KAAK,UAAU,iBAAiB,GAAG,KAAK,UAAU,WAAW,MAAM,CAAC,CAAC;AAG3F,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACA,EAAAD,IAAG,cAAcC,MAAK,KAAK,UAAU,cAAc,GAAG,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAG1F,QAAM,cAAc;AAAA,IAClB,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,KAAK,CAAC;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAAA,IACA,OAAO,CAAC;AAAA,EACV;AACA,EAAAD,IAAG,cAAcC,MAAK,KAAK,UAAU,4BAA4B,GAAG,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAC1G;AAKO,SAAS,cAAc,SAAiB,UAAqC;AAClF,QAAM,YAAYA,MAAK,KAAK,SAAS,aAAa,GAAG,SAAS,QAAQ,OAAO,GAAG,CAAC,OAAO;AACxF,MAAID,IAAG,WAAW,SAAS,GAAG;AAC5B,QAAI;AACF,aAAO,KAAK,MAAMA,IAAG,aAAa,WAAW,OAAO,CAAC;AAAA,IACvD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,cAAc,SAAiB,UAAkB,MAAW,MAAoB;AAC9F,QAAM,YAAYC,MAAK,KAAK,SAAS,aAAa,GAAG,SAAS,QAAQ,OAAO,GAAG,KAAK,OAAO,OAAO;AACnG,QAAM,QAAoB;AAAA,IACxB;AAAA,IACA,WAAW,KAAK,IAAI;AAAA,IACpB;AAAA,EACF;AACA,EAAAD,IAAG,cAAc,WAAW,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC5D;AAKO,SAAS,cAAc,SAAiB,UAAqC;AAClF,QAAM,YAAYC,MAAK,KAAK,SAAS,YAAY,GAAG,SAAS,QAAQ,OAAO,GAAG,KAAK,OAAO,OAAO;AAClG,MAAID,IAAG,WAAW,SAAS,GAAG;AAC5B,QAAI;AACF,aAAO,KAAK,MAAMA,IAAG,aAAa,WAAW,OAAO,CAAC;AAAA,IACvD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,cAAc,SAAiB,UAAkB,MAAW,MAAoB;AAC9F,QAAM,YAAYC,MAAK,KAAK,SAAS,YAAY,GAAG,SAAS,QAAQ,OAAO,GAAG,KAAK,OAAO,OAAO;AAClG,QAAM,QAAoB;AAAA,IACxB;AAAA,IACA,WAAW,KAAK,IAAI;AAAA,IACpB;AAAA,EACF;AACA,EAAAD,IAAG,cAAc,WAAW,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC5D;AAKO,SAAS,aAAa,QAA2B,aAA8B;AACpF,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,OAAO,SAAS;AACzB;AAKO,SAAS,0BACd,SACA,OACmB;AACnB,QAAM,WAA8B;AAAA,IAClC,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,eAAe,CAAC;AAAA,EAClB;AAEA,aAAW,QAAQ,OAAO;AACxB,aAAS,OAAO,KAAK,IAAI,IAAI;AAAA,MAC3B,WAAW,KAAK,WAAW,QAAQ,KAAK,SAAS,MAAM,WAAW,KAAK,IAAI,UAAU;AAAA,MACrF,UAAU,KAAK;AAAA,MACf,SAAS,iBAAiB,KAAK,aAAa;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,eAAeC,MAAK,KAAK,SAAS,UAAU,yBAAyB;AAC3E,EAAAD,IAAG,cAAc,cAAc,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAEhE,SAAO;AACT;AAKO,SAAS,WAAW,SAAuB;AAChD,QAAM,WAAWC,MAAK,KAAK,SAAS,SAAS;AAC7C,MAAID,IAAG,WAAW,QAAQ,GAAG;AAC3B,IAAAA,IAAG,OAAO,UAAU,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACtD;AACA,eAAa,OAAO;AACtB;AAKO,SAAS,YAAY,QAA4B;AACtD,SAAO,KAAK,OAAO,KAAK,IAAI,IAAI,OAAO,aAAa,GAAI;AAC1D;;;ADlNO,SAAS,qBAAqB,SAAiB,QAAgB,OAAc;AAClF,eAAa,SAAS,aAAa;AAEnC,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO,MAAM,IAAI,QAAM;AAAA,MACrB,MAAM,EAAE;AAAA,MACR,eAAe,EAAE;AAAA,MACjB,UAAU,EAAE;AAAA,MACZ,WAAW,EAAE,aAAa;AAAA,IAC5B,EAAE;AAAA,IACF,cAAc,MAAM,OAAO,OAAK,EAAE,QAAQ,EAAE,IAAI,QAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAAA,IACvE,eAAe,MAAM,OAAO,OAAK,EAAE,SAAS,EAAE,IAAI,QAAM;AAAA,MACtD,MAAM,EAAE;AAAA,MACR,OAAO,EAAE,KAAK,QAAQ,SAAS,OAAO,EAAE,QAAQ,OAAO,IAAI;AAAA,IAC7D,EAAE;AAAA,EACJ;AAEA,QAAM,WAAWE,OAAK,KAAK,SAAS,QAAQ;AAC5C,EAAAC,IAAG,cAAcD,OAAK,KAAK,UAAU,sBAAsB,GAAG,KAAK,UAAU,gBAAgB,MAAM,CAAC,CAAC;AAErG,QAAM,mBAA6C,CAAC;AACpD,QAAM,QAAQ,OAAK;AACjB,qBAAiB,EAAE,IAAI,IAAI,CAAC,EAAE,cAAc,QAAQ,QAAQ,EAAE,EAAE,QAAQ,OAAO,GAAG,CAAC;AAAA,EACrF,CAAC;AACD,EAAAC,IAAG,cAAcD,OAAK,KAAK,UAAU,yBAAyB,GAAG,KAAK,UAAU,kBAAkB,MAAM,CAAC,CAAC;AAE1G,4BAA0B,SAAS,KAAK;AAC1C;;;AEjCO,SAAS,gBAAgB,OAAc;AAC5C,UAAQ,IAAI,qDAAgD;AAC5D,UAAQ,IAAI,oDAA+C;AAC3D,UAAQ,IAAI,yBAAyB;AACrC,UAAQ,IAAI,sNAAuC;AACnD,aAAW,QAAQ,OAAO;AACxB,QAAI,OAAO;AACX,QAAI,OAAO;AACX,QAAI,KAAK,UAAU;AACjB,aAAO;AACP,aAAO;AAAA,IACT;AACA,YAAQ,IAAI,YAAO,IAAI,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,QAAG;AAAA,EACvE;AACA,UAAQ,IAAI,sNAAuC;AACnD,UAAQ,IAAI,4EAAkE;AAChF;;;ACdO,SAAS,iBAAiB,UAAyB,UAAkB,IAAI,QAAgB,IAAI,qBAA8B,MAAc;AAC9I,MAAI,WAAW;AACf,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,OAAO;AAAA,IACX,aAAa,SAAS;AAAA,IACtB,UAAU,SAAS;AAAA,IACnB,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,EACnB;AAEA,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,IAAI,GAAG;AAClD,QAAI,QAAS,aAAY,mBAAmB,IAAI,cAAc,OAAO;AAAA;AAAA,EACvE;AAEA,MAAI,SAAS,WAAW;AACtB,gBAAY,mCAAmC,SAAS,SAAS;AAAA;AAAA,EACnE,WAAW,sBAAsB,WAAW,OAAO;AACjD,UAAM,eAAe,GAAG,OAAO,GAAG,UAAU,MAAM,KAAK,KAAK;AAC5D,gBAAY,mCAAmC,YAAY;AAAA;AAAA,EAC7D;AAEA,MAAI,SAAS,WAAW;AACtB,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,SAAS,SAAS,GAAG;AAChE,UAAI,QAAS,aAAY,0BAA0B,IAAI,cAAc,OAAO;AAAA;AAAA,IAC9E;AAAA,EACF;AAEA,MAAI,SAAS,SAAS;AACpB,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,SAAS,OAAO,GAAG;AAC9D,UAAI,QAAS,aAAY,2BAA2B,IAAI,cAAc,OAAO;AAAA;AAAA,IAC/E;AAAA,EACF;AAEA,SAAO;AACT;;;AC/BO,SAAS,cAAc,MAAuB;AACnD,SAAO,KAAK,UAAU,IAAI,EAAE,QAAQ,uBAAuB,CAAC,SAAS;AACnE,YAAQ,MAAM;AAAA,MACZ,KAAK;AAAK,eAAO;AAAA,MACjB,KAAK;AAAK,eAAO;AAAA,MACjB,KAAK;AAAK,eAAO;AAAA,MACjB,KAAK;AAAU,eAAO;AAAA,MACtB,KAAK;AAAU,eAAO;AAAA,MACtB;AAAS,eAAO;AAAA,IAClB;AAAA,EACF,CAAC;AACH;;;ACVO,SAAS,uBAAuB,MAA0B,SAAyB;AACxF,QAAM,OAAQ,KAAK,YAAY,CAAC;AAChC,QAAM,UAAoB,CAAC;AAE3B,UAAQ,KAAK,4FAA4F;AAEzG,QAAM,aAA0B;AAAA,IAC9B,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK,UAAU,CAAC;AAAA,MACxB,SAAS,KAAK,UAAU,MAAM,MAAM,KAAK,MAAM,QAAQ,YAAY,QAAQ;AAAA,MAC3E,UAAU,KAAK,YAAY;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,OAAO;AAAA,EACT;AACA,UAAQ,KAAK,sBAAsB,cAAc,WAAW,IAAI,CAAC,aAAa;AAE9E,QAAM,gBAA6B;AAAA,IACjC,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,OAAO,KAAK,SAAS;AAAA,MACrB,aAAa,KAAK,eAAe;AAAA,MACjC,UAAU,MAAM,QAAQ,KAAK,QAAQ,IAAI,KAAK,WAAW,CAAC;AAAA,MAC1D,QAAQ,KAAK,UAAU;AAAA,MACvB,WAAW,KAAK,aAAa;AAAA,MAC7B,IAAI,EAAE,MAAM,WAAW,QAAQ,SAAS,GAAK,KAAK,aAAwB,CAAC,EAAG;AAAA,MAC9E,SAAS,EAAE,MAAM,uBAAuB,GAAK,KAAK,WAAsB,CAAC,EAAG;AAAA,IAC9E;AAAA,IACA,OAAO;AAAA,EACT;AACA,UAAQ,KAAK,sBAAsB,cAAc,cAAc,IAAI,CAAC,aAAa;AAEjF,QAAM,YAAyB;AAAA,IAC7B,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,cAAc,MAAM,QAAQ,UAAU,MAAM,SAAS,MAAM,OAAO,MAAM,UAAU,KAAK;AAAA,IACvG,OAAO;AAAA,EACT;AACA,UAAQ,KAAK,sBAAsB,cAAc,UAAU,IAAI,CAAC,aAAa;AAE7E,QAAM,iBAA8B;AAAA,IAClC,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,MACJ,EAAE,YAAY,sBAAsB,SAAS,WAAW,MAAM,KAAK,SAAS,aAAa,aAAa,KAAK,eAAe,IAAI,KAAK,KAAK,MAAM;AAAA,MAC9I,EAAE,YAAY,sBAAsB,SAAS,kBAAkB,MAAM,SAAS,qBAAqB,kBAAkB,iBAAiB,MAAM;AAAA,IAC9I;AAAA,IACA,OAAO;AAAA,EACT;AACA,UAAQ,KAAK,sBAAsB,cAAc,eAAe,IAAI,CAAC,aAAa;AAElF,QAAM,cAA2B;AAAA,IAC/B,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,KAAK,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,WAAW,KAAK,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;AAAA,IACzF,OAAO;AAAA,EACT;AACA,UAAQ,KAAK,sBAAsB,cAAc,YAAY,IAAI,CAAC,aAAa;AAE/E,QAAM,aAA0B;AAAA,IAC9B,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,aAAa,CAAC,sBAAsB,GAAG,YAAY,CAAC,8BAA8B,GAAG,gBAAgB,KAAK,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE;AAAA,IAC5I,OAAO;AAAA,EACT;AACA,UAAQ,KAAK,sBAAsB,cAAc,WAAW,IAAI,CAAC,aAAa;AAE9E,QAAM,aAA0B;AAAA,IAC9B,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,EAAE,UAAU,OAAO,WAAW,OAAO,OAAO,MAAM,WAAW,KAAK,IAAI,GAAG,SAAS,SAAS,QAAiB;AAAA,IAClH,OAAO;AAAA,EACT;AACA,UAAQ,KAAK,sBAAsB,cAAc,WAAW,IAAI,CAAC,aAAa;AAC9E,UAAQ,KAAK,oCAAoC;AAEjD,QAAM,gBAAgB,EAAE,QAAQ,WAAW,MAAM,OAAO,cAAc,MAAM,OAAO,UAAU,MAAM,SAAS,eAAe,MAAM,SAAS,YAAY,MAAM,QAAQ,WAAW,MAAM,QAAQ,WAAW,MAAM,QAAQ,EAAE,IAAI,SAAS,SAAS,SAAS,WAAW,KAAK,IAAI,GAAG,KAAK,aAAa,EAAE;AAClS,UAAQ,KAAK,kBAAkB,cAAc,aAAa,CAAC,WAAW;AAEtE,SAAO,QAAQ,KAAK,EAAE;AACxB;AAKO,SAAS,eAAe,MAAkC;AAC/D,QAAM,OAAQ,KAAK,YAAY,CAAC;AAChC,QAAM,SAAS;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,MACR,EAAE,SAAS,WAAW,OAAO,KAAK,OAAO,MAAM,KAAK,SAAS,aAAa,aAAa,KAAK,eAAe,IAAI,KAAK,KAAK,OAAO,UAAU,EAAE,SAAS,WAAW,MAAM,YAAY,EAAE;AAAA,MACpL,EAAE,SAAS,kBAAkB,iBAAiB,KAAK,MAAM,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,SAAS,OAAO,SAAS,EAAE,SAAS,YAAY,UAAU,QAAQ,GAAG,MAAM,QAAQ,OAAO,CAAC,EAAE,YAAY,IAAI,QAAQ,MAAM,CAAC,GAAG,MAAM,MAAM,IAAI,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE;AAAA,IAC5Q;AAAA,EACF;AACA,MAAI,KAAK,QAAQ;AACf,UAAM,UAAU,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,SAAS,CAAC,KAAK,MAAM;AACvE,IAAC,OAAO,QAAQ,EAAY,KAAK,GAAG,OAAO;AAAA,EAC7C;AACA,SAAO,sCAAsC,KAAK,UAAU,MAAM,CAAC;AACrE;;;ACjHO,SAAS,oBACd,SACA,UACA,UACA,eACA,SACA;AACA,QAAM,gBAAoC;AAAA,IACxC,OAAO,eAAe,SAAS;AAAA,IAC/B,UAAU;AAAA,MACR,OAAO,UAAU;AAAA,MACjB,aAAa,UAAU;AAAA,MACvB,UAAU,UAAU;AAAA,MACpB,QAAQ,UAAU;AAAA,MAClB,WAAW,UAAU;AAAA,MACrB,WAAW,UAAU;AAAA,MACrB,SAAS,UAAU;AAAA,MACnB,QAAQ,UAAU;AAAA,IACpB;AAAA,IACA,QAAQ,eAAe,UAAU,CAAC;AAAA,IAClC,QAAQ,CAAC;AAAA,IACT,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;AAAA,EAC5B;AAEA,QAAM,kBAAkB,uBAAuB,eAAe,OAAO;AACrE,QAAM,eAAe,eAAe,aAAa;AAEjD,QAAM,YAAY;AAAA,IAChB,OAAO,EAAE,WAAW,YAAY,CAAC,EAAE;AAAA,IACnC,MAAM,eAAe,SAAS;AAAA,IAC9B,OAAO,CAAC;AAAA,IACR;AAAA,IACA,QAAQ,iBAAiB;AAAA,IACzB,eAAe,CAAC;AAAA,IAChB,YAAY;AAAA,IACZ,KAAK,CAAC,CAAC;AAAA,IACP,MAAM;AAAA,EACR;AAEA,QAAM,kBAAkB,uDACtB,KAAK,UAAU,SAAS,EACrB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,CAC5B;AAEA,SAAO,EAAE,iBAAiB,cAAc,gBAAgB;AAC1D;;;AClDO,SAAS,oBAAoB,UAAqC,WAAmB,YAAoB,UAA4B;AAC1I,MAAI,cAAc;AAClB,MAAI,UAAU;AACZ,UAAM,kBAAkB,CAAC,SAAS,UAAU,OAAO,SAAS,UAAU,UAAU,SAAS,UAAU,SAAS,EAAE,OAAO,OAAO;AAC5H,eAAW,SAAS,gBAAiB,gBAAe,wCAAwC,KAAK;AAAA;AACjG,UAAM,aAAa,SAAS,OAAO,SAAS;AAC5C,QAAI,YAAY;AACd,qBAAe,wCAAwC,WAAW,KAAK;AAAA;AACvE,iBAAW,OAAO,WAAW,IAAK,gBAAe,kCAAkC,GAAG;AAAA;AACtF,iBAAW,OAAO,WAAW,cAAc;AACzC,YAAI,IAAI,aAAa,cAAc,IAAI,aAAa,OAAQ,gBAAe,wCAAwC,IAAI,KAAK;AAAA;AAAA,MAC9H;AAAA,IACF;AAAA,EACF,OAAO;AACL,QAAI,WAAY,gBAAe,uCAAuC,UAAU;AAAA;AAChF,aAAS,QAAQ,UAAQ;AAAE,qBAAe,iCAAiC,IAAI;AAAA;AAAA,IAAqB,CAAC;AAAA,EACvG;AACA,SAAO;AACT;;;AClBO,SAAS,uBAAuB,UAA6C;AAClF,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,eAAe,KAAK,UAAU;AAAA,IAClC,QAAQ,OAAO,YAAY,OAAO,QAAQ,SAAS,MAAM,EAAE,IAAI,CAAC,CAACE,QAAM,KAAK,MAAM,CAACA,QAAM,EAAE,OAAO,MAAM,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC;AAAA,IACjI,WAAW,SAAS;AAAA,EACtB,CAAC;AACD,SAAO;AAAA;AAAA;AAAA,gBAGO,YAAY;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;AAwC5B;;;ACvCO,SAAS,qBACd,SACA,YACA,WAAqB,CAAC,GACtB,UACA,UACA,eACA,aACA,eACA;AACA,QAAM,UAAU,KAAK,IAAI,EAAE,SAAS,EAAE;AACtC,QAAM,UAAU,aAAa,WAAW;AACxC,QAAM,QAAQ,eAAe,SAAS;AAEtC,QAAM,WAAW,iBAAiB,UAAU,SAAS,OAAO,aAAa,KAAK,cAAc,KAAK;AACjG,QAAM,EAAE,iBAAiB,cAAc,gBAAgB,IAAI,oBAAoB,SAAS,UAAU,UAAU,eAAe,OAAO;AAClI,QAAM,cAAc,oBAAoB,eAAe,UAAU,eAAe,aAAa,KAAK,YAAY,QAAQ;AAEtH,QAAM,cAAc,SAAS,SAAS,IAClC,SAAS,IAAI,UAAQ,oCAAoC,IAAI,MAAM,EAAE,KAAK,IAAI,IAC9E;AAEJ,QAAM,iBAAiB,eAAe,uBAAuB,uBAAuB,cAAc,QAAQ,IAAI;AAE9G,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,aAKI,UAAU,SAAS,WAAW;AAAA,EACzC,QAAQ,GAAG,WAAW,GAAG,cAAc,cAAc,OAAO,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA,qBAG9D,OAAO;AAAA,MACtB,eAAe;AAAA,MACf,eAAe;AAAA,iCACY,UAAU,cAAc,cAAc;AAAA;AAAA;AAGvE;;;AC7CO,SAAS,oBAAoB,QAAuB,QAAgB,YAA8B;AACvG,SAAO,OAAO,KAAU,KAAU,SAAc;AAC9C,UAAM,MAAM,IAAI,OAAO;AACvB,UAAM,aAAa,IAAI,SAAS,GAAG,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,KAAK,KAAK,IAAI,WAAW,eAAe,KAAK,IAAI,SAAS,UAAU,KAAK,IAAI,WAAW,MAAM,KAAK,IAAI,WAAW;AAEjM,QAAI,WAAY,QAAO,KAAK;AAE5B,UAAM,UAAU,IAAI,MAAM,GAAG,EAAE,CAAC;AAChC,UAAM,iBAAiB,YAAY,MAAM,MAAM,QAAQ,QAAQ,OAAO,EAAE;AACxE,UAAM,OAAO,WAAW,IAAI,cAAc;AAG1C,UAAM,QAAQ,MAAM,OAAO,OAAO;AAElC,QAAI,UAAU;AACd,QAAI;AAEJ,QAAI,MAAM;AACR,UAAI;AACF,cAAM,aAAa,MAAM,OAAO,cAAc,KAAK,aAAa;AAChE,uBAAgB,WAAW,YAAY,WAAW,QAAQ;AAG1D,cAAM,gBAAgB,MAAM,QAAQ;AAAA,WACjC,KAAK,eAAe,CAAC,GAAG,IAAI,CAAC,OAAe,OAAO,cAAc,EAAE,CAAC;AAAA,QACvE;AACA,cAAM,UAAU,cAAc,IAAI,OAAK,EAAE,OAAO;AAEhD,YAAI,KAAK,UAAU;AACjB,gBAAM,EAAE,eAAe,IAAI,MAAM,OAAO,kBAAkB;AAC1D,gBAAM,OAAO,WAAW;AAExB,cAAI,cAAmB,MAAM,cAAc,MAAM,IAAI;AAErD,mBAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,0BAAc,MAAM,cAAc,QAAQ,CAAC,GAAG,EAAE,UAAU,YAAY,CAAC;AAAA,UACzE;AAEA,oBAAU,eAAe,WAAW;AACpC,kBAAQ,IAAI,+BAA0B,cAAc,EAAE;AAAA,QACxD;AAAA,MACF,SAAS,KAAU;AACjB,YAAI,KAAK,SAAU,SAAQ,MAAM,sCAAiC,cAAc,KAAK,IAAI,OAAO,EAAE;AAAA,MACpG;AAAA,IACF;AAEA,UAAM,OAAO,qBAAqB,SAAS,yBAAyB,CAAC,GAAG,QAAW,YAAY;AAC/F,QAAI,UAAU,gBAAgB,WAAW;AACzC,WAAO,mBAAmB,KAAK,IAAI,EAAE,KAAK,qBAAmB,IAAI,IAAI,eAAe,CAAC,EAAE,MAAM,IAAI;AAAA,EACnG;AACF;;;AZ/CO,SAAS,sBAAsB,QAAuB;AAC3D,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,SAASC,OAAK,QAAQ,SAAS,KAAK;AAC1C,QAAMC,cAAa,cAAc;AACjC,QAAM,QAAQ,UAAU,QAAQ,QAAQA,WAAU;AAElD,uBAAqB,SAAS,QAAQ,KAAK;AAC3C,kBAAgB,KAAK;AAErB,QAAM,aAAa,IAAI,IAAI,MAAM,IAAI,OAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACtD,SAAO,YAAY,IAAI,oBAAoB,QAAQ,QAAQ,UAAU,CAAC;AACxE;AAEO,SAAS,6BAA6B,QAAuB;AAClE,SAAO,YAAY,IAAI,CAAC,KAAK,KAAK,SAAS;AACzC,UAAM,MAAM,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC;AACjC,QAAI,CAAC,OAAO,QAAQ,OAAO,IAAI,SAAS,GAAG,EAAG,QAAO,KAAK;AAE1D,UAAM,SAAS,UAAU;AACzB,UAAM,UAAU,QAAQ,IAAI;AAC5B,UAAM,SAASD,OAAK,QAAQ,SAAS,OAAO,UAAU,aAAa;AAEnE,QAAI;AACF,YAAM,YAAYA,OAAK,KAAK,QAAQ,KAAK,YAAY;AACrD,UAAIE,IAAG,WAAW,SAAS,GAAG;AAC5B,YAAI,MAAM,MAAM;AAChB,eAAO,KAAK;AAAA,MACd;AACA,YAAM,WAAWF,OAAK,KAAK,QAAQ,MAAM,OAAO;AAChD,UAAIE,IAAG,WAAW,QAAQ,GAAG;AAC3B,YAAI,MAAM,MAAM;AAChB,eAAO,KAAK;AAAA,MACd;AAAA,IACF,SAAS,GAAG;AAAA,IAAC;AACb,SAAK;AAAA,EACP,CAAC;AACH;;;Aa7CA,OAAOC,YAAU;;;ACAV,IAAM,sBAAsB;AAAA,EACjC,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,2BAA2B;AAAA,EAC3B,4BAA4B;AAAA,EAC5B,+BAA+B;AAAA,EAC/B,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,eAAe;AACjB;AAIO,IAAM,oBAAoB;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADVjC,IAAM,kBAAkB;AACxB,IAAM,0BAA0B,OAAO;AACvC,IAAM,iBAAiB;AACvB,IAAM,yBAAyB,OAAO;AAE/B,SAAS,gBAAgB,IAAY;AAC1C,MAAI,OAAO,gBAAiB,QAAO;AACnC,MAAI,OAAO,kBAAkB,OAAO,wBAAyB,QAAO;AACpE,SAAO;AACT;AAEO,SAAS,WAAW,IAAY;AACrC,MAAI,OAAO,uBAAwB,QAAO;AAE1C,MAAI,OAAO,yBAAyB;AAClC,UAAM,SAASC,OAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAChD,UAAMC,cAAa,cAAc;AACjC,UAAM,QAAQ,UAAU,QAAQ,QAAQA,WAAU;AAClD,UAAM,aAAa,MAAM,IAAI,CAAC,MAAM;AAClC,YAAM,aAAa,EAAE,cAAc,QAAQ,OAAO,GAAG;AACrD,YAAM,UAAU,EAAE,YAAY,IAAI,QAAM,iBAAiB,GAAG,QAAQ,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI;AAE9F,UAAI,QAAQ;AACZ,UAAI,EAAE,YAAa,UAAS,4BAA4B,EAAE,YAAY,QAAQ,OAAO,GAAG,CAAC;AACzF,UAAI,EAAE,UAAW,UAAS,0BAA0B,EAAE,UAAU,QAAQ,OAAO,GAAG,CAAC;AACnF,UAAI,EAAE,aAAc,UAAS,6BAA6B,EAAE,aAAa,QAAQ,OAAO,GAAG,CAAC;AAC5F,UAAI,EAAE,aAAc,UAAS,6BAA6B,EAAE,aAAa,QAAQ,OAAO,GAAG,CAAC;AAE5F,aAAO;AAAA,aACA,EAAE,IAAI;AAAA,+BACY,UAAU;AAAA,gBACzB,OAAO;AAAA,cACT,EAAE,QAAQ;AAAA,eACT,EAAE,aAAa,KAAK,GAAG,KAAK;AAAA;AAAA,IAEvC,CAAC,EAAE,KAAK,OAAO;AACf,WAAO;AAAA,IAA8B,UAAU;AAAA;AAAA,EACjD;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,MAAc;AAC5C,MAAI,KAAK,SAAS,cAAc,KAAK,KAAK,SAAS,cAAc,GAAG;AAClE,WAAO,KAAK,QAAQ,wBAAwB,EAAE;AAAA,EAChD;AACA,SAAO;AACT;;;AEnDA,OAAOC,YAAU;;;ACAjB,OAAOC,SAAQ;AACf,OAAOC,YAAU;AAGV,SAAS,gBAAgB,QAAgB;AAC9C,MAAI,UAAU;AACd,QAAM,aAAa,eAAe,MAAM;AACxC,QAAM,YAAYC,OAAK,KAAK,QAAQ,UAAU,UAAU,QAAQ;AAChE,MAAIC,IAAG,WAAW,SAAS,GAAG;AAC5B,UAAM,SAASA,IAAG,YAAY,SAAS;AACvC,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,WAAW,MAAM,KAAK,MAAM,SAAS,KAAK,GAAG;AACrD,kBAAU,2BAA2B;AACrC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,SAAS,WAAW;AAC/B;;;AClBA,OAAOC,UAAQ;AACf,OAAOC,YAAU;AAGV,SAAS,iBAAiB,QAAgB,OAAmB,SAAiB,KAAU;AAC7F,MAAI,CAAC,QAAS;AAEd,MAAI,KAAK,YAAY,OAAO;AAC1B,UAAM,UAAU;AAAA;AAAA,EAElB,MAAM,IAAI,UAAQ;AAAA,WACT,OAAO,GAAG,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,gBACxC,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA;AAAA,gBAErC,KAAK,SAAS,MAAM,QAAQ,KAAK;AAAA,SACxC,EAAE,KAAK,IAAI,CAAC;AAAA;AAEjB,IAAAD,KAAG,cAAcC,OAAK,KAAK,QAAQ,aAAa,GAAG,OAAO;AAAA,EAC5D;AAEA,MAAI,KAAK,WAAW,OAAO;AACzB,QAAI,UAAW,OAAO,KAAK,WAAW,YAAY,IAAI,OAAO,QACzD,IAAI,OAAO,QACX;AAAA;AAAA;AAAA,WAAuC,OAAO;AAElD,QAAI,OAAO,KAAK,WAAW,YAAY,IAAI,OAAO,UAAU;AAC1D,UAAI,OAAO,SAAS,QAAQ,CAAC,MAAc;AAAE,mBAAW;AAAA,WAAc,CAAC;AAAA,MAAI,CAAC;AAAA,IAC9E;AACA,IAAAD,KAAG,cAAcC,OAAK,KAAK,QAAQ,YAAY,GAAG,OAAO;AAAA,EAC3D;AACF;;;AC9BA,OAAOC,UAAQ;AACf,OAAOC,YAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,SAAS,iBAAiB;AAEnC,eAAsB,iBAAiB,SAAiB,QAAgB,MAAW;AACjF,QAAM,aAAaD,OAAK,KAAK,SAAS,YAAY;AAClD,MAAI,CAACD,KAAG,WAAW,UAAU,EAAG,CAAAA,KAAG,UAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAE5E,QAAM,UAAUC,OAAK,KAAK,YAAY,cAAc;AACpD,MAAI,CAACD,KAAG,WAAW,OAAO,EAAG,CAAAA,KAAG,cAAc,SAAS,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC,CAAC;AAEzF,QAAM,aAAaA,KAAG,WAAWC,OAAK,KAAK,QAAQ,YAAY,CAAC,IAAIA,OAAK,KAAK,QAAQ,YAAY,IAAKD,KAAG,WAAWC,OAAK,KAAK,QAAQ,YAAY,CAAC,IAAIA,OAAK,KAAK,QAAQ,YAAY,IAAI;AAC1L,QAAM,eAAe,aAAa,uBAAuB,WAAW,QAAQ,OAAO,GAAG,CAAC,OAAO;AAC9F,QAAM,cAAc,aAAa,CAAC,YAAY,WAAW,IAAI,CAAC,MAAM,KAAK;AAEzE,QAAM,YAAYA,OAAK,KAAK,YAAY,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC,MAAM;AAC9F,QAAM,UAAU;AAAA;AAAA,EAAmF,YAAY;AAAA,oBAAuB,KAAK,cAAc,QAAQ,OAAO,GAAG,CAAC;AAAA,2DAAgE,YAAY,CAAC,CAAC,WAAW,YAAY,CAAC,CAAC;AACnR,EAAAD,KAAG,cAAc,WAAW,OAAO;AAEnC,MAAI;AACF,UAAM,UAAU;AAAA,MACd,YAAY;AAAA,MAAO,MAAM;AAAA,MAAS,OAAO,EAAE,KAAK,MAAM,OAAO,MAAM,QAAQ,YAAY,aAAa,OAAO,eAAe,EAAE,OAAO,WAAW,QAAQ,EAAE,QAAQ,OAAO,gBAAgB,YAAY,GAAG,QAAQ,CAAC,GAAG,MAAM;AAAE,YAAI,EAAE,SAAS,yBAA0B,GAAE,CAAC;AAAA,MAAG,EAAE,EAAE;AAAA,MAC7Q,SAAS,CAAC,EAAE,MAAM,wBAAwB,WAAW,CAAC,MAAM,EAAE,QAAQ,wBAAwB,EAAE,EAAE,CAAC;AAAA,MACnG,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,YAAY,UAAU,QAAQ,QAAQ,KAAK;AACjD,QAAIA,KAAG,WAAW,SAAS,GAAG;AAC5B,YAAM,MAAM,MAAM,OAAOE,eAAc,SAAS,EAAE;AAClD,aAAO,EAAE,SAAS,IAAI,QAAQ,GAAG,UAAU,IAAI,SAAS;AAAA,IAC1D;AACA,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C,UAAE;AACA,QAAIF,KAAG,WAAW,SAAS,EAAG,CAAAA,KAAG,WAAW,SAAS;AACrD,UAAM,YAAY,UAAU,QAAQ,QAAQ,KAAK;AACjD,QAAIA,KAAG,WAAW,SAAS,EAAG,CAAAA,KAAG,WAAW,SAAS;AAAA,EACvD;AACF;;;ACtCA,OAAOG,UAAQ;AACf,OAAOC,YAAU;AAQjB,eAAsB,OAAO,SAAiB,OAAc,aAAkB;AAC5E,eAAa,OAAO;AACpB,UAAQ,IAAI,iCAA0B;AACtC,QAAM,SAASC,OAAK,QAAQ,SAAS,YAAY,UAAU,aAAa;AACxE,QAAM,SAASA,OAAK,QAAQ,SAAS,KAAK;AAC1C,QAAM,EAAE,SAAS,WAAW,IAAI,gBAAgB,MAAM;AACtD,QAAM,EAAE,OAAO,IAAI,MAAM,OAAO,sBAAsB;AAEtD,QAAM,YAAYA,OAAK,KAAK,QAAQ,KAAK;AACzC,MAAIC,KAAG,WAAW,SAAS,EAAG,CAAAA,KAAG,OAAO,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAEnF,MAAI,CAACA,KAAG,WAAW,MAAM,EAAG,CAAAA,KAAG,UAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AACpE,EAAAA,KAAG,cAAcD,OAAK,KAAK,QAAQ,yBAAyB,GAAG,KAAK,UAAU,0BAA0B,SAAS,KAAK,GAAG,MAAM,CAAC,CAAC;AAEjI,aAAW,QAAQ,OAAO;AACxB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,WAAW,KAAK,SAAS,MAAMA,OAAK,KAAK,QAAQ,YAAY,IAAIA,OAAK,KAAK,QAAQ,KAAK,MAAM,YAAY;AAChH,QAAI,KAAK,SAAS,OAAO,CAACC,KAAG,WAAWD,OAAK,QAAQ,QAAQ,CAAC,EAAG,CAAAC,KAAG,UAAUD,OAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAEzH,QAAI,UAAU,IAAI,WAAW;AAC7B,QAAI,KAAK,UAAU;AACjB,UAAI;AACF,cAAM,SAAS,MAAM,iBAAiB,SAAS,QAAQ,IAAI;AAC3D,kBAAU,OAAO;AAAS,mBAAW,OAAO;AAC5C,gBAAQ,IAAI,+BAA0B,KAAK,IAAI,aAAa,KAAK,IAAI,IAAI,SAAS,YAAY;AAAA,MAChG,SAAS,KAAU;AAAE,gBAAQ,MAAM,sCAAiC,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE;AAAA,MAAG;AAAA,IACpG;AAEA,UAAM,WAAW,qBAAqB,SAAS,SAAS,YAAY,QAAW,UAAU,EAAE,OAAO,KAAK,MAAM,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW;AAC5I,IAAAC,KAAG,cAAc,UAAU,MAAM,OAAO,UAAU,mBAAmB,CAAC;AAAA,EACxE;AAEA,QAAM,gBAAgB;AAAA,IACpB,SAAS,KAAK,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpE,OAAO,MAAM,IAAI,QAAM,EAAE,MAAM,EAAE,MAAM,UAAU,EAAE,SAAS,EAAE;AAAA,IAC9D,QAAQ,EAAE,MAAM,SAAS,KAAK,WAAW;AAAA,EAC3C;AACA,EAAAA,KAAG,cAAcD,OAAK,KAAK,QAAQ,qBAAqB,GAAG,KAAK,UAAU,eAAe,MAAM,CAAC,CAAC;AAEjG,mBAAiB,QAAQ,OAAO,aAAa,SAAS,aAAa,GAAG;AACtE,UAAQ,IAAI;AAAA;AAAA,CAAuB;AACrC;;;AC3CO,SAAS,uBAAuB,QAAa,gBAAgC;AAClF,QAAM,WAAW,oBAAI,IAAoB;AAEzC,aAAW,CAAC,UAAU,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACtD,QAAK,MAAc,SAAS,WAAW,SAAS,SAAS,MAAM,GAAG;AAChE,YAAM,OAAQ,MAAc,QAAQ;AACpC,eAAS,IAAI,MAAM,QAAQ;AAAA,IAC7B;AAEA,QAAK,MAAc,SAAS,SAAS;AACnC,YAAM,QAAQ;AACd,YAAM,OAAO,MAAM,QAAQ;AAE3B,UAAI,CAAC,mBAAmB,uBAAuB,qBAAqB,EAAE,SAAS,IAAI,GAAG;AACpF,4BAAoB,gBAAgB,MAAa,QAAQ;AAAA,MAC3D;AAEA,UAAI,KAAK,WAAW,YAAY,KAAK,KAAK,WAAW,SAAS,GAAG;AAC/D,uBAAe,gBAAgB,QAAQ;AACvC,wBAAgB,gBAAgB,KAAK,WAAW,YAAY,IAAI,cAAc,UAAU,QAAQ;AAAA,MAClG;AAEA,YAAM,aAAa,CAAC,WAAW,cAAc,QAAQ;AACrD,iBAAW,OAAO,YAAY;AAC5B,YAAI,KAAK,WAAW,GAAG,GAAG,GAAG,EAAG,iBAAgB,gBAAgB,KAAK,QAAQ;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AC7BO,SAAS,kBAAkB,OAAc,QAAa,gBAAgC,UAA+B;AAC1H,aAAW,QAAQ,OAAO;AACxB,UAAM,YAAY,SAAS,qBAAqB,KAAK,IAAI,CAAC;AAE1D,eAAW,CAAC,UAAU,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACtD,UAAK,MAAc,SAAS,WAAY,MAAc,SAAS,WAAW;AACxE,cAAM,eAAkC,CAAC;AAEzC,YAAI,eAAe,UAAU,MAAO,cAAa,KAAK,EAAE,OAAO,eAAe,UAAU,OAAO,UAAU,WAAW,CAAC;AACrH,YAAI,eAAe,UAAU,SAAU,cAAa,KAAK,EAAE,OAAO,eAAe,UAAU,UAAU,UAAU,WAAW,CAAC;AAE3H,cAAM,eAAe,eAAe,YAAY,IAAI,SAAS;AAC7D,YAAI,cAAc;AAChB,qBAAW,eAAe,aAAc,cAAa,KAAK,EAAE,OAAO,aAAa,UAAU,OAAO,CAAC;AAAA,QACpG;AAEA,cAAM,WAAqB,CAAC;AAC5B,mBAAW,CAAC,GAAG,OAAO,KAAK,UAAU;AACnC,cAAI,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,OAAO,KAAK,QAAQ,SAAS,MAAM,EAAG,UAAS,KAAK,OAAO;AAAA,QAC7G;AAEA;AAAA,UACE;AAAA,UACA,KAAK;AAAA,UACL;AAAA,WACE,MAAc,QAAQ,IAAI;AAAA,UAC5B,KAAK,YAAY;AAAA,UACjB,KAAK,aAAa;AAAA,UAClB;AAAA,UACA;AAAA,UACA,KAAK,SAAS,MAAM,SAAS;AAAA,QAC/B;AAEA,wBAAgB,gBAAgB,SAAS,QAAQ;AACjD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ANjCO,SAAS,qBAAqB,QAAa,SAAkB;AAClE,aAAW,YAAY,OAAO,KAAK,MAAM,GAAG;AAC1C,QAAI,SAAS,WAAW,MAAM,EAAG,QAAO,OAAO,QAAQ;AAAA,EACzD;AAEA,MAAI,CAAC,QAAS,QAAO,qBAAqB;AAE1C,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,SAASE,OAAK,QAAQ,SAAS,KAAK;AAC1C,QAAMC,cAAa,cAAc;AACjC,QAAM,QAAQ,UAAU,QAAQ,QAAQA,WAAU;AAClD,QAAM,iBAAiB,qBAAqB;AAE5C,QAAM,WAAW,uBAAuB,QAAQ,cAAc;AAC9D,oBAAkB,OAAO,QAAQ,gBAAgB,QAAQ;AAEzD,SAAO;AACT;AAEA,eAAsB,kBAAkB,SAAkB,gBAAgC;AACxF,MAAI,CAAC,QAAS;AAEd,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,SAASD,OAAK,QAAQ,SAAS,KAAK;AAC1C,QAAMC,cAAa,cAAc;AACjC,QAAM,QAAQ,UAAU,QAAQ,QAAQA,WAAU;AAClD,QAAM,cAAc,UAAU;AAE9B,QAAM,WAAW,sBAAsB,cAAc;AACrD,QAAM,SAASD,OAAK,QAAQ,SAAS,YAAY,UAAU,aAAa;AACxE,qBAAmB,QAAQ,QAAQ;AAEnC,QAAM,OAAO,SAAS,OAAO,WAAW;AAC1C;;;AOhCO,SAAS,QAAgB;AAC9B,MAAI,UAAU;AACd,MAAI,iBAAiC,qBAAqB;AAE1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,MAAM,aAAa;AAAA,IAC3B,eAAe,QAAQ;AACrB,gBAAU,OAAO,YAAY;AAAA,IAC/B;AAAA,IACA,iBAAiB,CAAC,WAAW,sBAAsB,MAAM;AAAA,IACzD,WAAW,CAAC,OAAO,gBAAgB,EAAE;AAAA,IACrC,MAAM,CAAC,OAAO,WAAW,EAAE;AAAA,IAC3B,WAAW,CAAC,SAAS,gBAAgB,IAAI;AAAA,IACzC,eAAe,GAAG,QAAQ;AACxB,uBAAiB,qBAAqB,QAAQ,OAAO;AAAA,IACvD;AAAA,IACA,wBAAwB,CAAC,WAAW,6BAA6B,MAAM;AAAA,IACvE,aAAa,MAAM,kBAAkB,SAAS,cAAc;AAAA,EAC9D;AACF;;;ACzBA,IAAO,iBAAQ;","names":["path","require","fs","path","fs","path","path","path","fs","path","userConfig","path","path","fs","fs","path","userConfig","fs","path","fs","path","path","fs","path","path","userConfig","fs","path","path","userConfig","path","fs","path","path","fs","fs","path","fs","path","pathToFileURL","fs","path","path","fs","path","userConfig"]}
@@ -1,122 +0,0 @@
1
- /**
2
- * Flight Payload - The wire format for transferring component trees
3
- */
4
- interface FlightPayload {
5
- v: number;
6
- ts: number;
7
- route: string;
8
- tree: FlightNode[];
9
- data: Record<string, any>;
10
- chunks: FlightChunk[];
11
- hints: HydrationHint[];
12
- styles: string[];
13
- meta?: FlightMeta;
14
- seo?: FlightSEO;
15
- islands?: HydrationIsland[];
16
- criticalCss?: string;
17
- resourceHints?: ResourceHint[];
18
- build?: {
19
- id: string;
20
- time: number;
21
- };
22
- }
23
- interface FlightNode {
24
- id: string;
25
- type: string | number;
26
- props: Record<string, any>;
27
- children: string[];
28
- hydrate: boolean;
29
- suspense?: boolean;
30
- error?: boolean;
31
- }
32
- interface FlightChunk {
33
- id: string;
34
- html: string;
35
- ready: boolean;
36
- data?: any;
37
- order: number;
38
- }
39
- interface HydrationHint {
40
- id: string;
41
- priority: 'critical' | 'high' | 'low' | 'idle';
42
- interactive: boolean;
43
- aboveFold: boolean;
44
- defer?: 'hover' | 'visible' | 'idle' | 'interaction';
45
- }
46
- interface FlightMeta {
47
- title?: string;
48
- description?: string;
49
- image?: string;
50
- url?: string;
51
- type?: string;
52
- }
53
- interface FlightSEO {
54
- jsonLd?: object | object[];
55
- openGraph?: {
56
- title?: string;
57
- description?: string;
58
- type?: string;
59
- url?: string;
60
- image?: string;
61
- siteName?: string;
62
- };
63
- twitter?: {
64
- card?: 'summary' | 'summary_large_image' | 'app' | 'player';
65
- site?: string;
66
- creator?: string;
67
- title?: string;
68
- description?: string;
69
- image?: string;
70
- };
71
- canonical?: string;
72
- robots?: string;
73
- alternates?: Array<{
74
- hreflang: string;
75
- href: string;
76
- }>;
77
- preconnect?: string[];
78
- }
79
- interface HydrationIsland {
80
- id: string;
81
- component: string;
82
- trigger: 'load' | 'visible' | 'idle' | 'interaction' | 'media';
83
- priority: number;
84
- aboveFold?: boolean;
85
- selector?: string;
86
- props?: Record<string, any>;
87
- mediaQuery?: string;
88
- }
89
- interface ResourceHint {
90
- href: string;
91
- rel: 'preload' | 'prefetch' | 'preconnect' | 'dns-prefetch' | 'modulepreload';
92
- as?: 'script' | 'style' | 'font' | 'image' | 'fetch' | 'document';
93
- type?: string;
94
- crossorigin?: 'anonymous' | 'use-credentials';
95
- fetchpriority?: 'high' | 'low' | 'auto';
96
- }
97
- type HydrationState = 'idle' | 'parsing' | 'scheduling' | 'hydrating' | 'streaming' | 'complete' | 'error';
98
- interface FlightContext {
99
- payload: FlightPayload;
100
- scheduler: any;
101
- isStreaming: boolean;
102
- onChunk?: (chunk: FlightChunk) => void;
103
- }
104
-
105
- /**
106
- * Deserialize props from Flight format
107
- */
108
- declare function deserializeProps(props: Record<string, any>): Record<string, any>;
109
- /**
110
- * Generate script tag for embedding Flight payload
111
- */
112
- declare function generateFlightScript(payload: FlightPayload): string;
113
- /**
114
- * Parse Flight payload from window
115
- */
116
- declare function parseFlightPayload(): FlightPayload | null;
117
- /**
118
- * Get component data from Flight payload
119
- */
120
- declare function getFlightData<T = any>(key: string): T | null;
121
-
122
- export { type FlightPayload as F, type HydrationHint as H, type FlightNode as a, type FlightChunk as b, type HydrationState as c, deserializeProps as d, type FlightSEO as e, type FlightMeta as f, getFlightData as g, type FlightContext as h, generateFlightScript as i, parseFlightPayload as p };
@@ -1,122 +0,0 @@
1
- /**
2
- * Flight Payload - The wire format for transferring component trees
3
- */
4
- interface FlightPayload {
5
- v: number;
6
- ts: number;
7
- route: string;
8
- tree: FlightNode[];
9
- data: Record<string, any>;
10
- chunks: FlightChunk[];
11
- hints: HydrationHint[];
12
- styles: string[];
13
- meta?: FlightMeta;
14
- seo?: FlightSEO;
15
- islands?: HydrationIsland[];
16
- criticalCss?: string;
17
- resourceHints?: ResourceHint[];
18
- build?: {
19
- id: string;
20
- time: number;
21
- };
22
- }
23
- interface FlightNode {
24
- id: string;
25
- type: string | number;
26
- props: Record<string, any>;
27
- children: string[];
28
- hydrate: boolean;
29
- suspense?: boolean;
30
- error?: boolean;
31
- }
32
- interface FlightChunk {
33
- id: string;
34
- html: string;
35
- ready: boolean;
36
- data?: any;
37
- order: number;
38
- }
39
- interface HydrationHint {
40
- id: string;
41
- priority: 'critical' | 'high' | 'low' | 'idle';
42
- interactive: boolean;
43
- aboveFold: boolean;
44
- defer?: 'hover' | 'visible' | 'idle' | 'interaction';
45
- }
46
- interface FlightMeta {
47
- title?: string;
48
- description?: string;
49
- image?: string;
50
- url?: string;
51
- type?: string;
52
- }
53
- interface FlightSEO {
54
- jsonLd?: object | object[];
55
- openGraph?: {
56
- title?: string;
57
- description?: string;
58
- type?: string;
59
- url?: string;
60
- image?: string;
61
- siteName?: string;
62
- };
63
- twitter?: {
64
- card?: 'summary' | 'summary_large_image' | 'app' | 'player';
65
- site?: string;
66
- creator?: string;
67
- title?: string;
68
- description?: string;
69
- image?: string;
70
- };
71
- canonical?: string;
72
- robots?: string;
73
- alternates?: Array<{
74
- hreflang: string;
75
- href: string;
76
- }>;
77
- preconnect?: string[];
78
- }
79
- interface HydrationIsland {
80
- id: string;
81
- component: string;
82
- trigger: 'load' | 'visible' | 'idle' | 'interaction' | 'media';
83
- priority: number;
84
- aboveFold?: boolean;
85
- selector?: string;
86
- props?: Record<string, any>;
87
- mediaQuery?: string;
88
- }
89
- interface ResourceHint {
90
- href: string;
91
- rel: 'preload' | 'prefetch' | 'preconnect' | 'dns-prefetch' | 'modulepreload';
92
- as?: 'script' | 'style' | 'font' | 'image' | 'fetch' | 'document';
93
- type?: string;
94
- crossorigin?: 'anonymous' | 'use-credentials';
95
- fetchpriority?: 'high' | 'low' | 'auto';
96
- }
97
- type HydrationState = 'idle' | 'parsing' | 'scheduling' | 'hydrating' | 'streaming' | 'complete' | 'error';
98
- interface FlightContext {
99
- payload: FlightPayload;
100
- scheduler: any;
101
- isStreaming: boolean;
102
- onChunk?: (chunk: FlightChunk) => void;
103
- }
104
-
105
- /**
106
- * Deserialize props from Flight format
107
- */
108
- declare function deserializeProps(props: Record<string, any>): Record<string, any>;
109
- /**
110
- * Generate script tag for embedding Flight payload
111
- */
112
- declare function generateFlightScript(payload: FlightPayload): string;
113
- /**
114
- * Parse Flight payload from window
115
- */
116
- declare function parseFlightPayload(): FlightPayload | null;
117
- /**
118
- * Get component data from Flight payload
119
- */
120
- declare function getFlightData<T = any>(key: string): T | null;
121
-
122
- export { type FlightPayload as F, type HydrationHint as H, type FlightNode as a, type FlightChunk as b, type HydrationState as c, deserializeProps as d, type FlightSEO as e, type FlightMeta as f, getFlightData as g, type FlightContext as h, generateFlightScript as i, parseFlightPayload as p };