olova 2.0.59 → 2.0.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entry-worker.cjs.map +1 -1
- package/dist/entry-worker.js.map +1 -1
- package/dist/main.cjs +5 -30
- package/dist/main.cjs.map +1 -1
- package/dist/main.js +4 -29
- package/dist/main.js.map +1 -1
- package/dist/olova.cjs +18 -22
- package/dist/olova.cjs.map +1 -1
- package/dist/olova.js +17 -21
- package/dist/olova.js.map +1 -1
- package/main.tsx +76 -0
- package/olova.ts +619 -0
- package/package.json +18 -34
- package/src/entry-server.tsx +165 -0
- package/src/entry-worker.tsx +201 -0
- package/src/generator/index.ts +409 -0
- package/src/hydration/flight.ts +320 -0
- package/src/hydration/index.ts +12 -0
- package/src/hydration/types.ts +225 -0
- package/src/logger.ts +182 -0
- package/src/main.tsx +24 -0
- package/src/performance.ts +488 -0
- package/src/plugin/index.ts +204 -0
- package/src/router/ErrorBoundary.tsx +145 -0
- package/src/router/Link.tsx +117 -0
- package/src/router/OlovaRouter.tsx +354 -0
- package/src/router/Outlet.tsx +8 -0
- package/src/router/context.ts +117 -0
- package/src/router/index.ts +29 -0
- package/src/router/matching.ts +63 -0
- package/src/router/router.tsx +23 -0
- package/src/router/search-params.ts +29 -0
- package/src/scanner/index.ts +114 -0
- package/src/types/index.ts +190 -0
- package/src/utils/export.ts +85 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/naming.ts +54 -0
- package/src/utils/path.ts +45 -0
- package/tsup.config.ts +35 -0
package/dist/olova.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","../src/utils/export.ts","../src/utils/naming.ts","../src/utils/path.ts","../src/generator/index.ts","../src/scanner/index.ts","../src/plugin/index.ts","../src/logger.ts","../src/performance.ts","../src/hydration/flight.ts","../olova.ts"],"names":["fs","path","getRouteName","error","mdx","pc","promisify","zlib","existsSync","fileURLToPath","build","pathToFileURL"],"mappings":"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","file":"olova.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import fs from 'fs';\r\n\r\nfunction extractBalancedBraces(content: string, startIndex: number): string | null {\r\n if (content[startIndex] !== '{') return null;\r\n let depth = 0;\r\n for (let i = startIndex; i < content.length; i++) {\r\n if (content[i] === '{') depth++;\r\n else if (content[i] === '}') {\r\n depth--;\r\n if (depth === 0) return content.substring(startIndex, i + 1);\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction extractMetadataSource(content: string): string | undefined {\r\n const match = content.match(/export\\s+(?:const|let|var)\\s+metadata\\s*(?::\\s*\\w+\\s*)?=\\s*/);\r\n if (!match || match.index === undefined) return undefined;\r\n const afterEquals = match.index + match[0].length;\r\n return extractBalancedBraces(content, afterEquals) || undefined;\r\n}\r\n\r\nexport function detectExportType(filePath: string): {\r\n hasDefault: boolean;\r\n namedExport: string | null;\r\n hasMetadata: boolean;\r\n metadataSource?: string;\r\n hasRoute: boolean;\r\n hasGetStaticPaths: boolean;\r\n hasLoader: boolean;\r\n} {\r\n try {\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n\r\n const hasMetadata = /export\\s+(?:const|let|var)\\s+metadata\\s*/.test(content) ||\r\n /export\\s*\\{\\s*metadata\\s*\\}/.test(content);\r\n\r\n const hasRoute = /export\\s+(?:const|let|var)\\s+route\\s*=/.test(content) ||\r\n /export\\s*\\{\\s*route\\s*\\}/.test(content);\r\n\r\n const hasGetStaticPaths = /export\\s+(?:async\\s+)?function\\s+getStaticPaths/.test(content) ||\r\n /export\\s+(?:const|let|var)\\s+getStaticPaths\\s*=/.test(content) ||\r\n /export\\s*\\{[^}]*getStaticPaths[^}]*\\}/.test(content);\r\n\r\n const hasLoader = /export\\s+(?:async\\s+)?function\\s+loader/.test(content) ||\r\n /export\\s+(?:const|let|var)\\s+loader\\s*=/.test(content) ||\r\n /export\\s*\\{[^}]*loader[^}]*\\}/.test(content);\r\n\r\n // Extract metadata source for inlining (works for any file type with object literal metadata)\r\n const metadataSource = extractMetadataSource(content);\r\n\r\n if (filePath.toLowerCase().endsWith('.mdx')) {\r\n return {\r\n hasDefault: true,\r\n namedExport: null,\r\n hasMetadata: !!metadataSource,\r\n hasRoute: false,\r\n hasGetStaticPaths: false,\r\n hasLoader: false,\r\n metadataSource\r\n };\r\n }\r\n\r\n if (/export\\s+default\\s+/.test(content)) {\r\n return { hasDefault: true, namedExport: null, hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n\r\n const namedMatch = content.match(/export\\s+(?:const|function|class)\\s+(\\w+)/);\r\n if (namedMatch) {\r\n return { hasDefault: false, namedExport: namedMatch[1], hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n\r\n const exportMatch = content.match(/export\\s*\\{\\s*(\\w+)(?:\\s+as\\s+default)?\\s*\\}/);\r\n if (exportMatch) {\r\n if (content.includes('as default')) {\r\n return { hasDefault: true, namedExport: null, hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n return { hasDefault: false, namedExport: exportMatch[1], hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n\r\n return { hasDefault: false, namedExport: null, hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n } catch {\r\n return { hasDefault: true, namedExport: null, hasMetadata: false, hasRoute: false, hasGetStaticPaths: false, hasLoader: false };\r\n }\r\n}\r\n","export function getRouteName(path: string): string {\r\n if (path === '/' || path === '') return 'Root';\r\n \r\n // Remove leading/trailing slashes and split\r\n const segments = path.replace(/^\\/|\\/$/g, '').split(/[\\\\/]/);\r\n \r\n const nameSegments = segments.map(segment => {\r\n let cleanSegment = segment;\r\n \r\n // Handle dynamic segments :id -> Id\r\n if (cleanSegment.startsWith(':')) {\r\n cleanSegment = cleanSegment.slice(1);\r\n }\r\n \r\n // Handle bracket syntax [id] -> Id, [...slug] -> Slug\r\n if (cleanSegment.startsWith('[') && cleanSegment.endsWith(']')) {\r\n cleanSegment = cleanSegment.slice(1, -1);\r\n if (cleanSegment.startsWith('...')) {\r\n cleanSegment = cleanSegment.slice(3);\r\n }\r\n }\r\n\r\n // Handle catch-all * -> All\r\n if (cleanSegment === '*') {\r\n return 'All';\r\n }\r\n\r\n // Skip 'index' segment for cleaner names\r\n if (cleanSegment.toLowerCase() === 'index') {\r\n return '';\r\n }\r\n\r\n // Handle route groups (auth) -> Auth or ignore? Usually people ignore path but name might want it?\r\n // User request is about \"main folder name\". (auth) is usually invisible.\r\n // Let's strip parens but keep name for uniqueness? Or just strip?\r\n // scanner often treats (group) as transparent for path, but for Naming it might be good to include or exclude.\r\n // Let's include it cleaned up to ensure Uniqueness (e.g. /app/(dashboard)/layout vs /app/(marketing)/layout).\r\n if (cleanSegment.startsWith('(') && cleanSegment.endsWith(')')) {\r\n cleanSegment = cleanSegment.slice(1, -1);\r\n }\r\n \r\n return capitalize(cleanSegment);\r\n });\r\n\r\n const finalName = nameSegments.join('');\r\n if (/^\\d/.test(finalName)) {\r\n return 'Page' + finalName;\r\n }\r\n return finalName;\r\n}\r\n\r\nfunction capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');\r\n}\r\n","import type { DynamicSegmentResult } from '../types';\r\n\r\nexport function parseDynamicSegment(segment: string): DynamicSegmentResult & { isCatchAll: boolean } {\r\n if (segment.match(/^\\[\\.\\.\\.(.+)\\]$/)) {\r\n const paramName = segment.match(/^\\[\\.\\.\\.(.+)\\]$/)?.[1] || 'slug';\r\n return { isDynamic: true, paramName, isCatchAll: true };\r\n }\r\n\r\n const bracketMatch = segment.match(/^\\[(.+)\\]$/);\r\n if (bracketMatch) {\r\n return { isDynamic: true, paramName: bracketMatch[1], isCatchAll: false };\r\n }\r\n\r\n\r\n\r\n return { isDynamic: false, paramName: null, isCatchAll: false };\r\n}\r\n\r\nexport function isRouteGroup(segment: string): boolean {\r\n return /^\\(.+\\)$/.test(segment);\r\n}\r\n\r\nexport function pathToRoute(relativePath: string, sep: string) {\r\n const params: string[] = [];\r\n let hasCatchAll = false;\r\n const segments = relativePath.split(sep).filter(Boolean);\r\n\r\n const routeSegments = segments\r\n .filter(segment => !isRouteGroup(segment))\r\n .map(segment => {\r\n const { isDynamic, paramName, isCatchAll } = parseDynamicSegment(segment);\r\n if (isDynamic && paramName) {\r\n params.push(paramName);\r\n if (isCatchAll) {\r\n hasCatchAll = true;\r\n return `*`;\r\n }\r\n return `:${paramName}`;\r\n }\r\n return segment;\r\n });\r\n\r\n const routePath = '/' + routeSegments.join('/');\r\n return { routePath: routePath === '/' ? '/' : routePath, params, hasCatchAll };\r\n}\r\n","import path from 'path';\r\nimport type { ErrorWithExport, LayoutWithExport, LoadingWithExport, MiddlewareWithExport, NotFoundWithExport, RouteWithExport } from '../types';\r\nimport { getRouteName as getPascalCaseName } from '../utils';\r\n\r\nfunction stripImportExtension(filePath: string): string {\r\n return filePath.replace(/\\.tsx?$/, '');\r\n}\r\n\r\nfunction pathToRouteId(routePath: string): string {\r\n if (routePath === '/') return '_root';\r\n return routePath\r\n .replace(/^\\//, '')\r\n .replace(/\\//g, '_')\r\n .replace(/:/g, '$')\r\n .replace(/\\*/g, '$catchall');\r\n}\r\n\r\nfunction extractParamNames(routePath: string): string[] {\r\n const params: string[] = [];\r\n for (const segment of routePath.split('/')) {\r\n if (segment.startsWith(':')) params.push(segment.slice(1));\r\n else if (segment === '*') params.push('*');\r\n }\r\n return params;\r\n}\r\n\r\nfunction generateParamType(routePath: string): string | null {\r\n const params = extractParamNames(routePath);\r\n if (params.length === 0) return null;\r\n const fields = params.map(p =>\r\n p === '*' ? \"'*': string\" : `${p}: string`\r\n );\r\n return `{ ${fields.join('; ')} }`;\r\n}\r\n\r\nexport function generateRouteTree(\r\n routes: RouteWithExport[],\r\n notFoundPages: NotFoundWithExport[],\r\n layouts: LayoutWithExport[],\r\n loadingPages: LoadingWithExport[],\r\n errorPages: ErrorWithExport[],\r\n middlewares: MiddlewareWithExport[],\r\n srcDir: string,\r\n packageName: string = 'olovastart'\r\n): string {\r\n // Collision-free naming: track used names and append index on conflict\r\n const usedNames = new Map<string, number>();\r\n const getUniqueName = (baseName: string): string => {\r\n const count = usedNames.get(baseName) || 0;\r\n usedNames.set(baseName, count + 1);\r\n return count === 0 ? baseName : `${baseName}${count}`;\r\n };\r\n\r\n const getRouteName = (filePath: string, suffix: string = ''): string => {\r\n const relPath = path.relative(srcDir, filePath);\r\n const pathNoExt = relPath.replace(/\\.(tsx?|mdx)$/, '');\r\n\r\n if (pathNoExt === '' || pathNoExt === '.' || pathNoExt === 'index') {\r\n return getUniqueName('Root' + suffix);\r\n }\r\n\r\n const name = getPascalCaseName(pathNoExt);\r\n if (!name) return getUniqueName('Root' + suffix);\r\n\r\n if (suffix && name.toLowerCase().endsWith(suffix.toLowerCase())) {\r\n return getUniqueName(name);\r\n }\r\n\r\n return getUniqueName(name + suffix);\r\n };\r\n\r\n // Find closest matching entry by path prefix (most specific wins)\r\n const findClosestEntry = <T extends { path: string }>(routePath: string, entries: T[]): T | null => {\r\n let best: T | null = null;\r\n for (const entry of entries) {\r\n const ep = entry.path;\r\n if (ep === '/' || routePath === ep || routePath.startsWith(ep + '/')) {\r\n if (!best || ep.length > best.path.length) best = entry;\r\n }\r\n }\r\n return best;\r\n };\r\n\r\n // ── Imports ──────────────────────────────────────────────────────────────\r\n\r\n const routeNames: { moduleName: string; lazyName: string; eager: boolean }[] = [];\r\n\r\n const routeImports = routes.map((route) => {\r\n const relativePath = stripImportExtension('./' + path.relative(srcDir, route.component).replace(/\\\\/g, '/'));\r\n // ALWAYS eager import for SSG - lazy() doesn't work with renderToString\r\n const moduleName = getRouteName(route.component, 'RouteModule');\r\n const lazyName = getRouteName(route.component, 'Route');\r\n routeNames.push({ moduleName, lazyName, eager: true });\r\n return `import * as ${moduleName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const notFoundNames: string[] = [];\r\n const notFoundImports = notFoundPages.map((nf) => {\r\n const relativePath = stripImportExtension('./' + path.relative(srcDir, nf.filePath).replace(/\\\\/g, '/'));\r\n if (nf.hasMetadata) {\r\n const moduleName = getRouteName(nf.filePath, 'NotFoundModule');\r\n notFoundNames.push(moduleName);\r\n return `import * as ${moduleName} from '${relativePath}';`;\r\n }\r\n const importName = getRouteName(nf.filePath, 'NotFound');\r\n notFoundNames.push(importName);\r\n if (nf.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (nf.namedExport) return `import { ${nf.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const layoutNames: string[] = [];\r\n const layoutImports = layouts.map((layout) => {\r\n const relativePath = stripImportExtension('./' + path.relative(srcDir, layout.filePath).replace(/\\\\/g, '/'));\r\n if (layout.hasMetadata) {\r\n const moduleName = getRouteName(layout.filePath, 'LayoutModule');\r\n layoutNames.push(moduleName);\r\n return `import * as ${moduleName} from '${relativePath}';`;\r\n }\r\n const importName = getRouteName(layout.filePath, 'Layout');\r\n layoutNames.push(importName);\r\n if (layout.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (layout.namedExport) return `import { ${layout.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const loadingNames: string[] = [];\r\n const loadingImports = loadingPages.map((lp) => {\r\n const relativePath = stripImportExtension('./' + path.relative(srcDir, lp.filePath).replace(/\\\\/g, '/'));\r\n const importName = getRouteName(lp.filePath, 'Loading');\r\n loadingNames.push(importName);\r\n if (lp.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (lp.namedExport) return `import { ${lp.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const errorNames: string[] = [];\r\n const errorImports = errorPages.map((ep) => {\r\n const relativePath = stripImportExtension('./' + path.relative(srcDir, ep.filePath).replace(/\\\\/g, '/'));\r\n const importName = getRouteName(ep.filePath, 'Error');\r\n errorNames.push(importName);\r\n if (ep.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (ep.namedExport) return `import { ${ep.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const middlewareNames: string[] = [];\r\n const middlewareImports = middlewares.map((mw) => {\r\n const relativePath = stripImportExtension('./' + path.relative(srcDir, mw.filePath).replace(/\\\\/g, '/'));\r\n const importName = getRouteName(mw.filePath, 'Middleware');\r\n middlewareNames.push(importName);\r\n if (mw.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (mw.namedExport) return `import { ${mw.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n // ── Route objects ────────────────────────────────────────────────────────\r\n\r\n const routeObjects = routes.map((route, index) => {\r\n const { moduleName, lazyName, eager } = routeNames[index];\r\n const component = eager ? `${moduleName}.default` : lazyName;\r\n const routeId = pathToRouteId(route.path);\r\n\r\n const fields: string[] = [\r\n `id: '${routeId}'`,\r\n `path: '${route.path}'`,\r\n `component: ${component}`,\r\n ];\r\n\r\n if (route.params && route.params.length > 0) {\r\n fields.push(`params: [${route.params.map(p => `'${p}'`).join(', ')}]`);\r\n }\r\n\r\n if (route.metadataSource) {\r\n fields.push(`metadata: ${route.metadataSource}`);\r\n } else if (route.hasMetadata) {\r\n fields.push(`metadata: ${moduleName}.metadata`);\r\n }\r\n\r\n if (route.hasGetStaticPaths) {\r\n fields.push(`getStaticPaths: ${moduleName}.getStaticPaths`);\r\n }\r\n\r\n if (route.hasLoader) {\r\n fields.push(`loader: ${moduleName}.loader`);\r\n }\r\n\r\n const closestLoading = findClosestEntry(route.path, loadingPages);\r\n if (closestLoading) {\r\n const idx = loadingPages.indexOf(closestLoading);\r\n fields.push(`loading: ${loadingNames[idx]}`);\r\n }\r\n\r\n const closestError = findClosestEntry(route.path, errorPages);\r\n if (closestError) {\r\n const idx = errorPages.indexOf(closestError);\r\n fields.push(`error: ${errorNames[idx]}`);\r\n }\r\n\r\n return ` {\\n ${fields.join(',\\n ')}\\n }`;\r\n }).join(',\\n');\r\n\r\n // ── 404 pages ────────────────────────────────────────────────────────────\r\n\r\n const notFoundObjects = notFoundPages.map((nf, index) => {\r\n const name = notFoundNames[index];\r\n const isModule = nf.hasMetadata;\r\n const component = isModule ? `${name}.default` : name;\r\n const fields: string[] = [\r\n `pathPrefix: '${nf.pathPrefix}'`,\r\n `component: ${component}`,\r\n ];\r\n if (isModule) fields.push(`metadata: ${name}.metadata`);\r\n return ` {\\n ${fields.join(',\\n ')}\\n }`;\r\n }).join(',\\n');\r\n\r\n // ── Layouts with children ────────────────────────────────────────────────\r\n\r\n const layoutObjects = layouts.map((layout, index) => {\r\n const name = layoutNames[index];\r\n const isModule = layout.hasMetadata;\r\n const component = isModule ? `${name}.default` : name;\r\n\r\n // Populate children: routes whose path is within this layout's scope\r\n const childRouteIds = routes\r\n .filter(r => {\r\n if (layout.path === '/') return true;\r\n return r.path === layout.path || r.path.startsWith(layout.path + '/');\r\n })\r\n .map(r => `'${pathToRouteId(r.path)}'`);\r\n\r\n const fields: string[] = [\r\n `path: '${layout.path}'`,\r\n `layout: ${component}`,\r\n `children: [${childRouteIds.join(', ')}]`,\r\n ];\r\n if (isModule) fields.push(`metadata: ${name}.metadata`);\r\n return ` {\\n ${fields.join(',\\n ')}\\n }`;\r\n }).join(',\\n');\r\n\r\n // ── Middleware map ───────────────────────────────────────────────────────\r\n\r\n const middlewareEntries = middlewares.map((mw, index) => {\r\n return ` '${mw.path}': ${middlewareNames[index]}`;\r\n }).join(',\\n');\r\n\r\n // ── Type-safe param types per route ──────────────────────────────────────\r\n\r\n const routeParamTypes = routes\r\n .filter(r => r.params && r.params.length > 0)\r\n .map(r => {\r\n const paramType = generateParamType(r.path);\r\n return paramType ? ` '${r.path}': ${paramType};` : null;\r\n })\r\n .filter(Boolean)\r\n .join('\\n');\r\n\r\n // ── Type-safe route href builder type ────────────────────────────────────\r\n\r\n const routePaths = routes.length > 0 ? routes.map(r => `'${r.path}'`).join(' | ') : 'never';\r\n const routeIds = routes.length > 0 ? routes.map(r => `'${pathToRouteId(r.path)}'`).join(' | ') : 'never';\r\n\r\n // ── Route manifest ───────────────────────────────────────────────────────\r\n\r\n const manifestEntries = routes.map(r => {\r\n const paramNames = extractParamNames(r.path);\r\n const isDynamic = paramNames.length > 0;\r\n const hasCatchAll = r.path.includes('*');\r\n return ` '${pathToRouteId(r.path)}': { id: '${pathToRouteId(r.path)}', path: '${r.path}', params: [${paramNames.map(p => `'${p}'`).join(', ')}], isDynamic: ${isDynamic}, hasCatchAll: ${hasCatchAll}, hasMetadata: ${r.hasMetadata}, hasGetStaticPaths: ${r.hasGetStaticPaths} }`;\r\n }).join(',\\n');\r\n\r\n // ── Assemble output ──────────────────────────────────────────────────────\r\n\r\n const allImports = [\r\n routeImports, notFoundImports, layoutImports,\r\n loadingImports, errorImports, middlewareImports,\r\n ].filter(Boolean).join('\\n');\r\n\r\n return `/* prettier-ignore-start */\r\n\r\n/* eslint-disable */\r\n\r\n// @ts-nocheck\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\n\r\n/**\r\n * This file was automatically generated by Olova Router.\r\n * DO NOT MODIFY IT BY HAND. Instead, modify the source route files\r\n * and regenerate this file by running the dev server or build command.\r\n *\r\n * @generated Olova Route Tree\r\n * @routes ${routes.length}\r\n * @layouts ${layouts.length}\r\n * @404s ${notFoundPages.length}\r\n * @loading ${loadingPages.length}\r\n * @errors ${errorPages.length}\r\n * @middleware ${middlewares.length}\r\n */\r\n\r\nimport { lazy } from 'react';\r\nimport {\r\n createLink,\r\n OlovaRouter,\r\n Outlet,\r\n redirect,\r\n useIsNavigating,\r\n useNavigationEvent,\r\n useParams,\r\n usePathname,\r\n useRedirect,\r\n useRouter,\r\n useSearchParams,\r\n useSelectedLayoutSegment,\r\n useSelectedLayoutSegments,\r\n} from '${packageName}/router';\r\n${allImports}\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Route Definitions\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport const routes = [\r\n${routeObjects}\r\n];\r\n\r\nexport const notFoundPages = [\r\n${notFoundObjects}\r\n];\r\n\r\nexport const layouts = [\r\n${layoutObjects}\r\n];\r\n${middlewares.length > 0 ? `\r\nexport const middlewares = {\r\n${middlewareEntries}\r\n};\r\n` : `\r\nexport const middlewares = {};\r\n`}\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Route Manifest (build-time introspection, sitemap generation, etc.)\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport const routeManifest = {\r\n${manifestEntries}\r\n} as const;\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Type-Safe Route Types\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport type RoutePaths = ${routePaths};\r\n\r\nexport type RouteIds = ${routeIds};\r\n\r\nexport interface RouteParams {\r\n${routeParamTypes || ' // No dynamic routes'}\r\n}\r\n\r\nexport type ParamsFor<P extends RoutePaths> = P extends keyof RouteParams ? RouteParams[P] : Record<string, never>;\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Route Lookup Helpers\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nconst _routeById = new Map(routes.map(r => [r.id, r]));\r\n\r\nexport function getRouteById(id: RouteIds) {\r\n return _routeById.get(id);\r\n}\r\n\r\nexport function getRouteByPath(path: RoutePaths) {\r\n return routes.find(r => r.path === path);\r\n}\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Exports\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport const Link = createLink<RoutePaths>();\r\n\r\nexport {\r\n OlovaRouter,\r\n Outlet,\r\n redirect,\r\n useIsNavigating,\r\n useNavigationEvent,\r\n useParams,\r\n usePathname,\r\n useRedirect,\r\n useRouter,\r\n useSearchParams,\r\n useSelectedLayoutSegment,\r\n useSelectedLayoutSegments,\r\n};\r\n\r\nexport type {\r\n NavigateOptions,\r\n NotFoundPageConfig,\r\n SearchParams,\r\n SetSearchParamsOptions,\r\n LayoutRoute,\r\n Metadata,\r\n} from '${packageName}/router';\r\n\r\n/* prettier-ignore-end */\r\n`;\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport type { ErrorEntry, LayoutEntry, LoadingEntry, MiddlewareEntry, NotFoundEntry, RouteEntry, ScanResult } from '../types';\r\nimport { isRouteGroup, pathToRoute } from '../utils';\r\n\r\nconst RESERVED_NAMES = new Set([\r\n 'index', 'layout', 'loading', 'error', '404', 'middleware',\r\n 'App', 'main', 'route.tree',\r\n]);\r\n\r\nfunction scanDirectory(\r\n dir: string,\r\n rootDir: string,\r\n extensions: string[],\r\n routes: RouteEntry[],\r\n notFoundPages: NotFoundEntry[],\r\n layouts: LayoutEntry[],\r\n loadingPages: LoadingEntry[],\r\n errorPages: ErrorEntry[],\r\n middlewares: MiddlewareEntry[],\r\n isRoot = false\r\n) {\r\n if (!fs.existsSync(dir)) return;\r\n\r\n const entries = fs.readdirSync(dir, { withFileTypes: true });\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n\r\n if (entry.isDirectory()) {\r\n if (entry.name === 'node_modules' || entry.name === 'assets' || entry.name.startsWith('_')) continue;\r\n scanDirectory(fullPath, rootDir, extensions, routes, notFoundPages, layouts, loadingPages, errorPages, middlewares, false);\r\n } else if (entry.isFile()) {\r\n const ext = path.extname(entry.name);\r\n const baseName = path.basename(entry.name, ext);\r\n\r\n if (baseName === 'layout' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n layouts.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if (baseName === 'loading' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n loadingPages.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if (baseName === 'error' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n errorPages.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if (baseName === 'middleware' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n middlewares.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if (baseName === '404' && extensions.includes(ext)) {\r\n const relativeParts = path.relative(rootDir, dir).split(path.sep).filter(Boolean);\r\n const filteredParts = relativeParts.filter(p => !isRouteGroup(p));\r\n const pathPrefix = isRoot ? '' : '/' + filteredParts.join('/');\r\n notFoundPages.push({ pathPrefix: pathPrefix || '', filePath: fullPath });\r\n } else if (isRoot && baseName === 'App' && extensions.includes(ext)) {\r\n routes.push({ path: '/', filePath: fullPath, isDynamic: false, params: [] });\r\n } else if (!isRoot && baseName === 'index' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, path.dirname(fullPath));\r\n const { routePath, params } = pathToRoute(relativePath, path.sep);\r\n routes.push({ path: routePath, filePath: fullPath, isDynamic: params.length > 0, params });\r\n } else if (\r\n !RESERVED_NAMES.has(baseName) &&\r\n !baseName.endsWith('.d') &&\r\n !baseName.startsWith('_') &&\r\n extensions.includes(ext)\r\n ) {\r\n const relativePath = path.relative(rootDir, fullPath);\r\n const relativePathNoExt = relativePath.substring(0, relativePath.length - ext.length);\r\n const { routePath, params } = pathToRoute(relativePathNoExt, path.sep);\r\n routes.push({ path: routePath, filePath: fullPath, isDynamic: params.length > 0, params });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function scanRoutes(rootDir: string, extensions: string[]): ScanResult {\r\n const routes: RouteEntry[] = [];\r\n const notFoundPages: NotFoundEntry[] = [];\r\n const layouts: LayoutEntry[] = [];\r\n const loadingPages: LoadingEntry[] = [];\r\n const errorPages: ErrorEntry[] = [];\r\n const middlewares: MiddlewareEntry[] = [];\r\n const absoluteRoot = path.isAbsolute(rootDir) ? rootDir : path.resolve(rootDir);\r\n\r\n if (!fs.existsSync(absoluteRoot)) {\r\n throw new Error(`Olova Router: Root directory does not exist: ${absoluteRoot}`);\r\n }\r\n\r\n scanDirectory(absoluteRoot, absoluteRoot, extensions, routes, notFoundPages, layouts, loadingPages, errorPages, middlewares, true);\r\n routes.sort((a, b) => (a.isDynamic !== b.isDynamic ? (a.isDynamic ? 1 : -1) : a.path.localeCompare(b.path)));\r\n notFoundPages.sort((a, b) => b.pathPrefix.length - a.pathPrefix.length);\r\n layouts.sort((a, b) => a.path.length - b.path.length);\r\n loadingPages.sort((a, b) => b.path.length - a.path.length);\r\n errorPages.sort((a, b) => b.path.length - a.path.length);\r\n middlewares.sort((a, b) => a.path.length - b.path.length);\r\n return { routes, notFoundPages, layouts, loadingPages, errorPages, middlewares };\r\n}\r\n","import mdx from '@mdx-js/rollup';\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport type { Plugin } from 'vite';\r\nimport { generateRouteTree } from '../generator';\r\nimport { scanRoutes } from '../scanner';\r\nimport type { ErrorWithExport, LayoutWithExport, LoadingWithExport, MiddlewareWithExport, NotFoundWithExport, OlovaRouterOptions, PluginOption, ResolvedConfig, RouteWithExport } from '../types';\r\nimport { detectExportType, getRouteName } from '../utils';\r\n\r\nexport function olovaRouter(options: OlovaRouterOptions = {}): PluginOption[] {\r\n const rootDir = options.rootDir || 'src';\r\n const extensions = options.extensions || ['.tsx', '.ts', '.mdx'];\r\n const packageName = options.packageName || 'olovastart';\r\n\r\n let config: ResolvedConfig;\r\n let absoluteRootDir: string;\r\n let watcher: fs.FSWatcher | null = null;\r\n let timer: NodeJS.Timeout | null = null;\r\n\r\n function generateRouteTreeFile() {\r\n const { routes, notFoundPages, layouts, loadingPages, errorPages, middlewares } = scanRoutes(absoluteRootDir, extensions);\r\n\r\n const routeConfigs: RouteWithExport[] = routes.map(r => {\r\n let exportInfo = detectExportType(r.filePath);\r\n \r\n if (r.filePath.toLowerCase().endsWith('.mdx')) {\r\n exportInfo = {\r\n ...exportInfo,\r\n hasDefault: true,\r\n namedExport: null\r\n };\r\n }\r\n\r\n return {\r\n path: r.path,\r\n component: r.filePath.replace(/\\\\/g, '/'),\r\n params: r.params.length > 0 ? r.params : undefined,\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n hasMetadata: exportInfo.hasMetadata,\r\n metadataSource: exportInfo.metadataSource,\r\n hasRoute: exportInfo.hasRoute,\r\n hasGetStaticPaths: exportInfo.hasGetStaticPaths,\r\n hasLoader: exportInfo.hasLoader\r\n };\r\n });\r\n\r\n const notFoundConfigs: NotFoundWithExport[] = notFoundPages.map(nf => {\r\n const exportInfo = detectExportType(nf.filePath);\r\n return {\r\n pathPrefix: nf.pathPrefix,\r\n filePath: nf.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n hasMetadata: exportInfo.hasMetadata\r\n };\r\n });\r\n\r\n const layoutConfigs: LayoutWithExport[] = layouts.map(l => {\r\n const exportInfo = detectExportType(l.filePath);\r\n return {\r\n path: l.path,\r\n filePath: l.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n hasMetadata: exportInfo.hasMetadata\r\n };\r\n });\r\n\r\n const loadingConfigs: LoadingWithExport[] = loadingPages.map(lp => {\r\n const exportInfo = detectExportType(lp.filePath);\r\n return {\r\n path: lp.path,\r\n filePath: lp.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n };\r\n });\r\n\r\n const errorConfigs: ErrorWithExport[] = errorPages.map(ep => {\r\n const exportInfo = detectExportType(ep.filePath);\r\n return {\r\n path: ep.path,\r\n filePath: ep.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n };\r\n });\r\n\r\n const middlewareConfigs: MiddlewareWithExport[] = middlewares.map(mw => {\r\n const exportInfo = detectExportType(mw.filePath);\r\n return {\r\n path: mw.path,\r\n filePath: mw.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n };\r\n });\r\n\r\n const content = generateRouteTree(routeConfigs, notFoundConfigs, layoutConfigs, loadingConfigs, errorConfigs, middlewareConfigs, absoluteRootDir, packageName);\r\n const treePath = path.resolve(absoluteRootDir, 'route.tree.ts');\r\n\r\n const existing = fs.existsSync(treePath) ? fs.readFileSync(treePath, 'utf-8') : '';\r\n if (existing !== content) {\r\n fs.writeFileSync(treePath, content);\r\n console.log('\\x1b[32m[olova]\\x1b[0m Route tree updated');\r\n }\r\n }\r\n\r\n function startWatcher() {\r\n if (watcher) return;\r\n\r\n watcher = fs.watch(absoluteRootDir, { recursive: true }, (eventType, filename) => {\r\n if (!filename) return;\r\n if (filename.includes('route.tree.ts')) return;\r\n\r\n const ext = path.extname(filename);\r\n const isConfiguredExtension = extensions.includes(ext);\r\n\r\n const isIndexFile = (filename.includes('index') && isConfiguredExtension);\r\n const isAppFile = (filename.includes('App') && isConfiguredExtension);\r\n const is404File = (filename.includes('404') && isConfiguredExtension);\r\n const isLayoutFile = (filename.includes('layout') && isConfiguredExtension);\r\n const isLoadingFile = (filename.includes('loading') && isConfiguredExtension);\r\n const isErrorFile = (filename.includes('error') && isConfiguredExtension);\r\n const isMiddlewareFile = (filename.includes('middleware') && isConfiguredExtension);\r\n const isDirectory = !filename.includes('.');\r\n const isDynamicSegment = filename.includes('[');\r\n const isRenameEvent = eventType === 'rename';\r\n\r\n if (isIndexFile || isAppFile || is404File || isLayoutFile || isLoadingFile || isErrorFile || isMiddlewareFile || isDirectory || isDynamicSegment || isRenameEvent) {\r\n if (isIndexFile && filename) {\r\n const fullPath = path.join(absoluteRootDir, filename);\r\n if (fs.existsSync(fullPath)) {\r\n const stat = fs.statSync(fullPath);\r\n if (stat.size === 0 && !filename.endsWith('.mdx')) {\r\n const relativeDir = path.relative(absoluteRootDir, path.dirname(fullPath));\r\n const pascalCaseName = getRouteName(relativeDir);\r\n \r\n const boilerplate = `\r\nexport const metadata = {\r\n title: \"${pascalCaseName}\",\r\n description: \"${pascalCaseName} page\",\r\n}\r\n\r\nexport default function ${pascalCaseName}() {\r\n return (\r\n <div>\r\n <h1>${pascalCaseName}</h1>\r\n </div>\r\n );\r\n}\r\n`;\r\n fs.writeFileSync(fullPath, boilerplate);\r\n console.log(`\\x1b[32m[olova]\\x1b[0m Generated boilerplate for ${filename}`);\r\n }\r\n }\r\n }\r\n\r\n if (timer) clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n try {\r\n generateRouteTreeFile();\r\n } catch (error) {\r\n console.error('\\x1b[31m[olova]\\x1b[0m Error generating route tree:', error);\r\n }\r\n }, 100);\r\n }\r\n });\r\n\r\n console.log('\\x1b[32m[olova]\\x1b[0m Watching for route changes...');\r\n }\r\n\r\n const routerPlugin: Plugin = {\r\n name: 'olova-router',\r\n\r\n configResolved(resolvedConfig: ResolvedConfig) {\r\n config = resolvedConfig;\r\n absoluteRootDir = path.resolve(config.root, rootDir);\r\n },\r\n\r\n buildStart() {\r\n generateRouteTreeFile();\r\n\r\n if (config.command === 'serve') {\r\n startWatcher();\r\n }\r\n },\r\n\r\n buildEnd() {\r\n if (watcher) {\r\n watcher.close();\r\n watcher = null;\r\n }\r\n },\r\n };\r\n\r\n return [\r\n { enforce: 'pre', ...mdx() } as Plugin,\r\n routerPlugin\r\n ];\r\n}\r\n\r\nexport default olovaRouter;\r\n","/**\r\n * Olova Logger - Modern, styled terminal output\r\n * Inspired by Next.js console output\r\n */\r\n\r\nimport pc from 'picocolors';\r\n\r\n// Olova version from package.json\r\nconst VERSION = '0.0.14';\r\n\r\n/**\r\n * Print the startup banner (minimal, like Next.js)\r\n */\r\nexport function printBanner() {\r\n console.log('');\r\n console.log(pc.cyan(` ▲ Olova`) + pc.dim(` ${VERSION}`));\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print dev server ready message\r\n */\r\nexport function printDevReady(url: string, networkUrl?: string) {\r\n console.log('');\r\n console.log(` ${pc.green('✓')} ${pc.bold('Ready')} in ${pc.cyan('~1s')}`);\r\n console.log('');\r\n console.log(` ${pc.dim('Local:')} ${pc.cyan(url)}`);\r\n if (networkUrl) {\r\n console.log(` ${pc.dim('Network:')} ${pc.cyan(networkUrl)}`);\r\n }\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print SSG build start (minimal)\r\n */\r\nexport function printBuildStart() {\r\n console.log('');\r\n console.log(` ${pc.dim('Creating an optimized production build...')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print SSG build header\r\n */\r\nexport function printSSGStart(buildId: string) {\r\n console.log('');\r\n console.log(pc.bold(pc.cyan(` ✓ Compiled successfully`)));\r\n console.log('');\r\n console.log(` ${pc.dim('Build ID:')} ${pc.yellow(buildId)}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print route table (Next.js style)\r\n */\r\nexport function printRoutes(routes: { path: string; type: 'static' | 'dynamic' }[]) {\r\n // Header\r\n console.log(` ${pc.bold('Route')}${' '.repeat(32)}${pc.bold('Type')}`);\r\n console.log(` ${pc.dim('┌')}${pc.dim('─'.repeat(43))}${pc.dim('┐')}`);\r\n\r\n for (const route of routes) {\r\n const icon = route.type === 'static' ? pc.green('○') : pc.magenta('λ');\r\n const typeLabel = route.type === 'static'\r\n ? pc.green('Static')\r\n : pc.magenta('Dynamic');\r\n const pathDisplay = route.path === '/' ? '/' : route.path;\r\n const padding = ' '.repeat(Math.max(1, 35 - pathDisplay.length));\r\n console.log(` ${pc.dim('│')} ${icon} ${pc.white(pathDisplay)}${padding}${typeLabel}`);\r\n }\r\n\r\n // Footer\r\n console.log(` ${pc.dim('└')}${pc.dim('─'.repeat(43))}${pc.dim('┘')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print single page generation\r\n */\r\nexport function printPageGenerated(path: string, hasFlightData = true) {\r\n const badge = hasFlightData ? pc.dim(pc.cyan(' [Flight]')) : '';\r\n console.log(` ${pc.dim('✓')} ${pc.dim('Generated')} ${pc.white(path)}${badge}`);\r\n}\r\n\r\n/**\r\n * Print page generation error\r\n */\r\nexport function printPageError(path: string, error: string) {\r\n console.log(` ${pc.red('✗')} ${pc.red('Failed')} ${path}`);\r\n console.log(` ${pc.dim(error)}`);\r\n}\r\n\r\n/**\r\n * Print SSG completion summary\r\n */\r\nexport function printSSGComplete(stats: {\r\n totalPages: number;\r\n successPages: number;\r\n failedPages: number;\r\n buildTime: number;\r\n}) {\r\n console.log('');\r\n console.log(` ${pc.dim('─'.repeat(45))}`);\r\n console.log('');\r\n\r\n if (stats.failedPages > 0) {\r\n console.log(` ${pc.yellow('⚠')} ${pc.yellow('Build completed with warnings')}`);\r\n } else {\r\n console.log(` ${pc.green('✓')} ${pc.green('Build completed successfully')}`);\r\n }\r\n\r\n console.log('');\r\n console.log(` ${pc.dim('Pages:')} ${pc.bold(stats.successPages.toString())} generated`);\r\n if (stats.failedPages > 0) {\r\n console.log(` ${pc.red(stats.failedPages.toString())} failed`);\r\n }\r\n console.log(` ${pc.dim('Time:')} ${pc.cyan(stats.buildTime + 'ms')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print Flight hydration info (compact)\r\n */\r\nexport function printFlightInfo() {\r\n console.log(` ${pc.cyan('○')} ${pc.dim('Flight hydration enabled')}`);\r\n console.log(` ${pc.dim('• JSON-LD structured data')}`);\r\n console.log(` ${pc.dim('• Resource hints')}`);\r\n console.log(` ${pc.dim('• $OLOVA global')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print a simple info message\r\n */\r\nexport function info(message: string) {\r\n console.log(` ${pc.cyan('○')} ${message}`);\r\n}\r\n\r\n/**\r\n * Print a success message\r\n */\r\nexport function success(message: string) {\r\n console.log(` ${pc.green('✓')} ${pc.green(message)}`);\r\n}\r\n\r\n/**\r\n * Print a warning message\r\n */\r\nexport function warn(message: string) {\r\n console.log(` ${pc.yellow('⚠')} ${pc.yellow(message)}`);\r\n}\r\n\r\n/**\r\n * Print an error message\r\n */\r\nexport function error(message: string) {\r\n console.log(` ${pc.red('✗')} ${pc.red(message)}`);\r\n}\r\n\r\n/**\r\n * Print SSR render info (dev mode)\r\n */\r\nexport function printSSRRender(path: string) {\r\n console.log(` ${pc.cyan('→')} ${pc.dim('SSR')} ${path}`);\r\n}\r\n\r\nexport default {\r\n printBanner,\r\n printDevReady,\r\n printBuildStart,\r\n printSSGStart,\r\n printRoutes,\r\n printPageGenerated,\r\n printPageError,\r\n printSSGComplete,\r\n printFlightInfo,\r\n printSSRRender,\r\n info,\r\n success,\r\n warn,\r\n error,\r\n};\r\n","/**\r\n * Olova Performance Optimizations Plugin\r\n * \r\n * Provides build-time optimizations for SSG:\r\n * - Code splitting strategies\r\n * - Asset compression (gzip/brotli)\r\n * - Chunk size analysis\r\n * - Resource prioritization\r\n */\r\n\r\nimport fs from 'node:fs/promises';\r\nimport path from 'node:path';\r\nimport { promisify } from 'node:util';\r\nimport zlib from 'node:zlib';\r\nimport type { Plugin, ResolvedConfig } from 'vite';\r\nimport logger from './logger';\r\n\r\n// Promisify zlib functions\r\nconst gzip = promisify(zlib.gzip);\r\nconst brotliCompress = promisify(zlib.brotliCompress);\r\n\r\n// =============================================================================\r\n// TYPES\r\n// =============================================================================\r\n\r\nexport interface PerformanceOptions {\r\n /**\r\n * Enable gzip compression for assets\r\n * @default true\r\n */\r\n gzip?: boolean;\r\n \r\n /**\r\n * Enable brotli compression for assets\r\n * @default true\r\n */\r\n brotli?: boolean;\r\n \r\n /**\r\n * Minimum file size (in bytes) to compress\r\n * @default 1024 (1KB)\r\n */\r\n threshold?: number;\r\n \r\n /**\r\n * File extensions to compress\r\n * @default ['js', 'css', 'html', 'json', 'svg', 'xml']\r\n */\r\n extensions?: string[];\r\n \r\n /**\r\n * Enable chunk size warnings\r\n * @default true\r\n */\r\n chunkSizeWarning?: boolean;\r\n \r\n /**\r\n * Maximum chunk size before warning (in KB)\r\n * @default 250\r\n */\r\n maxChunkSize?: number;\r\n \r\n /**\r\n * Enable route-based code splitting\r\n * @default true\r\n */\r\n routeCodeSplitting?: boolean;\r\n}\r\n\r\nexport interface ChunkInfo {\r\n name: string;\r\n size: number;\r\n gzipSize?: number;\r\n brotliSize?: number;\r\n isEntry: boolean;\r\n type: 'vendor' | 'framework' | 'common' | 'route' | 'other';\r\n}\r\n\r\n// =============================================================================\r\n// MANUAL CHUNKS CONFIGURATION\r\n// =============================================================================\r\n\r\n/**\r\n * Smart manual chunks configuration for optimal code splitting\r\n * Separates vendor, framework, and route-specific code\r\n * Avoids circular dependencies by grouping related routes\r\n */\r\nexport function createManualChunks() {\r\n // Track modules to detect potential circular dependencies\r\n const seenModules = new Map<string, string>();\r\n \r\n return (id: string, { getModuleInfo }: { getModuleInfo: (id: string) => { importers: readonly string[] } | null }): string | undefined => {\r\n // React and React DOM - cached separately\r\n if (id.includes('node_modules/react-dom')) {\r\n return 'vendor-react-dom';\r\n }\r\n if (id.includes('node_modules/react')) {\r\n return 'vendor-react';\r\n }\r\n \r\n // Olova Router - framework code\r\n if (id.includes('olova-router') || id.includes('olovastart/dist/router')) {\r\n return 'framework-router';\r\n }\r\n \r\n // Other node_modules - vendor bundle\r\n if (id.includes('node_modules')) {\r\n // Extract package name for better caching\r\n const match = id.match(/node_modules[\\\\/]([^/\\\\]+)/);\r\n if (match) {\r\n const pkg = match[1];\r\n // Group small packages together\r\n if (['scheduler', 'object-assign', 'prop-types'].includes(pkg)) {\r\n return 'vendor-react';\r\n }\r\n // Keep large packages separate\r\n if (['lodash', 'moment', 'axios', 'date-fns'].includes(pkg)) {\r\n return `vendor-${pkg}`;\r\n }\r\n }\r\n return 'vendor';\r\n }\r\n \r\n // Shared components - group together to avoid circular deps\r\n if (id.includes('/components/')) {\r\n return 'common-components';\r\n }\r\n \r\n // Shared utilities\r\n if (id.includes('/utils/') || id.includes('/lib/') || id.includes('/helpers/')) {\r\n return 'common-utils';\r\n }\r\n \r\n // CSS - let Vite handle\r\n if (id.endsWith('.css') || id.endsWith('.scss')) {\r\n return undefined;\r\n }\r\n \r\n // Auth pages + search - group together to avoid circular deps\r\n // (login <-> register <-> search often share components/navigation)\r\n if (id.includes('/(auth)/') || id.includes('\\\\(auth)\\\\') || \r\n id.includes('/search/') || id.includes('\\\\search\\\\')) {\r\n return 'page-auth';\r\n }\r\n \r\n // Route components - be conservative, only split truly isolated routes\r\n // Don't split if the module has cross-route imports\r\n if (id.includes('/src/') && (id.endsWith('/index.tsx') || id.endsWith('/index.mdx'))) {\r\n // Check if this module would cause circular dependencies\r\n const moduleInfo = getModuleInfo(id);\r\n if (moduleInfo) {\r\n // If imported by another route, group with common\r\n for (const importer of moduleInfo.importers) {\r\n if (importer.includes('/src/') && importer.includes('/index.') && !importer.includes(id)) {\r\n return 'common-routes';\r\n }\r\n }\r\n }\r\n \r\n const routeMatch = id.match(/[\\\\/]src[\\\\/](.+?)[\\\\/]index\\.(tsx|mdx)$/);\r\n if (routeMatch) {\r\n const routePath = routeMatch[1]\r\n .replace(/\\([^)]+\\)[\\\\/]/g, '') // Remove route groups\r\n .replace(/\\[.*?\\]/g, 'dynamic') // Replace dynamic segments\r\n .replace(/[\\\\/]/g, '-');\r\n \r\n // Skip if we've seen a chunk with same base that would cause circular\r\n const baseRoute = routePath.split('-')[0];\r\n if (seenModules.has(baseRoute)) {\r\n const existingChunk = seenModules.get(baseRoute)!;\r\n // If related routes, group them\r\n if (existingChunk.startsWith('page-')) {\r\n return existingChunk;\r\n }\r\n }\r\n \r\n const chunkName = `page-${routePath}`;\r\n seenModules.set(baseRoute, chunkName);\r\n return chunkName;\r\n }\r\n }\r\n \r\n return undefined;\r\n };\r\n}\r\n\r\n// =============================================================================\r\n// COMPRESSION PLUGIN\r\n// =============================================================================\r\n\r\n/**\r\n * Compression plugin for generating gzip and brotli compressed assets\r\n */\r\nexport function compressionPlugin(options: PerformanceOptions = {}): Plugin {\r\n const {\r\n gzip: enableGzip = true,\r\n brotli: enableBrotli = true,\r\n threshold = 1024,\r\n extensions = ['js', 'css', 'html', 'json', 'svg', 'xml'],\r\n } = options;\r\n \r\n let config: ResolvedConfig;\r\n \r\n return {\r\n name: 'olova-compression',\r\n apply: 'build',\r\n \r\n configResolved(resolvedConfig) {\r\n config = resolvedConfig;\r\n },\r\n \r\n async closeBundle() {\r\n if (config.command !== 'build' || config.build.ssr) return;\r\n \r\n const outDir = config.build.outDir;\r\n const stats = { gzip: 0, brotli: 0, skipped: 0 };\r\n \r\n // Find all files to compress\r\n const files = await findFilesToCompress(outDir, extensions);\r\n \r\n for (const file of files) {\r\n const content = await fs.readFile(file);\r\n \r\n // Skip small files\r\n if (content.length < threshold) {\r\n stats.skipped++;\r\n continue;\r\n }\r\n \r\n // Gzip compression\r\n if (enableGzip) {\r\n try {\r\n const compressed = await gzip(content, { level: 9 });\r\n await fs.writeFile(`${file}.gz`, compressed);\r\n stats.gzip++;\r\n } catch (e) {\r\n // Silently skip compression errors\r\n }\r\n }\r\n \r\n // Brotli compression\r\n if (enableBrotli) {\r\n try {\r\n const compressed = await brotliCompress(content, {\r\n params: {\r\n [zlib.constants.BROTLI_PARAM_QUALITY]: 11,\r\n },\r\n });\r\n await fs.writeFile(`${file}.br`, compressed);\r\n stats.brotli++;\r\n } catch (e) {\r\n // Silently skip compression errors\r\n }\r\n }\r\n }\r\n \r\n // Log compression stats\r\n if (stats.gzip > 0 || stats.brotli > 0) {\r\n logger.info(`Compressed ${stats.gzip} files (gzip), ${stats.brotli} files (brotli)`);\r\n }\r\n },\r\n };\r\n}\r\n\r\n// =============================================================================\r\n// CHUNK ANALYSIS PLUGIN\r\n// =============================================================================\r\n\r\n/**\r\n * Chunk analysis plugin for monitoring bundle sizes\r\n */\r\nexport function chunkAnalysisPlugin(options: PerformanceOptions = {}): Plugin {\r\n const {\r\n chunkSizeWarning = true,\r\n maxChunkSize = 250,\r\n } = options;\r\n \r\n const chunks: ChunkInfo[] = [];\r\n \r\n return {\r\n name: 'olova-chunk-analysis',\r\n apply: 'build',\r\n \r\n generateBundle(_options, bundle) {\r\n for (const [fileName, chunk] of Object.entries(bundle)) {\r\n if (chunk.type === 'chunk') {\r\n const sizeKB = Buffer.byteLength(chunk.code, 'utf8') / 1024;\r\n \r\n // Determine chunk type\r\n let type: ChunkInfo['type'] = 'other';\r\n if (fileName.includes('vendor')) type = 'vendor';\r\n else if (fileName.includes('framework')) type = 'framework';\r\n else if (fileName.includes('common')) type = 'common';\r\n else if (fileName.includes('page-')) type = 'route';\r\n \r\n chunks.push({\r\n name: fileName,\r\n size: Math.round(sizeKB * 100) / 100,\r\n isEntry: chunk.isEntry,\r\n type,\r\n });\r\n \r\n // Warn about large chunks\r\n if (chunkSizeWarning && sizeKB > maxChunkSize) {\r\n logger.warn(`Chunk \"${fileName}\" is ${sizeKB.toFixed(2)}KB (exceeds ${maxChunkSize}KB limit)`);\r\n }\r\n }\r\n }\r\n },\r\n \r\n closeBundle() {\r\n if (chunks.length === 0) return;\r\n \r\n // Sort by size descending\r\n chunks.sort((a, b) => b.size - a.size);\r\n \r\n // Print chunk summary\r\n console.log('');\r\n logger.info('Bundle Analysis:');\r\n \r\n const typeGroups: Record<string, number> = {};\r\n let totalSize = 0;\r\n \r\n for (const chunk of chunks) {\r\n typeGroups[chunk.type] = (typeGroups[chunk.type] || 0) + chunk.size;\r\n totalSize += chunk.size;\r\n }\r\n \r\n console.log(` Vendor: ${(typeGroups.vendor || 0).toFixed(2)} KB`);\r\n console.log(` Framework: ${(typeGroups.framework || 0).toFixed(2)} KB`);\r\n console.log(` Common: ${(typeGroups.common || 0).toFixed(2)} KB`);\r\n console.log(` Routes: ${(typeGroups.route || 0).toFixed(2)} KB`);\r\n console.log(` Other: ${(typeGroups.other || 0).toFixed(2)} KB`);\r\n console.log(` ─────────────────────`);\r\n console.log(` Total: ${totalSize.toFixed(2)} KB`);\r\n console.log('');\r\n },\r\n };\r\n}\r\n\r\n// =============================================================================\r\n// PRELOAD HINTS GENERATOR\r\n// =============================================================================\r\n\r\nexport interface PreloadHint {\r\n href: string;\r\n as: 'script' | 'style' | 'font' | 'image';\r\n priority: 'critical' | 'high' | 'low';\r\n crossorigin?: boolean;\r\n}\r\n\r\n/**\r\n * Generate optimized preload hints for chunks\r\n */\r\nexport function generatePreloadHints(\r\n chunks: string[],\r\n entryChunk: string\r\n): PreloadHint[] {\r\n const hints: PreloadHint[] = [];\r\n \r\n // Entry chunk - critical priority\r\n hints.push({\r\n href: `/${entryChunk}`,\r\n as: 'script',\r\n priority: 'critical',\r\n });\r\n \r\n for (const chunk of chunks) {\r\n if (chunk === entryChunk) continue;\r\n \r\n // Vendor chunks - high priority (needed for hydration)\r\n if (chunk.includes('vendor')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'high',\r\n });\r\n }\r\n // Framework chunks - high priority\r\n else if (chunk.includes('framework')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'high',\r\n });\r\n }\r\n // Common chunks - high priority\r\n else if (chunk.includes('common')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'high',\r\n });\r\n }\r\n // Route chunks - low priority (prefetch for navigation)\r\n else if (chunk.includes('page-')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'low',\r\n });\r\n }\r\n }\r\n \r\n return hints;\r\n}\r\n\r\n/**\r\n * Generate HTML preload/prefetch tags from hints\r\n */\r\nexport function generatePreloadTags(hints: PreloadHint[]): string {\r\n return hints\r\n .map((hint) => {\r\n const rel = hint.priority === 'low' ? 'prefetch' : 'modulepreload';\r\n const crossorigin = hint.crossorigin ? ' crossorigin' : '';\r\n return `<link rel=\"${rel}\" href=\"${hint.href}\"${crossorigin}>`;\r\n })\r\n .join('');\r\n}\r\n\r\n// =============================================================================\r\n// UTILITY FUNCTIONS\r\n// =============================================================================\r\n\r\n/**\r\n * Recursively find files to compress\r\n */\r\nasync function findFilesToCompress(\r\n dir: string,\r\n extensions: string[]\r\n): Promise<string[]> {\r\n const files: string[] = [];\r\n \r\n try {\r\n const entries = await fs.readdir(dir, { withFileTypes: true });\r\n \r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n \r\n if (entry.isDirectory()) {\r\n files.push(...await findFilesToCompress(fullPath, extensions));\r\n } else if (entry.isFile()) {\r\n const ext = path.extname(entry.name).slice(1);\r\n if (extensions.includes(ext)) {\r\n files.push(fullPath);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // Directory doesn't exist or can't be read\r\n }\r\n \r\n return files;\r\n}\r\n\r\n/**\r\n * Calculate gzip size of content\r\n */\r\nexport async function getGzipSize(content: string | Buffer): Promise<number> {\r\n const buffer = typeof content === 'string' ? Buffer.from(content) : content;\r\n const compressed = await gzip(buffer);\r\n return compressed.length;\r\n}\r\n\r\n/**\r\n * Format bytes to human readable size\r\n */\r\nexport function formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\r\n}\r\n\r\n// =============================================================================\r\n// COMBINED PERFORMANCE PLUGIN\r\n// =============================================================================\r\n\r\n/**\r\n * Main performance plugin that combines all optimizations\r\n */\r\nexport function olovaPerformance(options: PerformanceOptions = {}): Plugin[] {\r\n return [\r\n chunkAnalysisPlugin(options),\r\n compressionPlugin(options),\r\n ];\r\n}\r\n\r\nexport default olovaPerformance;\r\n","/**\r\n * Olova Flight Format Hydration System\r\n * Implements \"Flight\" format for efficient client hydration (Next.js style)\r\n */\r\n\r\nimport type {\r\n AssetsChunkData,\r\n HintsChunkData,\r\n MetadataChunkData,\r\n OlovaGlobal,\r\n OlovaHydrationData,\r\n ParsedFlightData,\r\n RouteChunkData,\r\n StateChunkData,\r\n TreeChunkData,\r\n} 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\nfunction 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 * Generate a page name from route path\r\n */\r\nfunction generatePageName(route: string): string {\r\n if (route === '/') return 'HomePage';\r\n return route\r\n .slice(1)\r\n .split('/')\r\n .filter(Boolean)\r\n .map(s => s.charAt(0).toUpperCase() + s.slice(1).replace(/[^a-zA-Z0-9]/g, ''))\r\n .join('') + 'Page';\r\n}\r\n\r\n/**\r\n * Generate route pattern from path\r\n */\r\nfunction generatePattern(route: string): string {\r\n if (route === '/') return '/';\r\n return route\r\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, '*')\r\n .replace(/\\[([^\\]]+)\\]/g, ':$1');\r\n}\r\n\r\n/**\r\n * Generate the Flight runtime script (Next.js style)\r\n * This script processes the flight data array and hydrates the app\r\n */\r\nfunction generateFlightRuntime(): string {\r\n return `<script>\r\n(function(){\r\n var f=self.__olova_f||[];\r\n var p={R:'$route',M:'$meta',T:'$tree',D:'$schema',A:'$assets',H:'$hints',S:'$state',L:'$loader',Q:'$query'};\r\n var g=self.$OLOVA={};\r\n function h(c){var t=c[1],d=c[2];if(t==='E')return;var k=p[t];if(k){if(t==='L'||t==='Q'){g[k]={data:d,timestamp:c[3]||Date.now()}}else{g[k]=d}}}\r\n for(var i=0;i<f.length;i++)h(f[i]);\r\n self.__olova_f={push:h,length:0};\r\n})();\r\n</script>`;\r\n}\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 (Next.js style)\r\n */\r\nexport function generateOlovaHydration(data: OlovaHydrationData, buildId: string): string {\r\n const meta = (data.metadata || {}) as Record<string, unknown>;\r\n const chunks: string[] = [];\r\n\r\n // ==========================================================================\r\n // CHUNK 0: Route Information\r\n // ==========================================================================\r\n const routeData: RouteChunkData = {\r\n path: data.route,\r\n params: data.params || {},\r\n pattern: generatePattern(data.route),\r\n isStatic: data.isStatic ?? true,\r\n buildId: buildId\r\n };\r\n chunks.push(`<script>(self.__olova_f=self.__olova_f||[]).push([0,\"R\",${safeStringify(routeData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 1: Metadata\r\n // ==========================================================================\r\n const metadataData: MetadataChunkData = {\r\n title: (meta.title as string) || 'Olova App',\r\n description: (meta.description as string) || '',\r\n keywords: Array.isArray(meta.keywords) ? meta.keywords : [],\r\n robots: (meta.robots as string) || 'index, follow',\r\n canonical: (meta.canonical as string) || null,\r\n og: {\r\n type: 'website',\r\n locale: 'en_US',\r\n ...((meta.openGraph as object) || {})\r\n },\r\n twitter: {\r\n card: 'summary_large_image',\r\n ...((meta.twitter as object) || {})\r\n }\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([1,\"M\",${safeStringify(metadataData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 2: Component Tree\r\n // ==========================================================================\r\n const treeData: TreeChunkData = {\r\n layout: 'RootLayout',\r\n page: generatePageName(data.route),\r\n template: null,\r\n loading: null,\r\n error: null,\r\n notFound: null\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([2,\"T\",${safeStringify(treeData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 3: Assets\r\n // ==========================================================================\r\n const assetsData: AssetsChunkData = {\r\n chunks: data.chunks || [],\r\n styles: [],\r\n prefetch: (data.chunks || []).slice(0, 5)\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([3,\"A\",${safeStringify(assetsData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 4: Resource Hints\r\n // ==========================================================================\r\n const hintsData: HintsChunkData = {\r\n dnsPrefetch: ['fonts.googleapis.com', 'fonts.gstatic.com'],\r\n preconnect: ['https://fonts.googleapis.com', 'https://fonts.gstatic.com'],\r\n modulePreload: (data.chunks || []).slice(0, 3)\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([4,\"H\",${safeStringify(hintsData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 5: Hydration State\r\n // ==========================================================================\r\n const stateData: StateChunkData = {\r\n hydrated: false,\r\n streaming: false,\r\n ready: true,\r\n timestamp: Date.now(),\r\n version: '1.0.0',\r\n buildId: buildId\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([5,\"S\",${safeStringify(stateData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 6: Loader Data (if present)\r\n // ==========================================================================\r\n if (data.loaderData) {\r\n chunks.push(`<script>(self.__olova_f).push([6,\"L\",${safeStringify(data.loaderData)},${Date.now()}])</script>`);\r\n }\r\n\r\n // ==========================================================================\r\n // CHUNK 7: Query State (if present)\r\n // ==========================================================================\r\n if (data.queryState) {\r\n chunks.push(`<script>(self.__olova_f).push([7,\"Q\",${safeStringify(data.queryState)},${Date.now()}])</script>`);\r\n }\r\n\r\n // ==========================================================================\r\n // CHUNK 8: END MARKER\r\n // ==========================================================================\r\n chunks.push(`<script>(self.__olova_f).push([8,\"E\",null])</script>`);\r\n\r\n // ==========================================================================\r\n // FLIGHT RUNTIME: Process all chunks into $OLOVA global (Next.js style)\r\n // ==========================================================================\r\n chunks.push(generateFlightRuntime());\r\n\r\n return chunks.join('');\r\n}\r\n\r\n/**\r\n * Generate JSON-LD structured data script for SEO\r\n * This is injected into <head> for search engine crawlers\r\n */\r\nexport function generateJsonLd(data: OlovaHydrationData): string {\r\n const meta = (data.metadata || {}) as Record<string, unknown>;\r\n\r\n const jsonLd = {\r\n '@context': 'https://schema.org',\r\n '@graph': [\r\n {\r\n '@type': 'WebPage',\r\n '@id': data.route,\r\n name: (meta.title as string) || 'Olova App',\r\n description: (meta.description as string) || '',\r\n url: data.route,\r\n isPartOf: {\r\n '@type': 'WebSite',\r\n name: 'Olova App'\r\n }\r\n },\r\n {\r\n '@type': 'BreadcrumbList',\r\n itemListElement: data.route.split('/').filter(Boolean).map((segment, index, arr) => ({\r\n '@type': 'ListItem',\r\n position: index + 1,\r\n name: segment.charAt(0).toUpperCase() + segment.slice(1),\r\n item: '/' + arr.slice(0, index + 1).join('/')\r\n }))\r\n }\r\n ]\r\n };\r\n\r\n // Add custom schemas from page metadata\r\n if (meta.schema) {\r\n const graph = jsonLd['@graph'] as unknown[];\r\n if (Array.isArray(meta.schema)) {\r\n graph.push(...meta.schema);\r\n } else {\r\n graph.push(meta.schema);\r\n }\r\n }\r\n\r\n return `<script type=\"application/ld+json\">${JSON.stringify(jsonLd)}</script>`;\r\n}\r\n\r\n/**\r\n * Generate resource hint link tags for the head\r\n */\r\nexport function generateResourceHints(data: OlovaHydrationData): string {\r\n const hints: string[] = [];\r\n \r\n // DNS Prefetch for common external resources\r\n hints.push(`<link rel=\"dns-prefetch\" href=\"//fonts.googleapis.com\">`);\r\n hints.push(`<link rel=\"dns-prefetch\" href=\"//fonts.gstatic.com\">`);\r\n \r\n // Preconnect to critical origins\r\n hints.push(`<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" crossorigin>`);\r\n hints.push(`<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>`);\r\n \r\n // Module preload for chunks\r\n if (data.chunks) {\r\n for (const chunk of data.chunks.slice(0, 3)) {\r\n hints.push(`<link rel=\"modulepreload\" href=\"/${chunk}\">`);\r\n }\r\n }\r\n \r\n return hints.join('');\r\n}\r\n\r\n/**\r\n * Parse flight data from the page (client-side utility)\r\n * Use this to access hydration data in your components\r\n */\r\nexport function parseFlightData(): ParsedFlightData | null {\r\n // Check if we're in a browser environment\r\n if (typeof globalThis === 'undefined' || typeof (globalThis as Record<string, unknown>).document === 'undefined') {\r\n return null;\r\n }\r\n\r\n const flightArray = ((globalThis as Record<string, unknown>).__olova_f) as unknown[] | undefined;\r\n if (!flightArray) return null;\r\n\r\n const result: ParsedFlightData = {};\r\n const typeMap: Record<string, keyof ParsedFlightData | '$end'> = {\r\n 'M': '$meta',\r\n 'T': '$tree',\r\n 'R': '$route',\r\n 'A': '$assets',\r\n 'S': '$state',\r\n 'D': '$schema',\r\n 'H': '$hints',\r\n 'L': '$loader',\r\n 'Q': '$query',\r\n 'E': '$end'\r\n };\r\n\r\n for (const chunk of flightArray) {\r\n if (Array.isArray(chunk) && chunk.length >= 3) {\r\n const [_index, type, data] = chunk;\r\n const key = typeMap[String(type)];\r\n if (key && key !== '$end') {\r\n (result as Record<string, unknown>)[key] = data;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Get the global $OLOVA object (client-side)\r\n */\r\nexport function getOlovaGlobal(): OlovaGlobal | null {\r\n if (typeof globalThis === 'undefined') return null;\r\n return ((globalThis as Record<string, unknown>).$OLOVA as OlovaGlobal) || null;\r\n}\r\n\r\n/**\r\n * Generate a unique build ID\r\n */\r\nexport function generateBuildId(): string {\r\n const timestamp = Date.now().toString(36);\r\n const random = Math.random().toString(36).substring(2, 8);\r\n return `${timestamp}-${random}`;\r\n}\r\n\r\n// Re-export types for convenience\r\nexport type {\r\n FlightChunk, FlightDataType, OlovaGlobal, OlovaHydrationData, PageMetadata, ParsedFlightData\r\n} from './types.js';\r\n\r\n","import { existsSync } from \"node:fs\";\r\nimport fs from \"node:fs/promises\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\r\nimport { olovaRouter } from \"./src/plugin\";\r\nimport { build, type Plugin, type ResolvedConfig } from \"vite\";\r\nimport logger from \"./src/logger\";\r\nimport type { PerformanceOptions } from \"./src/performance\";\r\nimport {\r\n createManualChunks,\r\n generatePreloadHints,\r\n generatePreloadTags,\r\n olovaPerformance,\r\n} from \"./src/performance\";\r\n\r\n// =============================================================================\r\n// FLIGHT HYDRATION - Import from shared module (no duplication)\r\n// =============================================================================\r\n\r\nimport {\r\n generateBuildId,\r\n generateJsonLd,\r\n generateOlovaHydration,\r\n generateResourceHints,\r\n type OlovaHydrationData,\r\n} from './src/hydration';\r\n\r\n// =============================================================================\r\n// PLUGIN INTERFACE\r\n// =============================================================================\r\n\r\nexport interface OlovaOptions {\r\n /**\r\n * Static paths to pre-render at build time\r\n */\r\n staticPaths?: string[];\r\n\r\n /**\r\n * Performance optimization options\r\n */\r\n performance?: PerformanceOptions & {\r\n /**\r\n * Enable all performance optimizations\r\n * @default true\r\n */\r\n enabled?: boolean;\r\n };\r\n\r\n /**\r\n * Package name for router imports in generated route.tree.ts\r\n * @default 'olovastart'\r\n */\r\n packageName?: string;\r\n}\r\n\r\nexport function olova(options: OlovaOptions = {}): any {\r\n const virtualModuleId = \"virtual:olova-entry\";\r\n const serverVirtualModuleId = \"virtual:olova-server-entry\";\r\n const workerVirtualModuleId = \"virtual:olova-worker-entry\";\r\n const appVirtualModuleId = \"virtual:olova-app\";\r\n const resolvedAppVirtualModuleId = \"\\0\" + appVirtualModuleId;\r\n let config: ResolvedConfig;\r\n\r\n // Minimal shell - just the placeholder.\r\n // We'll prepend DOCTYPE manually to avoid duplication if app renders it (though app usually shouldn't).\r\n const htmlContent = `<!--app-html-->`;\r\n\r\n // Simple HTML minifier: removes whitespace between tags, trimming, and newlines\r\n const minifyHtml = (html: string) => {\r\n return html\r\n .replace(/>\\s+</g, \"><\")\r\n .replace(/\\s{2,}/g, \" \")\r\n .replace(/<!--[\\s\\S]*?-->/g, \"\") // remove comments\r\n .trim();\r\n };\r\n\r\n return [\r\n olovaRouter({ packageName: options.packageName }),\r\n {\r\n name: \"vite-plugin-olova\",\r\n config(userConfig, { isSsrBuild }) {\r\n // All optimizations are enabled by default\r\n const perfEnabled = options.performance?.enabled !== false;\r\n\r\n // Skip performance optimizations for SSR builds\r\n if (isSsrBuild) {\r\n return {\r\n build: {\r\n rollupOptions: {\r\n input: userConfig.build?.rollupOptions?.input || virtualModuleId,\r\n output: {\r\n // Simple output for SSR\r\n entryFileNames: 'index.js',\r\n chunkFileNames: '[name].js',\r\n assetFileNames: '[name].[ext]',\r\n format: 'esm',\r\n manualChunks: undefined,\r\n },\r\n },\r\n },\r\n };\r\n }\r\n\r\n // Full optimization config for client builds (all automatic!)\r\n const buildConfig: any = {\r\n // Output directory for assets\r\n assetsDir: 'assets/_olova',\r\n // Report compressed size in build output\r\n reportCompressedSize: true,\r\n rollupOptions: {\r\n input: userConfig.build?.rollupOptions?.input || virtualModuleId,\r\n output: {\r\n // Optimized chunk naming for caching\r\n chunkFileNames: 'assets/_olova/[name]-[hash].js',\r\n entryFileNames: 'assets/_olova/[name]-[hash].js',\r\n assetFileNames: 'assets/_olova/[name]-[hash].[ext]',\r\n // Enable smart code splitting\r\n ...(perfEnabled && {\r\n manualChunks: createManualChunks(),\r\n }),\r\n },\r\n },\r\n // Increase warning limit since we're doing smart chunking\r\n chunkSizeWarningLimit: 500,\r\n // Inline small assets (< 4KB)\r\n assetsInlineLimit: 4096,\r\n // Enable terser minification for smaller bundles\r\n minify: 'terser',\r\n terserOptions: {\r\n compress: {\r\n // Aggressive optimizations for production\r\n drop_console: false, // Keep console for debugging\r\n drop_debugger: true,\r\n pure_funcs: ['console.debug'],\r\n passes: 2,\r\n },\r\n mangle: {\r\n properties: false,\r\n },\r\n format: {\r\n comments: false,\r\n },\r\n },\r\n // Disable source maps for smaller builds\r\n sourcemap: false,\r\n // CSS code splitting\r\n cssCodeSplit: true,\r\n // Target modern browsers (smaller bundles)\r\n target: 'es2020',\r\n };\r\n\r\n return {\r\n build: buildConfig,\r\n // Optimize deps for faster dev startup\r\n optimizeDeps: {\r\n include: ['react', 'react-dom'],\r\n exclude: ['olova'],\r\n },\r\n // SSR options\r\n ssr: {\r\n noExternal: ['olova'],\r\n },\r\n // esbuild optimizations\r\n esbuild: {\r\n treeShaking: true,\r\n legalComments: 'none',\r\n },\r\n // Preview server configuration (for testing production builds)\r\n preview: {\r\n headers: {\r\n // Long-term caching for static assets\r\n 'Cache-Control': 'public, max-age=31536000',\r\n },\r\n },\r\n };\r\n },\r\n async configResolved(resolvedConfig) {\r\n config = resolvedConfig;\r\n },\r\n async resolveId(id) {\r\n if (id === virtualModuleId || id === serverVirtualModuleId || id === workerVirtualModuleId) {\r\n const isServer = id === serverVirtualModuleId;\r\n const isWorker = id === workerVirtualModuleId;\r\n const fileName = isWorker ? \"entry-worker\" : (isServer ? \"entry-server\" : \"main\");\r\n\r\n // 1. Try to find local project override first\r\n const possibleLocalPaths = [\r\n path.resolve(config.root, `src/${fileName}.tsx`),\r\n path.resolve(config.root, `src/${fileName}.ts`),\r\n path.resolve(config.root, `${fileName}.tsx`),\r\n path.resolve(config.root, `plugins/${fileName}.tsx`),\r\n ];\r\n\r\n for (const p of possibleLocalPaths) {\r\n if (existsSync(p)) return p;\r\n }\r\n\r\n // 2. Try to resolve via standard module resolution (ensures deduplication)\r\n const exportName = isWorker ? 'olova/entry-worker' : (isServer ? 'olova/entry-server' : 'olova/main');\r\n try {\r\n const resolved = await this.resolve(exportName, undefined, { skipSelf: true });\r\n if (resolved && !resolved.external) {\r\n return resolved.id;\r\n }\r\n } catch (e) {\r\n // Resolution failed, continue to fallback\r\n }\r\n\r\n // 3. Fallback to package's own entry (bundled or source) - mostly for local dev of the plugin\r\n const pkgDir = path.dirname(fileURLToPath(import.meta.url));\r\n const possiblePkgPaths = [\r\n path.resolve(pkgDir, `dist/${fileName}.js`),\r\n path.resolve(pkgDir, `${fileName}.js`),\r\n path.resolve(pkgDir, `${fileName}.mjs`),\r\n path.resolve(pkgDir, `${fileName}.ts`),\r\n path.resolve(pkgDir, `${fileName}.tsx`),\r\n path.resolve(pkgDir, `src/${fileName}.tsx`),\r\n path.resolve(pkgDir, `src/${fileName}.ts`),\r\n // If running from dist, check parent directories\r\n path.resolve(pkgDir, '..', `dist/${fileName}.js`),\r\n path.resolve(pkgDir, '..', `${fileName}.js`),\r\n path.resolve(pkgDir, '..', `${fileName}.tsx`),\r\n path.resolve(pkgDir, '..', `src/${fileName}.tsx`),\r\n ];\r\n\r\n for (const p of possiblePkgPaths) {\r\n if (existsSync(p)) return p;\r\n }\r\n }\r\n if (id === appVirtualModuleId) {\r\n return resolvedAppVirtualModuleId;\r\n }\r\n return null;\r\n },\r\n load(id) {\r\n if (id === resolvedAppVirtualModuleId) {\r\n // Generate virtual module that re-exports from the user's route.tree\r\n return `\r\n export { OlovaRouter, Outlet, routes, layouts, notFoundPages } from '@/route.tree';\r\n import '@/index.css';\r\n `;\r\n }\r\n return null;\r\n },\r\n configureServer(server) {\r\n // Generate a dev build ID that stays consistent during the dev session\r\n const devBuildId = generateBuildId();\r\n\r\n // Print startup banner\r\n logger.printBanner();\r\n\r\n // Print dev server info once ready\r\n\r\n\r\n // Delay printing to let Vite finish its own output first if needed, \r\n // or print immediately if we want to override. \r\n // Since Vite 7 prints its own banner, we might want to just print our info.\r\n // But user complained about the \"terminal looks bad\", so let's try to be clean.\r\n\r\n server.middlewares.use(async (req, res, next) => {\r\n const url = req.url?.split(\"?\")[0];\r\n if (\r\n url === \"/\" ||\r\n url === \"/index.html\" ||\r\n (req.headers.accept?.includes(\"text/html\") &&\r\n !url?.match(/\\.[a-z]+$/))\r\n ) {\r\n try {\r\n logger.printSSRRender(url || \"/\");\r\n let template = htmlContent;\r\n\r\n const { render } = await server.ssrLoadModule(\r\n serverVirtualModuleId,\r\n );\r\n const renderResult = await render(url || \"/\");\r\n // Handle both string return (legacy) and object return (new Flight format)\r\n const appHtml = typeof renderResult === 'string' ? renderResult : renderResult.html;\r\n const routeMetadata = typeof renderResult === 'string' ? {} : renderResult.metadata || {};\r\n const loaderData = typeof renderResult === 'string' ? undefined : renderResult.loaderData;\r\n const queryState = typeof renderResult === 'string' ? undefined : renderResult.queryState;\r\n\r\n let fullHtml = template.replace(\"<!--app-html-->\", appHtml);\r\n\r\n // =================================================================\r\n // Flight Hydration for Dev Server\r\n // =================================================================\r\n const hydrationData: OlovaHydrationData = {\r\n route: url || \"/\",\r\n params: {},\r\n metadata: routeMetadata,\r\n chunks: [], // Dev mode doesn't have pre-built chunks\r\n isStatic: false,\r\n loaderData: loaderData,\r\n queryState: queryState,\r\n };\r\n\r\n // Generate Flight hydration scripts\r\n const flightScripts = generateOlovaHydration(hydrationData, devBuildId);\r\n\r\n // Generate JSON-LD for SEO\r\n const jsonLdScript = generateJsonLd(hydrationData);\r\n\r\n // Generate resource hints (minimal in dev)\r\n const resourceHints = `<link rel=\"dns-prefetch\" href=\"//fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" crossorigin>`;\r\n\r\n // Inject JSON-LD and resource hints in head\r\n if (fullHtml.includes(\"</head>\")) {\r\n fullHtml = fullHtml.replace(\"</head>\", `${jsonLdScript}${resourceHints}</head>`);\r\n }\r\n\r\n // Inject Flight scripts and entry script for hydration\r\n if (fullHtml.includes(\"</body>\")) {\r\n fullHtml = fullHtml.replace(\r\n \"</body>\",\r\n `${flightScripts}<script type=\"module\" src=\"/@id/${virtualModuleId}\"></script></body>`,\r\n );\r\n } else {\r\n fullHtml += `${flightScripts}<script type=\"module\" src=\"/@id/${virtualModuleId}\"></script>`;\r\n }\r\n\r\n // Now apply Vite transforms.\r\n fullHtml = await server.transformIndexHtml(url || \"/\", fullHtml);\r\n\r\n // Prepend DOCTYPE if missing\r\n if (!fullHtml.trim().toLowerCase().startsWith(\"<!doctype html>\")) {\r\n fullHtml = `<!DOCTYPE html>${fullHtml}`;\r\n }\r\n\r\n res.statusCode = 200;\r\n res.setHeader(\"Content-Type\", \"text/html\");\r\n res.end(minifyHtml(fullHtml));\r\n return;\r\n } catch (e) {\r\n server.ssrFixStacktrace(e as Error);\r\n console.error(e);\r\n res.statusCode = 500;\r\n res.end((e as Error).stack);\r\n return;\r\n }\r\n }\r\n next();\r\n });\r\n },\r\n async writeBundle(_options, bundle) {\r\n if (config.command === \"serve\" || config.build.ssr) return;\r\n\r\n const buildStartTime = Date.now();\r\n logger.printBuildStart();\r\n const outDir = config.build.outDir; // dist/client\r\n const serverOutDir = path.resolve(config.root, \"dist/server\"); // Always dist/server\r\n\r\n // Find client entry chunk\r\n const clientEntry = Object.values(bundle).find(\r\n (chunk) =>\r\n chunk.type === \"chunk\" &&\r\n chunk.isEntry &&\r\n (chunk.facadeModuleId?.includes(\"main\") ||\r\n chunk.name === \"main\"),\r\n );\r\n const clientEntryFileName = clientEntry\r\n ? clientEntry.fileName\r\n : \"assets/index.js\";\r\n\r\n // Find CSS assets\r\n const cssAssets = Object.values(bundle).filter(\r\n (chunk) => chunk.type === \"asset\" && chunk.fileName.endsWith(\".css\"),\r\n );\r\n const cssLinks = cssAssets\r\n .map(\r\n (css) =>\r\n `<link rel=\"stylesheet\" crossorigin href=\"/${css.fileName}\">`,\r\n )\r\n .join(\"\");\r\n\r\n // 1. Build Server Bundle\r\n // We use configFile to get MDX and other plugins, but override build settings for SSR\r\n await build({\r\n configFile: config.configFile,\r\n root: config.root,\r\n build: {\r\n ssr: true,\r\n emptyOutDir: false,\r\n outDir: serverOutDir,\r\n minify: false, // Keep readable for debugging\r\n rollupOptions: {\r\n input: { index: serverVirtualModuleId },\r\n output: {\r\n entryFileNames: \"index.js\",\r\n chunkFileNames: \"[name].js\",\r\n assetFileNames: \"[name].[ext]\",\r\n format: \"esm\",\r\n // Explicitly set to undefined to prevent client-side chunking config\r\n manualChunks: undefined,\r\n },\r\n },\r\n },\r\n logLevel: \"error\",\r\n });\r\n\r\n // 2. Load Server Entry to get routes\r\n const serverEntryPath = path.resolve(serverOutDir, \"index.js\");\r\n const serverEntryUrl = pathToFileURL(serverEntryPath).toString();\r\n // Initial import to get routes\r\n const { routes } = await import(serverEntryUrl);\r\n\r\n // 3. Generate Pages\r\n const paths = [\"/\"];\r\n\r\n function extractPaths(routesArr: any[]) {\r\n routesArr.forEach((r) => {\r\n if (r.path && !r.path.includes(\"*\") && !r.path.includes(\":\")) {\r\n paths.push(r.path);\r\n }\r\n });\r\n }\r\n if (Array.isArray(routes)) extractPaths(routes);\r\n\r\n // 3b. Expand dynamic routes via getStaticPaths()\r\n if (Array.isArray(routes)) {\r\n for (const r of routes) {\r\n const isDynamic = r.path.includes(\":\") || r.path.includes(\"*\");\r\n if (r.getStaticPaths && isDynamic) {\r\n try {\r\n const staticPaths = await r.getStaticPaths();\r\n if (Array.isArray(staticPaths)) {\r\n for (const entry of staticPaths) {\r\n // entry = { params: { id: '1' } } or { params: { slug: 'hello/world' } }\r\n let expandedPath = r.path;\r\n if (entry.params) {\r\n for (const [key, value] of Object.entries(entry.params)) {\r\n expandedPath = expandedPath.replace(`:${key}`, value as string);\r\n expandedPath = expandedPath.replace('*', value as string);\r\n }\r\n }\r\n paths.push(expandedPath);\r\n }\r\n logger.info(`getStaticPaths for ${r.path}: ${staticPaths.length} paths expanded`);\r\n }\r\n } catch (e) {\r\n logger.warn(`getStaticPaths() failed for ${r.path}: ${(e as Error).message}`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Add user-provided static paths\r\n if (options.staticPaths) {\r\n options.staticPaths.forEach((p) => paths.push(p));\r\n }\r\n\r\n const uniquePaths = [...new Set(paths)];\r\n\r\n // Generate a unique build ID for this build\r\n const buildId = generateBuildId();\r\n logger.printSSGStart(buildId);\r\n\r\n // Print route table\r\n const routeInfo = uniquePaths.map(p => ({\r\n path: p,\r\n type: (p.includes(':') || p.includes('*') ? 'dynamic' : 'static') as 'static' | 'dynamic'\r\n }));\r\n logger.printRoutes(routeInfo);\r\n\r\n logger.printFlightInfo();\r\n\r\n // Collect all JS chunks for prefetching\r\n const jsChunks = Object.values(bundle)\r\n .filter((chunk) => chunk.type === \"chunk\" && chunk.fileName.endsWith(\".js\"))\r\n .map((chunk) => chunk.fileName);\r\n\r\n let successCount = 0;\r\n let failCount = 0;\r\n\r\n for (const p of uniquePaths) {\r\n try {\r\n // Update window location for the fresh import to pick up\r\n if (typeof (globalThis as any).window !== \"undefined\") {\r\n (globalThis as any).window.location.pathname = p;\r\n }\r\n\r\n // FORCE RE-IMPORT for every page to ensure clean state (fresh Router/History instance)\r\n const cacheBuster = `?t=${Date.now()}-${Math.random()}`;\r\n // We destructured render from the fresh module\r\n const { render } = await import(serverEntryUrl + cacheBuster);\r\n\r\n // Render returns { html, metadata, route, loaderData, queryState }\r\n const renderResult = await render(p);\r\n const appHtml = typeof renderResult === 'string' ? renderResult : renderResult.html;\r\n const routeMetadata = typeof renderResult === 'string' ? {} : renderResult.metadata || {};\r\n const loaderData = typeof renderResult === 'string' ? undefined : renderResult.loaderData;\r\n const queryState = typeof renderResult === 'string' ? undefined : renderResult.queryState;\r\n\r\n let html = htmlContent.replace(\"<!--app-html-->\", appHtml);\r\n\r\n // Generate smart preload hints based on chunk priority\r\n const preloadHints = generatePreloadHints(jsChunks, clientEntryFileName);\r\n const preloadTags = generatePreloadTags(preloadHints);\r\n\r\n // Prepare hydration data for this page\r\n const hydrationData: OlovaHydrationData = {\r\n route: p,\r\n params: {},\r\n metadata: routeMetadata,\r\n chunks: jsChunks,\r\n isStatic: true,\r\n loaderData: loaderData,\r\n queryState: queryState,\r\n };\r\n\r\n // Generate Flight hydration scripts\r\n const flightScripts = generateOlovaHydration(hydrationData, buildId);\r\n\r\n // Generate JSON-LD for SEO\r\n const jsonLdScript = generateJsonLd(hydrationData);\r\n\r\n // Generate resource hints (DNS prefetch, preconnect)\r\n const resourceHints = generateResourceHints(hydrationData);\r\n\r\n // Inject JSON-LD, resource hints, CSS, and smart preload tags at end of head\r\n if (html.includes(\"</head>\")) {\r\n html = html.replace(\"</head>\", `${jsonLdScript}${resourceHints}${cssLinks}${preloadTags}</head>`);\r\n }\r\n\r\n // Inject Flight scripts and main script at end of body\r\n if (html.includes(\"</body>\")) {\r\n html = html.replace(\r\n \"</body>\",\r\n `${flightScripts}<script type=\"module\" src=\"/${clientEntryFileName}\"></script></body>`,\r\n );\r\n } else {\r\n // Fallback if no body tag found\r\n html += `${flightScripts}<script type=\"module\" src=\"/${clientEntryFileName}\"></script>`;\r\n }\r\n\r\n // Prepend DOCTYPE if missing\r\n if (!html.trim().toLowerCase().startsWith(\"<!doctype html>\")) {\r\n html = `<!DOCTYPE html>${html}`;\r\n }\r\n\r\n const itemPath =\r\n p === \"/\" ? \"index.html\" : `${p.substring(1)}/index.html`;\r\n const finalPath = path.resolve(outDir, itemPath);\r\n await fs.mkdir(path.dirname(finalPath), { recursive: true });\r\n await fs.writeFile(finalPath, minifyHtml(html));\r\n logger.printPageGenerated(itemPath, true);\r\n successCount++;\r\n } catch (e) {\r\n logger.printPageError(p, (e as Error).message);\r\n failCount++;\r\n }\r\n }\r\n\r\n // =====================================================================\r\n // Generate 404.html for CDN compatibility (Cloudflare, Vercel, Netlify)\r\n // =====================================================================\r\n try {\r\n const notFoundPath = '/__olova_404__';\r\n if (typeof (globalThis as any).window !== \"undefined\") {\r\n (globalThis as any).window.location.pathname = notFoundPath;\r\n }\r\n const cacheBuster404 = `?t=${Date.now()}-${Math.random()}`;\r\n const { render: render404 } = await import(serverEntryUrl + cacheBuster404);\r\n const result404 = await render404(notFoundPath);\r\n const html404Content = typeof result404 === 'string' ? result404 : result404.html;\r\n\r\n let html404 = htmlContent.replace(\"<!--app-html-->\", html404Content);\r\n\r\n // Add basic CSS and entry script\r\n const preloadHints404 = generatePreloadHints(jsChunks, clientEntryFileName);\r\n const preloadTags404 = generatePreloadTags(preloadHints404);\r\n\r\n const hydrationData404: OlovaHydrationData = {\r\n route: '/404',\r\n params: {},\r\n metadata: { title: '404 - Page Not Found' },\r\n chunks: jsChunks,\r\n isStatic: true,\r\n };\r\n\r\n const flightScripts404 = generateOlovaHydration(hydrationData404, buildId);\r\n const jsonLd404 = generateJsonLd(hydrationData404);\r\n const resourceHints404 = generateResourceHints(hydrationData404);\r\n\r\n if (html404.includes(\"</head>\")) {\r\n html404 = html404.replace(\"</head>\", `${jsonLd404}${resourceHints404}${cssLinks}${preloadTags404}</head>`);\r\n }\r\n if (html404.includes(\"</body>\")) {\r\n html404 = html404.replace(\"</body>\", `${flightScripts404}<script type=\"module\" src=\"/${clientEntryFileName}\"></script></body>`);\r\n } else {\r\n html404 += `${flightScripts404}<script type=\"module\" src=\"/${clientEntryFileName}\"></script>`;\r\n }\r\n if (!html404.trim().toLowerCase().startsWith(\"<!doctype html>\")) {\r\n html404 = `<!DOCTYPE html>${html404}`;\r\n }\r\n\r\n const notFoundFinalPath = path.resolve(outDir, '404.html');\r\n await fs.writeFile(notFoundFinalPath, minifyHtml(html404));\r\n logger.printPageGenerated('404.html', true);\r\n successCount++;\r\n } catch (e) {\r\n logger.warn(`Failed to generate 404.html: ${(e as Error).message}`);\r\n }\r\n\r\n // Cleanup server bundle (not needed for static serving)\r\n await fs.rm(serverOutDir, { recursive: true, force: true });\r\n\r\n const buildTime = Date.now() - buildStartTime;\r\n logger.printSSGComplete({\r\n totalPages: successCount,\r\n successPages: successCount,\r\n failedPages: failCount,\r\n buildTime\r\n });\r\n },\r\n } as Plugin,\r\n // Add performance optimization plugins\r\n ...(options.performance?.enabled !== false ? olovaPerformance(options.performance) : []),\r\n ];\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/cjs_shims.js","../src/utils/export.ts","../src/utils/naming.ts","../src/utils/path.ts","../src/generator/index.ts","../src/scanner/index.ts","../src/plugin/index.ts","../src/logger.ts","../src/performance.ts","../src/hydration/flight.ts","../olova.ts"],"names":["fs","path","getRouteName","error","mdx","pc","promisify","zlib","existsSync","fileURLToPath","build","pathToFileURL"],"mappings":"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","file":"olova.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import fs from 'fs';\r\n\r\nfunction extractBalancedBraces(content: string, startIndex: number): string | null {\r\n if (content[startIndex] !== '{') return null;\r\n let depth = 0;\r\n for (let i = startIndex; i < content.length; i++) {\r\n if (content[i] === '{') depth++;\r\n else if (content[i] === '}') {\r\n depth--;\r\n if (depth === 0) return content.substring(startIndex, i + 1);\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction extractMetadataSource(content: string): string | undefined {\r\n const match = content.match(/export\\s+(?:const|let|var)\\s+metadata\\s*(?::\\s*\\w+\\s*)?=\\s*/);\r\n if (!match || match.index === undefined) return undefined;\r\n const afterEquals = match.index + match[0].length;\r\n return extractBalancedBraces(content, afterEquals) || undefined;\r\n}\r\n\r\nexport function detectExportType(filePath: string): {\r\n hasDefault: boolean;\r\n namedExport: string | null;\r\n hasMetadata: boolean;\r\n metadataSource?: string;\r\n hasRoute: boolean;\r\n hasGetStaticPaths: boolean;\r\n hasLoader: boolean;\r\n} {\r\n try {\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n\r\n const hasMetadata = /export\\s+(?:const|let|var)\\s+metadata\\s*/.test(content) ||\r\n /export\\s*\\{\\s*metadata\\s*\\}/.test(content);\r\n\r\n const hasRoute = /export\\s+(?:const|let|var)\\s+route\\s*=/.test(content) ||\r\n /export\\s*\\{\\s*route\\s*\\}/.test(content);\r\n\r\n const hasGetStaticPaths = /export\\s+(?:async\\s+)?function\\s+getStaticPaths/.test(content) ||\r\n /export\\s+(?:const|let|var)\\s+getStaticPaths\\s*=/.test(content) ||\r\n /export\\s*\\{[^}]*getStaticPaths[^}]*\\}/.test(content);\r\n\r\n const hasLoader = /export\\s+(?:async\\s+)?function\\s+loader/.test(content) ||\r\n /export\\s+(?:const|let|var)\\s+loader\\s*=/.test(content) ||\r\n /export\\s*\\{[^}]*loader[^}]*\\}/.test(content);\r\n\r\n // Extract metadata source for inlining (works for any file type with object literal metadata)\r\n const metadataSource = extractMetadataSource(content);\r\n\r\n if (filePath.toLowerCase().endsWith('.mdx')) {\r\n return {\r\n hasDefault: true,\r\n namedExport: null,\r\n hasMetadata: !!metadataSource,\r\n hasRoute: false,\r\n hasGetStaticPaths: false,\r\n hasLoader: false,\r\n metadataSource\r\n };\r\n }\r\n\r\n if (/export\\s+default\\s+/.test(content)) {\r\n return { hasDefault: true, namedExport: null, hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n\r\n const namedMatch = content.match(/export\\s+(?:const|function|class)\\s+(\\w+)/);\r\n if (namedMatch) {\r\n return { hasDefault: false, namedExport: namedMatch[1], hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n\r\n const exportMatch = content.match(/export\\s*\\{\\s*(\\w+)(?:\\s+as\\s+default)?\\s*\\}/);\r\n if (exportMatch) {\r\n if (content.includes('as default')) {\r\n return { hasDefault: true, namedExport: null, hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n return { hasDefault: false, namedExport: exportMatch[1], hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n }\r\n\r\n return { hasDefault: false, namedExport: null, hasMetadata, metadataSource, hasRoute, hasGetStaticPaths, hasLoader };\r\n } catch {\r\n return { hasDefault: true, namedExport: null, hasMetadata: false, hasRoute: false, hasGetStaticPaths: false, hasLoader: false };\r\n }\r\n}\r\n","export function getRouteName(path: string): string {\r\n if (path === '/' || path === '') return 'Root';\r\n \r\n // Remove leading/trailing slashes and split\r\n const segments = path.replace(/^\\/|\\/$/g, '').split(/[\\\\/]/);\r\n \r\n const nameSegments = segments.map(segment => {\r\n let cleanSegment = segment;\r\n \r\n // Handle dynamic segments :id -> Id\r\n if (cleanSegment.startsWith(':')) {\r\n cleanSegment = cleanSegment.slice(1);\r\n }\r\n \r\n // Handle bracket syntax [id] -> Id, [...slug] -> Slug\r\n if (cleanSegment.startsWith('[') && cleanSegment.endsWith(']')) {\r\n cleanSegment = cleanSegment.slice(1, -1);\r\n if (cleanSegment.startsWith('...')) {\r\n cleanSegment = cleanSegment.slice(3);\r\n }\r\n }\r\n\r\n // Handle catch-all * -> All\r\n if (cleanSegment === '*') {\r\n return 'All';\r\n }\r\n\r\n // Skip 'index' segment for cleaner names\r\n if (cleanSegment.toLowerCase() === 'index') {\r\n return '';\r\n }\r\n\r\n // Handle route groups (auth) -> Auth or ignore? Usually people ignore path but name might want it?\r\n // User request is about \"main folder name\". (auth) is usually invisible.\r\n // Let's strip parens but keep name for uniqueness? Or just strip?\r\n // scanner often treats (group) as transparent for path, but for Naming it might be good to include or exclude.\r\n // Let's include it cleaned up to ensure Uniqueness (e.g. /app/(dashboard)/layout vs /app/(marketing)/layout).\r\n if (cleanSegment.startsWith('(') && cleanSegment.endsWith(')')) {\r\n cleanSegment = cleanSegment.slice(1, -1);\r\n }\r\n \r\n return capitalize(cleanSegment);\r\n });\r\n\r\n const finalName = nameSegments.join('');\r\n if (/^\\d/.test(finalName)) {\r\n return 'Page' + finalName;\r\n }\r\n return finalName;\r\n}\r\n\r\nfunction capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1).replace(/[^a-zA-Z0-9]/g, '');\r\n}\r\n","import type { DynamicSegmentResult } from '../types';\r\n\r\nexport function parseDynamicSegment(segment: string): DynamicSegmentResult & { isCatchAll: boolean } {\r\n if (segment.match(/^\\[\\.\\.\\.(.+)\\]$/)) {\r\n const paramName = segment.match(/^\\[\\.\\.\\.(.+)\\]$/)?.[1] || 'slug';\r\n return { isDynamic: true, paramName, isCatchAll: true };\r\n }\r\n\r\n const bracketMatch = segment.match(/^\\[(.+)\\]$/);\r\n if (bracketMatch) {\r\n return { isDynamic: true, paramName: bracketMatch[1], isCatchAll: false };\r\n }\r\n\r\n\r\n\r\n return { isDynamic: false, paramName: null, isCatchAll: false };\r\n}\r\n\r\nexport function isRouteGroup(segment: string): boolean {\r\n return /^\\(.+\\)$/.test(segment);\r\n}\r\n\r\nexport function pathToRoute(relativePath: string, sep: string) {\r\n const params: string[] = [];\r\n let hasCatchAll = false;\r\n const segments = relativePath.split(sep).filter(Boolean);\r\n\r\n const routeSegments = segments\r\n .filter(segment => !isRouteGroup(segment))\r\n .map(segment => {\r\n const { isDynamic, paramName, isCatchAll } = parseDynamicSegment(segment);\r\n if (isDynamic && paramName) {\r\n params.push(paramName);\r\n if (isCatchAll) {\r\n hasCatchAll = true;\r\n return `*`;\r\n }\r\n return `:${paramName}`;\r\n }\r\n return segment;\r\n });\r\n\r\n const routePath = '/' + routeSegments.join('/');\r\n return { routePath: routePath === '/' ? '/' : routePath, params, hasCatchAll };\r\n}\r\n","import path from 'path';\r\nimport type { ErrorWithExport, LayoutWithExport, LoadingWithExport, MiddlewareWithExport, NotFoundWithExport, RouteWithExport } from '../types';\r\nimport { getRouteName as getPascalCaseName } from '../utils';\r\n\r\nfunction stripImportExtension(filePath: string): string {\r\n return filePath.replace(/\\.tsx?$/, '');\r\n}\r\n\r\nfunction pathToRouteId(routePath: string): string {\r\n if (routePath === '/') return '_root';\r\n return routePath\r\n .replace(/^\\//, '')\r\n .replace(/\\//g, '_')\r\n .replace(/:/g, '$')\r\n .replace(/\\*/g, '$catchall');\r\n}\r\n\r\nfunction extractParamNames(routePath: string): string[] {\r\n const params: string[] = [];\r\n for (const segment of routePath.split('/')) {\r\n if (segment.startsWith(':')) params.push(segment.slice(1));\r\n else if (segment === '*') params.push('*');\r\n }\r\n return params;\r\n}\r\n\r\nfunction generateParamType(routePath: string): string | null {\r\n const params = extractParamNames(routePath);\r\n if (params.length === 0) return null;\r\n const fields = params.map(p =>\r\n p === '*' ? \"'*': string\" : `${p}: string`\r\n );\r\n return `{ ${fields.join('; ')} }`;\r\n}\r\n\r\nexport function generateRouteTree(\r\n routes: RouteWithExport[],\r\n notFoundPages: NotFoundWithExport[],\r\n layouts: LayoutWithExport[],\r\n loadingPages: LoadingWithExport[],\r\n errorPages: ErrorWithExport[],\r\n middlewares: MiddlewareWithExport[],\r\n srcDir: string,\r\n packageName: string = 'olovastart'\r\n): string {\r\n // Collision-free naming: track used names and append index on conflict\r\n const usedNames = new Map<string, number>();\r\n const getUniqueName = (baseName: string): string => {\r\n const count = usedNames.get(baseName) || 0;\r\n usedNames.set(baseName, count + 1);\r\n return count === 0 ? baseName : `${baseName}${count}`;\r\n };\r\n\r\n const getRouteName = (filePath: string, suffix: string = ''): string => {\r\n const relPath = path.relative(srcDir, filePath);\r\n const pathNoExt = relPath.replace(/\\.(tsx?|mdx)$/, '');\r\n\r\n if (pathNoExt === '' || pathNoExt === '.' || pathNoExt === 'index') {\r\n return getUniqueName('Root' + suffix);\r\n }\r\n\r\n const name = getPascalCaseName(pathNoExt);\r\n if (!name) return getUniqueName('Root' + suffix);\r\n\r\n if (suffix && name.toLowerCase().endsWith(suffix.toLowerCase())) {\r\n return getUniqueName(name);\r\n }\r\n\r\n return getUniqueName(name + suffix);\r\n };\r\n\r\n // Find closest matching entry by path prefix (most specific wins)\r\n const findClosestEntry = <T extends { path: string }>(routePath: string, entries: T[]): T | null => {\r\n let best: T | null = null;\r\n for (const entry of entries) {\r\n const ep = entry.path;\r\n if (ep === '/' || routePath === ep || routePath.startsWith(ep + '/')) {\r\n if (!best || ep.length > best.path.length) best = entry;\r\n }\r\n }\r\n return best;\r\n };\r\n\r\n // ── Imports ──────────────────────────────────────────────────────────────\r\n\r\n const routeNames: { moduleName: string; lazyName: string; eager: boolean }[] = [];\r\n\r\n const routeImports = routes.map((route) => {\r\n const relativePath = stripImportExtension('./app/' + path.relative(srcDir, route.component).replace(/\\\\/g, '/'));\r\n // ALWAYS eager import for SSG - lazy() doesn't work with renderToString\r\n const moduleName = getRouteName(route.component, 'RouteModule');\r\n const lazyName = getRouteName(route.component, 'Route');\r\n routeNames.push({ moduleName, lazyName, eager: true });\r\n return `import * as ${moduleName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const notFoundNames: string[] = [];\r\n const notFoundImports = notFoundPages.map((nf) => {\r\n const relativePath = stripImportExtension('./app/' + path.relative(srcDir, nf.filePath).replace(/\\\\/g, '/'));\r\n if (nf.hasMetadata) {\r\n const moduleName = getRouteName(nf.filePath, 'NotFoundModule');\r\n notFoundNames.push(moduleName);\r\n return `import * as ${moduleName} from '${relativePath}';`;\r\n }\r\n const importName = getRouteName(nf.filePath, 'NotFound');\r\n notFoundNames.push(importName);\r\n if (nf.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (nf.namedExport) return `import { ${nf.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const layoutNames: string[] = [];\r\n const layoutImports = layouts.map((layout) => {\r\n const relativePath = stripImportExtension('./app/' + path.relative(srcDir, layout.filePath).replace(/\\\\/g, '/'));\r\n if (layout.hasMetadata) {\r\n const moduleName = getRouteName(layout.filePath, 'LayoutModule');\r\n layoutNames.push(moduleName);\r\n return `import * as ${moduleName} from '${relativePath}';`;\r\n }\r\n const importName = getRouteName(layout.filePath, 'Layout');\r\n layoutNames.push(importName);\r\n if (layout.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (layout.namedExport) return `import { ${layout.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const loadingNames: string[] = [];\r\n const loadingImports = loadingPages.map((lp) => {\r\n const relativePath = stripImportExtension('./app/' + path.relative(srcDir, lp.filePath).replace(/\\\\/g, '/'));\r\n const importName = getRouteName(lp.filePath, 'Loading');\r\n loadingNames.push(importName);\r\n if (lp.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (lp.namedExport) return `import { ${lp.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const errorNames: string[] = [];\r\n const errorImports = errorPages.map((ep) => {\r\n const relativePath = stripImportExtension('./app/' + path.relative(srcDir, ep.filePath).replace(/\\\\/g, '/'));\r\n const importName = getRouteName(ep.filePath, 'Error');\r\n errorNames.push(importName);\r\n if (ep.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (ep.namedExport) return `import { ${ep.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n const middlewareNames: string[] = [];\r\n const middlewareImports = middlewares.map((mw) => {\r\n const relativePath = stripImportExtension('./app/' + path.relative(srcDir, mw.filePath).replace(/\\\\/g, '/'));\r\n const importName = getRouteName(mw.filePath, 'Middleware');\r\n middlewareNames.push(importName);\r\n if (mw.hasDefault) return `import ${importName} from '${relativePath}';`;\r\n if (mw.namedExport) return `import { ${mw.namedExport} as ${importName} } from '${relativePath}';`;\r\n return `import ${importName} from '${relativePath}';`;\r\n }).join('\\n');\r\n\r\n // ── Route objects ────────────────────────────────────────────────────────\r\n\r\n const routeObjects = routes.map((route, index) => {\r\n const { moduleName, lazyName, eager } = routeNames[index];\r\n const component = eager ? `${moduleName}.default` : lazyName;\r\n const routeId = pathToRouteId(route.path);\r\n\r\n const fields: string[] = [\r\n `id: '${routeId}'`,\r\n `path: '${route.path}'`,\r\n `component: ${component}`,\r\n ];\r\n\r\n if (route.params && route.params.length > 0) {\r\n fields.push(`params: [${route.params.map(p => `'${p}'`).join(', ')}]`);\r\n }\r\n\r\n if (route.metadataSource) {\r\n fields.push(`metadata: ${route.metadataSource}`);\r\n } else if (route.hasMetadata) {\r\n fields.push(`metadata: ${moduleName}.metadata`);\r\n }\r\n\r\n if (route.hasGetStaticPaths) {\r\n fields.push(`getStaticPaths: ${moduleName}.getStaticPaths`);\r\n }\r\n\r\n if (route.hasLoader) {\r\n fields.push(`loader: ${moduleName}.loader`);\r\n }\r\n\r\n const closestLoading = findClosestEntry(route.path, loadingPages);\r\n if (closestLoading) {\r\n const idx = loadingPages.indexOf(closestLoading);\r\n fields.push(`loading: ${loadingNames[idx]}`);\r\n }\r\n\r\n const closestError = findClosestEntry(route.path, errorPages);\r\n if (closestError) {\r\n const idx = errorPages.indexOf(closestError);\r\n fields.push(`error: ${errorNames[idx]}`);\r\n }\r\n\r\n return ` {\\n ${fields.join(',\\n ')}\\n }`;\r\n }).join(',\\n');\r\n\r\n // ── 404 pages ────────────────────────────────────────────────────────────\r\n\r\n const notFoundObjects = notFoundPages.map((nf, index) => {\r\n const name = notFoundNames[index];\r\n const isModule = nf.hasMetadata;\r\n const component = isModule ? `${name}.default` : name;\r\n const fields: string[] = [\r\n `pathPrefix: '${nf.pathPrefix}'`,\r\n `component: ${component}`,\r\n ];\r\n if (isModule) fields.push(`metadata: ${name}.metadata`);\r\n return ` {\\n ${fields.join(',\\n ')}\\n }`;\r\n }).join(',\\n');\r\n\r\n // ── Layouts with children ────────────────────────────────────────────────\r\n\r\n const layoutObjects = layouts.map((layout, index) => {\r\n const name = layoutNames[index];\r\n const isModule = layout.hasMetadata;\r\n const component = isModule ? `${name}.default` : name;\r\n\r\n // Populate children: routes whose path is within this layout's scope\r\n const childRouteIds = routes\r\n .filter(r => {\r\n if (layout.path === '/') return true;\r\n return r.path === layout.path || r.path.startsWith(layout.path + '/');\r\n })\r\n .map(r => `'${pathToRouteId(r.path)}'`);\r\n\r\n const fields: string[] = [\r\n `path: '${layout.path}'`,\r\n `layout: ${component}`,\r\n `children: [${childRouteIds.join(', ')}]`,\r\n ];\r\n if (isModule) fields.push(`metadata: ${name}.metadata`);\r\n return ` {\\n ${fields.join(',\\n ')}\\n }`;\r\n }).join(',\\n');\r\n\r\n // ── Middleware map ───────────────────────────────────────────────────────\r\n\r\n const middlewareEntries = middlewares.map((mw, index) => {\r\n return ` '${mw.path}': ${middlewareNames[index]}`;\r\n }).join(',\\n');\r\n\r\n // ── Type-safe param types per route ──────────────────────────────────────\r\n\r\n const routeParamTypes = routes\r\n .filter(r => r.params && r.params.length > 0)\r\n .map(r => {\r\n const paramType = generateParamType(r.path);\r\n return paramType ? ` '${r.path}': ${paramType};` : null;\r\n })\r\n .filter(Boolean)\r\n .join('\\n');\r\n\r\n // ── Type-safe route href builder type ────────────────────────────────────\r\n\r\n const routePaths = routes.length > 0 ? routes.map(r => `'${r.path}'`).join(' | ') : 'never';\r\n const routeIds = routes.length > 0 ? routes.map(r => `'${pathToRouteId(r.path)}'`).join(' | ') : 'never';\r\n\r\n // ── Route manifest ───────────────────────────────────────────────────────\r\n\r\n const manifestEntries = routes.map(r => {\r\n const paramNames = extractParamNames(r.path);\r\n const isDynamic = paramNames.length > 0;\r\n const hasCatchAll = r.path.includes('*');\r\n return ` '${pathToRouteId(r.path)}': { id: '${pathToRouteId(r.path)}', path: '${r.path}', params: [${paramNames.map(p => `'${p}'`).join(', ')}], isDynamic: ${isDynamic}, hasCatchAll: ${hasCatchAll}, hasMetadata: ${r.hasMetadata}, hasGetStaticPaths: ${r.hasGetStaticPaths} }`;\r\n }).join(',\\n');\r\n\r\n // ── Assemble output ──────────────────────────────────────────────────────\r\n\r\n const allImports = [\r\n routeImports, notFoundImports, layoutImports,\r\n loadingImports, errorImports, middlewareImports,\r\n ].filter(Boolean).join('\\n');\r\n\r\n return `/* prettier-ignore-start */\r\n\r\n/* eslint-disable */\r\n\r\n// @ts-nocheck\r\n\r\n// noinspection JSUnusedGlobalSymbols\r\n\r\n/**\r\n * This file was automatically generated by Olova Router.\r\n * DO NOT MODIFY IT BY HAND. Instead, modify the source route files\r\n * and regenerate this file by running the dev server or build command.\r\n *\r\n * @generated Olova Route Tree\r\n * @routes ${routes.length}\r\n * @layouts ${layouts.length}\r\n * @404s ${notFoundPages.length}\r\n * @loading ${loadingPages.length}\r\n * @errors ${errorPages.length}\r\n * @middleware ${middlewares.length}\r\n */\r\n\r\nimport { lazy } from 'react';\r\nimport {\r\n createLink,\r\n OlovaRouter,\r\n Outlet,\r\n redirect,\r\n useIsNavigating,\r\n useNavigationEvent,\r\n useParams,\r\n usePathname,\r\n useRedirect,\r\n useRouter,\r\n useSearchParams,\r\n useSelectedLayoutSegment,\r\n useSelectedLayoutSegments,\r\n} from '${packageName}/router';\r\n${allImports}\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Route Definitions\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport const routes = [\r\n${routeObjects}\r\n];\r\n\r\nexport const notFoundPages = [\r\n${notFoundObjects}\r\n];\r\n\r\nexport const layouts = [\r\n${layoutObjects}\r\n];\r\n${middlewares.length > 0 ? `\r\nexport const middlewares = {\r\n${middlewareEntries}\r\n};\r\n` : `\r\nexport const middlewares = {};\r\n`}\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Route Manifest (build-time introspection, sitemap generation, etc.)\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport const routeManifest = {\r\n${manifestEntries}\r\n} as const;\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Type-Safe Route Types\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport type RoutePaths = ${routePaths};\r\n\r\nexport type RouteIds = ${routeIds};\r\n\r\nexport interface RouteParams {\r\n${routeParamTypes || ' // No dynamic routes'}\r\n}\r\n\r\nexport type ParamsFor<P extends RoutePaths> = P extends keyof RouteParams ? RouteParams[P] : Record<string, never>;\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Route Lookup Helpers\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nconst _routeById = new Map(routes.map(r => [r.id, r]));\r\n\r\nexport function getRouteById(id: RouteIds) {\r\n return _routeById.get(id);\r\n}\r\n\r\nexport function getRouteByPath(path: RoutePaths) {\r\n return routes.find(r => r.path === path);\r\n}\r\n\r\n/* ────────────────────────────────────────────────────────────────────────────\r\n * Exports\r\n * ──────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport const Link = createLink<RoutePaths>();\r\n\r\nexport {\r\n OlovaRouter,\r\n Outlet,\r\n redirect,\r\n useIsNavigating,\r\n useNavigationEvent,\r\n useParams,\r\n usePathname,\r\n useRedirect,\r\n useRouter,\r\n useSearchParams,\r\n useSelectedLayoutSegment,\r\n useSelectedLayoutSegments,\r\n};\r\n\r\nexport type {\r\n NavigateOptions,\r\n NotFoundPageConfig,\r\n SearchParams,\r\n SetSearchParamsOptions,\r\n LayoutRoute,\r\n Metadata,\r\n} from '${packageName}/router';\r\n\r\n/* prettier-ignore-end */\r\n`;\r\n}\r\n","import fs from 'fs';\r\nimport path from 'path';\r\nimport type { ErrorEntry, LayoutEntry, LoadingEntry, MiddlewareEntry, NotFoundEntry, RouteEntry, ScanResult } from '../types';\r\nimport { isRouteGroup, pathToRoute } from '../utils';\r\n\r\nconst RESERVED_NAMES = new Set([\r\n 'page', 'layout', 'loading', 'error', 'not-found', 'middleware',\r\n 'route.tree',\r\n]);\r\n\r\nfunction scanDirectory(\r\n dir: string,\r\n rootDir: string,\r\n extensions: string[],\r\n routes: RouteEntry[],\r\n notFoundPages: NotFoundEntry[],\r\n layouts: LayoutEntry[],\r\n loadingPages: LoadingEntry[],\r\n errorPages: ErrorEntry[],\r\n middlewares: MiddlewareEntry[],\r\n isRoot = false\r\n) {\r\n if (!fs.existsSync(dir)) return;\r\n\r\n const entries = fs.readdirSync(dir, { withFileTypes: true });\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n\r\n if (entry.isDirectory()) {\r\n if (entry.name === 'node_modules' || entry.name === 'assets' || entry.name.startsWith('_')) continue;\r\n scanDirectory(fullPath, rootDir, extensions, routes, notFoundPages, layouts, loadingPages, errorPages, middlewares, false);\r\n } else if (entry.isFile()) {\r\n const ext = path.extname(entry.name);\r\n const baseName = path.basename(entry.name, ext);\r\n\r\n if (baseName === 'layout' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n layouts.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if (baseName === 'loading' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n loadingPages.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if (baseName === 'error' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n errorPages.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if (baseName === 'middleware' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath } = pathToRoute(relativePath, path.sep);\r\n middlewares.push({\r\n path: isRoot ? '/' : routePath,\r\n filePath: fullPath\r\n });\r\n }\r\n else if ((baseName === 'not-found' || baseName === '404') && extensions.includes(ext)) {\r\n const relativeParts = path.relative(rootDir, dir).split(path.sep).filter(Boolean);\r\n const filteredParts = relativeParts.filter(p => !isRouteGroup(p));\r\n const pathPrefix = isRoot ? '' : '/' + filteredParts.join('/');\r\n notFoundPages.push({ pathPrefix: pathPrefix || '', filePath: fullPath });\r\n } else if (baseName === 'page' && extensions.includes(ext)) {\r\n const relativePath = path.relative(rootDir, dir);\r\n const { routePath, params } = pathToRoute(relativePath, path.sep);\r\n routes.push({ path: routePath, filePath: fullPath, isDynamic: params.length > 0, params });\r\n } else if (\r\n !RESERVED_NAMES.has(baseName) &&\r\n !baseName.endsWith('.d') &&\r\n !baseName.startsWith('_') &&\r\n extensions.includes(ext)\r\n ) {\r\n const relativePath = path.relative(rootDir, fullPath);\r\n const relativePathNoExt = relativePath.substring(0, relativePath.length - ext.length);\r\n const { routePath, params } = pathToRoute(relativePathNoExt, path.sep);\r\n routes.push({ path: routePath, filePath: fullPath, isDynamic: params.length > 0, params });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function scanRoutes(rootDir: string, extensions: string[]): ScanResult {\r\n const routes: RouteEntry[] = [];\r\n const notFoundPages: NotFoundEntry[] = [];\r\n const layouts: LayoutEntry[] = [];\r\n const loadingPages: LoadingEntry[] = [];\r\n const errorPages: ErrorEntry[] = [];\r\n const middlewares: MiddlewareEntry[] = [];\r\n const absoluteRoot = path.isAbsolute(rootDir) ? rootDir : path.resolve(rootDir);\r\n\r\n if (!fs.existsSync(absoluteRoot)) {\r\n throw new Error(`Olova Router: Root directory does not exist: ${absoluteRoot}`);\r\n }\r\n\r\n scanDirectory(absoluteRoot, absoluteRoot, extensions, routes, notFoundPages, layouts, loadingPages, errorPages, middlewares, true);\r\n routes.sort((a, b) => (a.isDynamic !== b.isDynamic ? (a.isDynamic ? 1 : -1) : a.path.localeCompare(b.path)));\r\n notFoundPages.sort((a, b) => b.pathPrefix.length - a.pathPrefix.length);\r\n layouts.sort((a, b) => a.path.length - b.path.length);\r\n loadingPages.sort((a, b) => b.path.length - a.path.length);\r\n errorPages.sort((a, b) => b.path.length - a.path.length);\r\n middlewares.sort((a, b) => a.path.length - b.path.length);\r\n return { routes, notFoundPages, layouts, loadingPages, errorPages, middlewares };\r\n}\r\n","import mdx from '@mdx-js/rollup';\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport type { Plugin } from 'vite';\r\nimport { generateRouteTree } from '../generator';\r\nimport { scanRoutes } from '../scanner';\r\nimport type { ErrorWithExport, LayoutWithExport, LoadingWithExport, MiddlewareWithExport, NotFoundWithExport, OlovaRouterOptions, PluginOption, ResolvedConfig, RouteWithExport } from '../types';\r\nimport { detectExportType, getRouteName } from '../utils';\r\n\r\nexport function olovaRouter(options: OlovaRouterOptions = {}): PluginOption[] {\r\n const rootDir = options.rootDir || 'src/app';\r\n const extensions = options.extensions || ['.tsx', '.ts', '.mdx'];\r\n const packageName = options.packageName || 'olovastart';\r\n\r\n let config: ResolvedConfig;\r\n let absoluteRootDir: string;\r\n let watcher: fs.FSWatcher | null = null;\r\n let timer: NodeJS.Timeout | null = null;\r\n\r\n function generateRouteTreeFile() {\r\n const { routes, notFoundPages, layouts, loadingPages, errorPages, middlewares } = scanRoutes(absoluteRootDir, extensions);\r\n\r\n const routeConfigs: RouteWithExport[] = routes.map(r => {\r\n let exportInfo = detectExportType(r.filePath);\r\n \r\n if (r.filePath.toLowerCase().endsWith('.mdx')) {\r\n exportInfo = {\r\n ...exportInfo,\r\n hasDefault: true,\r\n namedExport: null\r\n };\r\n }\r\n\r\n return {\r\n path: r.path,\r\n component: r.filePath.replace(/\\\\/g, '/'),\r\n params: r.params.length > 0 ? r.params : undefined,\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n hasMetadata: exportInfo.hasMetadata,\r\n metadataSource: exportInfo.metadataSource,\r\n hasRoute: exportInfo.hasRoute,\r\n hasGetStaticPaths: exportInfo.hasGetStaticPaths,\r\n hasLoader: exportInfo.hasLoader\r\n };\r\n });\r\n\r\n const notFoundConfigs: NotFoundWithExport[] = notFoundPages.map(nf => {\r\n const exportInfo = detectExportType(nf.filePath);\r\n return {\r\n pathPrefix: nf.pathPrefix,\r\n filePath: nf.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n hasMetadata: exportInfo.hasMetadata\r\n };\r\n });\r\n\r\n const layoutConfigs: LayoutWithExport[] = layouts.map(l => {\r\n const exportInfo = detectExportType(l.filePath);\r\n return {\r\n path: l.path,\r\n filePath: l.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n hasMetadata: exportInfo.hasMetadata\r\n };\r\n });\r\n\r\n const loadingConfigs: LoadingWithExport[] = loadingPages.map(lp => {\r\n const exportInfo = detectExportType(lp.filePath);\r\n return {\r\n path: lp.path,\r\n filePath: lp.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n };\r\n });\r\n\r\n const errorConfigs: ErrorWithExport[] = errorPages.map(ep => {\r\n const exportInfo = detectExportType(ep.filePath);\r\n return {\r\n path: ep.path,\r\n filePath: ep.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n };\r\n });\r\n\r\n const middlewareConfigs: MiddlewareWithExport[] = middlewares.map(mw => {\r\n const exportInfo = detectExportType(mw.filePath);\r\n return {\r\n path: mw.path,\r\n filePath: mw.filePath.replace(/\\\\/g, '/'),\r\n hasDefault: exportInfo.hasDefault,\r\n namedExport: exportInfo.namedExport,\r\n };\r\n });\r\n\r\n const content = generateRouteTree(routeConfigs, notFoundConfigs, layoutConfigs, loadingConfigs, errorConfigs, middlewareConfigs, absoluteRootDir, packageName);\r\n const treePath = path.resolve(config.root, 'src', 'route.tree.ts');\r\n\r\n const existing = fs.existsSync(treePath) ? fs.readFileSync(treePath, 'utf-8') : '';\r\n if (existing !== content) {\r\n fs.writeFileSync(treePath, content);\r\n console.log('\\x1b[32m[olova]\\x1b[0m Route tree updated');\r\n }\r\n }\r\n\r\n function startWatcher() {\r\n if (watcher) return;\r\n\r\n watcher = fs.watch(absoluteRootDir, { recursive: true }, (eventType, filename) => {\r\n if (!filename) return;\r\n if (filename.includes('route.tree.ts')) return;\r\n\r\n const ext = path.extname(filename);\r\n const isConfiguredExtension = extensions.includes(ext);\r\n\r\n const isPageFile = (filename.includes('page') && isConfiguredExtension);\r\n const is404File = (filename.includes('404') && isConfiguredExtension);\r\n const isNotFoundFile = (filename.includes('not-found') && isConfiguredExtension);\r\n const isLayoutFile = (filename.includes('layout') && isConfiguredExtension);\r\n const isLoadingFile = (filename.includes('loading') && isConfiguredExtension);\r\n const isErrorFile = (filename.includes('error') && isConfiguredExtension);\r\n const isMiddlewareFile = (filename.includes('middleware') && isConfiguredExtension);\r\n const isDirectory = !filename.includes('.');\r\n const isDynamicSegment = filename.includes('[');\r\n const isRenameEvent = eventType === 'rename';\r\n\r\n if (isPageFile || is404File || isNotFoundFile || isLayoutFile || isLoadingFile || isErrorFile || isMiddlewareFile || isDirectory || isDynamicSegment || isRenameEvent) {\r\n if (isPageFile && filename) {\r\n const fullPath = path.join(absoluteRootDir, filename);\r\n if (fs.existsSync(fullPath)) {\r\n const stat = fs.statSync(fullPath);\r\n if (stat.size === 0 && !filename.endsWith('.mdx')) {\r\n const relativeDir = path.relative(absoluteRootDir, path.dirname(fullPath));\r\n const pascalCaseName = getRouteName(relativeDir);\r\n \r\n const boilerplate = `\r\nexport const metadata = {\r\n title: \"${pascalCaseName}\",\r\n description: \"${pascalCaseName} page\",\r\n}\r\n\r\nexport default function ${pascalCaseName}() {\r\n return (\r\n <div>\r\n <h1>${pascalCaseName}</h1>\r\n </div>\r\n );\r\n}\r\n`;\r\n fs.writeFileSync(fullPath, boilerplate);\r\n console.log(`\\x1b[32m[olova]\\x1b[0m Generated boilerplate for ${filename}`);\r\n }\r\n }\r\n }\r\n\r\n if (timer) clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n try {\r\n generateRouteTreeFile();\r\n } catch (error) {\r\n console.error('\\x1b[31m[olova]\\x1b[0m Error generating route tree:', error);\r\n }\r\n }, 100);\r\n }\r\n });\r\n\r\n console.log('\\x1b[32m[olova]\\x1b[0m Watching for route changes...');\r\n }\r\n\r\n const routerPlugin: Plugin = {\r\n name: 'olova-router',\r\n\r\n configResolved(resolvedConfig: ResolvedConfig) {\r\n config = resolvedConfig;\r\n absoluteRootDir = path.resolve(config.root, rootDir);\r\n },\r\n\r\n buildStart() {\r\n generateRouteTreeFile();\r\n\r\n if (config.command === 'serve') {\r\n startWatcher();\r\n }\r\n },\r\n\r\n buildEnd() {\r\n if (watcher) {\r\n watcher.close();\r\n watcher = null;\r\n }\r\n },\r\n };\r\n\r\n return [\r\n { enforce: 'pre', ...mdx() } as Plugin,\r\n routerPlugin\r\n ];\r\n}\r\n\r\nexport default olovaRouter;\r\n","/**\r\n * Olova Logger - Modern, styled terminal output\r\n * Inspired by Next.js console output\r\n */\r\n\r\nimport pc from 'picocolors';\r\n\r\n// Olova version from package.json\r\nconst VERSION = '0.0.14';\r\n\r\n/**\r\n * Print the startup banner (minimal, like Next.js)\r\n */\r\nexport function printBanner() {\r\n console.log('');\r\n console.log(pc.cyan(` ▲ Olova`) + pc.dim(` ${VERSION}`));\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print dev server ready message\r\n */\r\nexport function printDevReady(url: string, networkUrl?: string) {\r\n console.log('');\r\n console.log(` ${pc.green('✓')} ${pc.bold('Ready')} in ${pc.cyan('~1s')}`);\r\n console.log('');\r\n console.log(` ${pc.dim('Local:')} ${pc.cyan(url)}`);\r\n if (networkUrl) {\r\n console.log(` ${pc.dim('Network:')} ${pc.cyan(networkUrl)}`);\r\n }\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print SSG build start (minimal)\r\n */\r\nexport function printBuildStart() {\r\n console.log('');\r\n console.log(` ${pc.dim('Creating an optimized production build...')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print SSG build header\r\n */\r\nexport function printSSGStart(buildId: string) {\r\n console.log('');\r\n console.log(pc.bold(pc.cyan(` ✓ Compiled successfully`)));\r\n console.log('');\r\n console.log(` ${pc.dim('Build ID:')} ${pc.yellow(buildId)}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print route table (Next.js style)\r\n */\r\nexport function printRoutes(routes: { path: string; type: 'static' | 'dynamic' }[]) {\r\n // Header\r\n console.log(` ${pc.bold('Route')}${' '.repeat(32)}${pc.bold('Type')}`);\r\n console.log(` ${pc.dim('┌')}${pc.dim('─'.repeat(43))}${pc.dim('┐')}`);\r\n\r\n for (const route of routes) {\r\n const icon = route.type === 'static' ? pc.green('○') : pc.magenta('λ');\r\n const typeLabel = route.type === 'static'\r\n ? pc.green('Static')\r\n : pc.magenta('Dynamic');\r\n const pathDisplay = route.path === '/' ? '/' : route.path;\r\n const padding = ' '.repeat(Math.max(1, 35 - pathDisplay.length));\r\n console.log(` ${pc.dim('│')} ${icon} ${pc.white(pathDisplay)}${padding}${typeLabel}`);\r\n }\r\n\r\n // Footer\r\n console.log(` ${pc.dim('└')}${pc.dim('─'.repeat(43))}${pc.dim('┘')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print single page generation\r\n */\r\nexport function printPageGenerated(path: string, hasFlightData = true) {\r\n const badge = hasFlightData ? pc.dim(pc.cyan(' [Flight]')) : '';\r\n console.log(` ${pc.dim('✓')} ${pc.dim('Generated')} ${pc.white(path)}${badge}`);\r\n}\r\n\r\n/**\r\n * Print page generation error\r\n */\r\nexport function printPageError(path: string, error: string) {\r\n console.log(` ${pc.red('✗')} ${pc.red('Failed')} ${path}`);\r\n console.log(` ${pc.dim(error)}`);\r\n}\r\n\r\n/**\r\n * Print SSG completion summary\r\n */\r\nexport function printSSGComplete(stats: {\r\n totalPages: number;\r\n successPages: number;\r\n failedPages: number;\r\n buildTime: number;\r\n}) {\r\n console.log('');\r\n console.log(` ${pc.dim('─'.repeat(45))}`);\r\n console.log('');\r\n\r\n if (stats.failedPages > 0) {\r\n console.log(` ${pc.yellow('⚠')} ${pc.yellow('Build completed with warnings')}`);\r\n } else {\r\n console.log(` ${pc.green('✓')} ${pc.green('Build completed successfully')}`);\r\n }\r\n\r\n console.log('');\r\n console.log(` ${pc.dim('Pages:')} ${pc.bold(stats.successPages.toString())} generated`);\r\n if (stats.failedPages > 0) {\r\n console.log(` ${pc.red(stats.failedPages.toString())} failed`);\r\n }\r\n console.log(` ${pc.dim('Time:')} ${pc.cyan(stats.buildTime + 'ms')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print Flight hydration info (compact)\r\n */\r\nexport function printFlightInfo() {\r\n console.log(` ${pc.cyan('○')} ${pc.dim('Flight hydration enabled')}`);\r\n console.log(` ${pc.dim('• JSON-LD structured data')}`);\r\n console.log(` ${pc.dim('• Resource hints')}`);\r\n console.log(` ${pc.dim('• $OLOVA global')}`);\r\n console.log('');\r\n}\r\n\r\n/**\r\n * Print a simple info message\r\n */\r\nexport function info(message: string) {\r\n console.log(` ${pc.cyan('○')} ${message}`);\r\n}\r\n\r\n/**\r\n * Print a success message\r\n */\r\nexport function success(message: string) {\r\n console.log(` ${pc.green('✓')} ${pc.green(message)}`);\r\n}\r\n\r\n/**\r\n * Print a warning message\r\n */\r\nexport function warn(message: string) {\r\n console.log(` ${pc.yellow('⚠')} ${pc.yellow(message)}`);\r\n}\r\n\r\n/**\r\n * Print an error message\r\n */\r\nexport function error(message: string) {\r\n console.log(` ${pc.red('✗')} ${pc.red(message)}`);\r\n}\r\n\r\n/**\r\n * Print SSR render info (dev mode)\r\n */\r\nexport function printSSRRender(path: string) {\r\n console.log(` ${pc.cyan('→')} ${pc.dim('SSR')} ${path}`);\r\n}\r\n\r\nexport default {\r\n printBanner,\r\n printDevReady,\r\n printBuildStart,\r\n printSSGStart,\r\n printRoutes,\r\n printPageGenerated,\r\n printPageError,\r\n printSSGComplete,\r\n printFlightInfo,\r\n printSSRRender,\r\n info,\r\n success,\r\n warn,\r\n error,\r\n};\r\n","/**\r\n * Olova Performance Optimizations Plugin\r\n * \r\n * Provides build-time optimizations for SSG:\r\n * - Code splitting strategies\r\n * - Asset compression (gzip/brotli)\r\n * - Chunk size analysis\r\n * - Resource prioritization\r\n */\r\n\r\nimport fs from 'node:fs/promises';\r\nimport path from 'node:path';\r\nimport { promisify } from 'node:util';\r\nimport zlib from 'node:zlib';\r\nimport type { Plugin, ResolvedConfig } from 'vite';\r\nimport logger from './logger';\r\n\r\n// Promisify zlib functions\r\nconst gzip = promisify(zlib.gzip);\r\nconst brotliCompress = promisify(zlib.brotliCompress);\r\n\r\n// =============================================================================\r\n// TYPES\r\n// =============================================================================\r\n\r\nexport interface PerformanceOptions {\r\n /**\r\n * Enable gzip compression for assets\r\n * @default true\r\n */\r\n gzip?: boolean;\r\n \r\n /**\r\n * Enable brotli compression for assets\r\n * @default true\r\n */\r\n brotli?: boolean;\r\n \r\n /**\r\n * Minimum file size (in bytes) to compress\r\n * @default 1024 (1KB)\r\n */\r\n threshold?: number;\r\n \r\n /**\r\n * File extensions to compress\r\n * @default ['js', 'css', 'html', 'json', 'svg', 'xml']\r\n */\r\n extensions?: string[];\r\n \r\n /**\r\n * Enable chunk size warnings\r\n * @default true\r\n */\r\n chunkSizeWarning?: boolean;\r\n \r\n /**\r\n * Maximum chunk size before warning (in KB)\r\n * @default 250\r\n */\r\n maxChunkSize?: number;\r\n \r\n /**\r\n * Enable route-based code splitting\r\n * @default true\r\n */\r\n routeCodeSplitting?: boolean;\r\n}\r\n\r\nexport interface ChunkInfo {\r\n name: string;\r\n size: number;\r\n gzipSize?: number;\r\n brotliSize?: number;\r\n isEntry: boolean;\r\n type: 'vendor' | 'framework' | 'common' | 'route' | 'other';\r\n}\r\n\r\n// =============================================================================\r\n// MANUAL CHUNKS CONFIGURATION\r\n// =============================================================================\r\n\r\n/**\r\n * Smart manual chunks configuration for optimal code splitting\r\n * Separates vendor, framework, and route-specific code\r\n * Avoids circular dependencies by grouping related routes\r\n */\r\nexport function createManualChunks() {\r\n // Track modules to detect potential circular dependencies\r\n const seenModules = new Map<string, string>();\r\n \r\n return (id: string, { getModuleInfo }: { getModuleInfo: (id: string) => { importers: readonly string[] } | null }): string | undefined => {\r\n // React and React DOM - cached separately\r\n if (id.includes('node_modules/react-dom')) {\r\n return 'vendor-react-dom';\r\n }\r\n if (id.includes('node_modules/react')) {\r\n return 'vendor-react';\r\n }\r\n \r\n // Olova Router - framework code\r\n if (id.includes('olova-router') || id.includes('olovastart/dist/router')) {\r\n return 'framework-router';\r\n }\r\n \r\n // Other node_modules - vendor bundle\r\n if (id.includes('node_modules')) {\r\n // Extract package name for better caching\r\n const match = id.match(/node_modules[\\\\/]([^/\\\\]+)/);\r\n if (match) {\r\n const pkg = match[1];\r\n // Group small packages together\r\n if (['scheduler', 'object-assign', 'prop-types'].includes(pkg)) {\r\n return 'vendor-react';\r\n }\r\n // Keep large packages separate\r\n if (['lodash', 'moment', 'axios', 'date-fns'].includes(pkg)) {\r\n return `vendor-${pkg}`;\r\n }\r\n }\r\n return 'vendor';\r\n }\r\n \r\n // Shared components - group together to avoid circular deps\r\n if (id.includes('/components/')) {\r\n return 'common-components';\r\n }\r\n \r\n // Shared utilities\r\n if (id.includes('/utils/') || id.includes('/lib/') || id.includes('/helpers/')) {\r\n return 'common-utils';\r\n }\r\n \r\n // CSS - let Vite handle\r\n if (id.endsWith('.css') || id.endsWith('.scss')) {\r\n return undefined;\r\n }\r\n \r\n // Auth pages + search - group together to avoid circular deps\r\n // (login <-> register <-> search often share components/navigation)\r\n if (id.includes('/(auth)/') || id.includes('\\\\(auth)\\\\') || \r\n id.includes('/search/') || id.includes('\\\\search\\\\')) {\r\n return 'page-auth';\r\n }\r\n \r\n // Route components - be conservative, only split truly isolated routes\r\n // Don't split if the module has cross-route imports\r\n if (id.includes('/src/') && (id.endsWith('/index.tsx') || id.endsWith('/index.mdx'))) {\r\n // Check if this module would cause circular dependencies\r\n const moduleInfo = getModuleInfo(id);\r\n if (moduleInfo) {\r\n // If imported by another route, group with common\r\n for (const importer of moduleInfo.importers) {\r\n if (importer.includes('/src/') && importer.includes('/index.') && !importer.includes(id)) {\r\n return 'common-routes';\r\n }\r\n }\r\n }\r\n \r\n const routeMatch = id.match(/[\\\\/]src[\\\\/](.+?)[\\\\/]index\\.(tsx|mdx)$/);\r\n if (routeMatch) {\r\n const routePath = routeMatch[1]\r\n .replace(/\\([^)]+\\)[\\\\/]/g, '') // Remove route groups\r\n .replace(/\\[.*?\\]/g, 'dynamic') // Replace dynamic segments\r\n .replace(/[\\\\/]/g, '-');\r\n \r\n // Skip if we've seen a chunk with same base that would cause circular\r\n const baseRoute = routePath.split('-')[0];\r\n if (seenModules.has(baseRoute)) {\r\n const existingChunk = seenModules.get(baseRoute)!;\r\n // If related routes, group them\r\n if (existingChunk.startsWith('page-')) {\r\n return existingChunk;\r\n }\r\n }\r\n \r\n const chunkName = `page-${routePath}`;\r\n seenModules.set(baseRoute, chunkName);\r\n return chunkName;\r\n }\r\n }\r\n \r\n return undefined;\r\n };\r\n}\r\n\r\n// =============================================================================\r\n// COMPRESSION PLUGIN\r\n// =============================================================================\r\n\r\n/**\r\n * Compression plugin for generating gzip and brotli compressed assets\r\n */\r\nexport function compressionPlugin(options: PerformanceOptions = {}): Plugin {\r\n const {\r\n gzip: enableGzip = true,\r\n brotli: enableBrotli = true,\r\n threshold = 1024,\r\n extensions = ['js', 'css', 'html', 'json', 'svg', 'xml'],\r\n } = options;\r\n \r\n let config: ResolvedConfig;\r\n \r\n return {\r\n name: 'olova-compression',\r\n apply: 'build',\r\n \r\n configResolved(resolvedConfig) {\r\n config = resolvedConfig;\r\n },\r\n \r\n async closeBundle() {\r\n if (config.command !== 'build' || config.build.ssr) return;\r\n \r\n const outDir = config.build.outDir;\r\n const stats = { gzip: 0, brotli: 0, skipped: 0 };\r\n \r\n // Find all files to compress\r\n const files = await findFilesToCompress(outDir, extensions);\r\n \r\n for (const file of files) {\r\n const content = await fs.readFile(file);\r\n \r\n // Skip small files\r\n if (content.length < threshold) {\r\n stats.skipped++;\r\n continue;\r\n }\r\n \r\n // Gzip compression\r\n if (enableGzip) {\r\n try {\r\n const compressed = await gzip(content, { level: 9 });\r\n await fs.writeFile(`${file}.gz`, compressed);\r\n stats.gzip++;\r\n } catch (e) {\r\n // Silently skip compression errors\r\n }\r\n }\r\n \r\n // Brotli compression\r\n if (enableBrotli) {\r\n try {\r\n const compressed = await brotliCompress(content, {\r\n params: {\r\n [zlib.constants.BROTLI_PARAM_QUALITY]: 11,\r\n },\r\n });\r\n await fs.writeFile(`${file}.br`, compressed);\r\n stats.brotli++;\r\n } catch (e) {\r\n // Silently skip compression errors\r\n }\r\n }\r\n }\r\n \r\n // Log compression stats\r\n if (stats.gzip > 0 || stats.brotli > 0) {\r\n logger.info(`Compressed ${stats.gzip} files (gzip), ${stats.brotli} files (brotli)`);\r\n }\r\n },\r\n };\r\n}\r\n\r\n// =============================================================================\r\n// CHUNK ANALYSIS PLUGIN\r\n// =============================================================================\r\n\r\n/**\r\n * Chunk analysis plugin for monitoring bundle sizes\r\n */\r\nexport function chunkAnalysisPlugin(options: PerformanceOptions = {}): Plugin {\r\n const {\r\n chunkSizeWarning = true,\r\n maxChunkSize = 250,\r\n } = options;\r\n \r\n const chunks: ChunkInfo[] = [];\r\n \r\n return {\r\n name: 'olova-chunk-analysis',\r\n apply: 'build',\r\n \r\n generateBundle(_options, bundle) {\r\n for (const [fileName, chunk] of Object.entries(bundle)) {\r\n if (chunk.type === 'chunk') {\r\n const sizeKB = Buffer.byteLength(chunk.code, 'utf8') / 1024;\r\n \r\n // Determine chunk type\r\n let type: ChunkInfo['type'] = 'other';\r\n if (fileName.includes('vendor')) type = 'vendor';\r\n else if (fileName.includes('framework')) type = 'framework';\r\n else if (fileName.includes('common')) type = 'common';\r\n else if (fileName.includes('page-')) type = 'route';\r\n \r\n chunks.push({\r\n name: fileName,\r\n size: Math.round(sizeKB * 100) / 100,\r\n isEntry: chunk.isEntry,\r\n type,\r\n });\r\n \r\n // Warn about large chunks\r\n if (chunkSizeWarning && sizeKB > maxChunkSize) {\r\n logger.warn(`Chunk \"${fileName}\" is ${sizeKB.toFixed(2)}KB (exceeds ${maxChunkSize}KB limit)`);\r\n }\r\n }\r\n }\r\n },\r\n \r\n closeBundle() {\r\n if (chunks.length === 0) return;\r\n \r\n // Sort by size descending\r\n chunks.sort((a, b) => b.size - a.size);\r\n \r\n // Print chunk summary\r\n console.log('');\r\n logger.info('Bundle Analysis:');\r\n \r\n const typeGroups: Record<string, number> = {};\r\n let totalSize = 0;\r\n \r\n for (const chunk of chunks) {\r\n typeGroups[chunk.type] = (typeGroups[chunk.type] || 0) + chunk.size;\r\n totalSize += chunk.size;\r\n }\r\n \r\n console.log(` Vendor: ${(typeGroups.vendor || 0).toFixed(2)} KB`);\r\n console.log(` Framework: ${(typeGroups.framework || 0).toFixed(2)} KB`);\r\n console.log(` Common: ${(typeGroups.common || 0).toFixed(2)} KB`);\r\n console.log(` Routes: ${(typeGroups.route || 0).toFixed(2)} KB`);\r\n console.log(` Other: ${(typeGroups.other || 0).toFixed(2)} KB`);\r\n console.log(` ─────────────────────`);\r\n console.log(` Total: ${totalSize.toFixed(2)} KB`);\r\n console.log('');\r\n },\r\n };\r\n}\r\n\r\n// =============================================================================\r\n// PRELOAD HINTS GENERATOR\r\n// =============================================================================\r\n\r\nexport interface PreloadHint {\r\n href: string;\r\n as: 'script' | 'style' | 'font' | 'image';\r\n priority: 'critical' | 'high' | 'low';\r\n crossorigin?: boolean;\r\n}\r\n\r\n/**\r\n * Generate optimized preload hints for chunks\r\n */\r\nexport function generatePreloadHints(\r\n chunks: string[],\r\n entryChunk: string\r\n): PreloadHint[] {\r\n const hints: PreloadHint[] = [];\r\n \r\n // Entry chunk - critical priority\r\n hints.push({\r\n href: `/${entryChunk}`,\r\n as: 'script',\r\n priority: 'critical',\r\n });\r\n \r\n for (const chunk of chunks) {\r\n if (chunk === entryChunk) continue;\r\n \r\n // Vendor chunks - high priority (needed for hydration)\r\n if (chunk.includes('vendor')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'high',\r\n });\r\n }\r\n // Framework chunks - high priority\r\n else if (chunk.includes('framework')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'high',\r\n });\r\n }\r\n // Common chunks - high priority\r\n else if (chunk.includes('common')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'high',\r\n });\r\n }\r\n // Route chunks - low priority (prefetch for navigation)\r\n else if (chunk.includes('page-')) {\r\n hints.push({\r\n href: `/${chunk}`,\r\n as: 'script',\r\n priority: 'low',\r\n });\r\n }\r\n }\r\n \r\n return hints;\r\n}\r\n\r\n/**\r\n * Generate HTML preload/prefetch tags from hints\r\n */\r\nexport function generatePreloadTags(hints: PreloadHint[]): string {\r\n return hints\r\n .map((hint) => {\r\n const rel = hint.priority === 'low' ? 'prefetch' : 'modulepreload';\r\n const crossorigin = hint.crossorigin ? ' crossorigin' : '';\r\n return `<link rel=\"${rel}\" href=\"${hint.href}\"${crossorigin}>`;\r\n })\r\n .join('');\r\n}\r\n\r\n// =============================================================================\r\n// UTILITY FUNCTIONS\r\n// =============================================================================\r\n\r\n/**\r\n * Recursively find files to compress\r\n */\r\nasync function findFilesToCompress(\r\n dir: string,\r\n extensions: string[]\r\n): Promise<string[]> {\r\n const files: string[] = [];\r\n \r\n try {\r\n const entries = await fs.readdir(dir, { withFileTypes: true });\r\n \r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n \r\n if (entry.isDirectory()) {\r\n files.push(...await findFilesToCompress(fullPath, extensions));\r\n } else if (entry.isFile()) {\r\n const ext = path.extname(entry.name).slice(1);\r\n if (extensions.includes(ext)) {\r\n files.push(fullPath);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // Directory doesn't exist or can't be read\r\n }\r\n \r\n return files;\r\n}\r\n\r\n/**\r\n * Calculate gzip size of content\r\n */\r\nexport async function getGzipSize(content: string | Buffer): Promise<number> {\r\n const buffer = typeof content === 'string' ? Buffer.from(content) : content;\r\n const compressed = await gzip(buffer);\r\n return compressed.length;\r\n}\r\n\r\n/**\r\n * Format bytes to human readable size\r\n */\r\nexport function formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\r\n}\r\n\r\n// =============================================================================\r\n// COMBINED PERFORMANCE PLUGIN\r\n// =============================================================================\r\n\r\n/**\r\n * Main performance plugin that combines all optimizations\r\n */\r\nexport function olovaPerformance(options: PerformanceOptions = {}): Plugin[] {\r\n return [\r\n chunkAnalysisPlugin(options),\r\n compressionPlugin(options),\r\n ];\r\n}\r\n\r\nexport default olovaPerformance;\r\n","/**\r\n * Olova Flight Format Hydration System\r\n * Implements \"Flight\" format for efficient client hydration (Next.js style)\r\n */\r\n\r\nimport type {\r\n AssetsChunkData,\r\n HintsChunkData,\r\n MetadataChunkData,\r\n OlovaGlobal,\r\n OlovaHydrationData,\r\n ParsedFlightData,\r\n RouteChunkData,\r\n StateChunkData,\r\n TreeChunkData,\r\n} 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\nfunction 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 * Generate a page name from route path\r\n */\r\nfunction generatePageName(route: string): string {\r\n if (route === '/') return 'HomePage';\r\n return route\r\n .slice(1)\r\n .split('/')\r\n .filter(Boolean)\r\n .map(s => s.charAt(0).toUpperCase() + s.slice(1).replace(/[^a-zA-Z0-9]/g, ''))\r\n .join('') + 'Page';\r\n}\r\n\r\n/**\r\n * Generate route pattern from path\r\n */\r\nfunction generatePattern(route: string): string {\r\n if (route === '/') return '/';\r\n return route\r\n .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, '*')\r\n .replace(/\\[([^\\]]+)\\]/g, ':$1');\r\n}\r\n\r\n/**\r\n * Generate the Flight runtime script (Next.js style)\r\n * This script processes the flight data array and hydrates the app\r\n */\r\nfunction generateFlightRuntime(): string {\r\n return `<script>\r\n(function(){\r\n var f=self.__olova_f||[];\r\n var p={R:'$route',M:'$meta',T:'$tree',D:'$schema',A:'$assets',H:'$hints',S:'$state',L:'$loader',Q:'$query'};\r\n var g=self.$OLOVA={};\r\n function h(c){var t=c[1],d=c[2];if(t==='E')return;var k=p[t];if(k){if(t==='L'||t==='Q'){g[k]={data:d,timestamp:c[3]||Date.now()}}else{g[k]=d}}}\r\n for(var i=0;i<f.length;i++)h(f[i]);\r\n self.__olova_f={push:h,length:0};\r\n})();\r\n</script>`;\r\n}\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 (Next.js style)\r\n */\r\nexport function generateOlovaHydration(data: OlovaHydrationData, buildId: string): string {\r\n const meta = (data.metadata || {}) as Record<string, unknown>;\r\n const chunks: string[] = [];\r\n\r\n // ==========================================================================\r\n // CHUNK 0: Route Information\r\n // ==========================================================================\r\n const routeData: RouteChunkData = {\r\n path: data.route,\r\n params: data.params || {},\r\n pattern: generatePattern(data.route),\r\n isStatic: data.isStatic ?? true,\r\n buildId: buildId\r\n };\r\n chunks.push(`<script>(self.__olova_f=self.__olova_f||[]).push([0,\"R\",${safeStringify(routeData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 1: Metadata\r\n // ==========================================================================\r\n const metadataData: MetadataChunkData = {\r\n title: (meta.title as string) || 'Olova App',\r\n description: (meta.description as string) || '',\r\n keywords: Array.isArray(meta.keywords) ? meta.keywords : [],\r\n robots: (meta.robots as string) || 'index, follow',\r\n canonical: (meta.canonical as string) || null,\r\n og: {\r\n type: 'website',\r\n locale: 'en_US',\r\n ...((meta.openGraph as object) || {})\r\n },\r\n twitter: {\r\n card: 'summary_large_image',\r\n ...((meta.twitter as object) || {})\r\n }\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([1,\"M\",${safeStringify(metadataData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 2: Component Tree\r\n // ==========================================================================\r\n const treeData: TreeChunkData = {\r\n layout: 'RootLayout',\r\n page: generatePageName(data.route),\r\n template: null,\r\n loading: null,\r\n error: null,\r\n notFound: null\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([2,\"T\",${safeStringify(treeData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 3: Assets\r\n // ==========================================================================\r\n const assetsData: AssetsChunkData = {\r\n chunks: data.chunks || [],\r\n styles: [],\r\n prefetch: (data.chunks || []).slice(0, 5)\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([3,\"A\",${safeStringify(assetsData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 4: Resource Hints\r\n // ==========================================================================\r\n const hintsData: HintsChunkData = {\r\n dnsPrefetch: ['fonts.googleapis.com', 'fonts.gstatic.com'],\r\n preconnect: ['https://fonts.googleapis.com', 'https://fonts.gstatic.com'],\r\n modulePreload: (data.chunks || []).slice(0, 3)\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([4,\"H\",${safeStringify(hintsData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 5: Hydration State\r\n // ==========================================================================\r\n const stateData: StateChunkData = {\r\n hydrated: false,\r\n streaming: false,\r\n ready: true,\r\n timestamp: Date.now(),\r\n version: '1.0.0',\r\n buildId: buildId\r\n };\r\n chunks.push(`<script>(self.__olova_f).push([5,\"S\",${safeStringify(stateData)}])</script>`);\r\n\r\n // ==========================================================================\r\n // CHUNK 6: Loader Data (if present)\r\n // ==========================================================================\r\n if (data.loaderData) {\r\n chunks.push(`<script>(self.__olova_f).push([6,\"L\",${safeStringify(data.loaderData)},${Date.now()}])</script>`);\r\n }\r\n\r\n // ==========================================================================\r\n // CHUNK 7: Query State (if present)\r\n // ==========================================================================\r\n if (data.queryState) {\r\n chunks.push(`<script>(self.__olova_f).push([7,\"Q\",${safeStringify(data.queryState)},${Date.now()}])</script>`);\r\n }\r\n\r\n // ==========================================================================\r\n // CHUNK 8: END MARKER\r\n // ==========================================================================\r\n chunks.push(`<script>(self.__olova_f).push([8,\"E\",null])</script>`);\r\n\r\n // ==========================================================================\r\n // FLIGHT RUNTIME: Process all chunks into $OLOVA global (Next.js style)\r\n // ==========================================================================\r\n chunks.push(generateFlightRuntime());\r\n\r\n return chunks.join('');\r\n}\r\n\r\n/**\r\n * Generate JSON-LD structured data script for SEO\r\n * This is injected into <head> for search engine crawlers\r\n */\r\nexport function generateJsonLd(data: OlovaHydrationData): string {\r\n const meta = (data.metadata || {}) as Record<string, unknown>;\r\n\r\n const jsonLd = {\r\n '@context': 'https://schema.org',\r\n '@graph': [\r\n {\r\n '@type': 'WebPage',\r\n '@id': data.route,\r\n name: (meta.title as string) || 'Olova App',\r\n description: (meta.description as string) || '',\r\n url: data.route,\r\n isPartOf: {\r\n '@type': 'WebSite',\r\n name: 'Olova App'\r\n }\r\n },\r\n {\r\n '@type': 'BreadcrumbList',\r\n itemListElement: data.route.split('/').filter(Boolean).map((segment, index, arr) => ({\r\n '@type': 'ListItem',\r\n position: index + 1,\r\n name: segment.charAt(0).toUpperCase() + segment.slice(1),\r\n item: '/' + arr.slice(0, index + 1).join('/')\r\n }))\r\n }\r\n ]\r\n };\r\n\r\n // Add custom schemas from page metadata\r\n if (meta.schema) {\r\n const graph = jsonLd['@graph'] as unknown[];\r\n if (Array.isArray(meta.schema)) {\r\n graph.push(...meta.schema);\r\n } else {\r\n graph.push(meta.schema);\r\n }\r\n }\r\n\r\n return `<script type=\"application/ld+json\">${JSON.stringify(jsonLd)}</script>`;\r\n}\r\n\r\n/**\r\n * Generate resource hint link tags for the head\r\n */\r\nexport function generateResourceHints(data: OlovaHydrationData): string {\r\n const hints: string[] = [];\r\n \r\n // DNS Prefetch for common external resources\r\n hints.push(`<link rel=\"dns-prefetch\" href=\"//fonts.googleapis.com\">`);\r\n hints.push(`<link rel=\"dns-prefetch\" href=\"//fonts.gstatic.com\">`);\r\n \r\n // Preconnect to critical origins\r\n hints.push(`<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" crossorigin>`);\r\n hints.push(`<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>`);\r\n \r\n // Module preload for chunks\r\n if (data.chunks) {\r\n for (const chunk of data.chunks.slice(0, 3)) {\r\n hints.push(`<link rel=\"modulepreload\" href=\"/${chunk}\">`);\r\n }\r\n }\r\n \r\n return hints.join('');\r\n}\r\n\r\n/**\r\n * Parse flight data from the page (client-side utility)\r\n * Use this to access hydration data in your components\r\n */\r\nexport function parseFlightData(): ParsedFlightData | null {\r\n // Check if we're in a browser environment\r\n if (typeof globalThis === 'undefined' || typeof (globalThis as Record<string, unknown>).document === 'undefined') {\r\n return null;\r\n }\r\n\r\n const flightArray = ((globalThis as Record<string, unknown>).__olova_f) as unknown[] | undefined;\r\n if (!flightArray) return null;\r\n\r\n const result: ParsedFlightData = {};\r\n const typeMap: Record<string, keyof ParsedFlightData | '$end'> = {\r\n 'M': '$meta',\r\n 'T': '$tree',\r\n 'R': '$route',\r\n 'A': '$assets',\r\n 'S': '$state',\r\n 'D': '$schema',\r\n 'H': '$hints',\r\n 'L': '$loader',\r\n 'Q': '$query',\r\n 'E': '$end'\r\n };\r\n\r\n for (const chunk of flightArray) {\r\n if (Array.isArray(chunk) && chunk.length >= 3) {\r\n const [_index, type, data] = chunk;\r\n const key = typeMap[String(type)];\r\n if (key && key !== '$end') {\r\n (result as Record<string, unknown>)[key] = data;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Get the global $OLOVA object (client-side)\r\n */\r\nexport function getOlovaGlobal(): OlovaGlobal | null {\r\n if (typeof globalThis === 'undefined') return null;\r\n return ((globalThis as Record<string, unknown>).$OLOVA as OlovaGlobal) || null;\r\n}\r\n\r\n/**\r\n * Generate a unique build ID\r\n */\r\nexport function generateBuildId(): string {\r\n const timestamp = Date.now().toString(36);\r\n const random = Math.random().toString(36).substring(2, 8);\r\n return `${timestamp}-${random}`;\r\n}\r\n\r\n// Re-export types for convenience\r\nexport type {\r\n FlightChunk, FlightDataType, OlovaGlobal, OlovaHydrationData, PageMetadata, ParsedFlightData\r\n} from './types.js';\r\n\r\n","import { existsSync } from \"node:fs\";\r\nimport fs from \"node:fs/promises\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\r\nimport { olovaRouter } from \"./src/plugin\";\r\nimport { build, type Plugin, type ResolvedConfig } from \"vite\";\r\nimport logger from \"./src/logger\";\r\nimport type { PerformanceOptions } from \"./src/performance\";\r\nimport {\r\n createManualChunks,\r\n generatePreloadHints,\r\n generatePreloadTags,\r\n olovaPerformance,\r\n} from \"./src/performance\";\r\n\r\n// =============================================================================\r\n// FLIGHT HYDRATION - Import from shared module (no duplication)\r\n// =============================================================================\r\n\r\nimport {\r\n generateBuildId,\r\n generateJsonLd,\r\n generateOlovaHydration,\r\n generateResourceHints,\r\n type OlovaHydrationData,\r\n} from './src/hydration';\r\n\r\n// =============================================================================\r\n// PLUGIN INTERFACE\r\n// =============================================================================\r\n\r\nexport interface OlovaOptions {\r\n /**\r\n * Static paths to pre-render at build time\r\n */\r\n staticPaths?: string[];\r\n\r\n /**\r\n * Performance optimization options\r\n */\r\n performance?: PerformanceOptions & {\r\n /**\r\n * Enable all performance optimizations\r\n * @default true\r\n */\r\n enabled?: boolean;\r\n };\r\n\r\n /**\r\n * Package name for router imports in generated route.tree.ts\r\n * @default 'olovastart'\r\n */\r\n packageName?: string;\r\n}\r\n\r\nexport function olova(options: OlovaOptions = {}): any {\r\n const virtualModuleId = \"virtual:olova-entry\";\r\n const serverVirtualModuleId = \"virtual:olova-server-entry\";\r\n const workerVirtualModuleId = \"virtual:olova-worker-entry\";\r\n const appVirtualModuleId = \"virtual:olova-app\";\r\n const resolvedAppVirtualModuleId = \"\\0\" + appVirtualModuleId;\r\n let config: ResolvedConfig;\r\n\r\n // Minimal shell - just the placeholder.\r\n // We'll prepend DOCTYPE manually to avoid duplication if app renders it (though app usually shouldn't).\r\n const htmlContent = `<!--app-html-->`;\r\n\r\n // Simple HTML minifier: removes whitespace between tags, trimming, and newlines\r\n const minifyHtml = (html: string) => {\r\n return html\r\n .replace(/>\\s+</g, \"><\")\r\n .replace(/\\s{2,}/g, \" \")\r\n .replace(/<!--[\\s\\S]*?-->/g, \"\") // remove comments\r\n .trim();\r\n };\r\n\r\n return [\r\n olovaRouter({ packageName: options.packageName }),\r\n {\r\n name: \"vite-plugin-olova\",\r\n config(userConfig, { isSsrBuild }) {\r\n // All optimizations are enabled by default\r\n const perfEnabled = options.performance?.enabled !== false;\r\n\r\n // Skip performance optimizations for SSR builds\r\n if (isSsrBuild) {\r\n return {\r\n build: {\r\n rollupOptions: {\r\n input: userConfig.build?.rollupOptions?.input || virtualModuleId,\r\n output: {\r\n // Simple output for SSR\r\n entryFileNames: 'index.js',\r\n chunkFileNames: '[name].js',\r\n assetFileNames: '[name].[ext]',\r\n format: 'esm',\r\n manualChunks: undefined,\r\n },\r\n },\r\n },\r\n };\r\n }\r\n\r\n // Full optimization config for client builds (all automatic!)\r\n const buildConfig: any = {\r\n // Output directory for assets\r\n assetsDir: 'assets/_olova',\r\n // Report compressed size in build output\r\n reportCompressedSize: true,\r\n rollupOptions: {\r\n input: userConfig.build?.rollupOptions?.input || virtualModuleId,\r\n output: {\r\n // Optimized chunk naming for caching\r\n chunkFileNames: 'assets/_olova/[name]-[hash].js',\r\n entryFileNames: 'assets/_olova/[name]-[hash].js',\r\n assetFileNames: 'assets/_olova/[name]-[hash].[ext]',\r\n // Enable smart code splitting\r\n ...(perfEnabled && {\r\n manualChunks: createManualChunks(),\r\n }),\r\n },\r\n },\r\n // Increase warning limit since we're doing smart chunking\r\n chunkSizeWarningLimit: 500,\r\n // Inline small assets (< 4KB)\r\n assetsInlineLimit: 4096,\r\n // Enable terser minification for smaller bundles\r\n minify: 'terser',\r\n terserOptions: {\r\n compress: {\r\n // Aggressive optimizations for production\r\n drop_console: false, // Keep console for debugging\r\n drop_debugger: true,\r\n pure_funcs: ['console.debug'],\r\n passes: 2,\r\n },\r\n mangle: {\r\n properties: false,\r\n },\r\n format: {\r\n comments: false,\r\n },\r\n },\r\n // Disable source maps for smaller builds\r\n sourcemap: false,\r\n // CSS code splitting\r\n cssCodeSplit: true,\r\n // Target modern browsers (smaller bundles)\r\n target: 'es2020',\r\n };\r\n\r\n return {\r\n build: buildConfig,\r\n // Optimize deps for faster dev startup\r\n optimizeDeps: {\r\n include: ['react', 'react-dom'],\r\n exclude: ['olova'],\r\n },\r\n // SSR options\r\n ssr: {\r\n noExternal: ['olova'],\r\n },\r\n // esbuild optimizations\r\n esbuild: {\r\n treeShaking: true,\r\n legalComments: 'none',\r\n },\r\n // Preview server configuration (for testing production builds)\r\n preview: {\r\n headers: {\r\n // Long-term caching for static assets\r\n 'Cache-Control': 'public, max-age=31536000',\r\n },\r\n },\r\n };\r\n },\r\n async configResolved(resolvedConfig) {\r\n config = resolvedConfig;\r\n },\r\n async resolveId(id) {\r\n if (id === virtualModuleId || id === serverVirtualModuleId || id === workerVirtualModuleId) {\r\n const isServer = id === serverVirtualModuleId;\r\n const isWorker = id === workerVirtualModuleId;\r\n const fileName = isWorker ? \"entry-worker\" : (isServer ? \"entry-server\" : \"main\");\r\n\r\n // 1. Try to find local project override first\r\n const possibleLocalPaths = [\r\n path.resolve(config.root, `src/${fileName}.tsx`),\r\n path.resolve(config.root, `src/${fileName}.ts`),\r\n path.resolve(config.root, `${fileName}.tsx`),\r\n path.resolve(config.root, `plugins/${fileName}.tsx`),\r\n ];\r\n\r\n for (const p of possibleLocalPaths) {\r\n if (existsSync(p)) return p;\r\n }\r\n\r\n // 2. Try to resolve via standard module resolution (ensures deduplication)\r\n const exportName = isWorker ? 'olova/entry-worker' : (isServer ? 'olova/entry-server' : 'olova/main');\r\n try {\r\n const resolved = await this.resolve(exportName, undefined, { skipSelf: true });\r\n if (resolved && !resolved.external) {\r\n return resolved.id;\r\n }\r\n } catch (e) {\r\n // Resolution failed, continue to fallback\r\n }\r\n\r\n // 3. Fallback to package's own entry (bundled or source) - mostly for local dev of the plugin\r\n const pkgDir = path.dirname(fileURLToPath(import.meta.url));\r\n const possiblePkgPaths = [\r\n path.resolve(pkgDir, `dist/${fileName}.js`),\r\n path.resolve(pkgDir, `${fileName}.js`),\r\n path.resolve(pkgDir, `${fileName}.mjs`),\r\n path.resolve(pkgDir, `${fileName}.ts`),\r\n path.resolve(pkgDir, `${fileName}.tsx`),\r\n path.resolve(pkgDir, `src/${fileName}.tsx`),\r\n path.resolve(pkgDir, `src/${fileName}.ts`),\r\n // If running from dist, check parent directories\r\n path.resolve(pkgDir, '..', `dist/${fileName}.js`),\r\n path.resolve(pkgDir, '..', `${fileName}.js`),\r\n path.resolve(pkgDir, '..', `${fileName}.tsx`),\r\n path.resolve(pkgDir, '..', `src/${fileName}.tsx`),\r\n ];\r\n\r\n for (const p of possiblePkgPaths) {\r\n if (existsSync(p)) return p;\r\n }\r\n }\r\n if (id === appVirtualModuleId) {\r\n return resolvedAppVirtualModuleId;\r\n }\r\n return null;\r\n },\r\n load(id) {\r\n if (id === resolvedAppVirtualModuleId) {\r\n // Generate virtual module that re-exports from the user's route.tree\r\n return `\r\n export { OlovaRouter, Outlet, routes, layouts, notFoundPages } from '@/route.tree';\r\n import '@/index.css';\r\n `;\r\n }\r\n return null;\r\n },\r\n configureServer(server) {\r\n // Generate a dev build ID that stays consistent during the dev session\r\n const devBuildId = generateBuildId();\r\n\r\n // Print startup banner\r\n logger.printBanner();\r\n\r\n // Print dev server info once ready\r\n\r\n\r\n // Delay printing to let Vite finish its own output first if needed, \r\n // or print immediately if we want to override. \r\n // Since Vite 7 prints its own banner, we might want to just print our info.\r\n // But user complained about the \"terminal looks bad\", so let's try to be clean.\r\n\r\n server.middlewares.use(async (req, res, next) => {\r\n const url = req.url?.split(\"?\")[0];\r\n if (\r\n url === \"/\" ||\r\n url === \"/index.html\" ||\r\n (req.headers.accept?.includes(\"text/html\") &&\r\n !url?.match(/\\.[a-z]+$/))\r\n ) {\r\n try {\r\n logger.printSSRRender(url || \"/\");\r\n let template = htmlContent;\r\n\r\n const { render } = await server.ssrLoadModule(\r\n serverVirtualModuleId,\r\n );\r\n const renderResult = await render(url || \"/\");\r\n // Handle both string return (legacy) and object return (new Flight format)\r\n const appHtml = typeof renderResult === 'string' ? renderResult : renderResult.html;\r\n const routeMetadata = typeof renderResult === 'string' ? {} : renderResult.metadata || {};\r\n const loaderData = typeof renderResult === 'string' ? undefined : renderResult.loaderData;\r\n const queryState = typeof renderResult === 'string' ? undefined : renderResult.queryState;\r\n\r\n let fullHtml = template.replace(\"<!--app-html-->\", appHtml);\r\n\r\n // =================================================================\r\n // Flight Hydration for Dev Server\r\n // =================================================================\r\n const hydrationData: OlovaHydrationData = {\r\n route: url || \"/\",\r\n params: {},\r\n metadata: routeMetadata,\r\n chunks: [], // Dev mode doesn't have pre-built chunks\r\n isStatic: false,\r\n loaderData: loaderData,\r\n queryState: queryState,\r\n };\r\n\r\n // Generate Flight hydration scripts\r\n const flightScripts = generateOlovaHydration(hydrationData, devBuildId);\r\n\r\n // Generate JSON-LD for SEO\r\n const jsonLdScript = generateJsonLd(hydrationData);\r\n\r\n // Generate resource hints (minimal in dev)\r\n const resourceHints = `<link rel=\"dns-prefetch\" href=\"//fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" crossorigin>`;\r\n\r\n // Inject JSON-LD and resource hints in head\r\n if (fullHtml.includes(\"</head>\")) {\r\n fullHtml = fullHtml.replace(\"</head>\", `${jsonLdScript}${resourceHints}</head>`);\r\n }\r\n\r\n // Inject Flight scripts and entry script for hydration\r\n if (fullHtml.includes(\"</body>\")) {\r\n fullHtml = fullHtml.replace(\r\n \"</body>\",\r\n `${flightScripts}<script type=\"module\" src=\"/@id/${virtualModuleId}\"></script></body>`,\r\n );\r\n } else {\r\n fullHtml += `${flightScripts}<script type=\"module\" src=\"/@id/${virtualModuleId}\"></script>`;\r\n }\r\n\r\n // Now apply Vite transforms.\r\n fullHtml = await server.transformIndexHtml(url || \"/\", fullHtml);\r\n\r\n // Prepend DOCTYPE if missing\r\n if (!fullHtml.trim().toLowerCase().startsWith(\"<!doctype html>\")) {\r\n fullHtml = `<!DOCTYPE html>${fullHtml}`;\r\n }\r\n\r\n res.statusCode = 200;\r\n res.setHeader(\"Content-Type\", \"text/html\");\r\n res.end(minifyHtml(fullHtml));\r\n return;\r\n } catch (e) {\r\n server.ssrFixStacktrace(e as Error);\r\n console.error(e);\r\n res.statusCode = 500;\r\n res.end((e as Error).stack);\r\n return;\r\n }\r\n }\r\n next();\r\n });\r\n },\r\n async writeBundle(_options, bundle) {\r\n if (config.command === \"serve\" || config.build.ssr) return;\r\n\r\n const buildStartTime = Date.now();\r\n logger.printBuildStart();\r\n const outDir = config.build.outDir; // dist/client\r\n const serverOutDir = path.resolve(config.root, \"dist/server\"); // Always dist/server\r\n\r\n // Find client entry chunk\r\n const clientEntry = Object.values(bundle).find(\r\n (chunk) =>\r\n chunk.type === \"chunk\" &&\r\n chunk.isEntry &&\r\n (chunk.facadeModuleId?.includes(\"main\") ||\r\n chunk.name === \"main\"),\r\n );\r\n const clientEntryFileName = clientEntry\r\n ? clientEntry.fileName\r\n : \"assets/index.js\";\r\n\r\n // Find CSS assets\r\n const cssAssets = Object.values(bundle).filter(\r\n (chunk) => chunk.type === \"asset\" && chunk.fileName.endsWith(\".css\"),\r\n );\r\n const cssLinks = cssAssets\r\n .map(\r\n (css) =>\r\n `<link rel=\"stylesheet\" crossorigin href=\"/${css.fileName}\">`,\r\n )\r\n .join(\"\");\r\n\r\n // 1. Build Server Bundle\r\n // We use configFile to get MDX and other plugins, but override build settings for SSR\r\n await build({\r\n configFile: config.configFile,\r\n root: config.root,\r\n build: {\r\n ssr: true,\r\n emptyOutDir: false,\r\n outDir: serverOutDir,\r\n minify: false, // Keep readable for debugging\r\n rollupOptions: {\r\n input: { index: serverVirtualModuleId },\r\n output: {\r\n entryFileNames: \"index.js\",\r\n chunkFileNames: \"[name].js\",\r\n assetFileNames: \"[name].[ext]\",\r\n format: \"esm\",\r\n // Explicitly set to undefined to prevent client-side chunking config\r\n manualChunks: undefined,\r\n },\r\n },\r\n },\r\n logLevel: \"error\",\r\n });\r\n\r\n // 2. Load Server Entry to get routes\r\n const serverEntryPath = path.resolve(serverOutDir, \"index.js\");\r\n const serverEntryUrl = pathToFileURL(serverEntryPath).toString();\r\n // Initial import to get routes\r\n const { routes } = await import(serverEntryUrl);\r\n\r\n // 3. Generate Pages\r\n const paths = [\"/\"];\r\n\r\n function extractPaths(routesArr: any[]) {\r\n routesArr.forEach((r) => {\r\n if (r.path && !r.path.includes(\"*\") && !r.path.includes(\":\")) {\r\n paths.push(r.path);\r\n }\r\n });\r\n }\r\n if (Array.isArray(routes)) extractPaths(routes);\r\n\r\n // 3b. Expand dynamic routes via getStaticPaths()\r\n if (Array.isArray(routes)) {\r\n for (const r of routes) {\r\n const isDynamic = r.path.includes(\":\") || r.path.includes(\"*\");\r\n if (r.getStaticPaths && isDynamic) {\r\n try {\r\n const staticPaths = await r.getStaticPaths();\r\n if (Array.isArray(staticPaths)) {\r\n for (const entry of staticPaths) {\r\n // entry = { params: { id: '1' } } or { params: { slug: 'hello/world' } }\r\n let expandedPath = r.path;\r\n if (entry.params) {\r\n for (const [key, value] of Object.entries(entry.params)) {\r\n expandedPath = expandedPath.replace(`:${key}`, value as string);\r\n expandedPath = expandedPath.replace('*', value as string);\r\n }\r\n }\r\n paths.push(expandedPath);\r\n }\r\n logger.info(`getStaticPaths for ${r.path}: ${staticPaths.length} paths expanded`);\r\n }\r\n } catch (e) {\r\n logger.warn(`getStaticPaths() failed for ${r.path}: ${(e as Error).message}`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Add user-provided static paths\r\n if (options.staticPaths) {\r\n options.staticPaths.forEach((p) => paths.push(p));\r\n }\r\n\r\n const uniquePaths = [...new Set(paths)];\r\n\r\n // Generate a unique build ID for this build\r\n const buildId = generateBuildId();\r\n logger.printSSGStart(buildId);\r\n\r\n // Print route table\r\n const routeInfo = uniquePaths.map(p => ({\r\n path: p,\r\n type: (p.includes(':') || p.includes('*') ? 'dynamic' : 'static') as 'static' | 'dynamic'\r\n }));\r\n logger.printRoutes(routeInfo);\r\n\r\n logger.printFlightInfo();\r\n\r\n // Collect all JS chunks for prefetching\r\n const jsChunks = Object.values(bundle)\r\n .filter((chunk) => chunk.type === \"chunk\" && chunk.fileName.endsWith(\".js\"))\r\n .map((chunk) => chunk.fileName);\r\n\r\n let successCount = 0;\r\n let failCount = 0;\r\n\r\n for (const p of uniquePaths) {\r\n try {\r\n // Update window location for the fresh import to pick up\r\n if (typeof (globalThis as any).window !== \"undefined\") {\r\n (globalThis as any).window.location.pathname = p;\r\n }\r\n\r\n // FORCE RE-IMPORT for every page to ensure clean state (fresh Router/History instance)\r\n const cacheBuster = `?t=${Date.now()}-${Math.random()}`;\r\n // We destructured render from the fresh module\r\n const { render } = await import(serverEntryUrl + cacheBuster);\r\n\r\n // Render returns { html, metadata, route, loaderData, queryState }\r\n const renderResult = await render(p);\r\n const appHtml = typeof renderResult === 'string' ? renderResult : renderResult.html;\r\n const routeMetadata = typeof renderResult === 'string' ? {} : renderResult.metadata || {};\r\n const loaderData = typeof renderResult === 'string' ? undefined : renderResult.loaderData;\r\n const queryState = typeof renderResult === 'string' ? undefined : renderResult.queryState;\r\n\r\n let html = htmlContent.replace(\"<!--app-html-->\", appHtml);\r\n\r\n // Generate smart preload hints based on chunk priority\r\n const preloadHints = generatePreloadHints(jsChunks, clientEntryFileName);\r\n const preloadTags = generatePreloadTags(preloadHints);\r\n\r\n // Prepare hydration data for this page\r\n const hydrationData: OlovaHydrationData = {\r\n route: p,\r\n params: {},\r\n metadata: routeMetadata,\r\n chunks: jsChunks,\r\n isStatic: true,\r\n loaderData: loaderData,\r\n queryState: queryState,\r\n };\r\n\r\n // Generate Flight hydration scripts\r\n const flightScripts = generateOlovaHydration(hydrationData, buildId);\r\n\r\n // Generate JSON-LD for SEO\r\n const jsonLdScript = generateJsonLd(hydrationData);\r\n\r\n // Generate resource hints (DNS prefetch, preconnect)\r\n const resourceHints = generateResourceHints(hydrationData);\r\n\r\n // Inject JSON-LD, resource hints, CSS, and smart preload tags at end of head\r\n if (html.includes(\"</head>\")) {\r\n html = html.replace(\"</head>\", `${jsonLdScript}${resourceHints}${cssLinks}${preloadTags}</head>`);\r\n }\r\n\r\n // Inject Flight scripts and main script at end of body\r\n if (html.includes(\"</body>\")) {\r\n html = html.replace(\r\n \"</body>\",\r\n `${flightScripts}<script type=\"module\" src=\"/${clientEntryFileName}\"></script></body>`,\r\n );\r\n } else {\r\n // Fallback if no body tag found\r\n html += `${flightScripts}<script type=\"module\" src=\"/${clientEntryFileName}\"></script>`;\r\n }\r\n\r\n // Prepend DOCTYPE if missing\r\n if (!html.trim().toLowerCase().startsWith(\"<!doctype html>\")) {\r\n html = `<!DOCTYPE html>${html}`;\r\n }\r\n\r\n const itemPath =\r\n p === \"/\" ? \"index.html\" : `${p.substring(1)}/index.html`;\r\n const finalPath = path.resolve(outDir, itemPath);\r\n await fs.mkdir(path.dirname(finalPath), { recursive: true });\r\n await fs.writeFile(finalPath, minifyHtml(html));\r\n logger.printPageGenerated(itemPath, true);\r\n successCount++;\r\n } catch (e) {\r\n logger.printPageError(p, (e as Error).message);\r\n failCount++;\r\n }\r\n }\r\n\r\n // =====================================================================\r\n // Generate 404.html for CDN compatibility (Cloudflare, Vercel, Netlify)\r\n // =====================================================================\r\n try {\r\n const notFoundPath = '/__olova_404__';\r\n if (typeof (globalThis as any).window !== \"undefined\") {\r\n (globalThis as any).window.location.pathname = notFoundPath;\r\n }\r\n const cacheBuster404 = `?t=${Date.now()}-${Math.random()}`;\r\n const { render: render404 } = await import(serverEntryUrl + cacheBuster404);\r\n const result404 = await render404(notFoundPath);\r\n const html404Content = typeof result404 === 'string' ? result404 : result404.html;\r\n\r\n let html404 = htmlContent.replace(\"<!--app-html-->\", html404Content);\r\n\r\n // Add basic CSS and entry script\r\n const preloadHints404 = generatePreloadHints(jsChunks, clientEntryFileName);\r\n const preloadTags404 = generatePreloadTags(preloadHints404);\r\n\r\n const hydrationData404: OlovaHydrationData = {\r\n route: '/404',\r\n params: {},\r\n metadata: { title: '404 - Page Not Found' },\r\n chunks: jsChunks,\r\n isStatic: true,\r\n };\r\n\r\n const flightScripts404 = generateOlovaHydration(hydrationData404, buildId);\r\n const jsonLd404 = generateJsonLd(hydrationData404);\r\n const resourceHints404 = generateResourceHints(hydrationData404);\r\n\r\n if (html404.includes(\"</head>\")) {\r\n html404 = html404.replace(\"</head>\", `${jsonLd404}${resourceHints404}${cssLinks}${preloadTags404}</head>`);\r\n }\r\n if (html404.includes(\"</body>\")) {\r\n html404 = html404.replace(\"</body>\", `${flightScripts404}<script type=\"module\" src=\"/${clientEntryFileName}\"></script></body>`);\r\n } else {\r\n html404 += `${flightScripts404}<script type=\"module\" src=\"/${clientEntryFileName}\"></script>`;\r\n }\r\n if (!html404.trim().toLowerCase().startsWith(\"<!doctype html>\")) {\r\n html404 = `<!DOCTYPE html>${html404}`;\r\n }\r\n\r\n const notFoundFinalPath = path.resolve(outDir, '404.html');\r\n await fs.writeFile(notFoundFinalPath, minifyHtml(html404));\r\n logger.printPageGenerated('404.html', true);\r\n successCount++;\r\n } catch (e) {\r\n logger.warn(`Failed to generate 404.html: ${(e as Error).message}`);\r\n }\r\n\r\n // Cleanup server bundle (not needed for static serving)\r\n await fs.rm(serverOutDir, { recursive: true, force: true });\r\n\r\n const buildTime = Date.now() - buildStartTime;\r\n logger.printSSGComplete({\r\n totalPages: successCount,\r\n successPages: successCount,\r\n failedPages: failCount,\r\n buildTime\r\n });\r\n },\r\n } as Plugin,\r\n // Add performance optimization plugins\r\n ...(options.performance?.enabled !== false ? olovaPerformance(options.performance) : []),\r\n ];\r\n}\r\n"]}
|