@teamvelix/velix 5.0.4 → 5.0.5
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/{chunk-NVTZ6HRX.js → chunk-AS5PH3NU.js} +18 -8
- package/dist/chunk-AS5PH3NU.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/runtime/start-dev.js +1 -1
- package/dist/runtime/start-prod.js +1 -1
- package/dist/server/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-NVTZ6HRX.js.map +0 -1
|
@@ -1072,7 +1072,10 @@ function generateDevToolsHtml(isDev) {
|
|
|
1072
1072
|
};
|
|
1073
1073
|
|
|
1074
1074
|
es.onerror = () => {
|
|
1075
|
-
|
|
1075
|
+
// EventSource auto-reconnects \u2014 only show error if connection is fully closed
|
|
1076
|
+
if (es.readyState === 2) {
|
|
1077
|
+
window.__VELIX_DEV_TOOLS__.setStatus('error');
|
|
1078
|
+
}
|
|
1076
1079
|
};
|
|
1077
1080
|
</script>
|
|
1078
1081
|
|
|
@@ -1098,7 +1101,7 @@ function generateDevToolsHtml(isDev) {
|
|
|
1098
1101
|
<div style="font-size:13px;color:#cbd5e1;line-height:2;">
|
|
1099
1102
|
<div style="display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;">
|
|
1100
1103
|
<span style="color:#94a3b8;">Framework</span>
|
|
1101
|
-
<strong style="color:white;font-weight:600;">v5.0.
|
|
1104
|
+
<strong style="color:white;font-weight:600;">v5.0.4</strong>
|
|
1102
1105
|
</div>
|
|
1103
1106
|
<div style="display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;">
|
|
1104
1107
|
<span style="color:#94a3b8;">Environment</span>
|
|
@@ -1132,6 +1135,7 @@ function generate404Page(pathname = "/") {
|
|
|
1132
1135
|
<meta charset="UTF-8">
|
|
1133
1136
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1134
1137
|
<title>404 - Page Not Found | Velix v5</title>
|
|
1138
|
+
<link rel="icon" href="/favicon.webp">
|
|
1135
1139
|
<style>
|
|
1136
1140
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
1137
1141
|
body {
|
|
@@ -1286,6 +1290,7 @@ function generate500Page(options) {
|
|
|
1286
1290
|
<meta charset="UTF-8">
|
|
1287
1291
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1288
1292
|
<title>Error | Velix v5</title>
|
|
1293
|
+
<link rel="icon" href="/favicon.webp">
|
|
1289
1294
|
<style>
|
|
1290
1295
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
1291
1296
|
body {
|
|
@@ -1576,7 +1581,7 @@ function generate500Page(options) {
|
|
|
1576
1581
|
<div class="footer">
|
|
1577
1582
|
<div class="brand">
|
|
1578
1583
|
<img src="/__velix/logo.webp" alt="Velix" onerror="this.style.display='none'"/>
|
|
1579
|
-
<span>Velix v5.0.
|
|
1584
|
+
<span>Velix v5.0.4</span>
|
|
1580
1585
|
</div>
|
|
1581
1586
|
<div class="footer-links">
|
|
1582
1587
|
<a href="/">Home</a>
|
|
@@ -1983,9 +1988,14 @@ async function serveVelixInternal(pathname, req, res, projectRoot) {
|
|
|
1983
1988
|
if (pathname === "/__velix/logo.webp") {
|
|
1984
1989
|
const __filename2 = fileURLToPath(import.meta.url);
|
|
1985
1990
|
const __dirname2 = path4.dirname(__filename2);
|
|
1986
|
-
const
|
|
1987
|
-
|
|
1988
|
-
|
|
1991
|
+
const candidates = [
|
|
1992
|
+
path4.join(__dirname2, "..", "assets", "logo.webp"),
|
|
1993
|
+
path4.join(process.cwd(), "node_modules", "@teamvelix", "velix", "assets", "logo.webp"),
|
|
1994
|
+
path4.join(process.cwd(), "node_modules", "velix", "assets", "logo.webp"),
|
|
1995
|
+
path4.join(process.cwd(), "public", "favicon.webp")
|
|
1996
|
+
];
|
|
1997
|
+
const logoPath = candidates.find((p) => fs4.existsSync(p));
|
|
1998
|
+
if (logoPath) {
|
|
1989
1999
|
res.writeHead(200, { "Content-Type": "image/webp", "Cache-Control": "public, max-age=31536000, immutable" });
|
|
1990
2000
|
res.end(fs4.readFileSync(logoPath));
|
|
1991
2001
|
} else {
|
|
@@ -2085,5 +2095,5 @@ function parseRequestBody(req) {
|
|
|
2085
2095
|
var server_default = { createServer, tailwindPlugin };
|
|
2086
2096
|
|
|
2087
2097
|
export { NotFoundError, PluginHooks, PluginManager, RedirectError, bindArgs, callServerAction, composeMiddleware, cookies, createServer, definePlugin, deserializeArgs, executeAction, formAction, generateJsonLd, generateMetadataTags, generateRobotsTxt, generateSitemap, getAction, getMethod, getPathname, headers, html, isMethod, json, jsonLd, loadMiddleware, loadPlugins, mergeMetadata, middlewares, notFound, parseFormData, parseJson, parseSearchParams, pluginManager, redirect, registerAction, runMiddleware, serverAction, server_default, tailwindPlugin, text, useActionContext, useVelixAction };
|
|
2088
|
-
//# sourceMappingURL=chunk-
|
|
2089
|
-
//# sourceMappingURL=chunk-
|
|
2098
|
+
//# sourceMappingURL=chunk-AS5PH3NU.js.map
|
|
2099
|
+
//# sourceMappingURL=chunk-AS5PH3NU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../middleware/index.ts","../plugins/index.ts","../plugins/tailwind.ts","../metadata/index.ts","../helpers.ts","../actions/index.ts","../server/devtools.ts","../server/error-pages.ts","../server/index.ts"],"names":["path","fs","pathToFileURL","cookies","url","cli","headers","useActionStateReact","text","__filename","__dirname"],"mappings":"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","file":"chunk-AS5PH3NU.js","sourcesContent":["/**\n * Velix v5 Middleware System\n * Request processing pipeline with composable middleware\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface MiddlewareRequest {\n url: string;\n method: string;\n headers: Record<string, string | string[] | undefined>;\n cookies: Record<string, string>;\n params: Record<string, string>;\n query: Record<string, string>;\n body?: any;\n raw: import('http').IncomingMessage;\n}\n\nexport interface MiddlewareResponse {\n status: (code: number) => MiddlewareResponse;\n header: (name: string, value: string) => MiddlewareResponse;\n json: (data: any) => void;\n redirect: (url: string, status?: number) => void;\n rewrite: (url: string) => void;\n next: () => Promise<void>;\n _statusCode: number;\n _headers: Record<string, string>;\n _redirectUrl: string | null;\n _rewriteUrl: string | null;\n _ended: boolean;\n}\n\nexport type MiddlewareFunction = (\n req: MiddlewareRequest,\n res: MiddlewareResponse,\n next: () => Promise<void>\n) => void | Promise<void>;\n\nexport type MiddlewareResult = {\n continue: boolean;\n rewritten: boolean;\n};\n\n// ============================================================================\n// Built-in Middleware Registry\n// ============================================================================\n\nexport const middlewares = {\n cors(options: {\n origin?: string | string[];\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n } = {}): MiddlewareFunction {\n const {\n origin = '*',\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n headers: allowHeaders = ['Content-Type', 'Authorization'],\n credentials = false,\n maxAge = 86400\n } = options;\n\n return async (req, res, next) => {\n const originHeader = typeof origin === 'string' ? origin : origin.includes(req.headers.origin as string) ? req.headers.origin as string : '';\n\n res.header('Access-Control-Allow-Origin', originHeader);\n res.header('Access-Control-Allow-Methods', methods.join(', '));\n res.header('Access-Control-Allow-Headers', allowHeaders.join(', '));\n res.header('Access-Control-Max-Age', String(maxAge));\n\n if (credentials) {\n res.header('Access-Control-Allow-Credentials', 'true');\n }\n\n if (req.method === 'OPTIONS') {\n res.status(204);\n return;\n }\n\n await next();\n };\n },\n\n rateLimit(options: {\n windowMs?: number;\n max?: number;\n message?: string;\n } = {}): MiddlewareFunction {\n const { windowMs = 60000, max = 100, message = 'Too many requests' } = options;\n const store = new Map<string, { count: number; resetTime: number }>();\n\n return async (req, res, next) => {\n const ip = req.headers['x-forwarded-for'] as string || 'unknown';\n const now = Date.now();\n const record = store.get(ip);\n\n if (!record || now > record.resetTime) {\n store.set(ip, { count: 1, resetTime: now + windowMs });\n } else if (record.count >= max) {\n res.status(429).json({ error: message });\n return;\n } else {\n record.count++;\n }\n\n await next();\n };\n },\n\n security(): MiddlewareFunction {\n return async (_req, res, next) => {\n res.header('X-Content-Type-Options', 'nosniff');\n res.header('X-Frame-Options', 'DENY');\n res.header('X-XSS-Protection', '1; mode=block');\n res.header('Referrer-Policy', 'strict-origin-when-cross-origin');\n await next();\n };\n },\n};\n\n// ============================================================================\n// Middleware Loader\n// ============================================================================\n\n/**\n * Loads middleware from the project's middleware/ directory\n */\nexport async function loadMiddleware(projectRoot: string): Promise<MiddlewareFunction[]> {\n const middlewareDir = path.join(projectRoot, 'middleware');\n const fns: MiddlewareFunction[] = [];\n\n if (!fs.existsSync(middlewareDir)) return fns;\n\n const files = fs.readdirSync(middlewareDir).filter(f => /\\.(ts|js)$/.test(f)).sort();\n\n for (const file of files) {\n try {\n const filePath = path.join(middlewareDir, file);\n const { pathToFileURL } = await import('url');\n const url = pathToFileURL(filePath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const fn = mod.default || mod.middleware;\n if (typeof fn === 'function') fns.push(fn);\n } catch (err: any) {\n console.warn(`⚠ Failed to load middleware ${file}: ${err.message}`);\n }\n }\n\n return fns;\n}\n\n// ============================================================================\n// Middleware Runner\n// ============================================================================\n\n/**\n * Runs middleware chain for a request\n */\nexport async function runMiddleware(\n req: import('http').IncomingMessage,\n res: import('http').ServerResponse,\n fns: MiddlewareFunction[]\n): Promise<MiddlewareResult> {\n const result: MiddlewareResult = { continue: true, rewritten: false };\n if (fns.length === 0) return result;\n\n const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\n const cookies: Record<string, string> = {};\n const cookieHeader = req.headers.cookie;\n if (cookieHeader) {\n cookieHeader.split(';').forEach(c => {\n const [k, ...v] = c.split('=');\n if (k) cookies[k.trim()] = v.join('=').trim();\n });\n }\n\n const mReq: MiddlewareRequest = {\n url: req.url || '/',\n method: req.method || 'GET',\n headers: req.headers as Record<string, string>,\n cookies,\n params: {},\n query: Object.fromEntries(url.searchParams),\n raw: req,\n };\n\n let ended = false;\n const mRes: MiddlewareResponse = {\n _statusCode: 200,\n _headers: {},\n _redirectUrl: null,\n _rewriteUrl: null,\n _ended: false,\n status(code) { this._statusCode = code; return this; },\n header(name, value) { this._headers[name] = value; return this; },\n json(data) {\n this._headers['Content-Type'] = 'application/json';\n res.writeHead(this._statusCode, this._headers);\n res.end(JSON.stringify(data));\n this._ended = true;\n ended = true;\n },\n redirect(url, status = 307) {\n this._redirectUrl = url;\n this._statusCode = status;\n res.writeHead(status, { Location: url, ...this._headers });\n res.end();\n this._ended = true;\n ended = true;\n },\n rewrite(url) {\n this._rewriteUrl = url;\n req.url = url;\n result.rewritten = true;\n },\n async next() { /* handled by chain */ },\n };\n\n // Run middleware chain\n let index = 0;\n const next = async () => {\n if (ended || index >= fns.length) return;\n const fn = fns[index++];\n await fn(mReq, mRes, next);\n };\n\n await next();\n\n // Apply headers that were set\n if (!ended) {\n for (const [key, value] of Object.entries(mRes._headers)) {\n res.setHeader(key, value);\n }\n }\n\n result.continue = !ended;\n return result;\n}\n\n/**\n * Compose multiple middleware into one\n */\nexport function composeMiddleware(...fns: MiddlewareFunction[]): MiddlewareFunction {\n return async (req, res, next) => {\n let index = 0;\n const run = async () => {\n if (index >= fns.length) { await next(); return; }\n const fn = fns[index++];\n await fn(req, res, run);\n };\n await run();\n };\n}\n","/**\n * Velix v5 Plugin System\n * Extensible hook-based plugin architecture\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\n\n// ============================================================================\n// Plugin Hooks\n// ============================================================================\n\nexport const PluginHooks = {\n CONFIG: 'config',\n SERVER_START: 'server:start',\n REQUEST: 'request',\n RESPONSE: 'response',\n ROUTES_LOADED: 'routes:loaded',\n BEFORE_RENDER: 'render:before',\n AFTER_RENDER: 'render:after',\n BUILD_START: 'build:start',\n BUILD_END: 'build:end',\n} as const;\n\nexport type PluginHook = typeof PluginHooks[keyof typeof PluginHooks];\n\n// ============================================================================\n// Plugin Interface\n// ============================================================================\n\nexport interface VelixPluginDefinition {\n name: string;\n version?: string;\n setup?: (config: any) => void | Promise<void>;\n hooks?: Partial<Record<PluginHook, (...args: any[]) => any>>;\n [key: string]: any; // Allow for Zod passthrough and extra properties\n}\n\n// ============================================================================\n// Plugin Manager\n// ============================================================================\n\nexport class PluginManager {\n private plugins: VelixPluginDefinition[] = [];\n private hooks: Map<string, Array<(...args: any[]) => any>> = new Map();\n\n /**\n * Register a plugin\n */\n register(plugin: VelixPluginDefinition) {\n this.plugins.push(plugin);\n\n // Register hooks\n if (plugin.hooks) {\n for (const [hookName, handler] of Object.entries(plugin.hooks)) {\n if (handler) {\n const existing = this.hooks.get(hookName) || [];\n existing.push(handler);\n this.hooks.set(hookName, existing);\n }\n }\n }\n }\n\n /**\n * Run a hook with arguments\n */\n async runHook(hookName: string, ...args: any[]): Promise<void> {\n const handlers = this.hooks.get(hookName) || [];\n for (const handler of handlers) {\n await handler(...args);\n }\n }\n\n /**\n * Run a waterfall hook — each handler transforms the first argument\n */\n async runWaterfallHook(hookName: string, value: any, ...args: any[]): Promise<any> {\n const handlers = this.hooks.get(hookName) || [];\n let result = value;\n for (const handler of handlers) {\n const transformed = await handler(result, ...args);\n if (transformed !== undefined) result = transformed;\n }\n return result;\n }\n\n /**\n * Get all registered plugins\n */\n getPlugins(): VelixPluginDefinition[] {\n return [...this.plugins];\n }\n\n /**\n * Check if a plugin is registered\n */\n hasPlugin(name: string): boolean {\n return this.plugins.some(p => p.name === name);\n }\n}\n\n// ============================================================================\n// Global Instance\n// ============================================================================\n\nexport const pluginManager = new PluginManager();\n\n// ============================================================================\n// Plugin Loader\n// ============================================================================\n\n/**\n * Load plugins from project configuration\n */\nexport async function loadPlugins(projectRoot: string, config: any): Promise<void> {\n const pluginEntries = config.plugins || [];\n\n for (const entry of pluginEntries) {\n try {\n if (typeof entry === 'string') {\n // Load plugin by name (from plugins/ dir or node_modules)\n const localPath = path.join(projectRoot, 'plugins', entry + '.ts');\n const localPathJs = path.join(projectRoot, 'plugins', entry + '.js');\n const localPathDir = path.join(projectRoot, 'plugins', entry, 'index.ts');\n\n let pluginPath: string | null = null;\n if (fs.existsSync(localPath)) pluginPath = localPath;\n else if (fs.existsSync(localPathJs)) pluginPath = localPathJs;\n else if (fs.existsSync(localPathDir)) pluginPath = localPathDir;\n\n if (pluginPath) {\n const url = pathToFileURL(pluginPath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const plugin = mod.default || mod;\n if (plugin.name) {\n pluginManager.register(plugin);\n }\n } else {\n // Try node_modules\n try {\n const mod = await import(entry);\n const plugin = mod.default || mod;\n if (plugin.name) pluginManager.register(plugin);\n } catch {\n console.warn(`⚠ Plugin not found: ${entry}`);\n }\n }\n } else if (typeof entry === 'object' && entry.name) {\n // Inline plugin definition\n pluginManager.register(entry);\n }\n } catch (err: any) {\n console.warn(`⚠ Failed to load plugin: ${err.message}`);\n }\n }\n}\n\n// ============================================================================\n// Plugin Definition Helper\n// ============================================================================\n\n/**\n * Helper to define a Velix plugin with type safety.\n *\n * @example\n * ```ts\n * export default definePlugin({\n * name: 'my-plugin',\n * hooks: {\n * 'server:start': (server) => {\n * console.log('Server started!');\n * }\n * }\n * });\n * ```\n */\nexport function definePlugin(definition: VelixPluginDefinition): VelixPluginDefinition {\n return definition;\n}\n\n// ============================================================================\n// Built-in Plugins\n// ============================================================================\n\nexport const builtinPlugins = {\n /**\n * Security headers plugin\n */\n security: definePlugin({\n name: 'velix:security',\n hooks: {\n [PluginHooks.RESPONSE]: (_req, res) => {\n if (!res.headersSent) {\n res.setHeader('X-Content-Type-Options', 'nosniff');\n res.setHeader('X-Frame-Options', 'DENY');\n res.setHeader('X-XSS-Protection', '1; mode=block');\n }\n }\n }\n }),\n\n /**\n * Request logging plugin\n */\n logger: definePlugin({\n name: 'velix:logger',\n hooks: {\n [PluginHooks.RESPONSE]: (req, _res, duration) => {\n console.log(` ${req.method} ${req.url} ${duration}ms`);\n }\n }\n }),\n};\n","import { spawnSync, spawn } from 'child_process';\nimport fs from 'fs';\nimport path from 'path';\nimport { PluginHooks, definePlugin } from './index.js';\nimport logger from '../logger.js';\n\nexport interface TailwindPluginOptions {\n input?: string;\n output?: string;\n config?: string;\n minify?: boolean;\n}\n\n/**\n * Detect which Tailwind CLI is available (v4: @tailwindcss/cli, v3: tailwindcss)\n */\nfunction detectTailwindCli(): string {\n // Try v4 CLI first\n const v4 = spawnSync('npx', ['@tailwindcss/cli', '--help'], {\n stdio: 'pipe',\n shell: process.platform === 'win32',\n timeout: 15000,\n });\n if (v4.status === 0) return '@tailwindcss/cli';\n\n // Fallback to v3 CLI\n return 'tailwindcss';\n}\n\n/**\n * Native Velix Tailwind CSS Plugin\n * Automatically handles CSS compilation and injection.\n * Supports both Tailwind CSS v3 and v4.\n */\nexport default function tailwindPlugin(options: TailwindPluginOptions = {}) {\n const input = options.input || './app/globals.css';\n const output = options.output || './public/tailwind.css';\n const configPath = options.config || './tailwind.config.ts';\n let cliCmd: string | null = null;\n\n function getCli(): string {\n if (!cliCmd) cliCmd = detectTailwindCli();\n return cliCmd;\n }\n\n return definePlugin({\n name: 'velix:tailwind',\n hooks: {\n [PluginHooks.CONFIG]: (config: any) => {\n // Automatically ensure the output CSS is in the styles array\n const relativeOutput = output.startsWith('./') ? output.substring(1) : output;\n const stylePath = relativeOutput.startsWith('/public') ? relativeOutput.substring(7) : relativeOutput;\n \n if (!config.styles) config.styles = [];\n if (!config.styles.includes(stylePath)) {\n config.styles.push(stylePath);\n }\n },\n\n [PluginHooks.BUILD_START]: async () => {\n logger.info('Building Tailwind CSS...');\n try {\n const cli = getCli();\n const args = [cli, '-i', input, '-o', output];\n if (options.minify !== false) args.push('--minify');\n spawnSync('npx', args, { \n stdio: 'inherit',\n cwd: process.cwd(),\n shell: process.platform === 'win32',\n });\n logger.success('Tailwind CSS built successfully');\n } catch (err: any) {\n logger.error('Tailwind build failed', err);\n }\n },\n\n [PluginHooks.SERVER_START]: async (server: any, isDev: boolean) => {\n if (!isDev) return;\n\n // Check if input file exists\n if (!fs.existsSync(input)) {\n logger.warn(`Tailwind input file not found: ${input}`);\n return;\n }\n\n // Ensure output directory exists\n const outputDir = path.dirname(output);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n // Build initial CSS synchronously\n logger.info('Building initial Tailwind CSS...');\n try {\n const cli = getCli();\n const buildResult = spawnSync('npx', [cli, '-i', input, '-o', output], {\n cwd: process.cwd(),\n stdio: 'pipe',\n shell: process.platform === 'win32',\n });\n\n if (buildResult.error) {\n logger.error('Tailwind CSS not installed. Run: npm install -D tailwindcss @tailwindcss/postcss');\n return;\n }\n\n if (buildResult.status !== 0) {\n const errorMsg = buildResult.stderr?.toString() || 'Unknown error';\n logger.error(`Tailwind build failed: ${errorMsg}`);\n return;\n }\n\n logger.success('Tailwind CSS built successfully');\n } catch (err: any) {\n logger.error('Failed to build Tailwind CSS', err);\n return;\n }\n\n // Start watcher\n logger.info('Starting Tailwind CSS watcher...');\n const cli = getCli();\n const watcher = spawn('npx', [cli, '-i', input, '-o', output, '--watch'], {\n stdio: 'pipe',\n cwd: process.cwd(),\n shell: process.platform === 'win32',\n });\n\n watcher.stdout.on('data', (data) => {\n const msg = data.toString().trim();\n if (msg && !msg.includes('Rebuilding...') && !msg.includes('Done in')) {\n logger.info(`Tailwind: ${msg}`);\n }\n });\n\n watcher.stderr.on('data', (data) => {\n const msg = data.toString().trim();\n if (msg && !msg.includes('warn')) {\n logger.warn(`Tailwind: ${msg}`);\n }\n });\n\n watcher.on('error', (err) => {\n logger.error('Tailwind watcher error', err);\n });\n\n watcher.on('exit', (code) => {\n if (code !== 0 && code !== null) {\n logger.error(`Tailwind watcher exited with code ${code}`);\n }\n });\n\n const cleanup = () => {\n if (watcher && !watcher.killed) {\n watcher.kill();\n }\n };\n\n process.on('exit', cleanup);\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n }\n }\n });\n}\n","/**\n * Velix v5 Metadata & SEO System\n *\n * First-class SEO with automatic:\n * - Meta tags, Open Graph, Twitter Cards\n * - Canonical URLs, robots, sitemaps\n * - JSON-LD structured data\n * - Viewport, theme color, icons\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types (comprehensive metadata interface)\n// ============================================================================\n\nexport interface Metadata {\n title?: string | { default: string; template?: string; absolute?: string };\n description?: string;\n keywords?: string | string[];\n authors?: Author | Author[];\n creator?: string;\n publisher?: string;\n robots?: Robots | string;\n icons?: Icons;\n manifest?: string;\n openGraph?: OpenGraph;\n twitter?: Twitter;\n verification?: Verification;\n alternates?: Alternates;\n viewport?: Viewport | string;\n themeColor?: ThemeColor | ThemeColor[];\n colorScheme?: 'normal' | 'light' | 'dark' | 'light dark' | 'dark light';\n formatDetection?: FormatDetection;\n metadataBase?: URL | string;\n generator?: string;\n applicationName?: string;\n referrer?: string;\n other?: Record<string, string | string[]>;\n}\n\nexport interface Author { name?: string; url?: string; }\nexport interface Robots { index?: boolean; follow?: boolean; noarchive?: boolean; nosnippet?: boolean; noimageindex?: boolean; nocache?: boolean; googleBot?: Robots | string; }\nexport interface Icons { icon?: IconDescriptor | IconDescriptor[]; shortcut?: IconDescriptor | IconDescriptor[]; apple?: IconDescriptor | IconDescriptor[]; other?: IconDescriptor[]; }\nexport interface IconDescriptor { url: string; type?: string; sizes?: string; color?: string; rel?: string; media?: string; }\nexport interface OpenGraph {\n type?: string; url?: string; title?: string; description?: string; siteName?: string;\n locale?: string; images?: OGImage | OGImage[]; videos?: OGVideo | OGVideo[];\n determiner?: string; publishedTime?: string; modifiedTime?: string;\n expirationTime?: string; authors?: string | string[]; section?: string; tags?: string[];\n}\nexport interface OGImage { url: string; secureUrl?: string; type?: string; width?: number; height?: number; alt?: string; }\nexport interface OGVideo { url: string; secureUrl?: string; type?: string; width?: number; height?: number; }\nexport interface Twitter {\n card?: 'summary' | 'summary_large_image' | 'app' | 'player';\n site?: string; siteId?: string; creator?: string; creatorId?: string;\n title?: string; description?: string; images?: string | TwitterImage | (string | TwitterImage)[];\n}\nexport interface TwitterImage { url: string; alt?: string; }\nexport interface Verification { google?: string | string[]; yahoo?: string | string[]; yandex?: string | string[]; other?: Record<string, string | string[]>; }\nexport interface Alternates { canonical?: string; languages?: Record<string, string>; media?: Record<string, string>; }\nexport interface Viewport { width?: number | 'device-width'; height?: number | 'device-height'; initialScale?: number; minimumScale?: number; maximumScale?: number; userScalable?: boolean; viewportFit?: 'auto' | 'cover' | 'contain'; }\nexport interface ThemeColor { color: string; media?: string; }\nexport interface FormatDetection { telephone?: boolean; date?: boolean; address?: boolean; email?: boolean; }\n\n// ============================================================================\n// Metadata Tag Generation\n// ============================================================================\n\nexport function generateMetadataTags(metadata: Metadata, baseUrl?: string): string {\n const tags: string[] = [];\n const base = baseUrl || metadata.metadataBase?.toString() || '';\n\n // Title\n if (metadata.title) {\n const title = typeof metadata.title === 'string'\n ? metadata.title\n : metadata.title.absolute || (metadata.title.template\n ? metadata.title.template.replace('%s', metadata.title.default)\n : metadata.title.default);\n tags.push(`<title>${escapeHtml(title)}</title>`);\n }\n\n if (metadata.description) tags.push(`<meta name=\"description\" content=\"${escapeHtml(metadata.description)}\">`);\n\n if (metadata.keywords) {\n const kw = Array.isArray(metadata.keywords) ? metadata.keywords.join(', ') : metadata.keywords;\n tags.push(`<meta name=\"keywords\" content=\"${escapeHtml(kw)}\">`);\n }\n\n if (metadata.authors) {\n const authors = Array.isArray(metadata.authors) ? metadata.authors : [metadata.authors];\n authors.forEach(a => {\n if (a.name) tags.push(`<meta name=\"author\" content=\"${escapeHtml(a.name)}\">`);\n if (a.url) tags.push(`<link rel=\"author\" href=\"${a.url}\">`);\n });\n }\n\n if (metadata.generator) tags.push(`<meta name=\"generator\" content=\"${escapeHtml(metadata.generator)}\">`);\n if (metadata.applicationName) tags.push(`<meta name=\"application-name\" content=\"${escapeHtml(metadata.applicationName)}\">`);\n if (metadata.referrer) tags.push(`<meta name=\"referrer\" content=\"${metadata.referrer}\">`);\n\n // Robots\n if (metadata.robots) {\n if (typeof metadata.robots === 'string') {\n tags.push(`<meta name=\"robots\" content=\"${metadata.robots}\">`);\n } else {\n tags.push(`<meta name=\"robots\" content=\"${generateRobotsContent(metadata.robots)}\">`);\n if (metadata.robots.googleBot) {\n const gbc = typeof metadata.robots.googleBot === 'string' ? metadata.robots.googleBot : generateRobotsContent(metadata.robots.googleBot);\n tags.push(`<meta name=\"googlebot\" content=\"${gbc}\">`);\n }\n }\n }\n\n // Viewport\n if (metadata.viewport) {\n const vc = typeof metadata.viewport === 'string' ? metadata.viewport : generateViewportContent(metadata.viewport);\n tags.push(`<meta name=\"viewport\" content=\"${vc}\">`);\n }\n\n // Theme Color\n if (metadata.themeColor) {\n const tcs = Array.isArray(metadata.themeColor) ? metadata.themeColor : [metadata.themeColor];\n tcs.forEach(tc => {\n const media = typeof tc !== 'string' && tc.media ? ` media=\"${tc.media}\"` : '';\n const color = typeof tc === 'string' ? tc : tc.color;\n tags.push(`<meta name=\"theme-color\" content=\"${color}\"${media}>`);\n });\n }\n\n if (metadata.colorScheme) tags.push(`<meta name=\"color-scheme\" content=\"${metadata.colorScheme}\">`);\n\n // Icons\n if (metadata.icons) {\n const addIcon = (icon: IconDescriptor, defaultRel: string) => {\n const rel = icon.rel || defaultRel;\n const attrs = [\n icon.type ? ` type=\"${icon.type}\"` : '',\n icon.sizes ? ` sizes=\"${icon.sizes}\"` : '',\n icon.color ? ` color=\"${icon.color}\"` : '',\n ].join('');\n tags.push(`<link rel=\"${rel}\" href=\"${resolveUrl(icon.url, base)}\"${attrs}>`);\n };\n if (metadata.icons.icon) { (Array.isArray(metadata.icons.icon) ? metadata.icons.icon : [metadata.icons.icon]).forEach(i => addIcon(i, 'icon')); }\n if (metadata.icons.apple) { (Array.isArray(metadata.icons.apple) ? metadata.icons.apple : [metadata.icons.apple]).forEach(i => addIcon(i, 'apple-touch-icon')); }\n }\n\n if (metadata.manifest) tags.push(`<link rel=\"manifest\" href=\"${resolveUrl(metadata.manifest, base)}\">`);\n\n // Open Graph\n if (metadata.openGraph) {\n const og = metadata.openGraph;\n if (og.type) tags.push(`<meta property=\"og:type\" content=\"${og.type}\">`);\n if (og.title) tags.push(`<meta property=\"og:title\" content=\"${escapeHtml(og.title)}\">`);\n if (og.description) tags.push(`<meta property=\"og:description\" content=\"${escapeHtml(og.description)}\">`);\n if (og.url) tags.push(`<meta property=\"og:url\" content=\"${resolveUrl(og.url, base)}\">`);\n if (og.siteName) tags.push(`<meta property=\"og:site_name\" content=\"${escapeHtml(og.siteName)}\">`);\n if (og.locale) tags.push(`<meta property=\"og:locale\" content=\"${og.locale}\">`);\n if (og.images) {\n (Array.isArray(og.images) ? og.images : [og.images]).forEach(img => {\n tags.push(`<meta property=\"og:image\" content=\"${resolveUrl(img.url, base)}\">`);\n if (img.width) tags.push(`<meta property=\"og:image:width\" content=\"${img.width}\">`);\n if (img.height) tags.push(`<meta property=\"og:image:height\" content=\"${img.height}\">`);\n if (img.alt) tags.push(`<meta property=\"og:image:alt\" content=\"${escapeHtml(img.alt)}\">`);\n });\n }\n if (og.type === 'article') {\n if (og.publishedTime) tags.push(`<meta property=\"article:published_time\" content=\"${og.publishedTime}\">`);\n if (og.modifiedTime) tags.push(`<meta property=\"article:modified_time\" content=\"${og.modifiedTime}\">`);\n if (og.tags) og.tags.forEach(t => tags.push(`<meta property=\"article:tag\" content=\"${escapeHtml(t)}\">`));\n }\n }\n\n // Twitter\n if (metadata.twitter) {\n const tw = metadata.twitter;\n if (tw.card) tags.push(`<meta name=\"twitter:card\" content=\"${tw.card}\">`);\n if (tw.site) tags.push(`<meta name=\"twitter:site\" content=\"${tw.site}\">`);\n if (tw.creator) tags.push(`<meta name=\"twitter:creator\" content=\"${tw.creator}\">`);\n if (tw.title) tags.push(`<meta name=\"twitter:title\" content=\"${escapeHtml(tw.title)}\">`);\n if (tw.description) tags.push(`<meta name=\"twitter:description\" content=\"${escapeHtml(tw.description)}\">`);\n if (tw.images) {\n (Array.isArray(tw.images) ? tw.images : [tw.images]).forEach(img => {\n const url = typeof img === 'string' ? img : img.url;\n tags.push(`<meta name=\"twitter:image\" content=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n // Verification\n if (metadata.verification) {\n if (metadata.verification.google) {\n (Array.isArray(metadata.verification.google) ? metadata.verification.google : [metadata.verification.google])\n .forEach(v => tags.push(`<meta name=\"google-site-verification\" content=\"${v}\">`));\n }\n }\n\n // Alternates\n if (metadata.alternates) {\n if (metadata.alternates.canonical) tags.push(`<link rel=\"canonical\" href=\"${resolveUrl(metadata.alternates.canonical, base)}\">`);\n if (metadata.alternates.languages) {\n Object.entries(metadata.alternates.languages).forEach(([lang, url]) => {\n tags.push(`<link rel=\"alternate\" hreflang=\"${lang}\" href=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n return tags.join('\\n ');\n}\n\n// ============================================================================\n// Merge & JSON-LD\n// ============================================================================\n\nexport function mergeMetadata(parent: Metadata, child: Metadata): Metadata {\n return {\n ...parent, ...child,\n openGraph: child.openGraph ? { ...parent.openGraph, ...child.openGraph } : parent.openGraph,\n twitter: child.twitter ? { ...parent.twitter, ...child.twitter } : parent.twitter,\n icons: child.icons ? { ...parent.icons, ...child.icons } : parent.icons,\n alternates: child.alternates ? { ...parent.alternates, ...child.alternates } : parent.alternates,\n };\n}\n\nexport function generateJsonLd(data: Record<string, any>): string {\n return `<script type=\"application/ld+json\">${JSON.stringify(data)}</script>`;\n}\n\nexport const jsonLd = {\n website: (c: { name: string; url: string; description?: string }) => ({\n '@context': 'https://schema.org', '@type': 'WebSite', name: c.name, url: c.url, description: c.description\n }),\n article: (c: { headline: string; description?: string; image?: string | string[]; datePublished: string; dateModified?: string; author: { name: string; url?: string } | { name: string; url?: string }[] }) => ({\n '@context': 'https://schema.org', '@type': 'Article', headline: c.headline, description: c.description,\n image: c.image, datePublished: c.datePublished, dateModified: c.dateModified || c.datePublished,\n author: Array.isArray(c.author) ? c.author.map(a => ({ '@type': 'Person', ...a })) : { '@type': 'Person', ...c.author }\n }),\n organization: (c: { name: string; url: string; logo?: string; sameAs?: string[] }) => ({\n '@context': 'https://schema.org', '@type': 'Organization', name: c.name, url: c.url, logo: c.logo, sameAs: c.sameAs\n }),\n breadcrumb: (items: { name: string; url: string }[]) => ({\n '@context': 'https://schema.org', '@type': 'BreadcrumbList',\n itemListElement: items.map((item, i) => ({ '@type': 'ListItem', position: i + 1, name: item.name, item: item.url }))\n }),\n};\n\n// ============================================================================\n// Automatic SEO Generation\n// ============================================================================\n\n/**\n * Generate sitemap.xml content from routes\n */\nexport function generateSitemap(routes: any[], baseUrl: string): string {\n const urls = routes\n .filter(r => r.type === 'page' && !r.path.includes(':') && !r.path.includes('*'))\n .map(r => {\n const loc = `${baseUrl.replace(/\\/$/, '')}${r.path}`;\n return ` <url>\\n <loc>${loc}</loc>\\n <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n <changefreq>weekly</changefreq>\\n <priority>${r.path === '/' ? '1.0' : '0.8'}</priority>\\n </url>`;\n });\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n${urls.join('\\n')}\\n</urlset>`;\n}\n\n/**\n * Generate robots.txt content\n */\nexport function generateRobotsTxt(baseUrl: string, options: { disallow?: string[]; allow?: string[] } = {}): string {\n const lines = ['User-agent: *'];\n if (options.allow) options.allow.forEach(p => lines.push(`Allow: ${p}`));\n if (options.disallow) options.disallow.forEach(p => lines.push(`Disallow: ${p}`));\n else lines.push('Allow: /');\n lines.push('', `Sitemap: ${baseUrl.replace(/\\/$/, '')}/sitemap.xml`);\n return lines.join('\\n');\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction escapeHtml(str: string): string {\n return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n}\n\nfunction resolveUrl(url: string, base: string): string {\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')) return url;\n return base ? `${base.replace(/\\/$/, '')}${url.startsWith('/') ? '' : '/'}${url}` : url;\n}\n\nfunction generateRobotsContent(robots: Robots): string {\n const parts: string[] = [];\n if (robots.index !== undefined) parts.push(robots.index ? 'index' : 'noindex');\n if (robots.follow !== undefined) parts.push(robots.follow ? 'follow' : 'nofollow');\n if (robots.noarchive) parts.push('noarchive');\n if (robots.nosnippet) parts.push('nosnippet');\n if (robots.noimageindex) parts.push('noimageindex');\n return parts.join(', ') || 'index, follow';\n}\n\nfunction generateViewportContent(viewport: Viewport): string {\n const parts: string[] = [];\n if (viewport.width) parts.push(`width=${viewport.width}`);\n if (viewport.height) parts.push(`height=${viewport.height}`);\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`);\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`);\n if (viewport.userScalable !== undefined) parts.push(`user-scalable=${viewport.userScalable ? 'yes' : 'no'}`);\n return parts.join(', ') || 'width=device-width, initial-scale=1';\n}\n\nexport default { generateMetadataTags, mergeMetadata, generateJsonLd, jsonLd, generateSitemap, generateRobotsTxt };\n","/**\n * Velix v5 Server Helpers\n * Utility functions for server-side operations\n */\n\n// ============================================================================\n// Response Helpers\n// ============================================================================\n\nexport class RedirectError extends Error {\n public readonly url: string;\n public readonly statusCode: number;\n public readonly type = 'redirect' as const;\n\n constructor(url: string, statusCode: number = 307) {\n super(`Redirect to ${url}`);\n this.name = 'RedirectError';\n this.url = url;\n this.statusCode = statusCode;\n }\n}\n\nexport class NotFoundError extends Error {\n public readonly type = 'notFound' as const;\n\n constructor(message: string = 'Page not found') {\n super(message);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Redirect to a different URL\n *\n * @example\n * ```tsx\n * import { redirect } from 'velix';\n *\n * export default function ProtectedPage() {\n * const user = getUser();\n * if (!user) redirect('/login');\n * return <Dashboard user={user} />;\n * }\n * ```\n */\nexport function redirect(url: string, type: 'replace' | 'permanent' = 'replace'): never {\n const statusCode = type === 'permanent' ? 308 : 307;\n throw new RedirectError(url, statusCode);\n}\n\n/**\n * Trigger a 404 Not Found response\n */\nexport function notFound(message?: string): never {\n throw new NotFoundError(message);\n}\n\n/**\n * Create a JSON response\n */\nexport function json<T>(\n data: T,\n options: { status?: number; headers?: Record<string, string> } = {}\n): Response {\n const { status = 200, headers = {} } = options;\n return new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': 'application/json', ...headers }\n });\n}\n\n/**\n * Create an HTML response\n */\nexport function html(\n content: string,\n options: { status?: number; headers?: Record<string, string> } = {}\n): Response {\n const { status = 200, headers = {} } = options;\n return new Response(content, {\n status,\n headers: { 'Content-Type': 'text/html; charset=utf-8', ...headers }\n });\n}\n\n/**\n * Create a text response\n */\nexport function text(\n content: string,\n options: { status?: number; headers?: Record<string, string> } = {}\n): Response {\n const { status = 200, headers = {} } = options;\n return new Response(content, {\n status,\n headers: { 'Content-Type': 'text/plain; charset=utf-8', ...headers }\n });\n}\n\n// ============================================================================\n// Cookies API\n// ============================================================================\n\nexport interface CookieOptions {\n maxAge?: number;\n expires?: Date;\n path?: string;\n domain?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n}\n\nexport const cookies = {\n parse(cookieHeader: string): Record<string, string> {\n const cookies: Record<string, string> = {};\n if (!cookieHeader) return cookies;\n cookieHeader.split(';').forEach(cookie => {\n const [name, ...rest] = cookie.split('=');\n if (name) {\n cookies[name.trim()] = decodeURIComponent(rest.join('=').trim());\n }\n });\n return cookies;\n },\n\n get(request: Request, name: string): string | undefined {\n const cookieHeader = request.headers.get('cookie') || '';\n return this.parse(cookieHeader)[name];\n },\n\n getAll(request: Request): Record<string, string> {\n const cookieHeader = request.headers.get('cookie') || '';\n return this.parse(cookieHeader);\n },\n\n serialize(name: string, value: string, options: CookieOptions = {}): string {\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n if (options.maxAge !== undefined) cookie += `; Max-Age=${options.maxAge}`;\n if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;\n if (options.path) cookie += `; Path=${options.path}`;\n if (options.domain) cookie += `; Domain=${options.domain}`;\n if (options.secure) cookie += '; Secure';\n if (options.httpOnly) cookie += '; HttpOnly';\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite.charAt(0).toUpperCase() + options.sameSite.slice(1)}`;\n }\n return cookie;\n },\n\n set(name: string, value: string, options: CookieOptions = {}): string {\n return this.serialize(name, value, {\n path: '/',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n ...options\n });\n },\n\n delete(name: string, options: Omit<CookieOptions, 'maxAge' | 'expires'> = {}): string {\n return this.serialize(name, '', { ...options, path: '/', maxAge: 0 });\n }\n};\n\n// ============================================================================\n// Headers API\n// ============================================================================\n\nexport const headers = {\n create(init?: HeadersInit): Headers {\n return new Headers(init);\n },\n\n get(request: Request, name: string): string | null {\n return request.headers.get(name);\n },\n\n getAll(request: Request): Record<string, string> {\n const result: Record<string, string> = {};\n request.headers.forEach((value, key) => { result[key] = value; });\n return result;\n },\n\n has(request: Request, name: string): boolean {\n return request.headers.has(name);\n },\n\n contentType(request: Request): string | null {\n return request.headers.get('content-type');\n },\n\n acceptsJson(request: Request): boolean {\n const accept = request.headers.get('accept') || '';\n return accept.includes('application/json') || accept.includes('*/*');\n },\n\n isAjax(request: Request): boolean {\n return request.headers.get('x-requested-with') === 'XMLHttpRequest' ||\n this.acceptsJson(request);\n },\n\n authorization(request: Request): { type: string; credentials: string } | null {\n const auth = request.headers.get('authorization');\n if (!auth) return null;\n const [type, ...rest] = auth.split(' ');\n return { type: type.toLowerCase(), credentials: rest.join(' ') };\n },\n\n bearerToken(request: Request): string | null {\n const auth = this.authorization(request);\n return auth?.type === 'bearer' ? auth.credentials : null;\n },\n\n security(): Record<string, string> {\n return {\n 'X-Content-Type-Options': 'nosniff',\n 'X-Frame-Options': 'DENY',\n 'X-XSS-Protection': '1; mode=block',\n 'Referrer-Policy': 'strict-origin-when-cross-origin',\n 'Permissions-Policy': 'camera=(), microphone=(), geolocation=()'\n };\n },\n\n cors(options: {\n origin?: string;\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n } = {}): Record<string, string> {\n const {\n origin = '*',\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n headers: allowHeaders = ['Content-Type', 'Authorization'],\n credentials = false,\n maxAge = 86400\n } = options;\n\n const corsHeaders: Record<string, string> = {\n 'Access-Control-Allow-Origin': origin,\n 'Access-Control-Allow-Methods': methods.join(', '),\n 'Access-Control-Allow-Headers': allowHeaders.join(', '),\n 'Access-Control-Max-Age': String(maxAge)\n };\n\n if (credentials) corsHeaders['Access-Control-Allow-Credentials'] = 'true';\n return corsHeaders;\n },\n\n cache(options: {\n maxAge?: number;\n sMaxAge?: number;\n staleWhileRevalidate?: number;\n private?: boolean;\n noStore?: boolean;\n } = {}): Record<string, string> {\n if (options.noStore) {\n return { 'Cache-Control': 'no-store, no-cache, must-revalidate' };\n }\n const directives: string[] = [];\n directives.push(options.private ? 'private' : 'public');\n if (options.maxAge !== undefined) directives.push(`max-age=${options.maxAge}`);\n if (options.sMaxAge !== undefined) directives.push(`s-maxage=${options.sMaxAge}`);\n if (options.staleWhileRevalidate !== undefined) directives.push(`stale-while-revalidate=${options.staleWhileRevalidate}`);\n return { 'Cache-Control': directives.join(', ') };\n }\n};\n\n// ============================================================================\n// Request Helpers\n// ============================================================================\n\nexport async function parseJson<T = unknown>(request: Request): Promise<T> {\n try { return await request.json(); }\n catch { throw new Error('Invalid JSON body'); }\n}\n\nexport async function parseFormData(request: Request): Promise<FormData> {\n return await request.formData();\n}\n\nexport function parseSearchParams(request: Request): URLSearchParams {\n return new URL(request.url).searchParams;\n}\n\nexport function getMethod(request: Request): string {\n return request.method.toUpperCase();\n}\n\nexport function getPathname(request: Request): string {\n return new URL(request.url).pathname;\n}\n\nexport function isMethod(request: Request, method: string | string[]): boolean {\n const reqMethod = getMethod(request);\n return Array.isArray(method)\n ? method.map(m => m.toUpperCase()).includes(reqMethod)\n : reqMethod === method.toUpperCase();\n}\n","/**\n * Velix v5 Server Actions\n *\n * React 19 native actions with Velix enhancements and security.\n */\n\nexport { useActionState, useOptimistic } from 'react';\nexport { useFormStatus } from 'react-dom';\n\nimport { cookies, headers, redirect, notFound, RedirectError, NotFoundError } from '../helpers.js';\n\n// Global action registry\ndeclare global {\n var __VELIX_ACTIONS__: Record<string, ServerActionFunction>;\n var __VELIX_ACTION_CONTEXT__: ActionContext | null;\n}\n\nglobalThis.__VELIX_ACTIONS__ = globalThis.__VELIX_ACTIONS__ || {};\nglobalThis.__VELIX_ACTION_CONTEXT__ = null;\n\nexport interface ActionContext {\n request: Request;\n cookies: typeof cookies;\n headers: typeof headers;\n redirect: typeof redirect;\n notFound: typeof notFound;\n}\n\nexport type ServerActionFunction = (...args: any[]) => Promise<any>;\n\nexport interface ActionResult<T = any> {\n success: boolean;\n data?: T;\n error?: string;\n redirect?: string;\n}\n\n/**\n * Decorator to mark a function as a server action\n */\nexport function serverAction<T extends ServerActionFunction>(fn: T, actionId?: string): T {\n const id = actionId || `action_${fn.name}_${generateActionId()}`;\n globalThis.__VELIX_ACTIONS__[id] = fn;\n\n const proxy = (async (...args: any[]) => {\n if (typeof window === 'undefined') return await executeAction(id, args);\n return await callServerAction(id, args);\n }) as T;\n\n (proxy as any).$$typeof = Symbol.for('react.server.action');\n (proxy as any).$$id = id;\n (proxy as any).$$bound = null;\n return proxy;\n}\n\nexport function registerAction(id: string, fn: ServerActionFunction): void {\n globalThis.__VELIX_ACTIONS__[id] = fn;\n}\n\nexport function getAction(id: string): ServerActionFunction | undefined {\n return globalThis.__VELIX_ACTIONS__[id];\n}\n\n/**\n * Execute a server action on the server\n */\nexport async function executeAction(actionId: string, args: any[], context?: Partial<ActionContext>): Promise<ActionResult> {\n const action = globalThis.__VELIX_ACTIONS__[actionId];\n if (!action) return { success: false, error: `Server action not found: ${actionId}` };\n\n const actionContext: ActionContext = {\n request: context?.request || new Request('http://localhost'),\n cookies, headers, redirect, notFound\n };\n\n globalThis.__VELIX_ACTION_CONTEXT__ = actionContext;\n\n try {\n const result = await action(...args);\n return { success: true, data: result };\n } catch (error: any) {\n if (error instanceof RedirectError) return { success: true, redirect: error.url };\n if (error instanceof NotFoundError) return { success: false, error: 'Not found' };\n return { success: false, error: error.message || 'Action failed' };\n } finally {\n globalThis.__VELIX_ACTION_CONTEXT__ = null;\n }\n}\n\n/**\n * Call a server action from the client\n */\nexport async function callServerAction(actionId: string, args: any[]): Promise<ActionResult> {\n try {\n const response = await fetch('/__velix/action', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'X-Velix-Action': actionId },\n body: JSON.stringify({ actionId, args: serializeArgs(args) }),\n credentials: 'same-origin'\n });\n\n if (!response.ok) throw new Error(`Action failed: ${response.statusText}`);\n const result = await response.json();\n if (result.redirect) { window.location.href = result.redirect; }\n return result;\n } catch (error: any) {\n return { success: false, error: error.message || 'Network error' };\n }\n}\n\nfunction serializeArgs(args: any[]): any[] {\n return args.map(arg => {\n if (arg instanceof FormData) {\n const obj: Record<string, any> = {};\n arg.forEach((value, key) => {\n if (obj[key]) {\n obj[key] = Array.isArray(obj[key]) ? [...obj[key], value] : [obj[key], value];\n } else { obj[key] = value; }\n });\n return { $$type: 'FormData', data: obj };\n }\n if (arg instanceof Date) return { $$type: 'Date', value: arg.toISOString() };\n if (typeof arg === 'object' && arg !== null) return JSON.parse(JSON.stringify(arg));\n return arg;\n });\n}\n\n// Security validation\nconst ALLOWED_TYPES = new Set(['FormData', 'Date', 'File']);\nconst MAX_DEPTH = 10;\n\nfunction validateInput(obj: any, depth = 0): boolean {\n if (depth > MAX_DEPTH) throw new Error('Payload too deeply nested');\n if (obj === null || obj === undefined || typeof obj !== 'object') return true;\n if ('__proto__' in obj || 'constructor' in obj || 'prototype' in obj) {\n throw new Error('Invalid payload: prototype pollution attempt detected');\n }\n if ('$$type' in obj && !ALLOWED_TYPES.has(obj.$$type)) {\n throw new Error(`Invalid serialized type: ${obj.$$type}`);\n }\n if (Array.isArray(obj)) obj.forEach(item => validateInput(item, depth + 1));\n else Object.values(obj).forEach(val => validateInput(val, depth + 1));\n return true;\n}\n\nexport function deserializeArgs(args: any[]): any[] {\n validateInput(args);\n return args.map(arg => {\n if (arg && typeof arg === 'object') {\n if (arg.$$type === 'FormData') {\n const fd = new FormData();\n for (const [key, value] of Object.entries(arg.data || {})) {\n if (typeof key !== 'string' || key.startsWith('__')) continue;\n if (Array.isArray(value)) value.forEach(v => { if (typeof v === 'string' || typeof v === 'number') fd.append(key, String(v)); });\n else if (typeof value === 'string' || typeof value === 'number') fd.append(key, String(value));\n }\n return fd;\n }\n if (arg.$$type === 'Date') { const d = new Date(arg.value); if (isNaN(d.getTime())) throw new Error('Invalid date'); return d; }\n if (arg.$$type === 'File') return { name: String(arg.name || ''), type: String(arg.type || ''), size: Number(arg.size || 0) };\n }\n return arg;\n });\n}\n\nfunction generateActionId(): string { return Math.random().toString(36).substring(2, 10); }\n\nexport function useActionContext(): ActionContext | null { return globalThis.__VELIX_ACTION_CONTEXT__; }\n\nexport function formAction<T>(action: (formData: FormData) => Promise<T>): (formData: FormData) => Promise<ActionResult<T>> {\n return async (formData: FormData) => {\n try {\n const result = await action(formData);\n return { success: true, data: result };\n } catch (error: any) {\n if (error instanceof RedirectError) return { success: true, redirect: error.url };\n return { success: false, error: error.message };\n }\n };\n}\n\nimport { useActionState as useActionStateReact } from 'react';\n\nexport function useVelixAction<State, Payload>(\n action: (state: Awaited<State>, payload: Payload) => State | Promise<State>,\n initialState: Awaited<State>,\n permalink?: string\n): [state: Awaited<State>, dispatch: (payload: Payload) => void, isPending: boolean] {\n return useActionStateReact(action, initialState, permalink);\n}\n\nexport function bindArgs<T extends ServerActionFunction>(action: T, ...boundArgs: any[]): T {\n const bound = (async (...args: any[]) => await (action as any)(...boundArgs, ...args)) as T;\n (bound as any).$$typeof = (action as any).$$typeof;\n (bound as any).$$id = (action as any).$$id;\n (bound as any).$$bound = boundArgs;\n return bound;\n}\n","/**\n * Velix v5 Enhanced DevTools\n * Visual indicators for rendering, compiling, and navigation states\n * Inspired by Next.js latest DevTools\n */\n\nexport interface DevToolsState {\n status: 'idle' | 'rendering' | 'compiling' | 'navigating' | 'error';\n route?: string;\n timestamp?: number;\n error?: string;\n}\n\n/**\n * Generate enhanced DevTools HTML with visual state indicators\n */\nexport function generateDevToolsHtml(isDev: boolean): string {\n if (!isDev) return '';\n\n return `<style>\n@keyframes velix-pulse {\n 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(34, 211, 238, 0.7); }\n 70% { transform: scale(1.05); box-shadow: 0 0 0 10px rgba(34, 211, 238, 0); }\n 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(34, 211, 238, 0); }\n}\n\n@keyframes velix-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.velix-idle { background: #0f172a !important; border: 2px solid #22D3EE !important; }\n.velix-rendering { background: #ea580c !important; border: 2px solid #fb923c !important; animation: velix-pulse 1.5s infinite !important; }\n.velix-compiling { background: #16a34a !important; border: 2px solid #4ade80 !important; animation: velix-spin 2s linear infinite !important; }\n.velix-navigating { background: #2563eb !important; border: 2px solid #60a5fa !important; animation: velix-pulse 1s infinite !important; }\n.velix-error { background: #dc2626 !important; border: 2px solid #f87171 !important; animation: velix-pulse 0.8s infinite !important; }\n\n.velix-status-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n border: 2px solid #0f172a;\n}\n\n.velix-status-idle { background: #22D3EE; }\n.velix-status-rendering { background: #fb923c; }\n.velix-status-compiling { background: #4ade80; }\n.velix-status-navigating { background: #60a5fa; }\n.velix-status-error { background: #f87171; }\n</style>\n\n<script>\n // DevTools State Management\n window.__VELIX_DEV_TOOLS__ = {\n status: 'idle',\n setStatus: function(newStatus) {\n this.status = newStatus;\n const widget = document.getElementById('__velix-dev-tools');\n const badge = document.getElementById('__velix-status-badge');\n const statusText = document.getElementById('__velix-status-text');\n \n if (widget) {\n widget.className = 'velix-' + newStatus;\n }\n \n if (badge) {\n badge.className = 'velix-status-badge velix-status-' + newStatus;\n }\n \n if (statusText) {\n const statusLabels = {\n idle: 'Ready',\n rendering: 'Rendering',\n compiling: 'Compiling',\n navigating: 'Navigating',\n error: 'Error'\n };\n statusText.textContent = statusLabels[newStatus] || 'Unknown';\n statusText.style.color = {\n idle: '#22D3EE',\n rendering: '#fb923c',\n compiling: '#4ade80',\n navigating: '#60a5fa',\n error: '#f87171'\n }[newStatus] || '#94a3b8';\n }\n }\n };\n\n // HMR Connection\n const es = new EventSource('/__velix/hmr');\n es.onmessage = (e) => {\n const data = e.data;\n \n if (data === 'reload') {\n window.__VELIX_DEV_TOOLS__.setStatus('idle');\n setTimeout(() => location.reload(), 100);\n }\n \n if (data === 'building') {\n window.__VELIX_DEV_TOOLS__.setStatus('compiling');\n }\n \n if (data === 'built') {\n window.__VELIX_DEV_TOOLS__.setStatus('idle');\n }\n \n if (data.startsWith('rendering:')) {\n window.__VELIX_DEV_TOOLS__.setStatus('rendering');\n setTimeout(() => window.__VELIX_DEV_TOOLS__.setStatus('idle'), 1000);\n }\n \n if (data.startsWith('error:')) {\n window.__VELIX_DEV_TOOLS__.setStatus('error');\n }\n };\n\n es.onerror = () => {\n // EventSource auto-reconnects — only show error if connection is fully closed\n if (es.readyState === 2) {\n window.__VELIX_DEV_TOOLS__.setStatus('error');\n }\n };\n</script>\n\n<div id=\"__velix-dev-tools\" class=\"velix-idle\" style=\"position:fixed;bottom:16px;left:16px;z-index:9999;border-radius:50%;padding:4px;box-shadow:0 4px 12px rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center;width:40px;height:40px;cursor:pointer;transition:all 0.3s ease;\" onmouseover=\"this.style.transform='scale(1.1)'\" onmouseout=\"this.style.transform='scale(1)'\" onclick=\"document.getElementById('__velix-dev-panel').style.display='block'\" title=\"Velix DevTools\">\n <img src=\"/__velix/logo.webp\" alt=\"Velix DevTools\" style=\"width:22px;height:22px;\" />\n <div id=\"__velix-status-badge\" class=\"velix-status-badge velix-status-idle\"></div>\n</div>\n\n<div id=\"__velix-dev-panel\" style=\"display:none;position:fixed;bottom:70px;left:16px;width:320px;background:#0f172a;color:white;border-radius:16px;padding:20px;font-family:ui-sans-serif,system-ui,-apple-system,sans-serif;box-shadow:0 20px 50px rgba(0,0,0,0.4);z-index:10000;border:1px solid #1e293b;\">\n <div style=\"display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #334155;padding-bottom:16px;margin-bottom:16px;\">\n <h3 style=\"margin:0;font-size:16px;font-weight:700;display:flex;align-items:center;gap:10px;\">\n <img src=\"/__velix/logo.webp\" style=\"width:18px;height:18px;\" /> \n Velix DevTools\n </h3>\n <button onclick=\"document.getElementById('__velix-dev-panel').style.display='none'\" style=\"background:transparent;border:none;color:#94a3b8;cursor:pointer;font-size:22px;line-height:1;padding:0;margin:0;transition:color 0.2s;\" onmouseover=\"this.style.color='white'\" onmouseout=\"this.style.color='#94a3b8'\">×</button>\n </div>\n \n <div style=\"margin-bottom:16px;padding:12px;background:#1e293b;border-radius:8px;border:1px solid #334155;\">\n <div style=\"font-size:12px;color:#94a3b8;margin-bottom:4px;text-transform:uppercase;letter-spacing:0.5px;\">Status</div>\n <div id=\"__velix-status-text\" style=\"font-size:16px;font-weight:600;color:#22D3EE;\">Ready</div>\n </div>\n \n <div style=\"font-size:13px;color:#cbd5e1;line-height:2;\">\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;\">\n <span style=\"color:#94a3b8;\">Framework</span>\n <strong style=\"color:white;font-weight:600;\">v5.0.4</strong>\n </div>\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;\">\n <span style=\"color:#94a3b8;\">Environment</span>\n <strong style=\"color:#10b981;font-weight:600;\">Development</strong>\n </div>\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;\">\n <span style=\"color:#94a3b8;\">Router</span>\n <strong style=\"color:white;font-weight:600;\">App Directory</strong>\n </div>\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;\">\n <span style=\"color:#94a3b8;\">Rendering</span>\n <strong style=\"color:#60a5fa;font-weight:600;\">Streaming SSR</strong>\n </div>\n </div>\n \n <div style=\"margin-top:16px;padding-top:16px;border-top:1px solid #334155;\">\n <div style=\"font-size:11px;color:#64748b;text-align:center;\">\n <span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:#22D3EE;margin-right:4px;\"></span> Idle\n <span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:#fb923c;margin:0 4px 0 12px;\"></span> Rendering\n <span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:#4ade80;margin:0 4px 0 12px;\"></span> Compiling\n </div>\n </div>\n</div>`;\n}\n","/**\n * Velix v5 Error Pages\n * Beautiful error pages inspired by Next.js latest design\n */\n\nexport interface ErrorPageOptions {\n statusCode: number;\n title: string;\n message: string;\n stack?: string;\n isDev?: boolean;\n pathname?: string;\n}\n\n/**\n * Generate a styled 404 error page\n */\nexport function generate404Page(pathname: string = '/'): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>404 - Page Not Found | Velix v5</title>\n <link rel=\"icon\" href=\"/favicon.webp\">\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { \n margin: 0; \n background: linear-gradient(135deg, #0F172A 0%, #1E293B 100%); \n color: white; \n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; \n display: flex; \n align-items: center; \n justify-content: center; \n min-height: 100vh; \n text-align: center;\n overflow: hidden;\n }\n .container { \n max-width: 700px; \n padding: 60px 40px; \n position: relative;\n z-index: 10;\n }\n .bg-pattern {\n position: absolute;\n inset: 0;\n background-image: radial-gradient(circle at 20% 50%, rgba(34, 211, 238, 0.1) 0%, transparent 50%),\n radial-gradient(circle at 80% 80%, rgba(37, 99, 235, 0.1) 0%, transparent 50%);\n z-index: 1;\n }\n h1 { \n font-size: 180px; \n font-weight: 900; \n margin: 0; \n background: linear-gradient(135deg, #22D3EE 0%, #2563EB 100%); \n -webkit-background-clip: text; \n -webkit-text-fill-color: transparent; \n line-height: 1; \n letter-spacing: -0.05em;\n animation: fadeInUp 0.6s ease-out;\n }\n h2 { \n font-size: 36px; \n font-weight: 800; \n margin: 30px 0 15px; \n color: #F8FAFC;\n animation: fadeInUp 0.6s ease-out 0.1s backwards;\n }\n p { \n color: #94A3B8; \n font-size: 18px; \n line-height: 1.7; \n margin-bottom: 40px;\n animation: fadeInUp 0.6s ease-out 0.2s backwards;\n }\n code { \n background: rgba(255,255,255,0.1); \n padding: 4px 10px; \n border-radius: 6px; \n font-family: 'Fira Code', 'Courier New', monospace; \n color: #22D3EE; \n font-size: 16px;\n border: 1px solid rgba(34, 211, 238, 0.2);\n }\n .btn-group {\n display: flex;\n gap: 16px;\n justify-content: center;\n flex-wrap: wrap;\n animation: fadeInUp 0.6s ease-out 0.3s backwards;\n }\n .btn { \n display: inline-block; \n background: linear-gradient(135deg, #2563EB 0%, #1D4ED8 100%); \n color: white; \n text-decoration: none; \n padding: 14px 36px; \n border-radius: 12px; \n font-weight: 600; \n font-size: 16px;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); \n box-shadow: 0 10px 30px rgba(37, 99, 235, 0.3);\n border: none;\n cursor: pointer;\n }\n .btn:hover { \n transform: translateY(-2px); \n box-shadow: 0 15px 40px rgba(37, 99, 235, 0.4);\n }\n .btn-outline { \n background: transparent; \n color: #22D3EE; \n border: 2px solid #22D3EE; \n box-shadow: none;\n }\n .btn-outline:hover { \n background: rgba(34, 211, 238, 0.1); \n box-shadow: 0 10px 30px rgba(34, 211, 238, 0.2);\n }\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(30px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n </style>\n</head>\n<body>\n <div class=\"bg-pattern\"></div>\n <div class=\"container\">\n <h1>404</h1>\n <h2>Page Not Found</h2>\n <p>The page <code>${pathname}</code> could not be found.<br>It may have been moved or deleted.</p>\n <div class=\"btn-group\">\n <a href=\"/\" class=\"btn\">Return Home</a>\n <a href=\"javascript:history.back()\" class=\"btn btn-outline\">Go Back</a>\n </div>\n </div>\n</body>\n</html>`;\n}\n\n/**\n * Generate a styled 500 error page\n */\nexport function generate500Page(options: ErrorPageOptions): string {\n const { title, message, stack, isDev, pathname } = options;\n\n // Parse stack trace to display as cards like Next.js\n let callStackCards = '';\n let frameCount = 0;\n \n if (isDev && stack) {\n const stackLines = stack.split('\\n').filter(line => line.trim());\n const frames = stackLines.slice(1).filter(line => line.includes('at '));\n frameCount = frames.length;\n \n callStackCards = frames.map((frame, index) => {\n const match = frame.match(/at\\s+(.+?)\\s+\\((.+?)\\)/) || frame.match(/at\\s+(.+)/);\n if (match) {\n const funcName = match[1] || 'anonymous';\n const location = match[2] || match[1];\n return `\n <div class=\"error-card\" data-frame=\"${index}\">\n <div class=\"card-header\">\n <div class=\"card-title\">${funcName.trim()}</div>\n <div class=\"card-number\">${index + 1}</div>\n </div>\n <div class=\"card-location\">${location.trim()}</div>\n </div>\n `;\n }\n return '';\n }).join('');\n }\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Error | Velix v5</title>\n <link rel=\"icon\" href=\"/favicon.webp\">\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { \n margin: 0; \n background: linear-gradient(135deg, #0F172A 0%, #1E293B 100%);\n color: #F8FAFC; \n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; \n min-height: 100vh;\n overflow-x: hidden;\n }\n .container {\n max-width: 900px;\n margin: 0 auto;\n padding: 40px 20px;\n }\n .error-header {\n background: linear-gradient(135deg, #EF4444 0%, #DC2626 100%);\n color: white;\n padding: 20px 28px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n gap: 14px;\n margin-bottom: 28px;\n font-size: 18px;\n font-weight: 700;\n box-shadow: 0 10px 40px rgba(239, 68, 68, 0.3);\n }\n .error-header svg {\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n }\n .error-badge {\n display: inline-block;\n background: linear-gradient(135deg, #1E40AF 0%, #1E3A8A 100%);\n color: #60A5FA;\n padding: 6px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 700;\n margin-bottom: 18px;\n text-transform: uppercase;\n letter-spacing: 0.8px;\n box-shadow: 0 4px 12px rgba(30, 64, 175, 0.3);\n }\n .route-badge {\n background: linear-gradient(135deg, #0C4A6E 0%, #075985 100%);\n color: #22D3EE;\n padding: 10px 18px;\n border-radius: 10px;\n font-size: 14px;\n margin-bottom: 24px;\n font-family: 'Courier New', monospace;\n box-shadow: 0 4px 12px rgba(12, 74, 110, 0.3);\n border: 1px solid rgba(34, 211, 238, 0.2);\n }\n .error-message {\n background: rgba(239, 68, 68, 0.1);\n border-left: 4px solid #EF4444;\n padding: 18px 20px;\n border-radius: 10px;\n margin-bottom: 32px;\n }\n .error-message-text {\n color: #FCA5A5;\n font-size: 16px;\n font-weight: 600;\n line-height: 1.6;\n font-family: 'Courier New', monospace;\n }\n .stack-section {\n margin-top: 32px;\n }\n .stack-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n }\n .stack-title {\n font-size: 18px;\n font-weight: 700;\n color: #F1F5F9;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n .frame-counter {\n background: linear-gradient(135deg, #1F2937 0%, #111827 100%);\n color: #22D3EE;\n padding: 6px 14px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 700;\n border: 1px solid rgba(34, 211, 238, 0.2);\n }\n .error-card {\n background: linear-gradient(135deg, #1E293B 0%, #0F172A 100%);\n border: 1px solid rgba(34, 211, 238, 0.2);\n border-radius: 14px;\n padding: 20px;\n margin-bottom: 12px;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n display: none;\n }\n .error-card.active {\n display: block;\n animation: slideIn 0.3s ease-out;\n }\n .error-card:hover {\n border-color: rgba(34, 211, 238, 0.5);\n box-shadow: 0 8px 24px rgba(34, 211, 238, 0.2);\n transform: translateY(-2px);\n }\n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .card-title {\n color: #22D3EE;\n font-size: 15px;\n font-weight: 700;\n font-family: 'Courier New', monospace;\n }\n .card-number {\n background: rgba(34, 211, 238, 0.2);\n color: #22D3EE;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 700;\n }\n .card-location {\n color: #94A3B8;\n font-size: 13px;\n font-family: 'Courier New', monospace;\n word-break: break-all;\n line-height: 1.6;\n }\n .pagination {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 12px;\n margin-top: 24px;\n }\n .pagination-btn {\n background: linear-gradient(135deg, #1E293B 0%, #0F172A 100%);\n border: 1px solid rgba(34, 211, 238, 0.3);\n color: #22D3EE;\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n }\n .pagination-btn:hover:not(:disabled) {\n background: linear-gradient(135deg, #22D3EE 0%, #06B6D4 100%);\n color: #0F172A;\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(34, 211, 238, 0.4);\n }\n .pagination-btn:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n }\n .pagination-info {\n color: #94A3B8;\n font-size: 14px;\n font-weight: 600;\n }\n .footer {\n margin-top: 48px;\n padding-top: 28px;\n border-top: 1px solid rgba(34, 211, 238, 0.2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 20px;\n }\n .brand {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 700;\n color: #22D3EE;\n font-size: 15px;\n }\n .brand img {\n width: 20px;\n height: 20px;\n }\n .footer-links {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n }\n .footer-links a {\n color: #60A5FA;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.2s;\n font-size: 14px;\n }\n .footer-links a:hover {\n color: #22D3EE;\n transform: translateY(-1px);\n }\n .no-stack {\n background: rgba(239, 68, 68, 0.1);\n border: 1px solid rgba(239, 68, 68, 0.3);\n border-radius: 12px;\n padding: 32px;\n color: #FCA5A5;\n text-align: center;\n font-size: 15px;\n }\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"error-header\">\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"></path>\n </svg>\n <span>Unhandled Runtime Error</span>\n </div>\n \n <div class=\"error-badge\">SERVER ERROR 500</div>\n ${pathname ? `<div class=\"route-badge\">Route: ${pathname}</div>` : ''}\n \n <div class=\"error-message\">\n <div class=\"error-message-text\">${message}</div>\n </div>\n \n ${isDev && callStackCards ? `\n <div class=\"stack-section\">\n <div class=\"stack-header\">\n <div class=\"stack-title\">\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"></path>\n </svg>\n Call Stack\n </div>\n <div class=\"frame-counter\">${frameCount}</div>\n </div>\n <div id=\"error-cards\">\n ${callStackCards}\n </div>\n ${frameCount > 1 ? `\n <div class=\"pagination\">\n <button class=\"pagination-btn\" id=\"prev-btn\" onclick=\"changePage(-1)\">\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style=\"display:inline;vertical-align:middle;margin-right:4px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Previous\n </button>\n <div class=\"pagination-info\">\n <span id=\"current-page\">1</span> / <span id=\"total-pages\">${frameCount}</span>\n </div>\n <button class=\"pagination-btn\" id=\"next-btn\" onclick=\"changePage(1)\">\n Next\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style=\"display:inline;vertical-align:middle;margin-left:4px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n </button>\n </div>\n ` : ''}\n </div>\n ` : '<div class=\"no-stack\">An error occurred while processing your request. Please check the server logs for more details.</div>'}\n \n <div class=\"footer\">\n <div class=\"brand\">\n <img src=\"/__velix/logo.webp\" alt=\"Velix\" onerror=\"this.style.display='none'\"/>\n <span>Velix v5.0.4</span>\n </div>\n <div class=\"footer-links\">\n <a href=\"/\">Home</a>\n <a href=\"javascript:location.reload()\">Reload</a>\n <a href=\"https://github.com/velix/velix/tree/main/docs\" target=\"_blank\">Documentation</a>\n ${isDev ? '<span style=\"color:#94A3B8;\">Development Mode</span>' : ''}\n </div>\n </div>\n </div>\n \n ${isDev && frameCount > 0 ? `\n <script>\n let currentPage = 1;\n const totalPages = ${frameCount};\n const cards = document.querySelectorAll('.error-card');\n const prevBtn = document.getElementById('prev-btn');\n const nextBtn = document.getElementById('next-btn');\n const currentPageSpan = document.getElementById('current-page');\n \n function showPage(page) {\n cards.forEach((card, index) => {\n card.classList.remove('active');\n if (index === page - 1) {\n card.classList.add('active');\n }\n });\n \n currentPage = page;\n currentPageSpan.textContent = page;\n \n if (prevBtn) prevBtn.disabled = page === 1;\n if (nextBtn) nextBtn.disabled = page === totalPages;\n }\n \n function changePage(direction) {\n const newPage = currentPage + direction;\n if (newPage >= 1 && newPage <= totalPages) {\n showPage(newPage);\n }\n }\n \n // Show first page on load\n showPage(1);\n \n // Keyboard navigation\n document.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowLeft') changePage(-1);\n if (e.key === 'ArrowRight') changePage(1);\n });\n </script>\n ` : ''}\n</body>\n</html>`;\n}\n\n/**\n * Generate error page based on status code\n */\nexport function generateErrorPage(statusCode: number, options: Partial<ErrorPageOptions> = {}): string {\n if (statusCode === 404) {\n return generate404Page(options.pathname || '/');\n }\n\n return generate500Page({\n statusCode,\n title: options.title || 'Server Error',\n message: options.message || 'An unexpected error occurred',\n stack: options.stack,\n isDev: options.isDev,\n pathname: options.pathname,\n });\n}\n","/**\r\n * Velix v5 Server\r\n *\r\n * Modular HTTP server with SSR, static file serving, API routes,\r\n * server actions, middleware, and plugin hooks.\r\n */\r\n\r\nimport http from 'http';\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport { fileURLToPath, pathToFileURL } from 'url';\r\nimport React from 'react';\r\nimport { renderToString } from 'react-dom/server';\r\nimport { loadConfig, resolvePaths, type VelixConfig } from '../config.js';\r\nimport { buildRouteTree, matchRoute } from '../router/index.js';\r\nimport { runMiddleware, loadMiddleware, type MiddlewareFunction } from '../middleware/index.js';\r\nimport { pluginManager, loadPlugins, PluginHooks, builtinPlugins } from '../plugins/index.js';\r\nimport tailwindPlugin from '../plugins/tailwind.js';\r\nimport { generateMetadataTags, generateSitemap, generateRobotsTxt } from '../metadata/index.js';\r\nimport { getRegisteredIslands, generateAdvancedHydrationScript } from '../islands/index.js';\r\nimport { executeAction, deserializeArgs } from '../actions/index.js';\r\nimport logger from '../logger.js';\r\nimport esbuild from 'esbuild';\r\nimport { generateDevToolsHtml } from './devtools.js';\r\nimport { generate404Page, generate500Page } from './error-pages.js';\r\n\r\n// ============================================================================\r\n// MIME Types\r\n// ============================================================================\r\n\r\nconst MIME_TYPES: Record<string, string> = {\r\n '.html': 'text/html; charset=utf-8',\r\n '.css': 'text/css; charset=utf-8',\r\n '.js': 'application/javascript; charset=utf-8',\r\n '.mjs': 'application/javascript; charset=utf-8',\r\n '.json': 'application/json',\r\n '.png': 'image/png',\r\n '.jpg': 'image/jpeg',\r\n '.jpeg': 'image/jpeg',\r\n '.gif': 'image/gif',\r\n '.svg': 'image/svg+xml',\r\n '.ico': 'image/x-icon',\r\n '.webp': 'image/webp',\r\n '.woff': 'font/woff',\r\n '.woff2': 'font/woff2',\r\n '.ttf': 'font/ttf',\r\n '.otf': 'font/otf',\r\n '.txt': 'text/plain; charset=utf-8',\r\n '.xml': 'application/xml',\r\n '.mp4': 'video/mp4',\r\n '.webm': 'video/webm',\r\n '.mp3': 'audio/mpeg',\r\n '.pdf': 'application/pdf',\r\n '.map': 'application/json',\r\n};\r\n\r\n// ============================================================================\r\n// Server\r\n// ============================================================================\r\n\r\nexport interface VelixServer {\r\n server: http.Server;\r\n config: VelixConfig;\r\n close: () => void;\r\n}\r\n\r\nexport async function createServer(options: {\r\n projectRoot?: string;\r\n mode?: 'development' | 'production';\r\n} = {}): Promise<VelixServer> {\r\n const projectRoot = options.projectRoot || process.cwd();\r\n const mode = options.mode || (process.env.NODE_ENV as any) || 'development';\r\n const isDev = mode === 'development';\r\n\r\n // Load configuration\r\n const rawConfig = await loadConfig(projectRoot);\r\n const config = resolvePaths(rawConfig, projectRoot);\r\n\r\n // Load plugins\r\n await loadPlugins(projectRoot, config);\r\n\r\n // Plugin hook: config loaded (allow plugins to modify config)\r\n await pluginManager.runHook(PluginHooks.CONFIG, config);\r\n\r\n // Load middleware\r\n const middlewareFns = await loadMiddleware(projectRoot);\r\n\r\n // Build route tree\r\n const appDir = (config as any).resolvedAppDir || path.join(projectRoot, 'app');\r\n const routes = buildRouteTree(appDir);\r\n\r\n // Plugin hook: routes loaded\r\n await pluginManager.runHook(PluginHooks.ROUTES_LOADED, routes);\r\n\r\n const startTime = Date.now();\r\n\r\n // Plugin hook: server starting\r\n await pluginManager.runHook(PluginHooks.SERVER_START, { config, isDev, projectRoot }, isDev);\r\n\r\n const server = http.createServer(async (req, res) => {\r\n const requestStart = Date.now();\r\n const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\r\n const pathname = url.pathname;\r\n\r\n try {\r\n // Run middleware\r\n if (middlewareFns.length > 0) {\r\n const middlewareResult = await runMiddleware(req, res, middlewareFns);\r\n if (!middlewareResult.continue) return;\r\n }\r\n\r\n // Plugin hook: request\r\n await pluginManager.runHook(PluginHooks.REQUEST, req, res);\r\n\r\n // ── Auto-generated SEO routes ──\r\n if (pathname === '/sitemap.xml' && config.seo.sitemap) {\r\n const baseUrl = config.app.url || `http://${config.server.host}:${config.server.port}`;\r\n const sitemap = generateSitemap(routes.appRoutes, baseUrl);\r\n res.writeHead(200, { 'Content-Type': 'application/xml' });\r\n res.end(sitemap);\r\n return;\r\n }\r\n\r\n if (pathname === '/robots.txt' && config.seo.robots) {\r\n const baseUrl = config.app.url || `http://${config.server.host}:${config.server.port}`;\r\n const robotsTxt = generateRobotsTxt(baseUrl);\r\n res.writeHead(200, { 'Content-Type': 'text/plain' });\r\n res.end(robotsTxt);\r\n return;\r\n }\r\n\r\n // ── Server actions ──\r\n if (pathname === '/__velix/action' && req.method === 'POST') {\r\n await handleServerAction(req, res);\r\n return;\r\n }\r\n\r\n // ── Velix internal assets ──\r\n if (pathname === '/__velix/image') {\r\n const { handleImageOptimization } = await import('./image-optimizer.js');\r\n await handleImageOptimization(req, res, projectRoot);\r\n return;\r\n }\r\n\r\n if (pathname.startsWith('/__velix/')) {\r\n await serveVelixInternal(pathname, req, res, projectRoot);\r\n return;\r\n }\r\n\r\n // ── Static files ──\r\n const publicDir = (config as any).resolvedPublicDir || path.join(projectRoot, 'public');\r\n if (await serveStaticFile(pathname, publicDir, res, isDev)) {\r\n if (isDev) logger.request(req.method || 'GET', pathname, 200, Date.now() - requestStart, { type: 'static' });\r\n return;\r\n }\r\n\r\n // ── API routes ──\r\n const apiMatch = matchRoute(pathname, routes.api);\r\n if (apiMatch) {\r\n await handleApiRoute(apiMatch, req, res, url);\r\n if (isDev) logger.request(req.method || 'GET', pathname, res.statusCode, Date.now() - requestStart, { type: 'api' });\r\n return;\r\n }\r\n\r\n // ── Page routes (SSR) ──\r\n const pageMatch = matchRoute(pathname, routes.appRoutes);\r\n if (pageMatch) {\r\n await handlePageRoute(pageMatch, routes, req, res, url, config, isDev, projectRoot);\r\n if (isDev) logger.request(req.method || 'GET', pathname, res.statusCode, Date.now() - requestStart, { type: 'ssr' });\r\n return;\r\n }\r\n\r\n // ── 404 ──\r\n res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(generate404Page(pathname));\r\n if (isDev) logger.request(req.method || 'GET', pathname, 404, Date.now() - requestStart);\r\n\r\n } catch (error: any) {\r\n console.error('Server error:', error);\r\n if (!res.headersSent) {\r\n res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(generate500Page({\r\n statusCode: 500,\r\n title: 'Server Error',\r\n message: error.message || 'An unexpected error occurred',\r\n stack: isDev ? error.stack : undefined,\r\n isDev,\r\n pathname\r\n }));\r\n }\r\n }\r\n });\r\n\r\n const __hmrClients = new Set<http.ServerResponse>();\r\n (server as any).__hmrClients = __hmrClients;\r\n (server as any).broadcastHMR = (msg: string) => {\r\n __hmrClients.forEach(c => c.write(`data: ${msg}\\n\\n`));\r\n };\r\n\r\n // Start listening\r\n const port = config.server.port;\r\n const host = config.server.host;\r\n\r\n server.listen(port, host, () => {\r\n logger.serverStart({ port, host, mode, pagesDir: appDir }, startTime);\r\n\r\n // Log routes in dev mode\r\n if (isDev) {\r\n routes.appRoutes.forEach(r => {\r\n const type = r.path.includes(':') || r.path.includes('*') ? 'dynamic' : 'static';\r\n logger.route(r.path, type);\r\n });\r\n routes.api.forEach(r => logger.route(r.path, 'api'));\r\n logger.blank();\r\n }\r\n });\r\n\r\n server.on('error', (err: any) => {\r\n if (err.code === 'EADDRINUSE') {\r\n logger.portInUse(port);\r\n process.exit(1);\r\n }\r\n throw err;\r\n });\r\n\r\n return {\r\n server,\r\n config: rawConfig,\r\n close: () => server.close()\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Handlers\r\n// ============================================================================\r\n\r\nasync function serveStaticFile(pathname: string, publicDir: string, res: http.ServerResponse, isDev: boolean = false): Promise<boolean> {\r\n const filePath = path.join(publicDir, pathname);\r\n\r\n // Prevent directory traversal\r\n if (!filePath.startsWith(publicDir)) return false;\r\n\r\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) return false;\r\n\r\n const ext = path.extname(filePath);\r\n const contentType = MIME_TYPES[ext] || 'application/octet-stream';\r\n const content = fs.readFileSync(filePath);\r\n\r\n res.writeHead(200, {\r\n 'Content-Type': contentType,\r\n 'Content-Length': content.length,\r\n 'Cache-Control': isDev ? 'no-store, no-cache, must-revalidate' : 'public, max-age=31536000, immutable',\r\n });\r\n res.end(content);\r\n return true;\r\n}\r\n\r\nasync function handleApiRoute(route: any, req: http.IncomingMessage, res: http.ServerResponse, url: URL) {\r\n try {\r\n const fileUrl = pathToFileURL(route.filePath).href;\r\n const mod = await import(`${fileUrl}?t=${Date.now()}`);\r\n const method = req.method?.toUpperCase() || 'GET';\r\n const handler = mod[method] || mod.default;\r\n\r\n if (!handler) {\r\n res.writeHead(405, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ error: 'Method not allowed' }));\r\n return;\r\n }\r\n\r\n // Parse body for POST/PUT/PATCH\r\n let body: any;\r\n if (['POST', 'PUT', 'PATCH'].includes(method)) {\r\n body = await parseRequestBody(req);\r\n }\r\n\r\n const request = {\r\n method, url: req.url, headers: req.headers,\r\n params: route.params || {},\r\n query: Object.fromEntries(url.searchParams),\r\n body, json: () => body,\r\n };\r\n\r\n const response = await handler(request);\r\n\r\n if (response instanceof Response) {\r\n const headers: Record<string, string> = {};\r\n response.headers.forEach((v: string, k: string) => { headers[k] = v; });\r\n res.writeHead(response.status, headers);\r\n const text = await response.text();\r\n res.end(text);\r\n } else if (typeof response === 'object') {\r\n res.writeHead(200, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify(response));\r\n } else {\r\n res.writeHead(200, { 'Content-Type': 'text/plain' });\r\n res.end(String(response));\r\n }\r\n } catch (err: any) {\r\n res.writeHead(500, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ error: err.message }));\r\n }\r\n}\r\n\r\nasync function handleServerAction(req: http.IncomingMessage, res: http.ServerResponse) {\r\n try {\r\n const body = await parseRequestBody(req) as any;\r\n if (!body?.actionId || typeof body.actionId !== 'string') {\r\n res.writeHead(400, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ error: 'Missing actionId' }));\r\n return;\r\n }\r\n\r\n const args = body.args ? deserializeArgs(body.args) : [];\r\n const result = await executeAction(body.actionId, args);\r\n\r\n res.writeHead(200, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify(result));\r\n } catch (err: any) {\r\n res.writeHead(500, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ success: false, error: err.message }));\r\n }\r\n}\r\n\r\nasync function handlePageRoute(\r\n route: any, routes: any,\r\n req: http.IncomingMessage, res: http.ServerResponse,\r\n url: URL, config: VelixConfig, isDev: boolean, projectRoot: string\r\n) {\r\n try {\r\n const fileUrl = pathToFileURL(route.filePath).href;\r\n const mod = await import(`${fileUrl}?t=${Date.now()}`);\r\n const PageComponent = mod.default;\r\n let metadata = mod.metadata || mod.generateMetadata?.(route.params) || {};\r\n\r\n // Attempt to merge layout metadata and get LayoutComponent\r\n let LayoutComponent = ({ children }: any) => React.createElement(React.Fragment, null, children);\r\n let layoutParams = route.params;\r\n try {\r\n const layoutPath = path.join(path.dirname(route.filePath), 'layout.tsx');\r\n if (fs.existsSync(layoutPath)) {\r\n const layoutMod = await import(`${pathToFileURL(layoutPath).href}?t=${Date.now()}`);\r\n if (layoutMod.metadata) {\r\n metadata = { ...layoutMod.metadata, ...metadata };\r\n }\r\n if (layoutMod.default) {\r\n LayoutComponent = layoutMod.default;\r\n }\r\n }\r\n } catch(e) {}\r\n\r\n // Generate metadata tags\r\n const baseUrl = config.app.url || `http://${config.server.host}:${config.server.port}`;\r\n const metaTags = generateMetadataTags({\r\n ...metadata,\r\n generator: `Velix v5.0.0`,\r\n viewport: metadata.viewport || 'width=device-width, initial-scale=1',\r\n }, baseUrl);\r\n\r\n // Get islands for hydration\r\n const islands = getRegisteredIslands();\r\n const hydrationScript = generateAdvancedHydrationScript(islands);\r\n \r\n // Developer Tools Injection\r\n const devToolsHtml = generateDevToolsHtml(isDev);\r\n\r\n const headInjections = `\r\n <meta charset=\"utf-8\">\r\n ${metaTags}\r\n ${config.favicon ? `<link rel=\"icon\" href=\"${config.favicon}\">` : ''}\r\n ${config.styles.map(s => `<link rel=\"stylesheet\" href=\"${s}\">`).join('\\n ')}\r\n `;\r\n // Extract search params for the component\r\n const searchParams = Object.fromEntries(url.searchParams.entries());\r\n\r\n // Fix for Async Components (Server Components) in React 19\r\n // renderToString does not support async components, so we manually await them\r\n let pageElement: any = React.createElement(PageComponent, { params: route.params, searchParams, query: searchParams });\r\n if (typeof PageComponent === 'function') {\r\n try {\r\n const result = PageComponent({ params: route.params, searchParams, query: searchParams });\r\n if (result instanceof Promise) {\r\n pageElement = await result;\r\n }\r\n } catch (e) {\r\n // Fallback or ignore if it's not a functional component call\r\n }\r\n }\r\n\r\n let layoutElement = React.createElement(LayoutComponent, { params: layoutParams, searchParams }, pageElement);\r\n if (typeof LayoutComponent === 'function') {\r\n try {\r\n const result = LayoutComponent({ params: layoutParams, searchParams, children: pageElement });\r\n if (result instanceof Promise) {\r\n layoutElement = await result;\r\n }\r\n } catch (e) {\r\n // Fallback\r\n }\r\n }\r\n\r\n // Render the React Tree (SSR)\r\n const ssrContent = renderToString(layoutElement);\r\n\r\n // Apply native waterfall hook: after render\r\n let finalHtml = await pluginManager.runWaterfallHook(PluginHooks.AFTER_RENDER, ssrContent, { route, config, isDev });\r\n \r\n // Inject Head & Body (Surgical insertion)\r\n const headInjectionsHtml = `\\n ${headInjections}\\n `;\r\n const bodyInjectionsHtml = `\\n <div id=\"__velix-islands\"></div>\\n ${hydrationScript}${devToolsHtml}\\n `;\r\n\r\n if (finalHtml.includes('<html')) {\r\n // 1. Inject Head\r\n const headEnd = finalHtml.lastIndexOf('</head>');\r\n if (headEnd !== -1) {\r\n finalHtml = finalHtml.slice(0, headEnd) + headInjectionsHtml + finalHtml.slice(headEnd);\r\n } else {\r\n // Find body start to insert head before it\r\n const bodyStart = finalHtml.search(/<body[^>]*>/i);\r\n if (bodyStart !== -1) {\r\n finalHtml = finalHtml.slice(0, bodyStart) + `<head>${headInjectionsHtml}</head>` + finalHtml.slice(bodyStart);\r\n }\r\n }\r\n\r\n // 2. Inject Body scripts\r\n const bodyEnd = finalHtml.lastIndexOf('</body>');\r\n if (bodyEnd !== -1) {\r\n finalHtml = finalHtml.slice(0, bodyEnd) + bodyInjectionsHtml + finalHtml.slice(bodyEnd);\r\n } else {\r\n finalHtml += bodyInjectionsHtml;\r\n }\r\n\r\n // 3. Ensure Doctype\r\n if (!finalHtml.trim().startsWith('<!DOCTYPE')) {\r\n finalHtml = '<!DOCTYPE html>\\n' + finalHtml;\r\n }\r\n } else {\r\n // Fallback for partial content\r\n finalHtml = `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n ${headInjectionsHtml}\r\n</head>\r\n<body>\r\n <div id=\"__velix\">${ssrContent}</div>\r\n ${bodyInjectionsHtml}\r\n</body>\r\n</html>`;\r\n }\r\n\r\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(finalHtml);\r\n\r\n } catch (err: any) {\r\n logger.error(`Render error: ${route.path}`, err);\r\n res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(generate500Page({\r\n statusCode: 500,\r\n title: 'Render Error',\r\n message: err.message || 'Failed to render page',\r\n stack: isDev ? err.stack : undefined,\r\n isDev,\r\n pathname: route.path\r\n }));\r\n }\r\n}\r\n\r\nasync function serveVelixInternal(pathname: string, req: http.IncomingMessage, res: http.ServerResponse, projectRoot: string) {\r\n // HMR endpoint for dev mode\r\n if (pathname === '/__velix/hmr') {\r\n res.writeHead(200, {\r\n 'Content-Type': 'text/event-stream',\r\n 'Cache-Control': 'no-cache',\r\n 'Connection': 'keep-alive',\r\n });\r\n res.write('data: connected\\n\\n');\r\n const interval = setInterval(() => res.write(':heartbeat\\n\\n'), 30000);\r\n // @ts-ignore\r\n if (res.req?.socket?.server?.__hmrClients) res.req.socket.server.__hmrClients.add(res);\r\n req.on('close', () => {\r\n clearInterval(interval);\r\n // @ts-ignore\r\n if (res.req?.socket?.server?.__hmrClients) res.req.socket.server.__hmrClients.delete(res);\r\n });\r\n return;\r\n }\r\n\r\n if (pathname === '/__velix/logo.webp') {\r\n const __filename = fileURLToPath(import.meta.url);\r\n const __dirname = path.dirname(__filename);\r\n // Check multiple possible locations for the logo\r\n const candidates = [\r\n path.join(__dirname, '..', 'assets', 'logo.webp'),\r\n path.join(process.cwd(), 'node_modules', '@teamvelix', 'velix', 'assets', 'logo.webp'),\r\n path.join(process.cwd(), 'node_modules', 'velix', 'assets', 'logo.webp'),\r\n path.join(process.cwd(), 'public', 'favicon.webp'),\r\n ];\r\n const logoPath = candidates.find(p => fs.existsSync(p));\r\n if (logoPath) {\r\n res.writeHead(200, { 'Content-Type': 'image/webp', 'Cache-Control': 'public, max-age=31536000, immutable' });\r\n res.end(fs.readFileSync(logoPath));\r\n } else {\r\n res.writeHead(404);\r\n res.end();\r\n }\r\n return;\r\n }\r\n\r\n // Dynamic Island Serving\r\n if (pathname.startsWith('/__velix/islands/') && pathname.endsWith('.js')) {\r\n const componentName = pathname.replace('/__velix/islands/', '').replace('.js', '');\r\n try {\r\n // Find the component file\r\n const searchDirs = [\r\n path.join(projectRoot, 'components'),\r\n path.join(projectRoot, 'app'),\r\n path.join(projectRoot, 'islands')\r\n ];\r\n \r\n let componentPath = '';\r\n for (const dir of searchDirs) {\r\n if (!fs.existsSync(dir)) continue;\r\n const files = fs.readdirSync(dir, { recursive: true }) as string[];\r\n const found = files.find(f => f.replace(/\\\\/g, '/').endsWith(`${componentName}.tsx`) || f.replace(/\\\\/g, '/').endsWith(`${componentName}.jsx`));\r\n if (found) {\r\n componentPath = path.join(dir, found);\r\n break;\r\n }\r\n }\r\n\r\n if (!componentPath) {\r\n logger.error(`Island component not found: ${componentName}`);\r\n res.writeHead(404);\r\n res.end('Island component not found');\r\n return;\r\n }\r\n\r\n // Bundle on the fly\r\n const result = await esbuild.build({\r\n entryPoints: [componentPath],\r\n bundle: true,\r\n format: 'esm',\r\n platform: 'browser',\r\n target: ['es2022'],\r\n minify: false,\r\n sourcemap: 'inline',\r\n jsx: 'automatic',\r\n external: ['react', 'react-dom'],\r\n write: false,\r\n });\r\n\r\n res.writeHead(200, { 'Content-Type': 'application/javascript' });\r\n res.end(result.outputFiles[0].text);\r\n return;\r\n } catch (err: any) {\r\n logger.error(`Island bundling failed: ${componentName}`, err);\r\n res.writeHead(500);\r\n res.end(`console.error(\"Island bundling failed: ${err.message}\");`);\r\n return;\r\n }\r\n }\r\n\r\n // React & ReactDOM Client serving\r\n if (pathname === '/__velix/react.js' || pathname === '/__velix/react-dom-client.js') {\r\n const dep = pathname === '/__velix/react.js' ? 'react' : 'react-dom/client';\r\n try {\r\n const result = await esbuild.build({\r\n entryPoints: [dep],\r\n bundle: true,\r\n format: 'esm',\r\n platform: 'browser',\r\n target: ['es2022'],\r\n minify: true,\r\n write: false,\r\n });\r\n res.writeHead(200, { 'Content-Type': 'application/javascript', 'Cache-Control': 'public, max-age=31536000, immutable' });\r\n res.end(result.outputFiles[0].text);\r\n return;\r\n } catch (err: any) {\r\n res.writeHead(500);\r\n res.end();\r\n return;\r\n }\r\n }\r\n\r\n res.writeHead(404);\r\n res.end('Not found');\r\n}\r\n\r\n// ============================================================================\r\n// Utilities\r\n// ============================================================================\r\n\r\nfunction parseRequestBody(req: http.IncomingMessage): Promise<unknown> {\r\n return new Promise((resolve, reject) => {\r\n let body = '';\r\n req.on('data', chunk => { body += chunk; });\r\n req.on('end', () => {\r\n try {\r\n const ct = req.headers['content-type'] || '';\r\n if (ct.includes('application/json')) resolve(JSON.parse(body));\r\n else resolve(body);\r\n } catch { resolve(body); }\r\n });\r\n req.on('error', reject);\r\n });\r\n}\r\n\r\nexport default { createServer, tailwindPlugin };\r\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { LayoutContext, Link, RequestContext, RouteContext, createRequestContext, hydrate, router, useParams, usePathname, useQuery, useRequest, useRouter } from './chunk-INOZP2VD.js';
|
|
2
1
|
export { build } from './chunk-7SGDYOVZ.js';
|
|
3
|
-
export {
|
|
2
|
+
export { LayoutContext, Link, RequestContext, RouteContext, createRequestContext, hydrate, router, useParams, usePathname, useQuery, useRequest, useRouter } from './chunk-INOZP2VD.js';
|
|
3
|
+
export { NotFoundError, PluginHooks, PluginManager, RedirectError, bindArgs, callServerAction, composeMiddleware, cookies, createServer, definePlugin, deserializeArgs, executeAction, formAction, generateJsonLd, generateMetadataTags, generateRobotsTxt, generateSitemap, getAction, getMethod, getPathname, headers, html, isMethod, json, jsonLd, loadMiddleware, loadPlugins, mergeMetadata, middlewares, notFound, parseFormData, parseJson, parseSearchParams, pluginManager, redirect, registerAction, runMiddleware, serverAction, tailwindPlugin, text, useActionContext, useActionState, useFormStatus, useOptimistic, useVelixAction } from './chunk-AS5PH3NU.js';
|
|
4
4
|
export { buildRouteTree, cleanDir, copyDir, debounce, ensureDir, escapeHtml, findFiles, findRouteLayouts, formatBytes, formatTime, generateHash, isClientComponent, isIsland as isIslandComponent, isServerComponent, logger, matchRoute, sleep } from './chunk-SPIGTNT7.js';
|
|
5
5
|
export { VelixConfigSchema, defaultConfig, defineConfig, loadConfig, resolvePaths } from './chunk-F24Q2MX3.js';
|
|
6
6
|
export { Island, LoadStrategy, createIsland, createLazyIsland, generateAdvancedHydrationScript, generateHydrationScript, getRegisteredIslands } from './chunk-OIZNYND3.js';
|
package/dist/server/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../middleware/index.ts","../plugins/index.ts","../plugins/tailwind.ts","../metadata/index.ts","../helpers.ts","../actions/index.ts","../server/devtools.ts","../server/error-pages.ts","../server/index.ts"],"names":["path","fs","pathToFileURL","cookies","url","cli","headers","useActionStateReact","text","__filename","__dirname"],"mappings":"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","file":"chunk-NVTZ6HRX.js","sourcesContent":["/**\n * Velix v5 Middleware System\n * Request processing pipeline with composable middleware\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface MiddlewareRequest {\n url: string;\n method: string;\n headers: Record<string, string | string[] | undefined>;\n cookies: Record<string, string>;\n params: Record<string, string>;\n query: Record<string, string>;\n body?: any;\n raw: import('http').IncomingMessage;\n}\n\nexport interface MiddlewareResponse {\n status: (code: number) => MiddlewareResponse;\n header: (name: string, value: string) => MiddlewareResponse;\n json: (data: any) => void;\n redirect: (url: string, status?: number) => void;\n rewrite: (url: string) => void;\n next: () => Promise<void>;\n _statusCode: number;\n _headers: Record<string, string>;\n _redirectUrl: string | null;\n _rewriteUrl: string | null;\n _ended: boolean;\n}\n\nexport type MiddlewareFunction = (\n req: MiddlewareRequest,\n res: MiddlewareResponse,\n next: () => Promise<void>\n) => void | Promise<void>;\n\nexport type MiddlewareResult = {\n continue: boolean;\n rewritten: boolean;\n};\n\n// ============================================================================\n// Built-in Middleware Registry\n// ============================================================================\n\nexport const middlewares = {\n cors(options: {\n origin?: string | string[];\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n } = {}): MiddlewareFunction {\n const {\n origin = '*',\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n headers: allowHeaders = ['Content-Type', 'Authorization'],\n credentials = false,\n maxAge = 86400\n } = options;\n\n return async (req, res, next) => {\n const originHeader = typeof origin === 'string' ? origin : origin.includes(req.headers.origin as string) ? req.headers.origin as string : '';\n\n res.header('Access-Control-Allow-Origin', originHeader);\n res.header('Access-Control-Allow-Methods', methods.join(', '));\n res.header('Access-Control-Allow-Headers', allowHeaders.join(', '));\n res.header('Access-Control-Max-Age', String(maxAge));\n\n if (credentials) {\n res.header('Access-Control-Allow-Credentials', 'true');\n }\n\n if (req.method === 'OPTIONS') {\n res.status(204);\n return;\n }\n\n await next();\n };\n },\n\n rateLimit(options: {\n windowMs?: number;\n max?: number;\n message?: string;\n } = {}): MiddlewareFunction {\n const { windowMs = 60000, max = 100, message = 'Too many requests' } = options;\n const store = new Map<string, { count: number; resetTime: number }>();\n\n return async (req, res, next) => {\n const ip = req.headers['x-forwarded-for'] as string || 'unknown';\n const now = Date.now();\n const record = store.get(ip);\n\n if (!record || now > record.resetTime) {\n store.set(ip, { count: 1, resetTime: now + windowMs });\n } else if (record.count >= max) {\n res.status(429).json({ error: message });\n return;\n } else {\n record.count++;\n }\n\n await next();\n };\n },\n\n security(): MiddlewareFunction {\n return async (_req, res, next) => {\n res.header('X-Content-Type-Options', 'nosniff');\n res.header('X-Frame-Options', 'DENY');\n res.header('X-XSS-Protection', '1; mode=block');\n res.header('Referrer-Policy', 'strict-origin-when-cross-origin');\n await next();\n };\n },\n};\n\n// ============================================================================\n// Middleware Loader\n// ============================================================================\n\n/**\n * Loads middleware from the project's middleware/ directory\n */\nexport async function loadMiddleware(projectRoot: string): Promise<MiddlewareFunction[]> {\n const middlewareDir = path.join(projectRoot, 'middleware');\n const fns: MiddlewareFunction[] = [];\n\n if (!fs.existsSync(middlewareDir)) return fns;\n\n const files = fs.readdirSync(middlewareDir).filter(f => /\\.(ts|js)$/.test(f)).sort();\n\n for (const file of files) {\n try {\n const filePath = path.join(middlewareDir, file);\n const { pathToFileURL } = await import('url');\n const url = pathToFileURL(filePath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const fn = mod.default || mod.middleware;\n if (typeof fn === 'function') fns.push(fn);\n } catch (err: any) {\n console.warn(`⚠ Failed to load middleware ${file}: ${err.message}`);\n }\n }\n\n return fns;\n}\n\n// ============================================================================\n// Middleware Runner\n// ============================================================================\n\n/**\n * Runs middleware chain for a request\n */\nexport async function runMiddleware(\n req: import('http').IncomingMessage,\n res: import('http').ServerResponse,\n fns: MiddlewareFunction[]\n): Promise<MiddlewareResult> {\n const result: MiddlewareResult = { continue: true, rewritten: false };\n if (fns.length === 0) return result;\n\n const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\n const cookies: Record<string, string> = {};\n const cookieHeader = req.headers.cookie;\n if (cookieHeader) {\n cookieHeader.split(';').forEach(c => {\n const [k, ...v] = c.split('=');\n if (k) cookies[k.trim()] = v.join('=').trim();\n });\n }\n\n const mReq: MiddlewareRequest = {\n url: req.url || '/',\n method: req.method || 'GET',\n headers: req.headers as Record<string, string>,\n cookies,\n params: {},\n query: Object.fromEntries(url.searchParams),\n raw: req,\n };\n\n let ended = false;\n const mRes: MiddlewareResponse = {\n _statusCode: 200,\n _headers: {},\n _redirectUrl: null,\n _rewriteUrl: null,\n _ended: false,\n status(code) { this._statusCode = code; return this; },\n header(name, value) { this._headers[name] = value; return this; },\n json(data) {\n this._headers['Content-Type'] = 'application/json';\n res.writeHead(this._statusCode, this._headers);\n res.end(JSON.stringify(data));\n this._ended = true;\n ended = true;\n },\n redirect(url, status = 307) {\n this._redirectUrl = url;\n this._statusCode = status;\n res.writeHead(status, { Location: url, ...this._headers });\n res.end();\n this._ended = true;\n ended = true;\n },\n rewrite(url) {\n this._rewriteUrl = url;\n req.url = url;\n result.rewritten = true;\n },\n async next() { /* handled by chain */ },\n };\n\n // Run middleware chain\n let index = 0;\n const next = async () => {\n if (ended || index >= fns.length) return;\n const fn = fns[index++];\n await fn(mReq, mRes, next);\n };\n\n await next();\n\n // Apply headers that were set\n if (!ended) {\n for (const [key, value] of Object.entries(mRes._headers)) {\n res.setHeader(key, value);\n }\n }\n\n result.continue = !ended;\n return result;\n}\n\n/**\n * Compose multiple middleware into one\n */\nexport function composeMiddleware(...fns: MiddlewareFunction[]): MiddlewareFunction {\n return async (req, res, next) => {\n let index = 0;\n const run = async () => {\n if (index >= fns.length) { await next(); return; }\n const fn = fns[index++];\n await fn(req, res, run);\n };\n await run();\n };\n}\n","/**\n * Velix v5 Plugin System\n * Extensible hook-based plugin architecture\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\n\n// ============================================================================\n// Plugin Hooks\n// ============================================================================\n\nexport const PluginHooks = {\n CONFIG: 'config',\n SERVER_START: 'server:start',\n REQUEST: 'request',\n RESPONSE: 'response',\n ROUTES_LOADED: 'routes:loaded',\n BEFORE_RENDER: 'render:before',\n AFTER_RENDER: 'render:after',\n BUILD_START: 'build:start',\n BUILD_END: 'build:end',\n} as const;\n\nexport type PluginHook = typeof PluginHooks[keyof typeof PluginHooks];\n\n// ============================================================================\n// Plugin Interface\n// ============================================================================\n\nexport interface VelixPluginDefinition {\n name: string;\n version?: string;\n setup?: (config: any) => void | Promise<void>;\n hooks?: Partial<Record<PluginHook, (...args: any[]) => any>>;\n [key: string]: any; // Allow for Zod passthrough and extra properties\n}\n\n// ============================================================================\n// Plugin Manager\n// ============================================================================\n\nexport class PluginManager {\n private plugins: VelixPluginDefinition[] = [];\n private hooks: Map<string, Array<(...args: any[]) => any>> = new Map();\n\n /**\n * Register a plugin\n */\n register(plugin: VelixPluginDefinition) {\n this.plugins.push(plugin);\n\n // Register hooks\n if (plugin.hooks) {\n for (const [hookName, handler] of Object.entries(plugin.hooks)) {\n if (handler) {\n const existing = this.hooks.get(hookName) || [];\n existing.push(handler);\n this.hooks.set(hookName, existing);\n }\n }\n }\n }\n\n /**\n * Run a hook with arguments\n */\n async runHook(hookName: string, ...args: any[]): Promise<void> {\n const handlers = this.hooks.get(hookName) || [];\n for (const handler of handlers) {\n await handler(...args);\n }\n }\n\n /**\n * Run a waterfall hook — each handler transforms the first argument\n */\n async runWaterfallHook(hookName: string, value: any, ...args: any[]): Promise<any> {\n const handlers = this.hooks.get(hookName) || [];\n let result = value;\n for (const handler of handlers) {\n const transformed = await handler(result, ...args);\n if (transformed !== undefined) result = transformed;\n }\n return result;\n }\n\n /**\n * Get all registered plugins\n */\n getPlugins(): VelixPluginDefinition[] {\n return [...this.plugins];\n }\n\n /**\n * Check if a plugin is registered\n */\n hasPlugin(name: string): boolean {\n return this.plugins.some(p => p.name === name);\n }\n}\n\n// ============================================================================\n// Global Instance\n// ============================================================================\n\nexport const pluginManager = new PluginManager();\n\n// ============================================================================\n// Plugin Loader\n// ============================================================================\n\n/**\n * Load plugins from project configuration\n */\nexport async function loadPlugins(projectRoot: string, config: any): Promise<void> {\n const pluginEntries = config.plugins || [];\n\n for (const entry of pluginEntries) {\n try {\n if (typeof entry === 'string') {\n // Load plugin by name (from plugins/ dir or node_modules)\n const localPath = path.join(projectRoot, 'plugins', entry + '.ts');\n const localPathJs = path.join(projectRoot, 'plugins', entry + '.js');\n const localPathDir = path.join(projectRoot, 'plugins', entry, 'index.ts');\n\n let pluginPath: string | null = null;\n if (fs.existsSync(localPath)) pluginPath = localPath;\n else if (fs.existsSync(localPathJs)) pluginPath = localPathJs;\n else if (fs.existsSync(localPathDir)) pluginPath = localPathDir;\n\n if (pluginPath) {\n const url = pathToFileURL(pluginPath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const plugin = mod.default || mod;\n if (plugin.name) {\n pluginManager.register(plugin);\n }\n } else {\n // Try node_modules\n try {\n const mod = await import(entry);\n const plugin = mod.default || mod;\n if (plugin.name) pluginManager.register(plugin);\n } catch {\n console.warn(`⚠ Plugin not found: ${entry}`);\n }\n }\n } else if (typeof entry === 'object' && entry.name) {\n // Inline plugin definition\n pluginManager.register(entry);\n }\n } catch (err: any) {\n console.warn(`⚠ Failed to load plugin: ${err.message}`);\n }\n }\n}\n\n// ============================================================================\n// Plugin Definition Helper\n// ============================================================================\n\n/**\n * Helper to define a Velix plugin with type safety.\n *\n * @example\n * ```ts\n * export default definePlugin({\n * name: 'my-plugin',\n * hooks: {\n * 'server:start': (server) => {\n * console.log('Server started!');\n * }\n * }\n * });\n * ```\n */\nexport function definePlugin(definition: VelixPluginDefinition): VelixPluginDefinition {\n return definition;\n}\n\n// ============================================================================\n// Built-in Plugins\n// ============================================================================\n\nexport const builtinPlugins = {\n /**\n * Security headers plugin\n */\n security: definePlugin({\n name: 'velix:security',\n hooks: {\n [PluginHooks.RESPONSE]: (_req, res) => {\n if (!res.headersSent) {\n res.setHeader('X-Content-Type-Options', 'nosniff');\n res.setHeader('X-Frame-Options', 'DENY');\n res.setHeader('X-XSS-Protection', '1; mode=block');\n }\n }\n }\n }),\n\n /**\n * Request logging plugin\n */\n logger: definePlugin({\n name: 'velix:logger',\n hooks: {\n [PluginHooks.RESPONSE]: (req, _res, duration) => {\n console.log(` ${req.method} ${req.url} ${duration}ms`);\n }\n }\n }),\n};\n","import { spawnSync, spawn } from 'child_process';\nimport fs from 'fs';\nimport path from 'path';\nimport { PluginHooks, definePlugin } from './index.js';\nimport logger from '../logger.js';\n\nexport interface TailwindPluginOptions {\n input?: string;\n output?: string;\n config?: string;\n minify?: boolean;\n}\n\n/**\n * Detect which Tailwind CLI is available (v4: @tailwindcss/cli, v3: tailwindcss)\n */\nfunction detectTailwindCli(): string {\n // Try v4 CLI first\n const v4 = spawnSync('npx', ['@tailwindcss/cli', '--help'], {\n stdio: 'pipe',\n shell: process.platform === 'win32',\n timeout: 15000,\n });\n if (v4.status === 0) return '@tailwindcss/cli';\n\n // Fallback to v3 CLI\n return 'tailwindcss';\n}\n\n/**\n * Native Velix Tailwind CSS Plugin\n * Automatically handles CSS compilation and injection.\n * Supports both Tailwind CSS v3 and v4.\n */\nexport default function tailwindPlugin(options: TailwindPluginOptions = {}) {\n const input = options.input || './app/globals.css';\n const output = options.output || './public/tailwind.css';\n const configPath = options.config || './tailwind.config.ts';\n let cliCmd: string | null = null;\n\n function getCli(): string {\n if (!cliCmd) cliCmd = detectTailwindCli();\n return cliCmd;\n }\n\n return definePlugin({\n name: 'velix:tailwind',\n hooks: {\n [PluginHooks.CONFIG]: (config: any) => {\n // Automatically ensure the output CSS is in the styles array\n const relativeOutput = output.startsWith('./') ? output.substring(1) : output;\n const stylePath = relativeOutput.startsWith('/public') ? relativeOutput.substring(7) : relativeOutput;\n \n if (!config.styles) config.styles = [];\n if (!config.styles.includes(stylePath)) {\n config.styles.push(stylePath);\n }\n },\n\n [PluginHooks.BUILD_START]: async () => {\n logger.info('Building Tailwind CSS...');\n try {\n const cli = getCli();\n const args = [cli, '-i', input, '-o', output];\n if (options.minify !== false) args.push('--minify');\n spawnSync('npx', args, { \n stdio: 'inherit',\n cwd: process.cwd(),\n shell: process.platform === 'win32',\n });\n logger.success('Tailwind CSS built successfully');\n } catch (err: any) {\n logger.error('Tailwind build failed', err);\n }\n },\n\n [PluginHooks.SERVER_START]: async (server: any, isDev: boolean) => {\n if (!isDev) return;\n\n // Check if input file exists\n if (!fs.existsSync(input)) {\n logger.warn(`Tailwind input file not found: ${input}`);\n return;\n }\n\n // Ensure output directory exists\n const outputDir = path.dirname(output);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n // Build initial CSS synchronously\n logger.info('Building initial Tailwind CSS...');\n try {\n const cli = getCli();\n const buildResult = spawnSync('npx', [cli, '-i', input, '-o', output], {\n cwd: process.cwd(),\n stdio: 'pipe',\n shell: process.platform === 'win32',\n });\n\n if (buildResult.error) {\n logger.error('Tailwind CSS not installed. Run: npm install -D tailwindcss @tailwindcss/postcss');\n return;\n }\n\n if (buildResult.status !== 0) {\n const errorMsg = buildResult.stderr?.toString() || 'Unknown error';\n logger.error(`Tailwind build failed: ${errorMsg}`);\n return;\n }\n\n logger.success('Tailwind CSS built successfully');\n } catch (err: any) {\n logger.error('Failed to build Tailwind CSS', err);\n return;\n }\n\n // Start watcher\n logger.info('Starting Tailwind CSS watcher...');\n const cli = getCli();\n const watcher = spawn('npx', [cli, '-i', input, '-o', output, '--watch'], {\n stdio: 'pipe',\n cwd: process.cwd(),\n shell: process.platform === 'win32',\n });\n\n watcher.stdout.on('data', (data) => {\n const msg = data.toString().trim();\n if (msg && !msg.includes('Rebuilding...') && !msg.includes('Done in')) {\n logger.info(`Tailwind: ${msg}`);\n }\n });\n\n watcher.stderr.on('data', (data) => {\n const msg = data.toString().trim();\n if (msg && !msg.includes('warn')) {\n logger.warn(`Tailwind: ${msg}`);\n }\n });\n\n watcher.on('error', (err) => {\n logger.error('Tailwind watcher error', err);\n });\n\n watcher.on('exit', (code) => {\n if (code !== 0 && code !== null) {\n logger.error(`Tailwind watcher exited with code ${code}`);\n }\n });\n\n const cleanup = () => {\n if (watcher && !watcher.killed) {\n watcher.kill();\n }\n };\n\n process.on('exit', cleanup);\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n }\n }\n });\n}\n","/**\n * Velix v5 Metadata & SEO System\n *\n * First-class SEO with automatic:\n * - Meta tags, Open Graph, Twitter Cards\n * - Canonical URLs, robots, sitemaps\n * - JSON-LD structured data\n * - Viewport, theme color, icons\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types (comprehensive metadata interface)\n// ============================================================================\n\nexport interface Metadata {\n title?: string | { default: string; template?: string; absolute?: string };\n description?: string;\n keywords?: string | string[];\n authors?: Author | Author[];\n creator?: string;\n publisher?: string;\n robots?: Robots | string;\n icons?: Icons;\n manifest?: string;\n openGraph?: OpenGraph;\n twitter?: Twitter;\n verification?: Verification;\n alternates?: Alternates;\n viewport?: Viewport | string;\n themeColor?: ThemeColor | ThemeColor[];\n colorScheme?: 'normal' | 'light' | 'dark' | 'light dark' | 'dark light';\n formatDetection?: FormatDetection;\n metadataBase?: URL | string;\n generator?: string;\n applicationName?: string;\n referrer?: string;\n other?: Record<string, string | string[]>;\n}\n\nexport interface Author { name?: string; url?: string; }\nexport interface Robots { index?: boolean; follow?: boolean; noarchive?: boolean; nosnippet?: boolean; noimageindex?: boolean; nocache?: boolean; googleBot?: Robots | string; }\nexport interface Icons { icon?: IconDescriptor | IconDescriptor[]; shortcut?: IconDescriptor | IconDescriptor[]; apple?: IconDescriptor | IconDescriptor[]; other?: IconDescriptor[]; }\nexport interface IconDescriptor { url: string; type?: string; sizes?: string; color?: string; rel?: string; media?: string; }\nexport interface OpenGraph {\n type?: string; url?: string; title?: string; description?: string; siteName?: string;\n locale?: string; images?: OGImage | OGImage[]; videos?: OGVideo | OGVideo[];\n determiner?: string; publishedTime?: string; modifiedTime?: string;\n expirationTime?: string; authors?: string | string[]; section?: string; tags?: string[];\n}\nexport interface OGImage { url: string; secureUrl?: string; type?: string; width?: number; height?: number; alt?: string; }\nexport interface OGVideo { url: string; secureUrl?: string; type?: string; width?: number; height?: number; }\nexport interface Twitter {\n card?: 'summary' | 'summary_large_image' | 'app' | 'player';\n site?: string; siteId?: string; creator?: string; creatorId?: string;\n title?: string; description?: string; images?: string | TwitterImage | (string | TwitterImage)[];\n}\nexport interface TwitterImage { url: string; alt?: string; }\nexport interface Verification { google?: string | string[]; yahoo?: string | string[]; yandex?: string | string[]; other?: Record<string, string | string[]>; }\nexport interface Alternates { canonical?: string; languages?: Record<string, string>; media?: Record<string, string>; }\nexport interface Viewport { width?: number | 'device-width'; height?: number | 'device-height'; initialScale?: number; minimumScale?: number; maximumScale?: number; userScalable?: boolean; viewportFit?: 'auto' | 'cover' | 'contain'; }\nexport interface ThemeColor { color: string; media?: string; }\nexport interface FormatDetection { telephone?: boolean; date?: boolean; address?: boolean; email?: boolean; }\n\n// ============================================================================\n// Metadata Tag Generation\n// ============================================================================\n\nexport function generateMetadataTags(metadata: Metadata, baseUrl?: string): string {\n const tags: string[] = [];\n const base = baseUrl || metadata.metadataBase?.toString() || '';\n\n // Title\n if (metadata.title) {\n const title = typeof metadata.title === 'string'\n ? metadata.title\n : metadata.title.absolute || (metadata.title.template\n ? metadata.title.template.replace('%s', metadata.title.default)\n : metadata.title.default);\n tags.push(`<title>${escapeHtml(title)}</title>`);\n }\n\n if (metadata.description) tags.push(`<meta name=\"description\" content=\"${escapeHtml(metadata.description)}\">`);\n\n if (metadata.keywords) {\n const kw = Array.isArray(metadata.keywords) ? metadata.keywords.join(', ') : metadata.keywords;\n tags.push(`<meta name=\"keywords\" content=\"${escapeHtml(kw)}\">`);\n }\n\n if (metadata.authors) {\n const authors = Array.isArray(metadata.authors) ? metadata.authors : [metadata.authors];\n authors.forEach(a => {\n if (a.name) tags.push(`<meta name=\"author\" content=\"${escapeHtml(a.name)}\">`);\n if (a.url) tags.push(`<link rel=\"author\" href=\"${a.url}\">`);\n });\n }\n\n if (metadata.generator) tags.push(`<meta name=\"generator\" content=\"${escapeHtml(metadata.generator)}\">`);\n if (metadata.applicationName) tags.push(`<meta name=\"application-name\" content=\"${escapeHtml(metadata.applicationName)}\">`);\n if (metadata.referrer) tags.push(`<meta name=\"referrer\" content=\"${metadata.referrer}\">`);\n\n // Robots\n if (metadata.robots) {\n if (typeof metadata.robots === 'string') {\n tags.push(`<meta name=\"robots\" content=\"${metadata.robots}\">`);\n } else {\n tags.push(`<meta name=\"robots\" content=\"${generateRobotsContent(metadata.robots)}\">`);\n if (metadata.robots.googleBot) {\n const gbc = typeof metadata.robots.googleBot === 'string' ? metadata.robots.googleBot : generateRobotsContent(metadata.robots.googleBot);\n tags.push(`<meta name=\"googlebot\" content=\"${gbc}\">`);\n }\n }\n }\n\n // Viewport\n if (metadata.viewport) {\n const vc = typeof metadata.viewport === 'string' ? metadata.viewport : generateViewportContent(metadata.viewport);\n tags.push(`<meta name=\"viewport\" content=\"${vc}\">`);\n }\n\n // Theme Color\n if (metadata.themeColor) {\n const tcs = Array.isArray(metadata.themeColor) ? metadata.themeColor : [metadata.themeColor];\n tcs.forEach(tc => {\n const media = typeof tc !== 'string' && tc.media ? ` media=\"${tc.media}\"` : '';\n const color = typeof tc === 'string' ? tc : tc.color;\n tags.push(`<meta name=\"theme-color\" content=\"${color}\"${media}>`);\n });\n }\n\n if (metadata.colorScheme) tags.push(`<meta name=\"color-scheme\" content=\"${metadata.colorScheme}\">`);\n\n // Icons\n if (metadata.icons) {\n const addIcon = (icon: IconDescriptor, defaultRel: string) => {\n const rel = icon.rel || defaultRel;\n const attrs = [\n icon.type ? ` type=\"${icon.type}\"` : '',\n icon.sizes ? ` sizes=\"${icon.sizes}\"` : '',\n icon.color ? ` color=\"${icon.color}\"` : '',\n ].join('');\n tags.push(`<link rel=\"${rel}\" href=\"${resolveUrl(icon.url, base)}\"${attrs}>`);\n };\n if (metadata.icons.icon) { (Array.isArray(metadata.icons.icon) ? metadata.icons.icon : [metadata.icons.icon]).forEach(i => addIcon(i, 'icon')); }\n if (metadata.icons.apple) { (Array.isArray(metadata.icons.apple) ? metadata.icons.apple : [metadata.icons.apple]).forEach(i => addIcon(i, 'apple-touch-icon')); }\n }\n\n if (metadata.manifest) tags.push(`<link rel=\"manifest\" href=\"${resolveUrl(metadata.manifest, base)}\">`);\n\n // Open Graph\n if (metadata.openGraph) {\n const og = metadata.openGraph;\n if (og.type) tags.push(`<meta property=\"og:type\" content=\"${og.type}\">`);\n if (og.title) tags.push(`<meta property=\"og:title\" content=\"${escapeHtml(og.title)}\">`);\n if (og.description) tags.push(`<meta property=\"og:description\" content=\"${escapeHtml(og.description)}\">`);\n if (og.url) tags.push(`<meta property=\"og:url\" content=\"${resolveUrl(og.url, base)}\">`);\n if (og.siteName) tags.push(`<meta property=\"og:site_name\" content=\"${escapeHtml(og.siteName)}\">`);\n if (og.locale) tags.push(`<meta property=\"og:locale\" content=\"${og.locale}\">`);\n if (og.images) {\n (Array.isArray(og.images) ? og.images : [og.images]).forEach(img => {\n tags.push(`<meta property=\"og:image\" content=\"${resolveUrl(img.url, base)}\">`);\n if (img.width) tags.push(`<meta property=\"og:image:width\" content=\"${img.width}\">`);\n if (img.height) tags.push(`<meta property=\"og:image:height\" content=\"${img.height}\">`);\n if (img.alt) tags.push(`<meta property=\"og:image:alt\" content=\"${escapeHtml(img.alt)}\">`);\n });\n }\n if (og.type === 'article') {\n if (og.publishedTime) tags.push(`<meta property=\"article:published_time\" content=\"${og.publishedTime}\">`);\n if (og.modifiedTime) tags.push(`<meta property=\"article:modified_time\" content=\"${og.modifiedTime}\">`);\n if (og.tags) og.tags.forEach(t => tags.push(`<meta property=\"article:tag\" content=\"${escapeHtml(t)}\">`));\n }\n }\n\n // Twitter\n if (metadata.twitter) {\n const tw = metadata.twitter;\n if (tw.card) tags.push(`<meta name=\"twitter:card\" content=\"${tw.card}\">`);\n if (tw.site) tags.push(`<meta name=\"twitter:site\" content=\"${tw.site}\">`);\n if (tw.creator) tags.push(`<meta name=\"twitter:creator\" content=\"${tw.creator}\">`);\n if (tw.title) tags.push(`<meta name=\"twitter:title\" content=\"${escapeHtml(tw.title)}\">`);\n if (tw.description) tags.push(`<meta name=\"twitter:description\" content=\"${escapeHtml(tw.description)}\">`);\n if (tw.images) {\n (Array.isArray(tw.images) ? tw.images : [tw.images]).forEach(img => {\n const url = typeof img === 'string' ? img : img.url;\n tags.push(`<meta name=\"twitter:image\" content=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n // Verification\n if (metadata.verification) {\n if (metadata.verification.google) {\n (Array.isArray(metadata.verification.google) ? metadata.verification.google : [metadata.verification.google])\n .forEach(v => tags.push(`<meta name=\"google-site-verification\" content=\"${v}\">`));\n }\n }\n\n // Alternates\n if (metadata.alternates) {\n if (metadata.alternates.canonical) tags.push(`<link rel=\"canonical\" href=\"${resolveUrl(metadata.alternates.canonical, base)}\">`);\n if (metadata.alternates.languages) {\n Object.entries(metadata.alternates.languages).forEach(([lang, url]) => {\n tags.push(`<link rel=\"alternate\" hreflang=\"${lang}\" href=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n return tags.join('\\n ');\n}\n\n// ============================================================================\n// Merge & JSON-LD\n// ============================================================================\n\nexport function mergeMetadata(parent: Metadata, child: Metadata): Metadata {\n return {\n ...parent, ...child,\n openGraph: child.openGraph ? { ...parent.openGraph, ...child.openGraph } : parent.openGraph,\n twitter: child.twitter ? { ...parent.twitter, ...child.twitter } : parent.twitter,\n icons: child.icons ? { ...parent.icons, ...child.icons } : parent.icons,\n alternates: child.alternates ? { ...parent.alternates, ...child.alternates } : parent.alternates,\n };\n}\n\nexport function generateJsonLd(data: Record<string, any>): string {\n return `<script type=\"application/ld+json\">${JSON.stringify(data)}</script>`;\n}\n\nexport const jsonLd = {\n website: (c: { name: string; url: string; description?: string }) => ({\n '@context': 'https://schema.org', '@type': 'WebSite', name: c.name, url: c.url, description: c.description\n }),\n article: (c: { headline: string; description?: string; image?: string | string[]; datePublished: string; dateModified?: string; author: { name: string; url?: string } | { name: string; url?: string }[] }) => ({\n '@context': 'https://schema.org', '@type': 'Article', headline: c.headline, description: c.description,\n image: c.image, datePublished: c.datePublished, dateModified: c.dateModified || c.datePublished,\n author: Array.isArray(c.author) ? c.author.map(a => ({ '@type': 'Person', ...a })) : { '@type': 'Person', ...c.author }\n }),\n organization: (c: { name: string; url: string; logo?: string; sameAs?: string[] }) => ({\n '@context': 'https://schema.org', '@type': 'Organization', name: c.name, url: c.url, logo: c.logo, sameAs: c.sameAs\n }),\n breadcrumb: (items: { name: string; url: string }[]) => ({\n '@context': 'https://schema.org', '@type': 'BreadcrumbList',\n itemListElement: items.map((item, i) => ({ '@type': 'ListItem', position: i + 1, name: item.name, item: item.url }))\n }),\n};\n\n// ============================================================================\n// Automatic SEO Generation\n// ============================================================================\n\n/**\n * Generate sitemap.xml content from routes\n */\nexport function generateSitemap(routes: any[], baseUrl: string): string {\n const urls = routes\n .filter(r => r.type === 'page' && !r.path.includes(':') && !r.path.includes('*'))\n .map(r => {\n const loc = `${baseUrl.replace(/\\/$/, '')}${r.path}`;\n return ` <url>\\n <loc>${loc}</loc>\\n <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n <changefreq>weekly</changefreq>\\n <priority>${r.path === '/' ? '1.0' : '0.8'}</priority>\\n </url>`;\n });\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n${urls.join('\\n')}\\n</urlset>`;\n}\n\n/**\n * Generate robots.txt content\n */\nexport function generateRobotsTxt(baseUrl: string, options: { disallow?: string[]; allow?: string[] } = {}): string {\n const lines = ['User-agent: *'];\n if (options.allow) options.allow.forEach(p => lines.push(`Allow: ${p}`));\n if (options.disallow) options.disallow.forEach(p => lines.push(`Disallow: ${p}`));\n else lines.push('Allow: /');\n lines.push('', `Sitemap: ${baseUrl.replace(/\\/$/, '')}/sitemap.xml`);\n return lines.join('\\n');\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction escapeHtml(str: string): string {\n return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n}\n\nfunction resolveUrl(url: string, base: string): string {\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')) return url;\n return base ? `${base.replace(/\\/$/, '')}${url.startsWith('/') ? '' : '/'}${url}` : url;\n}\n\nfunction generateRobotsContent(robots: Robots): string {\n const parts: string[] = [];\n if (robots.index !== undefined) parts.push(robots.index ? 'index' : 'noindex');\n if (robots.follow !== undefined) parts.push(robots.follow ? 'follow' : 'nofollow');\n if (robots.noarchive) parts.push('noarchive');\n if (robots.nosnippet) parts.push('nosnippet');\n if (robots.noimageindex) parts.push('noimageindex');\n return parts.join(', ') || 'index, follow';\n}\n\nfunction generateViewportContent(viewport: Viewport): string {\n const parts: string[] = [];\n if (viewport.width) parts.push(`width=${viewport.width}`);\n if (viewport.height) parts.push(`height=${viewport.height}`);\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`);\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`);\n if (viewport.userScalable !== undefined) parts.push(`user-scalable=${viewport.userScalable ? 'yes' : 'no'}`);\n return parts.join(', ') || 'width=device-width, initial-scale=1';\n}\n\nexport default { generateMetadataTags, mergeMetadata, generateJsonLd, jsonLd, generateSitemap, generateRobotsTxt };\n","/**\n * Velix v5 Server Helpers\n * Utility functions for server-side operations\n */\n\n// ============================================================================\n// Response Helpers\n// ============================================================================\n\nexport class RedirectError extends Error {\n public readonly url: string;\n public readonly statusCode: number;\n public readonly type = 'redirect' as const;\n\n constructor(url: string, statusCode: number = 307) {\n super(`Redirect to ${url}`);\n this.name = 'RedirectError';\n this.url = url;\n this.statusCode = statusCode;\n }\n}\n\nexport class NotFoundError extends Error {\n public readonly type = 'notFound' as const;\n\n constructor(message: string = 'Page not found') {\n super(message);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Redirect to a different URL\n *\n * @example\n * ```tsx\n * import { redirect } from 'velix';\n *\n * export default function ProtectedPage() {\n * const user = getUser();\n * if (!user) redirect('/login');\n * return <Dashboard user={user} />;\n * }\n * ```\n */\nexport function redirect(url: string, type: 'replace' | 'permanent' = 'replace'): never {\n const statusCode = type === 'permanent' ? 308 : 307;\n throw new RedirectError(url, statusCode);\n}\n\n/**\n * Trigger a 404 Not Found response\n */\nexport function notFound(message?: string): never {\n throw new NotFoundError(message);\n}\n\n/**\n * Create a JSON response\n */\nexport function json<T>(\n data: T,\n options: { status?: number; headers?: Record<string, string> } = {}\n): Response {\n const { status = 200, headers = {} } = options;\n return new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': 'application/json', ...headers }\n });\n}\n\n/**\n * Create an HTML response\n */\nexport function html(\n content: string,\n options: { status?: number; headers?: Record<string, string> } = {}\n): Response {\n const { status = 200, headers = {} } = options;\n return new Response(content, {\n status,\n headers: { 'Content-Type': 'text/html; charset=utf-8', ...headers }\n });\n}\n\n/**\n * Create a text response\n */\nexport function text(\n content: string,\n options: { status?: number; headers?: Record<string, string> } = {}\n): Response {\n const { status = 200, headers = {} } = options;\n return new Response(content, {\n status,\n headers: { 'Content-Type': 'text/plain; charset=utf-8', ...headers }\n });\n}\n\n// ============================================================================\n// Cookies API\n// ============================================================================\n\nexport interface CookieOptions {\n maxAge?: number;\n expires?: Date;\n path?: string;\n domain?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n}\n\nexport const cookies = {\n parse(cookieHeader: string): Record<string, string> {\n const cookies: Record<string, string> = {};\n if (!cookieHeader) return cookies;\n cookieHeader.split(';').forEach(cookie => {\n const [name, ...rest] = cookie.split('=');\n if (name) {\n cookies[name.trim()] = decodeURIComponent(rest.join('=').trim());\n }\n });\n return cookies;\n },\n\n get(request: Request, name: string): string | undefined {\n const cookieHeader = request.headers.get('cookie') || '';\n return this.parse(cookieHeader)[name];\n },\n\n getAll(request: Request): Record<string, string> {\n const cookieHeader = request.headers.get('cookie') || '';\n return this.parse(cookieHeader);\n },\n\n serialize(name: string, value: string, options: CookieOptions = {}): string {\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n if (options.maxAge !== undefined) cookie += `; Max-Age=${options.maxAge}`;\n if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;\n if (options.path) cookie += `; Path=${options.path}`;\n if (options.domain) cookie += `; Domain=${options.domain}`;\n if (options.secure) cookie += '; Secure';\n if (options.httpOnly) cookie += '; HttpOnly';\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite.charAt(0).toUpperCase() + options.sameSite.slice(1)}`;\n }\n return cookie;\n },\n\n set(name: string, value: string, options: CookieOptions = {}): string {\n return this.serialize(name, value, {\n path: '/',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n ...options\n });\n },\n\n delete(name: string, options: Omit<CookieOptions, 'maxAge' | 'expires'> = {}): string {\n return this.serialize(name, '', { ...options, path: '/', maxAge: 0 });\n }\n};\n\n// ============================================================================\n// Headers API\n// ============================================================================\n\nexport const headers = {\n create(init?: HeadersInit): Headers {\n return new Headers(init);\n },\n\n get(request: Request, name: string): string | null {\n return request.headers.get(name);\n },\n\n getAll(request: Request): Record<string, string> {\n const result: Record<string, string> = {};\n request.headers.forEach((value, key) => { result[key] = value; });\n return result;\n },\n\n has(request: Request, name: string): boolean {\n return request.headers.has(name);\n },\n\n contentType(request: Request): string | null {\n return request.headers.get('content-type');\n },\n\n acceptsJson(request: Request): boolean {\n const accept = request.headers.get('accept') || '';\n return accept.includes('application/json') || accept.includes('*/*');\n },\n\n isAjax(request: Request): boolean {\n return request.headers.get('x-requested-with') === 'XMLHttpRequest' ||\n this.acceptsJson(request);\n },\n\n authorization(request: Request): { type: string; credentials: string } | null {\n const auth = request.headers.get('authorization');\n if (!auth) return null;\n const [type, ...rest] = auth.split(' ');\n return { type: type.toLowerCase(), credentials: rest.join(' ') };\n },\n\n bearerToken(request: Request): string | null {\n const auth = this.authorization(request);\n return auth?.type === 'bearer' ? auth.credentials : null;\n },\n\n security(): Record<string, string> {\n return {\n 'X-Content-Type-Options': 'nosniff',\n 'X-Frame-Options': 'DENY',\n 'X-XSS-Protection': '1; mode=block',\n 'Referrer-Policy': 'strict-origin-when-cross-origin',\n 'Permissions-Policy': 'camera=(), microphone=(), geolocation=()'\n };\n },\n\n cors(options: {\n origin?: string;\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n } = {}): Record<string, string> {\n const {\n origin = '*',\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n headers: allowHeaders = ['Content-Type', 'Authorization'],\n credentials = false,\n maxAge = 86400\n } = options;\n\n const corsHeaders: Record<string, string> = {\n 'Access-Control-Allow-Origin': origin,\n 'Access-Control-Allow-Methods': methods.join(', '),\n 'Access-Control-Allow-Headers': allowHeaders.join(', '),\n 'Access-Control-Max-Age': String(maxAge)\n };\n\n if (credentials) corsHeaders['Access-Control-Allow-Credentials'] = 'true';\n return corsHeaders;\n },\n\n cache(options: {\n maxAge?: number;\n sMaxAge?: number;\n staleWhileRevalidate?: number;\n private?: boolean;\n noStore?: boolean;\n } = {}): Record<string, string> {\n if (options.noStore) {\n return { 'Cache-Control': 'no-store, no-cache, must-revalidate' };\n }\n const directives: string[] = [];\n directives.push(options.private ? 'private' : 'public');\n if (options.maxAge !== undefined) directives.push(`max-age=${options.maxAge}`);\n if (options.sMaxAge !== undefined) directives.push(`s-maxage=${options.sMaxAge}`);\n if (options.staleWhileRevalidate !== undefined) directives.push(`stale-while-revalidate=${options.staleWhileRevalidate}`);\n return { 'Cache-Control': directives.join(', ') };\n }\n};\n\n// ============================================================================\n// Request Helpers\n// ============================================================================\n\nexport async function parseJson<T = unknown>(request: Request): Promise<T> {\n try { return await request.json(); }\n catch { throw new Error('Invalid JSON body'); }\n}\n\nexport async function parseFormData(request: Request): Promise<FormData> {\n return await request.formData();\n}\n\nexport function parseSearchParams(request: Request): URLSearchParams {\n return new URL(request.url).searchParams;\n}\n\nexport function getMethod(request: Request): string {\n return request.method.toUpperCase();\n}\n\nexport function getPathname(request: Request): string {\n return new URL(request.url).pathname;\n}\n\nexport function isMethod(request: Request, method: string | string[]): boolean {\n const reqMethod = getMethod(request);\n return Array.isArray(method)\n ? method.map(m => m.toUpperCase()).includes(reqMethod)\n : reqMethod === method.toUpperCase();\n}\n","/**\n * Velix v5 Server Actions\n *\n * React 19 native actions with Velix enhancements and security.\n */\n\nexport { useActionState, useOptimistic } from 'react';\nexport { useFormStatus } from 'react-dom';\n\nimport { cookies, headers, redirect, notFound, RedirectError, NotFoundError } from '../helpers.js';\n\n// Global action registry\ndeclare global {\n var __VELIX_ACTIONS__: Record<string, ServerActionFunction>;\n var __VELIX_ACTION_CONTEXT__: ActionContext | null;\n}\n\nglobalThis.__VELIX_ACTIONS__ = globalThis.__VELIX_ACTIONS__ || {};\nglobalThis.__VELIX_ACTION_CONTEXT__ = null;\n\nexport interface ActionContext {\n request: Request;\n cookies: typeof cookies;\n headers: typeof headers;\n redirect: typeof redirect;\n notFound: typeof notFound;\n}\n\nexport type ServerActionFunction = (...args: any[]) => Promise<any>;\n\nexport interface ActionResult<T = any> {\n success: boolean;\n data?: T;\n error?: string;\n redirect?: string;\n}\n\n/**\n * Decorator to mark a function as a server action\n */\nexport function serverAction<T extends ServerActionFunction>(fn: T, actionId?: string): T {\n const id = actionId || `action_${fn.name}_${generateActionId()}`;\n globalThis.__VELIX_ACTIONS__[id] = fn;\n\n const proxy = (async (...args: any[]) => {\n if (typeof window === 'undefined') return await executeAction(id, args);\n return await callServerAction(id, args);\n }) as T;\n\n (proxy as any).$$typeof = Symbol.for('react.server.action');\n (proxy as any).$$id = id;\n (proxy as any).$$bound = null;\n return proxy;\n}\n\nexport function registerAction(id: string, fn: ServerActionFunction): void {\n globalThis.__VELIX_ACTIONS__[id] = fn;\n}\n\nexport function getAction(id: string): ServerActionFunction | undefined {\n return globalThis.__VELIX_ACTIONS__[id];\n}\n\n/**\n * Execute a server action on the server\n */\nexport async function executeAction(actionId: string, args: any[], context?: Partial<ActionContext>): Promise<ActionResult> {\n const action = globalThis.__VELIX_ACTIONS__[actionId];\n if (!action) return { success: false, error: `Server action not found: ${actionId}` };\n\n const actionContext: ActionContext = {\n request: context?.request || new Request('http://localhost'),\n cookies, headers, redirect, notFound\n };\n\n globalThis.__VELIX_ACTION_CONTEXT__ = actionContext;\n\n try {\n const result = await action(...args);\n return { success: true, data: result };\n } catch (error: any) {\n if (error instanceof RedirectError) return { success: true, redirect: error.url };\n if (error instanceof NotFoundError) return { success: false, error: 'Not found' };\n return { success: false, error: error.message || 'Action failed' };\n } finally {\n globalThis.__VELIX_ACTION_CONTEXT__ = null;\n }\n}\n\n/**\n * Call a server action from the client\n */\nexport async function callServerAction(actionId: string, args: any[]): Promise<ActionResult> {\n try {\n const response = await fetch('/__velix/action', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'X-Velix-Action': actionId },\n body: JSON.stringify({ actionId, args: serializeArgs(args) }),\n credentials: 'same-origin'\n });\n\n if (!response.ok) throw new Error(`Action failed: ${response.statusText}`);\n const result = await response.json();\n if (result.redirect) { window.location.href = result.redirect; }\n return result;\n } catch (error: any) {\n return { success: false, error: error.message || 'Network error' };\n }\n}\n\nfunction serializeArgs(args: any[]): any[] {\n return args.map(arg => {\n if (arg instanceof FormData) {\n const obj: Record<string, any> = {};\n arg.forEach((value, key) => {\n if (obj[key]) {\n obj[key] = Array.isArray(obj[key]) ? [...obj[key], value] : [obj[key], value];\n } else { obj[key] = value; }\n });\n return { $$type: 'FormData', data: obj };\n }\n if (arg instanceof Date) return { $$type: 'Date', value: arg.toISOString() };\n if (typeof arg === 'object' && arg !== null) return JSON.parse(JSON.stringify(arg));\n return arg;\n });\n}\n\n// Security validation\nconst ALLOWED_TYPES = new Set(['FormData', 'Date', 'File']);\nconst MAX_DEPTH = 10;\n\nfunction validateInput(obj: any, depth = 0): boolean {\n if (depth > MAX_DEPTH) throw new Error('Payload too deeply nested');\n if (obj === null || obj === undefined || typeof obj !== 'object') return true;\n if ('__proto__' in obj || 'constructor' in obj || 'prototype' in obj) {\n throw new Error('Invalid payload: prototype pollution attempt detected');\n }\n if ('$$type' in obj && !ALLOWED_TYPES.has(obj.$$type)) {\n throw new Error(`Invalid serialized type: ${obj.$$type}`);\n }\n if (Array.isArray(obj)) obj.forEach(item => validateInput(item, depth + 1));\n else Object.values(obj).forEach(val => validateInput(val, depth + 1));\n return true;\n}\n\nexport function deserializeArgs(args: any[]): any[] {\n validateInput(args);\n return args.map(arg => {\n if (arg && typeof arg === 'object') {\n if (arg.$$type === 'FormData') {\n const fd = new FormData();\n for (const [key, value] of Object.entries(arg.data || {})) {\n if (typeof key !== 'string' || key.startsWith('__')) continue;\n if (Array.isArray(value)) value.forEach(v => { if (typeof v === 'string' || typeof v === 'number') fd.append(key, String(v)); });\n else if (typeof value === 'string' || typeof value === 'number') fd.append(key, String(value));\n }\n return fd;\n }\n if (arg.$$type === 'Date') { const d = new Date(arg.value); if (isNaN(d.getTime())) throw new Error('Invalid date'); return d; }\n if (arg.$$type === 'File') return { name: String(arg.name || ''), type: String(arg.type || ''), size: Number(arg.size || 0) };\n }\n return arg;\n });\n}\n\nfunction generateActionId(): string { return Math.random().toString(36).substring(2, 10); }\n\nexport function useActionContext(): ActionContext | null { return globalThis.__VELIX_ACTION_CONTEXT__; }\n\nexport function formAction<T>(action: (formData: FormData) => Promise<T>): (formData: FormData) => Promise<ActionResult<T>> {\n return async (formData: FormData) => {\n try {\n const result = await action(formData);\n return { success: true, data: result };\n } catch (error: any) {\n if (error instanceof RedirectError) return { success: true, redirect: error.url };\n return { success: false, error: error.message };\n }\n };\n}\n\nimport { useActionState as useActionStateReact } from 'react';\n\nexport function useVelixAction<State, Payload>(\n action: (state: Awaited<State>, payload: Payload) => State | Promise<State>,\n initialState: Awaited<State>,\n permalink?: string\n): [state: Awaited<State>, dispatch: (payload: Payload) => void, isPending: boolean] {\n return useActionStateReact(action, initialState, permalink);\n}\n\nexport function bindArgs<T extends ServerActionFunction>(action: T, ...boundArgs: any[]): T {\n const bound = (async (...args: any[]) => await (action as any)(...boundArgs, ...args)) as T;\n (bound as any).$$typeof = (action as any).$$typeof;\n (bound as any).$$id = (action as any).$$id;\n (bound as any).$$bound = boundArgs;\n return bound;\n}\n","/**\n * Velix v5 Enhanced DevTools\n * Visual indicators for rendering, compiling, and navigation states\n * Inspired by Next.js latest DevTools\n */\n\nexport interface DevToolsState {\n status: 'idle' | 'rendering' | 'compiling' | 'navigating' | 'error';\n route?: string;\n timestamp?: number;\n error?: string;\n}\n\n/**\n * Generate enhanced DevTools HTML with visual state indicators\n */\nexport function generateDevToolsHtml(isDev: boolean): string {\n if (!isDev) return '';\n\n return `<style>\n@keyframes velix-pulse {\n 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(34, 211, 238, 0.7); }\n 70% { transform: scale(1.05); box-shadow: 0 0 0 10px rgba(34, 211, 238, 0); }\n 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(34, 211, 238, 0); }\n}\n\n@keyframes velix-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.velix-idle { background: #0f172a !important; border: 2px solid #22D3EE !important; }\n.velix-rendering { background: #ea580c !important; border: 2px solid #fb923c !important; animation: velix-pulse 1.5s infinite !important; }\n.velix-compiling { background: #16a34a !important; border: 2px solid #4ade80 !important; animation: velix-spin 2s linear infinite !important; }\n.velix-navigating { background: #2563eb !important; border: 2px solid #60a5fa !important; animation: velix-pulse 1s infinite !important; }\n.velix-error { background: #dc2626 !important; border: 2px solid #f87171 !important; animation: velix-pulse 0.8s infinite !important; }\n\n.velix-status-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n border: 2px solid #0f172a;\n}\n\n.velix-status-idle { background: #22D3EE; }\n.velix-status-rendering { background: #fb923c; }\n.velix-status-compiling { background: #4ade80; }\n.velix-status-navigating { background: #60a5fa; }\n.velix-status-error { background: #f87171; }\n</style>\n\n<script>\n // DevTools State Management\n window.__VELIX_DEV_TOOLS__ = {\n status: 'idle',\n setStatus: function(newStatus) {\n this.status = newStatus;\n const widget = document.getElementById('__velix-dev-tools');\n const badge = document.getElementById('__velix-status-badge');\n const statusText = document.getElementById('__velix-status-text');\n \n if (widget) {\n widget.className = 'velix-' + newStatus;\n }\n \n if (badge) {\n badge.className = 'velix-status-badge velix-status-' + newStatus;\n }\n \n if (statusText) {\n const statusLabels = {\n idle: 'Ready',\n rendering: 'Rendering',\n compiling: 'Compiling',\n navigating: 'Navigating',\n error: 'Error'\n };\n statusText.textContent = statusLabels[newStatus] || 'Unknown';\n statusText.style.color = {\n idle: '#22D3EE',\n rendering: '#fb923c',\n compiling: '#4ade80',\n navigating: '#60a5fa',\n error: '#f87171'\n }[newStatus] || '#94a3b8';\n }\n }\n };\n\n // HMR Connection\n const es = new EventSource('/__velix/hmr');\n es.onmessage = (e) => {\n const data = e.data;\n \n if (data === 'reload') {\n window.__VELIX_DEV_TOOLS__.setStatus('idle');\n setTimeout(() => location.reload(), 100);\n }\n \n if (data === 'building') {\n window.__VELIX_DEV_TOOLS__.setStatus('compiling');\n }\n \n if (data === 'built') {\n window.__VELIX_DEV_TOOLS__.setStatus('idle');\n }\n \n if (data.startsWith('rendering:')) {\n window.__VELIX_DEV_TOOLS__.setStatus('rendering');\n setTimeout(() => window.__VELIX_DEV_TOOLS__.setStatus('idle'), 1000);\n }\n \n if (data.startsWith('error:')) {\n window.__VELIX_DEV_TOOLS__.setStatus('error');\n }\n };\n\n es.onerror = () => {\n window.__VELIX_DEV_TOOLS__.setStatus('error');\n };\n</script>\n\n<div id=\"__velix-dev-tools\" class=\"velix-idle\" style=\"position:fixed;bottom:16px;left:16px;z-index:9999;border-radius:50%;padding:4px;box-shadow:0 4px 12px rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center;width:40px;height:40px;cursor:pointer;transition:all 0.3s ease;\" onmouseover=\"this.style.transform='scale(1.1)'\" onmouseout=\"this.style.transform='scale(1)'\" onclick=\"document.getElementById('__velix-dev-panel').style.display='block'\" title=\"Velix DevTools\">\n <img src=\"/__velix/logo.webp\" alt=\"Velix DevTools\" style=\"width:22px;height:22px;\" />\n <div id=\"__velix-status-badge\" class=\"velix-status-badge velix-status-idle\"></div>\n</div>\n\n<div id=\"__velix-dev-panel\" style=\"display:none;position:fixed;bottom:70px;left:16px;width:320px;background:#0f172a;color:white;border-radius:16px;padding:20px;font-family:ui-sans-serif,system-ui,-apple-system,sans-serif;box-shadow:0 20px 50px rgba(0,0,0,0.4);z-index:10000;border:1px solid #1e293b;\">\n <div style=\"display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #334155;padding-bottom:16px;margin-bottom:16px;\">\n <h3 style=\"margin:0;font-size:16px;font-weight:700;display:flex;align-items:center;gap:10px;\">\n <img src=\"/__velix/logo.webp\" style=\"width:18px;height:18px;\" /> \n Velix DevTools\n </h3>\n <button onclick=\"document.getElementById('__velix-dev-panel').style.display='none'\" style=\"background:transparent;border:none;color:#94a3b8;cursor:pointer;font-size:22px;line-height:1;padding:0;margin:0;transition:color 0.2s;\" onmouseover=\"this.style.color='white'\" onmouseout=\"this.style.color='#94a3b8'\">×</button>\n </div>\n \n <div style=\"margin-bottom:16px;padding:12px;background:#1e293b;border-radius:8px;border:1px solid #334155;\">\n <div style=\"font-size:12px;color:#94a3b8;margin-bottom:4px;text-transform:uppercase;letter-spacing:0.5px;\">Status</div>\n <div id=\"__velix-status-text\" style=\"font-size:16px;font-weight:600;color:#22D3EE;\">Ready</div>\n </div>\n \n <div style=\"font-size:13px;color:#cbd5e1;line-height:2;\">\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;\">\n <span style=\"color:#94a3b8;\">Framework</span>\n <strong style=\"color:white;font-weight:600;\">v5.0.0</strong>\n </div>\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;\">\n <span style=\"color:#94a3b8;\">Environment</span>\n <strong style=\"color:#10b981;font-weight:600;\">Development</strong>\n </div>\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #1e293b;\">\n <span style=\"color:#94a3b8;\">Router</span>\n <strong style=\"color:white;font-weight:600;\">App Directory</strong>\n </div>\n <div style=\"display:flex;justify-content:space-between;padding:8px 0;\">\n <span style=\"color:#94a3b8;\">Rendering</span>\n <strong style=\"color:#60a5fa;font-weight:600;\">Streaming SSR</strong>\n </div>\n </div>\n \n <div style=\"margin-top:16px;padding-top:16px;border-top:1px solid #334155;\">\n <div style=\"font-size:11px;color:#64748b;text-align:center;\">\n <span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:#22D3EE;margin-right:4px;\"></span> Idle\n <span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:#fb923c;margin:0 4px 0 12px;\"></span> Rendering\n <span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:#4ade80;margin:0 4px 0 12px;\"></span> Compiling\n </div>\n </div>\n</div>`;\n}\n","/**\n * Velix v5 Error Pages\n * Beautiful error pages inspired by Next.js latest design\n */\n\nexport interface ErrorPageOptions {\n statusCode: number;\n title: string;\n message: string;\n stack?: string;\n isDev?: boolean;\n pathname?: string;\n}\n\n/**\n * Generate a styled 404 error page\n */\nexport function generate404Page(pathname: string = '/'): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>404 - Page Not Found | Velix v5</title>\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { \n margin: 0; \n background: linear-gradient(135deg, #0F172A 0%, #1E293B 100%); \n color: white; \n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; \n display: flex; \n align-items: center; \n justify-content: center; \n min-height: 100vh; \n text-align: center;\n overflow: hidden;\n }\n .container { \n max-width: 700px; \n padding: 60px 40px; \n position: relative;\n z-index: 10;\n }\n .bg-pattern {\n position: absolute;\n inset: 0;\n background-image: radial-gradient(circle at 20% 50%, rgba(34, 211, 238, 0.1) 0%, transparent 50%),\n radial-gradient(circle at 80% 80%, rgba(37, 99, 235, 0.1) 0%, transparent 50%);\n z-index: 1;\n }\n h1 { \n font-size: 180px; \n font-weight: 900; \n margin: 0; \n background: linear-gradient(135deg, #22D3EE 0%, #2563EB 100%); \n -webkit-background-clip: text; \n -webkit-text-fill-color: transparent; \n line-height: 1; \n letter-spacing: -0.05em;\n animation: fadeInUp 0.6s ease-out;\n }\n h2 { \n font-size: 36px; \n font-weight: 800; \n margin: 30px 0 15px; \n color: #F8FAFC;\n animation: fadeInUp 0.6s ease-out 0.1s backwards;\n }\n p { \n color: #94A3B8; \n font-size: 18px; \n line-height: 1.7; \n margin-bottom: 40px;\n animation: fadeInUp 0.6s ease-out 0.2s backwards;\n }\n code { \n background: rgba(255,255,255,0.1); \n padding: 4px 10px; \n border-radius: 6px; \n font-family: 'Fira Code', 'Courier New', monospace; \n color: #22D3EE; \n font-size: 16px;\n border: 1px solid rgba(34, 211, 238, 0.2);\n }\n .btn-group {\n display: flex;\n gap: 16px;\n justify-content: center;\n flex-wrap: wrap;\n animation: fadeInUp 0.6s ease-out 0.3s backwards;\n }\n .btn { \n display: inline-block; \n background: linear-gradient(135deg, #2563EB 0%, #1D4ED8 100%); \n color: white; \n text-decoration: none; \n padding: 14px 36px; \n border-radius: 12px; \n font-weight: 600; \n font-size: 16px;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); \n box-shadow: 0 10px 30px rgba(37, 99, 235, 0.3);\n border: none;\n cursor: pointer;\n }\n .btn:hover { \n transform: translateY(-2px); \n box-shadow: 0 15px 40px rgba(37, 99, 235, 0.4);\n }\n .btn-outline { \n background: transparent; \n color: #22D3EE; \n border: 2px solid #22D3EE; \n box-shadow: none;\n }\n .btn-outline:hover { \n background: rgba(34, 211, 238, 0.1); \n box-shadow: 0 10px 30px rgba(34, 211, 238, 0.2);\n }\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(30px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n </style>\n</head>\n<body>\n <div class=\"bg-pattern\"></div>\n <div class=\"container\">\n <h1>404</h1>\n <h2>Page Not Found</h2>\n <p>The page <code>${pathname}</code> could not be found.<br>It may have been moved or deleted.</p>\n <div class=\"btn-group\">\n <a href=\"/\" class=\"btn\">Return Home</a>\n <a href=\"javascript:history.back()\" class=\"btn btn-outline\">Go Back</a>\n </div>\n </div>\n</body>\n</html>`;\n}\n\n/**\n * Generate a styled 500 error page\n */\nexport function generate500Page(options: ErrorPageOptions): string {\n const { title, message, stack, isDev, pathname } = options;\n\n // Parse stack trace to display as cards like Next.js\n let callStackCards = '';\n let frameCount = 0;\n \n if (isDev && stack) {\n const stackLines = stack.split('\\n').filter(line => line.trim());\n const frames = stackLines.slice(1).filter(line => line.includes('at '));\n frameCount = frames.length;\n \n callStackCards = frames.map((frame, index) => {\n const match = frame.match(/at\\s+(.+?)\\s+\\((.+?)\\)/) || frame.match(/at\\s+(.+)/);\n if (match) {\n const funcName = match[1] || 'anonymous';\n const location = match[2] || match[1];\n return `\n <div class=\"error-card\" data-frame=\"${index}\">\n <div class=\"card-header\">\n <div class=\"card-title\">${funcName.trim()}</div>\n <div class=\"card-number\">${index + 1}</div>\n </div>\n <div class=\"card-location\">${location.trim()}</div>\n </div>\n `;\n }\n return '';\n }).join('');\n }\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Error | Velix v5</title>\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { \n margin: 0; \n background: linear-gradient(135deg, #0F172A 0%, #1E293B 100%);\n color: #F8FAFC; \n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; \n min-height: 100vh;\n overflow-x: hidden;\n }\n .container {\n max-width: 900px;\n margin: 0 auto;\n padding: 40px 20px;\n }\n .error-header {\n background: linear-gradient(135deg, #EF4444 0%, #DC2626 100%);\n color: white;\n padding: 20px 28px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n gap: 14px;\n margin-bottom: 28px;\n font-size: 18px;\n font-weight: 700;\n box-shadow: 0 10px 40px rgba(239, 68, 68, 0.3);\n }\n .error-header svg {\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n }\n .error-badge {\n display: inline-block;\n background: linear-gradient(135deg, #1E40AF 0%, #1E3A8A 100%);\n color: #60A5FA;\n padding: 6px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 700;\n margin-bottom: 18px;\n text-transform: uppercase;\n letter-spacing: 0.8px;\n box-shadow: 0 4px 12px rgba(30, 64, 175, 0.3);\n }\n .route-badge {\n background: linear-gradient(135deg, #0C4A6E 0%, #075985 100%);\n color: #22D3EE;\n padding: 10px 18px;\n border-radius: 10px;\n font-size: 14px;\n margin-bottom: 24px;\n font-family: 'Courier New', monospace;\n box-shadow: 0 4px 12px rgba(12, 74, 110, 0.3);\n border: 1px solid rgba(34, 211, 238, 0.2);\n }\n .error-message {\n background: rgba(239, 68, 68, 0.1);\n border-left: 4px solid #EF4444;\n padding: 18px 20px;\n border-radius: 10px;\n margin-bottom: 32px;\n }\n .error-message-text {\n color: #FCA5A5;\n font-size: 16px;\n font-weight: 600;\n line-height: 1.6;\n font-family: 'Courier New', monospace;\n }\n .stack-section {\n margin-top: 32px;\n }\n .stack-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n }\n .stack-title {\n font-size: 18px;\n font-weight: 700;\n color: #F1F5F9;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n .frame-counter {\n background: linear-gradient(135deg, #1F2937 0%, #111827 100%);\n color: #22D3EE;\n padding: 6px 14px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 700;\n border: 1px solid rgba(34, 211, 238, 0.2);\n }\n .error-card {\n background: linear-gradient(135deg, #1E293B 0%, #0F172A 100%);\n border: 1px solid rgba(34, 211, 238, 0.2);\n border-radius: 14px;\n padding: 20px;\n margin-bottom: 12px;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n display: none;\n }\n .error-card.active {\n display: block;\n animation: slideIn 0.3s ease-out;\n }\n .error-card:hover {\n border-color: rgba(34, 211, 238, 0.5);\n box-shadow: 0 8px 24px rgba(34, 211, 238, 0.2);\n transform: translateY(-2px);\n }\n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .card-title {\n color: #22D3EE;\n font-size: 15px;\n font-weight: 700;\n font-family: 'Courier New', monospace;\n }\n .card-number {\n background: rgba(34, 211, 238, 0.2);\n color: #22D3EE;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 700;\n }\n .card-location {\n color: #94A3B8;\n font-size: 13px;\n font-family: 'Courier New', monospace;\n word-break: break-all;\n line-height: 1.6;\n }\n .pagination {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 12px;\n margin-top: 24px;\n }\n .pagination-btn {\n background: linear-gradient(135deg, #1E293B 0%, #0F172A 100%);\n border: 1px solid rgba(34, 211, 238, 0.3);\n color: #22D3EE;\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n }\n .pagination-btn:hover:not(:disabled) {\n background: linear-gradient(135deg, #22D3EE 0%, #06B6D4 100%);\n color: #0F172A;\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(34, 211, 238, 0.4);\n }\n .pagination-btn:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n }\n .pagination-info {\n color: #94A3B8;\n font-size: 14px;\n font-weight: 600;\n }\n .footer {\n margin-top: 48px;\n padding-top: 28px;\n border-top: 1px solid rgba(34, 211, 238, 0.2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 20px;\n }\n .brand {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 700;\n color: #22D3EE;\n font-size: 15px;\n }\n .brand img {\n width: 20px;\n height: 20px;\n }\n .footer-links {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n }\n .footer-links a {\n color: #60A5FA;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.2s;\n font-size: 14px;\n }\n .footer-links a:hover {\n color: #22D3EE;\n transform: translateY(-1px);\n }\n .no-stack {\n background: rgba(239, 68, 68, 0.1);\n border: 1px solid rgba(239, 68, 68, 0.3);\n border-radius: 12px;\n padding: 32px;\n color: #FCA5A5;\n text-align: center;\n font-size: 15px;\n }\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"error-header\">\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"></path>\n </svg>\n <span>Unhandled Runtime Error</span>\n </div>\n \n <div class=\"error-badge\">SERVER ERROR 500</div>\n ${pathname ? `<div class=\"route-badge\">Route: ${pathname}</div>` : ''}\n \n <div class=\"error-message\">\n <div class=\"error-message-text\">${message}</div>\n </div>\n \n ${isDev && callStackCards ? `\n <div class=\"stack-section\">\n <div class=\"stack-header\">\n <div class=\"stack-title\">\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"></path>\n </svg>\n Call Stack\n </div>\n <div class=\"frame-counter\">${frameCount}</div>\n </div>\n <div id=\"error-cards\">\n ${callStackCards}\n </div>\n ${frameCount > 1 ? `\n <div class=\"pagination\">\n <button class=\"pagination-btn\" id=\"prev-btn\" onclick=\"changePage(-1)\">\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style=\"display:inline;vertical-align:middle;margin-right:4px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Previous\n </button>\n <div class=\"pagination-info\">\n <span id=\"current-page\">1</span> / <span id=\"total-pages\">${frameCount}</span>\n </div>\n <button class=\"pagination-btn\" id=\"next-btn\" onclick=\"changePage(1)\">\n Next\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style=\"display:inline;vertical-align:middle;margin-left:4px;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n </button>\n </div>\n ` : ''}\n </div>\n ` : '<div class=\"no-stack\">An error occurred while processing your request. Please check the server logs for more details.</div>'}\n \n <div class=\"footer\">\n <div class=\"brand\">\n <img src=\"/__velix/logo.webp\" alt=\"Velix\" onerror=\"this.style.display='none'\"/>\n <span>Velix v5.0.0</span>\n </div>\n <div class=\"footer-links\">\n <a href=\"/\">Home</a>\n <a href=\"javascript:location.reload()\">Reload</a>\n <a href=\"https://github.com/velix/velix/tree/main/docs\" target=\"_blank\">Documentation</a>\n ${isDev ? '<span style=\"color:#94A3B8;\">Development Mode</span>' : ''}\n </div>\n </div>\n </div>\n \n ${isDev && frameCount > 0 ? `\n <script>\n let currentPage = 1;\n const totalPages = ${frameCount};\n const cards = document.querySelectorAll('.error-card');\n const prevBtn = document.getElementById('prev-btn');\n const nextBtn = document.getElementById('next-btn');\n const currentPageSpan = document.getElementById('current-page');\n \n function showPage(page) {\n cards.forEach((card, index) => {\n card.classList.remove('active');\n if (index === page - 1) {\n card.classList.add('active');\n }\n });\n \n currentPage = page;\n currentPageSpan.textContent = page;\n \n if (prevBtn) prevBtn.disabled = page === 1;\n if (nextBtn) nextBtn.disabled = page === totalPages;\n }\n \n function changePage(direction) {\n const newPage = currentPage + direction;\n if (newPage >= 1 && newPage <= totalPages) {\n showPage(newPage);\n }\n }\n \n // Show first page on load\n showPage(1);\n \n // Keyboard navigation\n document.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowLeft') changePage(-1);\n if (e.key === 'ArrowRight') changePage(1);\n });\n </script>\n ` : ''}\n</body>\n</html>`;\n}\n\n/**\n * Generate error page based on status code\n */\nexport function generateErrorPage(statusCode: number, options: Partial<ErrorPageOptions> = {}): string {\n if (statusCode === 404) {\n return generate404Page(options.pathname || '/');\n }\n\n return generate500Page({\n statusCode,\n title: options.title || 'Server Error',\n message: options.message || 'An unexpected error occurred',\n stack: options.stack,\n isDev: options.isDev,\n pathname: options.pathname,\n });\n}\n","/**\r\n * Velix v5 Server\r\n *\r\n * Modular HTTP server with SSR, static file serving, API routes,\r\n * server actions, middleware, and plugin hooks.\r\n */\r\n\r\nimport http from 'http';\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport { fileURLToPath, pathToFileURL } from 'url';\r\nimport React from 'react';\r\nimport { renderToString } from 'react-dom/server';\r\nimport { loadConfig, resolvePaths, type VelixConfig } from '../config.js';\r\nimport { buildRouteTree, matchRoute } from '../router/index.js';\r\nimport { runMiddleware, loadMiddleware, type MiddlewareFunction } from '../middleware/index.js';\r\nimport { pluginManager, loadPlugins, PluginHooks, builtinPlugins } from '../plugins/index.js';\r\nimport tailwindPlugin from '../plugins/tailwind.js';\r\nimport { generateMetadataTags, generateSitemap, generateRobotsTxt } from '../metadata/index.js';\r\nimport { getRegisteredIslands, generateAdvancedHydrationScript } from '../islands/index.js';\r\nimport { executeAction, deserializeArgs } from '../actions/index.js';\r\nimport logger from '../logger.js';\r\nimport esbuild from 'esbuild';\r\nimport { generateDevToolsHtml } from './devtools.js';\r\nimport { generate404Page, generate500Page } from './error-pages.js';\r\n\r\n// ============================================================================\r\n// MIME Types\r\n// ============================================================================\r\n\r\nconst MIME_TYPES: Record<string, string> = {\r\n '.html': 'text/html; charset=utf-8',\r\n '.css': 'text/css; charset=utf-8',\r\n '.js': 'application/javascript; charset=utf-8',\r\n '.mjs': 'application/javascript; charset=utf-8',\r\n '.json': 'application/json',\r\n '.png': 'image/png',\r\n '.jpg': 'image/jpeg',\r\n '.jpeg': 'image/jpeg',\r\n '.gif': 'image/gif',\r\n '.svg': 'image/svg+xml',\r\n '.ico': 'image/x-icon',\r\n '.webp': 'image/webp',\r\n '.woff': 'font/woff',\r\n '.woff2': 'font/woff2',\r\n '.ttf': 'font/ttf',\r\n '.otf': 'font/otf',\r\n '.txt': 'text/plain; charset=utf-8',\r\n '.xml': 'application/xml',\r\n '.mp4': 'video/mp4',\r\n '.webm': 'video/webm',\r\n '.mp3': 'audio/mpeg',\r\n '.pdf': 'application/pdf',\r\n '.map': 'application/json',\r\n};\r\n\r\n// ============================================================================\r\n// Server\r\n// ============================================================================\r\n\r\nexport interface VelixServer {\r\n server: http.Server;\r\n config: VelixConfig;\r\n close: () => void;\r\n}\r\n\r\nexport async function createServer(options: {\r\n projectRoot?: string;\r\n mode?: 'development' | 'production';\r\n} = {}): Promise<VelixServer> {\r\n const projectRoot = options.projectRoot || process.cwd();\r\n const mode = options.mode || (process.env.NODE_ENV as any) || 'development';\r\n const isDev = mode === 'development';\r\n\r\n // Load configuration\r\n const rawConfig = await loadConfig(projectRoot);\r\n const config = resolvePaths(rawConfig, projectRoot);\r\n\r\n // Load plugins\r\n await loadPlugins(projectRoot, config);\r\n\r\n // Plugin hook: config loaded (allow plugins to modify config)\r\n await pluginManager.runHook(PluginHooks.CONFIG, config);\r\n\r\n // Load middleware\r\n const middlewareFns = await loadMiddleware(projectRoot);\r\n\r\n // Build route tree\r\n const appDir = (config as any).resolvedAppDir || path.join(projectRoot, 'app');\r\n const routes = buildRouteTree(appDir);\r\n\r\n // Plugin hook: routes loaded\r\n await pluginManager.runHook(PluginHooks.ROUTES_LOADED, routes);\r\n\r\n const startTime = Date.now();\r\n\r\n // Plugin hook: server starting\r\n await pluginManager.runHook(PluginHooks.SERVER_START, { config, isDev, projectRoot }, isDev);\r\n\r\n const server = http.createServer(async (req, res) => {\r\n const requestStart = Date.now();\r\n const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\r\n const pathname = url.pathname;\r\n\r\n try {\r\n // Run middleware\r\n if (middlewareFns.length > 0) {\r\n const middlewareResult = await runMiddleware(req, res, middlewareFns);\r\n if (!middlewareResult.continue) return;\r\n }\r\n\r\n // Plugin hook: request\r\n await pluginManager.runHook(PluginHooks.REQUEST, req, res);\r\n\r\n // ── Auto-generated SEO routes ──\r\n if (pathname === '/sitemap.xml' && config.seo.sitemap) {\r\n const baseUrl = config.app.url || `http://${config.server.host}:${config.server.port}`;\r\n const sitemap = generateSitemap(routes.appRoutes, baseUrl);\r\n res.writeHead(200, { 'Content-Type': 'application/xml' });\r\n res.end(sitemap);\r\n return;\r\n }\r\n\r\n if (pathname === '/robots.txt' && config.seo.robots) {\r\n const baseUrl = config.app.url || `http://${config.server.host}:${config.server.port}`;\r\n const robotsTxt = generateRobotsTxt(baseUrl);\r\n res.writeHead(200, { 'Content-Type': 'text/plain' });\r\n res.end(robotsTxt);\r\n return;\r\n }\r\n\r\n // ── Server actions ──\r\n if (pathname === '/__velix/action' && req.method === 'POST') {\r\n await handleServerAction(req, res);\r\n return;\r\n }\r\n\r\n // ── Velix internal assets ──\r\n if (pathname === '/__velix/image') {\r\n const { handleImageOptimization } = await import('./image-optimizer.js');\r\n await handleImageOptimization(req, res, projectRoot);\r\n return;\r\n }\r\n\r\n if (pathname.startsWith('/__velix/')) {\r\n await serveVelixInternal(pathname, req, res, projectRoot);\r\n return;\r\n }\r\n\r\n // ── Static files ──\r\n const publicDir = (config as any).resolvedPublicDir || path.join(projectRoot, 'public');\r\n if (await serveStaticFile(pathname, publicDir, res, isDev)) {\r\n if (isDev) logger.request(req.method || 'GET', pathname, 200, Date.now() - requestStart, { type: 'static' });\r\n return;\r\n }\r\n\r\n // ── API routes ──\r\n const apiMatch = matchRoute(pathname, routes.api);\r\n if (apiMatch) {\r\n await handleApiRoute(apiMatch, req, res, url);\r\n if (isDev) logger.request(req.method || 'GET', pathname, res.statusCode, Date.now() - requestStart, { type: 'api' });\r\n return;\r\n }\r\n\r\n // ── Page routes (SSR) ──\r\n const pageMatch = matchRoute(pathname, routes.appRoutes);\r\n if (pageMatch) {\r\n await handlePageRoute(pageMatch, routes, req, res, url, config, isDev, projectRoot);\r\n if (isDev) logger.request(req.method || 'GET', pathname, res.statusCode, Date.now() - requestStart, { type: 'ssr' });\r\n return;\r\n }\r\n\r\n // ── 404 ──\r\n res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(generate404Page(pathname));\r\n if (isDev) logger.request(req.method || 'GET', pathname, 404, Date.now() - requestStart);\r\n\r\n } catch (error: any) {\r\n console.error('Server error:', error);\r\n if (!res.headersSent) {\r\n res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(generate500Page({\r\n statusCode: 500,\r\n title: 'Server Error',\r\n message: error.message || 'An unexpected error occurred',\r\n stack: isDev ? error.stack : undefined,\r\n isDev,\r\n pathname\r\n }));\r\n }\r\n }\r\n });\r\n\r\n const __hmrClients = new Set<http.ServerResponse>();\r\n (server as any).__hmrClients = __hmrClients;\r\n (server as any).broadcastHMR = (msg: string) => {\r\n __hmrClients.forEach(c => c.write(`data: ${msg}\\n\\n`));\r\n };\r\n\r\n // Start listening\r\n const port = config.server.port;\r\n const host = config.server.host;\r\n\r\n server.listen(port, host, () => {\r\n logger.serverStart({ port, host, mode, pagesDir: appDir }, startTime);\r\n\r\n // Log routes in dev mode\r\n if (isDev) {\r\n routes.appRoutes.forEach(r => {\r\n const type = r.path.includes(':') || r.path.includes('*') ? 'dynamic' : 'static';\r\n logger.route(r.path, type);\r\n });\r\n routes.api.forEach(r => logger.route(r.path, 'api'));\r\n logger.blank();\r\n }\r\n });\r\n\r\n server.on('error', (err: any) => {\r\n if (err.code === 'EADDRINUSE') {\r\n logger.portInUse(port);\r\n process.exit(1);\r\n }\r\n throw err;\r\n });\r\n\r\n return {\r\n server,\r\n config: rawConfig,\r\n close: () => server.close()\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Handlers\r\n// ============================================================================\r\n\r\nasync function serveStaticFile(pathname: string, publicDir: string, res: http.ServerResponse, isDev: boolean = false): Promise<boolean> {\r\n const filePath = path.join(publicDir, pathname);\r\n\r\n // Prevent directory traversal\r\n if (!filePath.startsWith(publicDir)) return false;\r\n\r\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) return false;\r\n\r\n const ext = path.extname(filePath);\r\n const contentType = MIME_TYPES[ext] || 'application/octet-stream';\r\n const content = fs.readFileSync(filePath);\r\n\r\n res.writeHead(200, {\r\n 'Content-Type': contentType,\r\n 'Content-Length': content.length,\r\n 'Cache-Control': isDev ? 'no-store, no-cache, must-revalidate' : 'public, max-age=31536000, immutable',\r\n });\r\n res.end(content);\r\n return true;\r\n}\r\n\r\nasync function handleApiRoute(route: any, req: http.IncomingMessage, res: http.ServerResponse, url: URL) {\r\n try {\r\n const fileUrl = pathToFileURL(route.filePath).href;\r\n const mod = await import(`${fileUrl}?t=${Date.now()}`);\r\n const method = req.method?.toUpperCase() || 'GET';\r\n const handler = mod[method] || mod.default;\r\n\r\n if (!handler) {\r\n res.writeHead(405, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ error: 'Method not allowed' }));\r\n return;\r\n }\r\n\r\n // Parse body for POST/PUT/PATCH\r\n let body: any;\r\n if (['POST', 'PUT', 'PATCH'].includes(method)) {\r\n body = await parseRequestBody(req);\r\n }\r\n\r\n const request = {\r\n method, url: req.url, headers: req.headers,\r\n params: route.params || {},\r\n query: Object.fromEntries(url.searchParams),\r\n body, json: () => body,\r\n };\r\n\r\n const response = await handler(request);\r\n\r\n if (response instanceof Response) {\r\n const headers: Record<string, string> = {};\r\n response.headers.forEach((v: string, k: string) => { headers[k] = v; });\r\n res.writeHead(response.status, headers);\r\n const text = await response.text();\r\n res.end(text);\r\n } else if (typeof response === 'object') {\r\n res.writeHead(200, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify(response));\r\n } else {\r\n res.writeHead(200, { 'Content-Type': 'text/plain' });\r\n res.end(String(response));\r\n }\r\n } catch (err: any) {\r\n res.writeHead(500, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ error: err.message }));\r\n }\r\n}\r\n\r\nasync function handleServerAction(req: http.IncomingMessage, res: http.ServerResponse) {\r\n try {\r\n const body = await parseRequestBody(req) as any;\r\n if (!body?.actionId || typeof body.actionId !== 'string') {\r\n res.writeHead(400, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ error: 'Missing actionId' }));\r\n return;\r\n }\r\n\r\n const args = body.args ? deserializeArgs(body.args) : [];\r\n const result = await executeAction(body.actionId, args);\r\n\r\n res.writeHead(200, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify(result));\r\n } catch (err: any) {\r\n res.writeHead(500, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ success: false, error: err.message }));\r\n }\r\n}\r\n\r\nasync function handlePageRoute(\r\n route: any, routes: any,\r\n req: http.IncomingMessage, res: http.ServerResponse,\r\n url: URL, config: VelixConfig, isDev: boolean, projectRoot: string\r\n) {\r\n try {\r\n const fileUrl = pathToFileURL(route.filePath).href;\r\n const mod = await import(`${fileUrl}?t=${Date.now()}`);\r\n const PageComponent = mod.default;\r\n let metadata = mod.metadata || mod.generateMetadata?.(route.params) || {};\r\n\r\n // Attempt to merge layout metadata and get LayoutComponent\r\n let LayoutComponent = ({ children }: any) => React.createElement(React.Fragment, null, children);\r\n let layoutParams = route.params;\r\n try {\r\n const layoutPath = path.join(path.dirname(route.filePath), 'layout.tsx');\r\n if (fs.existsSync(layoutPath)) {\r\n const layoutMod = await import(`${pathToFileURL(layoutPath).href}?t=${Date.now()}`);\r\n if (layoutMod.metadata) {\r\n metadata = { ...layoutMod.metadata, ...metadata };\r\n }\r\n if (layoutMod.default) {\r\n LayoutComponent = layoutMod.default;\r\n }\r\n }\r\n } catch(e) {}\r\n\r\n // Generate metadata tags\r\n const baseUrl = config.app.url || `http://${config.server.host}:${config.server.port}`;\r\n const metaTags = generateMetadataTags({\r\n ...metadata,\r\n generator: `Velix v5.0.0`,\r\n viewport: metadata.viewport || 'width=device-width, initial-scale=1',\r\n }, baseUrl);\r\n\r\n // Get islands for hydration\r\n const islands = getRegisteredIslands();\r\n const hydrationScript = generateAdvancedHydrationScript(islands);\r\n \r\n // Developer Tools Injection\r\n const devToolsHtml = generateDevToolsHtml(isDev);\r\n\r\n const headInjections = `\r\n <meta charset=\"utf-8\">\r\n ${metaTags}\r\n ${config.favicon ? `<link rel=\"icon\" href=\"${config.favicon}\">` : ''}\r\n ${config.styles.map(s => `<link rel=\"stylesheet\" href=\"${s}\">`).join('\\n ')}\r\n `;\r\n // Extract search params for the component\r\n const searchParams = Object.fromEntries(url.searchParams.entries());\r\n\r\n // Fix for Async Components (Server Components) in React 19\r\n // renderToString does not support async components, so we manually await them\r\n let pageElement: any = React.createElement(PageComponent, { params: route.params, searchParams, query: searchParams });\r\n if (typeof PageComponent === 'function') {\r\n try {\r\n const result = PageComponent({ params: route.params, searchParams, query: searchParams });\r\n if (result instanceof Promise) {\r\n pageElement = await result;\r\n }\r\n } catch (e) {\r\n // Fallback or ignore if it's not a functional component call\r\n }\r\n }\r\n\r\n let layoutElement = React.createElement(LayoutComponent, { params: layoutParams, searchParams }, pageElement);\r\n if (typeof LayoutComponent === 'function') {\r\n try {\r\n const result = LayoutComponent({ params: layoutParams, searchParams, children: pageElement });\r\n if (result instanceof Promise) {\r\n layoutElement = await result;\r\n }\r\n } catch (e) {\r\n // Fallback\r\n }\r\n }\r\n\r\n // Render the React Tree (SSR)\r\n const ssrContent = renderToString(layoutElement);\r\n\r\n // Apply native waterfall hook: after render\r\n let finalHtml = await pluginManager.runWaterfallHook(PluginHooks.AFTER_RENDER, ssrContent, { route, config, isDev });\r\n \r\n // Inject Head & Body (Surgical insertion)\r\n const headInjectionsHtml = `\\n ${headInjections}\\n `;\r\n const bodyInjectionsHtml = `\\n <div id=\"__velix-islands\"></div>\\n ${hydrationScript}${devToolsHtml}\\n `;\r\n\r\n if (finalHtml.includes('<html')) {\r\n // 1. Inject Head\r\n const headEnd = finalHtml.lastIndexOf('</head>');\r\n if (headEnd !== -1) {\r\n finalHtml = finalHtml.slice(0, headEnd) + headInjectionsHtml + finalHtml.slice(headEnd);\r\n } else {\r\n // Find body start to insert head before it\r\n const bodyStart = finalHtml.search(/<body[^>]*>/i);\r\n if (bodyStart !== -1) {\r\n finalHtml = finalHtml.slice(0, bodyStart) + `<head>${headInjectionsHtml}</head>` + finalHtml.slice(bodyStart);\r\n }\r\n }\r\n\r\n // 2. Inject Body scripts\r\n const bodyEnd = finalHtml.lastIndexOf('</body>');\r\n if (bodyEnd !== -1) {\r\n finalHtml = finalHtml.slice(0, bodyEnd) + bodyInjectionsHtml + finalHtml.slice(bodyEnd);\r\n } else {\r\n finalHtml += bodyInjectionsHtml;\r\n }\r\n\r\n // 3. Ensure Doctype\r\n if (!finalHtml.trim().startsWith('<!DOCTYPE')) {\r\n finalHtml = '<!DOCTYPE html>\\n' + finalHtml;\r\n }\r\n } else {\r\n // Fallback for partial content\r\n finalHtml = `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n ${headInjectionsHtml}\r\n</head>\r\n<body>\r\n <div id=\"__velix\">${ssrContent}</div>\r\n ${bodyInjectionsHtml}\r\n</body>\r\n</html>`;\r\n }\r\n\r\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(finalHtml);\r\n\r\n } catch (err: any) {\r\n logger.error(`Render error: ${route.path}`, err);\r\n res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(generate500Page({\r\n statusCode: 500,\r\n title: 'Render Error',\r\n message: err.message || 'Failed to render page',\r\n stack: isDev ? err.stack : undefined,\r\n isDev,\r\n pathname: route.path\r\n }));\r\n }\r\n}\r\n\r\nasync function serveVelixInternal(pathname: string, req: http.IncomingMessage, res: http.ServerResponse, projectRoot: string) {\r\n // HMR endpoint for dev mode\r\n if (pathname === '/__velix/hmr') {\r\n res.writeHead(200, {\r\n 'Content-Type': 'text/event-stream',\r\n 'Cache-Control': 'no-cache',\r\n 'Connection': 'keep-alive',\r\n });\r\n res.write('data: connected\\n\\n');\r\n const interval = setInterval(() => res.write(':heartbeat\\n\\n'), 30000);\r\n // @ts-ignore\r\n if (res.req?.socket?.server?.__hmrClients) res.req.socket.server.__hmrClients.add(res);\r\n req.on('close', () => {\r\n clearInterval(interval);\r\n // @ts-ignore\r\n if (res.req?.socket?.server?.__hmrClients) res.req.socket.server.__hmrClients.delete(res);\r\n });\r\n return;\r\n }\r\n\r\n if (pathname === '/__velix/logo.webp') {\r\n const __filename = fileURLToPath(import.meta.url);\r\n const __dirname = path.dirname(__filename);\r\n const fallbackPath = path.join(path.dirname(pathToFileURL(__dirname).pathname), '..', 'assets', 'logo.webp'); // For local dev\r\n const logoPath = fs.existsSync(fallbackPath) ? fallbackPath : path.join(process.cwd(), 'node_modules', 'velix', 'assets', 'logo.webp');\r\n if (fs.existsSync(logoPath)) {\r\n res.writeHead(200, { 'Content-Type': 'image/webp', 'Cache-Control': 'public, max-age=31536000, immutable' });\r\n res.end(fs.readFileSync(logoPath));\r\n } else {\r\n res.writeHead(404);\r\n res.end();\r\n }\r\n return;\r\n }\r\n\r\n // Dynamic Island Serving\r\n if (pathname.startsWith('/__velix/islands/') && pathname.endsWith('.js')) {\r\n const componentName = pathname.replace('/__velix/islands/', '').replace('.js', '');\r\n try {\r\n // Find the component file\r\n const searchDirs = [\r\n path.join(projectRoot, 'components'),\r\n path.join(projectRoot, 'app'),\r\n path.join(projectRoot, 'islands')\r\n ];\r\n \r\n let componentPath = '';\r\n for (const dir of searchDirs) {\r\n if (!fs.existsSync(dir)) continue;\r\n const files = fs.readdirSync(dir, { recursive: true }) as string[];\r\n const found = files.find(f => f.replace(/\\\\/g, '/').endsWith(`${componentName}.tsx`) || f.replace(/\\\\/g, '/').endsWith(`${componentName}.jsx`));\r\n if (found) {\r\n componentPath = path.join(dir, found);\r\n break;\r\n }\r\n }\r\n\r\n if (!componentPath) {\r\n logger.error(`Island component not found: ${componentName}`);\r\n res.writeHead(404);\r\n res.end('Island component not found');\r\n return;\r\n }\r\n\r\n // Bundle on the fly\r\n const result = await esbuild.build({\r\n entryPoints: [componentPath],\r\n bundle: true,\r\n format: 'esm',\r\n platform: 'browser',\r\n target: ['es2022'],\r\n minify: false,\r\n sourcemap: 'inline',\r\n jsx: 'automatic',\r\n external: ['react', 'react-dom'],\r\n write: false,\r\n });\r\n\r\n res.writeHead(200, { 'Content-Type': 'application/javascript' });\r\n res.end(result.outputFiles[0].text);\r\n return;\r\n } catch (err: any) {\r\n logger.error(`Island bundling failed: ${componentName}`, err);\r\n res.writeHead(500);\r\n res.end(`console.error(\"Island bundling failed: ${err.message}\");`);\r\n return;\r\n }\r\n }\r\n\r\n // React & ReactDOM Client serving\r\n if (pathname === '/__velix/react.js' || pathname === '/__velix/react-dom-client.js') {\r\n const dep = pathname === '/__velix/react.js' ? 'react' : 'react-dom/client';\r\n try {\r\n const result = await esbuild.build({\r\n entryPoints: [dep],\r\n bundle: true,\r\n format: 'esm',\r\n platform: 'browser',\r\n target: ['es2022'],\r\n minify: true,\r\n write: false,\r\n });\r\n res.writeHead(200, { 'Content-Type': 'application/javascript', 'Cache-Control': 'public, max-age=31536000, immutable' });\r\n res.end(result.outputFiles[0].text);\r\n return;\r\n } catch (err: any) {\r\n res.writeHead(500);\r\n res.end();\r\n return;\r\n }\r\n }\r\n\r\n res.writeHead(404);\r\n res.end('Not found');\r\n}\r\n\r\n// ============================================================================\r\n// Utilities\r\n// ============================================================================\r\n\r\nfunction parseRequestBody(req: http.IncomingMessage): Promise<unknown> {\r\n return new Promise((resolve, reject) => {\r\n let body = '';\r\n req.on('data', chunk => { body += chunk; });\r\n req.on('end', () => {\r\n try {\r\n const ct = req.headers['content-type'] || '';\r\n if (ct.includes('application/json')) resolve(JSON.parse(body));\r\n else resolve(body);\r\n } catch { resolve(body); }\r\n });\r\n req.on('error', reject);\r\n });\r\n}\r\n\r\nexport default { createServer, tailwindPlugin };\r\n"]}
|