@flight-framework/cli 0.3.4 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +544 -544
  2. package/dist/bin.js +830 -148
  3. package/dist/bin.js.map +1 -1
  4. package/dist/index.js +830 -148
  5. package/dist/index.js.map +1 -1
  6. package/package.json +53 -53
  7. package/templates/angular/index.html +13 -13
  8. package/templates/angular/package.json.template +25 -25
  9. package/templates/angular/src/app.component.ts +13 -13
  10. package/templates/angular/src/main.server.ts +11 -11
  11. package/templates/angular/src/main.ts +4 -4
  12. package/templates/angular/tsconfig.json +16 -16
  13. package/templates/base/README.md.template +26 -26
  14. package/templates/base/_gitignore +25 -25
  15. package/templates/base/flight.config.ts.template +15 -15
  16. package/templates/base/styles/global.css +58 -58
  17. package/templates/htmx/index.html +18 -18
  18. package/templates/htmx/package.json.template +18 -18
  19. package/templates/htmx/vite.config.ts +6 -6
  20. package/templates/lit/index.html +14 -14
  21. package/templates/lit/package.json.template +21 -21
  22. package/templates/lit/src/app-root.ts +18 -18
  23. package/templates/lit/src/entry-client.ts +5 -5
  24. package/templates/lit/src/entry-server.ts +9 -9
  25. package/templates/lit/tsconfig.json +18 -18
  26. package/templates/lit/vite.config.ts +6 -6
  27. package/templates/preact/index.html +14 -14
  28. package/templates/preact/package.json.template +22 -22
  29. package/templates/preact/src/App.tsx +8 -8
  30. package/templates/preact/src/entry-client.tsx +11 -11
  31. package/templates/preact/src/entry-server.tsx +6 -6
  32. package/templates/preact/tsconfig.json +18 -18
  33. package/templates/preact/vite.config.ts +8 -8
  34. package/templates/qwik/index.html +14 -14
  35. package/templates/qwik/package.json.template +20 -20
  36. package/templates/qwik/src/App.tsx +10 -10
  37. package/templates/qwik/src/entry-client.tsx +4 -4
  38. package/templates/qwik/src/entry-server.tsx +9 -9
  39. package/templates/qwik/tsconfig.json +18 -18
  40. package/templates/qwik/vite.config.ts +8 -8
  41. package/templates/react/index.html +13 -13
  42. package/templates/react/package.json.template +24 -24
  43. package/templates/react/src/App.tsx +13 -13
  44. package/templates/react/src/context/RouterContext.tsx +63 -63
  45. package/templates/react/src/entry-client.tsx +19 -19
  46. package/templates/react/src/entry-server.tsx +17 -17
  47. package/templates/react/tsconfig.json +19 -19
  48. package/templates/react/vite.config.ts +12 -12
  49. package/templates/solid/index.html +14 -14
  50. package/templates/solid/package.json.template +21 -21
  51. package/templates/solid/src/App.tsx +8 -8
  52. package/templates/solid/src/entry-client.tsx +11 -11
  53. package/templates/solid/src/entry-server.tsx +6 -6
  54. package/templates/solid/tsconfig.json +18 -18
  55. package/templates/solid/vite.config.ts +8 -8
  56. package/templates/svelte/index.html +14 -14
  57. package/templates/svelte/package.json.template +21 -21
  58. package/templates/svelte/src/App.svelte +4 -4
  59. package/templates/svelte/src/entry-client.ts +7 -7
  60. package/templates/svelte/src/entry-server.ts +7 -7
  61. package/templates/svelte/tsconfig.json +17 -17
  62. package/templates/svelte/vite.config.ts +8 -8
  63. package/templates/use-cases/api/README.md +41 -41
  64. package/templates/use-cases/api/package.json.template +14 -14
  65. package/templates/use-cases/api/src/routes/api/health.get.ts.template +3 -3
  66. package/templates/use-cases/blog/README.md +47 -47
  67. package/templates/use-cases/blog/flight.config.ts.template +11 -11
  68. package/templates/use-cases/blog/package.json.template +15 -15
  69. package/templates/use-cases/blog/src/routes/blog/[slug].page.tsx.template +23 -23
  70. package/templates/use-cases/blog/src/routes/index.page.tsx.template +9 -9
  71. package/templates/use-cases/docs/README.md +49 -49
  72. package/templates/use-cases/docs/package.json.template +15 -15
  73. package/templates/use-cases/docs/src/content/index.md.template +16 -16
  74. package/templates/use-cases/ecommerce/README.md +32 -32
  75. package/templates/use-cases/ecommerce/package.json.template +16 -16
  76. package/templates/use-cases/ecommerce/src/routes/index.page.tsx.template +9 -9
  77. package/templates/use-cases/saas/README.md +34 -34
  78. package/templates/use-cases/saas/package.json.template +15 -15
  79. package/templates/use-cases/saas/src/routes/index.page.tsx.template +9 -9
  80. package/templates/vanilla/index.html +14 -14
  81. package/templates/vanilla/package.json.template +19 -19
  82. package/templates/vanilla/src/main.ts +10 -10
  83. package/templates/vanilla/tsconfig.json +16 -16
  84. package/templates/vanilla/vite.config.ts +6 -6
  85. package/templates/vue/index.html +14 -14
  86. package/templates/vue/package.json.template +21 -21
  87. package/templates/vue/src/App.vue +6 -6
  88. package/templates/vue/src/entry-client.ts +12 -12
  89. package/templates/vue/src/entry-server.ts +8 -8
  90. package/templates/vue/tsconfig.json +17 -17
  91. package/templates/vue/vite.config.ts +8 -8
  92. package/LICENSE +0 -21
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/version.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/generators/typegen.ts","../src/commands/build.ts","../src/commands/preview.ts","../src/commands/routes-generate.ts","../src/generators/routes.ts","../src/commands/types-generate.ts","../src/commands/add.ts","../src/commands/adapter-create.ts"],"sourcesContent":["import { cac } from 'cac';\nimport pc from 'picocolors';\nimport { VERSION } from './version.js';\nimport { createCommand } from './commands/create.js';\nimport { devCommand } from './commands/dev.js';\nimport { buildCommand } from './commands/build.js';\nimport { previewCommand } from './commands/preview.js';\nimport { routesGenerateCommand } from './commands/routes-generate.js';\nimport { typesGenerateCommand } from './commands/types-generate.js';\nimport { addCommand } from './commands/add.js';\nimport { adapterCreateCommand } from './commands/adapter-create.js';\n\nconst cli = cac('flight');\n\n// Logo\nconst LOGO = `\n${pc.cyan(' ███████╗██╗ ██╗ ██████╗ ██╗ ██╗████████╗')}\n${pc.cyan(' ██╔════╝██║ ██║██╔════╝ ██║ ██║╚══██╔══╝')}\n${pc.cyan(' █████╗ ██║ ██║██║ ███╗███████║ ██║ ')}\n${pc.cyan(' ██╔══╝ ██║ ██║██║ ██║██╔══██║ ██║ ')}\n${pc.cyan(' ██║ ███████╗██║╚██████╔╝██║ ██║ ██║ ')}\n${pc.cyan(' ╚═╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ')}\n \n ${pc.dim('The Agnostic Full-Stack Framework')}\n ${pc.dim('Maximum Flexibility. Zero Lock-in.')}\n`;\n\nexport function printLogo(): void {\n console.log(LOGO);\n}\n\n// Version\ncli.version(VERSION);\ncli.help();\n\n// Commands\ncli\n .command('create [name]', 'Create a new Flight project')\n .option('-t, --template <template>', 'Project template to use', { default: 'basic' })\n .option('--ui <framework>', 'UI framework (react, vue, svelte, solid, vanilla)')\n .option('--use-case <useCase>', 'Use-case template (blog, ecommerce, saas, api, docs)')\n .option('--ts', 'Use TypeScript', { default: true })\n .option('--git', 'Initialize git repository', { default: true })\n .option('--install', 'Install dependencies', { default: true })\n .option('--raw', 'Create raw project (100% Web Standards, zero dependencies)')\n .option('--empty', 'Create empty project (just package.json)')\n .option('--minimal', 'Create minimal project (single server file with Flight)')\n .action(createCommand);\n\ncli\n .command('add [package]', 'Add a Flight package to your project')\n .action(addCommand);\n\ncli\n .command('dev', 'Start development server')\n .option('-p, --port <port>', 'Port to listen on')\n .option('-h, --host <host>', 'Host to bind to')\n .option('--open', 'Open browser on start')\n .option('--https', 'Enable HTTPS')\n .option('--ssr', 'Enable Server-Side Rendering')\n .action(devCommand);\n\ncli\n .command('build', 'Build for production')\n .option('--outDir <dir>', 'Output directory')\n .option('--sourcemap', 'Generate source maps')\n .option('--minify', 'Minify output', { default: true })\n .action(buildCommand);\n\ncli\n .command('preview', 'Preview production build')\n .option('-p, --port <port>', 'Port to listen on')\n .option('-h, --host <host>', 'Host to bind to')\n .option('--open', 'Open browser on start')\n .action(previewCommand);\n\ncli\n .command('routes:generate', 'Generate route manifest from routes directory')\n .option('--routesDir <dir>', 'Routes directory', { default: 'src/routes' })\n .option('--outputDir <dir>', 'Output directory', { default: 'src/.flight' })\n .action(routesGenerateCommand);\n\ncli\n .command('types:generate', 'Generate TypeScript types for routes and environment')\n .option('--routesDir <dir>', 'Routes directory', { default: 'src/routes' })\n .option('--outputDir <dir>', 'Output directory', { default: 'src/.flight' })\n .option('--routes', 'Generate route types', { default: true })\n .option('--env', 'Generate environment variable types')\n .option('--watch', 'Watch for changes and regenerate')\n .action(typesGenerateCommand);\n\ncli\n .command('adapter:create <name>', 'Create a new adapter package')\n .option('-t, --type <type>', 'Platform type (node, edge, container, serverless)', { default: 'node' })\n .option('--validation', 'Include Zod validation example')\n .option('--outputDir <dir>', 'Output directory')\n .action(adapterCreateCommand);\n\n// Parse and run\nexport function run(): void {\n try {\n cli.parse(process.argv, { run: false });\n\n // Show logo for help\n if (cli.options.help || process.argv.length <= 2) {\n printLogo();\n }\n\n cli.runMatchedCommand();\n } catch (error) {\n console.error(pc.red('Error:'), error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nexport { VERSION };\n","export const VERSION = '0.0.1';\n","/**\n * Flight CLI - Create Command\n * \n * Scaffold a new Flight project using external templates.\n * Follows 2026 best practices: external templates, minimal CLI logic.\n */\n\nimport { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, copyFileSync, statSync, unlinkSync } from 'node:fs';\nimport { join, resolve, dirname } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\nimport pc from 'picocolors';\nimport prompts from 'prompts';\nimport { printLogo } from '../index.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst TEMPLATES_DIR = resolve(__dirname, '../../templates');\n\ninterface CreateOptions {\n template: string;\n ui?: string;\n bundler?: string;\n useCase?: string;\n ts: boolean;\n git: boolean;\n install: boolean;\n /** Create empty project (just package.json) */\n empty: boolean;\n /** Create minimal project (single server file with Flight) */\n minimal: boolean;\n /** Create raw project (100% Web Standards, zero Flight dependencies) */\n raw: boolean;\n}\n\nconst UI_FRAMEWORKS = [\n { title: 'React', value: 'react', description: 'The library for web and native user interfaces' },\n { title: 'Vue', value: 'vue', description: 'The progressive JavaScript framework' },\n { title: 'Svelte', value: 'svelte', description: 'Cybernetically enhanced web apps' },\n { title: 'Solid', value: 'solid', description: 'Simple and performant reactivity' },\n { title: 'Preact', value: 'preact', description: 'Fast 3kB alternative to React' },\n { title: 'Qwik', value: 'qwik', description: 'Resumable framework with O(1) loading' },\n { title: 'Lit', value: 'lit', description: 'Fast, lightweight Web Components' },\n { title: 'Htmx', value: 'htmx', description: 'HTML over the wire, no JavaScript' },\n { title: 'Vanilla', value: 'vanilla', description: 'No framework, just TypeScript' },\n];\n\nconst BUNDLERS = [\n { title: 'Vite', value: 'vite', description: 'Next Gen Frontend Tooling (recommended)' },\n { title: 'esbuild', value: 'esbuild', description: 'Ultra-fast builds for performance-focused projects' },\n { title: 'Rolldown', value: 'rolldown', description: 'Rust-based Rollup replacement (experimental)' },\n];\n\nconst USE_CASES = [\n { title: 'Web Application', value: '', description: 'Choose UI framework manually' },\n { title: 'Blog', value: 'blog', description: 'Blog with SEO and markdown support' },\n { title: 'E-commerce', value: 'ecommerce', description: 'Store with products and cart' },\n { title: 'SaaS', value: 'saas', description: 'SaaS app with auth and dashboard' },\n { title: 'API Only', value: 'api', description: 'REST API without UI' },\n { title: 'Documentation', value: 'docs', description: 'Documentation site' },\n];\n\nexport async function createCommand(\n name: string | undefined,\n options: CreateOptions\n): Promise<void> {\n printLogo();\n console.log(pc.cyan('\\n[*] Creating a new Flight project...\\n'));\n\n // Interactive prompts\n let projectName = name;\n let uiFramework = options.ui;\n\n if (!projectName) {\n const response = await prompts({\n type: 'text',\n name: 'name',\n message: 'Project name:',\n initial: 'my-flight-app',\n validate: (value: string) => {\n if (!value) return 'Project name is required';\n if (!/^[a-z0-9-_]+$/i.test(value)) return 'Invalid project name';\n return true;\n },\n });\n projectName = response.name;\n }\n\n if (!projectName) {\n console.log(pc.red('Project creation cancelled.'));\n return;\n }\n\n // Handle --raw mode: 100% Web Standards, ZERO Flight dependencies\n if (options.raw) {\n const projectPath = resolve(process.cwd(), projectName);\n createRawProject(projectPath, projectName, options);\n return;\n }\n\n // Handle --empty mode: just package.json\n if (options.empty) {\n const projectPath = resolve(process.cwd(), projectName);\n createEmptyProject(projectPath, projectName, options);\n return;\n }\n\n // Handle --minimal mode: single file project with Flight\n if (options.minimal) {\n const projectPath = resolve(process.cwd(), projectName);\n createMinimalProject(projectPath, projectName, options);\n return;\n }\n\n if (!uiFramework) {\n const response = await prompts({\n type: 'select',\n name: 'ui',\n message: 'Choose your UI framework:',\n choices: UI_FRAMEWORKS,\n initial: 0,\n });\n uiFramework = response.ui;\n }\n\n if (!uiFramework) {\n console.log(pc.red('Project creation cancelled.'));\n return;\n }\n\n // Check for use-case templates\n let useCase = options.useCase;\n const useCaseDir = join(TEMPLATES_DIR, 'use-cases', useCase || '');\n const isUseCase = useCase && existsSync(useCaseDir);\n\n // Bundler selection\n let bundler = options.bundler;\n if (!bundler) {\n const response = await prompts({\n type: 'select',\n name: 'bundler',\n message: 'Choose your bundler:',\n choices: BUNDLERS,\n initial: 0,\n });\n bundler = response.bundler;\n }\n\n if (!bundler) {\n console.log(pc.red('Project creation cancelled.'));\n return;\n }\n\n const projectPath = resolve(process.cwd(), projectName);\n\n // Check if directory exists and is not empty\n if (existsSync(projectPath)) {\n const files = readdirSync(projectPath);\n if (files.length > 0) {\n const response = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Directory ${projectName} is not empty. Continue anyway?`,\n initial: false,\n });\n if (!response.overwrite) {\n console.log(pc.red('Project creation cancelled.'));\n return;\n }\n }\n }\n\n console.log(pc.dim(`\\nCreating project in ${projectPath}...\\n`));\n\n try {\n // Copy templates\n if (isUseCase && useCase) {\n copyUseCaseTemplate(projectPath, useCase, projectName);\n } else {\n copyTemplate(projectPath, uiFramework, bundler, projectName);\n }\n console.log(pc.green('[OK]') + ' Project structure created');\n\n // Initialize git\n if (options.git) {\n try {\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\n console.log(pc.green('✓') + ' Git repository initialized');\n } catch {\n console.log(pc.yellow('[!]') + ' Could not initialize git repository');\n }\n }\n\n // Install dependencies\n if (options.install) {\n console.log(pc.dim('\\nInstalling dependencies...\\n'));\n try {\n const pm = detectPackageManager();\n execSync(`${pm} install`, { cwd: projectPath, stdio: 'inherit' });\n console.log(pc.green('\\n✓') + ' Dependencies installed');\n } catch {\n console.log(pc.yellow('\\n[!]') + ' Could not install dependencies. Run `npm install` manually.');\n }\n }\n\n // Success message\n console.log(`\n${pc.green('[OK] Project created successfully!')}\n\n${pc.cyan('Next steps:')}\n\n ${pc.dim('$')} cd ${projectName}\n ${pc.dim('$')} ${options.install ? '' : 'npm install && '}npm run dev\n\n${pc.dim('Your project is 100% yours:')}\n ${pc.dim('•')} No telemetry\n ${pc.dim('•')} No lock-in\n ${pc.dim('•')} Deploy anywhere\n\n${pc.cyan('Happy flying!')}\n`);\n } catch (error) {\n console.error(pc.red('Failed to create project:'), error);\n process.exit(1);\n }\n}\n\nfunction detectPackageManager(): string {\n if (process.env.npm_config_user_agent?.includes('pnpm')) return 'pnpm';\n if (process.env.npm_config_user_agent?.includes('yarn')) return 'yarn';\n if (process.env.npm_config_user_agent?.includes('bun')) return 'bun';\n return 'npm';\n}\n\n/**\n * Copy template files to project directory\n */\nfunction copyTemplate(projectPath: string, ui: string, bundler: string, projectName: string): void {\n const baseDir = join(TEMPLATES_DIR, 'base');\n const uiDir = join(TEMPLATES_DIR, ui);\n\n // Ensure directories exist\n mkdirSync(projectPath, { recursive: true });\n mkdirSync(join(projectPath, 'src'), { recursive: true });\n mkdirSync(join(projectPath, 'src/styles'), { recursive: true });\n mkdirSync(join(projectPath, 'public'), { recursive: true });\n\n // Variables for template substitution\n const vars = {\n '{{PROJECT_NAME}}': projectName,\n '{{UI_FRAMEWORK}}': ui,\n '{{BUNDLER}}': bundler,\n '{{BUNDLER_PACKAGE}}': `@flight-framework/bundler-${bundler}`,\n '{{LANGUAGE}}': 'TypeScript',\n };\n\n // Copy base files\n copyDirWithTemplates(baseDir, projectPath, vars);\n\n // Copy UI-specific files (override base if needed)\n copyDirWithTemplates(uiDir, projectPath, vars);\n\n // Rename special files\n const gitignoreSrc = join(projectPath, '_gitignore');\n const gitignoreDest = join(projectPath, '.gitignore');\n if (existsSync(gitignoreSrc)) {\n copyFileSync(gitignoreSrc, gitignoreDest);\n unlinkSync(gitignoreSrc);\n }\n}\n\n/**\n * Copy use-case template files to project directory\n */\nfunction copyUseCaseTemplate(projectPath: string, useCase: string, projectName: string): void {\n const useCaseDir = join(TEMPLATES_DIR, 'use-cases', useCase);\n\n // Ensure project directory exists\n mkdirSync(projectPath, { recursive: true });\n\n // Variables for template substitution\n const vars = {\n '{{PROJECT_NAME}}': projectName,\n '{{USE_CASE}}': useCase,\n };\n\n // Copy use-case files\n copyDirWithTemplates(useCaseDir, projectPath, vars);\n}\n\n/**\n * Recursively copy directory, processing .template files\n */\nfunction copyDirWithTemplates(\n srcDir: string,\n destDir: string,\n vars: Record<string, string>\n): void {\n if (!existsSync(srcDir)) return;\n\n const entries = readdirSync(srcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = join(srcDir, entry.name);\n let destName = entry.name;\n let isTemplate = false;\n\n // Handle .template extension\n if (destName.endsWith('.template')) {\n destName = destName.replace('.template', '');\n isTemplate = true;\n }\n\n const destPath = join(destDir, destName);\n\n if (entry.isDirectory()) {\n mkdirSync(destPath, { recursive: true });\n copyDirWithTemplates(srcPath, destPath, vars);\n } else {\n let content = readFileSync(srcPath, 'utf-8');\n\n // Apply template substitutions\n if (isTemplate || destName.endsWith('.json') || destName.endsWith('.html') || destName.endsWith('.md')) {\n for (const [key, value] of Object.entries(vars)) {\n content = content.replaceAll(key, value);\n }\n }\n\n writeFileSync(destPath, content);\n }\n }\n}\n\n/**\n * Create a raw project with 100% Web Standards, ZERO Flight dependencies\n * True zero lock-in: works on Bun, Deno, Node 22+, Cloudflare Workers\n */\nfunction createRawProject(projectPath: string, projectName: string, options: CreateOptions): void {\n mkdirSync(projectPath, { recursive: true });\n\n const packageJson = {\n name: projectName,\n version: '0.0.1',\n type: 'module',\n scripts: {\n // Works with Bun, Node 22+, or Deno\n 'dev': 'node --watch server.js',\n 'dev:bun': 'bun --watch server.js',\n 'dev:deno': 'deno run --allow-net server.js',\n 'start': 'node server.js',\n },\n dependencies: {},\n devDependencies: {},\n };\n\n writeFileSync(\n join(projectPath, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n // 100% Web Standards server - NO Flight dependencies\n const serverCode = `/**\n * ${projectName}\n * \n * 100% Web Standards server. Zero dependencies. Zero lock-in.\n * Works on: Bun, Deno, Node 22+, Cloudflare Workers\n * \n * Run:\n * bun server.js\n * deno run --allow-net server.js\n * node server.js (Node 22+)\n */\n\n/**\n * Handle incoming requests using Web Standard APIs\n * @param {Request} request\n * @returns {Response}\n */\nfunction handleRequest(request) {\n const url = new URL(request.url);\n const method = request.method;\n \n // Router\n if (method === 'GET' && url.pathname === '/') {\n return Response.json({\n message: 'Hello World!',\n runtime: detectRuntime(),\n docs: 'https://flight.dev/docs/quickstart-http',\n });\n }\n \n if (method === 'GET' && url.pathname === '/health') {\n return Response.json({\n status: 'ok',\n timestamp: Date.now(),\n });\n }\n \n if (method === 'GET' && url.pathname.startsWith('/api/')) {\n return Response.json({\n path: url.pathname,\n query: Object.fromEntries(url.searchParams),\n });\n }\n \n // 404\n return Response.json(\n { error: 'Not Found', path: url.pathname },\n { status: 404 }\n );\n}\n\n/**\n * Detect which runtime we're running on\n */\nfunction detectRuntime() {\n if (typeof Bun !== 'undefined') return 'bun';\n if (typeof Deno !== 'undefined') return 'deno';\n return 'node';\n}\n\n// Export for different runtimes\nconst port = process.env.PORT || 3000;\n\n// Bun / Cloudflare Workers style\nexport default {\n port,\n fetch: handleRequest,\n};\n\n// Also start server for Node.js\nif (detectRuntime() === 'node') {\n const { serve } = await import('node:http');\n serve({ port }, (req, res) => {\n const url = 'http://localhost' + req.url;\n const request = new Request(url, { method: req.method });\n handleRequest(request).then(response => {\n res.writeHead(response.status, Object.fromEntries(response.headers));\n response.text().then(body => res.end(body));\n });\n });\n console.log(\\`Server running at http://localhost:\\${port}\\`);\n}\n`;\n\n writeFileSync(join(projectPath, 'server.js'), serverCode);\n\n // Create .gitignore\n if (options.git) {\n writeFileSync(\n join(projectPath, '.gitignore'),\n 'node_modules\\ndist\\n.env\\n.env.local\\n'\n );\n try {\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\n } catch { /* ignore */ }\n }\n\n console.log(`\n${pc.green('[OK] Raw project created!')}\n\n${pc.bold('ZERO dependencies. ZERO lock-in. 100% Web Standards.')}\n\n${pc.cyan('Run with any runtime:')}\n\n ${pc.dim('# Bun (fastest)')}\n bun server.js\n\n ${pc.dim('# Deno')}\n deno run --allow-net server.js\n\n ${pc.dim('# Node.js 22+')}\n node server.js\n\n${pc.dim('Want to add Flight later? Just run:')}\n flight add http ${pc.dim('# HTTP server with routing')}\n flight add db ${pc.dim('# Database abstraction')}\n flight add cache ${pc.dim('# Caching layer')}\n\n${pc.dim('Path:')} ${projectPath}\n`);\n}\n\n/**\n * Create an empty project with just package.json\n * Ultimate toolbox approach: start from zero\n */\nfunction createEmptyProject(projectPath: string, projectName: string, options: CreateOptions): void {\n mkdirSync(projectPath, { recursive: true });\n\n const packageJson = {\n name: projectName,\n version: '0.0.1',\n type: 'module',\n scripts: {\n dev: 'node server.js',\n },\n dependencies: {},\n devDependencies: {},\n };\n\n writeFileSync(\n join(projectPath, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n // Create .gitignore\n if (options.git) {\n writeFileSync(\n join(projectPath, '.gitignore'),\n 'node_modules\\ndist\\n.env\\n.env.local\\n'\n );\n try {\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\n } catch { /* ignore */ }\n }\n\n console.log(`\n${pc.green('[OK] Empty project created!')}\n\n${pc.cyan('Your project is a blank canvas.')} Add what you need:\n\n ${pc.dim('# HTTP server')}\n npm install @flight-framework/http\n\n ${pc.dim('# Database')}\n npm install @flight-framework/db\n\n ${pc.dim('# Cache')}\n npm install @flight-framework/cache\n\n ${pc.dim('# Authentication')}\n npm install @flight-framework/auth\n\n${pc.dim('Path:')} ${projectPath}\n`);\n}\n\n/**\n * Create a minimal project with a single server file\n * One step up from empty: working server in one file\n */\nfunction createMinimalProject(projectPath: string, projectName: string, options: CreateOptions): void {\n mkdirSync(projectPath, { recursive: true });\n\n const packageJson = {\n name: projectName,\n version: '0.0.1',\n type: 'module',\n scripts: {\n dev: 'node --watch server.js',\n start: 'node server.js',\n },\n dependencies: {\n '@flight-framework/http': '^0.0.1',\n },\n };\n\n writeFileSync(\n join(projectPath, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n const serverCode = `/**\n * ${projectName} - Built with Flight\n * \n * This is a minimal Flight server. Add more as you need.\n * Run: npm run dev\n */\n\nimport { createServer } from '@flight-framework/http';\n\nconst app = createServer();\n\n// Your routes\napp.get('/', (c) => c.json({ \n message: 'Hello from Flight!',\n docs: 'https://flight.dev/docs/quickstart-http'\n}));\n\napp.get('/health', (c) => c.json({ \n status: 'ok', \n timestamp: Date.now() \n}));\n\n// Start server\nconst port = process.env.PORT || 3000;\nconsole.log(\\`Server running at http://localhost:\\${port}\\`);\n\nexport default { port, fetch: app.fetch };\n`;\n\n writeFileSync(join(projectPath, 'server.js'), serverCode);\n\n // Create .gitignore\n if (options.git) {\n writeFileSync(\n join(projectPath, '.gitignore'),\n 'node_modules\\ndist\\n.env\\n.env.local\\n'\n );\n try {\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\n } catch { /* ignore */ }\n }\n\n // Install if requested\n if (options.install) {\n console.log(pc.dim('\\\\nInstalling dependencies...\\\\n'));\n try {\n const pm = detectPackageManager();\n execSync(`${pm} install`, { cwd: projectPath, stdio: 'inherit' });\n } catch { /* ignore */ }\n }\n\n console.log(`\n${pc.green('[OK] Minimal project created!')}\n\n${pc.cyan('Next steps:')}\n\n ${pc.dim('$')} cd ${projectName}\n ${pc.dim('$')} ${options.install ? '' : 'npm install && '}npm run dev\n\n${pc.dim('Add more features as needed:')}\n\n ${pc.dim('# File-based routing')}\n npm install @flight-framework/core\n\n ${pc.dim('# Database')}\n npm install @flight-framework/db pg\n\n ${pc.dim('# Caching')}\n npm install @flight-framework/cache\n\n${pc.cyan('Happy flying!')}\n`);\n}\n","/**\n * Flight CLI - Dev Command (SSR Enhanced)\n * \n * Start the development server with:\n * - Server-Side Rendering (renderToPipeableStream)\n * - Vite for HMR and asset transformation\n * - @flight-framework/http integration\n * - Automatic route type generation\n */\n\nimport { resolve, join } from 'node:path';\nimport { readFileSync, existsSync } from 'node:fs';\nimport pc from 'picocolors';\nimport { loadConfig } from '@flight-framework/core/config';\nimport { printLogo } from '../index.js';\nimport { generateTypes, watchAndGenerate } from '../generators/typegen.js';\n\ninterface DevOptions {\n port?: string;\n host?: string;\n open?: boolean;\n https?: boolean;\n ssr?: boolean;\n}\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n const startTime = Date.now();\n\n printLogo();\n console.log(pc.cyan('\\n Starting Flight development server...\\n'));\n\n try {\n // Load config\n const root = resolve(process.cwd());\n const config = await loadConfig(root);\n\n // Generate route types on startup\n const routesDir = join(root, 'src', 'routes');\n const outputDir = join(root, 'src', '.flight');\n\n if (existsSync(routesDir)) {\n try {\n const result = await generateTypes({\n routesDir,\n outputDir,\n includeRoutes: true,\n includeEnv: false,\n projectRoot: root,\n });\n console.log(pc.green(` Route types generated: ${result.routeCount} routes`));\n\n // Watch for route file changes and regenerate types\n const cleanup = watchAndGenerate({\n routesDir,\n outputDir,\n includeRoutes: true,\n includeEnv: false,\n projectRoot: root,\n onRegenerate: (watchResult) => {\n console.log(pc.blue(` Route types updated: ${watchResult.routeCount} routes`));\n },\n });\n\n // Cleanup on process exit\n process.on('SIGINT', () => cleanup());\n process.on('SIGTERM', () => cleanup());\n } catch (typeError) {\n console.log(pc.yellow(` Route type generation skipped: ${typeError}`));\n }\n }\n\n // Merge CLI options with config\n const port = options.port ? parseInt(options.port, 10) : config.dev.port;\n const host = options.host ?? config.dev.host;\n const open = options.open ?? config.dev.open;\n\n // Check if SSR mode is enabled\n const ssrEnabled = options.ssr ?? config.rendering?.default === 'ssr';\n const entryServerPath = join(root, 'src', 'entry-server.tsx');\n const hasSSREntry = existsSync(entryServerPath);\n\n // Dynamic import vite to avoid bundling issues\n const { createServer: createViteServer } = await import('vite');\n\n // Try to import Flight HTTP and file router\n let flightHttpAvailable = false;\n let flightRouterAvailable = false;\n\n try {\n await import('@flight-framework/http');\n flightHttpAvailable = true;\n } catch {\n // @flight-framework/http not installed\n }\n\n try {\n await import('@flight-framework/core/file-router');\n flightRouterAvailable = true;\n } catch {\n // file-router not available\n }\n\n // Create Vite dev server in middleware mode for SSR\n const vite = await createViteServer({\n root,\n mode: 'development',\n server: {\n middlewareMode: ssrEnabled && hasSSREntry,\n port: ssrEnabled && hasSSREntry ? undefined : port,\n host: host === true ? '0.0.0.0' : host,\n open: ssrEnabled && hasSSREntry ? false : open,\n https: options.https ? {} : undefined,\n },\n appType: ssrEnabled && hasSSREntry ? 'custom' : 'spa',\n plugins: [\n // Add Flight plugin when @flight-framework/http is available\n flightHttpAvailable ? flightDevPlugin(root) : null,\n ].filter(Boolean),\n });\n\n // SSR Mode with custom server\n if (ssrEnabled && hasSSREntry) {\n await startSSRServer(vite, root, port, host);\n } else {\n // CSR Mode - standard Vite server\n await vite.listen();\n }\n\n const elapsed = Date.now() - startTime;\n const isSSR = ssrEnabled && hasSSREntry;\n\n console.log(`\n ${pc.green('✓')} Flight dev server ready in ${pc.bold(elapsed + 'ms')}\n\n ${pc.cyan('➜')} Local: ${pc.cyan(`http://localhost:${port}/`)}\n ${host === true || host === '0.0.0.0' ? ` ${pc.cyan('➜')} Network: ${pc.cyan(`http://${getNetworkAddress()}:${port}/`)}` : ''}\n \n ${isSSR ? pc.green('✓') : pc.yellow('○')} SSR ${isSSR ? 'enabled (streaming)' : 'disabled (CSR mode)'}\n ${flightHttpAvailable ? pc.green('✓') : pc.yellow('○')} @flight-framework/http ${flightHttpAvailable ? 'enabled' : 'not installed'}\n ${flightRouterAvailable ? pc.green('✓') : pc.yellow('○')} File-based routing ${flightRouterAvailable ? 'enabled' : 'not available'}\n\n ${pc.dim('press')} ${pc.bold('h')} ${pc.dim('to show help')}\n`);\n\n // Handle server shortcuts\n if (!isSSR) {\n vite.bindCLIShortcuts({ print: true });\n }\n\n } catch (error) {\n console.error(pc.red('\\nFailed to start dev server:'), error);\n process.exit(1);\n }\n}\n\n/**\n * Start SSR server with Vite middleware and file-based page routing\n */\nasync function startSSRServer(\n vite: any,\n root: string,\n port: number,\n host: string | boolean\n): Promise<void> {\n const { createServer: createHttpServer } = await import('node:http');\n\n // Try to load file-based page router\n let pageRouter: any = null;\n try {\n const { createFileRouter } = await import('@flight-framework/core/file-router');\n\n // Create module loader that uses Vite's ssrLoadModule for TSX support\n const moduleLoader = async (filePath: string) => {\n // Normalize both paths to use forward slashes for Vite\n const normalizedFilePath = filePath.replace(/\\\\/g, '/');\n const normalizedRoot = root.replace(/\\\\/g, '/');\n // Create relative path that Vite expects (starts with /)\n const relativePath = normalizedFilePath.replace(normalizedRoot, '');\n return vite.ssrLoadModule(relativePath);\n };\n\n pageRouter = await createFileRouter({\n directory: join(root, 'src', 'routes'),\n extensions: ['.tsx', '.ts', '.jsx', '.js'],\n moduleLoader, // Use Vite's ssrLoadModule\n });\n console.log(pc.green(` ✓ Page router loaded: ${pageRouter.routes.filter((r: any) => r.type === 'page').length} pages`));\n } catch {\n // File router not available, use entry-server only\n }\n\n // Create a simple connect-like middleware handler\n const server = createHttpServer(async (req, res) => {\n const url = req.url || '/';\n const pathname = url.split('?')[0];\n\n // Check if this is a static asset request\n const isStaticAsset =\n url.startsWith('/@') ||\n url.startsWith('/node_modules') ||\n (url.startsWith('/src') && !url.includes('entry-server')) ||\n // Static file extensions\n pathname.endsWith('.css') ||\n pathname.endsWith('.js') ||\n pathname.endsWith('.ts') ||\n pathname.endsWith('.tsx') ||\n pathname.endsWith('.svg') ||\n pathname.endsWith('.png') ||\n pathname.endsWith('.jpg') ||\n pathname.endsWith('.jpeg') ||\n pathname.endsWith('.gif') ||\n pathname.endsWith('.ico') ||\n pathname.endsWith('.woff') ||\n pathname.endsWith('.woff2') ||\n pathname.endsWith('.ttf') ||\n pathname.endsWith('.eot') ||\n pathname.endsWith('.json') ||\n pathname.endsWith('.webp') ||\n pathname.endsWith('.mp4') ||\n pathname.endsWith('.webm');\n\n // Let Vite handle static assets\n if (isStaticAsset) {\n vite.middlewares(req, res);\n return;\n }\n\n // Skip SSR for API routes - let Flight HTTP middleware handle them\n if (pathname.startsWith('/api/')) {\n // API routes are handled by Flight HTTP middleware\n // Pass through to Vite middlewares which will invoke our Flight middleware\n vite.middlewares(req, res);\n return;\n }\n\n try {\n // 1. Read index.html template\n let template = readFileSync(\n join(root, 'index.html'),\n 'utf-8'\n );\n\n // 2. Apply Vite HTML transforms (HMR client injection)\n template = await vite.transformIndexHtml(url, template);\n\n let appHtml = '';\n\n // 3. Try file-based page routing first\n if (pageRouter) {\n const pageRoute = pageRouter.routes.find((r: any) =>\n r.type === 'page' && matchPath(r.path, pathname)\n );\n\n if (pageRoute && pageRoute.component) {\n // Load component via Vite for HMR\n // Normalize paths for Vite (forward slashes, remove root)\n const normalizedFilePath = pageRoute.filePath.replace(/\\\\/g, '/');\n const normalizedRoot = root.replace(/\\\\/g, '/');\n const relativePath = normalizedFilePath.replace(normalizedRoot, '');\n const mod = await vite.ssrLoadModule(relativePath);\n const Component = mod.default;\n\n // Get render function for the UI framework\n const { render } = await vite.ssrLoadModule('/src/entry-server.tsx');\n\n if (typeof render === 'function' && Component) {\n appHtml = await render(url, { Component });\n }\n }\n }\n\n // 4. Fallback to entry-server.tsx if no page matched\n if (!appHtml) {\n const { render } = await vite.ssrLoadModule('/src/entry-server.tsx');\n if (typeof render === 'function') {\n appHtml = await render(url);\n }\n }\n\n // 5. Inject rendered app into template\n if (appHtml) {\n const html = template.replace('<!--ssr-outlet-->', appHtml);\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(html);\n } else {\n // Fallback to CSR if no render\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(template);\n }\n\n } catch (e: any) {\n // Fix Vite stack trace\n vite.ssrFixStacktrace(e);\n console.error(pc.red('[SSR Error]'), e.stack);\n\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.end(`SSR Error: ${e.message}\\n\\n${e.stack}`);\n }\n }\n });\n\n const listenHost = host === true ? '0.0.0.0' : (host || 'localhost');\n\n server.listen(port, listenHost as string, () => {\n console.log(pc.green(` ✓ SSR server listening`));\n });\n}\n\n/**\n * Flight development plugin for Vite\n */\nfunction flightDevPlugin(root: string) {\n return {\n name: 'flight:dev',\n\n configureServer(server: any) {\n // Add middleware to handle Flight API routes\n server.middlewares.use(async (req: any, res: any, next: any) => {\n const url = req.url || '/';\n\n // Handle Flight action requests\n if (url.startsWith('/__flight_action/')) {\n try {\n const { handleActionRequest } = await import('@flight-framework/core');\n\n // Convert Node request to Web Request\n const webRequest = await nodeToWebRequest(req);\n const response = await handleActionRequest(webRequest);\n\n // Write response\n res.statusCode = response.status;\n response.headers.forEach((value: string, key: string) => {\n res.setHeader(key, value);\n });\n\n const body = await response.text();\n res.end(body);\n } catch (error) {\n console.error('[Flight] Action error:', error);\n res.statusCode = 500;\n res.end(JSON.stringify({ error: 'Internal server error' }));\n }\n return;\n }\n\n // Handle API routes from file-router\n if (url.startsWith('/api/')) {\n try {\n const { createFileRouter } = await import('@flight-framework/core/file-router');\n const routesDir = join(root, 'src', 'routes');\n\n const router = await createFileRouter({ directory: routesDir });\n const route = router.routes.find(r => {\n // Simple path matching (production would use radix matching)\n return matchPath(r.path, url);\n });\n\n if (route && route.handler) {\n const webRequest = await nodeToWebRequest(req);\n const response = await route.handler({ req: webRequest, params: {} });\n\n res.statusCode = response.status;\n response.headers.forEach((value: string, key: string) => {\n res.setHeader(key, value);\n });\n\n const body = await response.text();\n res.end(body);\n return;\n }\n } catch (error) {\n // File router not set up, continue to next middleware\n }\n }\n\n next();\n });\n },\n };\n}\n\n/**\n * Convert Node.js request to Web Standard Request\n */\nasync function nodeToWebRequest(req: any): Promise<Request> {\n const host = req.headers.host || 'localhost';\n const protocol = 'http';\n const url = new URL(req.url || '/', `${protocol}://${host}`);\n\n let body: BodyInit | null = null;\n\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk);\n }\n body = Buffer.concat(chunks);\n }\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value) {\n if (Array.isArray(value)) {\n for (const v of value) {\n headers.append(key, v);\n }\n } else {\n headers.set(key, value as string);\n }\n }\n }\n\n return new Request(url.toString(), {\n method: req.method || 'GET',\n headers,\n body,\n });\n}\n\n/**\n * Simple path matching\n */\nfunction matchPath(pattern: string, path: string): boolean {\n // Remove query string\n const cleanPath = path.split('?')[0];\n\n // Convert pattern params to regex\n const regexPattern = pattern\n .replace(/:\\w+/g, '[^/]+')\n .replace(/\\*/g, '.*');\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(cleanPath || '/');\n}\n\nfunction getNetworkAddress(): string {\n try {\n const { networkInterfaces } = require('os');\n const nets = networkInterfaces();\n\n for (const name of Object.keys(nets)) {\n for (const net of nets[name]) {\n if (net.family === 'IPv4' && !net.internal) {\n return net.address;\n }\n }\n }\n } catch {\n // Ignore\n }\n return '0.0.0.0';\n}\n\n","/**\n * Type Generation Module\n *\n * Generates TypeScript declaration files from route structure and environment files.\n * Follows Flight's toolbox philosophy: explicit, opt-in, no magic.\n *\n * @example CLI Usage\n * ```bash\n * flight types:generate --routes --env\n * flight types:generate --routes --watch\n * ```\n *\n * @example Programmatic Usage\n * ```typescript\n * import { generateTypes } from '@flight-framework/cli/generators/typegen';\n *\n * await generateTypes({\n * routesDir: './src/routes',\n * outputDir: './src/.flight',\n * includeRoutes: true,\n * includeEnv: true,\n * });\n * ```\n *\n * @module @flight-framework/cli/generators/typegen\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, watch } from 'fs';\nimport { join, resolve, dirname } from 'path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface TypeGenOptions {\n /** Directory containing route files */\n routesDir: string;\n\n /** Output directory for generated types */\n outputDir: string;\n\n /** Generate route types (default: true) */\n includeRoutes?: boolean;\n\n /** Generate environment variable types (default: false) */\n includeEnv?: boolean;\n\n /** Project root for .env file discovery */\n projectRoot?: string;\n}\n\nexport interface TypeGenResult {\n /** Generated route types content */\n routeTypes: string;\n\n /** Generated env types content */\n envTypes: string;\n\n /** List of files written */\n filesWritten: string[];\n\n /** Number of routes processed */\n routeCount: number;\n\n /** Number of env variables processed */\n envVarCount: number;\n}\n\nexport interface ScannedRoute {\n path: string;\n filePath: string;\n isDynamic: boolean;\n isApiRoute: boolean;\n httpMethod?: string;\n}\n\ninterface EnvVariable {\n key: string;\n optional: boolean;\n}\n\ninterface ParsedEnv {\n server: EnvVariable[];\n client: EnvVariable[];\n}\n\n// ============================================================================\n// Route Type Generation\n// ============================================================================\n\n/**\n * Generate default header for auto-generated files\n */\nfunction generateHeader(command: string): string {\n const timestamp = new Date().toISOString();\n return `/**\n * Auto-generated by Flight CLI\n * Do not edit manually - changes will be overwritten\n *\n * Command: ${command}\n * Generated: ${timestamp}\n */`;\n}\n\n/**\n * Extract parameter names from a route path\n *\n * @example\n * extractParams('/users/:id') // ['id']\n * extractParams('/blog/:year/:slug') // ['year', 'slug']\n * extractParams('/docs/*path') // ['path']\n */\nexport function extractParams(routePath: string): string[] {\n const params: string[] = [];\n\n // Match :param patterns\n const dynamicMatches = routePath.match(/:(\\w+)/g);\n if (dynamicMatches) {\n params.push(...dynamicMatches.map((m) => m.slice(1)));\n }\n\n // Match *param patterns (catch-all)\n const catchAllMatches = routePath.match(/\\*(\\w+)/g);\n if (catchAllMatches) {\n params.push(...catchAllMatches.map((m) => m.slice(1)));\n }\n\n return params;\n}\n\n/**\n * Check if route has dynamic segments\n */\nfunction isDynamicRoute(routePath: string): boolean {\n return routePath.includes(':') || routePath.includes('*');\n}\n\n/**\n * Generate TypeScript route types from scanned routes\n */\nexport function generateRouteTypes(routes: ScannedRoute[]): string {\n const pageRoutes = routes.filter((r) => !r.isApiRoute);\n const apiRoutes = routes.filter((r) => r.isApiRoute);\n\n const staticRoutes = pageRoutes.filter((r) => !r.isDynamic);\n const dynamicRoutes = pageRoutes.filter((r) => r.isDynamic);\n\n // Generate route unions\n const appRoutesUnion =\n pageRoutes.length > 0\n ? pageRoutes.map((r) => ` | '${r.path}'`).join('\\n')\n : ' | never';\n\n const apiRoutesUnion =\n apiRoutes.length > 0\n ? apiRoutes.map((r) => ` | '${r.path}'`).join('\\n')\n : ' | never';\n\n const staticRoutesUnion =\n staticRoutes.length > 0\n ? staticRoutes.map((r) => ` | '${r.path}'`).join('\\n')\n : ' | never';\n\n const dynamicRoutesUnion =\n dynamicRoutes.length > 0\n ? dynamicRoutes.map((r) => ` | '${r.path}'`).join('\\n')\n : ' | never';\n\n // Generate param types for dynamic routes\n const paramTypes = dynamicRoutes\n .map((r) => {\n const params = extractParams(r.path);\n const typeName = routePathToTypeName(r.path);\n const paramDef = params.map((p) => `${p}: string`).join('; ');\n return `export type ${typeName}Params = { ${paramDef} };`;\n })\n .join('\\n');\n\n return `${generateHeader('flight types:generate --routes')}\n\n// ============================================================================\n// Route Types\n// ============================================================================\n\n/**\n * All available page routes in the application\n */\nexport type AppRoutes =\n${appRoutesUnion};\n\n/**\n * All available API routes in the application\n */\nexport type ApiRoutes =\n${apiRoutesUnion};\n\n/**\n * Static routes (no dynamic parameters)\n */\nexport type StaticRoutes =\n${staticRoutesUnion};\n\n/**\n * Dynamic routes (with parameters like :id or *slug)\n */\nexport type DynamicRoutes =\n${dynamicRoutesUnion};\n\n// ============================================================================\n// Route Parameter Extraction\n// ============================================================================\n\n/**\n * Extract route parameters from a route pattern using template literal types.\n *\n * @example\n * type Params = ExtractRouteParams<'/users/:id'>; // { id: string }\n * type BlogParams = ExtractRouteParams<'/blog/:year/:slug'>; // { year: string; slug: string }\n */\ntype ExtractRouteParams<T extends string> =\n // Handle :param/rest pattern\n T extends \\`\\${infer _Start}:\\${infer Param}/\\${infer Rest}\\`\n ? { [K in Param]: string } & ExtractRouteParams<\\`/\\${Rest}\\`>\n // Handle :param at end\n : T extends \\`\\${infer _Start}:\\${infer Param}\\`\n ? { [K in Param]: string }\n // Handle *param (catch-all)\n : T extends \\`\\${infer _Start}*\\${infer Param}\\`\n ? { [K in Param]: string }\n // No params\n : Record<string, never>;\n\n/**\n * Get typed parameters for a specific route.\n *\n * @example\n * const params: RouteParams<'/users/:id'> = { id: '123' };\n */\nexport type RouteParams<T extends AppRoutes | ApiRoutes> = ExtractRouteParams<T>;\n\n// ============================================================================\n// Helper Types\n// ============================================================================\n\n/**\n * Check if a route requires parameters\n */\nexport type RequiresParams<T extends AppRoutes | ApiRoutes> =\n RouteParams<T> extends Record<string, never> ? false : true;\n\n/**\n * Props for a type-safe Link component\n */\nexport type TypedLinkProps<T extends AppRoutes> =\n RequiresParams<T> extends true\n ? { to: T; params: RouteParams<T> }\n : { to: T; params?: never };\n\n/**\n * Build a URL from a route pattern and parameters\n */\nexport type BuildUrl<T extends AppRoutes> =\n RequiresParams<T> extends true\n ? (route: T, params: RouteParams<T>) => string\n : (route: T) => string;\n\n// ============================================================================\n// Individual Route Parameter Types\n// ============================================================================\n\n${paramTypes || '// No dynamic routes found'}\n`;\n}\n\n/**\n * Convert route path to a valid TypeScript type name\n *\n * @example\n * routePathToTypeName('/users/:id') // 'Users_Id'\n * routePathToTypeName('/blog/:year/:slug') // 'Blog_Year_Slug'\n */\nfunction routePathToTypeName(routePath: string): string {\n return routePath\n .split('/')\n .filter(Boolean)\n .map((segment) => {\n // Remove : and * prefixes, capitalize\n const clean = segment.replace(/^[:*]/, '');\n return clean.charAt(0).toUpperCase() + clean.slice(1);\n })\n .join('_') || 'Root';\n}\n\n// ============================================================================\n// Environment Variable Type Generation\n// ============================================================================\n\n/**\n * Parse .env file content and extract variable definitions\n */\nexport function parseEnvFile(content: string): ParsedEnv {\n const server: EnvVariable[] = [];\n const client: EnvVariable[] = [];\n\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Skip comments and empty lines\n if (!trimmed || trimmed.startsWith('#')) {\n continue;\n }\n\n // Match KEY=value or KEY?=value (optional)\n const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)(\\?)?=/i);\n if (!match) {\n continue;\n }\n\n const key = match[1];\n const optional = match[2] === '?';\n\n const envVar: EnvVariable = { key, optional };\n\n // PUBLIC_ prefix means client-side accessible\n if (key.startsWith('PUBLIC_')) {\n client.push(envVar);\n } else {\n server.push(envVar);\n }\n }\n\n return { server, client };\n}\n\n/**\n * Load and merge all .env files from project root\n */\nexport function loadEnvFiles(projectRoot: string): ParsedEnv {\n const envFiles = ['.env', '.env.local', '.env.development', '.env.production'];\n\n const merged: ParsedEnv = { server: [], client: [] };\n const seenKeys = new Set<string>();\n\n for (const envFile of envFiles) {\n const envPath = join(projectRoot, envFile);\n\n if (!existsSync(envPath)) {\n continue;\n }\n\n const content = readFileSync(envPath, 'utf-8');\n const parsed = parseEnvFile(content);\n\n // Add new keys only (first definition wins)\n for (const envVar of parsed.server) {\n if (!seenKeys.has(envVar.key)) {\n seenKeys.add(envVar.key);\n merged.server.push(envVar);\n }\n }\n\n for (const envVar of parsed.client) {\n if (!seenKeys.has(envVar.key)) {\n seenKeys.add(envVar.key);\n merged.client.push(envVar);\n }\n }\n }\n\n return merged;\n}\n\n/**\n * Generate TypeScript environment variable types\n */\nexport function generateEnvTypes(env: ParsedEnv): string {\n const serverVars = env.server\n .sort((a, b) => a.key.localeCompare(b.key))\n .map((v) => ` ${v.key}${v.optional ? '?' : ''}: string;`)\n .join('\\n');\n\n const clientVars = env.client\n .sort((a, b) => a.key.localeCompare(b.key))\n .map((v) => ` ${v.key}${v.optional ? '?' : ''}: string;`)\n .join('\\n');\n\n return `${generateHeader('flight types:generate --env')}\n\n// ============================================================================\n// Server-side Environment Variables\n// ============================================================================\n\n/**\n * Server-side environment variables accessible via process.env\n * These are NOT exposed to the client.\n */\ndeclare namespace NodeJS {\n interface ProcessEnv {\n${serverVars || ' // No server environment variables defined'}\n }\n}\n\n// ============================================================================\n// Client-side Environment Variables\n// ============================================================================\n\n/**\n * Client-side environment variables accessible via import.meta.env\n * Only variables with PUBLIC_ prefix are included.\n */\ninterface ImportMetaEnv {\n${clientVars || ' // No client environment variables defined'}\n}\n\ninterface ImportMeta {\n readonly env: ImportMetaEnv;\n}\n`;\n}\n\n// ============================================================================\n// Main Generation Functions\n// ============================================================================\n\n/**\n * Scan routes directory and extract route information\n */\nexport function scanRoutesForTypes(routesDir: string): ScannedRoute[] {\n if (!existsSync(routesDir)) {\n return [];\n }\n\n const routes: ScannedRoute[] = [];\n scanDirectoryRecursive(routesDir, '', routes);\n return routes;\n}\n\nfunction scanDirectoryRecursive(\n dir: string,\n basePath: string,\n results: ScannedRoute[]\n): void {\n const entries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n const relativePath = join(basePath, entry.name);\n\n if (entry.isDirectory()) {\n // Skip special directories\n if (entry.name.startsWith('.') || entry.name === 'node_modules') {\n continue;\n }\n scanDirectoryRecursive(fullPath, relativePath, results);\n } else if (entry.isFile()) {\n const route = parseRouteFile(entry.name, relativePath);\n if (route) {\n results.push(route);\n }\n }\n }\n}\n\nfunction parseRouteFile(filename: string, relativePath: string): ScannedRoute | null {\n // Check for page routes\n if (/\\.(page|route)\\.(tsx?|jsx?)$/.test(filename)) {\n const urlPath = filePathToUrlPath(relativePath);\n return {\n path: urlPath,\n filePath: relativePath.replace(/\\\\/g, '/'),\n isDynamic: isDynamicRoute(urlPath),\n isApiRoute: false,\n };\n }\n\n // Check for API routes\n const apiMatch = filename.match(/\\.(get|post|put|patch|delete|options|head)\\.(tsx?|jsx?)$/i);\n if (apiMatch) {\n const urlPath = filePathToUrlPath(relativePath);\n return {\n path: urlPath,\n filePath: relativePath.replace(/\\\\/g, '/'),\n isDynamic: isDynamicRoute(urlPath),\n isApiRoute: true,\n httpMethod: apiMatch[1].toUpperCase(),\n };\n }\n\n return null;\n}\n\nfunction filePathToUrlPath(filePath: string): string {\n let urlPath = filePath\n // Normalize slashes first (Windows compatibility)\n .replace(/\\\\/g, '/')\n // Remove file extension\n .replace(/\\.(page|route)\\.(tsx?|jsx?)$/, '')\n // Remove HTTP method suffix\n .replace(/\\.(get|post|put|patch|delete|options|head)$/i, '')\n // Remove index (after slash normalization)\n .replace(/\\/index$/, '')\n .replace(/^index$/, '')\n // Remove route groups\n .replace(/\\/?\\\\?\\([^)]+\\\\?\\)/g, '')\n // Convert [param] to :param\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, '*$1')\n .replace(/\\[(\\w+)\\]/g, ':$1');\n\n // Ensure leading slash\n if (!urlPath.startsWith('/')) {\n urlPath = '/' + urlPath;\n }\n\n // Clean double slashes\n urlPath = urlPath.replace(/\\/+/g, '/');\n\n return urlPath || '/';\n}\n\n/**\n * Generate types and write to output directory\n */\nexport async function generateTypes(options: TypeGenOptions): Promise<TypeGenResult> {\n const {\n routesDir,\n outputDir,\n includeRoutes = true,\n includeEnv = false,\n projectRoot = process.cwd(),\n } = options;\n\n const result: TypeGenResult = {\n routeTypes: '',\n envTypes: '',\n filesWritten: [],\n routeCount: 0,\n envVarCount: 0,\n };\n\n // Ensure output directory exists\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n // Generate route types\n if (includeRoutes) {\n const routes = scanRoutesForTypes(routesDir);\n result.routeCount = routes.length;\n result.routeTypes = generateRouteTypes(routes);\n\n const routeTypesPath = join(outputDir, 'routes.d.ts');\n writeFileSync(routeTypesPath, result.routeTypes, 'utf-8');\n result.filesWritten.push(routeTypesPath);\n\n console.log(`Generated route types: ${routes.length} routes`);\n }\n\n // Generate env types\n if (includeEnv) {\n const env = loadEnvFiles(projectRoot);\n result.envVarCount = env.server.length + env.client.length;\n result.envTypes = generateEnvTypes(env);\n\n const envTypesPath = join(outputDir, 'env.d.ts');\n writeFileSync(envTypesPath, result.envTypes, 'utf-8');\n result.filesWritten.push(envTypesPath);\n\n console.log(`Generated env types: ${env.server.length} server, ${env.client.length} client`);\n }\n\n return result;\n}\n\n// ============================================================================\n// Watch Mode\n// ============================================================================\n\nexport interface WatchOptions extends TypeGenOptions {\n /** Debounce delay in milliseconds */\n debounce?: number;\n\n /** Callback when types are regenerated */\n onRegenerate?: (result: TypeGenResult) => void;\n}\n\n/**\n * Watch for changes and regenerate types automatically\n */\nexport function watchAndGenerate(options: WatchOptions): () => void {\n const { routesDir, debounce = 100, onRegenerate } = options;\n\n let timeout: ReturnType<typeof setTimeout> | null = null;\n\n const regenerate = async () => {\n try {\n const result = await generateTypes(options);\n onRegenerate?.(result);\n } catch (error) {\n console.error('Type generation failed:', (error as Error).message);\n }\n };\n\n const debouncedRegenerate = () => {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(regenerate, debounce);\n };\n\n // Initial generation\n regenerate();\n\n // Watch routes directory\n const watcher = watch(routesDir, { recursive: true }, (eventType: string, filename: string | null) => {\n if (filename && /\\.(tsx?|jsx?)$/.test(filename)) {\n console.log(`Route file changed: ${filename}`);\n debouncedRegenerate();\n }\n });\n\n // Return cleanup function\n return () => {\n watcher.close();\n if (timeout) clearTimeout(timeout);\n };\n}\n","/**\n * Flight CLI - Build Command\n * \n * Build for production.\n */\n\nimport { resolve } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport pc from 'picocolors';\nimport { loadConfig } from '@flight-framework/core/config';\nimport { printLogo } from '../index.js';\n\n/**\n * Find entry-server file with either .tsx or .ts extension\n */\nfunction findEntryServer(root: string, srcDir: string): string {\n const tsxPath = resolve(root, srcDir, 'entry-server.tsx');\n const tsPath = resolve(root, srcDir, 'entry-server.ts');\n\n if (existsSync(tsxPath)) return tsxPath;\n if (existsSync(tsPath)) return tsPath;\n\n // Default to tsx (will error if not found, but with clear message)\n return tsxPath;\n}\n\ninterface BuildOptions {\n outDir?: string;\n sourcemap?: boolean;\n minify?: boolean;\n}\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const startTime = Date.now();\n\n printLogo();\n console.log(pc.cyan('\\n[*] Building Flight project for production...\\n'));\n\n try {\n // Load config\n const root = resolve(process.cwd());\n const config = await loadConfig(root);\n\n const outDir = options.outDir ?? config.build.outDir;\n const sourcemap = options.sourcemap ?? config.build.sourcemap;\n const minify = options.minify ?? config.build.minify;\n\n // Dynamic import vite\n const { build } = await import('vite');\n\n console.log(pc.dim(`Output directory: ${outDir}`));\n console.log(pc.dim(`Sourcemaps: ${sourcemap ? 'enabled' : 'disabled'}`));\n console.log(pc.dim(`Minification: ${minify ? 'enabled' : 'disabled'}\\n`));\n\n // Client build\n console.log(pc.cyan('Building client...'));\n await build({\n root,\n mode: 'production',\n build: {\n outDir: `${outDir}/client`,\n sourcemap,\n minify: minify ? 'esbuild' : false,\n rollupOptions: {\n input: resolve(root, 'index.html'),\n },\n },\n });\n console.log(pc.green('✓') + ' Client build complete');\n\n // SSR build (if applicable)\n if (config.rendering.default !== 'csr') {\n console.log(pc.cyan('\\nBuilding server...'));\n await build({\n root,\n mode: 'production',\n build: {\n outDir: `${outDir}/server`,\n sourcemap,\n minify: minify ? 'esbuild' : false,\n ssr: true,\n rollupOptions: {\n input: findEntryServer(root, config.build.srcDir),\n },\n },\n });\n console.log(pc.green('✓') + ' Server build complete');\n }\n\n // Run adapter if configured\n if (config.adapter) {\n console.log(pc.cyan(`\\nRunning ${config.adapter.name} adapter...`));\n // TODO: Implement adapter execution\n console.log(pc.green('✓') + ` ${config.adapter.name} adapter complete`);\n }\n\n const elapsed = Date.now() - startTime;\n const elapsedSeconds = (elapsed / 1000).toFixed(2);\n\n console.log(`\n${pc.green('[OK] Build complete!')} ${pc.dim(`(${elapsedSeconds}s)`)}\n\n${pc.cyan('Output:')} ${resolve(root, outDir)}\n\n${pc.dim('To preview the build:')}\n ${pc.dim('$')} flight preview\n\n${pc.dim('To deploy:')}\n ${pc.dim('•')} Upload ${outDir}/ to your server\n ${pc.dim('•')} Or use your configured adapter\n`);\n\n } catch (error) {\n console.error(pc.red('\\nBuild failed:'), error);\n process.exit(1);\n }\n}\n","/**\n * Flight CLI - Preview Command\n * \n * Preview production build locally.\n */\n\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport { loadConfig } from '@flight-framework/core/config';\nimport { printLogo } from '../index.js';\n\ninterface PreviewOptions {\n port?: string;\n host?: string;\n open?: boolean;\n}\n\nexport async function previewCommand(options: PreviewOptions): Promise<void> {\n printLogo();\n console.log(pc.cyan('\\n✈️ Starting Flight preview server...\\n'));\n\n try {\n // Load config\n const root = resolve(process.cwd());\n const config = await loadConfig(root);\n\n const port = options.port ? parseInt(options.port, 10) : config.dev.port + 1;\n const host = options.host ?? config.dev.host;\n const open = options.open ?? false;\n\n // Dynamic import vite\n const { preview } = await import('vite');\n\n const server = await preview({\n root,\n preview: {\n port,\n host: host === true ? '0.0.0.0' : host,\n open,\n },\n build: {\n outDir: config.build.outDir,\n },\n });\n\n console.log(`\n ${pc.green('✓')} Flight preview server ready\n\n ${pc.cyan('➜')} Local: ${pc.cyan(`http://localhost:${port}/`)}\n ${host === true || host === '0.0.0.0' ? ` ${pc.cyan('➜')} Network: ${pc.cyan(`http://0.0.0.0:${port}/`)}` : ''}\n\n ${pc.dim('This is a preview of your production build.')}\n ${pc.dim('For development, use')} ${pc.bold('flight dev')}\n`);\n\n // Keep server running\n server.printUrls();\n\n } catch (error) {\n console.error(pc.red('\\nFailed to start preview server:'), error);\n process.exit(1);\n }\n}\n","/**\n * Routes Generate Command\n * \n * Generates route manifest from the routes directory.\n * Usage: flight routes:generate [options]\n */\n\nimport { resolve } from 'path';\nimport { generateRoutes } from '../generators/routes.js';\n\ninterface RoutesGenerateOptions {\n routesDir?: string;\n outputDir?: string;\n watch?: boolean;\n}\n\nexport async function routesGenerateCommand(options: RoutesGenerateOptions = {}): Promise<void> {\n const cwd = process.cwd();\n\n const routesDir = options.routesDir\n ? resolve(cwd, options.routesDir)\n : resolve(cwd, 'src/routes');\n\n const outputDir = options.outputDir\n ? resolve(cwd, options.outputDir)\n : resolve(cwd, 'src/.flight');\n\n try {\n const manifest = await generateRoutes({\n routesDir,\n outputDir,\n watch: options.watch,\n });\n\n console.log('\\nRoute manifest generated successfully!');\n console.log(` Pages: ${manifest.routes.length}`);\n console.log(` API Routes: ${manifest.apiRoutes.length}`);\n console.log(` Layouts: ${manifest.layouts.length}`);\n } catch (error) {\n console.error('Failed to generate routes:', error);\n process.exit(1);\n }\n}\n","/**\n * Route Generator\n * \n * Scans the routes directory and generates a route manifest.\n * This enables automatic route registration without manual imports.\n */\n\nimport { readdirSync, statSync, existsSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, relative, basename, dirname } from 'path';\n\ninterface ScannedRoute {\n path: string; // URL path pattern (e.g., '/docs/:slug')\n filePath: string; // Relative file path\n isLayout: boolean; // Is this a _layout file\n isLoading: boolean; // Is this a _loading file\n isError: boolean; // Is this a _error file\n isNotFound: boolean; // Is this a _not-found file\n isDynamic: boolean; // Has dynamic segments\n isApiRoute: boolean; // Is an API route\n httpMethod?: string; // HTTP method for API routes\n}\n\ninterface RouteManifest {\n routes: ScannedRoute[];\n layouts: ScannedRoute[];\n loadingStates: ScannedRoute[];\n errorBoundaries: ScannedRoute[];\n notFoundPages: ScannedRoute[];\n apiRoutes: ScannedRoute[];\n generated: string; // Timestamp\n}\n\n/**\n * Convert file path to URL path pattern\n * \n * Handles:\n * - File extensions (.page.tsx, .get.ts, etc.)\n * - Index files → root of directory\n * - Dynamic segments [param] → :param\n * - Catch-all [...param] → *param\n * - Route groups (group) → removed from URL\n */\nfunction filePathToUrlPath(filePath: string): string {\n let urlPath = filePath\n // Remove file extension\n .replace(/\\.(page|route)\\.(tsx?|jsx?)$/, '')\n // Remove HTTP method suffix for API routes\n .replace(/\\.(get|post|put|patch|delete|options|head)$/, '')\n // Remove index from path\n .replace(/\\/index$/, '')\n // Remove route groups (segments wrapped in parentheses)\n // e.g., (marketing)/about → about, (app)/dashboard → dashboard\n .replace(/\\/?\\([^)]+\\)/g, '')\n // Convert [param] to :param\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, '*$1') // Catch-all [...slug] -> *slug\n .replace(/\\[(\\w+)\\]/g, ':$1'); // Dynamic [slug] -> :slug\n\n // Ensure leading slash\n if (!urlPath.startsWith('/')) {\n urlPath = '/' + urlPath;\n }\n\n // Root path\n if (urlPath === '' || urlPath === '/') {\n urlPath = '/';\n }\n\n // Clean up double slashes that might result from group removal\n urlPath = urlPath.replace(/\\/+/g, '/');\n\n return urlPath;\n}\n\n/**\n * Check if directory is a route group\n * Route groups are directories wrapped in parentheses: (groupName)\n */\nfunction isRouteGroup(dirname: string): boolean {\n return /^\\([^)]+\\)$/.test(dirname);\n}\n\n/**\n * Extract HTTP method from API route filename\n */\nfunction extractHttpMethod(filename: string): string | undefined {\n const match = filename.match(/\\.(get|post|put|patch|delete|options|head)\\.(tsx?|jsx?)$/i);\n return match ? match[1].toUpperCase() : undefined;\n}\n\n/**\n * Check if file is a layout file\n */\nfunction isLayoutFile(filename: string): boolean {\n return filename.startsWith('_layout.');\n}\n\n/**\n * Check if file is a loading file\n */\nfunction isLoadingFile(filename: string): boolean {\n return filename.startsWith('_loading.');\n}\n\n/**\n * Check if file is an error file\n */\nfunction isErrorFile(filename: string): boolean {\n return filename.startsWith('_error.');\n}\n\n/**\n * Check if file is a not-found file\n */\nfunction isNotFoundFile(filename: string): boolean {\n return filename.startsWith('_not-found.');\n}\n\n/**\n * Check if file is a page/route file\n */\nfunction isRouteFile(filename: string): boolean {\n return /\\.(page|route)\\.(tsx?|jsx?)$/.test(filename);\n}\n\n/**\n * Check if file is an API route file\n */\nfunction isApiRouteFile(filename: string): boolean {\n return /\\.(get|post|put|patch|delete|options|head)\\.(tsx?|jsx?)$/.test(filename);\n}\n\n/**\n * Check if path has dynamic segments\n */\nfunction hasDynamicSegments(path: string): boolean {\n return path.includes('[') && path.includes(']');\n}\n\n/**\n * Recursively scan directory for routes\n */\nfunction scanDirectory(\n dir: string,\n basePath: string = '',\n results: ScannedRoute[] = []\n): ScannedRoute[] {\n if (!existsSync(dir)) {\n return results;\n }\n\n const entries = readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const relativePath = join(basePath, entry);\n const stat = statSync(fullPath);\n\n if (stat.isDirectory()) {\n // Skip special directories\n if (entry.startsWith('.') || entry === 'node_modules') {\n continue;\n }\n // Recurse into subdirectory\n scanDirectory(fullPath, relativePath, results);\n } else if (stat.isFile()) {\n const routePath = filePathToUrlPath(dirname(relativePath));\n const normalizedFilePath = relativePath.replace(/\\\\/g, '/');\n const isDynamic = hasDynamicSegments(relativePath);\n\n // Layout files\n if (isLayoutFile(entry)) {\n results.push({\n path: routePath,\n filePath: normalizedFilePath,\n isLayout: true,\n isLoading: false,\n isError: false,\n isNotFound: false,\n isDynamic,\n isApiRoute: false,\n });\n }\n // Loading files\n else if (isLoadingFile(entry)) {\n results.push({\n path: routePath,\n filePath: normalizedFilePath,\n isLayout: false,\n isLoading: true,\n isError: false,\n isNotFound: false,\n isDynamic,\n isApiRoute: false,\n });\n }\n // Error files\n else if (isErrorFile(entry)) {\n results.push({\n path: routePath,\n filePath: normalizedFilePath,\n isLayout: false,\n isLoading: false,\n isError: true,\n isNotFound: false,\n isDynamic,\n isApiRoute: false,\n });\n }\n // Not-found files\n else if (isNotFoundFile(entry)) {\n results.push({\n path: routePath,\n filePath: normalizedFilePath,\n isLayout: false,\n isLoading: false,\n isError: false,\n isNotFound: true,\n isDynamic,\n isApiRoute: false,\n });\n }\n // API route files\n else if (isApiRouteFile(entry)) {\n const method = extractHttpMethod(entry);\n results.push({\n path: filePathToUrlPath(relativePath),\n filePath: normalizedFilePath,\n isLayout: false,\n isLoading: false,\n isError: false,\n isNotFound: false,\n isDynamic,\n isApiRoute: true,\n httpMethod: method,\n });\n }\n // Page/route files\n else if (isRouteFile(entry)) {\n results.push({\n path: filePathToUrlPath(relativePath),\n filePath: normalizedFilePath,\n isLayout: false,\n isLoading: false,\n isError: false,\n isNotFound: false,\n isDynamic,\n isApiRoute: false,\n });\n }\n }\n }\n\n return results;\n}\n\n/**\n * Sort routes for matching priority\n * Static routes before dynamic, shorter before longer\n */\nfunction sortRoutes(routes: ScannedRoute[]): ScannedRoute[] {\n return routes.sort((a, b) => {\n // Static routes first\n if (!a.isDynamic && b.isDynamic) return -1;\n if (a.isDynamic && !b.isDynamic) return 1;\n\n // Shorter paths first\n const aSegments = a.path.split('/').length;\n const bSegments = b.path.split('/').length;\n if (aSegments !== bSegments) return aSegments - bSegments;\n\n // Alphabetical as tiebreaker\n return a.path.localeCompare(b.path);\n });\n}\n\n/**\n * Generate route manifest from scanned routes\n */\nexport function generateRouteManifest(routesDir: string): RouteManifest {\n const allRoutes = scanDirectory(routesDir);\n\n // Filter by type - pages are routes that are not special files or API routes\n const isPageRoute = (r: ScannedRoute) =>\n !r.isLayout && !r.isLoading && !r.isError && !r.isNotFound && !r.isApiRoute;\n\n const routes = sortRoutes(allRoutes.filter(isPageRoute));\n const layouts = allRoutes.filter(r => r.isLayout);\n const loadingStates = allRoutes.filter(r => r.isLoading);\n const errorBoundaries = allRoutes.filter(r => r.isError);\n const notFoundPages = allRoutes.filter(r => r.isNotFound);\n const apiRoutes = sortRoutes(allRoutes.filter(r => r.isApiRoute));\n\n return {\n routes,\n layouts,\n loadingStates,\n errorBoundaries,\n notFoundPages,\n apiRoutes,\n generated: new Date().toISOString(),\n };\n}\n\n/**\n * Generate TypeScript route manifest file\n */\nexport function generateRoutesFile(manifest: RouteManifest, outputDir: string): void {\n // Ensure output directory exists\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n // Generate routes.ts content\n const routesContent = `/**\n * Auto-generated by Flight CLI\n * Do not edit manually\n * Generated: ${manifest.generated}\n */\n\nimport type { RouteDefinition } from '@flight-framework/router';\n\n// Page Routes\nexport const routes: RouteDefinition[] = [\n${manifest.routes.map(r => ` {\n path: '${r.path}',\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\n },`).join('\\n')}\n];\n\n// Layout Components\nexport const layouts = [\n${manifest.layouts.map(r => ` {\n path: '${r.path}',\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\n },`).join('\\n')}\n];\n\n// Loading State Components\nexport const loadingStates = [\n${manifest.loadingStates.map(r => ` {\n path: '${r.path}',\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\n },`).join('\\n')}\n];\n\n// Error Boundary Components\nexport const errorBoundaries = [\n${manifest.errorBoundaries.map(r => ` {\n path: '${r.path}',\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\n },`).join('\\n')}\n];\n\n// Not Found Page Components\nexport const notFoundPages = [\n${manifest.notFoundPages.map(r => ` {\n path: '${r.path}',\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\n },`).join('\\n')}\n];\n\n// API Routes\nexport const apiRoutes = [\n${manifest.apiRoutes.map(r => ` {\n path: '${r.path}',\n method: '${r.httpMethod}',\n handler: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\n },`).join('\\n')}\n];\n\n// Type-safe route paths\nexport type AppRoutes = ${manifest.routes.length > 0\n ? manifest.routes.map(r => `'${r.path}'`).join(' | ')\n : 'never'};\n\n// Type-safe API route paths\nexport type ApiRoutes = ${manifest.apiRoutes.length > 0\n ? manifest.apiRoutes.map(r => `'${r.path}'`).join(' | ')\n : 'never'};\n`;\n\n writeFileSync(join(outputDir, 'routes.ts'), routesContent, 'utf-8');\n\n // Generate types.ts for enhanced type safety\n const typesContent = `/**\n * Auto-generated route types\n * Generated: ${manifest.generated}\n */\n\nimport type { RouteParams } from '@flight-framework/router';\n\n// Extract params from route patterns\n${manifest.routes\n .filter(r => r.isDynamic)\n .map(r => {\n const paramMatches = r.path.match(/:(\\w+)/g) || [];\n const params = paramMatches.map(p => p.slice(1));\n const typeName = r.path\n .replace(/[/:]/g, '_')\n .replace(/^_/, '')\n .replace(/_$/, '') || 'Root';\n return `export type ${typeName}Params = { ${params.map(p => `${p}: string`).join('; ')} };`;\n })\n .join('\\n')}\n`;\n\n writeFileSync(join(outputDir, 'types.ts'), typesContent, 'utf-8');\n}\n\n/**\n * Main function to generate routes\n */\nexport async function generateRoutes(options: {\n routesDir: string;\n outputDir: string;\n watch?: boolean;\n}): Promise<RouteManifest> {\n const { routesDir, outputDir } = options;\n\n console.log(`Scanning routes in: ${routesDir}`);\n\n const manifest = generateRouteManifest(routesDir);\n\n const stats = [\n `${manifest.routes.length} pages`,\n `${manifest.layouts.length} layouts`,\n `${manifest.loadingStates.length} loading states`,\n `${manifest.errorBoundaries.length} error boundaries`,\n `${manifest.notFoundPages.length} not-found pages`,\n `${manifest.apiRoutes.length} API routes`,\n ].join(', ');\n\n console.log(`Found: ${stats}`);\n\n generateRoutesFile(manifest, outputDir);\n\n console.log(`Generated route manifest in: ${outputDir}`);\n\n return manifest;\n}\n","/**\n * Types Generate Command\n *\n * Generates TypeScript declaration files for routes and environment variables.\n * This command is opt-in and explicit - follows Flight's toolbox philosophy.\n *\n * Usage:\n * flight types:generate # Generate route types (default)\n * flight types:generate --routes # Generate route types only\n * flight types:generate --env # Generate env types only\n * flight types:generate --watch # Watch mode for development\n *\n * Output:\n * src/.flight/routes.d.ts - Route type definitions\n * src/.flight/env.d.ts - Environment variable types\n */\n\nimport { resolve } from 'path';\nimport { generateTypes, watchAndGenerate } from '../generators/typegen.js';\n\nexport interface TypesGenerateOptions {\n /** Routes directory (default: src/routes) */\n routesDir?: string;\n\n /** Output directory (default: src/.flight) */\n outputDir?: string;\n\n /** Generate route types (default: true) */\n routes?: boolean;\n\n /** Generate environment variable types (default: false) */\n env?: boolean;\n\n /** Watch for changes and regenerate (default: false) */\n watch?: boolean;\n}\n\nexport async function typesGenerateCommand(options: TypesGenerateOptions = {}): Promise<void> {\n const cwd = process.cwd();\n\n const routesDir = options.routesDir\n ? resolve(cwd, options.routesDir)\n : resolve(cwd, 'src/routes');\n\n const outputDir = options.outputDir\n ? resolve(cwd, options.outputDir)\n : resolve(cwd, 'src/.flight');\n\n // Default to routes if no specific flag is set\n const includeRoutes = options.routes ?? (!options.env);\n const includeEnv = options.env ?? false;\n\n console.log('Flight Type Generator');\n console.log('---------------------');\n console.log(`Routes directory: ${routesDir}`);\n console.log(`Output directory: ${outputDir}`);\n console.log(`Generate routes: ${includeRoutes}`);\n console.log(`Generate env: ${includeEnv}`);\n console.log('');\n\n try {\n if (options.watch) {\n console.log('Watching for changes... (Ctrl+C to stop)');\n console.log('');\n\n const cleanup = watchAndGenerate({\n routesDir,\n outputDir,\n includeRoutes,\n includeEnv,\n projectRoot: cwd,\n onRegenerate: (result) => {\n console.log(`Regenerated: ${result.filesWritten.length} files`);\n },\n });\n\n // Handle graceful shutdown\n process.on('SIGINT', () => {\n console.log('\\nStopping watch mode...');\n cleanup();\n process.exit(0);\n });\n\n // Keep process alive\n await new Promise(() => { });\n } else {\n const result = await generateTypes({\n routesDir,\n outputDir,\n includeRoutes,\n includeEnv,\n projectRoot: cwd,\n });\n\n console.log('Type generation complete!');\n console.log('');\n console.log('Files written:');\n for (const file of result.filesWritten) {\n console.log(` - ${file}`);\n }\n console.log('');\n console.log('Add to your tsconfig.json includes:');\n console.log(' \"include\": [\"src\", \"src/.flight/*.d.ts\"]');\n }\n } catch (error) {\n console.error('Type generation failed:', error);\n process.exit(1);\n }\n}\n","/**\n * Flight CLI - Add Command\n * \n * Add Flight packages to an existing project.\n * Toolbox philosophy: add only what you need, when you need it.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport pc from 'picocolors';\n\nconst PACKAGES: Record<string, PackageInfo> = {\n // Core\n 'http': {\n name: '@flight-framework/http',\n description: 'HTTP server with routing and middleware',\n category: 'core',\n },\n 'core': {\n name: '@flight-framework/core',\n description: 'File-based routing and configuration',\n category: 'core',\n },\n\n // Data\n 'db': {\n name: '@flight-framework/db',\n description: 'Database abstraction layer',\n category: 'data',\n drivers: ['pg', '@libsql/client', '@neondatabase/serverless', '@supabase/supabase-js'],\n },\n 'cache': {\n name: '@flight-framework/cache',\n description: 'Caching with multiple adapters',\n category: 'data',\n },\n\n // Auth\n 'auth': {\n name: '@flight-framework/auth',\n description: 'Authentication adapters',\n category: 'auth',\n },\n\n // Frontend\n 'forms': {\n name: '@flight-framework/forms',\n description: 'Type-safe form handling',\n category: 'frontend',\n },\n 'i18n': {\n name: '@flight-framework/i18n',\n description: 'Internationalization',\n category: 'frontend',\n },\n 'seo': {\n name: '@flight-framework/seo',\n description: 'SEO utilities',\n category: 'frontend',\n },\n 'image': {\n name: '@flight-framework/image',\n description: 'Image optimization',\n category: 'frontend',\n },\n\n // Communication\n 'email': {\n name: '@flight-framework/email',\n description: 'Email sending',\n category: 'communication',\n },\n 'realtime': {\n name: '@flight-framework/realtime',\n description: 'WebSocket and real-time features',\n category: 'communication',\n },\n\n // Deployment\n 'helpers': {\n name: '@flight-framework/helpers',\n description: 'Optional helper utilities (detection, suggestions)',\n category: 'utilities',\n },\n};\n\ninterface PackageInfo {\n name: string;\n description: string;\n category: string;\n drivers?: string[];\n}\n\nexport async function addCommand(packageName: string | undefined): Promise<void> {\n const cwd = process.cwd();\n\n // Check if we're in a project\n if (!existsSync(join(cwd, 'package.json'))) {\n console.log(pc.red('No package.json found. Run this command from your project directory.'));\n process.exit(1);\n }\n\n // If no package specified, show available packages\n if (!packageName) {\n showAvailablePackages();\n return;\n }\n\n // Find the package\n const pkg = PACKAGES[packageName];\n if (!pkg) {\n console.log(pc.red(`Unknown package: ${packageName}`));\n console.log(pc.dim('Run `flight add` to see available packages.'));\n process.exit(1);\n }\n\n console.log(`\\n${pc.cyan('Adding')} ${pc.bold(pkg.name)}...`);\n console.log(pc.dim(pkg.description));\n console.log();\n\n // Detect package manager\n const pm = detectPackageManager();\n\n // Install the package\n try {\n const installCmd = pm === 'npm' ? 'npm install' : `${pm} add`;\n execSync(`${installCmd} ${pkg.name}`, { cwd, stdio: 'inherit' });\n\n console.log(`\\n${pc.green('[OK]')} ${pkg.name} added successfully!`);\n\n // Show next steps\n showNextSteps(packageName, pkg);\n\n } catch (error) {\n console.log(pc.red(`\\nFailed to install ${pkg.name}`));\n process.exit(1);\n }\n}\n\nfunction detectPackageManager(): string {\n const cwd = process.cwd();\n if (existsSync(join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(cwd, 'yarn.lock'))) return 'yarn';\n if (existsSync(join(cwd, 'bun.lockb'))) return 'bun';\n return 'npm';\n}\n\nfunction showAvailablePackages(): void {\n console.log(`\n${pc.cyan('Available Flight packages:')}\n\n${pc.bold('Core')}\n ${pc.green('http')} ${pc.dim('HTTP server with routing and middleware')}\n ${pc.green('core')} ${pc.dim('File-based routing and configuration')}\n\n${pc.bold('Data')}\n ${pc.green('db')} ${pc.dim('Database abstraction layer')}\n ${pc.green('cache')} ${pc.dim('Caching with multiple adapters')}\n\n${pc.bold('Auth')}\n ${pc.green('auth')} ${pc.dim('Authentication adapters')}\n\n${pc.bold('Frontend')}\n ${pc.green('forms')} ${pc.dim('Type-safe form handling')}\n ${pc.green('i18n')} ${pc.dim('Internationalization')}\n ${pc.green('seo')} ${pc.dim('SEO utilities')}\n ${pc.green('image')} ${pc.dim('Image optimization')}\n\n${pc.bold('Communication')}\n ${pc.green('email')} ${pc.dim('Email sending')}\n ${pc.green('realtime')} ${pc.dim('WebSocket and real-time features')}\n\n${pc.bold('Utilities')}\n ${pc.green('helpers')} ${pc.dim('Optional helper utilities')}\n\n${pc.cyan('Usage:')}\n flight add http\n flight add db\n flight add auth\n`);\n}\n\nfunction showNextSteps(packageName: string, pkg: PackageInfo): void {\n const examples: Record<string, string> = {\n 'http': `\n${pc.cyan('Quick example:')}\n\n import { createServer } from '@flight-framework/http';\n \n const app = createServer();\n app.get('/', (c) => c.json({ hello: 'world' }));\n \n export default { port: 3000, fetch: app.fetch };\n`,\n 'db': `\n${pc.cyan('Quick example:')}\n\n import { createDb } from '@flight-framework/db';\n import { postgres } from '@flight-framework/db/postgres';\n \n const db = createDb(postgres({ connectionString: process.env.DATABASE_URL }));\n const users = await db.query('SELECT * FROM users');\n\n${pc.dim('You may also need a driver:')}\n npm install pg ${pc.dim('# PostgreSQL')}\n npm install @libsql/client ${pc.dim('# Turso/SQLite')}\n npm install @neondatabase/serverless ${pc.dim('# Neon')}\n`,\n 'cache': `\n${pc.cyan('Quick example:')}\n\n import { createCache, lru } from '@flight-framework/cache';\n \n const cache = createCache(lru({ max: 1000 }));\n await cache.set('key', { data: 'value' });\n const value = await cache.get('key');\n`,\n 'auth': `\n${pc.cyan('Quick example:')}\n\n import { createAuth } from '@flight-framework/auth';\n import { betterAuth } from '@flight-framework/auth/better-auth';\n \n const auth = createAuth(betterAuth({ db }));\n const user = await auth.getUser(request);\n`,\n 'forms': `\n${pc.cyan('Quick example:')}\n\n import { createForm } from '@flight-framework/forms';\n import { zodAdapter } from '@flight-framework/forms/adapters/zod';\n \n const form = createForm({ schema: zodAdapter(schema) });\n const result = form.validate(data);\n`,\n };\n\n if (examples[packageName]) {\n console.log(examples[packageName]);\n }\n\n console.log(`${pc.dim('Docs:')} https://flight.dev/docs/packages/${packageName}`);\n}\n\nexport function registerAddCommand(program: any): void {\n program\n .command('add [package]')\n .description('Add a Flight package to your project')\n .action(addCommand);\n}\n","/**\n * Flight CLI - Adapter Create Command\n * \n * Scaffolds a new adapter package with all necessary files.\n * \n * Usage:\n * flight adapter:create my-platform\n * flight adapter:create my-platform --type edge\n * flight adapter:create my-platform --validation\n * \n * @module @flight-framework/cli/commands/adapter-create\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport pc from 'picocolors';\n\nexport interface AdapterCreateOptions {\n /** Adapter name (e.g., 'my-platform') */\n name: string;\n /** Platform type for template selection */\n type?: 'node' | 'edge' | 'container' | 'serverless';\n /** Include Zod validation example */\n validation?: boolean;\n /** Output directory (default: packages/adapter-{name}) */\n outputDir?: string;\n}\n\nexport async function adapterCreateCommand(name: string, options: Partial<AdapterCreateOptions> = {}): Promise<void> {\n const cwd = process.cwd();\n const adapterName = name.toLowerCase().replace(/[^a-z0-9-]/g, '-');\n const packageName = `@flight-framework/adapter-${adapterName}`;\n const outputDir = options.outputDir || join(cwd, 'packages', `adapter-${adapterName}`);\n const type = options.type || 'node';\n const includeValidation = options.validation || false;\n\n console.log(pc.cyan(`\\n Creating adapter: ${packageName}\\n`));\n\n // Check if directory exists\n if (existsSync(outputDir)) {\n console.error(pc.red(` Error: Directory already exists: ${outputDir}`));\n process.exit(1);\n }\n\n // Create directory structure\n mkdirSync(join(outputDir, 'src'), { recursive: true });\n mkdirSync(join(outputDir, 'tests'), { recursive: true });\n\n // Generate files\n const files = generateAdapterFiles(adapterName, packageName, type, includeValidation);\n\n for (const [filePath, content] of Object.entries(files)) {\n const fullPath = join(outputDir, filePath);\n writeFileSync(fullPath, content, 'utf-8');\n console.log(pc.green(` ✓ Created ${filePath}`));\n }\n\n console.log(pc.cyan(`\n Adapter created successfully!\n\n Next steps:\n 1. cd packages/adapter-${adapterName}\n 2. Implement your adapter logic in src/index.ts\n 3. Run: pnpm build\n 4. Test: pnpm test\n\n Documentation:\n https://flight.dev/docs/adapters/custom\n`));\n}\n\nfunction generateAdapterFiles(\n name: string,\n packageName: string,\n type: string,\n includeValidation: boolean\n): Record<string, string> {\n const pascalName = name\n .split('-')\n .map(s => s.charAt(0).toUpperCase() + s.slice(1))\n .join('');\n\n return {\n 'package.json': generatePackageJson(packageName, includeValidation),\n 'tsconfig.json': generateTsConfig(),\n 'tsup.config.ts': generateTsupConfig(),\n 'src/index.ts': generateAdapterSource(name, pascalName, type, includeValidation),\n 'tests/adapter.test.ts': generateAdapterTest(name, pascalName),\n 'README.md': generateReadme(name, packageName),\n };\n}\n\nfunction generatePackageJson(packageName: string, includeValidation: boolean): string {\n const pkg = {\n name: packageName,\n version: '0.1.0',\n description: `Flight adapter for custom platform`,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n },\n scripts: {\n build: 'tsup',\n test: 'vitest run',\n 'test:watch': 'vitest',\n },\n dependencies: {\n '@flight-framework/core': '^0.4.0',\n },\n devDependencies: {\n tsup: '^8.0.0',\n typescript: '^5.0.0',\n vitest: '^2.0.0',\n ...(includeValidation ? { zod: '^3.23.0' } : {}),\n },\n peerDependencies: includeValidation ? {\n zod: '^3.0.0',\n } : undefined,\n peerDependenciesMeta: includeValidation ? {\n zod: { optional: true },\n } : undefined,\n };\n\n return JSON.stringify(pkg, null, 2);\n}\n\nfunction generateTsConfig(): string {\n return JSON.stringify({\n extends: '../../tsconfig.base.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src'],\n }, null, 2);\n}\n\nfunction generateTsupConfig(): string {\n return `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n target: 'node20',\n});\n`;\n}\n\nfunction generateAdapterSource(\n name: string,\n pascalName: string,\n type: string,\n includeValidation: boolean\n): string {\n if (includeValidation) {\n return `/**\n * Flight Adapter - ${pascalName}\n * \n * Custom deployment adapter with optional Zod validation.\n */\n\nimport { createValidatedAdapter, type AdapterBuilder } from '@flight-framework/core/adapters';\nimport { z } from 'zod';\n\n// ============================================================================\n// Options Schema (Optional - Zod validation)\n// ============================================================================\n\nconst optionsSchema = z.object({\n /** Server port */\n port: z.number().default(3000),\n /** Enable health check endpoint */\n healthCheck: z.boolean().default(true),\n /** Custom environment variables */\n env: z.record(z.string()).optional(),\n});\n\nexport type ${pascalName}AdapterOptions = z.infer<typeof optionsSchema>;\n\n// ============================================================================\n// Adapter Implementation\n// ============================================================================\n\nexport default createValidatedAdapter('${name}', optionsSchema, (options) => ({\n async adapt(builder: AdapterBuilder) {\n builder.log.info(\\`Building for ${pascalName} platform...\\`);\n builder.log.info(\\`Port: \\${options.port}\\`);\n\n // Generate server entry\n await generateServerEntry(builder, options);\n\n // Generate platform-specific config\n await generatePlatformConfig(builder, options);\n\n builder.log.info('Build complete!');\n },\n\n supports: {\n node: () => ${type === 'node' || type === 'container'},\n edge: () => ${type === 'edge' || type === 'serverless'},\n streaming: () => ${type === 'node'},\n websockets: () => ${type === 'node'},\n },\n\n emulate: () => ({\n env: {\n ${name.toUpperCase().replace(/-/g, '_')}_PLATFORM: 'true',\n PORT: String(options.port),\n },\n }),\n}));\n\n// ============================================================================\n// Generator Functions\n// ============================================================================\n\nasync function generateServerEntry(builder: AdapterBuilder, options: ${pascalName}AdapterOptions): Promise<void> {\n const serverCode = \\`\nimport { createUniversalHandler } from '@flight-framework/core/adapters';\nimport manifest from './manifest.js';\n\nconst handler = createUniversalHandler(manifest);\n\nconst server = Bun.serve({\n port: \\${options.port},\n fetch: handler,\n});\n\nconsole.log(\\\\\\`Server running at http://localhost:\\${options.port}\\\\\\`);\n\\`;\n\n await builder.writeFile('server.ts', serverCode.trim());\n}\n\nasync function generatePlatformConfig(builder: AdapterBuilder, options: ${pascalName}AdapterOptions): Promise<void> {\n const config = {\n name: '${name}-app',\n port: options.port,\n healthCheck: options.healthCheck ? '/health' : null,\n };\n\n await builder.writeFile('platform.json', JSON.stringify(config, null, 2));\n}\n`;\n }\n\n // Without validation (default)\n return `/**\n * Flight Adapter - ${pascalName}\n * \n * Custom deployment adapter for ${pascalName} platform.\n * \n * @example\n * \\`\\`\\`typescript\n * import ${name.replace(/-/g, '')} from '${name.includes('@') ? name : `@flight-framework/adapter-${name}`}';\n * \n * export default defineConfig({\n * adapter: ${name.replace(/-/g, '')}({\n * port: 3000,\n * }),\n * });\n * \\`\\`\\`\n */\n\nimport { createAdapter, type AdapterBuilder } from '@flight-framework/core/adapters';\n\n// ============================================================================\n// Options Interface\n// ============================================================================\n\nexport interface ${pascalName}AdapterOptions {\n /** Server port (default: 3000) */\n port?: number;\n /** Enable health check endpoint (default: true) */\n healthCheck?: boolean;\n /** Custom environment variables */\n env?: Record<string, string>;\n}\n\n// ============================================================================\n// Adapter Implementation\n// ============================================================================\n\nexport default function ${name.replace(/-/g, '')}Adapter(options: ${pascalName}AdapterOptions = {}) {\n const {\n port = 3000,\n healthCheck = true,\n env = {},\n } = options;\n\n return createAdapter({\n name: '${name}',\n\n async adapt(builder: AdapterBuilder) {\n builder.log.info(\\`Building for ${pascalName} platform...\\`);\n builder.log.info(\\`Port: \\${port}\\`);\n\n // Generate server entry\n await generateServerEntry(builder, port, healthCheck);\n\n // Generate platform-specific config\n await generatePlatformConfig(builder, port, healthCheck);\n\n builder.log.info('Build complete!');\n },\n\n supports: {\n node: () => ${type === 'node' || type === 'container'},\n edge: () => ${type === 'edge' || type === 'serverless'},\n streaming: () => ${type === 'node'},\n websockets: () => ${type === 'node'},\n },\n\n emulate: () => ({\n env: {\n ${name.toUpperCase().replace(/-/g, '_')}_PLATFORM: 'true',\n PORT: String(port),\n ...env,\n },\n }),\n });\n}\n\n// ============================================================================\n// Generator Functions\n// ============================================================================\n\nasync function generateServerEntry(\n builder: AdapterBuilder,\n port: number,\n healthCheck: boolean\n): Promise<void> {\n const serverCode = \\`\nimport { createServer } from 'node:http';\nimport { createUniversalHandler } from '@flight-framework/core/adapters';\nimport manifest from './manifest.js';\n\nconst handler = createUniversalHandler(manifest);\n\nconst server = createServer(async (req, res) => {\n const url = req.url || '/';\n \n // Health check endpoint\n if (url === '/health' && \\${healthCheck}) {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ status: 'ok' }));\n return;\n }\n\n // Handle request with Flight\n const webReq = new Request(\\\\\\`http://localhost\\${url}\\\\\\`, {\n method: req.method,\n headers: Object.fromEntries(\n Object.entries(req.headers).filter(([_, v]) => v != null).map(([k, v]) => [k, String(v)])\n ),\n });\n\n const response = await handler(webReq);\n\n res.writeHead(response.status, Object.fromEntries(response.headers));\n res.end(await response.text());\n});\n\nserver.listen(\\${port}, () => {\n console.log(\\\\\\`Server running at http://localhost:\\${port}\\\\\\`);\n});\n\\`;\n\n await builder.writeFile('server.mjs', serverCode.trim());\n}\n\nasync function generatePlatformConfig(\n builder: AdapterBuilder,\n port: number,\n healthCheck: boolean\n): Promise<void> {\n const config = {\n name: '${name}-app',\n port,\n healthCheck: healthCheck ? '/health' : null,\n };\n\n await builder.writeFile('platform.json', JSON.stringify(config, null, 2));\n}\n`;\n}\n\nfunction generateAdapterTest(name: string, pascalName: string): string {\n return `/**\n * ${pascalName} Adapter Tests\n */\n\nimport { describe, it, expect, vi } from 'vitest';\nimport adapter from '../src/index.js';\n\ndescribe('adapter-${name}', () => {\n const createMockBuilder = () => ({\n manifest: {\n entries: {},\n files: [],\n routes: [],\n },\n root: '/test',\n outDir: '/test/dist',\n readFile: vi.fn(),\n writeFile: vi.fn(),\n copy: vi.fn(),\n glob: vi.fn(),\n log: {\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n },\n });\n\n it('should have correct name', () => {\n const instance = adapter();\n expect(instance.name).toBe('${name}');\n });\n\n it('should generate server entry', async () => {\n const instance = adapter({ port: 4000 });\n const builder = createMockBuilder();\n\n await instance.adapt(builder);\n\n expect(builder.writeFile).toHaveBeenCalledWith(\n 'server.mjs',\n expect.stringContaining('4000')\n );\n });\n\n it('should generate platform config', async () => {\n const instance = adapter();\n const builder = createMockBuilder();\n\n await instance.adapt(builder);\n\n expect(builder.writeFile).toHaveBeenCalledWith(\n 'platform.json',\n expect.any(String)\n );\n });\n\n it('should declare supported features', () => {\n const instance = adapter();\n\n expect(instance.supports?.node?.()).toBeDefined();\n expect(instance.supports?.streaming?.()).toBeDefined();\n });\n\n it('should provide emulation environment', () => {\n const instance = adapter({ port: 5000 });\n const emulation = instance.emulate?.();\n\n expect(emulation?.env?.PORT).toBe('5000');\n expect(emulation?.env?.${name.toUpperCase().replace(/-/g, '_')}_PLATFORM).toBe('true');\n });\n});\n`;\n}\n\nfunction generateReadme(name: string, packageName: string): string {\n return `# ${packageName}\n\nFlight adapter for ${name} platform.\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${packageName}\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`typescript\nimport { defineConfig } from '@flight-framework/core';\nimport ${name.replace(/-/g, '')} from '${packageName}';\n\nexport default defineConfig({\n adapter: ${name.replace(/-/g, '')}({\n port: 3000,\n healthCheck: true,\n }),\n});\n\\`\\`\\`\n\n## Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| \\`port\\` | \\`number\\` | \\`3000\\` | Server port |\n| \\`healthCheck\\` | \\`boolean\\` | \\`true\\` | Enable health check endpoint |\n| \\`env\\` | \\`Record<string, string>\\` | \\`{}\\` | Custom environment variables |\n\n## License\n\nMIT\n`;\n}\n"],"mappings":"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","names":["pc","projectPath","resolve","join","readFileSync","existsSync","pc","existsSync","readFileSync","writeFileSync","mkdirSync","readdirSync","join","pc","resolve","join","existsSync","readFileSync","resolve","existsSync","pc","loadConfig","resolve","existsSync","pc","loadConfig","resolve","pc","loadConfig","pc","resolve","loadConfig","resolve","readdirSync","statSync","existsSync","writeFileSync","mkdirSync","join","dirname","filePathToUrlPath","existsSync","readdirSync","join","statSync","filePathToUrlPath","dirname","mkdirSync","writeFileSync","resolve","resolve","resolve","existsSync","join","execSync","pc","detectPackageManager","existsSync","mkdirSync","writeFileSync","join","pc","pc"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../../../node_modules/.pnpm/cac@6.7.14/node_modules/cac/dist/index.mjs","../src/index.ts","../src/version.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/generators/typegen.ts","../src/commands/build.ts","../src/commands/preview.ts","../src/commands/routes-generate.ts","../src/generators/routes.ts","../src/commands/types-generate.ts","../src/commands/add.ts","../src/commands/adapter-create.ts"],"sourcesContent":["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","import { EventEmitter } from 'events';\n\nfunction toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nfunction mri2 (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\nconst removeBrackets = (v) => v.replace(/[<[].+/, \"\").trim();\nconst findAllBrackets = (v) => {\n const ANGLED_BRACKET_RE_GLOBAL = /<([^>]+)>/g;\n const SQUARE_BRACKET_RE_GLOBAL = /\\[([^\\]]+)\\]/g;\n const res = [];\n const parse = (match) => {\n let variadic = false;\n let value = match[1];\n if (value.startsWith(\"...\")) {\n value = value.slice(3);\n variadic = true;\n }\n return {\n required: match[0].startsWith(\"<\"),\n value,\n variadic\n };\n };\n let angledMatch;\n while (angledMatch = ANGLED_BRACKET_RE_GLOBAL.exec(v)) {\n res.push(parse(angledMatch));\n }\n let squareMatch;\n while (squareMatch = SQUARE_BRACKET_RE_GLOBAL.exec(v)) {\n res.push(parse(squareMatch));\n }\n return res;\n};\nconst getMriOptions = (options) => {\n const result = {alias: {}, boolean: []};\n for (const [index, option] of options.entries()) {\n if (option.names.length > 1) {\n result.alias[option.names[0]] = option.names.slice(1);\n }\n if (option.isBoolean) {\n if (option.negated) {\n const hasStringTypeOption = options.some((o, i) => {\n return i !== index && o.names.some((name) => option.names.includes(name)) && typeof o.required === \"boolean\";\n });\n if (!hasStringTypeOption) {\n result.boolean.push(option.names[0]);\n }\n } else {\n result.boolean.push(option.names[0]);\n }\n }\n }\n return result;\n};\nconst findLongest = (arr) => {\n return arr.sort((a, b) => {\n return a.length > b.length ? -1 : 1;\n })[0];\n};\nconst padRight = (str, length) => {\n return str.length >= length ? str : `${str}${\" \".repeat(length - str.length)}`;\n};\nconst camelcase = (input) => {\n return input.replace(/([a-z])-([a-z])/g, (_, p1, p2) => {\n return p1 + p2.toUpperCase();\n });\n};\nconst setDotProp = (obj, keys, val) => {\n let i = 0;\n let length = keys.length;\n let t = obj;\n let x;\n for (; i < length; ++i) {\n x = t[keys[i]];\n t = t[keys[i]] = i === length - 1 ? val : x != null ? x : !!~keys[i + 1].indexOf(\".\") || !(+keys[i + 1] > -1) ? {} : [];\n }\n};\nconst setByType = (obj, transforms) => {\n for (const key of Object.keys(transforms)) {\n const transform = transforms[key];\n if (transform.shouldTransform) {\n obj[key] = Array.prototype.concat.call([], obj[key]);\n if (typeof transform.transformFunction === \"function\") {\n obj[key] = obj[key].map(transform.transformFunction);\n }\n }\n }\n};\nconst getFileName = (input) => {\n const m = /([^\\\\\\/]+)$/.exec(input);\n return m ? m[1] : \"\";\n};\nconst camelcaseOptionName = (name) => {\n return name.split(\".\").map((v, i) => {\n return i === 0 ? camelcase(v) : v;\n }).join(\".\");\n};\nclass CACError extends Error {\n constructor(message) {\n super(message);\n this.name = this.constructor.name;\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error(message).stack;\n }\n }\n}\n\nclass Option {\n constructor(rawName, description, config) {\n this.rawName = rawName;\n this.description = description;\n this.config = Object.assign({}, config);\n rawName = rawName.replace(/\\.\\*/g, \"\");\n this.negated = false;\n this.names = removeBrackets(rawName).split(\",\").map((v) => {\n let name = v.trim().replace(/^-{1,2}/, \"\");\n if (name.startsWith(\"no-\")) {\n this.negated = true;\n name = name.replace(/^no-/, \"\");\n }\n return camelcaseOptionName(name);\n }).sort((a, b) => a.length > b.length ? 1 : -1);\n this.name = this.names[this.names.length - 1];\n if (this.negated && this.config.default == null) {\n this.config.default = true;\n }\n if (rawName.includes(\"<\")) {\n this.required = true;\n } else if (rawName.includes(\"[\")) {\n this.required = false;\n } else {\n this.isBoolean = true;\n }\n }\n}\n\nconst processArgs = process.argv;\nconst platformInfo = `${process.platform}-${process.arch} node-${process.version}`;\n\nclass Command {\n constructor(rawName, description, config = {}, cli) {\n this.rawName = rawName;\n this.description = description;\n this.config = config;\n this.cli = cli;\n this.options = [];\n this.aliasNames = [];\n this.name = removeBrackets(rawName);\n this.args = findAllBrackets(rawName);\n this.examples = [];\n }\n usage(text) {\n this.usageText = text;\n return this;\n }\n allowUnknownOptions() {\n this.config.allowUnknownOptions = true;\n return this;\n }\n ignoreOptionDefaultValue() {\n this.config.ignoreOptionDefaultValue = true;\n return this;\n }\n version(version, customFlags = \"-v, --version\") {\n this.versionNumber = version;\n this.option(customFlags, \"Display version number\");\n return this;\n }\n example(example) {\n this.examples.push(example);\n return this;\n }\n option(rawName, description, config) {\n const option = new Option(rawName, description, config);\n this.options.push(option);\n return this;\n }\n alias(name) {\n this.aliasNames.push(name);\n return this;\n }\n action(callback) {\n this.commandAction = callback;\n return this;\n }\n isMatched(name) {\n return this.name === name || this.aliasNames.includes(name);\n }\n get isDefaultCommand() {\n return this.name === \"\" || this.aliasNames.includes(\"!\");\n }\n get isGlobalCommand() {\n return this instanceof GlobalCommand;\n }\n hasOption(name) {\n name = name.split(\".\")[0];\n return this.options.find((option) => {\n return option.names.includes(name);\n });\n }\n outputHelp() {\n const {name, commands} = this.cli;\n const {\n versionNumber,\n options: globalOptions,\n helpCallback\n } = this.cli.globalCommand;\n let sections = [\n {\n body: `${name}${versionNumber ? `/${versionNumber}` : \"\"}`\n }\n ];\n sections.push({\n title: \"Usage\",\n body: ` $ ${name} ${this.usageText || this.rawName}`\n });\n const showCommands = (this.isGlobalCommand || this.isDefaultCommand) && commands.length > 0;\n if (showCommands) {\n const longestCommandName = findLongest(commands.map((command) => command.rawName));\n sections.push({\n title: \"Commands\",\n body: commands.map((command) => {\n return ` ${padRight(command.rawName, longestCommandName.length)} ${command.description}`;\n }).join(\"\\n\")\n });\n sections.push({\n title: `For more info, run any command with the \\`--help\\` flag`,\n body: commands.map((command) => ` $ ${name}${command.name === \"\" ? \"\" : ` ${command.name}`} --help`).join(\"\\n\")\n });\n }\n let options = this.isGlobalCommand ? globalOptions : [...this.options, ...globalOptions || []];\n if (!this.isGlobalCommand && !this.isDefaultCommand) {\n options = options.filter((option) => option.name !== \"version\");\n }\n if (options.length > 0) {\n const longestOptionName = findLongest(options.map((option) => option.rawName));\n sections.push({\n title: \"Options\",\n body: options.map((option) => {\n return ` ${padRight(option.rawName, longestOptionName.length)} ${option.description} ${option.config.default === void 0 ? \"\" : `(default: ${option.config.default})`}`;\n }).join(\"\\n\")\n });\n }\n if (this.examples.length > 0) {\n sections.push({\n title: \"Examples\",\n body: this.examples.map((example) => {\n if (typeof example === \"function\") {\n return example(name);\n }\n return example;\n }).join(\"\\n\")\n });\n }\n if (helpCallback) {\n sections = helpCallback(sections) || sections;\n }\n console.log(sections.map((section) => {\n return section.title ? `${section.title}:\n${section.body}` : section.body;\n }).join(\"\\n\\n\"));\n }\n outputVersion() {\n const {name} = this.cli;\n const {versionNumber} = this.cli.globalCommand;\n if (versionNumber) {\n console.log(`${name}/${versionNumber} ${platformInfo}`);\n }\n }\n checkRequiredArgs() {\n const minimalArgsCount = this.args.filter((arg) => arg.required).length;\n if (this.cli.args.length < minimalArgsCount) {\n throw new CACError(`missing required args for command \\`${this.rawName}\\``);\n }\n }\n checkUnknownOptions() {\n const {options, globalCommand} = this.cli;\n if (!this.config.allowUnknownOptions) {\n for (const name of Object.keys(options)) {\n if (name !== \"--\" && !this.hasOption(name) && !globalCommand.hasOption(name)) {\n throw new CACError(`Unknown option \\`${name.length > 1 ? `--${name}` : `-${name}`}\\``);\n }\n }\n }\n }\n checkOptionValue() {\n const {options: parsedOptions, globalCommand} = this.cli;\n const options = [...globalCommand.options, ...this.options];\n for (const option of options) {\n const value = parsedOptions[option.name.split(\".\")[0]];\n if (option.required) {\n const hasNegated = options.some((o) => o.negated && o.names.includes(option.name));\n if (value === true || value === false && !hasNegated) {\n throw new CACError(`option \\`${option.rawName}\\` value is missing`);\n }\n }\n }\n }\n}\nclass GlobalCommand extends Command {\n constructor(cli) {\n super(\"@@global@@\", \"\", {}, cli);\n }\n}\n\nvar __assign = Object.assign;\nclass CAC extends EventEmitter {\n constructor(name = \"\") {\n super();\n this.name = name;\n this.commands = [];\n this.rawArgs = [];\n this.args = [];\n this.options = {};\n this.globalCommand = new GlobalCommand(this);\n this.globalCommand.usage(\"<command> [options]\");\n }\n usage(text) {\n this.globalCommand.usage(text);\n return this;\n }\n command(rawName, description, config) {\n const command = new Command(rawName, description || \"\", config, this);\n command.globalCommand = this.globalCommand;\n this.commands.push(command);\n return command;\n }\n option(rawName, description, config) {\n this.globalCommand.option(rawName, description, config);\n return this;\n }\n help(callback) {\n this.globalCommand.option(\"-h, --help\", \"Display this message\");\n this.globalCommand.helpCallback = callback;\n this.showHelpOnExit = true;\n return this;\n }\n version(version, customFlags = \"-v, --version\") {\n this.globalCommand.version(version, customFlags);\n this.showVersionOnExit = true;\n return this;\n }\n example(example) {\n this.globalCommand.example(example);\n return this;\n }\n outputHelp() {\n if (this.matchedCommand) {\n this.matchedCommand.outputHelp();\n } else {\n this.globalCommand.outputHelp();\n }\n }\n outputVersion() {\n this.globalCommand.outputVersion();\n }\n setParsedInfo({args, options}, matchedCommand, matchedCommandName) {\n this.args = args;\n this.options = options;\n if (matchedCommand) {\n this.matchedCommand = matchedCommand;\n }\n if (matchedCommandName) {\n this.matchedCommandName = matchedCommandName;\n }\n return this;\n }\n unsetMatchedCommand() {\n this.matchedCommand = void 0;\n this.matchedCommandName = void 0;\n }\n parse(argv = processArgs, {\n run = true\n } = {}) {\n this.rawArgs = argv;\n if (!this.name) {\n this.name = argv[1] ? getFileName(argv[1]) : \"cli\";\n }\n let shouldParse = true;\n for (const command of this.commands) {\n const parsed = this.mri(argv.slice(2), command);\n const commandName = parsed.args[0];\n if (command.isMatched(commandName)) {\n shouldParse = false;\n const parsedInfo = __assign(__assign({}, parsed), {\n args: parsed.args.slice(1)\n });\n this.setParsedInfo(parsedInfo, command, commandName);\n this.emit(`command:${commandName}`, command);\n }\n }\n if (shouldParse) {\n for (const command of this.commands) {\n if (command.name === \"\") {\n shouldParse = false;\n const parsed = this.mri(argv.slice(2), command);\n this.setParsedInfo(parsed, command);\n this.emit(`command:!`, command);\n }\n }\n }\n if (shouldParse) {\n const parsed = this.mri(argv.slice(2));\n this.setParsedInfo(parsed);\n }\n if (this.options.help && this.showHelpOnExit) {\n this.outputHelp();\n run = false;\n this.unsetMatchedCommand();\n }\n if (this.options.version && this.showVersionOnExit && this.matchedCommandName == null) {\n this.outputVersion();\n run = false;\n this.unsetMatchedCommand();\n }\n const parsedArgv = {args: this.args, options: this.options};\n if (run) {\n this.runMatchedCommand();\n }\n if (!this.matchedCommand && this.args[0]) {\n this.emit(\"command:*\");\n }\n return parsedArgv;\n }\n mri(argv, command) {\n const cliOptions = [\n ...this.globalCommand.options,\n ...command ? command.options : []\n ];\n const mriOptions = getMriOptions(cliOptions);\n let argsAfterDoubleDashes = [];\n const doubleDashesIndex = argv.indexOf(\"--\");\n if (doubleDashesIndex > -1) {\n argsAfterDoubleDashes = argv.slice(doubleDashesIndex + 1);\n argv = argv.slice(0, doubleDashesIndex);\n }\n let parsed = mri2(argv, mriOptions);\n parsed = Object.keys(parsed).reduce((res, name) => {\n return __assign(__assign({}, res), {\n [camelcaseOptionName(name)]: parsed[name]\n });\n }, {_: []});\n const args = parsed._;\n const options = {\n \"--\": argsAfterDoubleDashes\n };\n const ignoreDefault = command && command.config.ignoreOptionDefaultValue ? command.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue;\n let transforms = Object.create(null);\n for (const cliOption of cliOptions) {\n if (!ignoreDefault && cliOption.config.default !== void 0) {\n for (const name of cliOption.names) {\n options[name] = cliOption.config.default;\n }\n }\n if (Array.isArray(cliOption.config.type)) {\n if (transforms[cliOption.name] === void 0) {\n transforms[cliOption.name] = Object.create(null);\n transforms[cliOption.name][\"shouldTransform\"] = true;\n transforms[cliOption.name][\"transformFunction\"] = cliOption.config.type[0];\n }\n }\n }\n for (const key of Object.keys(parsed)) {\n if (key !== \"_\") {\n const keys = key.split(\".\");\n setDotProp(options, keys, parsed[key]);\n setByType(options, transforms);\n }\n }\n return {\n args,\n options\n };\n }\n runMatchedCommand() {\n const {args, options, matchedCommand: command} = this;\n if (!command || !command.commandAction)\n return;\n command.checkUnknownOptions();\n command.checkOptionValue();\n command.checkRequiredArgs();\n const actionArgs = [];\n command.args.forEach((arg, index) => {\n if (arg.variadic) {\n actionArgs.push(args.slice(index));\n } else {\n actionArgs.push(args[index]);\n }\n });\n actionArgs.push(options);\n return command.commandAction.apply(this, actionArgs);\n }\n}\n\nconst cac = (name = \"\") => new CAC(name);\n\nexport default cac;\nexport { CAC, Command, cac };\n","import { cac } from 'cac';\r\nimport pc from 'picocolors';\r\nimport { VERSION } from './version.js';\r\nimport { createCommand } from './commands/create.js';\r\nimport { devCommand } from './commands/dev.js';\r\nimport { buildCommand } from './commands/build.js';\r\nimport { previewCommand } from './commands/preview.js';\r\nimport { routesGenerateCommand } from './commands/routes-generate.js';\r\nimport { typesGenerateCommand } from './commands/types-generate.js';\r\nimport { addCommand } from './commands/add.js';\r\nimport { adapterCreateCommand } from './commands/adapter-create.js';\r\n\r\nconst cli = cac('flight');\r\n\r\n// Logo\r\nconst LOGO = `\r\n${pc.cyan(' ███████╗██╗ ██╗ ██████╗ ██╗ ██╗████████╗')}\r\n${pc.cyan(' ██╔════╝██║ ██║██╔════╝ ██║ ██║╚══██╔══╝')}\r\n${pc.cyan(' █████╗ ██║ ██║██║ ███╗███████║ ██║ ')}\r\n${pc.cyan(' ██╔══╝ ██║ ██║██║ ██║██╔══██║ ██║ ')}\r\n${pc.cyan(' ██║ ███████╗██║╚██████╔╝██║ ██║ ██║ ')}\r\n${pc.cyan(' ╚═╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ')}\r\n \r\n ${pc.dim('The Agnostic Full-Stack Framework')}\r\n ${pc.dim('Maximum Flexibility. Zero Lock-in.')}\r\n`;\r\n\r\nexport function printLogo(): void {\r\n console.log(LOGO);\r\n}\r\n\r\n// Version\r\ncli.version(VERSION);\r\ncli.help();\r\n\r\n// Commands\r\ncli\r\n .command('create [name]', 'Create a new Flight project')\r\n .option('-t, --template <template>', 'Project template to use', { default: 'basic' })\r\n .option('--ui <framework>', 'UI framework (react, vue, svelte, solid, vanilla)')\r\n .option('--use-case <useCase>', 'Use-case template (blog, ecommerce, saas, api, docs)')\r\n .option('--ts', 'Use TypeScript', { default: true })\r\n .option('--git', 'Initialize git repository', { default: true })\r\n .option('--install', 'Install dependencies', { default: true })\r\n .option('--raw', 'Create raw project (100% Web Standards, zero dependencies)')\r\n .option('--empty', 'Create empty project (just package.json)')\r\n .option('--minimal', 'Create minimal project (single server file with Flight)')\r\n .action(createCommand);\r\n\r\ncli\r\n .command('add [package]', 'Add a Flight package to your project')\r\n .action(addCommand);\r\n\r\ncli\r\n .command('dev', 'Start development server')\r\n .option('-p, --port <port>', 'Port to listen on')\r\n .option('-h, --host <host>', 'Host to bind to')\r\n .option('--open', 'Open browser on start')\r\n .option('--https', 'Enable HTTPS')\r\n .option('--ssr', 'Enable Server-Side Rendering')\r\n .action(devCommand);\r\n\r\ncli\r\n .command('build', 'Build for production')\r\n .option('--outDir <dir>', 'Output directory')\r\n .option('--sourcemap', 'Generate source maps')\r\n .option('--minify', 'Minify output', { default: true })\r\n .action(buildCommand);\r\n\r\ncli\r\n .command('preview', 'Preview production build')\r\n .option('-p, --port <port>', 'Port to listen on')\r\n .option('-h, --host <host>', 'Host to bind to')\r\n .option('--open', 'Open browser on start')\r\n .action(previewCommand);\r\n\r\ncli\r\n .command('routes:generate', 'Generate route manifest from routes directory')\r\n .option('--routesDir <dir>', 'Routes directory', { default: 'src/routes' })\r\n .option('--outputDir <dir>', 'Output directory', { default: 'src/.flight' })\r\n .action(routesGenerateCommand);\r\n\r\ncli\r\n .command('types:generate', 'Generate TypeScript types for routes and environment')\r\n .option('--routesDir <dir>', 'Routes directory', { default: 'src/routes' })\r\n .option('--outputDir <dir>', 'Output directory', { default: 'src/.flight' })\r\n .option('--routes', 'Generate route types', { default: true })\r\n .option('--env', 'Generate environment variable types')\r\n .option('--watch', 'Watch for changes and regenerate')\r\n .action(typesGenerateCommand);\r\n\r\ncli\r\n .command('adapter:create <name>', 'Create a new adapter package')\r\n .option('-t, --type <type>', 'Platform type (node, edge, container, serverless)', { default: 'node' })\r\n .option('--validation', 'Include Zod validation example')\r\n .option('--outputDir <dir>', 'Output directory')\r\n .action(adapterCreateCommand);\r\n\r\n// Parse and run\r\nexport function run(): void {\r\n try {\r\n cli.parse(process.argv, { run: false });\r\n\r\n // Show logo for help\r\n if (cli.options.help || process.argv.length <= 2) {\r\n printLogo();\r\n }\r\n\r\n cli.runMatchedCommand();\r\n } catch (error) {\r\n console.error(pc.red('Error:'), error instanceof Error ? error.message : error);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport { VERSION };\r\n","export const VERSION = '0.0.1';\r\n","/**\r\n * Flight CLI - Create Command\r\n * \r\n * Scaffold a new Flight project using external templates.\r\n * Follows 2026 best practices: external templates, minimal CLI logic.\r\n */\r\n\r\nimport { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, copyFileSync, statSync, unlinkSync } from 'node:fs';\r\nimport { join, resolve, dirname } from 'node:path';\r\nimport { execSync } from 'node:child_process';\r\nimport { fileURLToPath } from 'node:url';\r\nimport pc from 'picocolors';\r\nimport prompts from 'prompts';\r\nimport { printLogo } from '../index.js';\r\n\r\nconst __dirname = dirname(fileURLToPath(import.meta.url));\r\nconst TEMPLATES_DIR = resolve(__dirname, '../../templates');\r\n\r\ninterface CreateOptions {\r\n template: string;\r\n ui?: string;\r\n bundler?: string;\r\n useCase?: string;\r\n ts: boolean;\r\n git: boolean;\r\n install: boolean;\r\n /** Create empty project (just package.json) */\r\n empty: boolean;\r\n /** Create minimal project (single server file with Flight) */\r\n minimal: boolean;\r\n /** Create raw project (100% Web Standards, zero Flight dependencies) */\r\n raw: boolean;\r\n}\r\n\r\nconst UI_FRAMEWORKS = [\r\n { title: 'React', value: 'react', description: 'The library for web and native user interfaces' },\r\n { title: 'Vue', value: 'vue', description: 'The progressive JavaScript framework' },\r\n { title: 'Svelte', value: 'svelte', description: 'Cybernetically enhanced web apps' },\r\n { title: 'Solid', value: 'solid', description: 'Simple and performant reactivity' },\r\n { title: 'Preact', value: 'preact', description: 'Fast 3kB alternative to React' },\r\n { title: 'Qwik', value: 'qwik', description: 'Resumable framework with O(1) loading' },\r\n { title: 'Lit', value: 'lit', description: 'Fast, lightweight Web Components' },\r\n { title: 'Htmx', value: 'htmx', description: 'HTML over the wire, no JavaScript' },\r\n { title: 'Vanilla', value: 'vanilla', description: 'No framework, just TypeScript' },\r\n];\r\n\r\nconst BUNDLERS = [\r\n { title: 'Vite', value: 'vite', description: 'Next Gen Frontend Tooling (recommended)' },\r\n { title: 'esbuild', value: 'esbuild', description: 'Ultra-fast builds for performance-focused projects' },\r\n { title: 'Rolldown', value: 'rolldown', description: 'Rust-based Rollup replacement (experimental)' },\r\n];\r\n\r\nconst USE_CASES = [\r\n { title: 'Web Application', value: '', description: 'Choose UI framework manually' },\r\n { title: 'Blog', value: 'blog', description: 'Blog with SEO and markdown support' },\r\n { title: 'E-commerce', value: 'ecommerce', description: 'Store with products and cart' },\r\n { title: 'SaaS', value: 'saas', description: 'SaaS app with auth and dashboard' },\r\n { title: 'API Only', value: 'api', description: 'REST API without UI' },\r\n { title: 'Documentation', value: 'docs', description: 'Documentation site' },\r\n];\r\n\r\nexport async function createCommand(\r\n name: string | undefined,\r\n options: CreateOptions\r\n): Promise<void> {\r\n printLogo();\r\n console.log(pc.cyan('\\n[*] Creating a new Flight project...\\n'));\r\n\r\n // Interactive prompts\r\n let projectName = name;\r\n let uiFramework = options.ui;\r\n\r\n if (!projectName) {\r\n const response = await prompts({\r\n type: 'text',\r\n name: 'name',\r\n message: 'Project name:',\r\n initial: 'my-flight-app',\r\n validate: (value: string) => {\r\n if (!value) return 'Project name is required';\r\n if (!/^[a-z0-9-_]+$/i.test(value)) return 'Invalid project name';\r\n return true;\r\n },\r\n });\r\n projectName = response.name;\r\n }\r\n\r\n if (!projectName) {\r\n console.log(pc.red('Project creation cancelled.'));\r\n return;\r\n }\r\n\r\n // Handle --raw mode: 100% Web Standards, ZERO Flight dependencies\r\n if (options.raw) {\r\n const projectPath = resolve(process.cwd(), projectName);\r\n createRawProject(projectPath, projectName, options);\r\n return;\r\n }\r\n\r\n // Handle --empty mode: just package.json\r\n if (options.empty) {\r\n const projectPath = resolve(process.cwd(), projectName);\r\n createEmptyProject(projectPath, projectName, options);\r\n return;\r\n }\r\n\r\n // Handle --minimal mode: single file project with Flight\r\n if (options.minimal) {\r\n const projectPath = resolve(process.cwd(), projectName);\r\n createMinimalProject(projectPath, projectName, options);\r\n return;\r\n }\r\n\r\n if (!uiFramework) {\r\n const response = await prompts({\r\n type: 'select',\r\n name: 'ui',\r\n message: 'Choose your UI framework:',\r\n choices: UI_FRAMEWORKS,\r\n initial: 0,\r\n });\r\n uiFramework = response.ui;\r\n }\r\n\r\n if (!uiFramework) {\r\n console.log(pc.red('Project creation cancelled.'));\r\n return;\r\n }\r\n\r\n // Check for use-case templates\r\n let useCase = options.useCase;\r\n const useCaseDir = join(TEMPLATES_DIR, 'use-cases', useCase || '');\r\n const isUseCase = useCase && existsSync(useCaseDir);\r\n\r\n // Bundler selection\r\n let bundler = options.bundler;\r\n if (!bundler) {\r\n const response = await prompts({\r\n type: 'select',\r\n name: 'bundler',\r\n message: 'Choose your bundler:',\r\n choices: BUNDLERS,\r\n initial: 0,\r\n });\r\n bundler = response.bundler;\r\n }\r\n\r\n if (!bundler) {\r\n console.log(pc.red('Project creation cancelled.'));\r\n return;\r\n }\r\n\r\n const projectPath = resolve(process.cwd(), projectName);\r\n\r\n // Check if directory exists and is not empty\r\n if (existsSync(projectPath)) {\r\n const files = readdirSync(projectPath);\r\n if (files.length > 0) {\r\n const response = await prompts({\r\n type: 'confirm',\r\n name: 'overwrite',\r\n message: `Directory ${projectName} is not empty. Continue anyway?`,\r\n initial: false,\r\n });\r\n if (!response.overwrite) {\r\n console.log(pc.red('Project creation cancelled.'));\r\n return;\r\n }\r\n }\r\n }\r\n\r\n console.log(pc.dim(`\\nCreating project in ${projectPath}...\\n`));\r\n\r\n try {\r\n // Copy templates\r\n if (isUseCase && useCase) {\r\n copyUseCaseTemplate(projectPath, useCase, projectName);\r\n } else {\r\n copyTemplate(projectPath, uiFramework, bundler, projectName);\r\n }\r\n console.log(pc.green('[OK]') + ' Project structure created');\r\n\r\n // Initialize git\r\n if (options.git) {\r\n try {\r\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\r\n console.log(pc.green('✓') + ' Git repository initialized');\r\n } catch {\r\n console.log(pc.yellow('[!]') + ' Could not initialize git repository');\r\n }\r\n }\r\n\r\n // Install dependencies\r\n if (options.install) {\r\n console.log(pc.dim('\\nInstalling dependencies...\\n'));\r\n try {\r\n const pm = detectPackageManager();\r\n execSync(`${pm} install`, { cwd: projectPath, stdio: 'inherit' });\r\n console.log(pc.green('\\n✓') + ' Dependencies installed');\r\n } catch {\r\n console.log(pc.yellow('\\n[!]') + ' Could not install dependencies. Run `npm install` manually.');\r\n }\r\n }\r\n\r\n // Success message\r\n console.log(`\r\n${pc.green('[OK] Project created successfully!')}\r\n\r\n${pc.cyan('Next steps:')}\r\n\r\n ${pc.dim('$')} cd ${projectName}\r\n ${pc.dim('$')} ${options.install ? '' : 'npm install && '}npm run dev\r\n\r\n${pc.dim('Your project is 100% yours:')}\r\n ${pc.dim('•')} No telemetry\r\n ${pc.dim('•')} No lock-in\r\n ${pc.dim('•')} Deploy anywhere\r\n\r\n${pc.cyan('Happy flying!')}\r\n`);\r\n } catch (error) {\r\n console.error(pc.red('Failed to create project:'), error);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nfunction detectPackageManager(): string {\r\n if (process.env.npm_config_user_agent?.includes('pnpm')) return 'pnpm';\r\n if (process.env.npm_config_user_agent?.includes('yarn')) return 'yarn';\r\n if (process.env.npm_config_user_agent?.includes('bun')) return 'bun';\r\n return 'npm';\r\n}\r\n\r\n/**\r\n * Copy template files to project directory\r\n */\r\nfunction copyTemplate(projectPath: string, ui: string, bundler: string, projectName: string): void {\r\n const baseDir = join(TEMPLATES_DIR, 'base');\r\n const uiDir = join(TEMPLATES_DIR, ui);\r\n\r\n // Ensure directories exist\r\n mkdirSync(projectPath, { recursive: true });\r\n mkdirSync(join(projectPath, 'src'), { recursive: true });\r\n mkdirSync(join(projectPath, 'src/styles'), { recursive: true });\r\n mkdirSync(join(projectPath, 'public'), { recursive: true });\r\n\r\n // Variables for template substitution\r\n const vars = {\r\n '{{PROJECT_NAME}}': projectName,\r\n '{{UI_FRAMEWORK}}': ui,\r\n '{{BUNDLER}}': bundler,\r\n '{{BUNDLER_PACKAGE}}': `@flight-framework/bundler-${bundler}`,\r\n '{{LANGUAGE}}': 'TypeScript',\r\n };\r\n\r\n // Copy base files\r\n copyDirWithTemplates(baseDir, projectPath, vars);\r\n\r\n // Copy UI-specific files (override base if needed)\r\n copyDirWithTemplates(uiDir, projectPath, vars);\r\n\r\n // Rename special files\r\n const gitignoreSrc = join(projectPath, '_gitignore');\r\n const gitignoreDest = join(projectPath, '.gitignore');\r\n if (existsSync(gitignoreSrc)) {\r\n copyFileSync(gitignoreSrc, gitignoreDest);\r\n unlinkSync(gitignoreSrc);\r\n }\r\n}\r\n\r\n/**\r\n * Copy use-case template files to project directory\r\n */\r\nfunction copyUseCaseTemplate(projectPath: string, useCase: string, projectName: string): void {\r\n const useCaseDir = join(TEMPLATES_DIR, 'use-cases', useCase);\r\n\r\n // Ensure project directory exists\r\n mkdirSync(projectPath, { recursive: true });\r\n\r\n // Variables for template substitution\r\n const vars = {\r\n '{{PROJECT_NAME}}': projectName,\r\n '{{USE_CASE}}': useCase,\r\n };\r\n\r\n // Copy use-case files\r\n copyDirWithTemplates(useCaseDir, projectPath, vars);\r\n}\r\n\r\n/**\r\n * Recursively copy directory, processing .template files\r\n */\r\nfunction copyDirWithTemplates(\r\n srcDir: string,\r\n destDir: string,\r\n vars: Record<string, string>\r\n): void {\r\n if (!existsSync(srcDir)) return;\r\n\r\n const entries = readdirSync(srcDir, { withFileTypes: true });\r\n\r\n for (const entry of entries) {\r\n const srcPath = join(srcDir, entry.name);\r\n let destName = entry.name;\r\n let isTemplate = false;\r\n\r\n // Handle .template extension\r\n if (destName.endsWith('.template')) {\r\n destName = destName.replace('.template', '');\r\n isTemplate = true;\r\n }\r\n\r\n const destPath = join(destDir, destName);\r\n\r\n if (entry.isDirectory()) {\r\n mkdirSync(destPath, { recursive: true });\r\n copyDirWithTemplates(srcPath, destPath, vars);\r\n } else {\r\n let content = readFileSync(srcPath, 'utf-8');\r\n\r\n // Apply template substitutions\r\n if (isTemplate || destName.endsWith('.json') || destName.endsWith('.html') || destName.endsWith('.md')) {\r\n for (const [key, value] of Object.entries(vars)) {\r\n content = content.replaceAll(key, value);\r\n }\r\n }\r\n\r\n writeFileSync(destPath, content);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create a raw project with 100% Web Standards, ZERO Flight dependencies\r\n * True zero lock-in: works on Bun, Deno, Node 22+, Cloudflare Workers\r\n */\r\nfunction createRawProject(projectPath: string, projectName: string, options: CreateOptions): void {\r\n mkdirSync(projectPath, { recursive: true });\r\n\r\n const packageJson = {\r\n name: projectName,\r\n version: '0.0.1',\r\n type: 'module',\r\n scripts: {\r\n // Works with Bun, Node 22+, or Deno\r\n 'dev': 'node --watch server.js',\r\n 'dev:bun': 'bun --watch server.js',\r\n 'dev:deno': 'deno run --allow-net server.js',\r\n 'start': 'node server.js',\r\n },\r\n dependencies: {},\r\n devDependencies: {},\r\n };\r\n\r\n writeFileSync(\r\n join(projectPath, 'package.json'),\r\n JSON.stringify(packageJson, null, 2)\r\n );\r\n\r\n // 100% Web Standards server - NO Flight dependencies\r\n const serverCode = `/**\r\n * ${projectName}\r\n * \r\n * 100% Web Standards server. Zero dependencies. Zero lock-in.\r\n * Works on: Bun, Deno, Node 22+, Cloudflare Workers\r\n * \r\n * Run:\r\n * bun server.js\r\n * deno run --allow-net server.js\r\n * node server.js (Node 22+)\r\n */\r\n\r\n/**\r\n * Handle incoming requests using Web Standard APIs\r\n * @param {Request} request\r\n * @returns {Response}\r\n */\r\nfunction handleRequest(request) {\r\n const url = new URL(request.url);\r\n const method = request.method;\r\n \r\n // Router\r\n if (method === 'GET' && url.pathname === '/') {\r\n return Response.json({\r\n message: 'Hello World!',\r\n runtime: detectRuntime(),\r\n docs: 'https://flight.dev/docs/quickstart-http',\r\n });\r\n }\r\n \r\n if (method === 'GET' && url.pathname === '/health') {\r\n return Response.json({\r\n status: 'ok',\r\n timestamp: Date.now(),\r\n });\r\n }\r\n \r\n if (method === 'GET' && url.pathname.startsWith('/api/')) {\r\n return Response.json({\r\n path: url.pathname,\r\n query: Object.fromEntries(url.searchParams),\r\n });\r\n }\r\n \r\n // 404\r\n return Response.json(\r\n { error: 'Not Found', path: url.pathname },\r\n { status: 404 }\r\n );\r\n}\r\n\r\n/**\r\n * Detect which runtime we're running on\r\n */\r\nfunction detectRuntime() {\r\n if (typeof Bun !== 'undefined') return 'bun';\r\n if (typeof Deno !== 'undefined') return 'deno';\r\n return 'node';\r\n}\r\n\r\n// Export for different runtimes\r\nconst port = process.env.PORT || 3000;\r\n\r\n// Bun / Cloudflare Workers style\r\nexport default {\r\n port,\r\n fetch: handleRequest,\r\n};\r\n\r\n// Also start server for Node.js\r\nif (detectRuntime() === 'node') {\r\n const { serve } = await import('node:http');\r\n serve({ port }, (req, res) => {\r\n const url = 'http://localhost' + req.url;\r\n const request = new Request(url, { method: req.method });\r\n handleRequest(request).then(response => {\r\n res.writeHead(response.status, Object.fromEntries(response.headers));\r\n response.text().then(body => res.end(body));\r\n });\r\n });\r\n console.log(\\`Server running at http://localhost:\\${port}\\`);\r\n}\r\n`;\r\n\r\n writeFileSync(join(projectPath, 'server.js'), serverCode);\r\n\r\n // Create .gitignore\r\n if (options.git) {\r\n writeFileSync(\r\n join(projectPath, '.gitignore'),\r\n 'node_modules\\ndist\\n.env\\n.env.local\\n'\r\n );\r\n try {\r\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\r\n } catch { /* ignore */ }\r\n }\r\n\r\n console.log(`\r\n${pc.green('[OK] Raw project created!')}\r\n\r\n${pc.bold('ZERO dependencies. ZERO lock-in. 100% Web Standards.')}\r\n\r\n${pc.cyan('Run with any runtime:')}\r\n\r\n ${pc.dim('# Bun (fastest)')}\r\n bun server.js\r\n\r\n ${pc.dim('# Deno')}\r\n deno run --allow-net server.js\r\n\r\n ${pc.dim('# Node.js 22+')}\r\n node server.js\r\n\r\n${pc.dim('Want to add Flight later? Just run:')}\r\n flight add http ${pc.dim('# HTTP server with routing')}\r\n flight add db ${pc.dim('# Database abstraction')}\r\n flight add cache ${pc.dim('# Caching layer')}\r\n\r\n${pc.dim('Path:')} ${projectPath}\r\n`);\r\n}\r\n\r\n/**\r\n * Create an empty project with just package.json\r\n * Ultimate toolbox approach: start from zero\r\n */\r\nfunction createEmptyProject(projectPath: string, projectName: string, options: CreateOptions): void {\r\n mkdirSync(projectPath, { recursive: true });\r\n\r\n const packageJson = {\r\n name: projectName,\r\n version: '0.0.1',\r\n type: 'module',\r\n scripts: {\r\n dev: 'node server.js',\r\n },\r\n dependencies: {},\r\n devDependencies: {},\r\n };\r\n\r\n writeFileSync(\r\n join(projectPath, 'package.json'),\r\n JSON.stringify(packageJson, null, 2)\r\n );\r\n\r\n // Create .gitignore\r\n if (options.git) {\r\n writeFileSync(\r\n join(projectPath, '.gitignore'),\r\n 'node_modules\\ndist\\n.env\\n.env.local\\n'\r\n );\r\n try {\r\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\r\n } catch { /* ignore */ }\r\n }\r\n\r\n console.log(`\r\n${pc.green('[OK] Empty project created!')}\r\n\r\n${pc.cyan('Your project is a blank canvas.')} Add what you need:\r\n\r\n ${pc.dim('# HTTP server')}\r\n npm install @flight-framework/http\r\n\r\n ${pc.dim('# Database')}\r\n npm install @flight-framework/db\r\n\r\n ${pc.dim('# Cache')}\r\n npm install @flight-framework/cache\r\n\r\n ${pc.dim('# Authentication')}\r\n npm install @flight-framework/auth\r\n\r\n${pc.dim('Path:')} ${projectPath}\r\n`);\r\n}\r\n\r\n/**\r\n * Create a minimal project with a single server file\r\n * One step up from empty: working server in one file\r\n */\r\nfunction createMinimalProject(projectPath: string, projectName: string, options: CreateOptions): void {\r\n mkdirSync(projectPath, { recursive: true });\r\n\r\n const packageJson = {\r\n name: projectName,\r\n version: '0.0.1',\r\n type: 'module',\r\n scripts: {\r\n dev: 'node --watch server.js',\r\n start: 'node server.js',\r\n },\r\n dependencies: {\r\n '@flight-framework/http': '^0.0.1',\r\n },\r\n };\r\n\r\n writeFileSync(\r\n join(projectPath, 'package.json'),\r\n JSON.stringify(packageJson, null, 2)\r\n );\r\n\r\n const serverCode = `/**\r\n * ${projectName} - Built with Flight\r\n * \r\n * This is a minimal Flight server. Add more as you need.\r\n * Run: npm run dev\r\n */\r\n\r\nimport { createServer } from '@flight-framework/http';\r\n\r\nconst app = createServer();\r\n\r\n// Your routes\r\napp.get('/', (c) => c.json({ \r\n message: 'Hello from Flight!',\r\n docs: 'https://flight.dev/docs/quickstart-http'\r\n}));\r\n\r\napp.get('/health', (c) => c.json({ \r\n status: 'ok', \r\n timestamp: Date.now() \r\n}));\r\n\r\n// Start server\r\nconst port = process.env.PORT || 3000;\r\nconsole.log(\\`Server running at http://localhost:\\${port}\\`);\r\n\r\nexport default { port, fetch: app.fetch };\r\n`;\r\n\r\n writeFileSync(join(projectPath, 'server.js'), serverCode);\r\n\r\n // Create .gitignore\r\n if (options.git) {\r\n writeFileSync(\r\n join(projectPath, '.gitignore'),\r\n 'node_modules\\ndist\\n.env\\n.env.local\\n'\r\n );\r\n try {\r\n execSync('git init', { cwd: projectPath, stdio: 'ignore' });\r\n } catch { /* ignore */ }\r\n }\r\n\r\n // Install if requested\r\n if (options.install) {\r\n console.log(pc.dim('\\\\nInstalling dependencies...\\\\n'));\r\n try {\r\n const pm = detectPackageManager();\r\n execSync(`${pm} install`, { cwd: projectPath, stdio: 'inherit' });\r\n } catch { /* ignore */ }\r\n }\r\n\r\n console.log(`\r\n${pc.green('[OK] Minimal project created!')}\r\n\r\n${pc.cyan('Next steps:')}\r\n\r\n ${pc.dim('$')} cd ${projectName}\r\n ${pc.dim('$')} ${options.install ? '' : 'npm install && '}npm run dev\r\n\r\n${pc.dim('Add more features as needed:')}\r\n\r\n ${pc.dim('# File-based routing')}\r\n npm install @flight-framework/core\r\n\r\n ${pc.dim('# Database')}\r\n npm install @flight-framework/db pg\r\n\r\n ${pc.dim('# Caching')}\r\n npm install @flight-framework/cache\r\n\r\n${pc.cyan('Happy flying!')}\r\n`);\r\n}\r\n","/**\r\n * Flight CLI - Dev Command (SSR Enhanced)\r\n * \r\n * Start the development server with:\r\n * - Server-Side Rendering (renderToPipeableStream)\r\n * - Vite for HMR and asset transformation\r\n * - @flight-framework/http integration\r\n * - Automatic route type generation\r\n */\r\n\r\nimport { resolve, join } from 'node:path';\r\nimport { readFileSync, existsSync } from 'node:fs';\r\nimport pc from 'picocolors';\r\nimport { loadConfig } from '@flight-framework/core/config';\r\nimport { printLogo } from '../index.js';\r\nimport { generateTypes, watchAndGenerate } from '../generators/typegen.js';\r\n\r\ninterface DevOptions {\r\n port?: string;\r\n host?: string;\r\n open?: boolean;\r\n https?: boolean;\r\n ssr?: boolean;\r\n}\r\n\r\nexport async function devCommand(options: DevOptions): Promise<void> {\r\n const startTime = Date.now();\r\n\r\n printLogo();\r\n console.log(pc.cyan('\\n Starting Flight development server...\\n'));\r\n\r\n try {\r\n // Load config\r\n const root = resolve(process.cwd());\r\n const config = await loadConfig(root);\r\n\r\n // Generate route types on startup\r\n const routesDir = join(root, 'src', 'routes');\r\n const outputDir = join(root, 'src', '.flight');\r\n\r\n if (existsSync(routesDir)) {\r\n try {\r\n const result = await generateTypes({\r\n routesDir,\r\n outputDir,\r\n includeRoutes: true,\r\n includeEnv: false,\r\n projectRoot: root,\r\n });\r\n console.log(pc.green(` Route types generated: ${result.routeCount} routes`));\r\n\r\n // Watch for route file changes and regenerate types\r\n const cleanup = watchAndGenerate({\r\n routesDir,\r\n outputDir,\r\n includeRoutes: true,\r\n includeEnv: false,\r\n projectRoot: root,\r\n onRegenerate: (watchResult) => {\r\n console.log(pc.blue(` Route types updated: ${watchResult.routeCount} routes`));\r\n },\r\n });\r\n\r\n // Cleanup on process exit\r\n process.on('SIGINT', () => cleanup());\r\n process.on('SIGTERM', () => cleanup());\r\n } catch (typeError) {\r\n console.log(pc.yellow(` Route type generation skipped: ${typeError}`));\r\n }\r\n }\r\n\r\n // Merge CLI options with config\r\n const port = options.port ? parseInt(options.port, 10) : config.dev.port;\r\n const host = options.host ?? config.dev.host;\r\n const open = options.open ?? config.dev.open;\r\n\r\n // Check if SSR mode is enabled\r\n const ssrEnabled = options.ssr ?? config.rendering?.default === 'ssr';\r\n const entryServerPath = join(root, 'src', 'entry-server.tsx');\r\n const hasSSREntry = existsSync(entryServerPath);\r\n\r\n // Dynamic import vite to avoid bundling issues\r\n const { createServer: createViteServer } = await import('vite');\r\n\r\n // Try to import Flight HTTP and file router\r\n let flightHttpAvailable = false;\r\n let flightRouterAvailable = false;\r\n\r\n try {\r\n await import('@flight-framework/http');\r\n flightHttpAvailable = true;\r\n } catch {\r\n // @flight-framework/http not installed\r\n }\r\n\r\n try {\r\n await import('@flight-framework/core/file-router');\r\n flightRouterAvailable = true;\r\n } catch {\r\n // file-router not available\r\n }\r\n\r\n // Create Vite dev server in middleware mode for SSR\r\n const vite = await createViteServer({\r\n root,\r\n mode: 'development',\r\n server: {\r\n middlewareMode: ssrEnabled && hasSSREntry,\r\n port: ssrEnabled && hasSSREntry ? undefined : port,\r\n host: host === true ? '0.0.0.0' : host,\r\n open: ssrEnabled && hasSSREntry ? false : open,\r\n https: options.https ? {} : undefined,\r\n },\r\n appType: ssrEnabled && hasSSREntry ? 'custom' : 'spa',\r\n plugins: [\r\n // Add Flight plugin when @flight-framework/http is available\r\n flightHttpAvailable ? flightDevPlugin(root) : null,\r\n ].filter(Boolean),\r\n });\r\n\r\n // SSR Mode with custom server\r\n if (ssrEnabled && hasSSREntry) {\r\n await startSSRServer(vite, root, port, host);\r\n } else {\r\n // CSR Mode - standard Vite server\r\n await vite.listen();\r\n }\r\n\r\n const elapsed = Date.now() - startTime;\r\n const isSSR = ssrEnabled && hasSSREntry;\r\n\r\n console.log(`\r\n ${pc.green('✓')} Flight dev server ready in ${pc.bold(elapsed + 'ms')}\r\n\r\n ${pc.cyan('➜')} Local: ${pc.cyan(`http://localhost:${port}/`)}\r\n ${host === true || host === '0.0.0.0' ? ` ${pc.cyan('➜')} Network: ${pc.cyan(`http://${getNetworkAddress()}:${port}/`)}` : ''}\r\n \r\n ${isSSR ? pc.green('✓') : pc.yellow('○')} SSR ${isSSR ? 'enabled (streaming)' : 'disabled (CSR mode)'}\r\n ${flightHttpAvailable ? pc.green('✓') : pc.yellow('○')} @flight-framework/http ${flightHttpAvailable ? 'enabled' : 'not installed'}\r\n ${flightRouterAvailable ? pc.green('✓') : pc.yellow('○')} File-based routing ${flightRouterAvailable ? 'enabled' : 'not available'}\r\n\r\n ${pc.dim('press')} ${pc.bold('h')} ${pc.dim('to show help')}\r\n`);\r\n\r\n // Handle server shortcuts\r\n if (!isSSR) {\r\n vite.bindCLIShortcuts({ print: true });\r\n }\r\n\r\n } catch (error) {\r\n console.error(pc.red('\\nFailed to start dev server:'), error);\r\n process.exit(1);\r\n }\r\n}\r\n\r\n/**\r\n * Start SSR server with Vite middleware and file-based page routing\r\n */\r\nasync function startSSRServer(\r\n vite: any,\r\n root: string,\r\n port: number,\r\n host: string | boolean\r\n): Promise<void> {\r\n const { createServer: createHttpServer } = await import('node:http');\r\n\r\n // Try to load file-based page router\r\n let pageRouter: any = null;\r\n try {\r\n const { createFileRouter } = await import('@flight-framework/core/file-router');\r\n\r\n // Create module loader that uses Vite's ssrLoadModule for TSX support\r\n const moduleLoader = async (filePath: string) => {\r\n // Normalize both paths to use forward slashes for Vite\r\n const normalizedFilePath = filePath.replace(/\\\\/g, '/');\r\n const normalizedRoot = root.replace(/\\\\/g, '/');\r\n // Create relative path that Vite expects (starts with /)\r\n const relativePath = normalizedFilePath.replace(normalizedRoot, '');\r\n return vite.ssrLoadModule(relativePath);\r\n };\r\n\r\n pageRouter = await createFileRouter({\r\n directory: join(root, 'src', 'routes'),\r\n extensions: ['.tsx', '.ts', '.jsx', '.js'],\r\n moduleLoader, // Use Vite's ssrLoadModule\r\n });\r\n console.log(pc.green(` ✓ Page router loaded: ${pageRouter.routes.filter((r: any) => r.type === 'page').length} pages`));\r\n } catch {\r\n // File router not available, use entry-server only\r\n }\r\n\r\n // Create a simple connect-like middleware handler\r\n const server = createHttpServer(async (req, res) => {\r\n const url = req.url || '/';\r\n const pathname = url.split('?')[0];\r\n\r\n // Check if this is a static asset request\r\n const isStaticAsset =\r\n url.startsWith('/@') ||\r\n url.startsWith('/node_modules') ||\r\n (url.startsWith('/src') && !url.includes('entry-server')) ||\r\n // Static file extensions\r\n pathname.endsWith('.css') ||\r\n pathname.endsWith('.js') ||\r\n pathname.endsWith('.ts') ||\r\n pathname.endsWith('.tsx') ||\r\n pathname.endsWith('.svg') ||\r\n pathname.endsWith('.png') ||\r\n pathname.endsWith('.jpg') ||\r\n pathname.endsWith('.jpeg') ||\r\n pathname.endsWith('.gif') ||\r\n pathname.endsWith('.ico') ||\r\n pathname.endsWith('.woff') ||\r\n pathname.endsWith('.woff2') ||\r\n pathname.endsWith('.ttf') ||\r\n pathname.endsWith('.eot') ||\r\n pathname.endsWith('.json') ||\r\n pathname.endsWith('.webp') ||\r\n pathname.endsWith('.mp4') ||\r\n pathname.endsWith('.webm');\r\n\r\n // Let Vite handle static assets\r\n if (isStaticAsset) {\r\n vite.middlewares(req, res);\r\n return;\r\n }\r\n\r\n // Skip SSR for API routes - let Flight HTTP middleware handle them\r\n if (pathname.startsWith('/api/')) {\r\n // API routes are handled by Flight HTTP middleware\r\n // Pass through to Vite middlewares which will invoke our Flight middleware\r\n vite.middlewares(req, res);\r\n return;\r\n }\r\n\r\n try {\r\n // 1. Read index.html template\r\n let template = readFileSync(\r\n join(root, 'index.html'),\r\n 'utf-8'\r\n );\r\n\r\n // 2. Apply Vite HTML transforms (HMR client injection)\r\n template = await vite.transformIndexHtml(url, template);\r\n\r\n let appHtml = '';\r\n\r\n // 3. Try file-based page routing first\r\n if (pageRouter) {\r\n const pageRoute = pageRouter.routes.find((r: any) =>\r\n r.type === 'page' && matchPath(r.path, pathname)\r\n );\r\n\r\n if (pageRoute && pageRoute.component) {\r\n // Load component via Vite for HMR\r\n // Normalize paths for Vite (forward slashes, remove root)\r\n const normalizedFilePath = pageRoute.filePath.replace(/\\\\/g, '/');\r\n const normalizedRoot = root.replace(/\\\\/g, '/');\r\n const relativePath = normalizedFilePath.replace(normalizedRoot, '');\r\n const mod = await vite.ssrLoadModule(relativePath);\r\n const Component = mod.default;\r\n\r\n // Get render function for the UI framework\r\n const { render } = await vite.ssrLoadModule('/src/entry-server.tsx');\r\n\r\n if (typeof render === 'function' && Component) {\r\n appHtml = await render(url, { Component });\r\n }\r\n }\r\n }\r\n\r\n // 4. Fallback to entry-server.tsx if no page matched\r\n if (!appHtml) {\r\n const { render } = await vite.ssrLoadModule('/src/entry-server.tsx');\r\n if (typeof render === 'function') {\r\n appHtml = await render(url);\r\n }\r\n }\r\n\r\n // 5. Inject rendered app into template\r\n if (appHtml) {\r\n const html = template.replace('<!--ssr-outlet-->', appHtml);\r\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(html);\r\n } else {\r\n // Fallback to CSR if no render\r\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\r\n res.end(template);\r\n }\r\n\r\n } catch (e: any) {\r\n // Fix Vite stack trace\r\n vite.ssrFixStacktrace(e);\r\n console.error(pc.red('[SSR Error]'), e.stack);\r\n\r\n if (!res.headersSent) {\r\n res.writeHead(500, { 'Content-Type': 'text/plain' });\r\n res.end(`SSR Error: ${e.message}\\n\\n${e.stack}`);\r\n }\r\n }\r\n });\r\n\r\n const listenHost = host === true ? '0.0.0.0' : (host || 'localhost');\r\n\r\n server.listen(port, listenHost as string, () => {\r\n console.log(pc.green(` ✓ SSR server listening`));\r\n });\r\n}\r\n\r\n/**\r\n * Flight development plugin for Vite\r\n */\r\nfunction flightDevPlugin(root: string) {\r\n return {\r\n name: 'flight:dev',\r\n\r\n configureServer(server: any) {\r\n // Add middleware to handle Flight API routes\r\n server.middlewares.use(async (req: any, res: any, next: any) => {\r\n const url = req.url || '/';\r\n\r\n // Handle Flight action requests\r\n if (url.startsWith('/__flight_action/')) {\r\n try {\r\n const { handleActionRequest } = await import('@flight-framework/core');\r\n\r\n // Convert Node request to Web Request\r\n const webRequest = await nodeToWebRequest(req);\r\n const response = await handleActionRequest(webRequest);\r\n\r\n // Write response\r\n res.statusCode = response.status;\r\n response.headers.forEach((value: string, key: string) => {\r\n res.setHeader(key, value);\r\n });\r\n\r\n const body = await response.text();\r\n res.end(body);\r\n } catch (error) {\r\n console.error('[Flight] Action error:', error);\r\n res.statusCode = 500;\r\n res.end(JSON.stringify({ error: 'Internal server error' }));\r\n }\r\n return;\r\n }\r\n\r\n // Handle API routes from file-router\r\n if (url.startsWith('/api/')) {\r\n try {\r\n const { createFileRouter } = await import('@flight-framework/core/file-router');\r\n const routesDir = join(root, 'src', 'routes');\r\n\r\n const router = await createFileRouter({ directory: routesDir });\r\n const route = router.routes.find(r => {\r\n // Simple path matching (production would use radix matching)\r\n return matchPath(r.path, url);\r\n });\r\n\r\n if (route && route.handler) {\r\n const webRequest = await nodeToWebRequest(req);\r\n const response = await route.handler({ req: webRequest, params: {} });\r\n\r\n res.statusCode = response.status;\r\n response.headers.forEach((value: string, key: string) => {\r\n res.setHeader(key, value);\r\n });\r\n\r\n const body = await response.text();\r\n res.end(body);\r\n return;\r\n }\r\n } catch (error) {\r\n // File router not set up, continue to next middleware\r\n }\r\n }\r\n\r\n next();\r\n });\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Convert Node.js request to Web Standard Request\r\n */\r\nasync function nodeToWebRequest(req: any): Promise<Request> {\r\n const host = req.headers.host || 'localhost';\r\n const protocol = 'http';\r\n const url = new URL(req.url || '/', `${protocol}://${host}`);\r\n\r\n let body: BodyInit | null = null;\r\n\r\n if (req.method !== 'GET' && req.method !== 'HEAD') {\r\n const chunks: Buffer[] = [];\r\n for await (const chunk of req) {\r\n chunks.push(chunk);\r\n }\r\n body = Buffer.concat(chunks);\r\n }\r\n\r\n const headers = new Headers();\r\n for (const [key, value] of Object.entries(req.headers)) {\r\n if (value) {\r\n if (Array.isArray(value)) {\r\n for (const v of value) {\r\n headers.append(key, v);\r\n }\r\n } else {\r\n headers.set(key, value as string);\r\n }\r\n }\r\n }\r\n\r\n return new Request(url.toString(), {\r\n method: req.method || 'GET',\r\n headers,\r\n body,\r\n });\r\n}\r\n\r\n/**\r\n * Simple path matching\r\n */\r\nfunction matchPath(pattern: string, path: string): boolean {\r\n // Remove query string\r\n const cleanPath = path.split('?')[0];\r\n\r\n // Convert pattern params to regex\r\n const regexPattern = pattern\r\n .replace(/:\\w+/g, '[^/]+')\r\n .replace(/\\*/g, '.*');\r\n\r\n const regex = new RegExp(`^${regexPattern}$`);\r\n return regex.test(cleanPath || '/');\r\n}\r\n\r\nfunction getNetworkAddress(): string {\r\n try {\r\n const { networkInterfaces } = require('os');\r\n const nets = networkInterfaces();\r\n\r\n for (const name of Object.keys(nets)) {\r\n for (const net of nets[name]) {\r\n if (net.family === 'IPv4' && !net.internal) {\r\n return net.address;\r\n }\r\n }\r\n }\r\n } catch {\r\n // Ignore\r\n }\r\n return '0.0.0.0';\r\n}\r\n\r\n","/**\r\n * Type Generation Module\r\n *\r\n * Generates TypeScript declaration files from route structure and environment files.\r\n * Follows Flight's toolbox philosophy: explicit, opt-in, no magic.\r\n *\r\n * @example CLI Usage\r\n * ```bash\r\n * flight types:generate --routes --env\r\n * flight types:generate --routes --watch\r\n * ```\r\n *\r\n * @example Programmatic Usage\r\n * ```typescript\r\n * import { generateTypes } from '@flight-framework/cli/generators/typegen';\r\n *\r\n * await generateTypes({\r\n * routesDir: './src/routes',\r\n * outputDir: './src/.flight',\r\n * includeRoutes: true,\r\n * includeEnv: true,\r\n * });\r\n * ```\r\n *\r\n * @module @flight-framework/cli/generators/typegen\r\n */\r\n\r\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, watch } from 'fs';\r\nimport { join, resolve, dirname } from 'path';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface TypeGenOptions {\r\n /** Directory containing route files */\r\n routesDir: string;\r\n\r\n /** Output directory for generated types */\r\n outputDir: string;\r\n\r\n /** Generate route types (default: true) */\r\n includeRoutes?: boolean;\r\n\r\n /** Generate environment variable types (default: false) */\r\n includeEnv?: boolean;\r\n\r\n /** Project root for .env file discovery */\r\n projectRoot?: string;\r\n}\r\n\r\nexport interface TypeGenResult {\r\n /** Generated route types content */\r\n routeTypes: string;\r\n\r\n /** Generated env types content */\r\n envTypes: string;\r\n\r\n /** List of files written */\r\n filesWritten: string[];\r\n\r\n /** Number of routes processed */\r\n routeCount: number;\r\n\r\n /** Number of env variables processed */\r\n envVarCount: number;\r\n}\r\n\r\nexport interface ScannedRoute {\r\n path: string;\r\n filePath: string;\r\n isDynamic: boolean;\r\n isApiRoute: boolean;\r\n httpMethod?: string;\r\n}\r\n\r\ninterface EnvVariable {\r\n key: string;\r\n optional: boolean;\r\n}\r\n\r\ninterface ParsedEnv {\r\n server: EnvVariable[];\r\n client: EnvVariable[];\r\n}\r\n\r\n// ============================================================================\r\n// Route Type Generation\r\n// ============================================================================\r\n\r\n/**\r\n * Generate default header for auto-generated files\r\n */\r\nfunction generateHeader(command: string): string {\r\n const timestamp = new Date().toISOString();\r\n return `/**\r\n * Auto-generated by Flight CLI\r\n * Do not edit manually - changes will be overwritten\r\n *\r\n * Command: ${command}\r\n * Generated: ${timestamp}\r\n */`;\r\n}\r\n\r\n/**\r\n * Extract parameter names from a route path\r\n *\r\n * @example\r\n * extractParams('/users/:id') // ['id']\r\n * extractParams('/blog/:year/:slug') // ['year', 'slug']\r\n * extractParams('/docs/*path') // ['path']\r\n */\r\nexport function extractParams(routePath: string): string[] {\r\n const params: string[] = [];\r\n\r\n // Match :param patterns\r\n const dynamicMatches = routePath.match(/:(\\w+)/g);\r\n if (dynamicMatches) {\r\n params.push(...dynamicMatches.map((m) => m.slice(1)));\r\n }\r\n\r\n // Match *param patterns (catch-all)\r\n const catchAllMatches = routePath.match(/\\*(\\w+)/g);\r\n if (catchAllMatches) {\r\n params.push(...catchAllMatches.map((m) => m.slice(1)));\r\n }\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Check if route has dynamic segments\r\n */\r\nfunction isDynamicRoute(routePath: string): boolean {\r\n return routePath.includes(':') || routePath.includes('*');\r\n}\r\n\r\n/**\r\n * Generate TypeScript route types from scanned routes\r\n */\r\nexport function generateRouteTypes(routes: ScannedRoute[]): string {\r\n const pageRoutes = routes.filter((r) => !r.isApiRoute);\r\n const apiRoutes = routes.filter((r) => r.isApiRoute);\r\n\r\n const staticRoutes = pageRoutes.filter((r) => !r.isDynamic);\r\n const dynamicRoutes = pageRoutes.filter((r) => r.isDynamic);\r\n\r\n // Generate route unions\r\n const appRoutesUnion =\r\n pageRoutes.length > 0\r\n ? pageRoutes.map((r) => ` | '${r.path}'`).join('\\n')\r\n : ' | never';\r\n\r\n const apiRoutesUnion =\r\n apiRoutes.length > 0\r\n ? apiRoutes.map((r) => ` | '${r.path}'`).join('\\n')\r\n : ' | never';\r\n\r\n const staticRoutesUnion =\r\n staticRoutes.length > 0\r\n ? staticRoutes.map((r) => ` | '${r.path}'`).join('\\n')\r\n : ' | never';\r\n\r\n const dynamicRoutesUnion =\r\n dynamicRoutes.length > 0\r\n ? dynamicRoutes.map((r) => ` | '${r.path}'`).join('\\n')\r\n : ' | never';\r\n\r\n // Generate param types for dynamic routes\r\n const paramTypes = dynamicRoutes\r\n .map((r) => {\r\n const params = extractParams(r.path);\r\n const typeName = routePathToTypeName(r.path);\r\n const paramDef = params.map((p) => `${p}: string`).join('; ');\r\n return `export type ${typeName}Params = { ${paramDef} };`;\r\n })\r\n .join('\\n');\r\n\r\n return `${generateHeader('flight types:generate --routes')}\r\n\r\n// ============================================================================\r\n// Route Types\r\n// ============================================================================\r\n\r\n/**\r\n * All available page routes in the application\r\n */\r\nexport type AppRoutes =\r\n${appRoutesUnion};\r\n\r\n/**\r\n * All available API routes in the application\r\n */\r\nexport type ApiRoutes =\r\n${apiRoutesUnion};\r\n\r\n/**\r\n * Static routes (no dynamic parameters)\r\n */\r\nexport type StaticRoutes =\r\n${staticRoutesUnion};\r\n\r\n/**\r\n * Dynamic routes (with parameters like :id or *slug)\r\n */\r\nexport type DynamicRoutes =\r\n${dynamicRoutesUnion};\r\n\r\n// ============================================================================\r\n// Route Parameter Extraction\r\n// ============================================================================\r\n\r\n/**\r\n * Extract route parameters from a route pattern using template literal types.\r\n *\r\n * @example\r\n * type Params = ExtractRouteParams<'/users/:id'>; // { id: string }\r\n * type BlogParams = ExtractRouteParams<'/blog/:year/:slug'>; // { year: string; slug: string }\r\n */\r\ntype ExtractRouteParams<T extends string> =\r\n // Handle :param/rest pattern\r\n T extends \\`\\${infer _Start}:\\${infer Param}/\\${infer Rest}\\`\r\n ? { [K in Param]: string } & ExtractRouteParams<\\`/\\${Rest}\\`>\r\n // Handle :param at end\r\n : T extends \\`\\${infer _Start}:\\${infer Param}\\`\r\n ? { [K in Param]: string }\r\n // Handle *param (catch-all)\r\n : T extends \\`\\${infer _Start}*\\${infer Param}\\`\r\n ? { [K in Param]: string }\r\n // No params\r\n : Record<string, never>;\r\n\r\n/**\r\n * Get typed parameters for a specific route.\r\n *\r\n * @example\r\n * const params: RouteParams<'/users/:id'> = { id: '123' };\r\n */\r\nexport type RouteParams<T extends AppRoutes | ApiRoutes> = ExtractRouteParams<T>;\r\n\r\n// ============================================================================\r\n// Helper Types\r\n// ============================================================================\r\n\r\n/**\r\n * Check if a route requires parameters\r\n */\r\nexport type RequiresParams<T extends AppRoutes | ApiRoutes> =\r\n RouteParams<T> extends Record<string, never> ? false : true;\r\n\r\n/**\r\n * Props for a type-safe Link component\r\n */\r\nexport type TypedLinkProps<T extends AppRoutes> =\r\n RequiresParams<T> extends true\r\n ? { to: T; params: RouteParams<T> }\r\n : { to: T; params?: never };\r\n\r\n/**\r\n * Build a URL from a route pattern and parameters\r\n */\r\nexport type BuildUrl<T extends AppRoutes> =\r\n RequiresParams<T> extends true\r\n ? (route: T, params: RouteParams<T>) => string\r\n : (route: T) => string;\r\n\r\n// ============================================================================\r\n// Individual Route Parameter Types\r\n// ============================================================================\r\n\r\n${paramTypes || '// No dynamic routes found'}\r\n`;\r\n}\r\n\r\n/**\r\n * Convert route path to a valid TypeScript type name\r\n *\r\n * @example\r\n * routePathToTypeName('/users/:id') // 'Users_Id'\r\n * routePathToTypeName('/blog/:year/:slug') // 'Blog_Year_Slug'\r\n */\r\nfunction routePathToTypeName(routePath: string): string {\r\n return routePath\r\n .split('/')\r\n .filter(Boolean)\r\n .map((segment) => {\r\n // Remove : and * prefixes, capitalize\r\n const clean = segment.replace(/^[:*]/, '');\r\n return clean.charAt(0).toUpperCase() + clean.slice(1);\r\n })\r\n .join('_') || 'Root';\r\n}\r\n\r\n// ============================================================================\r\n// Environment Variable Type Generation\r\n// ============================================================================\r\n\r\n/**\r\n * Parse .env file content and extract variable definitions\r\n */\r\nexport function parseEnvFile(content: string): ParsedEnv {\r\n const server: EnvVariable[] = [];\r\n const client: EnvVariable[] = [];\r\n\r\n const lines = content.split('\\n');\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n // Skip comments and empty lines\r\n if (!trimmed || trimmed.startsWith('#')) {\r\n continue;\r\n }\r\n\r\n // Match KEY=value or KEY?=value (optional)\r\n const match = trimmed.match(/^([A-Z_][A-Z0-9_]*)(\\?)?=/i);\r\n if (!match) {\r\n continue;\r\n }\r\n\r\n const key = match[1];\r\n const optional = match[2] === '?';\r\n\r\n const envVar: EnvVariable = { key, optional };\r\n\r\n // PUBLIC_ prefix means client-side accessible\r\n if (key.startsWith('PUBLIC_')) {\r\n client.push(envVar);\r\n } else {\r\n server.push(envVar);\r\n }\r\n }\r\n\r\n return { server, client };\r\n}\r\n\r\n/**\r\n * Load and merge all .env files from project root\r\n */\r\nexport function loadEnvFiles(projectRoot: string): ParsedEnv {\r\n const envFiles = ['.env', '.env.local', '.env.development', '.env.production'];\r\n\r\n const merged: ParsedEnv = { server: [], client: [] };\r\n const seenKeys = new Set<string>();\r\n\r\n for (const envFile of envFiles) {\r\n const envPath = join(projectRoot, envFile);\r\n\r\n if (!existsSync(envPath)) {\r\n continue;\r\n }\r\n\r\n const content = readFileSync(envPath, 'utf-8');\r\n const parsed = parseEnvFile(content);\r\n\r\n // Add new keys only (first definition wins)\r\n for (const envVar of parsed.server) {\r\n if (!seenKeys.has(envVar.key)) {\r\n seenKeys.add(envVar.key);\r\n merged.server.push(envVar);\r\n }\r\n }\r\n\r\n for (const envVar of parsed.client) {\r\n if (!seenKeys.has(envVar.key)) {\r\n seenKeys.add(envVar.key);\r\n merged.client.push(envVar);\r\n }\r\n }\r\n }\r\n\r\n return merged;\r\n}\r\n\r\n/**\r\n * Generate TypeScript environment variable types\r\n */\r\nexport function generateEnvTypes(env: ParsedEnv): string {\r\n const serverVars = env.server\r\n .sort((a, b) => a.key.localeCompare(b.key))\r\n .map((v) => ` ${v.key}${v.optional ? '?' : ''}: string;`)\r\n .join('\\n');\r\n\r\n const clientVars = env.client\r\n .sort((a, b) => a.key.localeCompare(b.key))\r\n .map((v) => ` ${v.key}${v.optional ? '?' : ''}: string;`)\r\n .join('\\n');\r\n\r\n return `${generateHeader('flight types:generate --env')}\r\n\r\n// ============================================================================\r\n// Server-side Environment Variables\r\n// ============================================================================\r\n\r\n/**\r\n * Server-side environment variables accessible via process.env\r\n * These are NOT exposed to the client.\r\n */\r\ndeclare namespace NodeJS {\r\n interface ProcessEnv {\r\n${serverVars || ' // No server environment variables defined'}\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Client-side Environment Variables\r\n// ============================================================================\r\n\r\n/**\r\n * Client-side environment variables accessible via import.meta.env\r\n * Only variables with PUBLIC_ prefix are included.\r\n */\r\ninterface ImportMetaEnv {\r\n${clientVars || ' // No client environment variables defined'}\r\n}\r\n\r\ninterface ImportMeta {\r\n readonly env: ImportMetaEnv;\r\n}\r\n`;\r\n}\r\n\r\n// ============================================================================\r\n// Main Generation Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Scan routes directory and extract route information\r\n */\r\nexport function scanRoutesForTypes(routesDir: string): ScannedRoute[] {\r\n if (!existsSync(routesDir)) {\r\n return [];\r\n }\r\n\r\n const routes: ScannedRoute[] = [];\r\n scanDirectoryRecursive(routesDir, '', routes);\r\n return routes;\r\n}\r\n\r\nfunction scanDirectoryRecursive(\r\n dir: string,\r\n basePath: string,\r\n results: ScannedRoute[]\r\n): void {\r\n const entries = readdirSync(dir, { withFileTypes: true });\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry.name);\r\n const relativePath = join(basePath, entry.name);\r\n\r\n if (entry.isDirectory()) {\r\n // Skip special directories\r\n if (entry.name.startsWith('.') || entry.name === 'node_modules') {\r\n continue;\r\n }\r\n scanDirectoryRecursive(fullPath, relativePath, results);\r\n } else if (entry.isFile()) {\r\n const route = parseRouteFile(entry.name, relativePath);\r\n if (route) {\r\n results.push(route);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction parseRouteFile(filename: string, relativePath: string): ScannedRoute | null {\r\n // Check for page routes\r\n if (/\\.(page|route)\\.(tsx?|jsx?)$/.test(filename)) {\r\n const urlPath = filePathToUrlPath(relativePath);\r\n return {\r\n path: urlPath,\r\n filePath: relativePath.replace(/\\\\/g, '/'),\r\n isDynamic: isDynamicRoute(urlPath),\r\n isApiRoute: false,\r\n };\r\n }\r\n\r\n // Check for API routes\r\n const apiMatch = filename.match(/\\.(get|post|put|patch|delete|options|head)\\.(tsx?|jsx?)$/i);\r\n if (apiMatch) {\r\n const urlPath = filePathToUrlPath(relativePath);\r\n return {\r\n path: urlPath,\r\n filePath: relativePath.replace(/\\\\/g, '/'),\r\n isDynamic: isDynamicRoute(urlPath),\r\n isApiRoute: true,\r\n httpMethod: apiMatch[1].toUpperCase(),\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction filePathToUrlPath(filePath: string): string {\r\n let urlPath = filePath\r\n // Normalize slashes first (Windows compatibility)\r\n .replace(/\\\\/g, '/')\r\n // Remove file extension\r\n .replace(/\\.(page|route)\\.(tsx?|jsx?)$/, '')\r\n // Remove HTTP method suffix\r\n .replace(/\\.(get|post|put|patch|delete|options|head)$/i, '')\r\n // Remove index (after slash normalization)\r\n .replace(/\\/index$/, '')\r\n .replace(/^index$/, '')\r\n // Remove route groups\r\n .replace(/\\/?\\\\?\\([^)]+\\\\?\\)/g, '')\r\n // Convert [param] to :param\r\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, '*$1')\r\n .replace(/\\[(\\w+)\\]/g, ':$1');\r\n\r\n // Ensure leading slash\r\n if (!urlPath.startsWith('/')) {\r\n urlPath = '/' + urlPath;\r\n }\r\n\r\n // Clean double slashes\r\n urlPath = urlPath.replace(/\\/+/g, '/');\r\n\r\n return urlPath || '/';\r\n}\r\n\r\n/**\r\n * Generate types and write to output directory\r\n */\r\nexport async function generateTypes(options: TypeGenOptions): Promise<TypeGenResult> {\r\n const {\r\n routesDir,\r\n outputDir,\r\n includeRoutes = true,\r\n includeEnv = false,\r\n projectRoot = process.cwd(),\r\n } = options;\r\n\r\n const result: TypeGenResult = {\r\n routeTypes: '',\r\n envTypes: '',\r\n filesWritten: [],\r\n routeCount: 0,\r\n envVarCount: 0,\r\n };\r\n\r\n // Ensure output directory exists\r\n if (!existsSync(outputDir)) {\r\n mkdirSync(outputDir, { recursive: true });\r\n }\r\n\r\n // Generate route types\r\n if (includeRoutes) {\r\n const routes = scanRoutesForTypes(routesDir);\r\n result.routeCount = routes.length;\r\n result.routeTypes = generateRouteTypes(routes);\r\n\r\n const routeTypesPath = join(outputDir, 'routes.d.ts');\r\n writeFileSync(routeTypesPath, result.routeTypes, 'utf-8');\r\n result.filesWritten.push(routeTypesPath);\r\n\r\n console.log(`Generated route types: ${routes.length} routes`);\r\n }\r\n\r\n // Generate env types\r\n if (includeEnv) {\r\n const env = loadEnvFiles(projectRoot);\r\n result.envVarCount = env.server.length + env.client.length;\r\n result.envTypes = generateEnvTypes(env);\r\n\r\n const envTypesPath = join(outputDir, 'env.d.ts');\r\n writeFileSync(envTypesPath, result.envTypes, 'utf-8');\r\n result.filesWritten.push(envTypesPath);\r\n\r\n console.log(`Generated env types: ${env.server.length} server, ${env.client.length} client`);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// ============================================================================\r\n// Watch Mode\r\n// ============================================================================\r\n\r\nexport interface WatchOptions extends TypeGenOptions {\r\n /** Debounce delay in milliseconds */\r\n debounce?: number;\r\n\r\n /** Callback when types are regenerated */\r\n onRegenerate?: (result: TypeGenResult) => void;\r\n}\r\n\r\n/**\r\n * Watch for changes and regenerate types automatically\r\n */\r\nexport function watchAndGenerate(options: WatchOptions): () => void {\r\n const { routesDir, debounce = 100, onRegenerate } = options;\r\n\r\n let timeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n const regenerate = async () => {\r\n try {\r\n const result = await generateTypes(options);\r\n onRegenerate?.(result);\r\n } catch (error) {\r\n console.error('Type generation failed:', (error as Error).message);\r\n }\r\n };\r\n\r\n const debouncedRegenerate = () => {\r\n if (timeout) clearTimeout(timeout);\r\n timeout = setTimeout(regenerate, debounce);\r\n };\r\n\r\n // Initial generation\r\n regenerate();\r\n\r\n // Watch routes directory\r\n const watcher = watch(routesDir, { recursive: true }, (eventType: string, filename: string | null) => {\r\n if (filename && /\\.(tsx?|jsx?)$/.test(filename)) {\r\n console.log(`Route file changed: ${filename}`);\r\n debouncedRegenerate();\r\n }\r\n });\r\n\r\n // Return cleanup function\r\n return () => {\r\n watcher.close();\r\n if (timeout) clearTimeout(timeout);\r\n };\r\n}\r\n","/**\r\n * Flight CLI - Build Command\r\n * \r\n * Build for production.\r\n */\r\n\r\nimport { resolve } from 'node:path';\r\nimport { existsSync } from 'node:fs';\r\nimport pc from 'picocolors';\r\nimport { loadConfig } from '@flight-framework/core/config';\r\nimport { printLogo } from '../index.js';\r\n\r\n/**\r\n * Find entry-server file with either .tsx or .ts extension\r\n */\r\nfunction findEntryServer(root: string, srcDir: string): string {\r\n const tsxPath = resolve(root, srcDir, 'entry-server.tsx');\r\n const tsPath = resolve(root, srcDir, 'entry-server.ts');\r\n\r\n if (existsSync(tsxPath)) return tsxPath;\r\n if (existsSync(tsPath)) return tsPath;\r\n\r\n // Default to tsx (will error if not found, but with clear message)\r\n return tsxPath;\r\n}\r\n\r\ninterface BuildOptions {\r\n outDir?: string;\r\n sourcemap?: boolean;\r\n minify?: boolean;\r\n}\r\n\r\nexport async function buildCommand(options: BuildOptions): Promise<void> {\r\n const startTime = Date.now();\r\n\r\n printLogo();\r\n console.log(pc.cyan('\\n[*] Building Flight project for production...\\n'));\r\n\r\n try {\r\n // Load config\r\n const root = resolve(process.cwd());\r\n const config = await loadConfig(root);\r\n\r\n const outDir = options.outDir ?? config.build.outDir;\r\n const sourcemap = options.sourcemap ?? config.build.sourcemap;\r\n const minify = options.minify ?? config.build.minify;\r\n\r\n // Dynamic import vite\r\n const { build } = await import('vite');\r\n\r\n console.log(pc.dim(`Output directory: ${outDir}`));\r\n console.log(pc.dim(`Sourcemaps: ${sourcemap ? 'enabled' : 'disabled'}`));\r\n console.log(pc.dim(`Minification: ${minify ? 'enabled' : 'disabled'}\\n`));\r\n\r\n // Client build\r\n console.log(pc.cyan('Building client...'));\r\n await build({\r\n root,\r\n mode: 'production',\r\n build: {\r\n outDir: `${outDir}/client`,\r\n sourcemap,\r\n minify: minify ? 'esbuild' : false,\r\n rollupOptions: {\r\n input: resolve(root, 'index.html'),\r\n },\r\n },\r\n });\r\n console.log(pc.green('✓') + ' Client build complete');\r\n\r\n // SSR build (if applicable)\r\n if (config.rendering.default !== 'csr') {\r\n console.log(pc.cyan('\\nBuilding server...'));\r\n await build({\r\n root,\r\n mode: 'production',\r\n build: {\r\n outDir: `${outDir}/server`,\r\n sourcemap,\r\n minify: minify ? 'esbuild' : false,\r\n ssr: true,\r\n rollupOptions: {\r\n input: findEntryServer(root, config.build.srcDir),\r\n },\r\n },\r\n });\r\n console.log(pc.green('✓') + ' Server build complete');\r\n }\r\n\r\n // Run adapter if configured\r\n if (config.adapter) {\r\n console.log(pc.cyan(`\\nRunning ${config.adapter.name} adapter...`));\r\n // TODO: Implement adapter execution\r\n console.log(pc.green('✓') + ` ${config.adapter.name} adapter complete`);\r\n }\r\n\r\n const elapsed = Date.now() - startTime;\r\n const elapsedSeconds = (elapsed / 1000).toFixed(2);\r\n\r\n console.log(`\r\n${pc.green('[OK] Build complete!')} ${pc.dim(`(${elapsedSeconds}s)`)}\r\n\r\n${pc.cyan('Output:')} ${resolve(root, outDir)}\r\n\r\n${pc.dim('To preview the build:')}\r\n ${pc.dim('$')} flight preview\r\n\r\n${pc.dim('To deploy:')}\r\n ${pc.dim('•')} Upload ${outDir}/ to your server\r\n ${pc.dim('•')} Or use your configured adapter\r\n`);\r\n\r\n } catch (error) {\r\n console.error(pc.red('\\nBuild failed:'), error);\r\n process.exit(1);\r\n }\r\n}\r\n","/**\r\n * Flight CLI - Preview Command\r\n * \r\n * Preview production build locally.\r\n */\r\n\r\nimport { resolve } from 'node:path';\r\nimport pc from 'picocolors';\r\nimport { loadConfig } from '@flight-framework/core/config';\r\nimport { printLogo } from '../index.js';\r\n\r\ninterface PreviewOptions {\r\n port?: string;\r\n host?: string;\r\n open?: boolean;\r\n}\r\n\r\nexport async function previewCommand(options: PreviewOptions): Promise<void> {\r\n printLogo();\r\n console.log(pc.cyan('\\n✈️ Starting Flight preview server...\\n'));\r\n\r\n try {\r\n // Load config\r\n const root = resolve(process.cwd());\r\n const config = await loadConfig(root);\r\n\r\n const port = options.port ? parseInt(options.port, 10) : config.dev.port + 1;\r\n const host = options.host ?? config.dev.host;\r\n const open = options.open ?? false;\r\n\r\n // Dynamic import vite\r\n const { preview } = await import('vite');\r\n\r\n const server = await preview({\r\n root,\r\n preview: {\r\n port,\r\n host: host === true ? '0.0.0.0' : host,\r\n open,\r\n },\r\n build: {\r\n outDir: config.build.outDir,\r\n },\r\n });\r\n\r\n console.log(`\r\n ${pc.green('✓')} Flight preview server ready\r\n\r\n ${pc.cyan('➜')} Local: ${pc.cyan(`http://localhost:${port}/`)}\r\n ${host === true || host === '0.0.0.0' ? ` ${pc.cyan('➜')} Network: ${pc.cyan(`http://0.0.0.0:${port}/`)}` : ''}\r\n\r\n ${pc.dim('This is a preview of your production build.')}\r\n ${pc.dim('For development, use')} ${pc.bold('flight dev')}\r\n`);\r\n\r\n // Keep server running\r\n server.printUrls();\r\n\r\n } catch (error) {\r\n console.error(pc.red('\\nFailed to start preview server:'), error);\r\n process.exit(1);\r\n }\r\n}\r\n","/**\r\n * Routes Generate Command\r\n * \r\n * Generates route manifest from the routes directory.\r\n * Usage: flight routes:generate [options]\r\n */\r\n\r\nimport { resolve } from 'path';\r\nimport { generateRoutes } from '../generators/routes.js';\r\n\r\ninterface RoutesGenerateOptions {\r\n routesDir?: string;\r\n outputDir?: string;\r\n watch?: boolean;\r\n}\r\n\r\nexport async function routesGenerateCommand(options: RoutesGenerateOptions = {}): Promise<void> {\r\n const cwd = process.cwd();\r\n\r\n const routesDir = options.routesDir\r\n ? resolve(cwd, options.routesDir)\r\n : resolve(cwd, 'src/routes');\r\n\r\n const outputDir = options.outputDir\r\n ? resolve(cwd, options.outputDir)\r\n : resolve(cwd, 'src/.flight');\r\n\r\n try {\r\n const manifest = await generateRoutes({\r\n routesDir,\r\n outputDir,\r\n watch: options.watch,\r\n });\r\n\r\n console.log('\\nRoute manifest generated successfully!');\r\n console.log(` Pages: ${manifest.routes.length}`);\r\n console.log(` API Routes: ${manifest.apiRoutes.length}`);\r\n console.log(` Layouts: ${manifest.layouts.length}`);\r\n } catch (error) {\r\n console.error('Failed to generate routes:', error);\r\n process.exit(1);\r\n }\r\n}\r\n","/**\r\n * Route Generator\r\n * \r\n * Scans the routes directory and generates a route manifest.\r\n * This enables automatic route registration without manual imports.\r\n */\r\n\r\nimport { readdirSync, statSync, existsSync, writeFileSync, mkdirSync } from 'fs';\r\nimport { join, relative, basename, dirname } from 'path';\r\n\r\ninterface ScannedRoute {\r\n path: string; // URL path pattern (e.g., '/docs/:slug')\r\n filePath: string; // Relative file path\r\n isLayout: boolean; // Is this a _layout file\r\n isLoading: boolean; // Is this a _loading file\r\n isError: boolean; // Is this a _error file\r\n isNotFound: boolean; // Is this a _not-found file\r\n isDynamic: boolean; // Has dynamic segments\r\n isApiRoute: boolean; // Is an API route\r\n httpMethod?: string; // HTTP method for API routes\r\n}\r\n\r\ninterface RouteManifest {\r\n routes: ScannedRoute[];\r\n layouts: ScannedRoute[];\r\n loadingStates: ScannedRoute[];\r\n errorBoundaries: ScannedRoute[];\r\n notFoundPages: ScannedRoute[];\r\n apiRoutes: ScannedRoute[];\r\n generated: string; // Timestamp\r\n}\r\n\r\n/**\r\n * Convert file path to URL path pattern\r\n * \r\n * Handles:\r\n * - File extensions (.page.tsx, .get.ts, etc.)\r\n * - Index files → root of directory\r\n * - Dynamic segments [param] → :param\r\n * - Catch-all [...param] → *param\r\n * - Route groups (group) → removed from URL\r\n */\r\nfunction filePathToUrlPath(filePath: string): string {\r\n let urlPath = filePath\r\n // Remove file extension\r\n .replace(/\\.(page|route)\\.(tsx?|jsx?)$/, '')\r\n // Remove HTTP method suffix for API routes\r\n .replace(/\\.(get|post|put|patch|delete|options|head)$/, '')\r\n // Remove index from path\r\n .replace(/\\/index$/, '')\r\n // Remove route groups (segments wrapped in parentheses)\r\n // e.g., (marketing)/about → about, (app)/dashboard → dashboard\r\n .replace(/\\/?\\([^)]+\\)/g, '')\r\n // Convert [param] to :param\r\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, '*$1') // Catch-all [...slug] -> *slug\r\n .replace(/\\[(\\w+)\\]/g, ':$1'); // Dynamic [slug] -> :slug\r\n\r\n // Ensure leading slash\r\n if (!urlPath.startsWith('/')) {\r\n urlPath = '/' + urlPath;\r\n }\r\n\r\n // Root path\r\n if (urlPath === '' || urlPath === '/') {\r\n urlPath = '/';\r\n }\r\n\r\n // Clean up double slashes that might result from group removal\r\n urlPath = urlPath.replace(/\\/+/g, '/');\r\n\r\n return urlPath;\r\n}\r\n\r\n/**\r\n * Check if directory is a route group\r\n * Route groups are directories wrapped in parentheses: (groupName)\r\n */\r\nfunction isRouteGroup(dirname: string): boolean {\r\n return /^\\([^)]+\\)$/.test(dirname);\r\n}\r\n\r\n/**\r\n * Extract HTTP method from API route filename\r\n */\r\nfunction extractHttpMethod(filename: string): string | undefined {\r\n const match = filename.match(/\\.(get|post|put|patch|delete|options|head)\\.(tsx?|jsx?)$/i);\r\n return match ? match[1].toUpperCase() : undefined;\r\n}\r\n\r\n/**\r\n * Check if file is a layout file\r\n */\r\nfunction isLayoutFile(filename: string): boolean {\r\n return filename.startsWith('_layout.');\r\n}\r\n\r\n/**\r\n * Check if file is a loading file\r\n */\r\nfunction isLoadingFile(filename: string): boolean {\r\n return filename.startsWith('_loading.');\r\n}\r\n\r\n/**\r\n * Check if file is an error file\r\n */\r\nfunction isErrorFile(filename: string): boolean {\r\n return filename.startsWith('_error.');\r\n}\r\n\r\n/**\r\n * Check if file is a not-found file\r\n */\r\nfunction isNotFoundFile(filename: string): boolean {\r\n return filename.startsWith('_not-found.');\r\n}\r\n\r\n/**\r\n * Check if file is a page/route file\r\n */\r\nfunction isRouteFile(filename: string): boolean {\r\n return /\\.(page|route)\\.(tsx?|jsx?)$/.test(filename);\r\n}\r\n\r\n/**\r\n * Check if file is an API route file\r\n */\r\nfunction isApiRouteFile(filename: string): boolean {\r\n return /\\.(get|post|put|patch|delete|options|head)\\.(tsx?|jsx?)$/.test(filename);\r\n}\r\n\r\n/**\r\n * Check if path has dynamic segments\r\n */\r\nfunction hasDynamicSegments(path: string): boolean {\r\n return path.includes('[') && path.includes(']');\r\n}\r\n\r\n/**\r\n * Recursively scan directory for routes\r\n */\r\nfunction scanDirectory(\r\n dir: string,\r\n basePath: string = '',\r\n results: ScannedRoute[] = []\r\n): ScannedRoute[] {\r\n if (!existsSync(dir)) {\r\n return results;\r\n }\r\n\r\n const entries = readdirSync(dir);\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry);\r\n const relativePath = join(basePath, entry);\r\n const stat = statSync(fullPath);\r\n\r\n if (stat.isDirectory()) {\r\n // Skip special directories\r\n if (entry.startsWith('.') || entry === 'node_modules') {\r\n continue;\r\n }\r\n // Recurse into subdirectory\r\n scanDirectory(fullPath, relativePath, results);\r\n } else if (stat.isFile()) {\r\n const routePath = filePathToUrlPath(dirname(relativePath));\r\n const normalizedFilePath = relativePath.replace(/\\\\/g, '/');\r\n const isDynamic = hasDynamicSegments(relativePath);\r\n\r\n // Layout files\r\n if (isLayoutFile(entry)) {\r\n results.push({\r\n path: routePath,\r\n filePath: normalizedFilePath,\r\n isLayout: true,\r\n isLoading: false,\r\n isError: false,\r\n isNotFound: false,\r\n isDynamic,\r\n isApiRoute: false,\r\n });\r\n }\r\n // Loading files\r\n else if (isLoadingFile(entry)) {\r\n results.push({\r\n path: routePath,\r\n filePath: normalizedFilePath,\r\n isLayout: false,\r\n isLoading: true,\r\n isError: false,\r\n isNotFound: false,\r\n isDynamic,\r\n isApiRoute: false,\r\n });\r\n }\r\n // Error files\r\n else if (isErrorFile(entry)) {\r\n results.push({\r\n path: routePath,\r\n filePath: normalizedFilePath,\r\n isLayout: false,\r\n isLoading: false,\r\n isError: true,\r\n isNotFound: false,\r\n isDynamic,\r\n isApiRoute: false,\r\n });\r\n }\r\n // Not-found files\r\n else if (isNotFoundFile(entry)) {\r\n results.push({\r\n path: routePath,\r\n filePath: normalizedFilePath,\r\n isLayout: false,\r\n isLoading: false,\r\n isError: false,\r\n isNotFound: true,\r\n isDynamic,\r\n isApiRoute: false,\r\n });\r\n }\r\n // API route files\r\n else if (isApiRouteFile(entry)) {\r\n const method = extractHttpMethod(entry);\r\n results.push({\r\n path: filePathToUrlPath(relativePath),\r\n filePath: normalizedFilePath,\r\n isLayout: false,\r\n isLoading: false,\r\n isError: false,\r\n isNotFound: false,\r\n isDynamic,\r\n isApiRoute: true,\r\n httpMethod: method,\r\n });\r\n }\r\n // Page/route files\r\n else if (isRouteFile(entry)) {\r\n results.push({\r\n path: filePathToUrlPath(relativePath),\r\n filePath: normalizedFilePath,\r\n isLayout: false,\r\n isLoading: false,\r\n isError: false,\r\n isNotFound: false,\r\n isDynamic,\r\n isApiRoute: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\n/**\r\n * Sort routes for matching priority\r\n * Static routes before dynamic, shorter before longer\r\n */\r\nfunction sortRoutes(routes: ScannedRoute[]): ScannedRoute[] {\r\n return routes.sort((a, b) => {\r\n // Static routes first\r\n if (!a.isDynamic && b.isDynamic) return -1;\r\n if (a.isDynamic && !b.isDynamic) return 1;\r\n\r\n // Shorter paths first\r\n const aSegments = a.path.split('/').length;\r\n const bSegments = b.path.split('/').length;\r\n if (aSegments !== bSegments) return aSegments - bSegments;\r\n\r\n // Alphabetical as tiebreaker\r\n return a.path.localeCompare(b.path);\r\n });\r\n}\r\n\r\n/**\r\n * Generate route manifest from scanned routes\r\n */\r\nexport function generateRouteManifest(routesDir: string): RouteManifest {\r\n const allRoutes = scanDirectory(routesDir);\r\n\r\n // Filter by type - pages are routes that are not special files or API routes\r\n const isPageRoute = (r: ScannedRoute) =>\r\n !r.isLayout && !r.isLoading && !r.isError && !r.isNotFound && !r.isApiRoute;\r\n\r\n const routes = sortRoutes(allRoutes.filter(isPageRoute));\r\n const layouts = allRoutes.filter(r => r.isLayout);\r\n const loadingStates = allRoutes.filter(r => r.isLoading);\r\n const errorBoundaries = allRoutes.filter(r => r.isError);\r\n const notFoundPages = allRoutes.filter(r => r.isNotFound);\r\n const apiRoutes = sortRoutes(allRoutes.filter(r => r.isApiRoute));\r\n\r\n return {\r\n routes,\r\n layouts,\r\n loadingStates,\r\n errorBoundaries,\r\n notFoundPages,\r\n apiRoutes,\r\n generated: new Date().toISOString(),\r\n };\r\n}\r\n\r\n/**\r\n * Generate TypeScript route manifest file\r\n */\r\nexport function generateRoutesFile(manifest: RouteManifest, outputDir: string): void {\r\n // Ensure output directory exists\r\n if (!existsSync(outputDir)) {\r\n mkdirSync(outputDir, { recursive: true });\r\n }\r\n\r\n // Generate routes.ts content\r\n const routesContent = `/**\r\n * Auto-generated by Flight CLI\r\n * Do not edit manually\r\n * Generated: ${manifest.generated}\r\n */\r\n\r\nimport type { RouteDefinition } from '@flight-framework/router';\r\n\r\n// Page Routes\r\nexport const routes: RouteDefinition[] = [\r\n${manifest.routes.map(r => ` {\r\n path: '${r.path}',\r\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\r\n },`).join('\\n')}\r\n];\r\n\r\n// Layout Components\r\nexport const layouts = [\r\n${manifest.layouts.map(r => ` {\r\n path: '${r.path}',\r\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\r\n },`).join('\\n')}\r\n];\r\n\r\n// Loading State Components\r\nexport const loadingStates = [\r\n${manifest.loadingStates.map(r => ` {\r\n path: '${r.path}',\r\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\r\n },`).join('\\n')}\r\n];\r\n\r\n// Error Boundary Components\r\nexport const errorBoundaries = [\r\n${manifest.errorBoundaries.map(r => ` {\r\n path: '${r.path}',\r\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\r\n },`).join('\\n')}\r\n];\r\n\r\n// Not Found Page Components\r\nexport const notFoundPages = [\r\n${manifest.notFoundPages.map(r => ` {\r\n path: '${r.path}',\r\n component: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\r\n },`).join('\\n')}\r\n];\r\n\r\n// API Routes\r\nexport const apiRoutes = [\r\n${manifest.apiRoutes.map(r => ` {\r\n path: '${r.path}',\r\n method: '${r.httpMethod}',\r\n handler: () => import('../routes/${r.filePath.replace(/\\.(tsx?|jsx?)$/, '')}'),\r\n },`).join('\\n')}\r\n];\r\n\r\n// Type-safe route paths\r\nexport type AppRoutes = ${manifest.routes.length > 0\r\n ? manifest.routes.map(r => `'${r.path}'`).join(' | ')\r\n : 'never'};\r\n\r\n// Type-safe API route paths\r\nexport type ApiRoutes = ${manifest.apiRoutes.length > 0\r\n ? manifest.apiRoutes.map(r => `'${r.path}'`).join(' | ')\r\n : 'never'};\r\n`;\r\n\r\n writeFileSync(join(outputDir, 'routes.ts'), routesContent, 'utf-8');\r\n\r\n // Generate types.ts for enhanced type safety\r\n const typesContent = `/**\r\n * Auto-generated route types\r\n * Generated: ${manifest.generated}\r\n */\r\n\r\nimport type { RouteParams } from '@flight-framework/router';\r\n\r\n// Extract params from route patterns\r\n${manifest.routes\r\n .filter(r => r.isDynamic)\r\n .map(r => {\r\n const paramMatches = r.path.match(/:(\\w+)/g) || [];\r\n const params = paramMatches.map(p => p.slice(1));\r\n const typeName = r.path\r\n .replace(/[/:]/g, '_')\r\n .replace(/^_/, '')\r\n .replace(/_$/, '') || 'Root';\r\n return `export type ${typeName}Params = { ${params.map(p => `${p}: string`).join('; ')} };`;\r\n })\r\n .join('\\n')}\r\n`;\r\n\r\n writeFileSync(join(outputDir, 'types.ts'), typesContent, 'utf-8');\r\n}\r\n\r\n/**\r\n * Main function to generate routes\r\n */\r\nexport async function generateRoutes(options: {\r\n routesDir: string;\r\n outputDir: string;\r\n watch?: boolean;\r\n}): Promise<RouteManifest> {\r\n const { routesDir, outputDir } = options;\r\n\r\n console.log(`Scanning routes in: ${routesDir}`);\r\n\r\n const manifest = generateRouteManifest(routesDir);\r\n\r\n const stats = [\r\n `${manifest.routes.length} pages`,\r\n `${manifest.layouts.length} layouts`,\r\n `${manifest.loadingStates.length} loading states`,\r\n `${manifest.errorBoundaries.length} error boundaries`,\r\n `${manifest.notFoundPages.length} not-found pages`,\r\n `${manifest.apiRoutes.length} API routes`,\r\n ].join(', ');\r\n\r\n console.log(`Found: ${stats}`);\r\n\r\n generateRoutesFile(manifest, outputDir);\r\n\r\n console.log(`Generated route manifest in: ${outputDir}`);\r\n\r\n return manifest;\r\n}\r\n","/**\r\n * Types Generate Command\r\n *\r\n * Generates TypeScript declaration files for routes and environment variables.\r\n * This command is opt-in and explicit - follows Flight's toolbox philosophy.\r\n *\r\n * Usage:\r\n * flight types:generate # Generate route types (default)\r\n * flight types:generate --routes # Generate route types only\r\n * flight types:generate --env # Generate env types only\r\n * flight types:generate --watch # Watch mode for development\r\n *\r\n * Output:\r\n * src/.flight/routes.d.ts - Route type definitions\r\n * src/.flight/env.d.ts - Environment variable types\r\n */\r\n\r\nimport { resolve } from 'path';\r\nimport { generateTypes, watchAndGenerate } from '../generators/typegen.js';\r\n\r\nexport interface TypesGenerateOptions {\r\n /** Routes directory (default: src/routes) */\r\n routesDir?: string;\r\n\r\n /** Output directory (default: src/.flight) */\r\n outputDir?: string;\r\n\r\n /** Generate route types (default: true) */\r\n routes?: boolean;\r\n\r\n /** Generate environment variable types (default: false) */\r\n env?: boolean;\r\n\r\n /** Watch for changes and regenerate (default: false) */\r\n watch?: boolean;\r\n}\r\n\r\nexport async function typesGenerateCommand(options: TypesGenerateOptions = {}): Promise<void> {\r\n const cwd = process.cwd();\r\n\r\n const routesDir = options.routesDir\r\n ? resolve(cwd, options.routesDir)\r\n : resolve(cwd, 'src/routes');\r\n\r\n const outputDir = options.outputDir\r\n ? resolve(cwd, options.outputDir)\r\n : resolve(cwd, 'src/.flight');\r\n\r\n // Default to routes if no specific flag is set\r\n const includeRoutes = options.routes ?? (!options.env);\r\n const includeEnv = options.env ?? false;\r\n\r\n console.log('Flight Type Generator');\r\n console.log('---------------------');\r\n console.log(`Routes directory: ${routesDir}`);\r\n console.log(`Output directory: ${outputDir}`);\r\n console.log(`Generate routes: ${includeRoutes}`);\r\n console.log(`Generate env: ${includeEnv}`);\r\n console.log('');\r\n\r\n try {\r\n if (options.watch) {\r\n console.log('Watching for changes... (Ctrl+C to stop)');\r\n console.log('');\r\n\r\n const cleanup = watchAndGenerate({\r\n routesDir,\r\n outputDir,\r\n includeRoutes,\r\n includeEnv,\r\n projectRoot: cwd,\r\n onRegenerate: (result) => {\r\n console.log(`Regenerated: ${result.filesWritten.length} files`);\r\n },\r\n });\r\n\r\n // Handle graceful shutdown\r\n process.on('SIGINT', () => {\r\n console.log('\\nStopping watch mode...');\r\n cleanup();\r\n process.exit(0);\r\n });\r\n\r\n // Keep process alive\r\n await new Promise(() => { });\r\n } else {\r\n const result = await generateTypes({\r\n routesDir,\r\n outputDir,\r\n includeRoutes,\r\n includeEnv,\r\n projectRoot: cwd,\r\n });\r\n\r\n console.log('Type generation complete!');\r\n console.log('');\r\n console.log('Files written:');\r\n for (const file of result.filesWritten) {\r\n console.log(` - ${file}`);\r\n }\r\n console.log('');\r\n console.log('Add to your tsconfig.json includes:');\r\n console.log(' \"include\": [\"src\", \"src/.flight/*.d.ts\"]');\r\n }\r\n } catch (error) {\r\n console.error('Type generation failed:', error);\r\n process.exit(1);\r\n }\r\n}\r\n","/**\r\n * Flight CLI - Add Command\r\n * \r\n * Add Flight packages to an existing project.\r\n * Toolbox philosophy: add only what you need, when you need it.\r\n */\r\n\r\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\r\nimport { join, resolve } from 'node:path';\r\nimport { execSync } from 'node:child_process';\r\nimport pc from 'picocolors';\r\n\r\nconst PACKAGES: Record<string, PackageInfo> = {\r\n // Core\r\n 'http': {\r\n name: '@flight-framework/http',\r\n description: 'HTTP server with routing and middleware',\r\n category: 'core',\r\n },\r\n 'core': {\r\n name: '@flight-framework/core',\r\n description: 'File-based routing and configuration',\r\n category: 'core',\r\n },\r\n\r\n // Data\r\n 'db': {\r\n name: '@flight-framework/db',\r\n description: 'Database abstraction layer',\r\n category: 'data',\r\n drivers: ['pg', '@libsql/client', '@neondatabase/serverless', '@supabase/supabase-js'],\r\n },\r\n 'cache': {\r\n name: '@flight-framework/cache',\r\n description: 'Caching with multiple adapters',\r\n category: 'data',\r\n },\r\n\r\n // Auth\r\n 'auth': {\r\n name: '@flight-framework/auth',\r\n description: 'Authentication adapters',\r\n category: 'auth',\r\n },\r\n\r\n // Frontend\r\n 'forms': {\r\n name: '@flight-framework/forms',\r\n description: 'Type-safe form handling',\r\n category: 'frontend',\r\n },\r\n 'i18n': {\r\n name: '@flight-framework/i18n',\r\n description: 'Internationalization',\r\n category: 'frontend',\r\n },\r\n 'seo': {\r\n name: '@flight-framework/seo',\r\n description: 'SEO utilities',\r\n category: 'frontend',\r\n },\r\n 'image': {\r\n name: '@flight-framework/image',\r\n description: 'Image optimization',\r\n category: 'frontend',\r\n },\r\n\r\n // Communication\r\n 'email': {\r\n name: '@flight-framework/email',\r\n description: 'Email sending',\r\n category: 'communication',\r\n },\r\n 'realtime': {\r\n name: '@flight-framework/realtime',\r\n description: 'WebSocket and real-time features',\r\n category: 'communication',\r\n },\r\n\r\n // Deployment\r\n 'helpers': {\r\n name: '@flight-framework/helpers',\r\n description: 'Optional helper utilities (detection, suggestions)',\r\n category: 'utilities',\r\n },\r\n};\r\n\r\ninterface PackageInfo {\r\n name: string;\r\n description: string;\r\n category: string;\r\n drivers?: string[];\r\n}\r\n\r\nexport async function addCommand(packageName: string | undefined): Promise<void> {\r\n const cwd = process.cwd();\r\n\r\n // Check if we're in a project\r\n if (!existsSync(join(cwd, 'package.json'))) {\r\n console.log(pc.red('No package.json found. Run this command from your project directory.'));\r\n process.exit(1);\r\n }\r\n\r\n // If no package specified, show available packages\r\n if (!packageName) {\r\n showAvailablePackages();\r\n return;\r\n }\r\n\r\n // Find the package\r\n const pkg = PACKAGES[packageName];\r\n if (!pkg) {\r\n console.log(pc.red(`Unknown package: ${packageName}`));\r\n console.log(pc.dim('Run `flight add` to see available packages.'));\r\n process.exit(1);\r\n }\r\n\r\n console.log(`\\n${pc.cyan('Adding')} ${pc.bold(pkg.name)}...`);\r\n console.log(pc.dim(pkg.description));\r\n console.log();\r\n\r\n // Detect package manager\r\n const pm = detectPackageManager();\r\n\r\n // Install the package\r\n try {\r\n const installCmd = pm === 'npm' ? 'npm install' : `${pm} add`;\r\n execSync(`${installCmd} ${pkg.name}`, { cwd, stdio: 'inherit' });\r\n\r\n console.log(`\\n${pc.green('[OK]')} ${pkg.name} added successfully!`);\r\n\r\n // Show next steps\r\n showNextSteps(packageName, pkg);\r\n\r\n } catch (error) {\r\n console.log(pc.red(`\\nFailed to install ${pkg.name}`));\r\n process.exit(1);\r\n }\r\n}\r\n\r\nfunction detectPackageManager(): string {\r\n const cwd = process.cwd();\r\n if (existsSync(join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\r\n if (existsSync(join(cwd, 'yarn.lock'))) return 'yarn';\r\n if (existsSync(join(cwd, 'bun.lockb'))) return 'bun';\r\n return 'npm';\r\n}\r\n\r\nfunction showAvailablePackages(): void {\r\n console.log(`\r\n${pc.cyan('Available Flight packages:')}\r\n\r\n${pc.bold('Core')}\r\n ${pc.green('http')} ${pc.dim('HTTP server with routing and middleware')}\r\n ${pc.green('core')} ${pc.dim('File-based routing and configuration')}\r\n\r\n${pc.bold('Data')}\r\n ${pc.green('db')} ${pc.dim('Database abstraction layer')}\r\n ${pc.green('cache')} ${pc.dim('Caching with multiple adapters')}\r\n\r\n${pc.bold('Auth')}\r\n ${pc.green('auth')} ${pc.dim('Authentication adapters')}\r\n\r\n${pc.bold('Frontend')}\r\n ${pc.green('forms')} ${pc.dim('Type-safe form handling')}\r\n ${pc.green('i18n')} ${pc.dim('Internationalization')}\r\n ${pc.green('seo')} ${pc.dim('SEO utilities')}\r\n ${pc.green('image')} ${pc.dim('Image optimization')}\r\n\r\n${pc.bold('Communication')}\r\n ${pc.green('email')} ${pc.dim('Email sending')}\r\n ${pc.green('realtime')} ${pc.dim('WebSocket and real-time features')}\r\n\r\n${pc.bold('Utilities')}\r\n ${pc.green('helpers')} ${pc.dim('Optional helper utilities')}\r\n\r\n${pc.cyan('Usage:')}\r\n flight add http\r\n flight add db\r\n flight add auth\r\n`);\r\n}\r\n\r\nfunction showNextSteps(packageName: string, pkg: PackageInfo): void {\r\n const examples: Record<string, string> = {\r\n 'http': `\r\n${pc.cyan('Quick example:')}\r\n\r\n import { createServer } from '@flight-framework/http';\r\n \r\n const app = createServer();\r\n app.get('/', (c) => c.json({ hello: 'world' }));\r\n \r\n export default { port: 3000, fetch: app.fetch };\r\n`,\r\n 'db': `\r\n${pc.cyan('Quick example:')}\r\n\r\n import { createDb } from '@flight-framework/db';\r\n import { postgres } from '@flight-framework/db/postgres';\r\n \r\n const db = createDb(postgres({ connectionString: process.env.DATABASE_URL }));\r\n const users = await db.query('SELECT * FROM users');\r\n\r\n${pc.dim('You may also need a driver:')}\r\n npm install pg ${pc.dim('# PostgreSQL')}\r\n npm install @libsql/client ${pc.dim('# Turso/SQLite')}\r\n npm install @neondatabase/serverless ${pc.dim('# Neon')}\r\n`,\r\n 'cache': `\r\n${pc.cyan('Quick example:')}\r\n\r\n import { createCache, lru } from '@flight-framework/cache';\r\n \r\n const cache = createCache(lru({ max: 1000 }));\r\n await cache.set('key', { data: 'value' });\r\n const value = await cache.get('key');\r\n`,\r\n 'auth': `\r\n${pc.cyan('Quick example:')}\r\n\r\n import { createAuth } from '@flight-framework/auth';\r\n import { betterAuth } from '@flight-framework/auth/better-auth';\r\n \r\n const auth = createAuth(betterAuth({ db }));\r\n const user = await auth.getUser(request);\r\n`,\r\n 'forms': `\r\n${pc.cyan('Quick example:')}\r\n\r\n import { createForm } from '@flight-framework/forms';\r\n import { zodAdapter } from '@flight-framework/forms/adapters/zod';\r\n \r\n const form = createForm({ schema: zodAdapter(schema) });\r\n const result = form.validate(data);\r\n`,\r\n };\r\n\r\n if (examples[packageName]) {\r\n console.log(examples[packageName]);\r\n }\r\n\r\n console.log(`${pc.dim('Docs:')} https://flight.dev/docs/packages/${packageName}`);\r\n}\r\n\r\nexport function registerAddCommand(program: any): void {\r\n program\r\n .command('add [package]')\r\n .description('Add a Flight package to your project')\r\n .action(addCommand);\r\n}\r\n","/**\r\n * Flight CLI - Adapter Create Command\r\n * \r\n * Scaffolds a new adapter package with all necessary files.\r\n * \r\n * Usage:\r\n * flight adapter:create my-platform\r\n * flight adapter:create my-platform --type edge\r\n * flight adapter:create my-platform --validation\r\n * \r\n * @module @flight-framework/cli/commands/adapter-create\r\n */\r\n\r\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs';\r\nimport { join, resolve } from 'node:path';\r\nimport pc from 'picocolors';\r\n\r\nexport interface AdapterCreateOptions {\r\n /** Adapter name (e.g., 'my-platform') */\r\n name: string;\r\n /** Platform type for template selection */\r\n type?: 'node' | 'edge' | 'container' | 'serverless';\r\n /** Include Zod validation example */\r\n validation?: boolean;\r\n /** Output directory (default: packages/adapter-{name}) */\r\n outputDir?: string;\r\n}\r\n\r\nexport async function adapterCreateCommand(name: string, options: Partial<AdapterCreateOptions> = {}): Promise<void> {\r\n const cwd = process.cwd();\r\n const adapterName = name.toLowerCase().replace(/[^a-z0-9-]/g, '-');\r\n const packageName = `@flight-framework/adapter-${adapterName}`;\r\n const outputDir = options.outputDir || join(cwd, 'packages', `adapter-${adapterName}`);\r\n const type = options.type || 'node';\r\n const includeValidation = options.validation || false;\r\n\r\n console.log(pc.cyan(`\\n Creating adapter: ${packageName}\\n`));\r\n\r\n // Check if directory exists\r\n if (existsSync(outputDir)) {\r\n console.error(pc.red(` Error: Directory already exists: ${outputDir}`));\r\n process.exit(1);\r\n }\r\n\r\n // Create directory structure\r\n mkdirSync(join(outputDir, 'src'), { recursive: true });\r\n mkdirSync(join(outputDir, 'tests'), { recursive: true });\r\n\r\n // Generate files\r\n const files = generateAdapterFiles(adapterName, packageName, type, includeValidation);\r\n\r\n for (const [filePath, content] of Object.entries(files)) {\r\n const fullPath = join(outputDir, filePath);\r\n writeFileSync(fullPath, content, 'utf-8');\r\n console.log(pc.green(` ✓ Created ${filePath}`));\r\n }\r\n\r\n console.log(pc.cyan(`\r\n Adapter created successfully!\r\n\r\n Next steps:\r\n 1. cd packages/adapter-${adapterName}\r\n 2. Implement your adapter logic in src/index.ts\r\n 3. Run: pnpm build\r\n 4. Test: pnpm test\r\n\r\n Documentation:\r\n https://flight.dev/docs/adapters/custom\r\n`));\r\n}\r\n\r\nfunction generateAdapterFiles(\r\n name: string,\r\n packageName: string,\r\n type: string,\r\n includeValidation: boolean\r\n): Record<string, string> {\r\n const pascalName = name\r\n .split('-')\r\n .map(s => s.charAt(0).toUpperCase() + s.slice(1))\r\n .join('');\r\n\r\n return {\r\n 'package.json': generatePackageJson(packageName, includeValidation),\r\n 'tsconfig.json': generateTsConfig(),\r\n 'tsup.config.ts': generateTsupConfig(),\r\n 'src/index.ts': generateAdapterSource(name, pascalName, type, includeValidation),\r\n 'tests/adapter.test.ts': generateAdapterTest(name, pascalName),\r\n 'README.md': generateReadme(name, packageName),\r\n };\r\n}\r\n\r\nfunction generatePackageJson(packageName: string, includeValidation: boolean): string {\r\n const pkg = {\r\n name: packageName,\r\n version: '0.1.0',\r\n description: `Flight adapter for custom platform`,\r\n type: 'module',\r\n main: './dist/index.js',\r\n types: './dist/index.d.ts',\r\n exports: {\r\n '.': {\r\n types: './dist/index.d.ts',\r\n import: './dist/index.js',\r\n },\r\n },\r\n scripts: {\r\n build: 'tsup',\r\n test: 'vitest run',\r\n 'test:watch': 'vitest',\r\n },\r\n dependencies: {\r\n '@flight-framework/core': '^0.4.0',\r\n },\r\n devDependencies: {\r\n tsup: '^8.0.0',\r\n typescript: '^5.0.0',\r\n vitest: '^2.0.0',\r\n ...(includeValidation ? { zod: '^3.23.0' } : {}),\r\n },\r\n peerDependencies: includeValidation ? {\r\n zod: '^3.0.0',\r\n } : undefined,\r\n peerDependenciesMeta: includeValidation ? {\r\n zod: { optional: true },\r\n } : undefined,\r\n };\r\n\r\n return JSON.stringify(pkg, null, 2);\r\n}\r\n\r\nfunction generateTsConfig(): string {\r\n return JSON.stringify({\r\n extends: '../../tsconfig.base.json',\r\n compilerOptions: {\r\n outDir: './dist',\r\n rootDir: './src',\r\n },\r\n include: ['src'],\r\n }, null, 2);\r\n}\r\n\r\nfunction generateTsupConfig(): string {\r\n return `import { defineConfig } from 'tsup';\r\n\r\nexport default defineConfig({\r\n entry: ['src/index.ts'],\r\n format: ['esm'],\r\n dts: true,\r\n clean: true,\r\n target: 'node20',\r\n});\r\n`;\r\n}\r\n\r\nfunction generateAdapterSource(\r\n name: string,\r\n pascalName: string,\r\n type: string,\r\n includeValidation: boolean\r\n): string {\r\n if (includeValidation) {\r\n return `/**\r\n * Flight Adapter - ${pascalName}\r\n * \r\n * Custom deployment adapter with optional Zod validation.\r\n */\r\n\r\nimport { createValidatedAdapter, type AdapterBuilder } from '@flight-framework/core/adapters';\r\nimport { z } from 'zod';\r\n\r\n// ============================================================================\r\n// Options Schema (Optional - Zod validation)\r\n// ============================================================================\r\n\r\nconst optionsSchema = z.object({\r\n /** Server port */\r\n port: z.number().default(3000),\r\n /** Enable health check endpoint */\r\n healthCheck: z.boolean().default(true),\r\n /** Custom environment variables */\r\n env: z.record(z.string()).optional(),\r\n});\r\n\r\nexport type ${pascalName}AdapterOptions = z.infer<typeof optionsSchema>;\r\n\r\n// ============================================================================\r\n// Adapter Implementation\r\n// ============================================================================\r\n\r\nexport default createValidatedAdapter('${name}', optionsSchema, (options) => ({\r\n async adapt(builder: AdapterBuilder) {\r\n builder.log.info(\\`Building for ${pascalName} platform...\\`);\r\n builder.log.info(\\`Port: \\${options.port}\\`);\r\n\r\n // Generate server entry\r\n await generateServerEntry(builder, options);\r\n\r\n // Generate platform-specific config\r\n await generatePlatformConfig(builder, options);\r\n\r\n builder.log.info('Build complete!');\r\n },\r\n\r\n supports: {\r\n node: () => ${type === 'node' || type === 'container'},\r\n edge: () => ${type === 'edge' || type === 'serverless'},\r\n streaming: () => ${type === 'node'},\r\n websockets: () => ${type === 'node'},\r\n },\r\n\r\n emulate: () => ({\r\n env: {\r\n ${name.toUpperCase().replace(/-/g, '_')}_PLATFORM: 'true',\r\n PORT: String(options.port),\r\n },\r\n }),\r\n}));\r\n\r\n// ============================================================================\r\n// Generator Functions\r\n// ============================================================================\r\n\r\nasync function generateServerEntry(builder: AdapterBuilder, options: ${pascalName}AdapterOptions): Promise<void> {\r\n const serverCode = \\`\r\nimport { createUniversalHandler } from '@flight-framework/core/adapters';\r\nimport manifest from './manifest.js';\r\n\r\nconst handler = createUniversalHandler(manifest);\r\n\r\nconst server = Bun.serve({\r\n port: \\${options.port},\r\n fetch: handler,\r\n});\r\n\r\nconsole.log(\\\\\\`Server running at http://localhost:\\${options.port}\\\\\\`);\r\n\\`;\r\n\r\n await builder.writeFile('server.ts', serverCode.trim());\r\n}\r\n\r\nasync function generatePlatformConfig(builder: AdapterBuilder, options: ${pascalName}AdapterOptions): Promise<void> {\r\n const config = {\r\n name: '${name}-app',\r\n port: options.port,\r\n healthCheck: options.healthCheck ? '/health' : null,\r\n };\r\n\r\n await builder.writeFile('platform.json', JSON.stringify(config, null, 2));\r\n}\r\n`;\r\n }\r\n\r\n // Without validation (default)\r\n return `/**\r\n * Flight Adapter - ${pascalName}\r\n * \r\n * Custom deployment adapter for ${pascalName} platform.\r\n * \r\n * @example\r\n * \\`\\`\\`typescript\r\n * import ${name.replace(/-/g, '')} from '${name.includes('@') ? name : `@flight-framework/adapter-${name}`}';\r\n * \r\n * export default defineConfig({\r\n * adapter: ${name.replace(/-/g, '')}({\r\n * port: 3000,\r\n * }),\r\n * });\r\n * \\`\\`\\`\r\n */\r\n\r\nimport { createAdapter, type AdapterBuilder } from '@flight-framework/core/adapters';\r\n\r\n// ============================================================================\r\n// Options Interface\r\n// ============================================================================\r\n\r\nexport interface ${pascalName}AdapterOptions {\r\n /** Server port (default: 3000) */\r\n port?: number;\r\n /** Enable health check endpoint (default: true) */\r\n healthCheck?: boolean;\r\n /** Custom environment variables */\r\n env?: Record<string, string>;\r\n}\r\n\r\n// ============================================================================\r\n// Adapter Implementation\r\n// ============================================================================\r\n\r\nexport default function ${name.replace(/-/g, '')}Adapter(options: ${pascalName}AdapterOptions = {}) {\r\n const {\r\n port = 3000,\r\n healthCheck = true,\r\n env = {},\r\n } = options;\r\n\r\n return createAdapter({\r\n name: '${name}',\r\n\r\n async adapt(builder: AdapterBuilder) {\r\n builder.log.info(\\`Building for ${pascalName} platform...\\`);\r\n builder.log.info(\\`Port: \\${port}\\`);\r\n\r\n // Generate server entry\r\n await generateServerEntry(builder, port, healthCheck);\r\n\r\n // Generate platform-specific config\r\n await generatePlatformConfig(builder, port, healthCheck);\r\n\r\n builder.log.info('Build complete!');\r\n },\r\n\r\n supports: {\r\n node: () => ${type === 'node' || type === 'container'},\r\n edge: () => ${type === 'edge' || type === 'serverless'},\r\n streaming: () => ${type === 'node'},\r\n websockets: () => ${type === 'node'},\r\n },\r\n\r\n emulate: () => ({\r\n env: {\r\n ${name.toUpperCase().replace(/-/g, '_')}_PLATFORM: 'true',\r\n PORT: String(port),\r\n ...env,\r\n },\r\n }),\r\n });\r\n}\r\n\r\n// ============================================================================\r\n// Generator Functions\r\n// ============================================================================\r\n\r\nasync function generateServerEntry(\r\n builder: AdapterBuilder,\r\n port: number,\r\n healthCheck: boolean\r\n): Promise<void> {\r\n const serverCode = \\`\r\nimport { createServer } from 'node:http';\r\nimport { createUniversalHandler } from '@flight-framework/core/adapters';\r\nimport manifest from './manifest.js';\r\n\r\nconst handler = createUniversalHandler(manifest);\r\n\r\nconst server = createServer(async (req, res) => {\r\n const url = req.url || '/';\r\n \r\n // Health check endpoint\r\n if (url === '/health' && \\${healthCheck}) {\r\n res.writeHead(200, { 'Content-Type': 'application/json' });\r\n res.end(JSON.stringify({ status: 'ok' }));\r\n return;\r\n }\r\n\r\n // Handle request with Flight\r\n const webReq = new Request(\\\\\\`http://localhost\\${url}\\\\\\`, {\r\n method: req.method,\r\n headers: Object.fromEntries(\r\n Object.entries(req.headers).filter(([_, v]) => v != null).map(([k, v]) => [k, String(v)])\r\n ),\r\n });\r\n\r\n const response = await handler(webReq);\r\n\r\n res.writeHead(response.status, Object.fromEntries(response.headers));\r\n res.end(await response.text());\r\n});\r\n\r\nserver.listen(\\${port}, () => {\r\n console.log(\\\\\\`Server running at http://localhost:\\${port}\\\\\\`);\r\n});\r\n\\`;\r\n\r\n await builder.writeFile('server.mjs', serverCode.trim());\r\n}\r\n\r\nasync function generatePlatformConfig(\r\n builder: AdapterBuilder,\r\n port: number,\r\n healthCheck: boolean\r\n): Promise<void> {\r\n const config = {\r\n name: '${name}-app',\r\n port,\r\n healthCheck: healthCheck ? '/health' : null,\r\n };\r\n\r\n await builder.writeFile('platform.json', JSON.stringify(config, null, 2));\r\n}\r\n`;\r\n}\r\n\r\nfunction generateAdapterTest(name: string, pascalName: string): string {\r\n return `/**\r\n * ${pascalName} Adapter Tests\r\n */\r\n\r\nimport { describe, it, expect, vi } from 'vitest';\r\nimport adapter from '../src/index.js';\r\n\r\ndescribe('adapter-${name}', () => {\r\n const createMockBuilder = () => ({\r\n manifest: {\r\n entries: {},\r\n files: [],\r\n routes: [],\r\n },\r\n root: '/test',\r\n outDir: '/test/dist',\r\n readFile: vi.fn(),\r\n writeFile: vi.fn(),\r\n copy: vi.fn(),\r\n glob: vi.fn(),\r\n log: {\r\n info: vi.fn(),\r\n warn: vi.fn(),\r\n error: vi.fn(),\r\n },\r\n });\r\n\r\n it('should have correct name', () => {\r\n const instance = adapter();\r\n expect(instance.name).toBe('${name}');\r\n });\r\n\r\n it('should generate server entry', async () => {\r\n const instance = adapter({ port: 4000 });\r\n const builder = createMockBuilder();\r\n\r\n await instance.adapt(builder);\r\n\r\n expect(builder.writeFile).toHaveBeenCalledWith(\r\n 'server.mjs',\r\n expect.stringContaining('4000')\r\n );\r\n });\r\n\r\n it('should generate platform config', async () => {\r\n const instance = adapter();\r\n const builder = createMockBuilder();\r\n\r\n await instance.adapt(builder);\r\n\r\n expect(builder.writeFile).toHaveBeenCalledWith(\r\n 'platform.json',\r\n expect.any(String)\r\n );\r\n });\r\n\r\n it('should declare supported features', () => {\r\n const instance = adapter();\r\n\r\n expect(instance.supports?.node?.()).toBeDefined();\r\n expect(instance.supports?.streaming?.()).toBeDefined();\r\n });\r\n\r\n it('should provide emulation environment', () => {\r\n const instance = adapter({ port: 5000 });\r\n const emulation = instance.emulate?.();\r\n\r\n expect(emulation?.env?.PORT).toBe('5000');\r\n expect(emulation?.env?.${name.toUpperCase().replace(/-/g, '_')}_PLATFORM).toBe('true');\r\n });\r\n});\r\n`;\r\n}\r\n\r\nfunction generateReadme(name: string, packageName: string): string {\r\n return `# ${packageName}\r\n\r\nFlight adapter for ${name} platform.\r\n\r\n## Installation\r\n\r\n\\`\\`\\`bash\r\nnpm install ${packageName}\r\n\\`\\`\\`\r\n\r\n## Usage\r\n\r\n\\`\\`\\`typescript\r\nimport { defineConfig } from '@flight-framework/core';\r\nimport ${name.replace(/-/g, '')} from '${packageName}';\r\n\r\nexport default defineConfig({\r\n adapter: ${name.replace(/-/g, '')}({\r\n port: 3000,\r\n healthCheck: true,\r\n }),\r\n});\r\n\\`\\`\\`\r\n\r\n## Options\r\n\r\n| Option | Type | Default | Description |\r\n|--------|------|---------|-------------|\r\n| \\`port\\` | \\`number\\` | \\`3000\\` | Server port |\r\n| \\`healthCheck\\` | \\`boolean\\` | \\`true\\` | Enable health check endpoint |\r\n| \\`env\\` | \\`Record<string, string>\\` | \\`{}\\` | Custom environment variables |\r\n\r\n## License\r\n\r\nMIT\r\n`;\r\n}\r\n"],"mappings":"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","names":["cli","run","import_picocolors","pc","projectPath","import_picocolors","resolve","join","readFileSync","existsSync","existsSync","readFileSync","writeFileSync","mkdirSync","readdirSync","join","pc","resolve","join","existsSync","readFileSync","import_picocolors","resolve","existsSync","loadConfig","resolve","existsSync","pc","loadConfig","import_picocolors","resolve","loadConfig","pc","resolve","loadConfig","resolve","readdirSync","statSync","existsSync","writeFileSync","mkdirSync","join","dirname","filePathToUrlPath","existsSync","readdirSync","join","statSync","filePathToUrlPath","dirname","mkdirSync","writeFileSync","resolve","resolve","resolve","import_picocolors","existsSync","join","execSync","pc","detectPackageManager","import_picocolors","existsSync","mkdirSync","writeFileSync","join","pc","pc"]}