@lytjs/cli 6.8.0 → 6.9.1
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/index.cjs +1 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -10
- package/dist/index.mjs.map +1 -1
- package/dist/lyt.cjs +1 -10
- package/dist/lyt.cjs.map +1 -1
- package/dist/lyt.mjs +1 -10
- package/dist/lyt.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/logger.ts","../src/utils/fs.ts","../src/utils/package.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/test.ts","../src/commands/add.ts","../src/commands/generate.ts","../src/commands/plugin.ts","../src/commands/run.ts","../src/index.ts"],"names":["path","existsSync","join","dev","execSync","spawn","TEMPLATES","resolve","toPascalCase","toCamelCase","isEmptyDir","mkdirSync","writeFileSync","readFileSync","readdirSync"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @lytjs/cli - Logger utilities\n */\n\nconst colors = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n cyan: '\\x1b[36m',\n};\n\nfunction colorize(text: string, color: keyof typeof colors): string {\n if (!isColorSupported()) return text;\n return `${colors[color]}${text}${colors.reset}`;\n}\n\nexport const logger = {\n info(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize('ℹ ', 'blue') + message);\n },\n\n success(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize('✔ ', 'green') + message);\n },\n\n warning(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize('⚠ ', 'yellow') + message);\n },\n\n error(message: string): void {\n console.error(colorize('✖ ', 'red') + message);\n },\n\n dim(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize(message, 'dim'));\n },\n\n bold(message: string): string {\n return colorize(message, 'bright');\n },\n};\n\n/**\n * Check if terminal supports colors\n */\nexport function isColorSupported(): boolean {\n return process.stdout.isTTY && process.env.NO_COLOR !== '1';\n}\n","/**\n * @lytjs/cli - File system utilities\n */\n\nimport { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync } from 'fs';\nimport { join, dirname } from 'path';\n\n/**\n * Ensure directory exists (create if not)\n */\nexport function ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Write a file with content, creating parent directories if needed\n */\nexport function writeFile(filePath: string, content: string): void {\n ensureDir(dirname(filePath));\n writeFileSync(filePath, content, 'utf-8');\n}\n\n/**\n * Read a file as string\n */\nexport function readFile(filePath: string): string {\n return readFileSync(filePath, 'utf-8');\n}\n\n/**\n * Check if path exists\n */\nexport function exists(path: string): boolean {\n return existsSync(path);\n}\n\n/**\n * Copy directory recursively\n */\nexport function copyDir(src: string, dest: string): void {\n ensureDir(dest);\n const entries = readdirSync(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = join(src, entry.name);\n const destPath = join(dest, entry.name);\n\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath);\n } else {\n writeFile(destPath, readFileSync(srcPath, 'utf-8'));\n }\n }\n}\n\n/**\n * Check if directory is empty\n */\nexport function isEmptyDir(dir: string): boolean {\n if (!existsSync(dir)) return true;\n const files = readdirSync(dir);\n return files.length === 0;\n}\n","/**\n * @lytjs/cli - Package manager utilities\n */\n\nimport { execSync } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm';\n\n/**\n * Detect which package manager to use\n */\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManager {\n // Check for lock files\n if (existsSync(join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(cwd, 'yarn.lock'))) return 'yarn';\n if (existsSync(join(cwd, 'package-lock.json'))) return 'npm';\n\n // Default to pnpm if available\n try {\n execSync('pnpm --version', { stdio: 'ignore' });\n return 'pnpm';\n } catch {\n // Fall back to npm\n return 'npm';\n }\n}\n\n/**\n * Get install command for package manager\n */\nexport function getInstallCommand(pm: PackageManager): string {\n switch (pm) {\n case 'pnpm':\n return 'pnpm install';\n case 'yarn':\n return 'yarn';\n case 'npm':\n return 'npm install';\n }\n}\n\n/**\n * Get run command for package manager\n */\nexport function getRunCommand(pm: PackageManager, script: string): string {\n switch (pm) {\n case 'pnpm':\n return `pnpm run ${script}`;\n case 'yarn':\n return `yarn ${script}`;\n case 'npm':\n return `npm run ${script}`;\n }\n}\n\n/**\n * Get add dependency command\n */\nexport function getAddCommand(pm: PackageManager, dep: string, dev: boolean = false): string {\n const devFlag = dev ? ' -D' : '';\n switch (pm) {\n case 'pnpm':\n return `pnpm add${devFlag} ${dep}`;\n case 'yarn':\n return `yarn add${devFlag} ${dep}`;\n case 'npm':\n return `npm install${devFlag} ${dep}`;\n }\n}\n","/**\n * @lytjs/cli - create command\n *\n * Creates a new LytJS project from a template.\n */\n\nimport type { CreateOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { ensureDir, writeFile, exists, isEmptyDir } from '../utils/fs';\nimport { detectPackageManager, getInstallCommand } from '../utils/package';\nimport { join, resolve } from 'path';\nimport { execSync } from 'child_process';\n\nconst TEMPLATES = {\n default: 'Default template with TypeScript and Vite',\n minimal: 'Minimal template without extra dependencies',\n ssr: 'SSR-enabled template',\n router: 'Template with Router integration',\n store: 'Template with Store integration',\n full: 'Full-featured template with Router, Store, and UI components',\n};\n\n/**\n * Create a new LytJS project\n */\nexport async function create(\n projectName?: string,\n options: Partial<CreateOptions> = {},\n): Promise<void> {\n if (!projectName) {\n logger.error('Please provide a project name.');\n logger.info('Usage: lyt create <project-name>');\n process.exit(1);\n }\n const targetDir = resolve(process.cwd(), projectName);\n\n // Check if directory exists and is not empty\n if (exists(targetDir) && !isEmptyDir(targetDir) && !options.force) {\n logger.error(`Directory \"${projectName}\" already exists and is not empty.`);\n logger.info('Use --force to overwrite.');\n process.exit(1);\n }\n\n logger.info(`Creating a new LytJS project in ${targetDir}...`);\n\n // Create directory\n ensureDir(targetDir);\n\n // Generate project files\n generateProjectFiles(targetDir, projectName, options.template || 'default');\n\n // Install dependencies\n logger.info('Installing dependencies...');\n const pm = detectPackageManager();\n try {\n execSync(getInstallCommand(pm), { cwd: targetDir, stdio: 'inherit' });\n logger.success('Dependencies installed successfully!');\n } catch (_error) {\n logger.warning('Failed to install dependencies automatically.');\n logger.info(`Please run \"${getInstallCommand(pm)}\" manually.`);\n }\n\n // Print next steps\n logger.success(`Project \"${projectName}\" created successfully!`);\n logger.info('');\n logger.bold('Next steps:');\n logger.info(` cd ${projectName}`);\n logger.info(` ${pm === 'npm' ? 'npm run' : pm} dev`);\n}\n\n/**\n * Generate project files\n */\nfunction generateProjectFiles(targetDir: string, projectName: string, template: string): void {\n // Determine template-specific settings\n const isMinimal = template === 'minimal';\n const isSsr = template === 'ssr';\n const isRouter = template === 'router' || template === 'full';\n const isStore = template === 'store' || template === 'full';\n const isFull = template === 'full';\n\n // package.json - use explicit type to allow property access\n interface PackageJsonTemplate {\n name: string;\n version: string;\n type: string;\n scripts: Record<string, string>;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n }\n\n const packageJson: PackageJsonTemplate = {\n name: projectName,\n version: '0.0.0',\n type: 'module',\n scripts: {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n },\n dependencies: {\n '@lytjs/core': '^6.0.0',\n },\n devDependencies: {\n '@lytjs/plugin-vite': '^6.0.0',\n vite: '^5.0.0',\n },\n };\n\n // Minimal template: no vitest, no test script\n if (!isMinimal) {\n packageJson.scripts.test = 'vitest';\n packageJson.devDependencies.vitest = '^1.0.0';\n }\n\n // SSR template: add @lytjs/server dependency\n if (isSsr) {\n packageJson.dependencies['@lytjs/server'] = '^6.0.0';\n packageJson.scripts['build:client'] = 'vite build --ssrManifest';\n packageJson.scripts['build:server'] = 'vite build --ssr src/entry-server.ts';\n packageJson.scripts['build'] = 'npm run build:client && npm run build:server';\n packageJson.scripts['preview'] = 'node server';\n }\n\n // Router template: add @lytjs/router\n if (isRouter) {\n packageJson.dependencies['@lytjs/router'] = '^1.0.0';\n }\n\n // Store template: add @lytjs/store\n if (isStore) {\n packageJson.dependencies['@lytjs/store'] = '^1.0.0';\n }\n\n // Full template: add @lytjs/ui\n if (isFull) {\n packageJson.dependencies['@lytjs/ui'] = '^0.4.0';\n }\n\n writeFile(join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2));\n\n // vite.config.ts\n let viteConfig: string;\n if (isSsr) {\n viteConfig = `import { defineConfig } from 'vite';\nimport lytjs from '@lytjs/plugin-vite';\n\nexport default defineConfig({\n plugins: [lytjs()],\n build: {\n ssrManifest: true,\n },\n});\n`;\n } else {\n viteConfig = `import { defineConfig } from 'vite';\nimport lytjs from '@lytjs/plugin-vite';\n\nexport default defineConfig({\n plugins: [lytjs()],\n});\n`;\n }\n writeFile(join(targetDir, 'vite.config.ts'), viteConfig);\n\n // index.html\n const indexHtml = `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${projectName}</title>\n </head>\n <body>\n <div id=\"app\"></div>\n <script type=\"module\" src=\"/src/main.ts\"></script>\n </body>\n</html>\n`;\n writeFile(join(targetDir, 'index.html'), indexHtml);\n\n // src/main.ts\n let mainTs: string;\n if (isSsr) {\n mainTs = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\nimport { createSSRApp } from '@lytjs/server';\n${isRouter ? \"import { createRouter, createWebHistory } from '@lytjs/router';\" : ''}\n${isStore ? \"import { createPinia } from '@lytjs/store';\" : ''}\n\nconst app = createSSRApp(App);\n${isStore ? 'app.use(createPinia());' : ''}\n${\n isRouter\n ? `\nconst router = createRouter({\n history: createWebHistory(),\n routes: [\n { path: '/', component: () => import('./pages/Home.lyt') },\n { path: '/about', component: () => import('./pages/About.lyt') },\n ],\n});\napp.use(router);\n`\n : ''\n}\napp.mount('#app');\n`;\n } else if (isRouter || isStore) {\n mainTs = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\n${isRouter ? \"import { createRouter, createWebHistory } from '@lytjs/router';\" : ''}\n${isStore ? \"import { createPinia } from '@lytjs/store';\" : ''}\n\nconst app = createApp(App);\n${isStore ? 'app.use(createPinia());' : ''}\n${\n isRouter\n ? `\nconst router = createRouter({\n history: createWebHistory(),\n routes: [\n { path: '/', component: () => import('./pages/Home.lyt') },\n { path: '/about', component: () => import('./pages/About.lyt') },\n ],\n});\napp.use(router);\n`\n : ''\n}\napp.mount('#app');\n`;\n } else {\n mainTs = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\n\ncreateApp(App).mount('#app');\n`;\n }\n writeFile(join(targetDir, 'src/main.ts'), mainTs);\n\n // src/App.lyt\n let appLyt: string;\n if (isMinimal) {\n appLyt = `<template>\n <div class=\"app\">\n <h1>{{ title }}</h1>\n </div>\n</template>\n\n<script setup>\nconst title = 'Hello LytJS!';\n</script>\n\n<style scoped>\n.app {\n text-align: center;\n}\n</style>\n`;\n } else if (isRouter) {\n appLyt = `<template>\n <div class=\"app\">\n <nav class=\"nav\">\n <router-link to=\"/\">Home</router-link>\n <router-link to=\"/about\">About</router-link>\n </nav>\n <router-view />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { RouterLink, RouterView } from '@lytjs/router';\n</script>\n\n<style scoped>\n.app {\n text-align: center;\n padding: 2rem;\n}\n\n.nav {\n margin-bottom: 2rem;\n}\n\n.nav a {\n margin: 0 1rem;\n color: #42b883;\n text-decoration: none;\n}\n\n.nav a:hover {\n text-decoration: underline;\n}\n</style>\n`;\n } else {\n appLyt = `<template>\n <div class=\"app\">\n <h1>{{ title }}</h1>\n <p>Welcome to your LytJS app!</p>\n </div>\n</template>\n\n<script setup>\nconst title = 'Hello LytJS!';\n</script>\n\n<style scoped>\n.app {\n text-align: center;\n padding: 2rem;\n}\n\nh1 {\n color: #42b883;\n}\n</style>\n`;\n }\n writeFile(join(targetDir, 'src/App.lyt'), appLyt);\n\n // Router template: add pages and store\n if (isRouter) {\n // Home page\n const homePage = `<template>\n <div class=\"home\">\n <h1>Home</h1>\n ${\n isStore\n ? `\n <p>Count: {{ count }}</p>\n <button @click=\"increment\">Increment</button>\n <button @click=\"decrement\">Decrement</button>\n `\n : ''\n }\n <p>Welcome to the Home page!</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n${\n isStore\n ? `import { useCounterStore } from '../stores/counter';\nconst counterStore = useCounterStore();\nconst { count, increment, decrement } = counterStore;\n`\n : ''\n}\n</script>\n\n<style scoped>\n.home {\n padding: 1rem;\n}\n</style>\n`;\n ensureDir(join(targetDir, 'src', 'pages'));\n writeFile(join(targetDir, 'src', 'pages', 'Home.lyt'), homePage);\n\n // About page\n const aboutPage = `<template>\n <div class=\"about\">\n <h1>About</h1>\n <p>This is the About page!</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n</script>\n\n<style scoped>\n.about {\n padding: 1rem;\n}\n</style>\n`;\n writeFile(join(targetDir, 'src', 'pages', 'About.lyt'), aboutPage);\n }\n\n // Store template: add example store\n if (isStore) {\n const counterStore = `import { defineStore } from '@lytjs/store';\nimport { signal, computed } from '@lytjs/reactivity';\n\nexport const useCounterStore = defineStore('counter', () => {\n // State\n const count = signal(0);\n\n // Getters\n const doubleCount = computed(() => count.value * 2);\n\n // Actions\n function increment() {\n count.value++;\n }\n\n function decrement() {\n count.value--;\n }\n\n function reset() {\n count.value = 0;\n }\n\n return {\n count,\n doubleCount,\n increment,\n decrement,\n reset,\n };\n});\n`;\n ensureDir(join(targetDir, 'src', 'stores'));\n writeFile(join(targetDir, 'src', 'stores', 'counter.ts'), counterStore);\n }\n\n // SSR-specific files\n if (isSsr) {\n // src/entry-server.ts\n const entryServer = `import { createSSRApp, h } from '@lytjs/core';\nimport { renderToString } from '@lytjs/ssr';\nimport App from './App.lyt';\n\nexport async function render(url: string) {\n const app = createSSRApp({\n render() {\n return h(App);\n }\n });\n\n const html = await renderToString(app);\n return html;\n}\n`;\n writeFile(join(targetDir, 'src/entry-server.ts'), entryServer);\n\n // src/entry-client.ts\n const entryClient = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\n\nconst app = createApp(App);\napp.mount('#app');\n`;\n writeFile(join(targetDir, 'src/entry-client.ts'), entryClient);\n\n // server.ts - complete SSR server implementation\n const serverTs = `/**\n * LytJS SSR Server\n *\n * Complete SSR server with Vite dev server and production build support.\n * Supports streaming SSR, route prefetching, and static file serving.\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport http from 'http';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst isProduction = process.env.NODE_ENV === 'production';\nconst DIST_DIR = path.join(__dirname, 'dist');\nconst PORT = parseInt(process.env.PORT || '3000', 10);\n\ninterface RenderOptions {\n url: string;\n template: string;\n manifest?: Record<string, string[]>;\n}\n\nasync function renderPage({ url, template, manifest }: RenderOptions): Promise<string> {\n let app: any;\n let vite: any;\n\n if (!isProduction) {\n const { createServer: createViteServer } = await import('vite');\n vite = await createViteServer({\n server: { middlewareMode: true },\n appType: 'custom',\n });\n app = (await vite.ssrLoadModule(path.join(__dirname, 'src/entry-server.ts'))).default;\n } else {\n app = (await import(path.join(DIST_DIR, 'server/entry-server.js'))).default;\n }\n\n const html = await app.render(url);\n return template.replace('<!--app-html-->', html);\n}\n\nasync function createServer() {\n let vite: any;\n\n // Load index.html template\n let template: string;\n\n if (!isProduction) {\n const { createServer: createViteServer } = await import('vite');\n vite = await createViteServer({\n server: { middlewareMode: true },\n appType: 'custom',\n });\n template = fs.readFileSync(path.join(__dirname, 'index.html'), 'utf-8');\n } else {\n template = fs.readFileSync(path.join(DIST_DIR, 'client/index.html'), 'utf-8');\n }\n\n const server = http.createServer(async (req, res) => {\n const url = req.url || '/';\n\n try {\n if (!isProduction && url.startsWith('/@')) {\n // Vite dev server requests\n return;\n }\n\n // Static assets\n if (url.startsWith('/assets/') || url.endsWith('.js') || url.endsWith('.css')) {\n const filePath = isProduction\n ? path.join(DIST_DIR, 'client', url)\n : path.join(__dirname, url);\n\n if (fs.existsSync(filePath)) {\n const ext = path.extname(filePath);\n const contentType = ext === '.css' ? 'text/css' : 'application/javascript';\n res.writeHead(200, { 'Content-Type': contentType });\n res.end(fs.readFileSync(filePath));\n return;\n }\n }\n\n // SSR rendering\n const html = await renderPage({\n url,\n template,\n manifest: isProduction\n ? JSON.parse(fs.readFileSync(path.join(DIST_DIR, 'client/ssr-manifest.json'), 'utf-8'))\n : undefined\n });\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(html);\n } catch (err: any) {\n if (!isProduction && vite) {\n vite.ssrFixStacktrace(err);\n }\n console.error('SSR Error:', err);\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.end('Internal Server Error');\n }\n });\n\n server.listen(PORT, () => {\n console.log(\\`LytJS SSR server running at http://localhost:\\${PORT}\\`);\n console.log(\\`Mode: \\${isProduction ? 'Production' : 'Development'}\\`);\n });\n}\n\ncreateServer().catch(console.error);\n`;\n writeFile(join(targetDir, 'server.ts'), serverTs);\n }\n\n // tsconfig.json\n const tsConfig = {\n compilerOptions: {\n target: 'ES2020',\n useDefineForClassFields: true,\n module: 'ESNext',\n lib: ['ES2020', 'DOM', 'DOM.Iterable'],\n skipLibCheck: true,\n moduleResolution: 'bundler',\n allowImportingTsExtensions: true,\n resolveJsonModule: true,\n isolatedModules: true,\n noEmit: true,\n strict: true,\n noUnusedLocals: true,\n noUnusedParameters: true,\n noFallthroughCasesInSwitch: true,\n },\n include: ['src/**/*.ts', 'src/**/*.lyt'],\n references: [{ path: './tsconfig.node.json' }],\n };\n writeFile(join(targetDir, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));\n\n // tsconfig.node.json\n const tsConfigNode = {\n compilerOptions: {\n composite: true,\n skipLibCheck: true,\n module: 'ESNext',\n moduleResolution: 'bundler',\n allowSyntheticDefaultImports: true,\n },\n include: ['vite.config.ts'],\n };\n writeFile(join(targetDir, 'tsconfig.node.json'), JSON.stringify(tsConfigNode, null, 2));\n\n // .gitignore\n const gitignore = `# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n`;\n writeFile(join(targetDir, '.gitignore'), gitignore);\n}\n\n/**\n * List available templates\n */\nexport function listTemplates(): void {\n logger.bold('Available templates:');\n for (const [name, description] of Object.entries(TEMPLATES)) {\n logger.info(` ${name.padEnd(10)} - ${description}`);\n }\n}\n","/**\n * @lytjs/cli - dev command\n *\n * Starts the development server.\n */\n\nimport type { DevOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { exists } from '../utils/fs';\nimport { detectPackageManager, getRunCommand } from '../utils/package';\nimport { spawn } from 'child_process';\nimport { join } from 'path';\n\n/**\n * Start the development server\n */\nexport async function dev(options: DevOptions = {}): Promise<void> {\n // Check if we're in a LytJS project\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const pm = detectPackageManager();\n const runCmd = getRunCommand(pm, 'dev');\n logger.info(`Starting development server with ${pm}...`);\n\n // Build the dev command args\n const devArgs: string[] = [];\n if (options.port) devArgs.push('--port', String(options.port));\n if (options.host) devArgs.push('--host', options.host);\n if (options.open) devArgs.push('--open');\n\n // Parse the run command (e.g., \"pnpm run dev\" -> [\"pnpm\", \"run\", \"dev\"])\n const cmdParts = runCmd.split(' ');\n const cmd = cmdParts[0] ?? 'pnpm';\n const cmdArgs = [...cmdParts.slice(1), ...devArgs];\n\n // Spawn the dev server\n const child = spawn(cmd, cmdArgs, {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('error', (error: Error) => {\n logger.error(`Failed to start dev server: ${error.message}`);\n process.exit(1);\n });\n\n child.on('exit', (code: number | null) => {\n process.exit(code || 0);\n });\n}\n","/**\n * @lytjs/cli - build command\n *\n * Builds the project for production.\n */\n\nimport type { BuildOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { exists } from '../utils/fs';\nimport { detectPackageManager } from '../utils/package';\nimport { spawn } from 'child_process';\nimport { join } from 'path';\n\n/**\n * Build the project for production\n */\nexport async function build(options: BuildOptions = {}): Promise<void> {\n // Check if we're in a LytJS project\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const pm = detectPackageManager();\n logger.info('Building for production...');\n\n // Build the command\n const args = ['vite', 'build'];\n if (options.outDir) args.push('--outDir', options.outDir);\n if (options.ssr) args.push('--ssr');\n if (options.minify === false) args.push('--minify', 'false');\n\n // Spawn the build process\n const child = spawn(pm === 'npm' ? 'npx' : pm, args, {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('error', (error) => {\n logger.error(`Build failed: ${error.message}`);\n process.exit(1);\n });\n\n child.on('exit', (code) => {\n if (code === 0) {\n logger.success('Build completed successfully!');\n } else {\n logger.error(`Build failed with exit code ${code}`);\n }\n process.exit(code || 0);\n });\n}\n","/**\n * @lytjs/cli - test command\n *\n * Runs the test suite.\n */\n\nimport type { TestOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { exists } from '../utils/fs';\nimport { detectPackageManager } from '../utils/package';\nimport { spawn } from 'child_process';\nimport { join } from 'path';\n\n/**\n * Run tests\n */\nexport async function test(options: TestOptions = {}): Promise<void> {\n // Check if we're in a LytJS project\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const pm = detectPackageManager();\n logger.info('Running tests...');\n\n // Build the command\n const args = ['vitest'];\n if (options.watch === false) args.push('run');\n if (options.coverage) args.push('--coverage');\n if (options.grep) args.push('--grep', options.grep);\n\n // Spawn the test process\n const child = spawn(pm === 'npm' ? 'npx' : pm, args, {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('error', (error) => {\n logger.error(`Tests failed: ${error.message}`);\n process.exit(1);\n });\n\n child.on('exit', (code) => {\n process.exit(code || 0);\n });\n}\n","/**\n * @lytjs/cli - add command\n *\n * Generate components, pages, and stores.\n */\n\nimport type { AddOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { ensureDir, writeFile, exists } from '../utils/fs';\nimport { join, resolve } from 'path';\n\ntype AddType =\n | 'component'\n | 'page'\n | 'store'\n | 'directive'\n | 'composable'\n | 'util'\n | 'middleware'\n | 'hook';\n\nconst TEMPLATES: Record<\n AddType,\n (name: string, path: string) => { filePath: string; content: string }[]\n> = {\n component(name, basePath) {\n const filePath = join(basePath, `${name}.lyt`);\n return [\n {\n filePath,\n content: `<template>\n <div class=\"${name}\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps<{\n /** Component props */\n}>();\n\ndefineEmits<{\n /** Component events */\n}>();\n</script>\n\n<style scoped>\n.${name} {\n /* styles */\n}\n</style>\n`,\n },\n ];\n },\n\n page(name, basePath) {\n const pascalName = toPascalCase(name);\n const filePath = join(basePath, `${name}.lyt`);\n return [\n {\n filePath,\n content: `<template>\n <div class=\"page-${name}\">\n <h1>${pascalName}</h1>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n// Page logic here\n</script>\n\n<style scoped>\n.page-${name} {\n padding: 1rem;\n}\n</style>\n`,\n },\n ];\n },\n\n store(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n return [\n {\n filePath,\n content: `import { defineStore } from '@lytjs/store';\nimport { signal, computed } from '@lytjs/reactivity';\n\nexport const use${toPascalCase(name)}Store = defineStore('${name}', () => {\n // State\n const count = signal(0);\n\n // Getters\n const doubleCount = computed(() => count.value * 2);\n\n // Actions\n function increment() {\n count.value++;\n }\n\n function decrement() {\n count.value--;\n }\n\n function reset() {\n count.value = 0;\n }\n\n return {\n count,\n doubleCount,\n increment,\n decrement,\n reset,\n };\n});\n`,\n },\n ];\n },\n\n directive(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n const camelCaseName = toCamelCase(name);\n return [\n {\n filePath,\n content: `import type { Directive } from '@lytjs/core';\n\n/**\n * ${toPascalCase(name)} Directive\n *\n * @example\n * \\`\\`\\`vue\n * <div v-${camelCaseName} />\n * \\`\\`\\`\n */\nexport const v${toPascalCase(name)}: Directive = {\n mounted(el, binding) {\n // Directive mounted\n },\n\n updated(el, binding) {\n // Directive updated\n },\n\n unmounted(el) {\n // Directive unmounted\n },\n};\n`,\n },\n ];\n },\n\n composable(name, basePath) {\n const filePath = join(basePath, `use${toPascalCase(name)}.ts`);\n return [\n {\n filePath,\n content: `import { signal, computed } from '@lytjs/reactivity';\n\n/**\n * ${toPascalCase(name)} Composable\n *\n * @example\n * \\`\\`\\`typescript\n * const { state, actions } = use${toPascalCase(name)}();\n * \\`\\`\\`\n */\nexport function use${toPascalCase(name)}() {\n // State\n const isLoading = signal(false);\n const error = signal<Error | null>(null);\n const data = signal<any>(null);\n\n // Computed\n const hasData = computed(() => data.value !== null);\n\n // Actions\n async function fetch() {\n isLoading.value = true;\n error.value = null;\n try {\n // TODO: Fetch logic here\n // data.value = await someApi();\n } catch (e) {\n error.value = e as Error;\n } finally {\n isLoading.value = false;\n }\n }\n\n function reset() {\n isLoading.value = false;\n error.value = null;\n data.value = null;\n }\n\n return {\n isLoading,\n error,\n data,\n hasData,\n fetch,\n reset,\n };\n}\n`,\n },\n ];\n },\n\n hook(name, basePath) {\n const filePath = join(basePath, `use${toPascalCase(name)}.ts`);\n return [\n {\n filePath,\n content: `import { signal, onMounted, onUnmounted } from '@lytjs/core';\n\n/**\n * ${toPascalCase(name)} Hook\n */\nexport function use${toPascalCase(name)}() {\n const state = signal(null);\n\n onMounted(() => {\n // Setup code on mount\n });\n\n onUnmounted(() => {\n // Cleanup on unmount\n });\n\n return {\n state,\n };\n}\n`,\n },\n ];\n },\n\n util(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n return [\n {\n filePath,\n content: `/**\n * ${toPascalCase(name)} Utility Functions\n */\n\n/**\n * ${toPascalCase(name)} function\n *\n * @param input - The input value\n * @returns The processed result\n */\nexport function ${toCamelCase(name)}(input: any) {\n // TODO: Implement function\n return input;\n}\n`,\n },\n ];\n },\n\n middleware(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n return [\n {\n filePath,\n content: `import type { NavigationGuard } from '@lytjs/router';\n\n/**\n * ${toPascalCase(name)} Middleware\n */\nexport const ${toCamelCase(name)}Middleware: NavigationGuard = (to, from, next) => {\n // Middleware logic\n console.log('Middleware:', to.path);\n next();\n};\n`,\n },\n ];\n },\n};\n\n/**\n * Convert kebab-case or snake_case to PascalCase\n */\nfunction toPascalCase(str: string): string {\n return str\n .split(/[-_]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Convert string to camelCase\n */\nfunction toCamelCase(str: string): string {\n const pascalCase = toPascalCase(str);\n return pascalCase.charAt(0).toLowerCase() + pascalCase.slice(1);\n}\n\n/**\n * Resolve the target directory for the add command\n */\nfunction resolveTargetDir(type: AddType): string {\n const cwd = process.cwd();\n switch (type) {\n case 'component':\n return join(cwd, 'src', 'components');\n case 'page':\n return join(cwd, 'src', 'pages');\n case 'store':\n return join(cwd, 'src', 'stores');\n case 'directive':\n return join(cwd, 'src', 'directives');\n case 'composable':\n return join(cwd, 'src', 'composables');\n case 'util':\n return join(cwd, 'src', 'utils');\n case 'middleware':\n return join(cwd, 'src', 'middleware');\n case 'hook':\n return join(cwd, 'src', 'hooks');\n }\n}\n\n/**\n * Add a component, page, or store\n */\nexport async function add(type: AddType, name: string, options: AddOptions = {}): Promise<void> {\n const targetDir = resolveTargetDir(type);\n const fullPath = resolve(targetDir);\n\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const template = TEMPLATES[type];\n if (!template) {\n logger.error(`Unknown type: ${type}. Supported types: component, page, store`);\n process.exit(1);\n }\n\n const files = template(name, fullPath);\n\n for (const file of files) {\n if (exists(file.filePath) && !options.force) {\n logger.warning(`File already exists: ${file.filePath}`);\n logger.info('Use --force to overwrite.');\n continue;\n }\n\n ensureDir(resolve(file.filePath, '..'));\n writeFile(file.filePath, file.content);\n logger.success(`Created ${type}: ${file.filePath}`);\n }\n}\n","/**\n * @lytjs/cli - 代码生成器命令\n *\n * 提供组件、页面、服务等代码生成功能\n */\n\nimport { logger } from '../utils/logger';\nimport { ensureDir, writeFile } from '../utils/fs';\nimport * as path from 'path';\n\nexport interface GenerateOptions {\n type: 'component' | 'page' | 'service' | 'hook' | 'store' | 'layout' | 'middleware';\n name: string;\n path?: string;\n withStyles?: boolean;\n withTest?: boolean;\n withStorybook?: boolean;\n description?: string;\n template?: 'default' | 'sfc' | 'functional';\n language?: 'ts' | 'js';\n}\n\ninterface TemplateData {\n name: string;\n pascalName: string;\n kebabName: string;\n camelName: string;\n date: string;\n description: string;\n}\n\nconst TEMPLATES = {\n component: (\n data: TemplateData,\n withStyles: boolean,\n withTest: boolean,\n template: string,\n lang: string,\n ) => {\n const styleImport = withStyles ? `\\nimport './${data.kebabName}.styles.css';` : '';\n const tsOnly = lang === 'ts';\n\n if (template === 'sfc') {\n return `<template>\n <div class=\"${data.kebabName}\">\n <slot>\n ${data.pascalName} Component\n </slot>\n </div>\n</template>\n\n<script setup${tsOnly ? ' lang=\"ts\"' : ''}>\n${tsOnly ? `import { ref } from '@lytjs/reactivity';\\n` : ''}\n${\n tsOnly\n ? `\nexport interface ${data.pascalName}Props {\n className?: string;\n}\n\nconst props = defineProps<${data.pascalName}Props>();\n`\n : ''\n}\n\nconst title = ref('${data.pascalName}');\n</script>\n\n<style scoped>\n.${data.kebabName} {\n /* Component styles */\n}\n</style>\n`;\n }\n\n const testImport = withTest\n ? `\\nimport { describe, it, expect } from 'vitest';\\nimport { ${data.pascalName} } from './${data.kebabName}';\\n\\ndescribe('${data.pascalName}', () => {\\n it('should render', () => {\\n // Add test here\\n expect(true).toBe(true);\\n });\\n});`\n : '';\n\n const propsDecl = tsOnly ? `['className', 'children']` : `[]`;\n\n return `/**\n * ${data.pascalName} 组件\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { h, defineComponent } from '@lytjs/core';${styleImport}\n\n${\n tsOnly\n ? `export interface ${data.pascalName}Props {\n className?: string;\n children?: any;\n}\n\n`\n : ''\n}${\n template === 'functional'\n ? `export function ${data.pascalName}(${tsOnly ? `props: ${data.pascalName}Props` : 'props'}) {\n const { className = '', children } = props;\n\n return (\n <div className={\\`${data.kebabName} \\${className}\\`}>\n {children || '${data.pascalName} Component'}\n </div>\n );\n}`\n : `export const ${data.pascalName} = defineComponent({\n name: '${data.pascalName}',\n props: ${propsDecl},\n setup(props) {\n const { className = '', children } = props;\n\n return () => (\n <div className={\\`${data.kebabName} \\${className}\\`}>\n {children || '${data.pascalName} Component'}\n </div>\n );\n },\n});`\n }\n\nexport default ${data.pascalName};${testImport}\n`;\n },\n\n page: (\n data: TemplateData,\n withStyles: boolean,\n withTest: boolean,\n template: string,\n lang: string,\n ) => {\n const styleImport = withStyles ? `\\nimport './${data.kebabName}.styles.css';` : '';\n const tsOnly = lang === 'ts';\n\n if (template === 'sfc') {\n return `<template>\n <div class=\"${data.kebabName}-page\">\n <h1>{title}</h1>\n <p>Page content for ${data.pascalName}</p>\n <slot />\n </div>\n</template>\n\n<script setup${tsOnly ? ' lang=\"ts\"' : ''}>\n${tsOnly ? `import { ref } from '@lytjs/reactivity';\\n` : ''}\n${\n tsOnly\n ? `\nexport interface ${data.pascalName}PageProps {\n title?: string;\n}\n\nconst props = defineProps<${data.pascalName}PageProps>();\n`\n : ''\n}\n\nconst title = ref(props.title || '${data.pascalName}');\n</script>\n\n<style scoped>\n.${data.kebabName}-page {\n padding: 2rem;\n}\n</style>\n`;\n }\n\n const testImport = withTest\n ? `\\nimport { describe, it, expect } from 'vitest';\\nimport { ${data.pascalName}Page } from './${data.kebabName}';\\n\\ndescribe('${data.pascalName}Page', () => {\\n it('should render', () => {\\n // Add test here\\n expect(true).toBe(true);\\n });\\n});`\n : '';\n\n return `/**\n * ${data.pascalName} 页面\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { h, ${tsOnly ? 'signal' : 'signal'} } from '@lytjs/core';\n${styleImport}\n\n${\n tsOnly\n ? `export interface ${data.pascalName}PageProps {\n title?: string;\n}\n\n`\n : ''\n}export function ${data.pascalName}Page(${tsOnly ? `props: ${data.pascalName}PageProps` : 'props'}) {\n const { title = '${data.pascalName}' } = props;\n\n return (\n <div className=\"${data.kebabName}-page\">\n <h1>{title}</h1>\n <p>Page content for ${data.pascalName}</p>\n </div>\n );\n}\n\nexport default ${data.pascalName}Page;${testImport}\n`;\n },\n\n service: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} 服务\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\n${\n tsOnly\n ? `export interface ${data.pascalName}ServiceOptions {\n baseUrl?: string;\n timeout?: number;\n}\n\n`\n : ''\n}${\n tsOnly\n ? `export class ${data.pascalName}Service {\n private baseUrl: string;\n private timeout: number;\n`\n : `export class ${data.pascalName}Service {\n`\n }\n constructor(${tsOnly ? `options: ${data.pascalName}ServiceOptions = {}` : 'options = {}'}) {\n this.baseUrl = options.baseUrl || '/api';\n this.timeout = options.timeout || 30000;\n }\n\n async getAll()${tsOnly ? ': Promise<any[]>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s\\`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async getById(id)${tsOnly ? ': Promise<any>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s/\\${id}\\`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async create(${tsOnly ? 'data: any' : 'data'})${tsOnly ? ': Promise<any>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s\\`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async update(id)${tsOnly ? ': Promise<any>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s/\\${id}\\`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async delete(id)${tsOnly ? ': Promise<void>' : ''} {\n await fetch(\\`\\${this.baseUrl}/${data.kebabName}s/\\${id}\\`, {\n method: 'DELETE',\n signal: AbortSignal.timeout(this.timeout),\n });\n }\n}\n\nexport default ${data.pascalName}Service;\n`;\n },\n\n hook: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} Hook\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { signal, effect } from '@lytjs/reactivity';\n\n${\n tsOnly\n ? `export interface ${data.pascalName}Options {\n immediate?: boolean;\n}\n\nexport interface ${data.pascalName}Return {\n data: ReturnType<typeof signal>;\n loading: ReturnType<typeof signal>;\n error: ReturnType<typeof signal>;\n execute: () => Promise<void>;\n reset: () => void;\n}\n\n`\n : ''\n}export function use${data.pascalName}(${tsOnly ? `options: ${data.pascalName}Options = {}` : 'options = {}'})${tsOnly ? `: ${data.pascalName}Return` : ''} {\n const { immediate = false } = options;\n\n const data = signal<any>(null);\n const loading = signal(false);\n const error = signal<Error | null>(null);\n\n async function execute() {\n loading.value = true;\n error.value = null;\n\n try {\n const result = await new Promise(resolve => setTimeout(() => resolve(null), 100));\n data.value = result;\n } catch (e) {\n error.value = e as Error;\n } finally {\n loading.value = false;\n }\n }\n\n function reset() {\n data.value = null;\n loading.value = false;\n error.value = null;\n }\n\n if (immediate) {\n execute();\n }\n\n return {\n data,\n loading,\n error,\n execute,\n reset,\n };\n}\n\nexport default use${data.pascalName};\n`;\n },\n\n store: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} Store\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { signal, computed } from '@lytjs/reactivity';\n\n${\n tsOnly\n ? `export interface ${data.pascalName}State {\n items: any[];\n selectedId: string | null;\n loading: boolean;\n error: Error | null;\n}\n\n`\n : ''\n}export function create${data.pascalName}Store() {\n const state = signal${tsOnly ? `<${data.pascalName}State>` : ''}({\n items: [],\n selectedId: null,\n loading: false,\n error: null,\n });\n\n const selectedItem = computed(() => {\n const currentState = state.value;\n return currentState.items.find(item => item.id === currentState.selectedId);\n });\n\n const itemCount = computed(() => state.value.items.length);\n\n function setItems(items) {\n state.value = { ...state.value, items };\n }\n\n function selectItem(id) {\n state.value = { ...state.value, selectedId: id };\n }\n\n function addItem(item) {\n state.value = {\n ...state.value,\n items: [...state.value.items, item],\n };\n }\n\n function updateItem(id, updates) {\n state.value = {\n ...state.value,\n items: state.value.items.map(item =>\n item.id === id ? { ...item, ...updates } : item\n ),\n };\n }\n\n function removeItem(id) {\n state.value = {\n ...state.value,\n items: state.value.items.filter(item => item.id !== id),\n selectedId: state.value.selectedId === id ? null : state.value.selectedId,\n };\n }\n\n function setLoading(loading) {\n state.value = { ...state.value, loading };\n }\n\n function setError(error) {\n state.value = { ...state.value, error };\n }\n\n function reset() {\n state.value = {\n items: [],\n selectedId: null,\n loading: false,\n error: null,\n };\n }\n\n return {\n state,\n selectedItem,\n itemCount,\n setItems,\n selectItem,\n addItem,\n updateItem,\n removeItem,\n setLoading,\n setError,\n reset,\n };\n}\n\n${tsOnly ? `export type ${data.pascalName}Store = ReturnType<typeof create${data.pascalName}Store>;\\n` : ''}export default create${data.pascalName}Store;\n`;\n },\n\n layout: (\n data: TemplateData,\n withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n const styleImport = withStyles ? `\\nimport './${data.kebabName}.styles.css';` : '';\n\n return `/**\n * ${data.pascalName} 布局\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { h, defineComponent } from '@lytjs/core';${styleImport}\n\n${\n tsOnly\n ? `export interface ${data.pascalName}LayoutProps {\n children?: any;\n}\n\n`\n : ''\n}export const ${data.pascalName}Layout = defineComponent({\n name: '${data.pascalName}Layout',\n setup(props) {\n return () => (\n <div className=\"${data.kebabName}-layout\">\n <header className=\"${data.kebabName}-header\">\n <slot name=\"header\">\n <h1>${data.pascalName}</h1>\n </slot>\n </header>\n <main className=\"${data.kebabName}-main\">\n <slot />\n </main>\n <footer className=\"${data.kebabName}-footer\">\n <slot name=\"footer\" />\n </footer>\n </div>\n );\n },\n});\n\nexport default ${data.pascalName}Layout;\n`;\n },\n\n middleware: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} 中间件\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\n${tsOnly ? `import type { Request, Response, NextFunction } from 'express';\\n` : ''}\nexport function ${data.camelName}Middleware(${tsOnly ? `req: Request, res: Response, next: NextFunction` : 'req, res, next'}) {\n try {\n console.log('[${data.pascalName}] Middleware executed');\n next();\n } catch (error) {\n next(error);\n }\n}\n\nexport default ${data.camelName}Middleware;\n`;\n },\n};\n\nfunction toPascalCase(name: string): string {\n return name\n .split(/[-_]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\nfunction toCamelCase(name: string): string {\n const pascal = toPascalCase(name);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\nfunction toKebabCase(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\nexport async function generate(options: GenerateOptions): Promise<void> {\n const {\n type,\n name,\n path: basePath = './src',\n withStyles = false,\n withTest = false,\n description = '',\n template = 'default',\n language = 'ts',\n } = options;\n\n const templateData: TemplateData = {\n name,\n pascalName: toPascalCase(name),\n kebabName: toKebabCase(name),\n camelName: toCamelCase(name),\n date: new Date().toISOString().split('T')[0] as string,\n description: description || `${toPascalCase(name)} ${type}`,\n };\n\n const typeDirs: Record<string, string> = {\n component: 'components',\n page: 'pages',\n service: 'services',\n hook: 'hooks',\n store: 'stores',\n layout: 'layouts',\n middleware: 'middleware',\n };\n\n const targetDir = path.join(process.cwd(), basePath, typeDirs[type] || 'components');\n await ensureDir(targetDir);\n\n const templateFn = TEMPLATES[type];\n if (!templateFn) {\n logger.error(`Unknown type: ${type}`);\n logger.info('Available types: component, page, service, hook, store, layout, middleware');\n process.exit(1);\n }\n\n const extension = template === 'sfc' ? 'lyt' : language;\n const filename = `${templateData.kebabName}${type === 'page' ? '.page' : ''}.${extension}`;\n const filePath = path.join(targetDir, filename);\n const content = templateFn(templateData, withStyles, withTest, template, language);\n\n await writeFile(filePath, content);\n logger.success(`Generated ${type}: ${filePath}`);\n\n if (withStyles && template !== 'sfc') {\n const styleContent = `/**\n * ${templateData.pascalName} Styles\n */\n\n.${templateData.kebabName} {\n /* Component styles */\n}\n`;\n const stylePath = path.join(targetDir, `${templateData.kebabName}.styles.css`);\n await writeFile(stylePath, styleContent);\n logger.success(`Generated styles: ${stylePath}`);\n }\n\n if (withTest && template !== 'sfc') {\n logger.info('Test file included in generated component');\n }\n\n logger.info('\\nNext steps:');\n logger.info(` cd ${targetDir}`);\n logger.info(\n ` Import your ${type}: import { ${template === 'sfc' ? 'default' : templateData.pascalName} } from './${templateData.kebabName}'`,\n );\n\n logger.info('\\nAvailable options:');\n logger.info(' --template=sfc : Single File Component (.lyt)');\n logger.info(' --template=functional : Functional component');\n logger.info(' --language=js : JavaScript output');\n}\n\nexport default generate;\n","/**\n * @lytjs/cli - plugin command\n *\n * Plugin development CLI commands: create, build, validate, publish.\n */\n\nimport { logger } from '../utils/logger';\nimport { ensureDir } from '../utils/fs';\nimport { resolve, join } from 'path';\nimport { execSync } from 'child_process';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync } from 'fs';\n\n// ==================== Types ====================\n\nexport interface PluginCreateOptions {\n template?: string;\n force?: boolean;\n skipInstall?: boolean;\n}\n\nexport interface PluginBuildOptions {\n outDir?: string;\n minify?: boolean;\n sourcemap?: boolean;\n}\n\nexport interface PluginValidateOptions {\n strict?: boolean;\n warningsAsErrors?: boolean;\n}\n\nexport interface PluginPublishOptions {\n registry?: string;\n access?: 'public' | 'restricted';\n otp?: string;\n}\n\n// ==================== Plugin Templates ====================\n\nconst PLUGIN_TEMPLATES = {\n default: 'Default plugin template with TypeScript',\n minimal: 'Minimal plugin without extra dependencies',\n withConfig: 'Plugin template with configuration schema',\n};\n\nfunction getTemplateContent(template: string, pluginName: string): Record<string, string> {\n const packageName = `@lytjs/plugin-${pluginName}`;\n\n const files: Record<string, string> = {};\n\n // package.json\n files['package.json'] = JSON.stringify(\n {\n name: packageName,\n version: '0.1.0',\n description: `LytJS plugin: ${pluginName}`,\n main: 'dist/index.cjs',\n module: 'dist/index.mjs',\n types: 'dist/index.d.ts',\n exports: {\n '.': {\n import: './dist/index.mjs',\n require: './dist/index.cjs',\n types: './dist/index.d.ts',\n },\n },\n files: ['dist'],\n scripts: {\n build: 'tsup',\n dev: 'tsup --watch',\n test: 'vitest',\n lint: 'eslint src',\n prepublishOnly: 'npm run build',\n },\n keywords: ['lytjs', 'plugin'],\n license: 'MIT',\n peerDependencies: {\n '@lytjs/core': '>=6.0.0',\n },\n },\n null,\n 2,\n );\n\n // tsconfig.json\n files['tsconfig.json'] = JSON.stringify(\n {\n extends: '@lytjs/core/tsconfig.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n declaration: true,\n declarationMap: true,\n },\n include: ['src'],\n exclude: ['node_modules', 'dist', 'tests'],\n },\n null,\n 2,\n );\n\n // tsup.config.ts\n files['tsup.config.ts'] = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: { index: 'src/index.ts' },\n format: ['esm', 'cjs'],\n dts: true,\n sourcemap: true,\n clean: true,\n splitting: false,\n treeshake: true,\n minify: false,\n external: ['@lytjs/core'],\n});\n`;\n\n // src/index.ts\n if (template === 'withConfig') {\n files['src/index.ts'] = `/**\n * @lytjs/plugin-${pluginName}\n *\n * A LytJS plugin with configuration schema support.\n */\n\nimport { definePlugin } from '@lytjs/core';\nimport type { ConfigSchema } from '@lytjs/core';\n\n/**\n * Plugin options schema\n */\nconst optionsSchema: ConfigSchema<${pluginName.replace(/-/g, '')}Options> = {\n type: 'object',\n properties: {\n debug: {\n type: 'boolean',\n description: 'Enable debug mode',\n default: false,\n },\n option1: {\n type: 'string',\n description: 'First option',\n default: 'default value',\n },\n },\n additionalProperties: false,\n};\n\nexport interface ${pluginName.replace(/-/g, '')}Options {\n debug?: boolean;\n option1?: string;\n}\n\n/**\n * Create the plugin with configuration schema\n */\nexport function create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}(options?: ${pluginName.replace(/-/g, '')}Options) {\n return definePlugin({\n name: '${packageName}',\n version: '0.1.0',\n description: 'A LytJS plugin',\n schema: optionsSchema,\n install: (app, opts) => {\n const config = opts || {};\n console.log('[${packageName}] Installing with config:', config);\n },\n });\n}\n\n/**\n * Direct plugin export (without schema)\n */\nexport default create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}();\n`;\n } else {\n files['src/index.ts'] = `/**\n * @lytjs/plugin-${pluginName}\n *\n * A LytJS plugin.\n */\n\nimport { definePlugin } from '@lytjs/core';\n\n/**\n * Create the plugin\n */\nexport function create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}() {\n return definePlugin({\n name: '${packageName}',\n version: '0.1.0',\n description: 'A LytJS plugin',\n install: (app) => {\n console.log('[${packageName}] Plugin installed');\n },\n });\n}\n\n/**\n * Direct plugin export\n */\nexport default create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}();\n`;\n }\n\n // src/types.ts (for minimal template)\n if (template === 'minimal') {\n files['src/types.ts'] = `/**\n * Plugin types\n */\n\nexport interface PluginOptions {\n // Define your plugin options here\n}\n`;\n }\n\n // README.md\n files['README.md'] = `# @lytjs/plugin-${pluginName}\n\nA LytJS plugin.\n\n## Installation\n\n\\`\\`\\`bash\nnpm install @lytjs/plugin-${pluginName}\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`typescript\nimport { createApp } from '@lytjs/core';\nimport myPlugin from '@lytjs/plugin-${pluginName}';\n\nconst app = createApp(App);\napp.use(myPlugin);\n\\`\\`\\`\n\n## API\n\n### createPlugin(options?)\n\nCreate the plugin with options.\n\n## License\n\nMIT\n`;\n\n // .gitignore\n files['.gitignore'] = `# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\npnpm-debug.log*\n\nnode_modules\ndist\n*.local\n\n# IDE\n.vscode\n.idea\n*.sw?\n`;\n\n return files;\n}\n\n// ==================== Create Command ====================\n\nexport async function createPlugin(name: string, options: PluginCreateOptions = {}): Promise<void> {\n const targetDir = resolve(process.cwd(), name);\n const template = options.template || 'default';\n\n // Check template validity\n if (template !== 'default' && template !== 'minimal' && template !== 'withConfig') {\n logger.error(`Unknown template: ${template}`);\n logger.info('Available templates: default, minimal, withConfig');\n process.exit(1);\n }\n\n // Check if directory exists\n if (existsSync(targetDir) && !isEmptyDir(targetDir) && !options.force) {\n logger.error(`Directory \"${name}\" already exists and is not empty.`);\n logger.info('Use --force to overwrite.');\n process.exit(1);\n }\n\n logger.info(`Creating a new LytJS plugin in ${targetDir}...`);\n\n // Create directory\n ensureDir(targetDir);\n\n // Generate plugin files\n const files = getTemplateContent(template, name);\n for (const [filePath, content] of Object.entries(files)) {\n const fullPath = join(targetDir, filePath);\n const fileDir = resolve(fullPath, '..');\n if (!existsSync(fileDir)) {\n mkdirSync(fileDir, { recursive: true });\n }\n writeFileSync(fullPath, content, 'utf-8');\n logger.success(`Created: ${filePath}`);\n }\n\n // Install dependencies\n if (!options.skipInstall) {\n logger.info('Installing dependencies...');\n try {\n execSync('pnpm install', { cwd: targetDir, stdio: 'inherit' });\n logger.success('Dependencies installed!');\n } catch (_error) {\n logger.warning('Failed to install dependencies automatically.');\n logger.info('Please run \"pnpm install\" manually.');\n }\n }\n\n logger.success(`Plugin \"${name}\" created successfully!`);\n logger.info('');\n logger.bold('Next steps:');\n logger.info(` cd ${name}`);\n logger.info(' pnpm dev # Start development');\n logger.info(' pnpm build # Build for production');\n logger.info(' pnpm test # Run tests');\n}\n\n// ==================== Build Command ====================\n\nexport async function buildPlugin(options: PluginBuildOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const outDir = options.outDir || 'dist';\n\n // Check if package.json exists\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n logger.error('No package.json found. Are you in a plugin directory?');\n process.exit(1);\n }\n\n logger.info('Building plugin...');\n\n try {\n const buildCmd = 'tsup';\n const args = [\n '--entry',\n 'src/index.ts',\n '--outDir',\n outDir,\n '--format',\n 'esm,cjs',\n '--dts',\n '--sourcemap',\n ];\n\n if (options.minify) {\n args.push('--minify');\n }\n\n execSync(`${buildCmd} ${args.join(' ')}`, { cwd, stdio: 'inherit' });\n\n logger.success('Build completed!');\n logger.info(`Output: ${join(cwd, outDir)}`);\n } catch (_error) {\n logger.error('Build failed. Make sure tsup is installed: pnpm add -D tsup');\n process.exit(1);\n }\n}\n\n// ==================== Validate Command ====================\n\nexport async function validatePlugin(options: PluginValidateOptions = {}): Promise<void> {\n const cwd = process.cwd();\n\n logger.info('Validating plugin...');\n\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check package.json\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n errors.push('package.json not found');\n } else {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n\n // Check required fields\n if (!pkg.name) errors.push('package.json: name is required');\n if (!pkg.version) errors.push('package.json: version is required');\n if (!pkg.main) errors.push('package.json: main is required');\n if (!pkg.module) errors.push('package.json: module is required');\n if (!pkg.types) errors.push('package.json: types is required');\n\n // Check exports\n if (!pkg.exports) {\n warnings.push('package.json: exports field is recommended');\n }\n\n // Check peerDependencies\n if (!pkg.peerDependencies || !pkg.peerDependencies['@lytjs/core']) {\n errors.push('package.json: @lytjs/core peerDependency is required');\n }\n\n // Check keywords\n if (!pkg.keywords || !pkg.keywords.includes('lytjs')) {\n warnings.push('package.json: \"lytjs\" keyword is recommended');\n }\n } catch (err) {\n errors.push(`package.json: Invalid JSON - ${err}`);\n }\n }\n\n // Check source files\n const srcPath = join(cwd, 'src');\n if (!existsSync(srcPath)) {\n errors.push('src directory not found');\n } else {\n const indexPath = join(srcPath, 'index.ts');\n if (!existsSync(indexPath)) {\n errors.push('src/index.ts not found');\n } else {\n const content = readFileSync(indexPath, 'utf-8');\n\n // Check for definePlugin usage\n if (!content.includes('definePlugin') && !content.includes('EnhancedPlugin')) {\n warnings.push('src/index.ts: Consider using definePlugin or EnhancedPlugin');\n }\n\n // Check for export\n if (!content.includes('export')) {\n warnings.push('src/index.ts: No exports found');\n }\n }\n }\n\n // Check tsconfig.json\n const tsconfigPath = join(cwd, 'tsconfig.json');\n if (!existsSync(tsconfigPath)) {\n warnings.push('tsconfig.json not found (recommended)');\n }\n\n // Check tsup.config.ts\n const tsupConfigPath = join(cwd, 'tsup.config.ts');\n if (!existsSync(tsupConfigPath)) {\n warnings.push('tsup.config.ts not found (recommended for builds)');\n }\n\n // Report results\n const hasErrors = errors.length > 0;\n const hasWarnings = warnings.length > 0;\n\n if (hasErrors) {\n logger.error('Validation failed with errors:');\n for (const err of errors) {\n logger.error(` - ${err}`);\n }\n }\n\n if (hasWarnings && !options.strict) {\n logger.warning('Warnings:');\n for (const warn of warnings) {\n logger.warning(` - ${warn}`);\n }\n }\n\n if (!hasErrors && !hasWarnings) {\n logger.success('Plugin validation passed!');\n } else if (hasWarnings && !hasErrors) {\n logger.success('Plugin validation passed (with warnings)');\n if (options.strict) {\n process.exit(1);\n }\n } else {\n if (options.warningsAsErrors && hasWarnings) {\n logger.error('Strict mode: treating warnings as errors');\n }\n process.exit(1);\n }\n}\n\n// ==================== Helper Functions ====================\n\nfunction isEmptyDir(dir: string): boolean {\n if (!existsSync(dir)) return true;\n const files = readdirSync(dir);\n return files.length === 0;\n}\n\n// ==================== List Templates ====================\n\nexport function listPluginTemplates(): void {\n logger.bold('Available plugin templates:');\n for (const [name, description] of Object.entries(PLUGIN_TEMPLATES)) {\n logger.info(` ${name.padEnd(12)} - ${description}`);\n }\n}\n","/**\n * @lytjs/cli - CLI runner\n *\n * Main entry point for the CLI. Parses arguments and routes to commands.\n */\n\nimport type { CliOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { create, listTemplates } from './create';\nimport { dev } from './dev';\nimport { build } from './build';\nimport { test } from './test';\nimport { add } from './add';\nimport { generate } from './generate';\nimport { createPlugin, buildPlugin, validatePlugin, listPluginTemplates } from './plugin';\n\nconst VERSION = '6.0.0';\n\nexport async function runCli(rawArgs: string[] = process.argv.slice(2)): Promise<void> {\n const { command, args, options } = parseArgs(rawArgs);\n\n if (options.help || command === 'help') {\n showHelp();\n return;\n }\n\n if (options.version || command === 'version' || command === '-v' || command === '--version') {\n console.warn(`LytJS CLI v${VERSION}`);\n return;\n }\n\n switch (command) {\n case 'create':\n await create(args[0] || 'my-lytjs-app', {\n template: options.template as string | undefined,\n force: options.force as boolean | undefined,\n });\n break;\n\n case 'templates':\n listTemplates();\n break;\n\n case 'dev':\n await dev({\n port: options.port ? parseInt(options.port as string, 10) : undefined,\n host: options.host as string | undefined,\n open: options.open as boolean | undefined,\n });\n break;\n\n case 'build':\n await build({\n outDir: options.outDir as string | undefined,\n ssr: options.ssr as boolean | undefined,\n minify: (options.minify as string) !== 'false',\n });\n break;\n\n case 'test':\n await test({\n watch: (options.watch as string) !== 'false',\n coverage: options.coverage as boolean | undefined,\n grep: options.grep as string | undefined,\n });\n break;\n\n case 'add': {\n const addTypes: Array<'component' | 'page' | 'store' | 'directive' | 'composable' | 'util' | 'middleware' | 'hook'> = [\n 'component',\n 'page',\n 'store',\n 'directive',\n 'composable',\n 'util',\n 'middleware',\n 'hook',\n ];\n if (!args[0] || !addTypes.includes(args[0] as any)) {\n logger.error('Usage: lyt add <type> <name>');\n logger.info('Types: component, page, store, directive, composable, util, middleware, hook');\n logger.info('Example: lyt add component Button');\n process.exit(1);\n }\n await add(args[0] as any, args[1] || 'Unnamed', {\n force: options.force as boolean | undefined,\n });\n break;\n }\n\n case 'generate':\n case 'g': {\n const genTypes: Array<'component' | 'page' | 'service' | 'hook' | 'store' | 'layout' | 'middleware'> = ['component', 'page', 'service', 'hook', 'store', 'layout', 'middleware'];\n if (!args[0] || !genTypes.includes(args[0] as any)) {\n logger.error('Usage: lyt generate <type> <name>');\n logger.info('Types: component, page, service, hook, store, layout, middleware');\n logger.info('Example: lyt generate component Button');\n process.exit(1);\n }\n await generate({\n type: args[0] as any,\n name: args[1] || 'Unnamed',\n path: options.path as string | undefined,\n withStyles: options.styles as boolean | undefined,\n withTest: options.test as boolean | undefined,\n withStorybook: options.storybook as boolean | undefined,\n });\n break;\n }\n\n case 'plugin': {\n if (!args[0]) {\n logger.error('Usage: lyt plugin <create|build|validate|templates>');\n logger.info('Example: lyt plugin create my-plugin');\n process.exit(1);\n }\n\n const subCommand = args[0];\n switch (subCommand) {\n case 'create':\n await createPlugin(args[1] || 'my-plugin', {\n template: options.template as string | undefined,\n force: options.force as boolean | undefined,\n skipInstall: options.skipInstall as boolean | undefined,\n });\n break;\n case 'build':\n await buildPlugin({\n outDir: options.outDir as string | undefined,\n minify: options.minify as boolean | undefined,\n sourcemap: options.sourcemap as boolean | undefined,\n });\n break;\n case 'validate':\n await validatePlugin({\n strict: options.strict as boolean | undefined,\n warningsAsErrors: options.warningsAsErrors as boolean | undefined,\n });\n break;\n case 'templates':\n listPluginTemplates();\n break;\n default:\n logger.error(`Unknown plugin sub-command: ${subCommand}`);\n logger.info('Supported sub-commands: create, build, validate, templates');\n process.exit(1);\n }\n break;\n }\n\n default:\n if (command) {\n logger.error(`Unknown command: ${command}`);\n logger.info('Run \"lyt --help\" for usage information.');\n process.exit(1);\n } else {\n showHelp();\n }\n }\n}\n\nfunction parseArgs(args: string[]): CliOptions {\n let command = args[0] ?? '';\n const positional: string[] = [];\n const options: Record<string, unknown> = {};\n\n if (command.startsWith('--') || command.startsWith('-')) {\n command = '';\n }\n\n const startIndex = command ? 1 : 0;\n\n for (let i = startIndex; i < args.length; i++) {\n const arg = args[i] ?? '';\n\n if (arg.startsWith('--')) {\n const parts = arg.slice(2).split('=');\n const key = parts[0];\n const value = parts[1];\n if (value !== undefined && key) {\n options[key] = value;\n } else if (key && i + 1 < args.length && !(args[i + 1] ?? '').startsWith('-')) {\n const nextArg = args[++i];\n if (nextArg) {\n options[key] = nextArg;\n }\n } else if (key) {\n options[key] = true;\n }\n } else if (arg.startsWith('-')) {\n const key = arg.slice(1);\n if (key) {\n options[key] = true;\n }\n } else {\n positional.push(arg);\n }\n }\n\n return { command, args: positional, options };\n}\n\nfunction showHelp(): void {\n console.warn(`\n${logger.bold('LytJS CLI')} v${VERSION}\n\n${logger.bold('Usage:')}\n lyt <command> [options]\n\n${logger.bold('Commands:')}\n create <name> Create a new LytJS project\n templates List available templates\n dev Start development server\n build Build for production\n test Run tests\n add <type> <name> Generate a component, page, store, directive, composable, etc.\n generate, g Advanced code generation (component, page, service, hook, store)\n plugin <subcmd> Plugin development commands\n help Show this help message\n \n${logger.bold('Options:')}\n --version, -v Show version number\n --help Show help\n\n${logger.bold('Create Options:')}\n --template <name> Use a specific template\n --force Overwrite existing directory\n\n${logger.bold('Dev Options:')}\n --port <number> Specify port (default: 5173)\n --host <host> Specify host (default: localhost)\n --open Open browser on start\n\n${logger.bold('Build Options:')}\n --outDir <dir> Output directory (default: dist)\n --ssr Build for SSR\n --minify false Disable minification\n\n${logger.bold('Test Options:')}\n --watch false Run tests once (no watch mode)\n --coverage Generate coverage report\n --grep <pattern> Filter tests by pattern\n\n${logger.bold('Generate Options:')}\n --path <dir> Output directory (default: ./src)\n --styles Generate CSS styles file\n --test Generate test file\n --storybook Generate Storybook story file\n\n${logger.bold('Plugin Options:')}\n --template <name> Use a specific plugin template (default, minimal, withConfig)\n --force Overwrite existing directory\n --skipInstall Skip installing dependencies\n --outDir <dir> Output directory (default: dist)\n --minify Minify output\n --sourcemap Generate sourcemaps\n --strict Strict validation mode\n --warningsAsErrors Treat warnings as errors\n\n${logger.bold('Examples:')}\n lyt create my-app\n lyt create my-app --template minimal\n lyt create my-app --template router\n lyt create my-app --template full\n lyt dev --port 3000\n lyt build --ssr\n lyt add component Button\n lyt add page About\n lyt add store user\n lyt directive click-outside\n lyt add composable fetch-data\n lyt add util format\n lyt add hook window-size\n lyt generate component Button --styles --test\n lyt generate page Dashboard --path ./src/pages\n lyt generate service User --path ./src/services\n lyt generate hook useCounter\n lyt generate store Auth --path ./src/stores\n lyt g page Login\n lyt plugin create my-plugin\n lyt plugin create my-plugin --template withConfig\n lyt plugin build\n lyt plugin validate\n`);\n}\n","/**\n * @lytjs/cli\n *\n * LytJS project scaffolding and development CLI tool.\n *\n * @packageDocumentation\n */\n\nimport { runCli } from './commands/run';\n\nexport { runCli } from './commands/run';\n\nexport { create, listTemplates } from './commands/create';\nexport { dev } from './commands/dev';\nexport { build } from './commands/build';\nexport { test } from './commands/test';\nexport { add } from './commands/add';\nexport { generate } from './commands/generate';\nexport type { GenerateOptions } from './commands/generate';\nexport { createPlugin, buildPlugin, validatePlugin, listPluginTemplates } from './commands/plugin';\nexport type {\n PluginCreateOptions,\n PluginBuildOptions,\n PluginValidateOptions,\n PluginPublishOptions,\n} from './commands/plugin';\n\nexport { logger } from './utils/logger';\nexport { ensureDir, writeFile, readFile, exists } from './utils/fs';\nexport {\n detectPackageManager,\n getInstallCommand,\n getRunCommand,\n getAddCommand,\n} from './utils/package';\n\nexport type {\n CliOptions,\n CreateOptions,\n DevOptions,\n BuildOptions,\n TestOptions,\n PackageJson,\n} from './types';\n\nif (require.main === module) {\n runCli().catch(console.error);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/logger.ts","../src/utils/fs.ts","../src/utils/package.ts","../src/commands/create.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/test.ts","../src/commands/add.ts","../src/commands/generate.ts","../src/commands/plugin.ts","../src/commands/run.ts","../src/index.ts"],"names":["path","existsSync","join","dev","execSync","spawn","TEMPLATES","resolve","toPascalCase","toCamelCase","isEmptyDir","mkdirSync","writeFileSync","readFileSync","readdirSync"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @lytjs/cli - Logger utilities\n */\n\nconst colors = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n cyan: '\\x1b[36m',\n};\n\nfunction colorize(text: string, color: keyof typeof colors): string {\n if (!isColorSupported()) return text;\n return `${colors[color]}${text}${colors.reset}`;\n}\n\nexport const logger = {\n info(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize('ℹ ', 'blue') + message);\n },\n\n success(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize('✔ ', 'green') + message);\n },\n\n warning(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize('⚠ ', 'yellow') + message);\n },\n\n error(message: string): void {\n console.error(colorize('✖ ', 'red') + message);\n },\n\n dim(message: string): void {\n // eslint-disable-next-line no-console\n console.log(colorize(message, 'dim'));\n },\n\n bold(message: string): string {\n return colorize(message, 'bright');\n },\n};\n\n/**\n * Check if terminal supports colors\n */\nexport function isColorSupported(): boolean {\n return process.stdout.isTTY && process.env.NO_COLOR !== '1';\n}\n","/**\n * @lytjs/cli - File system utilities\n */\n\nimport { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync } from 'fs';\nimport { join, dirname } from 'path';\n\n/**\n * Ensure directory exists (create if not)\n */\nexport function ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Write a file with content, creating parent directories if needed\n */\nexport function writeFile(filePath: string, content: string): void {\n ensureDir(dirname(filePath));\n writeFileSync(filePath, content, 'utf-8');\n}\n\n/**\n * Read a file as string\n */\nexport function readFile(filePath: string): string {\n return readFileSync(filePath, 'utf-8');\n}\n\n/**\n * Check if path exists\n */\nexport function exists(path: string): boolean {\n return existsSync(path);\n}\n\n/**\n * Copy directory recursively\n */\nexport function copyDir(src: string, dest: string): void {\n ensureDir(dest);\n const entries = readdirSync(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = join(src, entry.name);\n const destPath = join(dest, entry.name);\n\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath);\n } else {\n writeFile(destPath, readFileSync(srcPath, 'utf-8'));\n }\n }\n}\n\n/**\n * Check if directory is empty\n */\nexport function isEmptyDir(dir: string): boolean {\n if (!existsSync(dir)) return true;\n const files = readdirSync(dir);\n return files.length === 0;\n}\n","/**\n * @lytjs/cli - Package manager utilities\n */\n\nimport { execSync } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm';\n\n/**\n * Detect which package manager to use\n */\nexport function detectPackageManager(cwd: string = process.cwd()): PackageManager {\n // Check for lock files\n if (existsSync(join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(cwd, 'yarn.lock'))) return 'yarn';\n if (existsSync(join(cwd, 'package-lock.json'))) return 'npm';\n\n // Default to pnpm if available\n try {\n execSync('pnpm --version', { stdio: 'ignore' });\n return 'pnpm';\n } catch {\n // Fall back to npm\n return 'npm';\n }\n}\n\n/**\n * Get install command for package manager\n */\nexport function getInstallCommand(pm: PackageManager): string {\n switch (pm) {\n case 'pnpm':\n return 'pnpm install';\n case 'yarn':\n return 'yarn';\n case 'npm':\n return 'npm install';\n }\n}\n\n/**\n * Get run command for package manager\n */\nexport function getRunCommand(pm: PackageManager, script: string): string {\n switch (pm) {\n case 'pnpm':\n return `pnpm run ${script}`;\n case 'yarn':\n return `yarn ${script}`;\n case 'npm':\n return `npm run ${script}`;\n }\n}\n\n/**\n * Get add dependency command\n */\nexport function getAddCommand(pm: PackageManager, dep: string, dev: boolean = false): string {\n const devFlag = dev ? ' -D' : '';\n switch (pm) {\n case 'pnpm':\n return `pnpm add${devFlag} ${dep}`;\n case 'yarn':\n return `yarn add${devFlag} ${dep}`;\n case 'npm':\n return `npm install${devFlag} ${dep}`;\n }\n}\n","/**\n * @lytjs/cli - create command\n *\n * Creates a new LytJS project from a template.\n */\n\nimport type { CreateOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { ensureDir, writeFile, exists, isEmptyDir } from '../utils/fs';\nimport { detectPackageManager, getInstallCommand } from '../utils/package';\nimport { join, resolve } from 'path';\nimport { execSync } from 'child_process';\n\nconst TEMPLATES = {\n default: 'Default template with TypeScript and Vite',\n minimal: 'Minimal template without extra dependencies',\n ssr: 'SSR-enabled template',\n router: 'Template with Router integration',\n store: 'Template with Store integration',\n full: 'Full-featured template with Router, Store, and UI components',\n};\n\n/**\n * Create a new LytJS project\n */\nexport async function create(\n projectName?: string,\n options: Partial<CreateOptions> = {},\n): Promise<void> {\n if (!projectName) {\n logger.error('Please provide a project name.');\n logger.info('Usage: lyt create <project-name>');\n process.exit(1);\n }\n const targetDir = resolve(process.cwd(), projectName);\n\n // Check if directory exists and is not empty\n if (exists(targetDir) && !isEmptyDir(targetDir) && !options.force) {\n logger.error(`Directory \"${projectName}\" already exists and is not empty.`);\n logger.info('Use --force to overwrite.');\n process.exit(1);\n }\n\n logger.info(`Creating a new LytJS project in ${targetDir}...`);\n\n // Create directory\n ensureDir(targetDir);\n\n // Generate project files\n generateProjectFiles(targetDir, projectName, options.template || 'default');\n\n // Install dependencies\n logger.info('Installing dependencies...');\n const pm = detectPackageManager();\n try {\n execSync(getInstallCommand(pm), { cwd: targetDir, stdio: 'inherit' });\n logger.success('Dependencies installed successfully!');\n } catch (_error) {\n logger.warning('Failed to install dependencies automatically.');\n logger.info(`Please run \"${getInstallCommand(pm)}\" manually.`);\n }\n\n // Print next steps\n logger.success(`Project \"${projectName}\" created successfully!`);\n logger.info('');\n logger.bold('Next steps:');\n logger.info(` cd ${projectName}`);\n logger.info(` ${pm === 'npm' ? 'npm run' : pm} dev`);\n}\n\n/**\n * Generate project files\n */\nfunction generateProjectFiles(targetDir: string, projectName: string, template: string): void {\n // Determine template-specific settings\n const isMinimal = template === 'minimal';\n const isSsr = template === 'ssr';\n const isRouter = template === 'router' || template === 'full';\n const isStore = template === 'store' || template === 'full';\n const isFull = template === 'full';\n\n // package.json - use explicit type to allow property access\n interface PackageJsonTemplate {\n name: string;\n version: string;\n type: string;\n scripts: Record<string, string>;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n }\n\n const packageJson: PackageJsonTemplate = {\n name: projectName,\n version: '0.0.0',\n type: 'module',\n scripts: {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n },\n dependencies: {\n '@lytjs/core': '^6.0.0',\n },\n devDependencies: {\n '@lytjs/plugin-vite': '^6.0.0',\n vite: '^5.0.0',\n },\n };\n\n // Minimal template: no vitest, no test script\n if (!isMinimal) {\n packageJson.scripts.test = 'vitest';\n packageJson.devDependencies.vitest = '^1.0.0';\n }\n\n // SSR template: add @lytjs/server dependency\n if (isSsr) {\n packageJson.dependencies['@lytjs/server'] = '^6.0.0';\n packageJson.scripts['build:client'] = 'vite build --ssrManifest';\n packageJson.scripts['build:server'] = 'vite build --ssr src/entry-server.ts';\n packageJson.scripts['build'] = 'npm run build:client && npm run build:server';\n packageJson.scripts['preview'] = 'node server';\n }\n\n // Router template: add @lytjs/router\n if (isRouter) {\n packageJson.dependencies['@lytjs/router'] = '^1.0.0';\n }\n\n // Store template: add @lytjs/store\n if (isStore) {\n packageJson.dependencies['@lytjs/store'] = '^1.0.0';\n }\n\n // Full template: add @lytjs/ui\n if (isFull) {\n packageJson.dependencies['@lytjs/ui'] = '^0.4.0';\n }\n\n writeFile(join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2));\n\n // vite.config.ts\n let viteConfig: string;\n if (isSsr) {\n viteConfig = `import { defineConfig } from 'vite';\nimport lytjs from '@lytjs/plugin-vite';\n\nexport default defineConfig({\n plugins: [lytjs()],\n build: {\n ssrManifest: true,\n },\n});\n`;\n } else {\n viteConfig = `import { defineConfig } from 'vite';\nimport lytjs from '@lytjs/plugin-vite';\n\nexport default defineConfig({\n plugins: [lytjs()],\n});\n`;\n }\n writeFile(join(targetDir, 'vite.config.ts'), viteConfig);\n\n // index.html\n const indexHtml = `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${projectName}</title>\n </head>\n <body>\n <div id=\"app\"></div>\n <script type=\"module\" src=\"/src/main.ts\"></script>\n </body>\n</html>\n`;\n writeFile(join(targetDir, 'index.html'), indexHtml);\n\n // src/main.ts\n let mainTs: string;\n if (isSsr) {\n mainTs = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\nimport { createSSRApp } from '@lytjs/server';\n${isRouter ? \"import { createRouter, createWebHistory } from '@lytjs/router';\" : ''}\n${isStore ? \"import { createPinia } from '@lytjs/store';\" : ''}\n\nconst app = createSSRApp(App);\n${isStore ? 'app.use(createPinia());' : ''}\n${\n isRouter\n ? `\nconst router = createRouter({\n history: createWebHistory(),\n routes: [\n { path: '/', component: () => import('./pages/Home.lyt') },\n { path: '/about', component: () => import('./pages/About.lyt') },\n ],\n});\napp.use(router);\n`\n : ''\n}\napp.mount('#app');\n`;\n } else if (isRouter || isStore) {\n mainTs = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\n${isRouter ? \"import { createRouter, createWebHistory } from '@lytjs/router';\" : ''}\n${isStore ? \"import { createPinia } from '@lytjs/store';\" : ''}\n\nconst app = createApp(App);\n${isStore ? 'app.use(createPinia());' : ''}\n${\n isRouter\n ? `\nconst router = createRouter({\n history: createWebHistory(),\n routes: [\n { path: '/', component: () => import('./pages/Home.lyt') },\n { path: '/about', component: () => import('./pages/About.lyt') },\n ],\n});\napp.use(router);\n`\n : ''\n}\napp.mount('#app');\n`;\n } else {\n mainTs = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\n\ncreateApp(App).mount('#app');\n`;\n }\n writeFile(join(targetDir, 'src/main.ts'), mainTs);\n\n // src/App.lyt\n let appLyt: string;\n if (isMinimal) {\n appLyt = `<template>\n <div class=\"app\">\n <h1>{{ title }}</h1>\n </div>\n</template>\n\n<script setup>\nconst title = 'Hello LytJS!';\n</script>\n\n<style scoped>\n.app {\n text-align: center;\n}\n</style>\n`;\n } else if (isRouter) {\n appLyt = `<template>\n <div class=\"app\">\n <nav class=\"nav\">\n <router-link to=\"/\">Home</router-link>\n <router-link to=\"/about\">About</router-link>\n </nav>\n <router-view />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { RouterLink, RouterView } from '@lytjs/router';\n</script>\n\n<style scoped>\n.app {\n text-align: center;\n padding: 2rem;\n}\n\n.nav {\n margin-bottom: 2rem;\n}\n\n.nav a {\n margin: 0 1rem;\n color: #42b883;\n text-decoration: none;\n}\n\n.nav a:hover {\n text-decoration: underline;\n}\n</style>\n`;\n } else {\n appLyt = `<template>\n <div class=\"app\">\n <h1>{{ title }}</h1>\n <p>Welcome to your LytJS app!</p>\n </div>\n</template>\n\n<script setup>\nconst title = 'Hello LytJS!';\n</script>\n\n<style scoped>\n.app {\n text-align: center;\n padding: 2rem;\n}\n\nh1 {\n color: #42b883;\n}\n</style>\n`;\n }\n writeFile(join(targetDir, 'src/App.lyt'), appLyt);\n\n // Router template: add pages and store\n if (isRouter) {\n // Home page\n const homePage = `<template>\n <div class=\"home\">\n <h1>Home</h1>\n ${\n isStore\n ? `\n <p>Count: {{ count }}</p>\n <button @click=\"increment\">Increment</button>\n <button @click=\"decrement\">Decrement</button>\n `\n : ''\n }\n <p>Welcome to the Home page!</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n${\n isStore\n ? `import { useCounterStore } from '../stores/counter';\nconst counterStore = useCounterStore();\nconst { count, increment, decrement } = counterStore;\n`\n : ''\n}\n</script>\n\n<style scoped>\n.home {\n padding: 1rem;\n}\n</style>\n`;\n ensureDir(join(targetDir, 'src', 'pages'));\n writeFile(join(targetDir, 'src', 'pages', 'Home.lyt'), homePage);\n\n // About page\n const aboutPage = `<template>\n <div class=\"about\">\n <h1>About</h1>\n <p>This is the About page!</p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n</script>\n\n<style scoped>\n.about {\n padding: 1rem;\n}\n</style>\n`;\n writeFile(join(targetDir, 'src', 'pages', 'About.lyt'), aboutPage);\n }\n\n // Store template: add example store\n if (isStore) {\n const counterStore = `import { defineStore } from '@lytjs/store';\nimport { signal, computed } from '@lytjs/reactivity';\n\nexport const useCounterStore = defineStore('counter', () => {\n // State\n const count = signal(0);\n\n // Getters\n const doubleCount = computed(() => count.value * 2);\n\n // Actions\n function increment() {\n count.value++;\n }\n\n function decrement() {\n count.value--;\n }\n\n function reset() {\n count.value = 0;\n }\n\n return {\n count,\n doubleCount,\n increment,\n decrement,\n reset,\n };\n});\n`;\n ensureDir(join(targetDir, 'src', 'stores'));\n writeFile(join(targetDir, 'src', 'stores', 'counter.ts'), counterStore);\n }\n\n // SSR-specific files\n if (isSsr) {\n // src/entry-server.ts\n const entryServer = `import { createSSRApp, h } from '@lytjs/core';\nimport { renderToString } from '@lytjs/ssr';\nimport App from './App.lyt';\n\nexport async function render(url: string) {\n const app = createSSRApp({\n render() {\n return h(App);\n }\n });\n\n const html = await renderToString(app);\n return html;\n}\n`;\n writeFile(join(targetDir, 'src/entry-server.ts'), entryServer);\n\n // src/entry-client.ts\n const entryClient = `import { createApp } from '@lytjs/core';\nimport App from './App.lyt';\n\nconst app = createApp(App);\napp.mount('#app');\n`;\n writeFile(join(targetDir, 'src/entry-client.ts'), entryClient);\n\n // server.ts - complete SSR server implementation\n const serverTs = `/**\n * LytJS SSR Server\n *\n * Complete SSR server with Vite dev server and production build support.\n * Supports streaming SSR, route prefetching, and static file serving.\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport http from 'http';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst isProduction = process.env.NODE_ENV === 'production';\nconst DIST_DIR = path.join(__dirname, 'dist');\nconst PORT = parseInt(process.env.PORT || '3000', 10);\n\ninterface RenderOptions {\n url: string;\n template: string;\n manifest?: Record<string, string[]>;\n}\n\nasync function renderPage({ url, template, manifest }: RenderOptions): Promise<string> {\n let app: any;\n let vite: any;\n\n if (!isProduction) {\n const { createServer: createViteServer } = await import('vite');\n vite = await createViteServer({\n server: { middlewareMode: true },\n appType: 'custom',\n });\n app = (await vite.ssrLoadModule(path.join(__dirname, 'src/entry-server.ts'))).default;\n } else {\n app = (await import(path.join(DIST_DIR, 'server/entry-server.js'))).default;\n }\n\n const html = await app.render(url);\n return template.replace('<!--app-html-->', html);\n}\n\nasync function createServer() {\n let vite: any;\n\n // Load index.html template\n let template: string;\n\n if (!isProduction) {\n const { createServer: createViteServer } = await import('vite');\n vite = await createViteServer({\n server: { middlewareMode: true },\n appType: 'custom',\n });\n template = fs.readFileSync(path.join(__dirname, 'index.html'), 'utf-8');\n } else {\n template = fs.readFileSync(path.join(DIST_DIR, 'client/index.html'), 'utf-8');\n }\n\n const server = http.createServer(async (req, res) => {\n const url = req.url || '/';\n\n try {\n if (!isProduction && url.startsWith('/@')) {\n // Vite dev server requests\n return;\n }\n\n // Static assets\n if (url.startsWith('/assets/') || url.endsWith('.js') || url.endsWith('.css')) {\n const filePath = isProduction\n ? path.join(DIST_DIR, 'client', url)\n : path.join(__dirname, url);\n\n if (fs.existsSync(filePath)) {\n const ext = path.extname(filePath);\n const contentType = ext === '.css' ? 'text/css' : 'application/javascript';\n res.writeHead(200, { 'Content-Type': contentType });\n res.end(fs.readFileSync(filePath));\n return;\n }\n }\n\n // SSR rendering\n const html = await renderPage({\n url,\n template,\n manifest: isProduction\n ? JSON.parse(fs.readFileSync(path.join(DIST_DIR, 'client/ssr-manifest.json'), 'utf-8'))\n : undefined\n });\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(html);\n } catch (err: any) {\n if (!isProduction && vite) {\n vite.ssrFixStacktrace(err);\n }\n console.error('SSR Error:', err);\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.end('Internal Server Error');\n }\n });\n\n server.listen(PORT, () => {\n console.log(\\`LytJS SSR server running at http://localhost:\\${PORT}\\`);\n console.log(\\`Mode: \\${isProduction ? 'Production' : 'Development'}\\`);\n });\n}\n\ncreateServer().catch(console.error);\n`;\n writeFile(join(targetDir, 'server.ts'), serverTs);\n }\n\n // tsconfig.json\n const tsConfig = {\n compilerOptions: {\n target: 'ES2020',\n useDefineForClassFields: true,\n module: 'ESNext',\n lib: ['ES2020', 'DOM', 'DOM.Iterable'],\n skipLibCheck: true,\n moduleResolution: 'bundler',\n allowImportingTsExtensions: true,\n resolveJsonModule: true,\n isolatedModules: true,\n noEmit: true,\n strict: true,\n noUnusedLocals: true,\n noUnusedParameters: true,\n noFallthroughCasesInSwitch: true,\n },\n include: ['src/**/*.ts', 'src/**/*.lyt'],\n references: [{ path: './tsconfig.node.json' }],\n };\n writeFile(join(targetDir, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));\n\n // tsconfig.node.json\n const tsConfigNode = {\n compilerOptions: {\n composite: true,\n skipLibCheck: true,\n module: 'ESNext',\n moduleResolution: 'bundler',\n allowSyntheticDefaultImports: true,\n },\n include: ['vite.config.ts'],\n };\n writeFile(join(targetDir, 'tsconfig.node.json'), JSON.stringify(tsConfigNode, null, 2));\n\n // .gitignore\n const gitignore = `# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n`;\n writeFile(join(targetDir, '.gitignore'), gitignore);\n}\n\n/**\n * List available templates\n */\nexport function listTemplates(): void {\n logger.bold('Available templates:');\n for (const [name, description] of Object.entries(TEMPLATES)) {\n logger.info(` ${name.padEnd(10)} - ${description}`);\n }\n}\n","/**\n * @lytjs/cli - dev command\n *\n * Starts the development server.\n */\n\nimport type { DevOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { exists } from '../utils/fs';\nimport { detectPackageManager, getRunCommand } from '../utils/package';\nimport { spawn } from 'child_process';\nimport { join } from 'path';\n\n/**\n * Start the development server\n */\nexport async function dev(options: DevOptions = {}): Promise<void> {\n // Check if we're in a LytJS project\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const pm = detectPackageManager();\n const runCmd = getRunCommand(pm, 'dev');\n logger.info(`Starting development server with ${pm}...`);\n\n // Build the dev command args\n const devArgs: string[] = [];\n if (options.port) devArgs.push('--port', String(options.port));\n if (options.host) devArgs.push('--host', options.host);\n if (options.open) devArgs.push('--open');\n\n // Parse the run command (e.g., \"pnpm run dev\" -> [\"pnpm\", \"run\", \"dev\"])\n const cmdParts = runCmd.split(' ');\n const cmd = cmdParts[0] ?? 'pnpm';\n const cmdArgs = [...cmdParts.slice(1), ...devArgs];\n\n // Spawn the dev server\n const child = spawn(cmd, cmdArgs, {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('error', (error: Error) => {\n logger.error(`Failed to start dev server: ${error.message}`);\n process.exit(1);\n });\n\n child.on('exit', (code: number | null) => {\n process.exit(code || 0);\n });\n}\n","/**\n * @lytjs/cli - build command\n *\n * Builds the project for production.\n */\n\nimport type { BuildOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { exists } from '../utils/fs';\nimport { detectPackageManager } from '../utils/package';\nimport { spawn } from 'child_process';\nimport { join } from 'path';\n\n/**\n * Build the project for production\n */\nexport async function build(options: BuildOptions = {}): Promise<void> {\n // Check if we're in a LytJS project\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const pm = detectPackageManager();\n logger.info('Building for production...');\n\n // Build the command\n const args = ['vite', 'build'];\n if (options.outDir) args.push('--outDir', options.outDir);\n if (options.ssr) args.push('--ssr');\n if (options.minify === false) args.push('--minify', 'false');\n\n // Spawn the build process\n const child = spawn(pm === 'npm' ? 'npx' : pm, args, {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('error', (error) => {\n logger.error(`Build failed: ${error.message}`);\n process.exit(1);\n });\n\n child.on('exit', (code) => {\n if (code === 0) {\n logger.success('Build completed successfully!');\n } else {\n logger.error(`Build failed with exit code ${code}`);\n }\n process.exit(code || 0);\n });\n}\n","/**\n * @lytjs/cli - test command\n *\n * Runs the test suite.\n */\n\nimport type { TestOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { exists } from '../utils/fs';\nimport { detectPackageManager } from '../utils/package';\nimport { spawn } from 'child_process';\nimport { join } from 'path';\n\n/**\n * Run tests\n */\nexport async function test(options: TestOptions = {}): Promise<void> {\n // Check if we're in a LytJS project\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const pm = detectPackageManager();\n logger.info('Running tests...');\n\n // Build the command\n const args = ['vitest'];\n if (options.watch === false) args.push('run');\n if (options.coverage) args.push('--coverage');\n if (options.grep) args.push('--grep', options.grep);\n\n // Spawn the test process\n const child = spawn(pm === 'npm' ? 'npx' : pm, args, {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('error', (error) => {\n logger.error(`Tests failed: ${error.message}`);\n process.exit(1);\n });\n\n child.on('exit', (code) => {\n process.exit(code || 0);\n });\n}\n","/**\n * @lytjs/cli - add command\n *\n * Generate components, pages, and stores.\n */\n\nimport type { AddOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { ensureDir, writeFile, exists } from '../utils/fs';\nimport { join, resolve } from 'path';\n\ntype AddType =\n | 'component'\n | 'page'\n | 'store'\n | 'directive'\n | 'composable'\n | 'util'\n | 'middleware'\n | 'hook';\n\nconst TEMPLATES: Record<\n AddType,\n (name: string, path: string) => { filePath: string; content: string }[]\n> = {\n component(name, basePath) {\n const filePath = join(basePath, `${name}.lyt`);\n return [\n {\n filePath,\n content: `<template>\n <div class=\"${name}\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps<{\n /** Component props */\n}>();\n\ndefineEmits<{\n /** Component events */\n}>();\n</script>\n\n<style scoped>\n.${name} {\n /* styles */\n}\n</style>\n`,\n },\n ];\n },\n\n page(name, basePath) {\n const pascalName = toPascalCase(name);\n const filePath = join(basePath, `${name}.lyt`);\n return [\n {\n filePath,\n content: `<template>\n <div class=\"page-${name}\">\n <h1>${pascalName}</h1>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n// Page logic here\n</script>\n\n<style scoped>\n.page-${name} {\n padding: 1rem;\n}\n</style>\n`,\n },\n ];\n },\n\n store(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n return [\n {\n filePath,\n content: `import { defineStore } from '@lytjs/store';\nimport { signal, computed } from '@lytjs/reactivity';\n\nexport const use${toPascalCase(name)}Store = defineStore('${name}', () => {\n // State\n const count = signal(0);\n\n // Getters\n const doubleCount = computed(() => count.value * 2);\n\n // Actions\n function increment() {\n count.value++;\n }\n\n function decrement() {\n count.value--;\n }\n\n function reset() {\n count.value = 0;\n }\n\n return {\n count,\n doubleCount,\n increment,\n decrement,\n reset,\n };\n});\n`,\n },\n ];\n },\n\n directive(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n const camelCaseName = toCamelCase(name);\n return [\n {\n filePath,\n content: `import type { Directive } from '@lytjs/core';\n\n/**\n * ${toPascalCase(name)} Directive\n *\n * @example\n * \\`\\`\\`vue\n * <div v-${camelCaseName} />\n * \\`\\`\\`\n */\nexport const v${toPascalCase(name)}: Directive = {\n mounted(el, binding) {\n // Directive mounted\n },\n\n updated(el, binding) {\n // Directive updated\n },\n\n unmounted(el) {\n // Directive unmounted\n },\n};\n`,\n },\n ];\n },\n\n composable(name, basePath) {\n const filePath = join(basePath, `use${toPascalCase(name)}.ts`);\n return [\n {\n filePath,\n content: `import { signal, computed } from '@lytjs/reactivity';\n\n/**\n * ${toPascalCase(name)} Composable\n *\n * @example\n * \\`\\`\\`typescript\n * const { state, actions } = use${toPascalCase(name)}();\n * \\`\\`\\`\n */\nexport function use${toPascalCase(name)}() {\n // State\n const isLoading = signal(false);\n const error = signal<Error | null>(null);\n const data = signal<any>(null);\n\n // Computed\n const hasData = computed(() => data.value !== null);\n\n // Actions\n async function fetch() {\n isLoading.value = true;\n error.value = null;\n try {\n // TODO: Fetch logic here\n // data.value = await someApi();\n } catch (e) {\n error.value = e as Error;\n } finally {\n isLoading.value = false;\n }\n }\n\n function reset() {\n isLoading.value = false;\n error.value = null;\n data.value = null;\n }\n\n return {\n isLoading,\n error,\n data,\n hasData,\n fetch,\n reset,\n };\n}\n`,\n },\n ];\n },\n\n hook(name, basePath) {\n const filePath = join(basePath, `use${toPascalCase(name)}.ts`);\n return [\n {\n filePath,\n content: `import { signal, onMounted, onUnmounted } from '@lytjs/core';\n\n/**\n * ${toPascalCase(name)} Hook\n */\nexport function use${toPascalCase(name)}() {\n const state = signal(null);\n\n onMounted(() => {\n // Setup code on mount\n });\n\n onUnmounted(() => {\n // Cleanup on unmount\n });\n\n return {\n state,\n };\n}\n`,\n },\n ];\n },\n\n util(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n return [\n {\n filePath,\n content: `/**\n * ${toPascalCase(name)} Utility Functions\n */\n\n/**\n * ${toPascalCase(name)} function\n *\n * @param input - The input value\n * @returns The processed result\n */\nexport function ${toCamelCase(name)}(input: any) {\n // TODO: Implement function\n return input;\n}\n`,\n },\n ];\n },\n\n middleware(name, basePath) {\n const filePath = join(basePath, `${name}.ts`);\n return [\n {\n filePath,\n content: `import type { NavigationGuard } from '@lytjs/router';\n\n/**\n * ${toPascalCase(name)} Middleware\n */\nexport const ${toCamelCase(name)}Middleware: NavigationGuard = (to, from, next) => {\n // Middleware logic\n console.log('Middleware:', to.path);\n next();\n};\n`,\n },\n ];\n },\n};\n\n/**\n * Convert kebab-case or snake_case to PascalCase\n */\nfunction toPascalCase(str: string): string {\n return str\n .split(/[-_]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Convert string to camelCase\n */\nfunction toCamelCase(str: string): string {\n const pascalCase = toPascalCase(str);\n return pascalCase.charAt(0).toLowerCase() + pascalCase.slice(1);\n}\n\n/**\n * Resolve the target directory for the add command\n */\nfunction resolveTargetDir(type: AddType): string {\n const cwd = process.cwd();\n switch (type) {\n case 'component':\n return join(cwd, 'src', 'components');\n case 'page':\n return join(cwd, 'src', 'pages');\n case 'store':\n return join(cwd, 'src', 'stores');\n case 'directive':\n return join(cwd, 'src', 'directives');\n case 'composable':\n return join(cwd, 'src', 'composables');\n case 'util':\n return join(cwd, 'src', 'utils');\n case 'middleware':\n return join(cwd, 'src', 'middleware');\n case 'hook':\n return join(cwd, 'src', 'hooks');\n }\n}\n\n/**\n * Add a component, page, or store\n */\nexport async function add(type: AddType, name: string, options: AddOptions = {}): Promise<void> {\n const targetDir = resolveTargetDir(type);\n const fullPath = resolve(targetDir);\n\n if (!exists(join(process.cwd(), 'package.json'))) {\n logger.error('No package.json found. Are you in a LytJS project directory?');\n process.exit(1);\n }\n\n const template = TEMPLATES[type];\n if (!template) {\n logger.error(`Unknown type: ${type}. Supported types: component, page, store`);\n process.exit(1);\n }\n\n const files = template(name, fullPath);\n\n for (const file of files) {\n if (exists(file.filePath) && !options.force) {\n logger.warning(`File already exists: ${file.filePath}`);\n logger.info('Use --force to overwrite.');\n continue;\n }\n\n ensureDir(resolve(file.filePath, '..'));\n writeFile(file.filePath, file.content);\n logger.success(`Created ${type}: ${file.filePath}`);\n }\n}\n","/**\n * @lytjs/cli - 代码生成器命令\n *\n * 提供组件、页面、服务等代码生成功能\n */\n\nimport { logger } from '../utils/logger';\nimport { ensureDir, writeFile } from '../utils/fs';\nimport * as path from 'path';\n\nexport interface GenerateOptions {\n type: 'component' | 'page' | 'service' | 'hook' | 'store' | 'layout' | 'middleware';\n name: string;\n path?: string;\n withStyles?: boolean;\n withTest?: boolean;\n withStorybook?: boolean;\n description?: string;\n template?: 'default' | 'sfc' | 'functional';\n language?: 'ts' | 'js';\n}\n\ninterface TemplateData {\n name: string;\n pascalName: string;\n kebabName: string;\n camelName: string;\n date: string;\n description: string;\n}\n\nconst TEMPLATES = {\n component: (\n data: TemplateData,\n withStyles: boolean,\n withTest: boolean,\n template: string,\n lang: string,\n ) => {\n const styleImport = withStyles ? `\\nimport './${data.kebabName}.styles.css';` : '';\n const tsOnly = lang === 'ts';\n\n if (template === 'sfc') {\n return `<template>\n <div class=\"${data.kebabName}\">\n <slot>\n ${data.pascalName} Component\n </slot>\n </div>\n</template>\n\n<script setup${tsOnly ? ' lang=\"ts\"' : ''}>\n${tsOnly ? `import { ref } from '@lytjs/reactivity';\\n` : ''}\n${\n tsOnly\n ? `\nexport interface ${data.pascalName}Props {\n className?: string;\n}\n\nconst props = defineProps<${data.pascalName}Props>();\n`\n : ''\n}\n\nconst title = ref('${data.pascalName}');\n</script>\n\n<style scoped>\n.${data.kebabName} {\n /* Component styles */\n}\n</style>\n`;\n }\n\n const testImport = withTest\n ? `\\nimport { describe, it, expect } from 'vitest';\\nimport { ${data.pascalName} } from './${data.kebabName}';\\n\\ndescribe('${data.pascalName}', () => {\\n it('should render', () => {\\n // Add test here\\n expect(true).toBe(true);\\n });\\n});`\n : '';\n\n const propsDecl = tsOnly ? `['className', 'children']` : `[]`;\n\n return `/**\n * ${data.pascalName} 组件\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { h, defineComponent } from '@lytjs/core';${styleImport}\n\n${\n tsOnly\n ? `export interface ${data.pascalName}Props {\n className?: string;\n children?: any;\n}\n\n`\n : ''\n}${\n template === 'functional'\n ? `export function ${data.pascalName}(${tsOnly ? `props: ${data.pascalName}Props` : 'props'}) {\n const { className = '', children } = props;\n\n return (\n <div className={\\`${data.kebabName} \\${className}\\`}>\n {children || '${data.pascalName} Component'}\n </div>\n );\n}`\n : `export const ${data.pascalName} = defineComponent({\n name: '${data.pascalName}',\n props: ${propsDecl},\n setup(props) {\n const { className = '', children } = props;\n\n return () => (\n <div className={\\`${data.kebabName} \\${className}\\`}>\n {children || '${data.pascalName} Component'}\n </div>\n );\n },\n});`\n }\n\nexport default ${data.pascalName};${testImport}\n`;\n },\n\n page: (\n data: TemplateData,\n withStyles: boolean,\n withTest: boolean,\n template: string,\n lang: string,\n ) => {\n const styleImport = withStyles ? `\\nimport './${data.kebabName}.styles.css';` : '';\n const tsOnly = lang === 'ts';\n\n if (template === 'sfc') {\n return `<template>\n <div class=\"${data.kebabName}-page\">\n <h1>{title}</h1>\n <p>Page content for ${data.pascalName}</p>\n <slot />\n </div>\n</template>\n\n<script setup${tsOnly ? ' lang=\"ts\"' : ''}>\n${tsOnly ? `import { ref } from '@lytjs/reactivity';\\n` : ''}\n${\n tsOnly\n ? `\nexport interface ${data.pascalName}PageProps {\n title?: string;\n}\n\nconst props = defineProps<${data.pascalName}PageProps>();\n`\n : ''\n}\n\nconst title = ref(props.title || '${data.pascalName}');\n</script>\n\n<style scoped>\n.${data.kebabName}-page {\n padding: 2rem;\n}\n</style>\n`;\n }\n\n const testImport = withTest\n ? `\\nimport { describe, it, expect } from 'vitest';\\nimport { ${data.pascalName}Page } from './${data.kebabName}';\\n\\ndescribe('${data.pascalName}Page', () => {\\n it('should render', () => {\\n // Add test here\\n expect(true).toBe(true);\\n });\\n});`\n : '';\n\n return `/**\n * ${data.pascalName} 页面\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { h, ${tsOnly ? 'signal' : 'signal'} } from '@lytjs/core';\n${styleImport}\n\n${\n tsOnly\n ? `export interface ${data.pascalName}PageProps {\n title?: string;\n}\n\n`\n : ''\n}export function ${data.pascalName}Page(${tsOnly ? `props: ${data.pascalName}PageProps` : 'props'}) {\n const { title = '${data.pascalName}' } = props;\n\n return (\n <div className=\"${data.kebabName}-page\">\n <h1>{title}</h1>\n <p>Page content for ${data.pascalName}</p>\n </div>\n );\n}\n\nexport default ${data.pascalName}Page;${testImport}\n`;\n },\n\n service: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} 服务\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\n${\n tsOnly\n ? `export interface ${data.pascalName}ServiceOptions {\n baseUrl?: string;\n timeout?: number;\n}\n\n`\n : ''\n}${\n tsOnly\n ? `export class ${data.pascalName}Service {\n private baseUrl: string;\n private timeout: number;\n`\n : `export class ${data.pascalName}Service {\n`\n }\n constructor(${tsOnly ? `options: ${data.pascalName}ServiceOptions = {}` : 'options = {}'}) {\n this.baseUrl = options.baseUrl || '/api';\n this.timeout = options.timeout || 30000;\n }\n\n async getAll()${tsOnly ? ': Promise<any[]>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s\\`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async getById(id)${tsOnly ? ': Promise<any>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s/\\${id}\\`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async create(${tsOnly ? 'data: any' : 'data'})${tsOnly ? ': Promise<any>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s\\`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async update(id)${tsOnly ? ': Promise<any>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${data.kebabName}s/\\${id}\\`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n signal: AbortSignal.timeout(this.timeout),\n });\n return response.json();\n }\n\n async delete(id)${tsOnly ? ': Promise<void>' : ''} {\n await fetch(\\`\\${this.baseUrl}/${data.kebabName}s/\\${id}\\`, {\n method: 'DELETE',\n signal: AbortSignal.timeout(this.timeout),\n });\n }\n}\n\nexport default ${data.pascalName}Service;\n`;\n },\n\n hook: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} Hook\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { signal, effect } from '@lytjs/reactivity';\n\n${\n tsOnly\n ? `export interface ${data.pascalName}Options {\n immediate?: boolean;\n}\n\nexport interface ${data.pascalName}Return {\n data: ReturnType<typeof signal>;\n loading: ReturnType<typeof signal>;\n error: ReturnType<typeof signal>;\n execute: () => Promise<void>;\n reset: () => void;\n}\n\n`\n : ''\n}export function use${data.pascalName}(${tsOnly ? `options: ${data.pascalName}Options = {}` : 'options = {}'})${tsOnly ? `: ${data.pascalName}Return` : ''} {\n const { immediate = false } = options;\n\n const data = signal<any>(null);\n const loading = signal(false);\n const error = signal<Error | null>(null);\n\n async function execute() {\n loading.value = true;\n error.value = null;\n\n try {\n const result = await new Promise(resolve => setTimeout(() => resolve(null), 100));\n data.value = result;\n } catch (e) {\n error.value = e as Error;\n } finally {\n loading.value = false;\n }\n }\n\n function reset() {\n data.value = null;\n loading.value = false;\n error.value = null;\n }\n\n if (immediate) {\n execute();\n }\n\n return {\n data,\n loading,\n error,\n execute,\n reset,\n };\n}\n\nexport default use${data.pascalName};\n`;\n },\n\n store: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} Store\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { signal, computed } from '@lytjs/reactivity';\n\n${\n tsOnly\n ? `export interface ${data.pascalName}State {\n items: any[];\n selectedId: string | null;\n loading: boolean;\n error: Error | null;\n}\n\n`\n : ''\n}export function create${data.pascalName}Store() {\n const state = signal${tsOnly ? `<${data.pascalName}State>` : ''}({\n items: [],\n selectedId: null,\n loading: false,\n error: null,\n });\n\n const selectedItem = computed(() => {\n const currentState = state.value;\n return currentState.items.find(item => item.id === currentState.selectedId);\n });\n\n const itemCount = computed(() => state.value.items.length);\n\n function setItems(items) {\n state.value = { ...state.value, items };\n }\n\n function selectItem(id) {\n state.value = { ...state.value, selectedId: id };\n }\n\n function addItem(item) {\n state.value = {\n ...state.value,\n items: [...state.value.items, item],\n };\n }\n\n function updateItem(id, updates) {\n state.value = {\n ...state.value,\n items: state.value.items.map(item =>\n item.id === id ? { ...item, ...updates } : item\n ),\n };\n }\n\n function removeItem(id) {\n state.value = {\n ...state.value,\n items: state.value.items.filter(item => item.id !== id),\n selectedId: state.value.selectedId === id ? null : state.value.selectedId,\n };\n }\n\n function setLoading(loading) {\n state.value = { ...state.value, loading };\n }\n\n function setError(error) {\n state.value = { ...state.value, error };\n }\n\n function reset() {\n state.value = {\n items: [],\n selectedId: null,\n loading: false,\n error: null,\n };\n }\n\n return {\n state,\n selectedItem,\n itemCount,\n setItems,\n selectItem,\n addItem,\n updateItem,\n removeItem,\n setLoading,\n setError,\n reset,\n };\n}\n\n${tsOnly ? `export type ${data.pascalName}Store = ReturnType<typeof create${data.pascalName}Store>;\\n` : ''}export default create${data.pascalName}Store;\n`;\n },\n\n layout: (\n data: TemplateData,\n withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n const styleImport = withStyles ? `\\nimport './${data.kebabName}.styles.css';` : '';\n\n return `/**\n * ${data.pascalName} 布局\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\nimport { h, defineComponent } from '@lytjs/core';${styleImport}\n\n${\n tsOnly\n ? `export interface ${data.pascalName}LayoutProps {\n children?: any;\n}\n\n`\n : ''\n}export const ${data.pascalName}Layout = defineComponent({\n name: '${data.pascalName}Layout',\n setup(props) {\n return () => (\n <div className=\"${data.kebabName}-layout\">\n <header className=\"${data.kebabName}-header\">\n <slot name=\"header\">\n <h1>${data.pascalName}</h1>\n </slot>\n </header>\n <main className=\"${data.kebabName}-main\">\n <slot />\n </main>\n <footer className=\"${data.kebabName}-footer\">\n <slot name=\"footer\" />\n </footer>\n </div>\n );\n },\n});\n\nexport default ${data.pascalName}Layout;\n`;\n },\n\n middleware: (\n data: TemplateData,\n _withStyles: boolean,\n _withTest: boolean,\n _template: string,\n lang: string,\n ) => {\n const tsOnly = lang === 'ts';\n\n return `/**\n * ${data.pascalName} 中间件\n *\n * @description ${data.description}\n * @created ${data.date}\n */\n\n${tsOnly ? `import type { Request, Response, NextFunction } from 'express';\\n` : ''}\nexport function ${data.camelName}Middleware(${tsOnly ? `req: Request, res: Response, next: NextFunction` : 'req, res, next'}) {\n try {\n console.log('[${data.pascalName}] Middleware executed');\n next();\n } catch (error) {\n next(error);\n }\n}\n\nexport default ${data.camelName}Middleware;\n`;\n },\n};\n\nfunction toPascalCase(name: string): string {\n return name\n .split(/[-_]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\nfunction toCamelCase(name: string): string {\n const pascal = toPascalCase(name);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\nfunction toKebabCase(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\nexport async function generate(options: GenerateOptions): Promise<void> {\n const {\n type,\n name,\n path: basePath = './src',\n withStyles = false,\n withTest = false,\n description = '',\n template = 'default',\n language = 'ts',\n } = options;\n\n const templateData: TemplateData = {\n name,\n pascalName: toPascalCase(name),\n kebabName: toKebabCase(name),\n camelName: toCamelCase(name),\n date: new Date().toISOString().split('T')[0] as string,\n description: description || `${toPascalCase(name)} ${type}`,\n };\n\n const typeDirs: Record<string, string> = {\n component: 'components',\n page: 'pages',\n service: 'services',\n hook: 'hooks',\n store: 'stores',\n layout: 'layouts',\n middleware: 'middleware',\n };\n\n const targetDir = path.join(process.cwd(), basePath, typeDirs[type] || 'components');\n await ensureDir(targetDir);\n\n const templateFn = TEMPLATES[type];\n if (!templateFn) {\n logger.error(`Unknown type: ${type}`);\n logger.info('Available types: component, page, service, hook, store, layout, middleware');\n process.exit(1);\n }\n\n const extension = template === 'sfc' ? 'lyt' : language;\n const filename = `${templateData.kebabName}${type === 'page' ? '.page' : ''}.${extension}`;\n const filePath = path.join(targetDir, filename);\n const content = templateFn(templateData, withStyles, withTest, template, language);\n\n await writeFile(filePath, content);\n logger.success(`Generated ${type}: ${filePath}`);\n\n if (withStyles && template !== 'sfc') {\n const styleContent = `/**\n * ${templateData.pascalName} Styles\n */\n\n.${templateData.kebabName} {\n /* Component styles */\n}\n`;\n const stylePath = path.join(targetDir, `${templateData.kebabName}.styles.css`);\n await writeFile(stylePath, styleContent);\n logger.success(`Generated styles: ${stylePath}`);\n }\n\n if (withTest && template !== 'sfc') {\n logger.info('Test file included in generated component');\n }\n\n logger.info('\\nNext steps:');\n logger.info(` cd ${targetDir}`);\n logger.info(\n ` Import your ${type}: import { ${template === 'sfc' ? 'default' : templateData.pascalName} } from './${templateData.kebabName}'`,\n );\n\n logger.info('\\nAvailable options:');\n logger.info(' --template=sfc : Single File Component (.lyt)');\n logger.info(' --template=functional : Functional component');\n logger.info(' --language=js : JavaScript output');\n}\n\nexport default generate;\n","/**\n * @lytjs/cli - plugin command\n *\n * Plugin development CLI commands: create, build, validate, publish.\n */\n\nimport { logger } from '../utils/logger';\nimport { ensureDir } from '../utils/fs';\nimport { resolve, join } from 'path';\nimport { execSync } from 'child_process';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync } from 'fs';\n\n// ==================== Types ====================\n\nexport interface PluginCreateOptions {\n template?: string;\n force?: boolean;\n skipInstall?: boolean;\n}\n\nexport interface PluginBuildOptions {\n outDir?: string;\n minify?: boolean;\n sourcemap?: boolean;\n}\n\nexport interface PluginValidateOptions {\n strict?: boolean;\n warningsAsErrors?: boolean;\n}\n\nexport interface PluginPublishOptions {\n registry?: string;\n access?: 'public' | 'restricted';\n otp?: string;\n}\n\n// ==================== Plugin Templates ====================\n\nconst PLUGIN_TEMPLATES = {\n default: 'Default plugin template with TypeScript',\n minimal: 'Minimal plugin without extra dependencies',\n withConfig: 'Plugin template with configuration schema',\n};\n\nfunction getTemplateContent(template: string, pluginName: string): Record<string, string> {\n const packageName = `@lytjs/plugin-${pluginName}`;\n\n const files: Record<string, string> = {};\n\n // package.json\n files['package.json'] = JSON.stringify(\n {\n name: packageName,\n version: '0.1.0',\n description: `LytJS plugin: ${pluginName}`,\n main: 'dist/index.cjs',\n module: 'dist/index.mjs',\n types: 'dist/index.d.ts',\n exports: {\n '.': {\n import: './dist/index.mjs',\n require: './dist/index.cjs',\n types: './dist/index.d.ts',\n },\n },\n files: ['dist'],\n scripts: {\n build: 'tsup',\n dev: 'tsup --watch',\n test: 'vitest',\n lint: 'eslint src',\n prepublishOnly: 'npm run build',\n },\n keywords: ['lytjs', 'plugin'],\n license: 'MIT',\n peerDependencies: {\n '@lytjs/core': '>=6.0.0',\n },\n },\n null,\n 2,\n );\n\n // tsconfig.json\n files['tsconfig.json'] = JSON.stringify(\n {\n extends: '@lytjs/core/tsconfig.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n declaration: true,\n declarationMap: true,\n },\n include: ['src'],\n exclude: ['node_modules', 'dist', 'tests'],\n },\n null,\n 2,\n );\n\n // tsup.config.ts\n files['tsup.config.ts'] = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: { index: 'src/index.ts' },\n format: ['esm', 'cjs'],\n dts: true,\n sourcemap: true,\n clean: true,\n splitting: false,\n treeshake: true,\n minify: false,\n external: ['@lytjs/core'],\n});\n`;\n\n // src/index.ts\n if (template === 'withConfig') {\n files['src/index.ts'] = `/**\n * @lytjs/plugin-${pluginName}\n *\n * A LytJS plugin with configuration schema support.\n */\n\nimport { definePlugin } from '@lytjs/core';\nimport type { ConfigSchema } from '@lytjs/core';\n\n/**\n * Plugin options schema\n */\nconst optionsSchema: ConfigSchema<${pluginName.replace(/-/g, '')}Options> = {\n type: 'object',\n properties: {\n debug: {\n type: 'boolean',\n description: 'Enable debug mode',\n default: false,\n },\n option1: {\n type: 'string',\n description: 'First option',\n default: 'default value',\n },\n },\n additionalProperties: false,\n};\n\nexport interface ${pluginName.replace(/-/g, '')}Options {\n debug?: boolean;\n option1?: string;\n}\n\n/**\n * Create the plugin with configuration schema\n */\nexport function create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}(options?: ${pluginName.replace(/-/g, '')}Options) {\n return definePlugin({\n name: '${packageName}',\n version: '0.1.0',\n description: 'A LytJS plugin',\n schema: optionsSchema,\n install: (app, opts) => {\n const config = opts || {};\n console.log('[${packageName}] Installing with config:', config);\n },\n });\n}\n\n/**\n * Direct plugin export (without schema)\n */\nexport default create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}();\n`;\n } else {\n files['src/index.ts'] = `/**\n * @lytjs/plugin-${pluginName}\n *\n * A LytJS plugin.\n */\n\nimport { definePlugin } from '@lytjs/core';\n\n/**\n * Create the plugin\n */\nexport function create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}() {\n return definePlugin({\n name: '${packageName}',\n version: '0.1.0',\n description: 'A LytJS plugin',\n install: (app) => {\n console.log('[${packageName}] Plugin installed');\n },\n });\n}\n\n/**\n * Direct plugin export\n */\nexport default create${pluginName.replace(/-/g, '').replace(/^\\w/, (c) => c.toUpperCase())}();\n`;\n }\n\n // src/types.ts (for minimal template)\n if (template === 'minimal') {\n files['src/types.ts'] = `/**\n * Plugin types\n */\n\nexport interface PluginOptions {\n // Define your plugin options here\n}\n`;\n }\n\n // README.md\n files['README.md'] = `# @lytjs/plugin-${pluginName}\n\nA LytJS plugin.\n\n## Installation\n\n\\`\\`\\`bash\nnpm install @lytjs/plugin-${pluginName}\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`typescript\nimport { createApp } from '@lytjs/core';\nimport myPlugin from '@lytjs/plugin-${pluginName}';\n\nconst app = createApp(App);\napp.use(myPlugin);\n\\`\\`\\`\n\n## API\n\n### createPlugin(options?)\n\nCreate the plugin with options.\n\n## License\n\nMIT\n`;\n\n // .gitignore\n files['.gitignore'] = `# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\npnpm-debug.log*\n\nnode_modules\ndist\n*.local\n\n# IDE\n.vscode\n.idea\n*.sw?\n`;\n\n return files;\n}\n\n// ==================== Create Command ====================\n\nexport async function createPlugin(name: string, options: PluginCreateOptions = {}): Promise<void> {\n const targetDir = resolve(process.cwd(), name);\n const template = options.template || 'default';\n\n // Check template validity\n if (template !== 'default' && template !== 'minimal' && template !== 'withConfig') {\n logger.error(`Unknown template: ${template}`);\n logger.info('Available templates: default, minimal, withConfig');\n process.exit(1);\n }\n\n // Check if directory exists\n if (existsSync(targetDir) && !isEmptyDir(targetDir) && !options.force) {\n logger.error(`Directory \"${name}\" already exists and is not empty.`);\n logger.info('Use --force to overwrite.');\n process.exit(1);\n }\n\n logger.info(`Creating a new LytJS plugin in ${targetDir}...`);\n\n // Create directory\n ensureDir(targetDir);\n\n // Generate plugin files\n const files = getTemplateContent(template, name);\n for (const [filePath, content] of Object.entries(files)) {\n const fullPath = join(targetDir, filePath);\n const fileDir = resolve(fullPath, '..');\n if (!existsSync(fileDir)) {\n mkdirSync(fileDir, { recursive: true });\n }\n writeFileSync(fullPath, content, 'utf-8');\n logger.success(`Created: ${filePath}`);\n }\n\n // Install dependencies\n if (!options.skipInstall) {\n logger.info('Installing dependencies...');\n try {\n execSync('pnpm install', { cwd: targetDir, stdio: 'inherit' });\n logger.success('Dependencies installed!');\n } catch (_error) {\n logger.warning('Failed to install dependencies automatically.');\n logger.info('Please run \"pnpm install\" manually.');\n }\n }\n\n logger.success(`Plugin \"${name}\" created successfully!`);\n logger.info('');\n logger.bold('Next steps:');\n logger.info(` cd ${name}`);\n logger.info(' pnpm dev # Start development');\n logger.info(' pnpm build # Build for production');\n logger.info(' pnpm test # Run tests');\n}\n\n// ==================== Build Command ====================\n\nexport async function buildPlugin(options: PluginBuildOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const outDir = options.outDir || 'dist';\n\n // Check if package.json exists\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n logger.error('No package.json found. Are you in a plugin directory?');\n process.exit(1);\n }\n\n logger.info('Building plugin...');\n\n try {\n const buildCmd = 'tsup';\n const args = [\n '--entry',\n 'src/index.ts',\n '--outDir',\n outDir,\n '--format',\n 'esm,cjs',\n '--dts',\n '--sourcemap',\n ];\n\n if (options.minify) {\n args.push('--minify');\n }\n\n execSync(`${buildCmd} ${args.join(' ')}`, { cwd, stdio: 'inherit' });\n\n logger.success('Build completed!');\n logger.info(`Output: ${join(cwd, outDir)}`);\n } catch (_error) {\n logger.error('Build failed. Make sure tsup is installed: pnpm add -D tsup');\n process.exit(1);\n }\n}\n\n// ==================== Validate Command ====================\n\nexport async function validatePlugin(options: PluginValidateOptions = {}): Promise<void> {\n const cwd = process.cwd();\n\n logger.info('Validating plugin...');\n\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check package.json\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n errors.push('package.json not found');\n } else {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n\n // Check required fields\n if (!pkg.name) errors.push('package.json: name is required');\n if (!pkg.version) errors.push('package.json: version is required');\n if (!pkg.main) errors.push('package.json: main is required');\n if (!pkg.module) errors.push('package.json: module is required');\n if (!pkg.types) errors.push('package.json: types is required');\n\n // Check exports\n if (!pkg.exports) {\n warnings.push('package.json: exports field is recommended');\n }\n\n // Check peerDependencies\n if (!pkg.peerDependencies || !pkg.peerDependencies['@lytjs/core']) {\n errors.push('package.json: @lytjs/core peerDependency is required');\n }\n\n // Check keywords\n if (!pkg.keywords || !pkg.keywords.includes('lytjs')) {\n warnings.push('package.json: \"lytjs\" keyword is recommended');\n }\n } catch (err) {\n errors.push(`package.json: Invalid JSON - ${err}`);\n }\n }\n\n // Check source files\n const srcPath = join(cwd, 'src');\n if (!existsSync(srcPath)) {\n errors.push('src directory not found');\n } else {\n const indexPath = join(srcPath, 'index.ts');\n if (!existsSync(indexPath)) {\n errors.push('src/index.ts not found');\n } else {\n const content = readFileSync(indexPath, 'utf-8');\n\n // Check for definePlugin usage\n if (!content.includes('definePlugin') && !content.includes('EnhancedPlugin')) {\n warnings.push('src/index.ts: Consider using definePlugin or EnhancedPlugin');\n }\n\n // Check for export\n if (!content.includes('export')) {\n warnings.push('src/index.ts: No exports found');\n }\n }\n }\n\n // Check tsconfig.json\n const tsconfigPath = join(cwd, 'tsconfig.json');\n if (!existsSync(tsconfigPath)) {\n warnings.push('tsconfig.json not found (recommended)');\n }\n\n // Check tsup.config.ts\n const tsupConfigPath = join(cwd, 'tsup.config.ts');\n if (!existsSync(tsupConfigPath)) {\n warnings.push('tsup.config.ts not found (recommended for builds)');\n }\n\n // Report results\n const hasErrors = errors.length > 0;\n const hasWarnings = warnings.length > 0;\n\n if (hasErrors) {\n logger.error('Validation failed with errors:');\n for (const err of errors) {\n logger.error(` - ${err}`);\n }\n }\n\n if (hasWarnings && !options.strict) {\n logger.warning('Warnings:');\n for (const warn of warnings) {\n logger.warning(` - ${warn}`);\n }\n }\n\n if (!hasErrors && !hasWarnings) {\n logger.success('Plugin validation passed!');\n } else if (hasWarnings && !hasErrors) {\n logger.success('Plugin validation passed (with warnings)');\n if (options.strict) {\n process.exit(1);\n }\n } else {\n if (options.warningsAsErrors && hasWarnings) {\n logger.error('Strict mode: treating warnings as errors');\n }\n process.exit(1);\n }\n}\n\n// ==================== Helper Functions ====================\n\nfunction isEmptyDir(dir: string): boolean {\n if (!existsSync(dir)) return true;\n const files = readdirSync(dir);\n return files.length === 0;\n}\n\n// ==================== List Templates ====================\n\nexport function listPluginTemplates(): void {\n logger.bold('Available plugin templates:');\n for (const [name, description] of Object.entries(PLUGIN_TEMPLATES)) {\n logger.info(` ${name.padEnd(12)} - ${description}`);\n }\n}\n","/**\n * @lytjs/cli - CLI runner\n *\n * Main entry point for the CLI. Parses arguments and routes to commands.\n */\n\nimport type { CliOptions } from '../types';\nimport { logger } from '../utils/logger';\nimport { create, listTemplates } from './create';\nimport { dev } from './dev';\nimport { build } from './build';\nimport { test } from './test';\nimport { add } from './add';\nimport { generate } from './generate';\nimport { createPlugin, buildPlugin, validatePlugin, listPluginTemplates } from './plugin';\n\nconst VERSION = '6.0.0';\n\nexport async function runCli(rawArgs: string[] = process.argv.slice(2)): Promise<void> {\n const { command, args, options } = parseArgs(rawArgs);\n\n if (options.help || command === 'help') {\n showHelp();\n return;\n }\n\n if (options.version || command === 'version' || command === '-v' || command === '--version') {\n console.warn(`LytJS CLI v${VERSION}`);\n return;\n }\n\n switch (command) {\n case 'create':\n await create(args[0] || 'my-lytjs-app', {\n template: options.template as string | undefined,\n force: options.force as boolean | undefined,\n });\n break;\n\n case 'templates':\n listTemplates();\n break;\n\n case 'dev':\n await dev({\n port: options.port ? parseInt(options.port as string, 10) : undefined,\n host: options.host as string | undefined,\n open: options.open as boolean | undefined,\n });\n break;\n\n case 'build':\n await build({\n outDir: options.outDir as string | undefined,\n ssr: options.ssr as boolean | undefined,\n minify: (options.minify as string) !== 'false',\n });\n break;\n\n case 'test':\n await test({\n watch: (options.watch as string) !== 'false',\n coverage: options.coverage as boolean | undefined,\n grep: options.grep as string | undefined,\n });\n break;\n\n case 'add': {\n const addTypes: Array<\n 'component' | 'page' | 'store' | 'directive' | 'composable' | 'util' | 'middleware' | 'hook'\n > = ['component', 'page', 'store', 'directive', 'composable', 'util', 'middleware', 'hook'];\n if (!args[0] || !addTypes.includes(args[0] as unknown as (typeof addTypes)[number])) {\n logger.error('Usage: lyt add <type> <name>');\n logger.info('Types: component, page, store, directive, composable, util, middleware, hook');\n logger.info('Example: lyt add component Button');\n process.exit(1);\n }\n await add(args[0] as unknown as (typeof addTypes)[number], args[1] || 'Unnamed', {\n force: options.force as boolean | undefined,\n });\n break;\n }\n\n case 'generate':\n case 'g': {\n const genTypes: Array<\n 'component' | 'page' | 'service' | 'hook' | 'store' | 'layout' | 'middleware'\n > = ['component', 'page', 'service', 'hook', 'store', 'layout', 'middleware'];\n if (!args[0] || !genTypes.includes(args[0] as unknown as (typeof genTypes)[number])) {\n logger.error('Usage: lyt generate <type> <name>');\n logger.info('Types: component, page, service, hook, store, layout, middleware');\n logger.info('Example: lyt generate component Button');\n process.exit(1);\n }\n await generate({\n type: args[0] as unknown as (typeof genTypes)[number],\n name: args[1] || 'Unnamed',\n path: options.path as string | undefined,\n withStyles: options.styles as boolean | undefined,\n withTest: options.test as boolean | undefined,\n withStorybook: options.storybook as boolean | undefined,\n });\n break;\n }\n\n case 'plugin': {\n if (!args[0]) {\n logger.error('Usage: lyt plugin <create|build|validate|templates>');\n logger.info('Example: lyt plugin create my-plugin');\n process.exit(1);\n }\n\n const subCommand = args[0];\n switch (subCommand) {\n case 'create':\n await createPlugin(args[1] || 'my-plugin', {\n template: options.template as string | undefined,\n force: options.force as boolean | undefined,\n skipInstall: options.skipInstall as boolean | undefined,\n });\n break;\n case 'build':\n await buildPlugin({\n outDir: options.outDir as string | undefined,\n minify: options.minify as boolean | undefined,\n sourcemap: options.sourcemap as boolean | undefined,\n });\n break;\n case 'validate':\n await validatePlugin({\n strict: options.strict as boolean | undefined,\n warningsAsErrors: options.warningsAsErrors as boolean | undefined,\n });\n break;\n case 'templates':\n listPluginTemplates();\n break;\n default:\n logger.error(`Unknown plugin sub-command: ${subCommand}`);\n logger.info('Supported sub-commands: create, build, validate, templates');\n process.exit(1);\n }\n break;\n }\n\n default:\n if (command) {\n logger.error(`Unknown command: ${command}`);\n logger.info('Run \"lyt --help\" for usage information.');\n process.exit(1);\n } else {\n showHelp();\n }\n }\n}\n\nfunction parseArgs(args: string[]): CliOptions {\n let command = args[0] ?? '';\n const positional: string[] = [];\n const options: Record<string, unknown> = {};\n\n if (command.startsWith('--') || command.startsWith('-')) {\n command = '';\n }\n\n const startIndex = command ? 1 : 0;\n\n for (let i = startIndex; i < args.length; i++) {\n const arg = args[i] ?? '';\n\n if (arg.startsWith('--')) {\n const parts = arg.slice(2).split('=');\n const key = parts[0];\n const value = parts[1];\n if (value !== undefined && key) {\n options[key] = value;\n } else if (key && i + 1 < args.length && !(args[i + 1] ?? '').startsWith('-')) {\n const nextArg = args[++i];\n if (nextArg) {\n options[key] = nextArg;\n }\n } else if (key) {\n options[key] = true;\n }\n } else if (arg.startsWith('-')) {\n const key = arg.slice(1);\n if (key) {\n options[key] = true;\n }\n } else {\n positional.push(arg);\n }\n }\n\n return { command, args: positional, options };\n}\n\nfunction showHelp(): void {\n console.warn(`\n${logger.bold('LytJS CLI')} v${VERSION}\n\n${logger.bold('Usage:')}\n lyt <command> [options]\n\n${logger.bold('Commands:')}\n create <name> Create a new LytJS project\n templates List available templates\n dev Start development server\n build Build for production\n test Run tests\n add <type> <name> Generate a component, page, store, directive, composable, etc.\n generate, g Advanced code generation (component, page, service, hook, store)\n plugin <subcmd> Plugin development commands\n help Show this help message\n \n${logger.bold('Options:')}\n --version, -v Show version number\n --help Show help\n\n${logger.bold('Create Options:')}\n --template <name> Use a specific template\n --force Overwrite existing directory\n\n${logger.bold('Dev Options:')}\n --port <number> Specify port (default: 5173)\n --host <host> Specify host (default: localhost)\n --open Open browser on start\n\n${logger.bold('Build Options:')}\n --outDir <dir> Output directory (default: dist)\n --ssr Build for SSR\n --minify false Disable minification\n\n${logger.bold('Test Options:')}\n --watch false Run tests once (no watch mode)\n --coverage Generate coverage report\n --grep <pattern> Filter tests by pattern\n\n${logger.bold('Generate Options:')}\n --path <dir> Output directory (default: ./src)\n --styles Generate CSS styles file\n --test Generate test file\n --storybook Generate Storybook story file\n\n${logger.bold('Plugin Options:')}\n --template <name> Use a specific plugin template (default, minimal, withConfig)\n --force Overwrite existing directory\n --skipInstall Skip installing dependencies\n --outDir <dir> Output directory (default: dist)\n --minify Minify output\n --sourcemap Generate sourcemaps\n --strict Strict validation mode\n --warningsAsErrors Treat warnings as errors\n\n${logger.bold('Examples:')}\n lyt create my-app\n lyt create my-app --template minimal\n lyt create my-app --template router\n lyt create my-app --template full\n lyt dev --port 3000\n lyt build --ssr\n lyt add component Button\n lyt add page About\n lyt add store user\n lyt directive click-outside\n lyt add composable fetch-data\n lyt add util format\n lyt add hook window-size\n lyt generate component Button --styles --test\n lyt generate page Dashboard --path ./src/pages\n lyt generate service User --path ./src/services\n lyt generate hook useCounter\n lyt generate store Auth --path ./src/stores\n lyt g page Login\n lyt plugin create my-plugin\n lyt plugin create my-plugin --template withConfig\n lyt plugin build\n lyt plugin validate\n`);\n}\n","/**\n * @lytjs/cli\n *\n * LytJS project scaffolding and development CLI tool.\n *\n * @packageDocumentation\n */\n\nimport { runCli } from './commands/run';\n\nexport { runCli } from './commands/run';\n\nexport { create, listTemplates } from './commands/create';\nexport { dev } from './commands/dev';\nexport { build } from './commands/build';\nexport { test } from './commands/test';\nexport { add } from './commands/add';\nexport { generate } from './commands/generate';\nexport type { GenerateOptions } from './commands/generate';\nexport { createPlugin, buildPlugin, validatePlugin, listPluginTemplates } from './commands/plugin';\nexport type {\n PluginCreateOptions,\n PluginBuildOptions,\n PluginValidateOptions,\n PluginPublishOptions,\n} from './commands/plugin';\n\nexport { logger } from './utils/logger';\nexport { ensureDir, writeFile, readFile, exists } from './utils/fs';\nexport {\n detectPackageManager,\n getInstallCommand,\n getRunCommand,\n getAddCommand,\n} from './utils/package';\n\nexport type {\n CliOptions,\n CreateOptions,\n DevOptions,\n BuildOptions,\n TestOptions,\n PackageJson,\n} from './types';\n\nif (require.main === module) {\n runCli().catch(console.error);\n}\n"]}
|