olovastart 0.0.1 → 0.0.3

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.
@@ -380,5 +380,5 @@ function olovaPerformance(options = {}) {
380
380
  var performance_default = olovaPerformance;
381
381
 
382
382
  export { chunkAnalysisPlugin, compressionPlugin, createManualChunks, formatBytes, generatePreloadHints, generatePreloadTags, getGzipSize, logger_default, olovaPerformance, performance_default };
383
- //# sourceMappingURL=chunk-WDVSAQST.js.map
384
- //# sourceMappingURL=chunk-WDVSAQST.js.map
383
+ //# sourceMappingURL=chunk-R67KDYDB.js.map
384
+ //# sourceMappingURL=chunk-R67KDYDB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger.ts","../src/performance.ts"],"names":["path","error"],"mappings":"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","file":"chunk-WDVSAQST.js","sourcesContent":["/**\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// Symbols\r\nconst SYMBOLS = {\r\n success: pc.green('✓'),\r\n error: pc.red('✗'),\r\n warning: pc.yellow('⚠'),\r\n info: pc.blue('○'),\r\n arrow: pc.cyan('→'),\r\n bullet: pc.dim('•'),\r\n rocket: '🚀',\r\n sparkles: '✨',\r\n package: '📦',\r\n route: pc.cyan('λ'),\r\n static: pc.green('○'),\r\n dynamic: pc.magenta('ƒ'),\r\n};\r\n\r\n// Olova brand colors\r\nconst brand = {\r\n name: pc.bold(pc.cyan('Olova')),\r\n version: pc.dim('v1.0.0'),\r\n tagline: pc.dim('Flight-powered SSG'),\r\n};\r\n\r\n/**\r\n * Print the startup banner\r\n */\r\nexport function printBanner() {\r\n console.log('');\r\n console.log(pc.cyan(` ${SYMBOLS.rocket} ${brand.name} ${brand.version}`));\r\n console.log(pc.dim(` ${brand.tagline}`));\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(` ${SYMBOLS.success} ${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\r\n */\r\nexport function printBuildStart() {\r\n console.log('');\r\n console.log(` ${SYMBOLS.package} ${pc.bold('Creating 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('Static Site Generation'))}`);\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 list in a nice table format\r\n */\r\nexport function printRoutes(routes: { path: string; type: 'static' | 'dynamic' }[]) {\r\n console.log(` ${pc.bold('Route')}${' '.repeat(30)}${pc.bold('Type')}`);\r\n console.log(` ${pc.dim('─'.repeat(45))}`);\r\n \r\n for (const route of routes) {\r\n const typeIcon = route.type === 'static' ? SYMBOLS.static : SYMBOLS.dynamic;\r\n const typeLabel = route.type === 'static' \r\n ? pc.green('Static') \r\n : pc.magenta('Dynamic');\r\n const padding = ' '.repeat(Math.max(2, 35 - route.path.length));\r\n console.log(` ${typeIcon} ${route.path}${padding}${typeLabel}`);\r\n }\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 flightBadge = hasFlightData ? pc.dim(' [Flight]') : '';\r\n console.log(` ${SYMBOLS.success} ${pc.dim('Generated')} ${pc.white(path)}${flightBadge}`);\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(` ${SYMBOLS.error} ${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(` ${SYMBOLS.warning} ${pc.yellow('Build completed with warnings')}`);\r\n } else {\r\n console.log(` ${SYMBOLS.sparkles} ${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\r\n */\r\nexport function printFlightInfo() {\r\n console.log(` ${SYMBOLS.info} ${pc.dim('Flight hydration enabled')}`);\r\n console.log(` ${pc.dim('•')} JSON-LD structured data`);\r\n console.log(` ${pc.dim('•')} Resource hints (preload, prefetch)`);\r\n console.log(` ${pc.dim('•')} $OLOVA global object`);\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(` ${SYMBOLS.info} ${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(` ${SYMBOLS.success} ${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(` ${SYMBOLS.warning} ${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(` ${SYMBOLS.error} ${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(` ${SYMBOLS.arrow} ${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 SYMBOLS,\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')) {\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"]}
1
+ {"version":3,"sources":["../src/logger.ts","../src/performance.ts"],"names":["path","error"],"mappings":"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","file":"chunk-R67KDYDB.js","sourcesContent":["/**\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// Symbols\r\nconst SYMBOLS = {\r\n success: pc.green('✓'),\r\n error: pc.red('✗'),\r\n warning: pc.yellow('⚠'),\r\n info: pc.blue('○'),\r\n arrow: pc.cyan('→'),\r\n bullet: pc.dim('•'),\r\n rocket: '🚀',\r\n sparkles: '✨',\r\n package: '📦',\r\n route: pc.cyan('λ'),\r\n static: pc.green('○'),\r\n dynamic: pc.magenta('ƒ'),\r\n};\r\n\r\n// Olova brand colors\r\nconst brand = {\r\n name: pc.bold(pc.cyan('Olova')),\r\n version: pc.dim('v1.0.0'),\r\n tagline: pc.dim('Flight-powered SSG'),\r\n};\r\n\r\n/**\r\n * Print the startup banner\r\n */\r\nexport function printBanner() {\r\n console.log('');\r\n console.log(pc.cyan(` ${SYMBOLS.rocket} ${brand.name} ${brand.version}`));\r\n console.log(pc.dim(` ${brand.tagline}`));\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(` ${SYMBOLS.success} ${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\r\n */\r\nexport function printBuildStart() {\r\n console.log('');\r\n console.log(` ${SYMBOLS.package} ${pc.bold('Creating 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('Static Site Generation'))}`);\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 list in a nice table format\r\n */\r\nexport function printRoutes(routes: { path: string; type: 'static' | 'dynamic' }[]) {\r\n console.log(` ${pc.bold('Route')}${' '.repeat(30)}${pc.bold('Type')}`);\r\n console.log(` ${pc.dim('─'.repeat(45))}`);\r\n \r\n for (const route of routes) {\r\n const typeIcon = route.type === 'static' ? SYMBOLS.static : SYMBOLS.dynamic;\r\n const typeLabel = route.type === 'static' \r\n ? pc.green('Static') \r\n : pc.magenta('Dynamic');\r\n const padding = ' '.repeat(Math.max(2, 35 - route.path.length));\r\n console.log(` ${typeIcon} ${route.path}${padding}${typeLabel}`);\r\n }\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 flightBadge = hasFlightData ? pc.dim(' [Flight]') : '';\r\n console.log(` ${SYMBOLS.success} ${pc.dim('Generated')} ${pc.white(path)}${flightBadge}`);\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(` ${SYMBOLS.error} ${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(` ${SYMBOLS.warning} ${pc.yellow('Build completed with warnings')}`);\r\n } else {\r\n console.log(` ${SYMBOLS.sparkles} ${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\r\n */\r\nexport function printFlightInfo() {\r\n console.log(` ${SYMBOLS.info} ${pc.dim('Flight hydration enabled')}`);\r\n console.log(` ${pc.dim('•')} JSON-LD structured data`);\r\n console.log(` ${pc.dim('•')} Resource hints (preload, prefetch)`);\r\n console.log(` ${pc.dim('•')} $OLOVA global object`);\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(` ${SYMBOLS.info} ${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(` ${SYMBOLS.success} ${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(` ${SYMBOLS.warning} ${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(` ${SYMBOLS.error} ${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(` ${SYMBOLS.arrow} ${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 SYMBOLS,\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')) {\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"]}
@@ -1,10 +1,10 @@
1
- import './chunk-PR4QN5HX.js';
2
1
  import { StrictMode, Suspense } from 'react';
3
2
  import { renderToString } from 'react-dom/server';
4
3
  import { layouts, Outlet, OlovaRouter, notFoundPages, routes } from 'virtual:olova-app';
5
4
  export { routes } from 'virtual:olova-app';
6
5
  import { jsx } from 'react/jsx-runtime';
7
6
 
7
+ // src/entry-server.tsx
8
8
  var wrappedLayouts = layouts.map((item) => ({
9
9
  ...item,
10
10
  layout: (props) => /* @__PURE__ */ jsx(item.layout, { ...props, children: /* @__PURE__ */ jsx(Outlet, {}) })