speexjs 0.2.0 β†’ 0.2.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/native/args.ts","../../src/native/colors.ts","../../src/cli/commands/init.ts","../../src/cli/commands/make-controller.ts","../../src/cli/commands/make-middleware.ts","../../src/cli/commands/make-schema.ts","../../src/cli/commands/list-routes.ts","../../src/cli/commands/serve.ts","../../src/native/logger.ts","../../src/cli/index.ts"],"sourcesContent":["export interface ParsedArgs {\n command: string\n subcommand?: string\n args: string[]\n options: Record<string, string | boolean | string[]>\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n const args = argv.slice(2)\n const result: ParsedArgs = {\n command: '',\n args: [],\n options: {},\n }\n\n if (args.length === 0) return result\n\n const first = args[0]!\n\n if (first.includes(':')) {\n result.command = first\n parseOptions(args.slice(1), result)\n return result\n }\n\n result.command = first\n\n if (args.length > 1) {\n const second = args[1]!\n if (!second.startsWith('-')) {\n result.subcommand = second\n result.args.push(second)\n parseOptions(args.slice(2), result)\n return result\n }\n }\n\n parseOptions(args.slice(1), result)\n return result\n}\n\nfunction parseOptions(argv: string[], result: ParsedArgs): void {\n let i = 0\n while (i < argv.length) {\n const arg = argv[i]!\n\n if (arg === '--') {\n for (let j = i + 1; j < argv.length; j++) {\n result.args.push(argv[j]!)\n }\n break\n }\n\n if (arg.startsWith('--no-')) {\n const key = arg.slice(5)\n if (key) {\n result.options[key] = false\n }\n i++\n continue\n }\n\n if (arg.startsWith('--')) {\n const key = arg.slice(2)\n if (i + 1 < argv.length && !argv[i + 1]!.startsWith('-')) {\n const val = argv[i + 1]!\n const existing = result.options[key]\n if (existing !== undefined) {\n result.options[key] = Array.isArray(existing)\n ? ([...existing, val] as string[])\n : [existing as string, val]\n } else {\n result.options[key] = val\n }\n i += 2\n } else {\n result.options[key] = true\n i++\n }\n continue\n }\n\n if (arg.startsWith('-') && arg.length === 2) {\n const key = arg.slice(1)\n if (i + 1 < argv.length && !argv[i + 1]!.startsWith('-')) {\n const val = argv[i + 1]!\n result.options[key] = val\n i += 2\n } else {\n result.options[key] = true\n i++\n }\n continue\n }\n\n result.args.push(arg)\n i++\n }\n}\n\nexport function toCommandName(argv: string[]): string {\n const args = argv.slice(2)\n if (args.length === 0) return ''\n\n const first = args[0]!\n\n if (first.includes(':')) return first\n\n if (args.length > 1 && !args[1]!.startsWith('-')) {\n return `${first}:${args[1]}`\n }\n\n return first\n}\n","const RESET = '\\x1b[0m'\n\nconst codes: Record<string, string> = {\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n}\n\nexport const colors = {\n red: (s: string): string => `${codes.red}${s}${RESET}`,\n green: (s: string): string => `${codes.green}${s}${RESET}`,\n yellow: (s: string): string => `${codes.yellow}${s}${RESET}`,\n blue: (s: string): string => `${codes.blue}${s}${RESET}`,\n magenta: (s: string): string => `${codes.magenta}${s}${RESET}`,\n cyan: (s: string): string => `${codes.cyan}${s}${RESET}`,\n gray: (s: string): string => `${codes.gray}${s}${RESET}`,\n white: (s: string): string => `${codes.white}${s}${RESET}`,\n bold: (s: string): string => `${codes.bold}${s}${RESET}`,\n dim: (s: string): string => `${codes.dim}${s}${RESET}`,\n italic: (s: string): string => `${codes.italic}${s}${RESET}`,\n underline: (s: string): string => `${codes.underline}${s}${RESET}`,\n}\n\nexport function stripColors(s: string): string {\n const ansi = String.fromCharCode(27)\n const re = new RegExp(`${ansi}\\\\[\\\\d+m`, 'g')\n return s.replace(re, '')\n}\n\nexport function isColorSupported(): boolean {\n if (typeof process === 'undefined') return false\n if (process.env.NO_COLOR) return false\n if (process.env.FORCE_COLOR) return true\n if (!process.stdout) return false\n if (!process.stdout.isTTY) return false\n return true\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\ninterface TemplateContent {\n dirs: string[]\n files: Record<string, string | ((name: string) => string)>\n}\n\nconst TEMPLATES: Record<string, TemplateContent> = {\n blank: {\n dirs: ['src'],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeedX serve',\n build: 'SpeedX build',\n start: 'node dist/index.js',\n },\n dependencies: {\n SpeedX: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/index.ts': `import { SpeedX } from 'speedx/server'\n\nconst app = SpeedX()\n\nconst PORT = Number(process.env.PORT) || 3000\n\napp.get('/', async ({ response }) => {\n return response.html('<h1>SpeedX πŸš€</h1>')\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeedX running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/app.ts': `import { SpeedX } from 'speedx/server'\n\nexport function createApp() {\n const app = SpeedX()\n return app\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n\n fullstack: {\n dirs: [\n 'src/server',\n 'src/server/controllers',\n 'src/server/middleware',\n 'src/client',\n 'src/client/components',\n 'src/client/pages',\n 'src/shared',\n 'public',\n ],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeedX serve',\n build: 'tsc',\n start: 'node dist/server/index.js',\n },\n dependencies: {\n SpeedX: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n jsx: 'react-jsx',\n jsxImportSource: '@SpeedX/vdom',\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts', 'src/**/*.tsx'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/server/index.ts': `import { SpeedX } from 'speedx/server'\nimport { UserController } from './controllers/user.controller.js'\n\nconst PORT = Number(process.env.PORT) || 3000\n\nconst app = SpeedX()\n\napp.controller(UserController)\n\napp.get('/', async ({ response }) => {\n return response.html(\\`\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>SpeedX Fullstack</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/client/index.js\"></script>\n </body>\n </html>\n \\`)\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeedX running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/server/controllers/user.controller.ts': `import { Controller, get, post } from 'speedx/server'\n\nexport class UserController extends Controller {\n @get('/users')\n async index({ response }) {\n return response.json({ data: [] })\n }\n\n @post('/users')\n async store({ request, response }) {\n const body = await request.body()\n return response.json({ data: body }, 201)\n }\n}\n`,\n 'src/client/index.ts': `import { createApp } from './app.js'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n createApp().mount('#root')\n})\n`,\n 'src/client/app.ts': `export function createApp() {\n function mount(selector: string) {\n const root = document.querySelector(selector)\n if (!root) {\n console.error('Root element not found:', selector)\n return\n }\n root.innerHTML = \\`\n <div style=\"text-align:center;padding:2rem\">\n <h1>SpeedX Fullstack</h1>\n <p>Welcome to SpeedX!</p>\n </div>\n \\`\n }\n\n return { mount }\n}\n`,\n 'public/style.css': `* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #0f172a;\n color: #e2e8f0;\n min-height: 100vh;\n}\n\n#root {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n}\n`,\n 'src/shared/types.ts': `export interface ApiResponse<T = unknown> {\n success: boolean\n data: T\n message?: string\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n\n 'api-only': {\n dirs: ['src', 'src/controllers', 'src/middleware'],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeedX serve',\n build: 'tsc',\n start: 'node dist/index.js',\n },\n dependencies: {\n SpeedX: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/index.ts': `import { SpeedX } from 'speedx/server'\n\nconst PORT = Number(process.env.PORT) || 3000\n\nconst app = SpeedX()\n\napp.get('/api/health', async ({ response }) => {\n return response.json({ status: 'ok', timestamp: new Date().toISOString() })\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeedX API running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/controllers/health.controller.ts': `import { Controller, get } from 'speedx/server'\n\nexport class HealthController extends Controller {\n @get('/health')\n async check({ response }) {\n return response.json({\n status: 'ok',\n uptime: process.uptime(),\n })\n }\n}\n`,\n 'src/middleware/auth.ts': `import type { RouteContext } from 'speedx/server/router'\n\nexport function auth() {\n return async (ctx: RouteContext, next: () => Promise<void>) => {\n const token = ctx.request.headers.get('authorization')\n\n if (!token) {\n ctx.response.status(401).json({\n error: 'Unauthorized',\n message: 'Missing authorization header',\n })\n return\n }\n\n await next()\n }\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n}\n\nconst TEMPLATE_ALIASES: Record<string, string> = {\n api: 'api-only',\n full: 'fullstack',\n}\n\nfunction getTemplate(name: string): string {\n return TEMPLATE_ALIASES[name] ?? name\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nexport async function initProject(\n name: string,\n options: Record<string, any>,\n): Promise<void> {\n const targetDir = resolve(process.cwd(), name)\n\n if (existsSync(targetDir)) {\n console.error(colors.red(`Directory '${name}' sudah ada!`))\n process.exit(1)\n }\n\n const templateName = getTemplate(String(options.template || 'blank'))\n const template = TEMPLATES[templateName]\n\n if (!template) {\n console.error(\n colors.red(\n `Template '${options.template}' tidak dikenal. Gunakan: blank, fullstack, api-only`,\n ),\n )\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n for (const dir of template.dirs) {\n mkdirSync(resolve(targetDir, dir), { recursive: true })\n }\n\n for (const [filePath, content] of Object.entries(template.files)) {\n const fullPath = resolve(targetDir, filePath)\n mkdirSync(dirname(fullPath), { recursive: true })\n\n const resolvedContent =\n typeof content === 'function' ? content(name) : content\n\n writeFileSync(fullPath, resolvedContent, 'utf-8')\n }\n\n if (options.git !== false) {\n try {\n const { execSync } = await import('child_process')\n execSync('git init', { cwd: targetDir, stdio: 'ignore' })\n } catch {\n // git not available\n }\n }\n\n if (options.install !== false) {\n const pm = String(options['package-manager'] || options.packageManager || 'npm')\n try {\n const { execSync } = await import('child_process')\n console.log(` ${colors.cyan('β†’')} Installing dependencies with ${pm}...`)\n execSync(`${pm} install`, { cwd: targetDir, stdio: 'inherit' })\n } catch {\n console.log(\n ` ${colors.yellow('!')} Dependency install skipped. Run '${pm} install' manually.`,\n )\n }\n }\n\n const packageManager = String(options['package-manager'] || options.packageManager || 'npm')\n\n console.log()\n console.log(`${colors.bold('╔════════════════════════════════════╗')}`)\n console.log(`${colors.bold('β•‘')} ${colors.green('SpeedX πŸš€ Project Created')}${colors.bold(' β•‘')}`)\n console.log(`${colors.bold('β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•')}`)\n console.log()\n console.log(` ${colors.bold('Name:')} ${toPascalCase(name)}`)\n console.log(` ${colors.bold('Template:')} ${templateName}`)\n console.log(` ${colors.bold('Dir:')} ${targetDir}`)\n console.log()\n console.log(` ${colors.cyan('$')} cd ${name}`)\n console.log(` ${colors.cyan('$')} ${packageManager} run dev`)\n console.log()\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toLowerCase())\n}\n\nexport function makeController(name: string): void {\n const className = `${toPascalCase(name)}Controller`\n const fileName = `${toKebabCase(name)}.controller.ts`\n const targetDir = resolve(process.cwd(), 'src/server/controllers')\n const fullPath = resolve(targetDir, fileName)\n const varName = toCamelCase(name)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import { Controller, get, post, put, del } from 'speedx/server'\nimport type { RouteContext } from 'speedx/server/router'\n\nexport class ${className} extends Controller {\n @get('/')\n async index({ response }: RouteContext) {\n return response.json({ data: [] })\n }\n\n @get('/:id')\n async show({ response, params }: RouteContext) {\n return response.json({ data: { id: params.id } })\n }\n\n @post('/')\n async store({ request, response }: RouteContext) {\n const body = await request.body()\n return response.json({ data: body }, 201)\n }\n\n @put('/:id')\n async update({ request, response, params }: RouteContext) {\n const body = await request.body()\n return response.json({ data: { id: params.id, ...body } })\n }\n\n @del('/:id')\n async destroy({ response, params }: RouteContext) {\n return response.json({ message: \\`${className} deleted \\${params.id}\\` })\n }\n}\n\nexport const ${varName}Controller = ${className}\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('βœ…')} Controller ${colors.bold(className)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toLowerCase())\n}\n\nexport function makeMiddleware(name: string): void {\n const functionName = toCamelCase(name)\n const className = toPascalCase(name)\n const fileName = `${toKebabCase(name)}.middleware.ts`\n const targetDir = resolve(process.cwd(), 'src/server/middleware')\n const fullPath = resolve(targetDir, fileName)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import type { RouteContext } from 'speedx/server/router'\n\nexport function ${functionName}(options?: Record<string, unknown>) {\n return async (ctx: RouteContext, next: () => Promise<void>) => {\n const start = Date.now()\n\n await next()\n\n const duration = Date.now() - start\n console.log(\\`[${className}Middleware] \\${ctx.request.method} \\${ctx.request.url} \\${duration}ms\\`)\n }\n}\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('βœ…')} Middleware ${colors.bold(functionName)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nexport function makeSchema(name: string): void {\n const schemaName = `${toPascalCase(name)}Schema`\n const typeName = toPascalCase(name)\n const fileName = `${toKebabCase(name)}.schema.ts`\n const targetDir = resolve(process.cwd(), 'src/schemas')\n const fullPath = resolve(targetDir, fileName)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import { s, type Infer } from 'speedx/schema'\n\nexport const ${schemaName} = s.object({\n id: s.string().uuid(),\n name: s.string().min(1).max(255),\n createdAt: s.string().datetime(),\n updatedAt: s.string().datetime().optional(),\n})\n\nexport type ${typeName} = Infer<typeof ${schemaName}>\n\nexport const create${typeName}Schema = s.object({\n name: s.string().min(1).max(255),\n})\n\nexport type Create${typeName} = Infer<typeof create${typeName}Schema>\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('βœ…')} Schema ${colors.bold(schemaName)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\ninterface RouteInfo {\n method: string\n path: string\n}\n\nfunction extractDecorators(content: string): RouteInfo[] {\n const pattern = /@(get|post|put|patch|del|delete)\\s*\\(\\s*'([^']+)'\\s*\\)/g\n const results: RouteInfo[] = []\n\n let match: RegExpExecArray | null = pattern.exec(content)\n while (match !== null) {\n const method =\n match[1] === 'del' ? 'DELETE' : (match[1] as string).toUpperCase()\n const path = match[2] as string\n results.push({ method, path })\n match = pattern.exec(content)\n }\n\n return results\n}\n\nexport function listRoutes(): void {\n const routesDir = resolve(process.cwd(), 'src/server/controllers')\n\n if (!existsSync(routesDir)) {\n console.log(\n ` ${colors.yellow('!')} Tidak ada route terdaftar. Buat controller dulu:`,\n )\n console.log(` ${colors.cyan('speedx make:controller <name>')}`)\n return\n }\n\n const files = readdirSync(routesDir).filter(f => f.endsWith('.ts'))\n\n if (files.length === 0) {\n console.log(\n ` ${colors.yellow('!')} Tidak ada route terdaftar. Buat controller dulu:`,\n )\n console.log(` ${colors.cyan('speedx make:controller <name>')}`)\n return\n }\n\n let total = 0\n\n console.log()\n console.log(` ${colors.bold('πŸ“‹ Daftar Route:')}`)\n console.log()\n\n for (const file of files) {\n const content = readFileSync(resolve(routesDir, file), 'utf-8')\n const routes = extractDecorators(content)\n\n if (routes.length > 0) {\n console.log(` ${colors.cyan('──')} ${colors.bold(file.replace('.controller.ts', ''))} ${colors.cyan('──')}`)\n\n for (const { method, path } of routes) {\n const coloredMethod = method === 'GET'\n ? colors.green(method.padEnd(8))\n : method === 'POST'\n ? colors.blue(method.padEnd(8))\n : method === 'PUT' || method === 'PATCH'\n ? colors.yellow(method.padEnd(8))\n : colors.red(method.padEnd(8))\n\n console.log(` ${coloredMethod} ${path}`)\n total++\n }\n\n console.log()\n }\n }\n\n console.log(` ${colors.dim(`${total} route${total !== 1 ? 's' : ''} ditemukan`)}`)\n console.log()\n}\n","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\nimport { logger } from '../../native/logger.js'\n\ninterface ServeOptions {\n port?: string | number\n host?: string\n dev?: string | boolean\n}\n\nexport async function serve(options: Record<string, any>): Promise<void> {\n const opts: ServeOptions = {\n port: options.port || options.p || 3000,\n host: options.host || options.H || 'localhost',\n dev: options.dev !== false,\n }\n\n const port = parseInt(String(opts.port), 10)\n const host = String(opts.host)\n\n const serverEntry = resolve(process.cwd(), 'src/app.ts')\n const serverEntryAlt = resolve(process.cwd(), 'src/server/index.ts')\n const serverEntryIndex = resolve(process.cwd(), 'src/index.ts')\n\n let entryPath: string | null = null\n if (existsSync(serverEntry)) entryPath = serverEntry\n else if (existsSync(serverEntryAlt)) entryPath = serverEntryAlt\n else if (existsSync(serverEntryIndex)) entryPath = serverEntryIndex\n\n if (!entryPath) {\n console.error(\n colors.red(\n 'Tidak ditemukan file entry point. Buat src/app.ts atau src/index.ts',\n ),\n )\n process.exit(1)\n }\n\n if (opts.dev) {\n logger.info(\n `Development server starting at ${colors.cyan(`http://${host}:${port}`)}`,\n )\n\n try {\n const { app } = await import(entryPath)\n\n if (!app || typeof app.listen !== 'function') {\n console.error(\n colors.red(\n 'Entry point harus export { app } dengan method .listen()',\n ),\n )\n process.exit(1)\n }\n\n app.listen(port, host, () => {\n console.log()\n console.log(` ${colors.bold('SpeedX')} ${colors.green('running')}`)\n console.log(` ${colors.dim('β†’')} ${colors.cyan(`http://${host}:${port}`)}`)\n console.log()\n })\n } catch (err: any) {\n console.error(colors.red(`Gagal menjalankan server: ${err.message}`))\n process.exit(1)\n }\n } else {\n try {\n const { app } = await import(entryPath)\n\n if (!app || typeof app.listen !== 'function') {\n console.error(\n colors.red(\n 'Entry point harus export { app } dengan method .listen()',\n ),\n )\n process.exit(1)\n }\n\n app.listen(port, host, () => {\n console.log()\n console.log(` ${colors.bold('SpeedX')} ${colors.green('running')}`)\n console.log(` ${colors.dim('β†’')} ${colors.cyan(`http://${host}:${port}`)}`)\n console.log()\n })\n } catch (err: any) {\n console.error(colors.red(`Gagal menjalankan server: ${err.message}`))\n process.exit(1)\n }\n }\n}\n","import { colors, isColorSupported } from './colors.js'\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\nexport interface LoggerOptions {\n level?: LogLevel\n name?: string\n colors?: boolean\n timestamps?: boolean\n timezone?: 'WIB' | 'WITA' | 'WIT' | 'UTC'\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n}\n\nconst TIMEZONE_OFFSETS: Record<string, number> = {\n WIB: 7,\n WITA: 8,\n WIT: 9,\n UTC: 0,\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nexport function formatTimestamp(tz?: string): string {\n const offset = TIMEZONE_OFFSETS[tz ?? ''] ?? 7\n const now = new Date()\n const utc = now.getTime() + now.getTimezoneOffset() * 60000\n const local = new Date(utc + offset * 3600000)\n\n const y = local.getFullYear()\n const M = pad(local.getMonth() + 1)\n const d = pad(local.getDate())\n const h = pad(local.getHours())\n const m = pad(local.getMinutes())\n const s = pad(local.getSeconds())\n\n return `${y}-${M}-${d} ${h}:${m}:${s} ${tz ?? 'WIB'}`\n}\n\nconst LEVEL_PREFIX: Record<LogLevel, string> = {\n debug: 'DEBUG',\n info: 'INFO',\n warn: 'WARN',\n error: 'ERROR',\n}\n\nconst LEVEL_COLOR: Record<LogLevel, (s: string) => string> = {\n debug: colors.gray,\n info: colors.cyan,\n warn: colors.yellow,\n error: colors.red,\n}\n\nexport class Logger {\n private _level: LogLevel\n private _name: string\n private _useColors: boolean\n private _useTimestamps: boolean\n private _timezone: string\n\n constructor(options?: LoggerOptions) {\n this._level = options?.level ?? 'info'\n this._name = options?.name ?? ''\n this._useColors = options?.colors ?? isColorSupported()\n this._useTimestamps = options?.timestamps ?? true\n this._timezone = options?.timezone ?? 'WIB'\n }\n\n private _format(level: LogLevel, msg: string, meta?: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (this._useTimestamps) {\n parts.push(formatTimestamp(this._timezone))\n }\n\n if (this._useColors) {\n parts.push(LEVEL_COLOR[level](LEVEL_PREFIX[level]))\n } else {\n parts.push(LEVEL_PREFIX[level])\n }\n\n if (this._name) {\n parts.push(this._useColors ? colors.dim(`[${this._name}]`) : `[${this._name}]`)\n }\n\n if (this._useColors) {\n parts.push(LEVEL_COLOR[level](msg))\n } else {\n parts.push(msg)\n }\n\n if (meta && Object.keys(meta).length > 0) {\n parts.push(JSON.stringify(meta))\n }\n\n return parts.join(' ')\n }\n\n debug(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.debug) return\n console.debug(this._format('debug', msg, meta))\n }\n\n info(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.info) return\n console.info(this._format('info', msg, meta))\n }\n\n warn(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.warn) return\n console.warn(this._format('warn', msg, meta))\n }\n\n error(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.error) return\n console.error(this._format('error', msg, meta))\n }\n\n child(name: string): Logger {\n const childName = this._name ? `${this._name}:${name}` : name\n return new Logger({\n level: this._level,\n name: childName,\n colors: this._useColors,\n timestamps: this._useTimestamps,\n timezone: this._timezone as LoggerOptions['timezone'],\n })\n }\n\n setLevel(level: LogLevel): void {\n this._level = level\n }\n}\n\nexport const logger = new Logger()\n","#!/usr/bin/env node\nimport { parseArgs } from '../native/args.js'\nimport { colors } from '../native/colors.js'\nimport { initProject } from './commands/init.js'\nimport { makeController } from './commands/make-controller.js'\nimport { makeMiddleware } from './commands/make-middleware.js'\nimport { makeSchema } from './commands/make-schema.js'\nimport { listRoutes } from './commands/list-routes.js'\nimport { serve } from './commands/serve.js'\n\nfunction showHelp(): void {\n console.log(`${colors.bold('SpeedX')} ${colors.cyan('v0.2.0')}`)\n console.log('Fullstack JavaScript/TypeScript Framework')\n console.log()\n console.log(`${colors.bold('Usage:')}`)\n console.log(' SpeedX init [name] [options] Buat project baru')\n console.log(' SpeedX make:controller <name> Generate controller')\n console.log(' SpeedX make:middleware <name> Generate middleware')\n console.log(' SpeedX make:schema <name> Generate schema')\n console.log(' SpeedX list-routes Lihat semua route')\n console.log(' SpeedX serve [options] Jalankan server')\n console.log(' SpeedX --help Bantuan ini')\n console.log()\n console.log(`${colors.bold('Aliases:')}`)\n console.log(' SpeedX -v, --version Lihat versi')\n console.log()\n console.log(`${colors.bold('Options:')}`)\n console.log(' --template <type> blank, fullstack, api-only')\n console.log(' --frontend <fe> super, react, vue')\n console.log(' --port <number> Port server (default: 3000)')\n console.log(' --host <string> Host address (default: localhost)')\n}\n\nasync function main(): Promise<void> {\n const parsed = parseArgs(process.argv)\n const command = parsed.command\n\n switch (command) {\n case 'init': {\n await initProject(parsed.args[0] || 'my-app', parsed.options)\n break\n }\n case 'make:controller': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama controller diperlukan'))\n console.log(` ${colors.cyan('SpeedX make:controller <name>')}`)\n process.exit(1)\n }\n await makeController(parsed.args[0])\n break\n }\n case 'make:middleware': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama middleware diperlukan'))\n console.log(` ${colors.cyan('SpeedX make:middleware <name>')}`)\n process.exit(1)\n }\n await makeMiddleware(parsed.args[0])\n break\n }\n case 'make:schema': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama schema diperlukan'))\n console.log(` ${colors.cyan('SpeedX make:schema <name>')}`)\n process.exit(1)\n }\n await makeSchema(parsed.args[0])\n break\n }\n case 'list-routes':\n case 'routes':\n case 'lr': {\n await listRoutes()\n break\n }\n case 'serve':\n case 'dev': {\n await serve(parsed.options)\n break\n }\n case 'help':\n case '--help':\n case '-h': {\n showHelp()\n break\n }\n case 'version':\n case '--version':\n case '-v': {\n console.log('SpeedX v0.2.0')\n break\n }\n default: {\n if (command) {\n console.error(`${colors.red(`Command '${command}' tidak dikenal`)}`)\n console.log()\n }\n showHelp()\n if (command) process.exit(1)\n }\n }\n}\n\nmain().catch(err => {\n console.error(colors.red(`Error: ${err.message}`))\n process.exit(1)\n})\n"],"mappings":"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","names":["existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","toKebabCase","toCamelCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","toKebabCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","resolve","resolve","existsSync","existsSync","resolve","resolve","existsSync"]}
1
+ {"version":3,"sources":["../../src/native/args.ts","../../src/native/colors.ts","../../src/cli/commands/init.ts","../../src/cli/commands/make-controller.ts","../../src/cli/commands/make-middleware.ts","../../src/cli/commands/make-schema.ts","../../src/cli/commands/list-routes.ts","../../src/cli/commands/serve.ts","../../src/native/logger.ts","../../src/cli/index.ts"],"sourcesContent":["export interface ParsedArgs {\n command: string\n subcommand?: string\n args: string[]\n options: Record<string, string | boolean | string[]>\n}\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n const args = argv.slice(2)\n const result: ParsedArgs = {\n command: '',\n args: [],\n options: {},\n }\n\n if (args.length === 0) return result\n\n const first = args[0]!\n\n if (first.includes(':')) {\n result.command = first\n parseOptions(args.slice(1), result)\n return result\n }\n\n result.command = first\n\n if (args.length > 1) {\n const second = args[1]!\n if (!second.startsWith('-')) {\n result.subcommand = second\n result.args.push(second)\n parseOptions(args.slice(2), result)\n return result\n }\n }\n\n parseOptions(args.slice(1), result)\n return result\n}\n\nfunction parseOptions(argv: string[], result: ParsedArgs): void {\n let i = 0\n while (i < argv.length) {\n const arg = argv[i]!\n\n if (arg === '--') {\n for (let j = i + 1; j < argv.length; j++) {\n result.args.push(argv[j]!)\n }\n break\n }\n\n if (arg.startsWith('--no-')) {\n const key = arg.slice(5)\n if (key) {\n result.options[key] = false\n }\n i++\n continue\n }\n\n if (arg.startsWith('--')) {\n const key = arg.slice(2)\n if (i + 1 < argv.length && !argv[i + 1]!.startsWith('-')) {\n const val = argv[i + 1]!\n const existing = result.options[key]\n if (existing !== undefined) {\n result.options[key] = Array.isArray(existing)\n ? ([...existing, val] as string[])\n : [existing as string, val]\n } else {\n result.options[key] = val\n }\n i += 2\n } else {\n result.options[key] = true\n i++\n }\n continue\n }\n\n if (arg.startsWith('-') && arg.length === 2) {\n const key = arg.slice(1)\n if (i + 1 < argv.length && !argv[i + 1]!.startsWith('-')) {\n const val = argv[i + 1]!\n result.options[key] = val\n i += 2\n } else {\n result.options[key] = true\n i++\n }\n continue\n }\n\n result.args.push(arg)\n i++\n }\n}\n\nexport function toCommandName(argv: string[]): string {\n const args = argv.slice(2)\n if (args.length === 0) return ''\n\n const first = args[0]!\n\n if (first.includes(':')) return first\n\n if (args.length > 1 && !args[1]!.startsWith('-')) {\n return `${first}:${args[1]}`\n }\n\n return first\n}\n","const RESET = '\\x1b[0m'\n\nconst codes: Record<string, string> = {\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n}\n\nexport const colors = {\n red: (s: string): string => `${codes.red}${s}${RESET}`,\n green: (s: string): string => `${codes.green}${s}${RESET}`,\n yellow: (s: string): string => `${codes.yellow}${s}${RESET}`,\n blue: (s: string): string => `${codes.blue}${s}${RESET}`,\n magenta: (s: string): string => `${codes.magenta}${s}${RESET}`,\n cyan: (s: string): string => `${codes.cyan}${s}${RESET}`,\n gray: (s: string): string => `${codes.gray}${s}${RESET}`,\n white: (s: string): string => `${codes.white}${s}${RESET}`,\n bold: (s: string): string => `${codes.bold}${s}${RESET}`,\n dim: (s: string): string => `${codes.dim}${s}${RESET}`,\n italic: (s: string): string => `${codes.italic}${s}${RESET}`,\n underline: (s: string): string => `${codes.underline}${s}${RESET}`,\n}\n\nexport function stripColors(s: string): string {\n const ansi = String.fromCharCode(27)\n const re = new RegExp(`${ansi}\\\\[\\\\d+m`, 'g')\n return s.replace(re, '')\n}\n\nexport function isColorSupported(): boolean {\n if (typeof process === 'undefined') return false\n if (process.env.NO_COLOR) return false\n if (process.env.FORCE_COLOR) return true\n if (!process.stdout) return false\n if (!process.stdout.isTTY) return false\n return true\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\ninterface TemplateContent {\n dirs: string[]\n files: Record<string, string | ((name: string) => string)>\n}\n\nconst TEMPLATES: Record<string, TemplateContent> = {\n blank: {\n dirs: ['src'],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeexJS serve',\n build: 'SpeexJS build',\n start: 'node dist/index.js',\n },\n dependencies: {\n SpeexJS: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/index.ts': `import { SpeexJS } from 'speexjs/server'\n\nconst app = SpeexJS()\n\nconst PORT = Number(process.env.PORT) || 3000\n\napp.get('/', async ({ response }) => {\n return response.html('<h1>SpeexJS πŸš€</h1>')\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeexJS running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/app.ts': `import { SpeexJS } from 'speexjs/server'\n\nexport function createApp() {\n const app = SpeexJS()\n return app\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n\n fullstack: {\n dirs: [\n 'src/server',\n 'src/server/controllers',\n 'src/server/middleware',\n 'src/client',\n 'src/client/components',\n 'src/client/pages',\n 'src/shared',\n 'public',\n ],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeexJS serve',\n build: 'tsc',\n start: 'node dist/server/index.js',\n },\n dependencies: {\n SpeexJS: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n jsx: 'react-jsx',\n jsxImportSource: '@SpeexJS/vdom',\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts', 'src/**/*.tsx'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/server/index.ts': `import { SpeexJS } from 'speexjs/server'\nimport { UserController } from './controllers/user.controller.js'\n\nconst PORT = Number(process.env.PORT) || 3000\n\nconst app = SpeexJS()\n\napp.controller(UserController)\n\napp.get('/', async ({ response }) => {\n return response.html(\\`\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>SpeexJS Fullstack</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/client/index.js\"></script>\n </body>\n </html>\n \\`)\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeexJS running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/server/controllers/user.controller.ts': `import { Controller, get, post } from 'speexjs/server'\n\nexport class UserController extends Controller {\n @get('/users')\n async index({ response }) {\n return response.json({ data: [] })\n }\n\n @post('/users')\n async store({ request, response }) {\n const body = await request.body()\n return response.json({ data: body }, 201)\n }\n}\n`,\n 'src/client/index.ts': `import { createApp } from './app.js'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n createApp().mount('#root')\n})\n`,\n 'src/client/app.ts': `export function createApp() {\n function mount(selector: string) {\n const root = document.querySelector(selector)\n if (!root) {\n console.error('Root element not found:', selector)\n return\n }\n root.innerHTML = \\`\n <div style=\"text-align:center;padding:2rem\">\n <h1>SpeexJS Fullstack</h1>\n <p>Welcome to SpeexJS!</p>\n </div>\n \\`\n }\n\n return { mount }\n}\n`,\n 'public/style.css': `* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: #0f172a;\n color: #e2e8f0;\n min-height: 100vh;\n}\n\n#root {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n}\n`,\n 'src/shared/types.ts': `export interface ApiResponse<T = unknown> {\n success: boolean\n data: T\n message?: string\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n\n 'api-only': {\n dirs: ['src', 'src/controllers', 'src/middleware'],\n files: {\n 'package.json': (name: string) =>\n JSON.stringify(\n {\n name,\n version: '0.1.0',\n type: 'module',\n private: true,\n scripts: {\n dev: 'SpeexJS serve',\n build: 'tsc',\n start: 'node dist/index.js',\n },\n dependencies: {\n SpeexJS: 'latest',\n },\n devDependencies: {\n '@types/node': '^26.0.1',\n typescript: '^5.7.0',\n },\n },\n null,\n 2,\n ),\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n declaration: true,\n sourceMap: true,\n esModuleInterop: true,\n isolatedModules: true,\n resolveJsonModule: true,\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n },\n null,\n 2,\n ),\n 'src/index.ts': `import { SpeexJS } from 'speexjs/server'\n\nconst PORT = Number(process.env.PORT) || 3000\n\nconst app = SpeexJS()\n\napp.get('/api/health', async ({ response }) => {\n return response.json({ status: 'ok', timestamp: new Date().toISOString() })\n})\n\napp.listen(PORT, () => {\n console.log(\\`SpeexJS API running on http://localhost:\\${PORT}\\`)\n})\n`,\n 'src/controllers/health.controller.ts': `import { Controller, get } from 'speexjs/server'\n\nexport class HealthController extends Controller {\n @get('/health')\n async check({ response }) {\n return response.json({\n status: 'ok',\n uptime: process.uptime(),\n })\n }\n}\n`,\n 'src/middleware/auth.ts': `import type { RouteContext } from 'speexjs/server/router'\n\nexport function auth() {\n return async (ctx: RouteContext, next: () => Promise<void>) => {\n const token = ctx.request.headers.get('authorization')\n\n if (!token) {\n ctx.response.status(401).json({\n error: 'Unauthorized',\n message: 'Missing authorization header',\n })\n return\n }\n\n await next()\n }\n}\n`,\n '.env.example': `PORT=3000\nNODE_ENV=development\n`,\n '.gitignore': `node_modules/\ndist/\n.env\n*.log\n`,\n },\n },\n}\n\nconst TEMPLATE_ALIASES: Record<string, string> = {\n api: 'api-only',\n full: 'fullstack',\n}\n\nfunction getTemplate(name: string): string {\n return TEMPLATE_ALIASES[name] ?? name\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nexport async function initProject(\n name: string,\n options: Record<string, any>,\n): Promise<void> {\n const targetDir = resolve(process.cwd(), name)\n\n if (existsSync(targetDir)) {\n console.error(colors.red(`Directory '${name}' sudah ada!`))\n process.exit(1)\n }\n\n const templateName = getTemplate(String(options.template || 'blank'))\n const template = TEMPLATES[templateName]\n\n if (!template) {\n console.error(\n colors.red(\n `Template '${options.template}' tidak dikenal. Gunakan: blank, fullstack, api-only`,\n ),\n )\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n for (const dir of template.dirs) {\n mkdirSync(resolve(targetDir, dir), { recursive: true })\n }\n\n for (const [filePath, content] of Object.entries(template.files)) {\n const fullPath = resolve(targetDir, filePath)\n mkdirSync(dirname(fullPath), { recursive: true })\n\n const resolvedContent =\n typeof content === 'function' ? content(name) : content\n\n writeFileSync(fullPath, resolvedContent, 'utf-8')\n }\n\n if (options.git !== false) {\n try {\n const { execSync } = await import('child_process')\n execSync('git init', { cwd: targetDir, stdio: 'ignore' })\n } catch {\n // git not available\n }\n }\n\n if (options.install !== false) {\n const pm = String(options['package-manager'] || options.packageManager || 'npm')\n try {\n const { execSync } = await import('child_process')\n console.log(` ${colors.cyan('β†’')} Installing dependencies with ${pm}...`)\n execSync(`${pm} install`, { cwd: targetDir, stdio: 'inherit' })\n } catch {\n console.log(\n ` ${colors.yellow('!')} Dependency install skipped. Run '${pm} install' manually.`,\n )\n }\n }\n\n const packageManager = String(options['package-manager'] || options.packageManager || 'npm')\n\n console.log()\n console.log(`${colors.bold('╔════════════════════════════════════╗')}`)\n console.log(`${colors.bold('β•‘')} ${colors.green('SpeexJS πŸš€ Project Created')}${colors.bold(' β•‘')}`)\n console.log(`${colors.bold('β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•')}`)\n console.log()\n console.log(` ${colors.bold('Name:')} ${toPascalCase(name)}`)\n console.log(` ${colors.bold('Template:')} ${templateName}`)\n console.log(` ${colors.bold('Dir:')} ${targetDir}`)\n console.log()\n console.log(` ${colors.cyan('$')} cd ${name}`)\n console.log(` ${colors.cyan('$')} ${packageManager} run dev`)\n console.log()\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toLowerCase())\n}\n\nexport function makeController(name: string): void {\n const className = `${toPascalCase(name)}Controller`\n const fileName = `${toKebabCase(name)}.controller.ts`\n const targetDir = resolve(process.cwd(), 'src/server/controllers')\n const fullPath = resolve(targetDir, fileName)\n const varName = toCamelCase(name)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import { Controller, get, post, put, del } from 'speexjs/server'\nimport type { RouteContext } from 'speexjs/server/router'\n\nexport class ${className} extends Controller {\n @get('/')\n async index({ response }: RouteContext) {\n return response.json({ data: [] })\n }\n\n @get('/:id')\n async show({ response, params }: RouteContext) {\n return response.json({ data: { id: params.id } })\n }\n\n @post('/')\n async store({ request, response }: RouteContext) {\n const body = await request.body()\n return response.json({ data: body }, 201)\n }\n\n @put('/:id')\n async update({ request, response, params }: RouteContext) {\n const body = await request.body()\n return response.json({ data: { id: params.id, ...body } })\n }\n\n @del('/:id')\n async destroy({ response, params }: RouteContext) {\n return response.json({ message: \\`${className} deleted \\${params.id}\\` })\n }\n}\n\nexport const ${varName}Controller = ${className}\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('βœ…')} Controller ${colors.bold(className)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toLowerCase())\n}\n\nexport function makeMiddleware(name: string): void {\n const functionName = toCamelCase(name)\n const className = toPascalCase(name)\n const fileName = `${toKebabCase(name)}.middleware.ts`\n const targetDir = resolve(process.cwd(), 'src/server/middleware')\n const fullPath = resolve(targetDir, fileName)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import type { RouteContext } from 'speexjs/server/router'\n\nexport function ${functionName}(options?: Record<string, unknown>) {\n return async (ctx: RouteContext, next: () => Promise<void>) => {\n const start = Date.now()\n\n await next()\n\n const duration = Date.now() - start\n console.log(\\`[${className}Middleware] \\${ctx.request.method} \\${ctx.request.url} \\${duration}ms\\`)\n }\n}\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('βœ…')} Middleware ${colors.bold(functionName)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c: string) => (c ?? '').toUpperCase())\n .replace(/^(.)/, (c: string) => c.toUpperCase())\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .toLowerCase()\n}\n\nexport function makeSchema(name: string): void {\n const schemaName = `${toPascalCase(name)}Schema`\n const typeName = toPascalCase(name)\n const fileName = `${toKebabCase(name)}.schema.ts`\n const targetDir = resolve(process.cwd(), 'src/schemas')\n const fullPath = resolve(targetDir, fileName)\n\n if (existsSync(fullPath)) {\n console.error(colors.red(`File ${fileName} sudah ada!`))\n process.exit(1)\n }\n\n mkdirSync(targetDir, { recursive: true })\n\n const content = `import { s, type Infer } from 'speexjs/schema'\n\nexport const ${schemaName} = s.object({\n id: s.string().uuid(),\n name: s.string().min(1).max(255),\n createdAt: s.string().datetime(),\n updatedAt: s.string().datetime().optional(),\n})\n\nexport type ${typeName} = Infer<typeof ${schemaName}>\n\nexport const create${typeName}Schema = s.object({\n name: s.string().min(1).max(255),\n})\n\nexport type Create${typeName} = Infer<typeof create${typeName}Schema>\n`\n\n writeFileSync(fullPath, content, 'utf-8')\n console.log(\n `${colors.green('βœ…')} Schema ${colors.bold(schemaName)} dibuat di ${colors.cyan(fileName)}`,\n )\n}\n","import { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\n\ninterface RouteInfo {\n method: string\n path: string\n}\n\nfunction extractDecorators(content: string): RouteInfo[] {\n const pattern = /@(get|post|put|patch|del|delete)\\s*\\(\\s*'([^']+)'\\s*\\)/g\n const results: RouteInfo[] = []\n\n let match: RegExpExecArray | null = pattern.exec(content)\n while (match !== null) {\n const method =\n match[1] === 'del' ? 'DELETE' : (match[1] as string).toUpperCase()\n const path = match[2] as string\n results.push({ method, path })\n match = pattern.exec(content)\n }\n\n return results\n}\n\nexport function listRoutes(): void {\n const routesDir = resolve(process.cwd(), 'src/server/controllers')\n\n if (!existsSync(routesDir)) {\n console.log(\n ` ${colors.yellow('!')} Tidak ada route terdaftar. Buat controller dulu:`,\n )\n console.log(` ${colors.cyan('speexjs make:controller <name>')}`)\n return\n }\n\n const files = readdirSync(routesDir).filter(f => f.endsWith('.ts'))\n\n if (files.length === 0) {\n console.log(\n ` ${colors.yellow('!')} Tidak ada route terdaftar. Buat controller dulu:`,\n )\n console.log(` ${colors.cyan('speexjs make:controller <name>')}`)\n return\n }\n\n let total = 0\n\n console.log()\n console.log(` ${colors.bold('πŸ“‹ Daftar Route:')}`)\n console.log()\n\n for (const file of files) {\n const content = readFileSync(resolve(routesDir, file), 'utf-8')\n const routes = extractDecorators(content)\n\n if (routes.length > 0) {\n console.log(` ${colors.cyan('──')} ${colors.bold(file.replace('.controller.ts', ''))} ${colors.cyan('──')}`)\n\n for (const { method, path } of routes) {\n const coloredMethod = method === 'GET'\n ? colors.green(method.padEnd(8))\n : method === 'POST'\n ? colors.blue(method.padEnd(8))\n : method === 'PUT' || method === 'PATCH'\n ? colors.yellow(method.padEnd(8))\n : colors.red(method.padEnd(8))\n\n console.log(` ${coloredMethod} ${path}`)\n total++\n }\n\n console.log()\n }\n }\n\n console.log(` ${colors.dim(`${total} route${total !== 1 ? 's' : ''} ditemukan`)}`)\n console.log()\n}\n","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { colors } from '../../native/colors.js'\nimport { logger } from '../../native/logger.js'\n\ninterface ServeOptions {\n port?: string | number\n host?: string\n dev?: string | boolean\n}\n\nexport async function serve(options: Record<string, any>): Promise<void> {\n const opts: ServeOptions = {\n port: options.port || options.p || 3000,\n host: options.host || options.H || 'localhost',\n dev: options.dev !== false,\n }\n\n const port = parseInt(String(opts.port), 10)\n const host = String(opts.host)\n\n const serverEntry = resolve(process.cwd(), 'src/app.ts')\n const serverEntryAlt = resolve(process.cwd(), 'src/server/index.ts')\n const serverEntryIndex = resolve(process.cwd(), 'src/index.ts')\n\n let entryPath: string | null = null\n if (existsSync(serverEntry)) entryPath = serverEntry\n else if (existsSync(serverEntryAlt)) entryPath = serverEntryAlt\n else if (existsSync(serverEntryIndex)) entryPath = serverEntryIndex\n\n if (!entryPath) {\n console.error(\n colors.red(\n 'Tidak ditemukan file entry point. Buat src/app.ts atau src/index.ts',\n ),\n )\n process.exit(1)\n }\n\n if (opts.dev) {\n logger.info(\n `Development server starting at ${colors.cyan(`http://${host}:${port}`)}`,\n )\n\n try {\n const { app } = await import(entryPath)\n\n if (!app || typeof app.listen !== 'function') {\n console.error(\n colors.red(\n 'Entry point harus export { app } dengan method .listen()',\n ),\n )\n process.exit(1)\n }\n\n app.listen(port, host, () => {\n console.log()\n console.log(` ${colors.bold('SpeexJS')} ${colors.green('running')}`)\n console.log(` ${colors.dim('β†’')} ${colors.cyan(`http://${host}:${port}`)}`)\n console.log()\n })\n } catch (err: any) {\n console.error(colors.red(`Gagal menjalankan server: ${err.message}`))\n process.exit(1)\n }\n } else {\n try {\n const { app } = await import(entryPath)\n\n if (!app || typeof app.listen !== 'function') {\n console.error(\n colors.red(\n 'Entry point harus export { app } dengan method .listen()',\n ),\n )\n process.exit(1)\n }\n\n app.listen(port, host, () => {\n console.log()\n console.log(` ${colors.bold('SpeexJS')} ${colors.green('running')}`)\n console.log(` ${colors.dim('β†’')} ${colors.cyan(`http://${host}:${port}`)}`)\n console.log()\n })\n } catch (err: any) {\n console.error(colors.red(`Gagal menjalankan server: ${err.message}`))\n process.exit(1)\n }\n }\n}\n","import { colors, isColorSupported } from './colors.js'\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\nexport interface LoggerOptions {\n level?: LogLevel\n name?: string\n colors?: boolean\n timestamps?: boolean\n timezone?: 'WIB' | 'WITA' | 'WIT' | 'UTC'\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n}\n\nconst TIMEZONE_OFFSETS: Record<string, number> = {\n WIB: 7,\n WITA: 8,\n WIT: 9,\n UTC: 0,\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nexport function formatTimestamp(tz?: string): string {\n const offset = TIMEZONE_OFFSETS[tz ?? ''] ?? 7\n const now = new Date()\n const utc = now.getTime() + now.getTimezoneOffset() * 60000\n const local = new Date(utc + offset * 3600000)\n\n const y = local.getFullYear()\n const M = pad(local.getMonth() + 1)\n const d = pad(local.getDate())\n const h = pad(local.getHours())\n const m = pad(local.getMinutes())\n const s = pad(local.getSeconds())\n\n return `${y}-${M}-${d} ${h}:${m}:${s} ${tz ?? 'WIB'}`\n}\n\nconst LEVEL_PREFIX: Record<LogLevel, string> = {\n debug: 'DEBUG',\n info: 'INFO',\n warn: 'WARN',\n error: 'ERROR',\n}\n\nconst LEVEL_COLOR: Record<LogLevel, (s: string) => string> = {\n debug: colors.gray,\n info: colors.cyan,\n warn: colors.yellow,\n error: colors.red,\n}\n\nexport class Logger {\n private _level: LogLevel\n private _name: string\n private _useColors: boolean\n private _useTimestamps: boolean\n private _timezone: string\n\n constructor(options?: LoggerOptions) {\n this._level = options?.level ?? 'info'\n this._name = options?.name ?? ''\n this._useColors = options?.colors ?? isColorSupported()\n this._useTimestamps = options?.timestamps ?? true\n this._timezone = options?.timezone ?? 'WIB'\n }\n\n private _format(level: LogLevel, msg: string, meta?: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (this._useTimestamps) {\n parts.push(formatTimestamp(this._timezone))\n }\n\n if (this._useColors) {\n parts.push(LEVEL_COLOR[level](LEVEL_PREFIX[level]))\n } else {\n parts.push(LEVEL_PREFIX[level])\n }\n\n if (this._name) {\n parts.push(this._useColors ? colors.dim(`[${this._name}]`) : `[${this._name}]`)\n }\n\n if (this._useColors) {\n parts.push(LEVEL_COLOR[level](msg))\n } else {\n parts.push(msg)\n }\n\n if (meta && Object.keys(meta).length > 0) {\n parts.push(JSON.stringify(meta))\n }\n\n return parts.join(' ')\n }\n\n debug(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.debug) return\n console.debug(this._format('debug', msg, meta))\n }\n\n info(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.info) return\n console.info(this._format('info', msg, meta))\n }\n\n warn(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.warn) return\n console.warn(this._format('warn', msg, meta))\n }\n\n error(msg: string, meta?: Record<string, unknown>): void {\n if (LOG_LEVELS[this._level] > LOG_LEVELS.error) return\n console.error(this._format('error', msg, meta))\n }\n\n child(name: string): Logger {\n const childName = this._name ? `${this._name}:${name}` : name\n return new Logger({\n level: this._level,\n name: childName,\n colors: this._useColors,\n timestamps: this._useTimestamps,\n timezone: this._timezone as LoggerOptions['timezone'],\n })\n }\n\n setLevel(level: LogLevel): void {\n this._level = level\n }\n}\n\nexport const logger = new Logger()\n","#!/usr/bin/env node\nimport { parseArgs } from '../native/args.js'\nimport { colors } from '../native/colors.js'\nimport { initProject } from './commands/init.js'\nimport { makeController } from './commands/make-controller.js'\nimport { makeMiddleware } from './commands/make-middleware.js'\nimport { makeSchema } from './commands/make-schema.js'\nimport { listRoutes } from './commands/list-routes.js'\nimport { serve } from './commands/serve.js'\n\nfunction showHelp(): void {\n console.log(`${colors.bold('SpeexJS')} ${colors.cyan('v0.2.0')}`)\n console.log('Fullstack JavaScript/TypeScript Framework')\n console.log()\n console.log(`${colors.bold('Usage:')}`)\n console.log(' SpeexJS init [name] [options] Buat project baru')\n console.log(' SpeexJS make:controller <name> Generate controller')\n console.log(' SpeexJS make:middleware <name> Generate middleware')\n console.log(' SpeexJS make:schema <name> Generate schema')\n console.log(' SpeexJS list-routes Lihat semua route')\n console.log(' SpeexJS serve [options] Jalankan server')\n console.log(' SpeexJS --help Bantuan ini')\n console.log()\n console.log(`${colors.bold('Aliases:')}`)\n console.log(' SpeexJS -v, --version Lihat versi')\n console.log()\n console.log(`${colors.bold('Options:')}`)\n console.log(' --template <type> blank, fullstack, api-only')\n console.log(' --frontend <fe> super, react, vue')\n console.log(' --port <number> Port server (default: 3000)')\n console.log(' --host <string> Host address (default: localhost)')\n}\n\nasync function main(): Promise<void> {\n const parsed = parseArgs(process.argv)\n const command = parsed.command\n\n switch (command) {\n case 'init': {\n await initProject(parsed.args[0] || 'my-app', parsed.options)\n break\n }\n case 'make:controller': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama controller diperlukan'))\n console.log(` ${colors.cyan('SpeexJS make:controller <name>')}`)\n process.exit(1)\n }\n await makeController(parsed.args[0])\n break\n }\n case 'make:middleware': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama middleware diperlukan'))\n console.log(` ${colors.cyan('SpeexJS make:middleware <name>')}`)\n process.exit(1)\n }\n await makeMiddleware(parsed.args[0])\n break\n }\n case 'make:schema': {\n if (!parsed.args[0]) {\n console.error(colors.red('Nama schema diperlukan'))\n console.log(` ${colors.cyan('SpeexJS make:schema <name>')}`)\n process.exit(1)\n }\n await makeSchema(parsed.args[0])\n break\n }\n case 'list-routes':\n case 'routes':\n case 'lr': {\n await listRoutes()\n break\n }\n case 'serve':\n case 'dev': {\n await serve(parsed.options)\n break\n }\n case 'help':\n case '--help':\n case '-h': {\n showHelp()\n break\n }\n case 'version':\n case '--version':\n case '-v': {\n console.log('SpeexJS v0.2.0')\n break\n }\n default: {\n if (command) {\n console.error(`${colors.red(`Command '${command}' tidak dikenal`)}`)\n console.log()\n }\n showHelp()\n if (command) process.exit(1)\n }\n }\n}\n\nmain().catch(err => {\n console.error(colors.red(`Error: ${err.message}`))\n process.exit(1)\n})\n"],"mappings":"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","names":["existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","toKebabCase","toCamelCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","mkdirSync","writeFileSync","resolve","toPascalCase","toKebabCase","resolve","existsSync","mkdirSync","writeFileSync","existsSync","resolve","resolve","existsSync","existsSync","resolve","resolve","existsSync"]}
@@ -713,7 +713,7 @@ var ServerRenderer = class {
713
713
  }
714
714
  };
715
715
  function generateHydrationScript() {
716
- return '<script>(function(){var d=document.createElement("div");d.setAttribute("data-speedx-hydrated","");document.body.appendChild(d)})();</script>';
716
+ return '<script>(function(){var d=document.createElement("div");d.setAttribute("data-speexjs-hydrated","");document.body.appendChild(d)})();</script>';
717
717
  }
718
718
 
719
719
  // src/client/adapters/index.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/signals/index.ts","../../src/client/vdom/index.ts","../../src/client/vdom/jsx.ts","../../src/client/render/index.ts","../../src/client/adapters/index.ts","../../src/client/router.ts"],"sourcesContent":["ο»Ώlet activeTracker: (() => void) | null = null\nlet activeSources: Set<Subscribable> | null = null\nlet batchDepth = 0\nconst pendingUpdates = new Set<() => void>()\n\ninterface Subscribable {\n _subs: Set<() => void>\n}\n\nfunction flushPending(): void {\n const fns = [...pendingUpdates]\n pendingUpdates.clear()\n for (const fn of fns) fn()\n}\n\nfunction trackSource(node: Subscribable): void {\n if (activeSources) activeSources.add(node)\n if (activeTracker) node._subs.add(activeTracker)\n}\n\nexport class Signal<T> {\n readonly _tag = 'signal' as const\n _subs = new Set<() => void>()\n private _value: T\n\n constructor(value: T) {\n this._value = value\n }\n\n get value(): T {\n trackSource(this)\n return this._value\n }\n\n set value(val: T) {\n if (val !== this._value) {\n this._value = val\n this._notify()\n }\n }\n\n peek(): T {\n return this._value\n }\n\n set(v: T): void {\n this.value = v\n }\n\n update(fn: (v: T) => T): void {\n this.value = fn(this._value)\n }\n\n subscribe(fn: (val: T) => void): () => void {\n const cb = () => fn(this._value)\n this._subs.add(cb)\n return () => this._subs.delete(cb)\n }\n\n toJSON(): T {\n return this._value\n }\n\n toString(): string {\n return String(this._value)\n }\n\n valueOf(): T {\n return this._value\n }\n\n *[Symbol.iterator](): Iterator<T> {\n yield this._value\n }\n\n private _notify(): void {\n if (batchDepth > 0) {\n for (const s of this._subs) pendingUpdates.add(s)\n } else {\n const subs = [...this._subs]\n for (const s of subs) s()\n }\n }\n}\n\nexport class Computed<T> {\n readonly _tag = 'computed' as const\n _subs = new Set<() => void>()\n private _fn: () => T\n private _value!: T\n private _dirty = true\n private _sources = new Set<Subscribable>()\n\n private _onDepChange = (): void => {\n if (!this._dirty) {\n this._dirty = true\n for (const s of [...this._subs]) s()\n }\n }\n\n constructor(fn: () => T) {\n this._fn = fn\n }\n\n get value(): T {\n trackSource(this)\n if (this._dirty) this._eval()\n return this._value\n }\n\n peek(): T {\n if (this._dirty) this._eval()\n return this._value\n }\n\n subscribe(fn: (val: T) => void): () => void {\n this.value\n const cb = () => fn(this._value)\n this._subs.add(cb)\n return () => this._subs.delete(cb)\n }\n\n toJSON(): T {\n return this.value\n }\n\n toString(): string {\n return String(this.value)\n }\n\n valueOf(): T {\n return this.value\n }\n\n private _eval(): void {\n for (const src of this._sources) {\n src._subs.delete(this._onDepChange)\n }\n this._sources.clear()\n this._dirty = false\n\n const prevSources = activeSources\n const prevTracker = activeTracker\n activeSources = new Set()\n activeTracker = null\n try {\n this._value = this._fn()\n this._sources = activeSources\n } finally {\n activeSources = prevSources\n activeTracker = prevTracker\n }\n\n for (const src of this._sources) {\n src._subs.add(this._onDepChange)\n }\n }\n}\n\nexport class Effect {\n private _fn: () => void | (() => void)\n private _sources = new Set<Subscribable>()\n private _cleanup: (() => void) | undefined\n private _alive = true\n\n constructor(fn: () => void | (() => void)) {\n this._fn = fn\n this._run()\n }\n\n get alive(): boolean {\n return this._alive\n }\n\n stop(): void {\n if (!this._alive) return\n this._alive = false\n this._removeSubscriptions()\n if (this._cleanup) {\n this._cleanup()\n this._cleanup = undefined\n }\n }\n\n start(): void {\n if (this._alive) return\n this._alive = true\n this._run()\n }\n\n private _removeSubscriptions(): void {\n for (const src of this._sources) {\n src._subs.delete(this._run)\n }\n this._sources.clear()\n }\n\n private _run = (): void => {\n if (!this._alive) return\n this._removeSubscriptions()\n if (this._cleanup) {\n this._cleanup()\n this._cleanup = undefined\n }\n\n const prevTracker = activeTracker\n const prevSources = activeSources\n activeTracker = this._run\n activeSources = this._sources\n try {\n const result = this._fn()\n if (typeof result === 'function') {\n this._cleanup = result as () => void\n }\n } finally {\n activeTracker = prevTracker\n activeSources = prevSources\n }\n }\n}\n\nexport function signal<T>(initial: T): Signal<T> {\n return new Signal(initial)\n}\n\nexport function computed<T>(fn: () => T): Computed<T> {\n return new Computed(fn)\n}\n\nexport function effect(fn: () => void | (() => void)): Effect {\n return new Effect(fn)\n}\n\nexport function untracked<T>(fn: () => T): T {\n const prevTracker = activeTracker\n const prevSources = activeSources\n activeTracker = null\n activeSources = null\n try {\n return fn()\n } finally {\n activeTracker = prevTracker\n activeSources = prevSources\n }\n}\n\nexport function batch<T>(fn: () => T): T {\n batchDepth++\n try {\n return fn()\n } finally {\n batchDepth--\n if (batchDepth === 0) {\n flushPending()\n }\n }\n}\n\nexport function isSignal(val: unknown): val is Signal<unknown> {\n return val instanceof Signal\n}\n\nexport function isComputed(val: unknown): val is Computed<unknown> {\n return val instanceof Computed\n}\n\nexport function toSignal<T>(value: T | Signal<T>): Signal<T> {\n if (value instanceof Signal) return value\n return signal(value)\n}\n\nexport function mergeSignals<T extends Record<string, Signal<unknown>>>(signals: T): Signal<{ [K in keyof T]: T[K] extends Signal<infer V> ? V : never }> {\n return computed(() => {\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(signals)) {\n result[key] = (signals as Record<string, Signal<unknown>>)[key]!.value\n }\n return result as { [K in keyof T]: T[K] extends Signal<infer V> ? V : never }\n }) as unknown as Signal<{ [K in keyof T]: T[K] extends Signal<infer V> ? V : never }>\n}\n\nexport { type Subscribable }\r\n","ο»Ώimport { Signal, Computed } from '../signals/index.js'\r\nimport type { signal, computed, effect } from '../signals/index.js'\n\nexport type VNode = VElement | VText | VFragment | VComponent | VSignalNode\n\nexport interface VElement {\n type: 'element'\n tag: string\n props: Record<string, any>\n children: VNode[]\n key?: string\n}\n\nexport interface VText {\n type: 'text'\n text: string\n}\n\nexport interface VFragment {\n type: 'fragment'\n children: VNode[]\n}\n\nexport interface VComponent {\n type: 'component'\n component: Component\n props: Record<string, any>\n children?: VNode[]\n}\n\nexport interface VSignalNode {\n type: 'signal'\n signal: Signal<VNode>\n}\n\nexport interface Component {\n (props: Record<string, any>, context?: ComponentContext): VNode | Promise<VNode>\n}\n\nexport interface ComponentContext {\n signal: typeof signal\n computed: typeof computed\n effect: typeof effect\n props: Record<string, any>\n children?: VNode[]\n}\n\nconst VOID_ELEMENTS = new Set([\n 'area','base','br','col','embed','hr','img','input','link','meta',\n 'param','source','track','wbr',\n])\n\nconst SVG_ELEMENTS = new Set([\n 'svg','path','circle','rect','g','text','line','polyline','polygon',\n 'ellipse','use','defs','clipPath','mask','linearGradient','radialGradient',\n 'stop','tspan','textPath','image','foreignObject','marker','pattern',\n 'symbol','filter','feBlend','feColorMatrix','feComponentTransfer',\n 'feComposite','feDropShadow','feFlood','feGaussianBlur','feMerge',\n 'feOffset','feImage','feTile','feTurbulence',\n])\n\nfunction isSignal(val: unknown): val is Signal<any> {\n return val instanceof Signal\n}\n\nfunction isComputed(val: unknown): val is Computed<any> {\n return val instanceof Computed\n}\n\nexport function normalizeChild(child: any): VNode | null {\n if (child == null || typeof child === 'boolean') return null\n if (isSignal(child) || isComputed(child)) {\n return { type: 'signal', signal: child as unknown as Signal<VNode> }\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return { type: 'text', text: String(child) }\n }\n if (Array.isArray(child)) {\n const children = child.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[]\r\n if (children.length === 0) return null\r\n if (children.length === 1) return children[0] as VNode\n return { type: 'fragment', children }\n }\n if (typeof child === 'object' && child !== null && 'type' in child) {\n return child as VNode\n }\n if (typeof child === 'function') {\n return { type: 'component', component: child as Component, props: {} }\n }\n return { type: 'text', text: String(child) }\n}\n\nexport function h(tag: string | Component, props?: any, ...children: any[]): VNode {\n if (typeof tag === 'function') {\n const c = children.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[]\n return {\n type: 'component',\n component: tag as Component,\n props: { ...(props || {}), children: c.length > 0 ? c : undefined },\n }\n }\n return {\n type: 'element',\n tag,\n props: props || {},\n children: children.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[],\n key: props?.key,\n }\n}\n\nexport function fragment(...children: any[]): VNode {\n const flat = children.flat(Infinity)\n const normalized = flat.map(normalizeChild).filter(Boolean) as VNode[]\n if (normalized.length === 0) return { type: 'text', text: '' }\n if (normalized.length === 1) return normalized[0]!\n return { type: 'fragment', children: normalized }\n}\n\nexport function text(content: string): VText {\n return { type: 'text', text: content }\n}\n\nexport function createComponent(type: Component, props?: any, ...children: any[]): VComponent {\n const c = children.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[]\n return {\n type: 'component',\n component: type,\n props: { ...(props || {}), children: c.length > 0 ? c : undefined },\n }\n}\n\nfunction setProp(el: Element, key: string, value: any, oldValue?: any): void {\r\n if (key === 'key' || key === 'children' || key === 'ref') return\r\n if (isComputed(value)) {\r\n setProp(el, key, value.peek(), oldValue)\r\n value.subscribe((v: any) => setProp(el, key, v))\r\n return\r\n }\r\n if (key.startsWith('on') && typeof value === 'function') {\n const event = key.slice(2).toLowerCase()\n if (oldValue) el.removeEventListener(event, oldValue)\n el.addEventListener(event, value)\n return\n }\n if (key === 'style') {\n if (typeof value === 'string') {\n el.setAttribute('style', value)\n } else if (typeof value === 'object' && value !== null) {\n Object.assign((el as HTMLElement).style, value)\n }\n return\n }\n if (key === 'class' || key === 'className') {\n if (typeof value === 'string') {\n el.setAttribute('class', value)\n } else if (Array.isArray(value)) {\n el.setAttribute('class', value.filter(Boolean).join(' '))\n }\n return\n }\n if (key === 'dangerouslySetInnerHTML' && typeof value === 'object' && value?.__html) {\n el.innerHTML = value.__html\n return\n }\n if (key === 'value' || key === 'checked' || key === 'disabled' || key === 'selected') {\n (el as any)[key] = value\n return\n }\n if (key === 'htmlFor') {\n el.setAttribute('for', value)\n return\n }\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (value === true) {\n el.setAttribute(key, '')\n } else {\n el.setAttribute(key, String(value))\n }\n}\n\nfunction removeProp(el: Element, key: string, value: any): void {\n if (key === 'key' || key === 'children' || key === 'ref') return\n if (key.startsWith('on') && typeof value === 'function') {\n el.removeEventListener(key.slice(2).toLowerCase(), value)\n return\n }\n if (key === 'style') { el.removeAttribute('style'); return }\n if (key === 'class' || key === 'className') { el.removeAttribute('class'); return }\n if (key === 'value' || key === 'checked' || key === 'disabled') { delete (el as any)[key]; return }\n el.removeAttribute(key)\n}\n\nfunction createDOM(vnode: VNode): Node {\n switch (vnode.type) {\n case 'element': {\n const isSVG = SVG_ELEMENTS.has(vnode.tag)\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', vnode.tag)\n : document.createElement(vnode.tag)\n for (const [key, value] of Object.entries(vnode.props)) {\n if (key !== 'key') setProp(el, key, value)\n }\n for (const child of vnode.children) {\n el.appendChild(createDOM(child))\n }\n return el\n }\n case 'text':\n return document.createTextNode(vnode.text)\n case 'fragment': {\n const frag = document.createDocumentFragment()\n for (const child of vnode.children) frag.appendChild(createDOM(child))\n return frag\n }\n case 'component': {\n const result = vnode.component(vnode.props)\n if (result instanceof Promise) {\n const placeholder = document.createComment(' async ')\n result.then((resolved) => {\n const node = createDOM(resolved)\n placeholder.parentNode?.replaceChild(node, placeholder)\n })\n return placeholder\n }\n return createDOM(result)\n }\n case 'signal': {\n const val = vnode.signal.value\n const v = normalizeChild(val)\n const node = createDOM(v ?? text(''))\n vnode.signal.subscribe((newVal: any) => {\n const newV = normalizeChild(newVal)\n if (newV && node.parentNode) {\n const newNode = createDOM(newV)\n node.parentNode.replaceChild(newNode, node)\n }\n })\n return node\n }\n }\n}\n\nexport function render(vnode: VNode, container: HTMLElement): void {\n container.innerHTML = ''\n container.appendChild(createDOM(vnode))\n}\n\nfunction isSameVNodeType(a: VNode, b: VNode): boolean {\n if (a.type !== b.type) return false\n if (a.type === 'element' && b.type === 'element') {\n return a.tag === b.tag && a.key === b.key\n }\n return true\n}\n\nfunction patchProps(el: Element, oldProps: Record<string, any>, newProps: Record<string, any>): void {\n const allKeys = new Set([...Object.keys(oldProps), ...Object.keys(newProps)])\n for (const key of allKeys) {\n if (key === 'key' || key === 'children') continue\n const oldVal = oldProps[key]\n const newVal = newProps[key]\n if (oldVal === newVal) continue\n if (newVal === undefined || newVal === null) {\n removeProp(el, key, oldVal)\n } else {\n setProp(el, key, newVal, oldVal)\n }\n }\n}\n\nfunction patchChildren(parent: Node, oldChildren: VNode[], newChildren: VNode[]): void {\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n const existingNode = parent.childNodes[i]\n if (!oldChild && newChild) {\n parent.appendChild(createDOM(newChild))\n } else if (oldChild && !newChild) {\n if (existingNode) parent.removeChild(existingNode)\n } else if (oldChild && newChild) {\r\n if (isSameVNodeType(oldChild, newChild)) {\r\n patchVNode(existingNode ?? null, oldChild, newChild)\r\n } else {\r\n const newNode = createDOM(newChild)\r\n parent.replaceChild(newNode, existingNode!)\n }\r\n }\r\n }\r\n}\r\n\r\nfunction patchVNode(dom: Node | null, oldVNode: VNode, newVNode: VNode): void {\n if (!dom) return\n if (oldVNode.type === 'element' && newVNode.type === 'element') {\n patchProps(dom as HTMLElement, oldVNode.props, newVNode.props)\n patchChildren(dom, oldVNode.children, newVNode.children)\n } else if (oldVNode.type === 'text' && newVNode.type === 'text') {\n if (oldVNode.text !== newVNode.text) {\n (dom as Text).textContent = newVNode.text\n }\n } else if (oldVNode.type === 'fragment' && newVNode.type === 'fragment') {\n patchChildren(dom.parentNode || dom, oldVNode.children, newVNode.children)\n }\n}\n\nexport function patch(dom: HTMLElement, oldVNode: VNode, newVNode: VNode): void {\n if (isSameVNodeType(oldVNode, newVNode)) {\n patchVNode(dom, oldVNode, newVNode)\n } else {\n const parent = dom.parentNode\n if (parent) {\n parent.replaceChild(createDOM(newVNode), dom)\n }\n }\n}\n\nexport function hydrate(vnode: VNode, container: HTMLElement): void {\n function hydrateNode(vn: VNode, node: Node): void {\n if (vn.type === 'element') {\n const el = node as HTMLElement\n for (const [key, value] of Object.entries(vn.props)) {\n if (key.startsWith('on') && typeof value === 'function') {\n el.addEventListener(key.slice(2).toLowerCase(), value)\n }\n }\n for (let i = 0; i < Math.min(vn.children.length, el.childNodes.length); i++) {\n hydrateNode(vn.children[i]!, el.childNodes[i]!)\n }\n } else if (vn.type === 'component') {\n const result = vn.component(vn.props)\n if (!(result instanceof Promise)) hydrateNode(result, node)\n } else if (vn.type === 'signal') {\n vn.signal.subscribe((newVal: any) => {\n const newChild = normalizeChild(newVal)\n if (newChild && node.parentNode) {\n node.parentNode.replaceChild(createDOM(newChild), node)\n }\n })\n }\n }\n if (container.firstChild) {\n hydrateNode(vnode, container.firstChild)\n } else {\n render(vnode, container)\n }\n}\n\nconst ESCAPE_MAP: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;',\n}\n\nfunction escapeHtml(str: string): string {\n return str.replace(/[&<>\"']/g, (c) => ESCAPE_MAP[c] || c)\n}\n\nfunction renderProps(props: Record<string, any>): string {\n let out = ''\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || key === 'children' || key === 'ref') continue\n if (key.startsWith('on')) continue\n if (value === false || value === null || value === undefined) continue\n if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([k, v]) => `${k.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase())}:${v}`)\n .join(';')\n out += ' style=\"' + escapeHtml(styleStr) + '\"'\n continue\n }\n if (key === 'class' || key === 'className') {\n const cls = Array.isArray(value) ? value.filter(Boolean).join(' ') : value\n out += ' class=\"' + escapeHtml(String(cls)) + '\"'\n continue\n }\n if (key === 'htmlFor') { out += ' for=\"' + escapeHtml(String(value)) + '\"'; continue }\n if (value === true) { out += ' ' + key }\n else { out += ' ' + key + '=\"' + escapeHtml(String(value)) + '\"' }\n }\n return out\n}\n\nfunction renderVNodeToString(vnode: VNode): string {\n switch (vnode.type) {\n case 'element': {\n const children = vnode.children.map(renderVNodeToString).join('')\n if (VOID_ELEMENTS.has(vnode.tag)) return '<' + vnode.tag + renderProps(vnode.props) + '>'\n return '<' + vnode.tag + renderProps(vnode.props) + '>' + children + '</' + vnode.tag + '>'\n }\n case 'text': return escapeHtml(vnode.text)\n case 'fragment': return vnode.children.map(renderVNodeToString).join('')\n case 'component': {\n const result = vnode.component(vnode.props)\n if (result instanceof Promise) throw new Error('Async components must use renderToStream or ServerRenderer')\n return renderVNodeToString(result)\n }\n case 'signal': return renderVNodeToString(normalizeChild(vnode.signal.value) ?? text(''))\n }\n}\n\nexport function renderToString(vnode: VNode): string {\n return renderVNodeToString(vnode)\n}\n\nexport function renderToStream(vnode: VNode): ReadableStream<string> {\n return new ReadableStream({\n start(controller) {\n const html = renderToString(vnode)\n controller.enqueue(html)\n controller.close()\n },\n })\n}\r\n","ο»Ώimport type { VNode, VElement, VText, VFragment, VComponent, Component } from './index.js'\n\nconst emptyText = (): VText => ({ type: 'text' as const, text: '' })\n\nexport function createElement(tag: any, props: any, ...children: any[]): VNode {\n const { isSVG, ...rest } = props || {}\n if (typeof tag === 'function') {\n const childArr = children.flat(Infinity)\n const result: VComponent = {\n type: 'component' as const,\n component: tag as Component,\n props: { ...rest, children: childArr.length > 0 ? childArr : undefined },\n }\n return result\n }\n const childNodes: VNode[] = children.flat(Infinity).map((c: any): VNode => {\n if (c == null || typeof c === 'boolean') return emptyText()\n if (typeof c === 'object' && c !== null && 'type' in c) return c as VNode\n return { type: 'text' as const, text: String(c) }\n })\n const result: VElement = {\n type: 'element' as const,\n tag: tag as string,\n props: rest || {},\n children: childNodes,\n }\n return result\n}\n\nexport function Fragment(props: { children?: any }): VNode {\n const children = props?.children\n if (!children) return emptyText()\n const arr = Array.isArray(children) ? children : [children]\n const flat = arr.flat(Infinity).map((c: any): VNode => {\n if (c == null || typeof c === 'boolean') return emptyText()\n if (typeof c === 'object' && c !== null && 'type' in c) return c as VNode\n return { type: 'text' as const, text: String(c) }\n })\n if (flat.length === 1) return flat[0]!\n const result: VFragment = { type: 'fragment' as const, children: flat }\n return result\n}\n","ο»Ώimport type { VNode, Component } from '../vdom/index.js'\nimport { renderToString, renderToStream } from '../vdom/index.js'\n\nexport class ServerRenderer {\n render(component: Component, props?: any): Promise<string> {\n const vnode: VNode = {\n type: 'component',\n component,\n props: props || {},\n }\n return Promise.resolve(renderToString(vnode))\n }\n\n renderToStream(component: Component, props?: any): ReadableStream<string> {\n const vnode: VNode = {\n type: 'component',\n component,\n props: props || {},\n }\n return renderToStream(vnode)\n }\n\n renderStatic(component: Component, props?: any): string {\n const vnode: VNode = {\n type: 'component',\n component,\n props: props || {},\n }\n return renderToString(vnode)\n }\n\n async renderServerComponent(path: string, props?: any): Promise<string> {\r\n const mod = await import(path)\r\n const compKey = Object.keys(mod).find((k) => typeof mod[k] === 'function')\r\n if (!compKey) throw new Error(`No component export found in ${path}`)\r\n const component = mod[compKey] as Component\r\n const result = component(props || {})\r\n const resolved = result instanceof Promise ? await result : result\r\n return renderToString(resolved)\r\n }\n}\n\nexport function generateHydrationScript(): string {\n return '<script>(function(){var d=document.createElement(\"div\");d.setAttribute(\"data-speedx-hydrated\",\"\");document.body.appendChild(d)})();</script>'\n}\r\n","ο»Ώexport interface FrameworkAdapter {\n name: string\n render(component: any, container: HTMLElement): void\n hydrate(component: any, container: HTMLElement): void\n renderToString(component: any): string\n}\n\nexport function defineAdapter(adapter: FrameworkAdapter): FrameworkAdapter {\n return adapter\n}\r\n","ο»Ώimport { signal, computed, Signal } from './signals/index.js'\nimport type { VNode, Component } from './vdom/index.js'\n\nexport interface RouteDefinition {\n path: string\n component: Component\n layout?: Component\n loading?: Component\n error?: Component\n guards?: RouteGuard[]\n}\n\nexport type RouteGuard = (to: string, from: string) => boolean | Promise<boolean>\n\nexport interface RouterOptions {\n basePath?: string\n mode?: 'history' | 'hash'\n scrollRestoration?: boolean\n}\n\ninterface RouteMatch {\n path: string\n pattern: string\n component: Component\n layout?: Component\n loading?: Component\n error?: Component\n params: Record<string, string>\n query: Record<string, string>\n}\n\nfunction parseQuery(search: string): Record<string, string> {\n const params: Record<string, string> = {}\n const qs = search.startsWith('?') ? search.slice(1) : search\n if (!qs) return params\n for (const part of qs.split('&')) {\n const [key, val] = part.split('=')\n if (key) params[decodeURIComponent(key)] = val ? decodeURIComponent(val) : ''\n }\n return params\n}\n\nfunction matchPath(routePath: string, urlPath: string): Record<string, string> | null {\n const routeParts = routePath.split('/')\n const urlParts = urlPath.split('/')\n if (routeParts.length !== urlParts.length) return null\n const params: Record<string, string> = {}\n for (let i = 0; i < routeParts.length; i++) {\n const rp = routeParts[i]!\n const up = urlParts[i]!\n if (rp.startsWith(':')) {\n params[rp.slice(1)] = decodeURIComponent(up)\n } else if (rp !== up) {\n return null\n }\n }\n return params\n}\n\nexport class ClientRouter {\n private _current: Signal<RouteMatch | null>\n private _params: Signal<Record<string, string>>\n private _query: Signal<Record<string, string>>\n private _history: string[] = []\n private _historyIndex = -1\n private _routes: RouteDefinition[]\n private _options: Required<RouterOptions>\n\n constructor(routes: RouteDefinition[], options?: RouterOptions) {\n this._routes = routes\n this._options = {\n basePath: options?.basePath ?? '',\n mode: options?.mode ?? 'history',\n scrollRestoration: options?.scrollRestoration ?? true,\n }\n\n const initialMatch = this._resolveRoute(this._getCurrentPath())\n this._current = signal<RouteMatch | null>(initialMatch)\n this._params = signal<Record<string, string>>(initialMatch?.params ?? {})\n this._query = signal<Record<string, string>>(parseQuery(window.location.search))\n\n if (this._options.scrollRestoration) {\n history.scrollRestoration = 'auto'\n }\n\n window.addEventListener('popstate', () => {\n const path = this._getCurrentPath()\n const match = this._resolveRoute(path)\n this._current.value = match\n this._params.value = match?.params ?? {}\n this._query.value = parseQuery(window.location.search)\n })\n }\n\n get current(): Signal<RouteMatch | null> {\n return this._current\n }\n\n get params(): Signal<Record<string, string>> {\n return this._params\n }\n\n get query(): Signal<Record<string, string>> {\n return this._query\n }\n\n private _getCurrentPath(): string {\n if (this._options.mode === 'hash') {\n const hash = window.location.hash.slice(1) || '/'\n return hash\n }\n let path = window.location.pathname\n if (this._options.basePath && path.startsWith(this._options.basePath)) {\n path = path.slice(this._options.basePath.length) || '/'\n }\n return path\n }\n\n private _resolveRoute(path: string): RouteMatch | null {\n for (const route of this._routes) {\n const params = matchPath(route.path, path)\n if (params !== null) {\n return {\n path,\n pattern: route.path,\n component: route.component,\n layout: route.layout,\n loading: route.loading,\n error: route.error,\n params,\n query: parseQuery(window.location.search),\n }\n }\n }\n return null\n }\n\n async navigate(path: string): Promise<void> {\n const from = this._getCurrentPath()\n const to = path\n\n const route = this._routes.find((r) => matchPath(r.path, to) !== null)\n if (route?.guards) {\n for (const guard of route.guards) {\n const allowed = await guard(to, from)\n if (!allowed) throw new Error(`Navigation guard blocked: ${from} -> ${to}`)\n }\n }\n\n const resolvedPath = this._options.basePath\n ? this._options.basePath + to\n : to\n\n if (this._options.mode === 'hash') {\n window.location.hash = to\n } else {\n history.pushState(null, '', resolvedPath)\n }\n\n if (this._historyIndex < this._history.length - 1) {\n this._history = this._history.slice(0, this._historyIndex + 1)\n }\n this._history.push(to)\n this._historyIndex++\n\n const match = this._resolveRoute(to)\n this._current.value = match\n this._params.value = match?.params ?? {}\n this._query.value = parseQuery(window.location.search)\n }\n\n back(): void {\n if (this._historyIndex > 0) {\n this._historyIndex--\n const path = this._history[this._historyIndex]!\n if (this._options.mode === 'hash') {\n window.location.hash = path\n } else {\n history.back()\n }\n }\n }\n\n forward(): void {\n if (this._historyIndex < this._history.length - 1) {\n this._historyIndex++\n const path = this._history[this._historyIndex]!\n if (this._options.mode === 'hash') {\n window.location.hash = path\n } else {\n history.forward()\n }\n }\n }\n\n link(props: { to: string; children: any; class?: string; activeClass?: string; onClick?: (e: MouseEvent) => void }): VNode {\r\n const isActive = computed(() => {\r\n const current = this._current.value\r\n return current?.path === props.to\r\n })\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return\r\n e.preventDefault()\r\n props.onClick?.(e)\r\n this.navigate(props.to)\r\n }\r\n\r\n const { children, to, activeClass, ...rest } = props\r\n const cls = computed(() => {\r\n const base = rest.class || ''\r\n const active = activeClass && isActive.value ? ` ${activeClass}` : ''\r\n return `${base}${active}`\r\n })\r\n\r\n const childNodes = (Array.isArray(children) ? children : [children]).flat(Infinity).map((c: any) => {\r\n if (c == null || typeof c === 'boolean') return { type: 'text', text: '' } as VNode\r\n if (typeof c === 'object' && 'type' in c) return c as VNode\r\n return { type: 'text', text: String(c) } as VNode\r\n })\r\n\r\n return {\r\n type: 'element',\r\n tag: 'a',\r\n props: { href: this._options.basePath + to, onClick: handleClick, class: cls },\r\n children: childNodes,\r\n }\r\n }\n}\r\n\r\n"],"mappings":"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","names":["isSignal","isComputed","result"]}
1
+ {"version":3,"sources":["../../src/client/signals/index.ts","../../src/client/vdom/index.ts","../../src/client/vdom/jsx.ts","../../src/client/render/index.ts","../../src/client/adapters/index.ts","../../src/client/router.ts"],"sourcesContent":["ο»Ώlet activeTracker: (() => void) | null = null\nlet activeSources: Set<Subscribable> | null = null\nlet batchDepth = 0\nconst pendingUpdates = new Set<() => void>()\n\ninterface Subscribable {\n _subs: Set<() => void>\n}\n\nfunction flushPending(): void {\n const fns = [...pendingUpdates]\n pendingUpdates.clear()\n for (const fn of fns) fn()\n}\n\nfunction trackSource(node: Subscribable): void {\n if (activeSources) activeSources.add(node)\n if (activeTracker) node._subs.add(activeTracker)\n}\n\nexport class Signal<T> {\n readonly _tag = 'signal' as const\n _subs = new Set<() => void>()\n private _value: T\n\n constructor(value: T) {\n this._value = value\n }\n\n get value(): T {\n trackSource(this)\n return this._value\n }\n\n set value(val: T) {\n if (val !== this._value) {\n this._value = val\n this._notify()\n }\n }\n\n peek(): T {\n return this._value\n }\n\n set(v: T): void {\n this.value = v\n }\n\n update(fn: (v: T) => T): void {\n this.value = fn(this._value)\n }\n\n subscribe(fn: (val: T) => void): () => void {\n const cb = () => fn(this._value)\n this._subs.add(cb)\n return () => this._subs.delete(cb)\n }\n\n toJSON(): T {\n return this._value\n }\n\n toString(): string {\n return String(this._value)\n }\n\n valueOf(): T {\n return this._value\n }\n\n *[Symbol.iterator](): Iterator<T> {\n yield this._value\n }\n\n private _notify(): void {\n if (batchDepth > 0) {\n for (const s of this._subs) pendingUpdates.add(s)\n } else {\n const subs = [...this._subs]\n for (const s of subs) s()\n }\n }\n}\n\nexport class Computed<T> {\n readonly _tag = 'computed' as const\n _subs = new Set<() => void>()\n private _fn: () => T\n private _value!: T\n private _dirty = true\n private _sources = new Set<Subscribable>()\n\n private _onDepChange = (): void => {\n if (!this._dirty) {\n this._dirty = true\n for (const s of [...this._subs]) s()\n }\n }\n\n constructor(fn: () => T) {\n this._fn = fn\n }\n\n get value(): T {\n trackSource(this)\n if (this._dirty) this._eval()\n return this._value\n }\n\n peek(): T {\n if (this._dirty) this._eval()\n return this._value\n }\n\n subscribe(fn: (val: T) => void): () => void {\n this.value\n const cb = () => fn(this._value)\n this._subs.add(cb)\n return () => this._subs.delete(cb)\n }\n\n toJSON(): T {\n return this.value\n }\n\n toString(): string {\n return String(this.value)\n }\n\n valueOf(): T {\n return this.value\n }\n\n private _eval(): void {\n for (const src of this._sources) {\n src._subs.delete(this._onDepChange)\n }\n this._sources.clear()\n this._dirty = false\n\n const prevSources = activeSources\n const prevTracker = activeTracker\n activeSources = new Set()\n activeTracker = null\n try {\n this._value = this._fn()\n this._sources = activeSources\n } finally {\n activeSources = prevSources\n activeTracker = prevTracker\n }\n\n for (const src of this._sources) {\n src._subs.add(this._onDepChange)\n }\n }\n}\n\nexport class Effect {\n private _fn: () => void | (() => void)\n private _sources = new Set<Subscribable>()\n private _cleanup: (() => void) | undefined\n private _alive = true\n\n constructor(fn: () => void | (() => void)) {\n this._fn = fn\n this._run()\n }\n\n get alive(): boolean {\n return this._alive\n }\n\n stop(): void {\n if (!this._alive) return\n this._alive = false\n this._removeSubscriptions()\n if (this._cleanup) {\n this._cleanup()\n this._cleanup = undefined\n }\n }\n\n start(): void {\n if (this._alive) return\n this._alive = true\n this._run()\n }\n\n private _removeSubscriptions(): void {\n for (const src of this._sources) {\n src._subs.delete(this._run)\n }\n this._sources.clear()\n }\n\n private _run = (): void => {\n if (!this._alive) return\n this._removeSubscriptions()\n if (this._cleanup) {\n this._cleanup()\n this._cleanup = undefined\n }\n\n const prevTracker = activeTracker\n const prevSources = activeSources\n activeTracker = this._run\n activeSources = this._sources\n try {\n const result = this._fn()\n if (typeof result === 'function') {\n this._cleanup = result as () => void\n }\n } finally {\n activeTracker = prevTracker\n activeSources = prevSources\n }\n }\n}\n\nexport function signal<T>(initial: T): Signal<T> {\n return new Signal(initial)\n}\n\nexport function computed<T>(fn: () => T): Computed<T> {\n return new Computed(fn)\n}\n\nexport function effect(fn: () => void | (() => void)): Effect {\n return new Effect(fn)\n}\n\nexport function untracked<T>(fn: () => T): T {\n const prevTracker = activeTracker\n const prevSources = activeSources\n activeTracker = null\n activeSources = null\n try {\n return fn()\n } finally {\n activeTracker = prevTracker\n activeSources = prevSources\n }\n}\n\nexport function batch<T>(fn: () => T): T {\n batchDepth++\n try {\n return fn()\n } finally {\n batchDepth--\n if (batchDepth === 0) {\n flushPending()\n }\n }\n}\n\nexport function isSignal(val: unknown): val is Signal<unknown> {\n return val instanceof Signal\n}\n\nexport function isComputed(val: unknown): val is Computed<unknown> {\n return val instanceof Computed\n}\n\nexport function toSignal<T>(value: T | Signal<T>): Signal<T> {\n if (value instanceof Signal) return value\n return signal(value)\n}\n\nexport function mergeSignals<T extends Record<string, Signal<unknown>>>(signals: T): Signal<{ [K in keyof T]: T[K] extends Signal<infer V> ? V : never }> {\n return computed(() => {\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(signals)) {\n result[key] = (signals as Record<string, Signal<unknown>>)[key]!.value\n }\n return result as { [K in keyof T]: T[K] extends Signal<infer V> ? V : never }\n }) as unknown as Signal<{ [K in keyof T]: T[K] extends Signal<infer V> ? V : never }>\n}\n\nexport { type Subscribable }\r\n","ο»Ώimport { Signal, Computed } from '../signals/index.js'\r\nimport type { signal, computed, effect } from '../signals/index.js'\n\nexport type VNode = VElement | VText | VFragment | VComponent | VSignalNode\n\nexport interface VElement {\n type: 'element'\n tag: string\n props: Record<string, any>\n children: VNode[]\n key?: string\n}\n\nexport interface VText {\n type: 'text'\n text: string\n}\n\nexport interface VFragment {\n type: 'fragment'\n children: VNode[]\n}\n\nexport interface VComponent {\n type: 'component'\n component: Component\n props: Record<string, any>\n children?: VNode[]\n}\n\nexport interface VSignalNode {\n type: 'signal'\n signal: Signal<VNode>\n}\n\nexport interface Component {\n (props: Record<string, any>, context?: ComponentContext): VNode | Promise<VNode>\n}\n\nexport interface ComponentContext {\n signal: typeof signal\n computed: typeof computed\n effect: typeof effect\n props: Record<string, any>\n children?: VNode[]\n}\n\nconst VOID_ELEMENTS = new Set([\n 'area','base','br','col','embed','hr','img','input','link','meta',\n 'param','source','track','wbr',\n])\n\nconst SVG_ELEMENTS = new Set([\n 'svg','path','circle','rect','g','text','line','polyline','polygon',\n 'ellipse','use','defs','clipPath','mask','linearGradient','radialGradient',\n 'stop','tspan','textPath','image','foreignObject','marker','pattern',\n 'symbol','filter','feBlend','feColorMatrix','feComponentTransfer',\n 'feComposite','feDropShadow','feFlood','feGaussianBlur','feMerge',\n 'feOffset','feImage','feTile','feTurbulence',\n])\n\nfunction isSignal(val: unknown): val is Signal<any> {\n return val instanceof Signal\n}\n\nfunction isComputed(val: unknown): val is Computed<any> {\n return val instanceof Computed\n}\n\nexport function normalizeChild(child: any): VNode | null {\n if (child == null || typeof child === 'boolean') return null\n if (isSignal(child) || isComputed(child)) {\n return { type: 'signal', signal: child as unknown as Signal<VNode> }\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return { type: 'text', text: String(child) }\n }\n if (Array.isArray(child)) {\n const children = child.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[]\r\n if (children.length === 0) return null\r\n if (children.length === 1) return children[0] as VNode\n return { type: 'fragment', children }\n }\n if (typeof child === 'object' && child !== null && 'type' in child) {\n return child as VNode\n }\n if (typeof child === 'function') {\n return { type: 'component', component: child as Component, props: {} }\n }\n return { type: 'text', text: String(child) }\n}\n\nexport function h(tag: string | Component, props?: any, ...children: any[]): VNode {\n if (typeof tag === 'function') {\n const c = children.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[]\n return {\n type: 'component',\n component: tag as Component,\n props: { ...(props || {}), children: c.length > 0 ? c : undefined },\n }\n }\n return {\n type: 'element',\n tag,\n props: props || {},\n children: children.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[],\n key: props?.key,\n }\n}\n\nexport function fragment(...children: any[]): VNode {\n const flat = children.flat(Infinity)\n const normalized = flat.map(normalizeChild).filter(Boolean) as VNode[]\n if (normalized.length === 0) return { type: 'text', text: '' }\n if (normalized.length === 1) return normalized[0]!\n return { type: 'fragment', children: normalized }\n}\n\nexport function text(content: string): VText {\n return { type: 'text', text: content }\n}\n\nexport function createComponent(type: Component, props?: any, ...children: any[]): VComponent {\n const c = children.flat(Infinity).map(normalizeChild).filter(Boolean) as VNode[]\n return {\n type: 'component',\n component: type,\n props: { ...(props || {}), children: c.length > 0 ? c : undefined },\n }\n}\n\nfunction setProp(el: Element, key: string, value: any, oldValue?: any): void {\r\n if (key === 'key' || key === 'children' || key === 'ref') return\r\n if (isComputed(value)) {\r\n setProp(el, key, value.peek(), oldValue)\r\n value.subscribe((v: any) => setProp(el, key, v))\r\n return\r\n }\r\n if (key.startsWith('on') && typeof value === 'function') {\n const event = key.slice(2).toLowerCase()\n if (oldValue) el.removeEventListener(event, oldValue)\n el.addEventListener(event, value)\n return\n }\n if (key === 'style') {\n if (typeof value === 'string') {\n el.setAttribute('style', value)\n } else if (typeof value === 'object' && value !== null) {\n Object.assign((el as HTMLElement).style, value)\n }\n return\n }\n if (key === 'class' || key === 'className') {\n if (typeof value === 'string') {\n el.setAttribute('class', value)\n } else if (Array.isArray(value)) {\n el.setAttribute('class', value.filter(Boolean).join(' '))\n }\n return\n }\n if (key === 'dangerouslySetInnerHTML' && typeof value === 'object' && value?.__html) {\n el.innerHTML = value.__html\n return\n }\n if (key === 'value' || key === 'checked' || key === 'disabled' || key === 'selected') {\n (el as any)[key] = value\n return\n }\n if (key === 'htmlFor') {\n el.setAttribute('for', value)\n return\n }\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (value === true) {\n el.setAttribute(key, '')\n } else {\n el.setAttribute(key, String(value))\n }\n}\n\nfunction removeProp(el: Element, key: string, value: any): void {\n if (key === 'key' || key === 'children' || key === 'ref') return\n if (key.startsWith('on') && typeof value === 'function') {\n el.removeEventListener(key.slice(2).toLowerCase(), value)\n return\n }\n if (key === 'style') { el.removeAttribute('style'); return }\n if (key === 'class' || key === 'className') { el.removeAttribute('class'); return }\n if (key === 'value' || key === 'checked' || key === 'disabled') { delete (el as any)[key]; return }\n el.removeAttribute(key)\n}\n\nfunction createDOM(vnode: VNode): Node {\n switch (vnode.type) {\n case 'element': {\n const isSVG = SVG_ELEMENTS.has(vnode.tag)\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', vnode.tag)\n : document.createElement(vnode.tag)\n for (const [key, value] of Object.entries(vnode.props)) {\n if (key !== 'key') setProp(el, key, value)\n }\n for (const child of vnode.children) {\n el.appendChild(createDOM(child))\n }\n return el\n }\n case 'text':\n return document.createTextNode(vnode.text)\n case 'fragment': {\n const frag = document.createDocumentFragment()\n for (const child of vnode.children) frag.appendChild(createDOM(child))\n return frag\n }\n case 'component': {\n const result = vnode.component(vnode.props)\n if (result instanceof Promise) {\n const placeholder = document.createComment(' async ')\n result.then((resolved) => {\n const node = createDOM(resolved)\n placeholder.parentNode?.replaceChild(node, placeholder)\n })\n return placeholder\n }\n return createDOM(result)\n }\n case 'signal': {\n const val = vnode.signal.value\n const v = normalizeChild(val)\n const node = createDOM(v ?? text(''))\n vnode.signal.subscribe((newVal: any) => {\n const newV = normalizeChild(newVal)\n if (newV && node.parentNode) {\n const newNode = createDOM(newV)\n node.parentNode.replaceChild(newNode, node)\n }\n })\n return node\n }\n }\n}\n\nexport function render(vnode: VNode, container: HTMLElement): void {\n container.innerHTML = ''\n container.appendChild(createDOM(vnode))\n}\n\nfunction isSameVNodeType(a: VNode, b: VNode): boolean {\n if (a.type !== b.type) return false\n if (a.type === 'element' && b.type === 'element') {\n return a.tag === b.tag && a.key === b.key\n }\n return true\n}\n\nfunction patchProps(el: Element, oldProps: Record<string, any>, newProps: Record<string, any>): void {\n const allKeys = new Set([...Object.keys(oldProps), ...Object.keys(newProps)])\n for (const key of allKeys) {\n if (key === 'key' || key === 'children') continue\n const oldVal = oldProps[key]\n const newVal = newProps[key]\n if (oldVal === newVal) continue\n if (newVal === undefined || newVal === null) {\n removeProp(el, key, oldVal)\n } else {\n setProp(el, key, newVal, oldVal)\n }\n }\n}\n\nfunction patchChildren(parent: Node, oldChildren: VNode[], newChildren: VNode[]): void {\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n const existingNode = parent.childNodes[i]\n if (!oldChild && newChild) {\n parent.appendChild(createDOM(newChild))\n } else if (oldChild && !newChild) {\n if (existingNode) parent.removeChild(existingNode)\n } else if (oldChild && newChild) {\r\n if (isSameVNodeType(oldChild, newChild)) {\r\n patchVNode(existingNode ?? null, oldChild, newChild)\r\n } else {\r\n const newNode = createDOM(newChild)\r\n parent.replaceChild(newNode, existingNode!)\n }\r\n }\r\n }\r\n}\r\n\r\nfunction patchVNode(dom: Node | null, oldVNode: VNode, newVNode: VNode): void {\n if (!dom) return\n if (oldVNode.type === 'element' && newVNode.type === 'element') {\n patchProps(dom as HTMLElement, oldVNode.props, newVNode.props)\n patchChildren(dom, oldVNode.children, newVNode.children)\n } else if (oldVNode.type === 'text' && newVNode.type === 'text') {\n if (oldVNode.text !== newVNode.text) {\n (dom as Text).textContent = newVNode.text\n }\n } else if (oldVNode.type === 'fragment' && newVNode.type === 'fragment') {\n patchChildren(dom.parentNode || dom, oldVNode.children, newVNode.children)\n }\n}\n\nexport function patch(dom: HTMLElement, oldVNode: VNode, newVNode: VNode): void {\n if (isSameVNodeType(oldVNode, newVNode)) {\n patchVNode(dom, oldVNode, newVNode)\n } else {\n const parent = dom.parentNode\n if (parent) {\n parent.replaceChild(createDOM(newVNode), dom)\n }\n }\n}\n\nexport function hydrate(vnode: VNode, container: HTMLElement): void {\n function hydrateNode(vn: VNode, node: Node): void {\n if (vn.type === 'element') {\n const el = node as HTMLElement\n for (const [key, value] of Object.entries(vn.props)) {\n if (key.startsWith('on') && typeof value === 'function') {\n el.addEventListener(key.slice(2).toLowerCase(), value)\n }\n }\n for (let i = 0; i < Math.min(vn.children.length, el.childNodes.length); i++) {\n hydrateNode(vn.children[i]!, el.childNodes[i]!)\n }\n } else if (vn.type === 'component') {\n const result = vn.component(vn.props)\n if (!(result instanceof Promise)) hydrateNode(result, node)\n } else if (vn.type === 'signal') {\n vn.signal.subscribe((newVal: any) => {\n const newChild = normalizeChild(newVal)\n if (newChild && node.parentNode) {\n node.parentNode.replaceChild(createDOM(newChild), node)\n }\n })\n }\n }\n if (container.firstChild) {\n hydrateNode(vnode, container.firstChild)\n } else {\n render(vnode, container)\n }\n}\n\nconst ESCAPE_MAP: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;',\n}\n\nfunction escapeHtml(str: string): string {\n return str.replace(/[&<>\"']/g, (c) => ESCAPE_MAP[c] || c)\n}\n\nfunction renderProps(props: Record<string, any>): string {\n let out = ''\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || key === 'children' || key === 'ref') continue\n if (key.startsWith('on')) continue\n if (value === false || value === null || value === undefined) continue\n if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([k, v]) => `${k.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase())}:${v}`)\n .join(';')\n out += ' style=\"' + escapeHtml(styleStr) + '\"'\n continue\n }\n if (key === 'class' || key === 'className') {\n const cls = Array.isArray(value) ? value.filter(Boolean).join(' ') : value\n out += ' class=\"' + escapeHtml(String(cls)) + '\"'\n continue\n }\n if (key === 'htmlFor') { out += ' for=\"' + escapeHtml(String(value)) + '\"'; continue }\n if (value === true) { out += ' ' + key }\n else { out += ' ' + key + '=\"' + escapeHtml(String(value)) + '\"' }\n }\n return out\n}\n\nfunction renderVNodeToString(vnode: VNode): string {\n switch (vnode.type) {\n case 'element': {\n const children = vnode.children.map(renderVNodeToString).join('')\n if (VOID_ELEMENTS.has(vnode.tag)) return '<' + vnode.tag + renderProps(vnode.props) + '>'\n return '<' + vnode.tag + renderProps(vnode.props) + '>' + children + '</' + vnode.tag + '>'\n }\n case 'text': return escapeHtml(vnode.text)\n case 'fragment': return vnode.children.map(renderVNodeToString).join('')\n case 'component': {\n const result = vnode.component(vnode.props)\n if (result instanceof Promise) throw new Error('Async components must use renderToStream or ServerRenderer')\n return renderVNodeToString(result)\n }\n case 'signal': return renderVNodeToString(normalizeChild(vnode.signal.value) ?? text(''))\n }\n}\n\nexport function renderToString(vnode: VNode): string {\n return renderVNodeToString(vnode)\n}\n\nexport function renderToStream(vnode: VNode): ReadableStream<string> {\n return new ReadableStream({\n start(controller) {\n const html = renderToString(vnode)\n controller.enqueue(html)\n controller.close()\n },\n })\n}\r\n","ο»Ώimport type { VNode, VElement, VText, VFragment, VComponent, Component } from './index.js'\n\nconst emptyText = (): VText => ({ type: 'text' as const, text: '' })\n\nexport function createElement(tag: any, props: any, ...children: any[]): VNode {\n const { isSVG, ...rest } = props || {}\n if (typeof tag === 'function') {\n const childArr = children.flat(Infinity)\n const result: VComponent = {\n type: 'component' as const,\n component: tag as Component,\n props: { ...rest, children: childArr.length > 0 ? childArr : undefined },\n }\n return result\n }\n const childNodes: VNode[] = children.flat(Infinity).map((c: any): VNode => {\n if (c == null || typeof c === 'boolean') return emptyText()\n if (typeof c === 'object' && c !== null && 'type' in c) return c as VNode\n return { type: 'text' as const, text: String(c) }\n })\n const result: VElement = {\n type: 'element' as const,\n tag: tag as string,\n props: rest || {},\n children: childNodes,\n }\n return result\n}\n\nexport function Fragment(props: { children?: any }): VNode {\n const children = props?.children\n if (!children) return emptyText()\n const arr = Array.isArray(children) ? children : [children]\n const flat = arr.flat(Infinity).map((c: any): VNode => {\n if (c == null || typeof c === 'boolean') return emptyText()\n if (typeof c === 'object' && c !== null && 'type' in c) return c as VNode\n return { type: 'text' as const, text: String(c) }\n })\n if (flat.length === 1) return flat[0]!\n const result: VFragment = { type: 'fragment' as const, children: flat }\n return result\n}\n","ο»Ώimport type { VNode, Component } from '../vdom/index.js'\nimport { renderToString, renderToStream } from '../vdom/index.js'\n\nexport class ServerRenderer {\n render(component: Component, props?: any): Promise<string> {\n const vnode: VNode = {\n type: 'component',\n component,\n props: props || {},\n }\n return Promise.resolve(renderToString(vnode))\n }\n\n renderToStream(component: Component, props?: any): ReadableStream<string> {\n const vnode: VNode = {\n type: 'component',\n component,\n props: props || {},\n }\n return renderToStream(vnode)\n }\n\n renderStatic(component: Component, props?: any): string {\n const vnode: VNode = {\n type: 'component',\n component,\n props: props || {},\n }\n return renderToString(vnode)\n }\n\n async renderServerComponent(path: string, props?: any): Promise<string> {\r\n const mod = await import(path)\r\n const compKey = Object.keys(mod).find((k) => typeof mod[k] === 'function')\r\n if (!compKey) throw new Error(`No component export found in ${path}`)\r\n const component = mod[compKey] as Component\r\n const result = component(props || {})\r\n const resolved = result instanceof Promise ? await result : result\r\n return renderToString(resolved)\r\n }\n}\n\nexport function generateHydrationScript(): string {\n return '<script>(function(){var d=document.createElement(\"div\");d.setAttribute(\"data-speexjs-hydrated\",\"\");document.body.appendChild(d)})();</script>'\n}\r\n","ο»Ώexport interface FrameworkAdapter {\n name: string\n render(component: any, container: HTMLElement): void\n hydrate(component: any, container: HTMLElement): void\n renderToString(component: any): string\n}\n\nexport function defineAdapter(adapter: FrameworkAdapter): FrameworkAdapter {\n return adapter\n}\r\n","ο»Ώimport { signal, computed, Signal } from './signals/index.js'\nimport type { VNode, Component } from './vdom/index.js'\n\nexport interface RouteDefinition {\n path: string\n component: Component\n layout?: Component\n loading?: Component\n error?: Component\n guards?: RouteGuard[]\n}\n\nexport type RouteGuard = (to: string, from: string) => boolean | Promise<boolean>\n\nexport interface RouterOptions {\n basePath?: string\n mode?: 'history' | 'hash'\n scrollRestoration?: boolean\n}\n\ninterface RouteMatch {\n path: string\n pattern: string\n component: Component\n layout?: Component\n loading?: Component\n error?: Component\n params: Record<string, string>\n query: Record<string, string>\n}\n\nfunction parseQuery(search: string): Record<string, string> {\n const params: Record<string, string> = {}\n const qs = search.startsWith('?') ? search.slice(1) : search\n if (!qs) return params\n for (const part of qs.split('&')) {\n const [key, val] = part.split('=')\n if (key) params[decodeURIComponent(key)] = val ? decodeURIComponent(val) : ''\n }\n return params\n}\n\nfunction matchPath(routePath: string, urlPath: string): Record<string, string> | null {\n const routeParts = routePath.split('/')\n const urlParts = urlPath.split('/')\n if (routeParts.length !== urlParts.length) return null\n const params: Record<string, string> = {}\n for (let i = 0; i < routeParts.length; i++) {\n const rp = routeParts[i]!\n const up = urlParts[i]!\n if (rp.startsWith(':')) {\n params[rp.slice(1)] = decodeURIComponent(up)\n } else if (rp !== up) {\n return null\n }\n }\n return params\n}\n\nexport class ClientRouter {\n private _current: Signal<RouteMatch | null>\n private _params: Signal<Record<string, string>>\n private _query: Signal<Record<string, string>>\n private _history: string[] = []\n private _historyIndex = -1\n private _routes: RouteDefinition[]\n private _options: Required<RouterOptions>\n\n constructor(routes: RouteDefinition[], options?: RouterOptions) {\n this._routes = routes\n this._options = {\n basePath: options?.basePath ?? '',\n mode: options?.mode ?? 'history',\n scrollRestoration: options?.scrollRestoration ?? true,\n }\n\n const initialMatch = this._resolveRoute(this._getCurrentPath())\n this._current = signal<RouteMatch | null>(initialMatch)\n this._params = signal<Record<string, string>>(initialMatch?.params ?? {})\n this._query = signal<Record<string, string>>(parseQuery(window.location.search))\n\n if (this._options.scrollRestoration) {\n history.scrollRestoration = 'auto'\n }\n\n window.addEventListener('popstate', () => {\n const path = this._getCurrentPath()\n const match = this._resolveRoute(path)\n this._current.value = match\n this._params.value = match?.params ?? {}\n this._query.value = parseQuery(window.location.search)\n })\n }\n\n get current(): Signal<RouteMatch | null> {\n return this._current\n }\n\n get params(): Signal<Record<string, string>> {\n return this._params\n }\n\n get query(): Signal<Record<string, string>> {\n return this._query\n }\n\n private _getCurrentPath(): string {\n if (this._options.mode === 'hash') {\n const hash = window.location.hash.slice(1) || '/'\n return hash\n }\n let path = window.location.pathname\n if (this._options.basePath && path.startsWith(this._options.basePath)) {\n path = path.slice(this._options.basePath.length) || '/'\n }\n return path\n }\n\n private _resolveRoute(path: string): RouteMatch | null {\n for (const route of this._routes) {\n const params = matchPath(route.path, path)\n if (params !== null) {\n return {\n path,\n pattern: route.path,\n component: route.component,\n layout: route.layout,\n loading: route.loading,\n error: route.error,\n params,\n query: parseQuery(window.location.search),\n }\n }\n }\n return null\n }\n\n async navigate(path: string): Promise<void> {\n const from = this._getCurrentPath()\n const to = path\n\n const route = this._routes.find((r) => matchPath(r.path, to) !== null)\n if (route?.guards) {\n for (const guard of route.guards) {\n const allowed = await guard(to, from)\n if (!allowed) throw new Error(`Navigation guard blocked: ${from} -> ${to}`)\n }\n }\n\n const resolvedPath = this._options.basePath\n ? this._options.basePath + to\n : to\n\n if (this._options.mode === 'hash') {\n window.location.hash = to\n } else {\n history.pushState(null, '', resolvedPath)\n }\n\n if (this._historyIndex < this._history.length - 1) {\n this._history = this._history.slice(0, this._historyIndex + 1)\n }\n this._history.push(to)\n this._historyIndex++\n\n const match = this._resolveRoute(to)\n this._current.value = match\n this._params.value = match?.params ?? {}\n this._query.value = parseQuery(window.location.search)\n }\n\n back(): void {\n if (this._historyIndex > 0) {\n this._historyIndex--\n const path = this._history[this._historyIndex]!\n if (this._options.mode === 'hash') {\n window.location.hash = path\n } else {\n history.back()\n }\n }\n }\n\n forward(): void {\n if (this._historyIndex < this._history.length - 1) {\n this._historyIndex++\n const path = this._history[this._historyIndex]!\n if (this._options.mode === 'hash') {\n window.location.hash = path\n } else {\n history.forward()\n }\n }\n }\n\n link(props: { to: string; children: any; class?: string; activeClass?: string; onClick?: (e: MouseEvent) => void }): VNode {\r\n const isActive = computed(() => {\r\n const current = this._current.value\r\n return current?.path === props.to\r\n })\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n if (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1) return\r\n e.preventDefault()\r\n props.onClick?.(e)\r\n this.navigate(props.to)\r\n }\r\n\r\n const { children, to, activeClass, ...rest } = props\r\n const cls = computed(() => {\r\n const base = rest.class || ''\r\n const active = activeClass && isActive.value ? ` ${activeClass}` : ''\r\n return `${base}${active}`\r\n })\r\n\r\n const childNodes = (Array.isArray(children) ? children : [children]).flat(Infinity).map((c: any) => {\r\n if (c == null || typeof c === 'boolean') return { type: 'text', text: '' } as VNode\r\n if (typeof c === 'object' && 'type' in c) return c as VNode\r\n return { type: 'text', text: String(c) } as VNode\r\n })\r\n\r\n return {\r\n type: 'element',\r\n tag: 'a',\r\n props: { href: this._options.basePath + to, onClick: handleClick, class: cls },\r\n children: childNodes,\r\n }\r\n }\n}\r\n\r\n"],"mappings":";AAAC,IAAI,gBAAqC;AAC1C,IAAI,gBAA0C;AAC9C,IAAI,aAAa;AACjB,IAAM,iBAAiB,oBAAI,IAAgB;AAM3C,SAAS,eAAqB;AAC5B,QAAM,MAAM,CAAC,GAAG,cAAc;AAC9B,iBAAe,MAAM;AACrB,aAAW,MAAM,IAAK,IAAG;AAC3B;AAEA,SAAS,YAAY,MAA0B;AAC7C,MAAI,cAAe,eAAc,IAAI,IAAI;AACzC,MAAI,cAAe,MAAK,MAAM,IAAI,aAAa;AACjD;AAEO,IAAM,SAAN,MAAgB;AAAA,EACZ,OAAO;AAAA,EAChB,QAAQ,oBAAI,IAAgB;AAAA,EACpB;AAAA,EAER,YAAY,OAAU;AACpB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,QAAW;AACb,gBAAY,IAAI;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,KAAQ;AAChB,QAAI,QAAQ,KAAK,QAAQ;AACvB,WAAK,SAAS;AACd,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,OAAU;AACR,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,GAAY;AACd,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,IAAuB;AAC5B,SAAK,QAAQ,GAAG,KAAK,MAAM;AAAA,EAC7B;AAAA,EAEA,UAAU,IAAkC;AAC1C,UAAM,KAAK,MAAM,GAAG,KAAK,MAAM;AAC/B,SAAK,MAAM,IAAI,EAAE;AACjB,WAAO,MAAM,KAAK,MAAM,OAAO,EAAE;AAAA,EACnC;AAAA,EAEA,SAAY;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAAmB;AACjB,WAAO,OAAO,KAAK,MAAM;AAAA,EAC3B;AAAA,EAEA,UAAa;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,EAAE,OAAO,QAAQ,IAAiB;AAChC,UAAM,KAAK;AAAA,EACb;AAAA,EAEQ,UAAgB;AACtB,QAAI,aAAa,GAAG;AAClB,iBAAW,KAAK,KAAK,MAAO,gBAAe,IAAI,CAAC;AAAA,IAClD,OAAO;AACL,YAAM,OAAO,CAAC,GAAG,KAAK,KAAK;AAC3B,iBAAW,KAAK,KAAM,GAAE;AAAA,IAC1B;AAAA,EACF;AACF;AAEO,IAAM,WAAN,MAAkB;AAAA,EACd,OAAO;AAAA,EAChB,QAAQ,oBAAI,IAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW,oBAAI,IAAkB;AAAA,EAEjC,eAAe,MAAY;AACjC,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,SAAS;AACd,iBAAW,KAAK,CAAC,GAAG,KAAK,KAAK,EAAG,GAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,YAAY,IAAa;AACvB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,IAAI,QAAW;AACb,gBAAY,IAAI;AAChB,QAAI,KAAK,OAAQ,MAAK,MAAM;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAU;AACR,QAAI,KAAK,OAAQ,MAAK,MAAM;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAU,IAAkC;AAC1C,SAAK;AACL,UAAM,KAAK,MAAM,GAAG,KAAK,MAAM;AAC/B,SAAK,MAAM,IAAI,EAAE;AACjB,WAAO,MAAM,KAAK,MAAM,OAAO,EAAE;AAAA,EACnC;AAAA,EAEA,SAAY;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAAmB;AACjB,WAAO,OAAO,KAAK,KAAK;AAAA,EAC1B;AAAA,EAEA,UAAa;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,QAAc;AACpB,eAAW,OAAO,KAAK,UAAU;AAC/B,UAAI,MAAM,OAAO,KAAK,YAAY;AAAA,IACpC;AACA,SAAK,SAAS,MAAM;AACpB,SAAK,SAAS;AAEd,UAAM,cAAc;AACpB,UAAM,cAAc;AACpB,oBAAgB,oBAAI,IAAI;AACxB,oBAAgB;AAChB,QAAI;AACF,WAAK,SAAS,KAAK,IAAI;AACvB,WAAK,WAAW;AAAA,IAClB,UAAE;AACA,sBAAgB;AAChB,sBAAgB;AAAA,IAClB;AAEA,eAAW,OAAO,KAAK,UAAU;AAC/B,UAAI,MAAM,IAAI,KAAK,YAAY;AAAA,IACjC;AAAA,EACF;AACF;AAEO,IAAM,SAAN,MAAa;AAAA,EACV;AAAA,EACA,WAAW,oBAAI,IAAkB;AAAA,EACjC;AAAA,EACA,SAAS;AAAA,EAEjB,YAAY,IAA+B;AACzC,SAAK,MAAM;AACX,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,IAAI,QAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAa;AACX,QAAI,CAAC,KAAK,OAAQ;AAClB,SAAK,SAAS;AACd,SAAK,qBAAqB;AAC1B,QAAI,KAAK,UAAU;AACjB,WAAK,SAAS;AACd,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,SAAK,KAAK;AAAA,EACZ;AAAA,EAEQ,uBAA6B;AACnC,eAAW,OAAO,KAAK,UAAU;AAC/B,UAAI,MAAM,OAAO,KAAK,IAAI;AAAA,IAC5B;AACA,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA,EAEQ,OAAO,MAAY;AACzB,QAAI,CAAC,KAAK,OAAQ;AAClB,SAAK,qBAAqB;AAC1B,QAAI,KAAK,UAAU;AACjB,WAAK,SAAS;AACd,WAAK,WAAW;AAAA,IAClB;AAEA,UAAM,cAAc;AACpB,UAAM,cAAc;AACpB,oBAAgB,KAAK;AACrB,oBAAgB,KAAK;AACrB,QAAI;AACF,YAAM,SAAS,KAAK,IAAI;AACxB,UAAI,OAAO,WAAW,YAAY;AAChC,aAAK,WAAW;AAAA,MAClB;AAAA,IACF,UAAE;AACA,sBAAgB;AAChB,sBAAgB;AAAA,IAClB;AAAA,EACF;AACF;AAEO,SAAS,OAAU,SAAuB;AAC/C,SAAO,IAAI,OAAO,OAAO;AAC3B;AAEO,SAAS,SAAY,IAA0B;AACpD,SAAO,IAAI,SAAS,EAAE;AACxB;AAEO,SAAS,OAAO,IAAuC;AAC5D,SAAO,IAAI,OAAO,EAAE;AACtB;AAEO,SAAS,UAAa,IAAgB;AAC3C,QAAM,cAAc;AACpB,QAAM,cAAc;AACpB,kBAAgB;AAChB,kBAAgB;AAChB,MAAI;AACF,WAAO,GAAG;AAAA,EACZ,UAAE;AACA,oBAAgB;AAChB,oBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,MAAS,IAAgB;AACvC;AACA,MAAI;AACF,WAAO,GAAG;AAAA,EACZ,UAAE;AACA;AACA,QAAI,eAAe,GAAG;AACpB,mBAAa;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,SAAS,KAAsC;AAC7D,SAAO,eAAe;AACxB;AAEO,SAAS,WAAW,KAAwC;AACjE,SAAO,eAAe;AACxB;AAEO,SAAS,SAAY,OAAiC;AAC3D,MAAI,iBAAiB,OAAQ,QAAO;AACpC,SAAO,OAAO,KAAK;AACrB;AAEO,SAAS,aAAwD,SAAkF;AACxJ,SAAO,SAAS,MAAM;AACpB,UAAM,SAAkC,CAAC;AACzC,eAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AACtC,aAAO,GAAG,IAAK,QAA4C,GAAG,EAAG;AAAA,IACnE;AACA,WAAO;AAAA,EACT,CAAC;AACH;;;ACxOA,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EAAO;AAAA,EAAO;AAAA,EAAK;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAO;AAAA,EAC3D;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAC3B,CAAC;AAED,IAAM,eAAe,oBAAI,IAAI;AAAA,EAC3B;AAAA,EAAM;AAAA,EAAO;AAAA,EAAS;AAAA,EAAO;AAAA,EAAI;AAAA,EAAO;AAAA,EAAO;AAAA,EAAW;AAAA,EAC1D;AAAA,EAAU;AAAA,EAAM;AAAA,EAAO;AAAA,EAAW;AAAA,EAAO;AAAA,EAAiB;AAAA,EAC1D;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAgB;AAAA,EAAS;AAAA,EAC3D;AAAA,EAAS;AAAA,EAAS;AAAA,EAAU;AAAA,EAAgB;AAAA,EAC5C;AAAA,EAAc;AAAA,EAAe;AAAA,EAAU;AAAA,EAAiB;AAAA,EACxD;AAAA,EAAW;AAAA,EAAU;AAAA,EAAS;AAChC,CAAC;AAED,SAASA,UAAS,KAAkC;AAClD,SAAO,eAAe;AACxB;AAEA,SAASC,YAAW,KAAoC;AACtD,SAAO,eAAe;AACxB;AAEO,SAAS,eAAe,OAA0B;AACvD,MAAI,SAAS,QAAQ,OAAO,UAAU,UAAW,QAAO;AACxD,MAAID,UAAS,KAAK,KAAKC,YAAW,KAAK,GAAG;AACxC,WAAO,EAAE,MAAM,UAAU,QAAQ,MAAkC;AAAA,EACrE;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC1D,WAAO,EAAE,MAAM,QAAQ,MAAM,OAAO,KAAK,EAAE;AAAA,EAC7C;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAM,WAAW,MAAM,KAAK,QAAQ,EAAE,IAAI,cAAc,EAAE,OAAO,OAAO;AACxE,QAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAI,SAAS,WAAW,EAAG,QAAO,SAAS,CAAC;AAC5C,WAAO,EAAE,MAAM,YAAY,SAAS;AAAA,EACtC;AACA,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,OAAO;AAClE,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,YAAY;AAC/B,WAAO,EAAE,MAAM,aAAa,WAAW,OAAoB,OAAO,CAAC,EAAE;AAAA,EACvE;AACA,SAAO,EAAE,MAAM,QAAQ,MAAM,OAAO,KAAK,EAAE;AAC7C;AAEO,SAAS,EAAE,KAAyB,UAAgB,UAAwB;AACjF,MAAI,OAAO,QAAQ,YAAY;AAC7B,UAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,IAAI,cAAc,EAAE,OAAO,OAAO;AACpE,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,EAAE,GAAI,SAAS,CAAC,GAAI,UAAU,EAAE,SAAS,IAAI,IAAI,OAAU;AAAA,IACpE;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,OAAO,SAAS,CAAC;AAAA,IACjB,UAAU,SAAS,KAAK,QAAQ,EAAE,IAAI,cAAc,EAAE,OAAO,OAAO;AAAA,IACpE,KAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,YAAY,UAAwB;AAClD,QAAM,OAAO,SAAS,KAAK,QAAQ;AACnC,QAAM,aAAa,KAAK,IAAI,cAAc,EAAE,OAAO,OAAO;AAC1D,MAAI,WAAW,WAAW,EAAG,QAAO,EAAE,MAAM,QAAQ,MAAM,GAAG;AAC7D,MAAI,WAAW,WAAW,EAAG,QAAO,WAAW,CAAC;AAChD,SAAO,EAAE,MAAM,YAAY,UAAU,WAAW;AAClD;AAEO,SAAS,KAAK,SAAwB;AAC3C,SAAO,EAAE,MAAM,QAAQ,MAAM,QAAQ;AACvC;AAEO,SAAS,gBAAgB,MAAiB,UAAgB,UAA6B;AAC5F,QAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,IAAI,cAAc,EAAE,OAAO,OAAO;AACpE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO,EAAE,GAAI,SAAS,CAAC,GAAI,UAAU,EAAE,SAAS,IAAI,IAAI,OAAU;AAAA,EACpE;AACF;AAEA,SAAS,QAAQ,IAAa,KAAa,OAAY,UAAsB;AAC3E,MAAI,QAAQ,SAAS,QAAQ,cAAc,QAAQ,MAAO;AAC1D,MAAIA,YAAW,KAAK,GAAG;AACrB,YAAQ,IAAI,KAAK,MAAM,KAAK,GAAG,QAAQ;AACvC,UAAM,UAAU,CAAC,MAAW,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC/C;AAAA,EACF;AACA,MAAI,IAAI,WAAW,IAAI,KAAK,OAAO,UAAU,YAAY;AACvD,UAAM,QAAQ,IAAI,MAAM,CAAC,EAAE,YAAY;AACvC,QAAI,SAAU,IAAG,oBAAoB,OAAO,QAAQ;AACpD,OAAG,iBAAiB,OAAO,KAAK;AAChC;AAAA,EACF;AACA,MAAI,QAAQ,SAAS;AACnB,QAAI,OAAO,UAAU,UAAU;AAC7B,SAAG,aAAa,SAAS,KAAK;AAAA,IAChC,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AACtD,aAAO,OAAQ,GAAmB,OAAO,KAAK;AAAA,IAChD;AACA;AAAA,EACF;AACA,MAAI,QAAQ,WAAW,QAAQ,aAAa;AAC1C,QAAI,OAAO,UAAU,UAAU;AAC7B,SAAG,aAAa,SAAS,KAAK;AAAA,IAChC,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,SAAG,aAAa,SAAS,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;AAAA,IAC1D;AACA;AAAA,EACF;AACA,MAAI,QAAQ,6BAA6B,OAAO,UAAU,YAAY,OAAO,QAAQ;AACnF,OAAG,YAAY,MAAM;AACrB;AAAA,EACF;AACA,MAAI,QAAQ,WAAW,QAAQ,aAAa,QAAQ,cAAc,QAAQ,YAAY;AACpF,IAAC,GAAW,GAAG,IAAI;AACnB;AAAA,EACF;AACA,MAAI,QAAQ,WAAW;AACrB,OAAG,aAAa,OAAO,KAAK;AAC5B;AAAA,EACF;AACA,MAAI,UAAU,SAAS,UAAU,QAAQ,UAAU,QAAW;AAC5D,OAAG,gBAAgB,GAAG;AAAA,EACxB,WAAW,UAAU,MAAM;AACzB,OAAG,aAAa,KAAK,EAAE;AAAA,EACzB,OAAO;AACL,OAAG,aAAa,KAAK,OAAO,KAAK,CAAC;AAAA,EACpC;AACF;AAEA,SAAS,WAAW,IAAa,KAAa,OAAkB;AAC9D,MAAI,QAAQ,SAAS,QAAQ,cAAc,QAAQ,MAAO;AAC1D,MAAI,IAAI,WAAW,IAAI,KAAK,OAAO,UAAU,YAAY;AACvD,OAAG,oBAAoB,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,KAAK;AACxD;AAAA,EACF;AACA,MAAI,QAAQ,SAAS;AAAE,OAAG,gBAAgB,OAAO;AAAG;AAAA,EAAO;AAC3D,MAAI,QAAQ,WAAW,QAAQ,aAAa;AAAE,OAAG,gBAAgB,OAAO;AAAG;AAAA,EAAO;AAClF,MAAI,QAAQ,WAAW,QAAQ,aAAa,QAAQ,YAAY;AAAE,WAAQ,GAAW,GAAG;AAAG;AAAA,EAAO;AAClG,KAAG,gBAAgB,GAAG;AACxB;AAEA,SAAS,UAAU,OAAoB;AACrC,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK,WAAW;AACd,YAAM,QAAQ,aAAa,IAAI,MAAM,GAAG;AACxC,YAAM,KAAK,QACP,SAAS,gBAAgB,8BAA8B,MAAM,GAAG,IAChE,SAAS,cAAc,MAAM,GAAG;AACpC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,KAAK,GAAG;AACtD,YAAI,QAAQ,MAAO,SAAQ,IAAI,KAAK,KAAK;AAAA,MAC3C;AACA,iBAAW,SAAS,MAAM,UAAU;AAClC,WAAG,YAAY,UAAU,KAAK,CAAC;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AACH,aAAO,SAAS,eAAe,MAAM,IAAI;AAAA,IAC3C,KAAK,YAAY;AACf,YAAM,OAAO,SAAS,uBAAuB;AAC7C,iBAAW,SAAS,MAAM,SAAU,MAAK,YAAY,UAAU,KAAK,CAAC;AACrE,aAAO;AAAA,IACT;AAAA,IACA,KAAK,aAAa;AAChB,YAAM,SAAS,MAAM,UAAU,MAAM,KAAK;AAC1C,UAAI,kBAAkB,SAAS;AAC7B,cAAM,cAAc,SAAS,cAAc,SAAS;AACpD,eAAO,KAAK,CAAC,aAAa;AACxB,gBAAM,OAAO,UAAU,QAAQ;AAC/B,sBAAY,YAAY,aAAa,MAAM,WAAW;AAAA,QACxD,CAAC;AACD,eAAO;AAAA,MACT;AACA,aAAO,UAAU,MAAM;AAAA,IACzB;AAAA,IACA,KAAK,UAAU;AACb,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,IAAI,eAAe,GAAG;AAC5B,YAAM,OAAO,UAAU,KAAK,KAAK,EAAE,CAAC;AACpC,YAAM,OAAO,UAAU,CAAC,WAAgB;AACtC,cAAM,OAAO,eAAe,MAAM;AAClC,YAAI,QAAQ,KAAK,YAAY;AAC3B,gBAAM,UAAU,UAAU,IAAI;AAC9B,eAAK,WAAW,aAAa,SAAS,IAAI;AAAA,QAC5C;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,OAAO,OAAc,WAA8B;AACjE,YAAU,YAAY;AACtB,YAAU,YAAY,UAAU,KAAK,CAAC;AACxC;AAEA,SAAS,gBAAgB,GAAU,GAAmB;AACpD,MAAI,EAAE,SAAS,EAAE,KAAM,QAAO;AAC9B,MAAI,EAAE,SAAS,aAAa,EAAE,SAAS,WAAW;AAChD,WAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EACxC;AACA,SAAO;AACT;AAEA,SAAS,WAAW,IAAa,UAA+B,UAAqC;AACnG,QAAM,UAAU,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAK,QAAQ,GAAG,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC;AAC5E,aAAW,OAAO,SAAS;AACzB,QAAI,QAAQ,SAAS,QAAQ,WAAY;AACzC,UAAM,SAAS,SAAS,GAAG;AAC3B,UAAM,SAAS,SAAS,GAAG;AAC3B,QAAI,WAAW,OAAQ;AACvB,QAAI,WAAW,UAAa,WAAW,MAAM;AAC3C,iBAAW,IAAI,KAAK,MAAM;AAAA,IAC5B,OAAO;AACL,cAAQ,IAAI,KAAK,QAAQ,MAAM;AAAA,IACjC;AAAA,EACF;AACF;AAEA,SAAS,cAAc,QAAc,aAAsB,aAA4B;AACrF,QAAM,SAAS,KAAK,IAAI,YAAY,QAAQ,YAAY,MAAM;AAC9D,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,WAAW,YAAY,CAAC;AAC9B,UAAM,WAAW,YAAY,CAAC;AAC9B,UAAM,eAAe,OAAO,WAAW,CAAC;AACxC,QAAI,CAAC,YAAY,UAAU;AACzB,aAAO,YAAY,UAAU,QAAQ,CAAC;AAAA,IACxC,WAAW,YAAY,CAAC,UAAU;AAChC,UAAI,aAAc,QAAO,YAAY,YAAY;AAAA,IACnD,WAAW,YAAY,UAAU;AAC/B,UAAI,gBAAgB,UAAU,QAAQ,GAAG;AACvC,mBAAW,gBAAgB,MAAM,UAAU,QAAQ;AAAA,MACrD,OAAO;AACL,cAAM,UAAU,UAAU,QAAQ;AAClC,eAAO,aAAa,SAAS,YAAa;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,WAAW,KAAkB,UAAiB,UAAuB;AAC5E,MAAI,CAAC,IAAK;AACV,MAAI,SAAS,SAAS,aAAa,SAAS,SAAS,WAAW;AAC9D,eAAW,KAAoB,SAAS,OAAO,SAAS,KAAK;AAC7D,kBAAc,KAAK,SAAS,UAAU,SAAS,QAAQ;AAAA,EACzD,WAAW,SAAS,SAAS,UAAU,SAAS,SAAS,QAAQ;AAC/D,QAAI,SAAS,SAAS,SAAS,MAAM;AACnC,MAAC,IAAa,cAAc,SAAS;AAAA,IACvC;AAAA,EACF,WAAW,SAAS,SAAS,cAAc,SAAS,SAAS,YAAY;AACvE,kBAAc,IAAI,cAAc,KAAK,SAAS,UAAU,SAAS,QAAQ;AAAA,EAC3E;AACF;AAEO,SAAS,MAAM,KAAkB,UAAiB,UAAuB;AAC9E,MAAI,gBAAgB,UAAU,QAAQ,GAAG;AACvC,eAAW,KAAK,UAAU,QAAQ;AAAA,EACpC,OAAO;AACL,UAAM,SAAS,IAAI;AACnB,QAAI,QAAQ;AACV,aAAO,aAAa,UAAU,QAAQ,GAAG,GAAG;AAAA,IAC9C;AAAA,EACF;AACF;AAEO,SAAS,QAAQ,OAAc,WAA8B;AAClE,WAAS,YAAY,IAAW,MAAkB;AAChD,QAAI,GAAG,SAAS,WAAW;AACzB,YAAM,KAAK;AACX,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,KAAK,GAAG;AACnD,YAAI,IAAI,WAAW,IAAI,KAAK,OAAO,UAAU,YAAY;AACvD,aAAG,iBAAiB,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,KAAK;AAAA,QACvD;AAAA,MACF;AACA,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,SAAS,QAAQ,GAAG,WAAW,MAAM,GAAG,KAAK;AAC3E,oBAAY,GAAG,SAAS,CAAC,GAAI,GAAG,WAAW,CAAC,CAAE;AAAA,MAChD;AAAA,IACF,WAAW,GAAG,SAAS,aAAa;AAClC,YAAM,SAAS,GAAG,UAAU,GAAG,KAAK;AACpC,UAAI,EAAE,kBAAkB,SAAU,aAAY,QAAQ,IAAI;AAAA,IAC5D,WAAW,GAAG,SAAS,UAAU;AAC/B,SAAG,OAAO,UAAU,CAAC,WAAgB;AACnC,cAAM,WAAW,eAAe,MAAM;AACtC,YAAI,YAAY,KAAK,YAAY;AAC/B,eAAK,WAAW,aAAa,UAAU,QAAQ,GAAG,IAAI;AAAA,QACxD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,UAAU,YAAY;AACxB,gBAAY,OAAO,UAAU,UAAU;AAAA,EACzC,OAAO;AACL,WAAO,OAAO,SAAS;AAAA,EACzB;AACF;AAEA,IAAM,aAAqC;AAAA,EACzC,KAAK;AAAA,EAAS,KAAK;AAAA,EAAQ,KAAK;AAAA,EAAQ,KAAK;AAAA,EAAU,KAAK;AAC9D;AAEA,SAAS,WAAW,KAAqB;AACvC,SAAO,IAAI,QAAQ,YAAY,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC;AAC1D;AAEA,SAAS,YAAY,OAAoC;AACvD,MAAI,MAAM;AACV,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,QAAQ,SAAS,QAAQ,cAAc,QAAQ,MAAO;AAC1D,QAAI,IAAI,WAAW,IAAI,EAAG;AAC1B,QAAI,UAAU,SAAS,UAAU,QAAQ,UAAU,OAAW;AAC9D,QAAI,QAAQ,WAAW,OAAO,UAAU,UAAU;AAChD,YAAM,WAAW,OAAO,QAAQ,KAAK,EAClC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,QAAQ,UAAU,CAAC,MAAM,MAAM,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,EAC3E,KAAK,GAAG;AACX,aAAO,aAAa,WAAW,QAAQ,IAAI;AAC3C;AAAA,IACF;AACA,QAAI,QAAQ,WAAW,QAAQ,aAAa;AAC1C,YAAM,MAAM,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG,IAAI;AACrE,aAAO,aAAa,WAAW,OAAO,GAAG,CAAC,IAAI;AAC9C;AAAA,IACF;AACA,QAAI,QAAQ,WAAW;AAAE,aAAO,WAAW,WAAW,OAAO,KAAK,CAAC,IAAI;AAAK;AAAA,IAAS;AACrF,QAAI,UAAU,MAAM;AAAE,aAAO,MAAM;AAAA,IAAI,OAClC;AAAE,aAAO,MAAM,MAAM,OAAO,WAAW,OAAO,KAAK,CAAC,IAAI;AAAA,IAAI;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAsB;AACjD,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK,WAAW;AACd,YAAM,WAAW,MAAM,SAAS,IAAI,mBAAmB,EAAE,KAAK,EAAE;AAChE,UAAI,cAAc,IAAI,MAAM,GAAG,EAAG,QAAO,MAAM,MAAM,MAAM,YAAY,MAAM,KAAK,IAAI;AACtF,aAAO,MAAM,MAAM,MAAM,YAAY,MAAM,KAAK,IAAI,MAAM,WAAW,OAAO,MAAM,MAAM;AAAA,IAC1F;AAAA,IACA,KAAK;AAAQ,aAAO,WAAW,MAAM,IAAI;AAAA,IACzC,KAAK;AAAY,aAAO,MAAM,SAAS,IAAI,mBAAmB,EAAE,KAAK,EAAE;AAAA,IACvE,KAAK,aAAa;AAChB,YAAM,SAAS,MAAM,UAAU,MAAM,KAAK;AAC1C,UAAI,kBAAkB,QAAS,OAAM,IAAI,MAAM,4DAA4D;AAC3G,aAAO,oBAAoB,MAAM;AAAA,IACnC;AAAA,IACA,KAAK;AAAU,aAAO,oBAAoB,eAAe,MAAM,OAAO,KAAK,KAAK,KAAK,EAAE,CAAC;AAAA,EAC1F;AACF;AAEO,SAAS,eAAe,OAAsB;AACnD,SAAO,oBAAoB,KAAK;AAClC;AAEO,SAAS,eAAe,OAAsC;AACnE,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,YAAY;AAChB,YAAM,OAAO,eAAe,KAAK;AACjC,iBAAW,QAAQ,IAAI;AACvB,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACH;;;ACzZA,IAAM,YAAY,OAAc,EAAE,MAAM,QAAiB,MAAM,GAAG;AAE3D,SAAS,cAAc,KAAU,UAAe,UAAwB;AAC7E,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC;AACrC,MAAI,OAAO,QAAQ,YAAY;AAC7B,UAAM,WAAW,SAAS,KAAK,QAAQ;AACvC,UAAMC,UAAqB;AAAA,MACzB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,EAAE,GAAG,MAAM,UAAU,SAAS,SAAS,IAAI,WAAW,OAAU;AAAA,IACzE;AACA,WAAOA;AAAA,EACT;AACA,QAAM,aAAsB,SAAS,KAAK,QAAQ,EAAE,IAAI,CAAC,MAAkB;AACzE,QAAI,KAAK,QAAQ,OAAO,MAAM,UAAW,QAAO,UAAU;AAC1D,QAAI,OAAO,MAAM,YAAY,MAAM,QAAQ,UAAU,EAAG,QAAO;AAC/D,WAAO,EAAE,MAAM,QAAiB,MAAM,OAAO,CAAC,EAAE;AAAA,EAClD,CAAC;AACD,QAAM,SAAmB;AAAA,IACvB,MAAM;AAAA,IACN;AAAA,IACA,OAAO,QAAQ,CAAC;AAAA,IAChB,UAAU;AAAA,EACZ;AACA,SAAO;AACT;AAEO,SAAS,SAAS,OAAkC;AACzD,QAAM,WAAW,OAAO;AACxB,MAAI,CAAC,SAAU,QAAO,UAAU;AAChC,QAAM,MAAM,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAC1D,QAAM,OAAO,IAAI,KAAK,QAAQ,EAAE,IAAI,CAAC,MAAkB;AACrD,QAAI,KAAK,QAAQ,OAAO,MAAM,UAAW,QAAO,UAAU;AAC1D,QAAI,OAAO,MAAM,YAAY,MAAM,QAAQ,UAAU,EAAG,QAAO;AAC/D,WAAO,EAAE,MAAM,QAAiB,MAAM,OAAO,CAAC,EAAE;AAAA,EAClD,CAAC;AACD,MAAI,KAAK,WAAW,EAAG,QAAO,KAAK,CAAC;AACpC,QAAM,SAAoB,EAAE,MAAM,YAAqB,UAAU,KAAK;AACtE,SAAO;AACT;;;ACtCO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,WAAsB,OAA8B;AACzD,UAAM,QAAe;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO,SAAS,CAAC;AAAA,IACnB;AACA,WAAO,QAAQ,QAAQ,eAAe,KAAK,CAAC;AAAA,EAC9C;AAAA,EAEA,eAAe,WAAsB,OAAqC;AACxE,UAAM,QAAe;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO,SAAS,CAAC;AAAA,IACnB;AACA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,aAAa,WAAsB,OAAqB;AACtD,UAAM,QAAe;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,OAAO,SAAS,CAAC;AAAA,IACnB;AACA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,sBAAsB,MAAc,OAA8B;AACtE,UAAM,MAAM,MAAM,OAAO;AACzB,UAAM,UAAU,OAAO,KAAK,GAAG,EAAE,KAAK,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,UAAU;AACzE,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,gCAAgC,IAAI,EAAE;AACpE,UAAM,YAAY,IAAI,OAAO;AAC7B,UAAM,SAAS,UAAU,SAAS,CAAC,CAAC;AACpC,UAAM,WAAW,kBAAkB,UAAU,MAAM,SAAS;AAC5D,WAAO,eAAe,QAAQ;AAAA,EAChC;AACF;AAEO,SAAS,0BAAkC;AAChD,SAAO;AACT;;;ACrCO,SAAS,cAAc,SAA6C;AACzE,SAAO;AACT;;;ACsBA,SAAS,WAAW,QAAwC;AAC1D,QAAM,SAAiC,CAAC;AACxC,QAAM,KAAK,OAAO,WAAW,GAAG,IAAI,OAAO,MAAM,CAAC,IAAI;AACtD,MAAI,CAAC,GAAI,QAAO;AAChB,aAAW,QAAQ,GAAG,MAAM,GAAG,GAAG;AAChC,UAAM,CAAC,KAAK,GAAG,IAAI,KAAK,MAAM,GAAG;AACjC,QAAI,IAAK,QAAO,mBAAmB,GAAG,CAAC,IAAI,MAAM,mBAAmB,GAAG,IAAI;AAAA,EAC7E;AACA,SAAO;AACT;AAEA,SAAS,UAAU,WAAmB,SAAgD;AACpF,QAAM,aAAa,UAAU,MAAM,GAAG;AACtC,QAAM,WAAW,QAAQ,MAAM,GAAG;AAClC,MAAI,WAAW,WAAW,SAAS,OAAQ,QAAO;AAClD,QAAM,SAAiC,CAAC;AACxC,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,KAAK,WAAW,CAAC;AACvB,UAAM,KAAK,SAAS,CAAC;AACrB,QAAI,GAAG,WAAW,GAAG,GAAG;AACtB,aAAO,GAAG,MAAM,CAAC,CAAC,IAAI,mBAAmB,EAAE;AAAA,IAC7C,WAAW,OAAO,IAAI;AACpB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,eAAN,MAAmB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAqB,CAAC;AAAA,EACtB,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EAER,YAAY,QAA2B,SAAyB;AAC9D,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,MACd,UAAU,SAAS,YAAY;AAAA,MAC/B,MAAM,SAAS,QAAQ;AAAA,MACvB,mBAAmB,SAAS,qBAAqB;AAAA,IACnD;AAEA,UAAM,eAAe,KAAK,cAAc,KAAK,gBAAgB,CAAC;AAC9D,SAAK,WAAW,OAA0B,YAAY;AACtD,SAAK,UAAU,OAA+B,cAAc,UAAU,CAAC,CAAC;AACxE,SAAK,SAAS,OAA+B,WAAW,OAAO,SAAS,MAAM,CAAC;AAE/E,QAAI,KAAK,SAAS,mBAAmB;AACnC,cAAQ,oBAAoB;AAAA,IAC9B;AAEA,WAAO,iBAAiB,YAAY,MAAM;AACxC,YAAM,OAAO,KAAK,gBAAgB;AAClC,YAAM,QAAQ,KAAK,cAAc,IAAI;AACrC,WAAK,SAAS,QAAQ;AACtB,WAAK,QAAQ,QAAQ,OAAO,UAAU,CAAC;AACvC,WAAK,OAAO,QAAQ,WAAW,OAAO,SAAS,MAAM;AAAA,IACvD,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,UAAqC;AACvC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAyC;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAwC;AAC1C,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,kBAA0B;AAChC,QAAI,KAAK,SAAS,SAAS,QAAQ;AACjC,YAAM,OAAO,OAAO,SAAS,KAAK,MAAM,CAAC,KAAK;AAC9C,aAAO;AAAA,IACT;AACA,QAAI,OAAO,OAAO,SAAS;AAC3B,QAAI,KAAK,SAAS,YAAY,KAAK,WAAW,KAAK,SAAS,QAAQ,GAAG;AACrE,aAAO,KAAK,MAAM,KAAK,SAAS,SAAS,MAAM,KAAK;AAAA,IACtD;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,MAAiC;AACrD,eAAW,SAAS,KAAK,SAAS;AAChC,YAAM,SAAS,UAAU,MAAM,MAAM,IAAI;AACzC,UAAI,WAAW,MAAM;AACnB,eAAO;AAAA,UACL;AAAA,UACA,SAAS,MAAM;AAAA,UACf,WAAW,MAAM;AAAA,UACjB,QAAQ,MAAM;AAAA,UACd,SAAS,MAAM;AAAA,UACf,OAAO,MAAM;AAAA,UACb;AAAA,UACA,OAAO,WAAW,OAAO,SAAS,MAAM;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,MAA6B;AAC1C,UAAM,OAAO,KAAK,gBAAgB;AAClC,UAAM,KAAK;AAEX,UAAM,QAAQ,KAAK,QAAQ,KAAK,CAAC,MAAM,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI;AACrE,QAAI,OAAO,QAAQ;AACjB,iBAAW,SAAS,MAAM,QAAQ;AAChC,cAAM,UAAU,MAAM,MAAM,IAAI,IAAI;AACpC,YAAI,CAAC,QAAS,OAAM,IAAI,MAAM,6BAA6B,IAAI,OAAO,EAAE,EAAE;AAAA,MAC5E;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,SAAS,WAC/B,KAAK,SAAS,WAAW,KACzB;AAEJ,QAAI,KAAK,SAAS,SAAS,QAAQ;AACjC,aAAO,SAAS,OAAO;AAAA,IACzB,OAAO;AACL,cAAQ,UAAU,MAAM,IAAI,YAAY;AAAA,IAC1C;AAEA,QAAI,KAAK,gBAAgB,KAAK,SAAS,SAAS,GAAG;AACjD,WAAK,WAAW,KAAK,SAAS,MAAM,GAAG,KAAK,gBAAgB,CAAC;AAAA,IAC/D;AACA,SAAK,SAAS,KAAK,EAAE;AACrB,SAAK;AAEL,UAAM,QAAQ,KAAK,cAAc,EAAE;AACnC,SAAK,SAAS,QAAQ;AACtB,SAAK,QAAQ,QAAQ,OAAO,UAAU,CAAC;AACvC,SAAK,OAAO,QAAQ,WAAW,OAAO,SAAS,MAAM;AAAA,EACvD;AAAA,EAEA,OAAa;AACX,QAAI,KAAK,gBAAgB,GAAG;AAC1B,WAAK;AACL,YAAM,OAAO,KAAK,SAAS,KAAK,aAAa;AAC7C,UAAI,KAAK,SAAS,SAAS,QAAQ;AACjC,eAAO,SAAS,OAAO;AAAA,MACzB,OAAO;AACL,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,gBAAgB,KAAK,SAAS,SAAS,GAAG;AACjD,WAAK;AACL,YAAM,OAAO,KAAK,SAAS,KAAK,aAAa;AAC7C,UAAI,KAAK,SAAS,SAAS,QAAQ;AACjC,eAAO,SAAS,OAAO;AAAA,MACzB,OAAO;AACL,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,KAAK,OAAsH;AACzH,UAAM,WAAW,SAAS,MAAM;AAC9B,YAAM,UAAU,KAAK,SAAS;AAC9B,aAAO,SAAS,SAAS,MAAM;AAAA,IACjC,CAAC;AAED,UAAM,cAAc,CAAC,MAAkB;AACrC,UAAI,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAG;AAC5D,QAAE,eAAe;AACjB,YAAM,UAAU,CAAC;AACjB,WAAK,SAAS,MAAM,EAAE;AAAA,IACxB;AAEA,UAAM,EAAE,UAAU,IAAI,aAAa,GAAG,KAAK,IAAI;AAC/C,UAAM,MAAM,SAAS,MAAM;AACzB,YAAM,OAAO,KAAK,SAAS;AAC3B,YAAM,SAAS,eAAe,SAAS,QAAQ,IAAI,WAAW,KAAK;AACnE,aAAO,GAAG,IAAI,GAAG,MAAM;AAAA,IACzB,CAAC;AAED,UAAM,cAAc,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ,GAAG,KAAK,QAAQ,EAAE,IAAI,CAAC,MAAW;AAClG,UAAI,KAAK,QAAQ,OAAO,MAAM,UAAW,QAAO,EAAE,MAAM,QAAQ,MAAM,GAAG;AACzE,UAAI,OAAO,MAAM,YAAY,UAAU,EAAG,QAAO;AACjD,aAAO,EAAE,MAAM,QAAQ,MAAM,OAAO,CAAC,EAAE;AAAA,IACzC,CAAC;AAED,WAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO,EAAE,MAAM,KAAK,SAAS,WAAW,IAAI,SAAS,aAAa,OAAO,IAAI;AAAA,MAC7E,UAAU;AAAA,IACZ;AAAA,EACF;AACF;","names":["isSignal","isComputed","result"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { AlamatSchema, AnySchema, ArraySchema, BigIntSchema, BooleanSchema, CoerceBooleanSchema, CoerceDateSchema, CoerceNumberSchema, CoerceStringSchema, DateSchema, EnumSchema, IntersectionSchema, KodeposSchema, LiteralSchema, MapSchema, NIKSchema, NPWPSchema, NaNSchema, NullSchema, NumberSchema, ObjectSchema, PhoneSchema, RecordSchema, RekeningSchema, SetSchema, StringSchema, SymbolSchema, TupleSchema, UndefinedSchema, UnionSchema, UnknownSchema, getLocale, s, setLocale } from './schema/index.js';
2
- export { AppOptions, SuperApp, URLBuilder, ViewEngine, constx, registerMacro, responseMacros, url } from './server/index.js';
2
+ export { AppOptions, SuperApp, URLBuilder, ViewEngine, registerMacro, responseMacros, speexjs, url } from './server/index.js';
3
3
  export { Computed, Effect, Signal, Subscribable, batch, computed, effect, isComputed, isSignal, mergeSignals, signal, toSignal, untracked } from './client/signals/index.js';
4
4
  export { Component, ComponentContext, VComponent, VElement, VFragment, VNode, VSignalNode, VText, createComponent, fragment, h, hydrate, normalizeChild, patch, render, renderToStream, renderToString, text } from './client/vdom/index.js';
5
5
  export { F as Fragment, c as createElement } from './jsx-DGrnv8QB.js';
package/dist/index.js CHANGED
@@ -5264,7 +5264,7 @@ var SuperApp = class {
5264
5264
  }
5265
5265
  }
5266
5266
  };
5267
- function constx(options) {
5267
+ function speexjs(options) {
5268
5268
  return new SuperApp(options);
5269
5269
  }
5270
5270
  function createControllerInstance2(controller, ctx) {
@@ -5989,7 +5989,7 @@ var ServerRenderer = class {
5989
5989
  }
5990
5990
  };
5991
5991
  function generateHydrationScript() {
5992
- return '<script>(function(){var d=document.createElement("div");d.setAttribute("data-speedx-hydrated","");document.body.appendChild(d)})();</script>';
5992
+ return '<script>(function(){var d=document.createElement("div");d.setAttribute("data-speexjs-hydrated","");document.body.appendChild(d)})();</script>';
5993
5993
  }
5994
5994
 
5995
5995
  // src/client/adapters/index.ts
@@ -6363,7 +6363,6 @@ export {
6363
6363
  batch,
6364
6364
  cacheResponse,
6365
6365
  computed,
6366
- constx,
6367
6366
  createClient,
6368
6367
  createComponent,
6369
6368
  createDialect,
@@ -6393,6 +6392,7 @@ export {
6393
6392
  s,
6394
6393
  setLocale,
6395
6394
  signal,
6395
+ speexjs,
6396
6396
  storage,
6397
6397
  text,
6398
6398
  toSignal,