@flight-framework/cli 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +311 -2
- package/dist/bin.js.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.js +311 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/templates/base/flight.config.ts.template +7 -2
- package/templates/htmx/package.json.template +7 -3
- package/templates/lit/package.json.template +5 -3
- package/templates/preact/package.json.template +5 -3
- package/templates/qwik/package.json.template +5 -3
- package/templates/react/package.json.template +5 -3
- package/templates/solid/package.json.template +5 -3
- package/templates/svelte/package.json.template +5 -3
- package/templates/vanilla/package.json.template +7 -3
- package/templates/vue/package.json.template +5 -3
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/commands/build.ts","../src/commands/preview.ts"],"sourcesContent":["/**\r\n * Flight CLI - Command-line interface\r\n */\r\n\r\nimport { 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\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('--ts', 'Use TypeScript', { default: true })\r\n .option('--git', 'Initialize git repository', { default: true })\r\n .option('--install', 'Install dependencies', { default: true })\r\n .action(createCommand);\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\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 ts: boolean;\r\n git: boolean;\r\n install: 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\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 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 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 copyTemplate(projectPath, uiFramework, projectName);\r\n console.log(pc.green('✓') + ' 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, 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 '{{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 * 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 * 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 */\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\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 // 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 * 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"],"mappings":"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","names":["pc","resolve","join","readFileSync","existsSync","pc","pc","resolve","join","existsSync","readFileSync","resolve","existsSync","pc","loadConfig","resolve","existsSync","pc","loadConfig","resolve","pc","loadConfig","pc","resolve","loadConfig","pc"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/preview.ts","../src/commands/routes-generate.ts","../src/generators/routes.ts"],"sourcesContent":["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\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('--ts', 'Use TypeScript', { default: true })\r\n .option('--git', 'Initialize git repository', { default: true })\r\n .option('--install', 'Install dependencies', { default: true })\r\n .action(createCommand);\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\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 ts: boolean;\r\n git: boolean;\r\n install: 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\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 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 // 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 copyTemplate(projectPath, uiFramework, bundler, projectName);\r\n console.log(pc.green('✓') + ' 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 * 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 * 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 */\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\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 // 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 * 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"],"mappings":"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","names":["pc","resolve","join","readFileSync","existsSync","pc","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","existsSync","readdirSync","join","statSync","dirname","mkdirSync","writeFileSync","resolve","pc"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flight-framework/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.11",
|
|
4
4
|
"description": "Command-line interface for Flight Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"flight",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"typecheck": "tsc --noEmit"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@flight-framework/core": "
|
|
37
|
+
"@flight-framework/core": "workspace:*",
|
|
38
38
|
"@flight-framework/http": "0.0.1",
|
|
39
39
|
"cac": "^6.7.14",
|
|
40
40
|
"picocolors": "^1.1.0",
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
// Flight Framework Configuration
|
|
2
|
+
// Using {{BUNDLER}} bundler with {{UI_FRAMEWORK}} UI
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
import { defineConfig } from '@flight-framework/core';
|
|
5
|
+
import { {{BUNDLER}} } from '{{BUNDLER_PACKAGE}}';
|
|
6
|
+
|
|
7
|
+
export default defineConfig({
|
|
8
|
+
bundler: {{BUNDLER}}(),
|
|
4
9
|
ui: {
|
|
5
10
|
framework: '{{UI_FRAMEWORK}}',
|
|
6
11
|
},
|
|
7
12
|
rendering: {
|
|
8
13
|
default: 'ssr',
|
|
9
14
|
},
|
|
10
|
-
};
|
|
15
|
+
});
|
|
@@ -4,9 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1"
|
|
10
14
|
},
|
|
11
15
|
"devDependencies": {
|
|
12
16
|
"vite": "^6.0.0"
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1",
|
|
12
14
|
"lit": "^3.2.0"
|
|
13
15
|
},
|
|
14
16
|
"devDependencies": {
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1",
|
|
12
14
|
"preact": "^10.25.0"
|
|
13
15
|
},
|
|
14
16
|
"devDependencies": {
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1",
|
|
12
14
|
"@builder.io/qwik": "^2.0.0"
|
|
13
15
|
},
|
|
14
16
|
"devDependencies": {
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1",
|
|
12
14
|
"react": "^19.0.0",
|
|
13
15
|
"react-dom": "^19.0.0"
|
|
14
16
|
},
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1",
|
|
12
14
|
"solid-js": "^1.9.0"
|
|
13
15
|
},
|
|
14
16
|
"devDependencies": {
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1",
|
|
12
14
|
"svelte": "^5.0.0"
|
|
13
15
|
},
|
|
14
16
|
"devDependencies": {
|
|
@@ -4,9 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1"
|
|
10
14
|
},
|
|
11
15
|
"devDependencies": {
|
|
12
16
|
"typescript": "^5.7.0",
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"dev": "
|
|
8
|
-
"build": "
|
|
9
|
-
"preview": "
|
|
7
|
+
"dev": "flight dev",
|
|
8
|
+
"build": "flight build",
|
|
9
|
+
"preview": "flight preview"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@flight-framework/core": "^0.0.1",
|
|
13
|
+
"{{BUNDLER_PACKAGE}}": "^0.0.1",
|
|
12
14
|
"vue": "^3.5.0"
|
|
13
15
|
},
|
|
14
16
|
"devDependencies": {
|