elit 3.3.7 → 3.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +8 -7
- package/dist/database.js.map +1 -1
- package/dist/database.mjs +8 -7
- package/dist/database.mjs.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +23 -1
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +23 -1
- package/dist/server.mjs.map +1 -1
- package/package.json +1 -1
- package/src/database.ts +15 -7
- package/src/server.ts +31 -1
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime.ts","../src/http.ts","../src/fs.ts","../src/server.ts","../src/https.ts","../src/ws.ts","../src/chokidar.ts","../src/path.ts","../src/mime-types.ts","../src/dom.ts"],"sourcesContent":["/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n","/**\n * HTTP module with unified API across runtimes\n * Ultra-optimized for maximum performance across Node.js, Bun, and Deno\n *\n * Performance optimizations:\n * - Bun fast path: Zero class instantiation (object literals only)\n * - Eliminated EventEmitter overhead for Bun/Deno\n * - Zero-copy headers conversion\n * - Inline response creation\n * - Reduced object allocations\n * - Direct closure capture (no resolver indirection)\n */\n\nimport { EventEmitter } from 'node:events';\nimport { runtime, isBun, isDeno, isNode } from './runtime';\n\n/**\n * Helper: Check if running on Node.js (eliminates duplication in runtime checks)\n */\n\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) queueMicrotask(callback);\n}\n\n/**\n * Helper: Convert headers to HeadersInit (eliminates duplication in Response creation)\n */\nfunction headersToInit(headers: OutgoingHttpHeaders): HeadersInit {\n const result: HeadersInit = {};\n for (const key in headers) {\n const value = headers[key];\n result[key] = Array.isArray(value) ? value.join(', ') : String(value);\n }\n return result;\n}\n\n/**\n * Helper: Create address object (eliminates duplication in address() method)\n */\nfunction createAddress(port: number, address: string, family = 'IPv4'): { port: number; family: string; address: string } {\n return { port, family, address };\n}\n\n/**\n * Helper: Create error Response (eliminates duplication in error handling)\n */\nfunction createErrorResponse(): Response {\n return new Response('Internal Server Error', { status: 500 });\n}\n\n/**\n * Helper: Emit listening and queue callback (eliminates duplication in Bun/Deno listen)\n */\nfunction emitListeningWithCallback(server: Server, callback?: () => void): void {\n server._listening = true;\n server.emit('listening');\n queueCallback(callback);\n}\n\n/**\n * Helper: Close server and emit events (eliminates duplication in Bun/Deno close)\n */\nfunction closeAndEmit(server: Server, callback?: (err?: Error) => void): void {\n server._listening = false;\n server.emit('close');\n if (callback) queueMicrotask(() => callback());\n}\n\n// Lazy-load native modules for Node.js\nlet http: any, https: any;\n\n// Initialize immediately for Node.js (synchronous require)\nif (isNode && typeof process !== 'undefined') {\n try {\n http = require('node:http');\n https = require('node:https');\n } catch (e) {\n // Fallback for older Node versions\n http = require('http');\n https = require('https');\n }\n}\n\n/**\n * HTTP Methods\n */\nexport const METHODS = [\n 'GET', 'POST', 'PUT', 'DELETE', 'PATCH',\n 'HEAD', 'OPTIONS', 'CONNECT', 'TRACE'\n] as const;\n\n/**\n * HTTP Status Codes (compact object)\n */\nexport const STATUS_CODES: Record<number, string> = {\n 100: 'Continue', 101: 'Switching Protocols', 102: 'Processing',\n 200: 'OK', 201: 'Created', 202: 'Accepted', 203: 'Non-Authoritative Information',\n 204: 'No Content', 205: 'Reset Content', 206: 'Partial Content',\n 300: 'Multiple Choices', 301: 'Moved Permanently', 302: 'Found',\n 303: 'See Other', 304: 'Not Modified', 307: 'Temporary Redirect', 308: 'Permanent Redirect',\n 400: 'Bad Request', 401: 'Unauthorized', 402: 'Payment Required', 403: 'Forbidden',\n 404: 'Not Found', 405: 'Method Not Allowed', 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required', 408: 'Request Timeout', 409: 'Conflict',\n 410: 'Gone', 411: 'Length Required', 412: 'Precondition Failed',\n 413: 'Payload Too Large', 414: 'URI Too Long', 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable', 417: 'Expectation Failed', 418: \"I'm a teapot\",\n 422: 'Unprocessable Entity', 425: 'Too Early', 426: 'Upgrade Required',\n 428: 'Precondition Required', 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large', 451: 'Unavailable For Legal Reasons',\n 500: 'Internal Server Error', 501: 'Not Implemented', 502: 'Bad Gateway',\n 503: 'Service Unavailable', 504: 'Gateway Timeout', 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates', 507: 'Insufficient Storage', 508: 'Loop Detected',\n 510: 'Not Extended', 511: 'Network Authentication Required',\n};\n\n/**\n * HTTP Headers type\n */\nexport type IncomingHttpHeaders = Record<string, string | string[] | undefined>;\nexport type OutgoingHttpHeaders = Record<string, string | string[] | number>;\n\n/**\n * IncomingMessage - Ultra-optimized for zero-copy operations\n */\nexport class IncomingMessage extends EventEmitter {\n public method: string;\n public url: string;\n public headers: IncomingHttpHeaders;\n public statusCode?: number;\n public statusMessage?: string;\n public httpVersion: string = '1.1';\n public rawHeaders: string[] = [];\n public socket: any;\n\n private _req: any;\n\n constructor(req: any) {\n super();\n this._req = req;\n\n if (isNode) {\n // Direct property access (fastest)\n this.method = req.method;\n this.url = req.url;\n this.headers = req.headers;\n this.statusCode = req.statusCode;\n this.statusMessage = req.statusMessage;\n this.httpVersion = req.httpVersion;\n this.rawHeaders = req.rawHeaders;\n this.socket = req.socket;\n } else {\n // Bun/Deno Request object - zero-copy parsing\n this.method = req.method;\n const urlObj = new URL(req.url);\n this.url = urlObj.pathname + urlObj.search;\n\n // Direct headers reference (zero-copy)\n this.headers = req.headers;\n this.rawHeaders = [];\n }\n }\n\n async text(): Promise<string> {\n if (isNode) {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n this._req.on('data', (chunk: Buffer) => chunks.push(chunk));\n this._req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n this._req.on('error', reject);\n });\n }\n // Bun/Deno - direct text() call\n return this._req.text();\n }\n\n async json(): Promise<any> {\n if (isNode) {\n const text = await this.text();\n return JSON.parse(text);\n }\n // Bun/Deno - optimized json() method\n return this._req.json();\n }\n}\n\n/**\n * ServerResponse - Ultra-optimized write operations\n */\nexport class ServerResponse extends EventEmitter {\n public statusCode: number = 200;\n public statusMessage: string = 'OK';\n public headersSent: boolean = false;\n\n private _headers: OutgoingHttpHeaders;\n private _body: string = '';\n private _resolve?: (response: Response) => void;\n private _finished: boolean = false;\n private _nodeRes?: any;\n\n constructor(_req?: IncomingMessage, nodeRes?: any) {\n super();\n this._nodeRes = nodeRes;\n // Use Object.create(null) for faster property access\n this._headers = Object.create(null);\n }\n\n setHeader(name: string, value: string | string[] | number): this {\n if (this.headersSent) {\n throw new Error('Cannot set headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.setHeader(name, value);\n }\n\n this._headers[name.toLowerCase()] = value;\n return this;\n }\n\n getHeader(name: string): string | string[] | number | undefined {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeader(name);\n }\n return this._headers[name.toLowerCase()];\n }\n\n getHeaders(): OutgoingHttpHeaders {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaders();\n }\n return { ...this._headers };\n }\n\n getHeaderNames(): string[] {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaderNames();\n }\n return Object.keys(this._headers);\n }\n\n hasHeader(name: string): boolean {\n if (isNode && this._nodeRes) {\n return this._nodeRes.hasHeader(name);\n }\n return name.toLowerCase() in this._headers;\n }\n\n removeHeader(name: string): void {\n if (this.headersSent) {\n throw new Error('Cannot remove headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.removeHeader(name);\n }\n\n delete this._headers[name.toLowerCase()];\n }\n\n writeHead(statusCode: number, statusMessage?: string | OutgoingHttpHeaders, headers?: OutgoingHttpHeaders): this {\n if (this.headersSent) {\n throw new Error('Cannot write headers after they are sent');\n }\n\n this.statusCode = statusCode;\n\n if (typeof statusMessage === 'string') {\n this.statusMessage = statusMessage;\n if (headers) {\n for (const key in headers) {\n this.setHeader(key, headers[key]!);\n }\n }\n } else if (statusMessage) {\n for (const key in statusMessage) {\n this.setHeader(key, statusMessage[key]!);\n }\n }\n\n if (isNode && this._nodeRes) {\n if (typeof statusMessage === 'string') {\n this._nodeRes.writeHead(statusCode, statusMessage, headers);\n } else {\n this._nodeRes.writeHead(statusCode, statusMessage);\n }\n }\n\n this.headersSent = true;\n return this;\n }\n\n write(chunk: any, encoding?: BufferEncoding | (() => void), callback?: () => void): boolean {\n if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n if (isNode && this._nodeRes) {\n return this._nodeRes.write(chunk, encoding, callback);\n }\n\n this._body += chunk;\n queueCallback(callback);\n\n return true;\n }\n\n end(chunk?: any, encoding?: BufferEncoding | (() => void), callback?: () => void): this {\n if (this._finished) {\n return this;\n }\n\n if (typeof chunk === 'function') {\n callback = chunk;\n chunk = undefined;\n } else if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (chunk !== undefined) {\n this.write(chunk, encoding as BufferEncoding);\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n this._finished = true;\n\n if (isNode && this._nodeRes) {\n // Don't pass chunk to end() since we already wrote it via this.write() above\n this._nodeRes.end(callback);\n this.emit('finish');\n } else {\n // Bun/Deno - ultra-optimized inline Response creation\n const response = new Response(this._body, {\n status: this.statusCode,\n statusText: this.statusMessage,\n headers: headersToInit(this._headers),\n });\n\n if (this._resolve) {\n this._resolve(response);\n }\n\n queueCallback(callback);\n }\n\n return this;\n }\n\n _setResolver(resolve: (response: Response) => void): void {\n this._resolve = resolve;\n }\n\n // Express.js-like methods\n json(data: any, statusCode = 200): this {\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'application/json');\n }\n this.statusCode = statusCode;\n this.end(JSON.stringify(data));\n return this;\n }\n\n send(data: any): this {\n if (typeof data === 'object') {\n return this.json(data);\n }\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'text/plain');\n }\n this.end(String(data));\n return this;\n }\n\n status(code: number): this {\n this.statusCode = code;\n return this;\n }\n}\n\n/**\n * Server - Optimized for each runtime\n */\nexport class Server extends EventEmitter {\n private nativeServer?: any;\n private requestListener?: RequestListener;\n public _listening: boolean = false;\n\n constructor(requestListener?: RequestListener) {\n super();\n this.requestListener = requestListener;\n }\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n listen(port?: number, hostname?: string, listeningListener?: () => void): this;\n listen(port?: number, listeningListener?: () => void): this;\n listen(options?: { port?: number; hostname?: string; backlog?: number }, listeningListener?: () => void): this;\n listen(...args: any[]): this {\n let port = 3000;\n let hostname = '0.0.0.0';\n let callback: (() => void) | undefined;\n\n // Optimized argument parsing\n const firstArg = args[0];\n if (typeof firstArg === 'number') {\n port = firstArg;\n const secondArg = args[1];\n if (typeof secondArg === 'string') {\n hostname = secondArg;\n callback = args[2] || args[3];\n } else if (typeof secondArg === 'function') {\n callback = secondArg;\n }\n } else if (firstArg && typeof firstArg === 'object') {\n port = firstArg.port || 3000;\n hostname = firstArg.hostname || '0.0.0.0';\n callback = args[1];\n }\n\n const self = this;\n\n if (isNode) {\n // Node.js - delegate directly to native http\n this.nativeServer = http.createServer((req: any, res: any) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse(incomingMessage, res);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n\n // Forward upgrade event for WebSocket support\n this.nativeServer.on('upgrade', (req: any, socket: any, head: any) => {\n self.emit('upgrade', req, socket, head);\n });\n\n this.nativeServer.listen(port, hostname, () => {\n this._listening = true;\n this.emit('listening');\n if (callback) callback();\n });\n\n this.nativeServer.on('error', (err: Error) => this.emit('error', err));\n this.nativeServer.on('close', () => {\n this._listening = false;\n this.emit('close');\n });\n } else if (isBun) {\n // Bun - ULTRA-OPTIMIZED direct fast path (zero wrapper overhead)\n // @ts-ignore\n this.nativeServer = Bun.serve({\n port,\n hostname,\n fetch: (req: Request) => {\n // Fast path: Create minimal context object to avoid wrapper classes\n const urlObj = new URL(req.url);\n const pathname = urlObj.pathname + urlObj.search;\n\n // Ultra-lightweight response builder (no class instantiation)\n let statusCode = 200;\n let statusMessage = 'OK';\n let body = '';\n const headers: Record<string, string> = Object.create(null);\n let responseReady = false;\n\n // Minimal IncomingMessage-compatible object (object literal is faster than class)\n const incomingMessage: any = {\n method: req.method,\n url: pathname,\n headers: req.headers,\n httpVersion: '1.1',\n rawHeaders: [],\n _req: req,\n text: () => req.text(),\n json: () => req.json(),\n };\n\n // Minimal ServerResponse-compatible object (inline methods, no inheritance)\n const serverResponse: any = {\n statusCode: 200,\n statusMessage: 'OK',\n headersSent: false,\n _headers: headers,\n\n setHeader(name: string, value: string | string[] | number) {\n headers[name.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value);\n return this;\n },\n\n getHeader(name: string) {\n return headers[name.toLowerCase()];\n },\n\n getHeaders() {\n return { ...headers };\n },\n\n writeHead(status: number, arg2?: any, arg3?: any) {\n statusCode = status;\n this.statusCode = status;\n this.headersSent = true;\n\n if (typeof arg2 === 'string') {\n statusMessage = arg2;\n this.statusMessage = arg2;\n if (arg3) {\n for (const key in arg3) {\n headers[key.toLowerCase()] = arg3[key];\n }\n }\n } else if (arg2) {\n for (const key in arg2) {\n headers[key.toLowerCase()] = arg2[key];\n }\n }\n return this;\n },\n\n write(chunk: any) {\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n body += chunk;\n return true;\n },\n\n end(chunk?: any) {\n if (chunk !== undefined) {\n this.write(chunk);\n }\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n responseReady = true;\n return this;\n },\n };\n\n // Execute handler\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n }\n\n // Inline Response creation (fastest path - no function calls)\n if (responseReady) {\n return new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n });\n }\n\n // Fallback for async (rare case)\n return new Promise<Response>((resolve) => {\n serverResponse.end = (chunk?: any) => {\n if (chunk !== undefined) {\n body += chunk;\n }\n resolve(new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n }));\n };\n });\n },\n error: createErrorResponse,\n });\n\n emitListeningWithCallback(this, callback);\n } else if (isDeno) {\n // Deno - use Deno.serve()\n // @ts-ignore\n this.nativeServer = Deno.serve({\n port,\n hostname,\n handler: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n onError: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n });\n\n emitListeningWithCallback(this, callback);\n }\n\n return this;\n }\n\n close(callback?: (err?: Error) => void): this {\n if (!this.nativeServer) {\n if (callback) queueMicrotask(() => callback());\n return this;\n }\n\n if (isNode) {\n this.nativeServer.close(callback);\n } else if (isBun) {\n this.nativeServer.stop();\n closeAndEmit(this, callback);\n } else if (isDeno) {\n // @ts-ignore\n this.nativeServer.shutdown();\n closeAndEmit(this, callback);\n }\n\n return this;\n }\n\n address(): { port: number; family: string; address: string } | null {\n if (!this.nativeServer) return null;\n\n if (isNode) {\n const addr = this.nativeServer.address();\n if (!addr) return null;\n if (typeof addr === 'string') {\n return createAddress(0, addr, 'unix');\n }\n return addr;\n } else if (isBun) {\n return createAddress(this.nativeServer.port, this.nativeServer.hostname);\n } else if (isDeno) {\n // @ts-ignore\n const addr = this.nativeServer.addr;\n return createAddress(addr.port, addr.hostname);\n }\n\n return null;\n }\n\n get listening(): boolean {\n return this._listening;\n }\n}\n\n/**\n * Request listener type\n */\nexport type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Request options\n */\nexport interface RequestOptions {\n method?: string;\n headers?: OutgoingHttpHeaders;\n timeout?: number;\n signal?: AbortSignal;\n}\n\n/**\n * Server options\n */\nexport interface ServerOptions {\n IncomingMessage?: typeof IncomingMessage;\n ServerResponse?: typeof ServerResponse;\n}\n\n/**\n * Client request - lightweight wrapper\n */\nexport class ClientRequest extends EventEmitter {\n constructor(_url: string | URL, _options: RequestOptions = {}) {\n super();\n }\n\n write(_chunk: any): boolean {\n return true;\n }\n\n end(callback?: () => void): void {\n queueCallback(callback);\n }\n}\n\n/**\n * HTTP Agent\n */\nexport class Agent {\n constructor(public options?: any) { }\n}\n\n/**\n * Create HTTP server\n */\nexport function createServer(requestListener?: RequestListener): Server;\nexport function createServer(options: ServerOptions, requestListener?: RequestListener): Server;\nexport function createServer(\n optionsOrListener?: ServerOptions | RequestListener,\n requestListener?: RequestListener\n): Server {\n return new Server(typeof optionsOrListener === 'function' ? optionsOrListener : requestListener);\n}\n\n/**\n * Make HTTP request - optimized per runtime\n */\nexport function request(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n const urlString = typeof url === 'string' ? url : url.toString();\n const req = new ClientRequest(urlString, options);\n\n if (isNode) {\n const urlObj = new URL(urlString);\n const client = urlObj.protocol === 'https:' ? https : http;\n\n const nodeReq = client.request(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers,\n timeout: options?.timeout,\n signal: options?.signal,\n }, (res: any) => {\n const incomingMessage = new IncomingMessage(res);\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n });\n\n nodeReq.on('error', (error: Error) => req.emit('error', error));\n nodeReq.end();\n } else {\n // Bun/Deno - use optimized fetch\n queueMicrotask(async () => {\n try {\n const response = await fetch(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers as HeadersInit,\n signal: options?.signal,\n });\n\n const fetchRequest = new Request(urlString);\n const incomingMessage = new IncomingMessage(fetchRequest);\n incomingMessage.statusCode = response.status;\n incomingMessage.statusMessage = response.statusText;\n\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n } catch (error) {\n req.emit('error', error);\n }\n });\n }\n\n return req;\n}\n\n/**\n * Make HTTP GET request\n */\nexport function get(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n return request(url, { ...options, method: 'GET' }, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n createServer,\n request,\n get,\n Server,\n IncomingMessage,\n ServerResponse,\n Agent,\n ClientRequest,\n METHODS,\n STATUS_CODES,\n getRuntime,\n};\n","/**\n * File System module with unified API across runtimes\n * Compatible with Node.js 'fs' module API\n * - Node.js: uses 'fs' module\n * - Bun: uses Bun.file() and native APIs\n * - Deno: uses Deno.readFile(), etc.\n */\n\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Check if runtime is Bun or Deno (eliminates duplication in Deno API calls)\n */\nconst isBunOrDeno = isBun || isDeno;\n\n/**\n * Helper: Parse options from string or object (eliminates duplication in options parsing)\n */\nfunction parseOptions<T>(options: T | string | undefined, defaultValue: T): T {\n return typeof options === 'string' ? { encoding: options } as T : options || defaultValue;\n}\n\n/**\n * Helper: Decode content with optional encoding (eliminates duplication in read operations)\n */\nfunction decodeContent(content: ArrayBuffer | Uint8Array, encoding?: string | null): string | Buffer {\n if (encoding) {\n return new TextDecoder(encoding).decode(content);\n }\n return Buffer.from(content instanceof ArrayBuffer ? new Uint8Array(content) : content);\n}\n\n/**\n * Helper: Convert data to Uint8Array (eliminates duplication in write operations)\n */\nfunction dataToUint8Array(data: string | Buffer | Uint8Array): Uint8Array {\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n if (data instanceof Buffer) {\n return new Uint8Array(data);\n }\n return data;\n}\n\n/**\n * Helper: Process directory entries (eliminates duplication in readdir operations)\n */\nfunction processDenoEntries(iterator: any, withFileTypes?: boolean): any[] {\n const entries: any[] = [];\n for (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n/**\n * Helper: Process directory entries async (eliminates duplication in async readdir)\n */\nasync function processDenoEntriesAsync(iterator: any, withFileTypes?: boolean): Promise<any[]> {\n const entries: any[] = [];\n for await (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n// Pre-load fs module for Node.js\nlet fs: any, fsPromises: any;\nif (isNode) {\n fs = require('fs');\n fsPromises = require('fs/promises');\n}\n\n/**\n * File encoding types\n */\nexport type BufferEncoding =\n | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2'\n | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';\n\n/**\n * Read file options\n */\nexport interface ReadFileOptions {\n encoding?: BufferEncoding | null;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Write file options\n */\nexport interface WriteFileOptions {\n encoding?: BufferEncoding | null;\n mode?: number;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Mkdir options\n */\nexport interface MkdirOptions {\n recursive?: boolean;\n mode?: number;\n}\n\n/**\n * Readdir options\n */\nexport interface ReaddirOptions {\n encoding?: BufferEncoding | null;\n withFileTypes?: boolean;\n recursive?: boolean;\n}\n\n/**\n * File stats\n */\nexport interface Stats {\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n dev: number;\n ino: number;\n mode: number;\n nlink: number;\n uid: number;\n gid: number;\n rdev: number;\n size: number;\n blksize: number;\n blocks: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n atime: Date;\n mtime: Date;\n ctime: Date;\n birthtime: Date;\n}\n\n/**\n * Directory entry\n */\nexport interface Dirent {\n name: string;\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n}\n\n/**\n * Read file (async)\n */\nexport async function readFile(path: string, options?: ReadFileOptions | BufferEncoding): Promise<string | Buffer> {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readFile(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = await file.arrayBuffer();\n return decodeContent(content, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = await Deno.readFile(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read file (sync)\n */\nexport function readFileSync(path: string, options?: ReadFileOptions | BufferEncoding): string | Buffer {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fs.readFileSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = file.arrayBuffer();\n return decodeContent(content as ArrayBuffer, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = Deno.readFileSync(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Write file (async)\n */\nexport async function writeFile(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.writeFile(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n await Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.writeFile(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Write file (sync)\n */\nexport function writeFileSync(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.writeFileSync(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n Deno.writeFileSync(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Append file (async)\n */\nexport async function appendFile(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.appendFile(path, data, opts);\n } else {\n if (await exists(path)) {\n const existing = await readFile(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n await writeFile(path, combined, opts);\n } else {\n await writeFile(path, data, opts);\n }\n }\n}\n\n/**\n * Append file (sync)\n */\nexport function appendFileSync(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.appendFileSync(path, data, opts);\n } else {\n if (existsSync(path)) {\n const existing = readFileSync(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n writeFileSync(path, combined, opts);\n } else {\n writeFileSync(path, data, opts);\n }\n }\n}\n\n/**\n * Check if file/directory exists (async)\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if file/directory exists (sync)\n */\nexport function existsSync(path: string): boolean {\n try {\n statSync(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get file stats (async)\n */\nexport async function stat(path: string): Promise<Stats> {\n if (isNode) {\n return fsPromises.stat(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n const exists = await file.exists();\n\n if (!exists) {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n // Create a Stats-like object\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = await Deno.stat(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Get file stats (sync)\n */\nexport function statSync(path: string): Stats {\n if (isNode) {\n return fs.statSync(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n\n // Bun doesn't have sync exists check, so we try to read\n try {\n file.arrayBuffer();\n } catch {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = Deno.statSync(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Create directory (async)\n */\nexport async function mkdir(path: string, options?: MkdirOptions | number): Promise<void> {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n await fsPromises.mkdir(path, opts);\n } else if (isBun) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Create directory (sync)\n */\nexport function mkdirSync(path: string, options?: MkdirOptions | number): void {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n fs.mkdirSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Read directory (async)\n */\nexport async function readdir(path: string, options?: ReaddirOptions | BufferEncoding): Promise<string[] | Dirent[]> {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readdir(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntriesAsync(Deno.readDir(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read directory (sync)\n */\nexport function readdirSync(path: string, options?: ReaddirOptions | BufferEncoding): string[] | Dirent[] {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fs.readdirSync(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntries(Deno.readDirSync(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Remove file (async)\n */\nexport async function unlink(path: string): Promise<void> {\n if (isNode) {\n return fsPromises.unlink(path);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path);\n }\n}\n\n/**\n * Remove file (sync)\n */\nexport function unlinkSync(path: string): void {\n if (isNode) {\n fs.unlinkSync(path);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path);\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path);\n }\n}\n\n/**\n * Remove directory (async)\n */\nexport async function rmdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n if (isNode) {\n return fsPromises.rmdir(path, options);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Remove directory (sync)\n */\nexport function rmdirSync(path: string, options?: { recursive?: boolean }): void {\n if (isNode) {\n fs.rmdirSync(path, options);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Rename/move file (async)\n */\nexport async function rename(oldPath: string, newPath: string): Promise<void> {\n if (isNode) {\n return fsPromises.rename(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n }\n}\n\n/**\n * Rename/move file (sync)\n */\nexport function renameSync(oldPath: string, newPath: string): void {\n if (isNode) {\n fs.renameSync(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n }\n}\n\n/**\n * Copy file (async)\n */\nexport async function copyFile(src: string, dest: string, flags?: number): Promise<void> {\n if (isNode) {\n return fsPromises.copyFile(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n }\n}\n\n/**\n * Copy file (sync)\n */\nexport function copyFileSync(src: string, dest: string, flags?: number): void {\n if (isNode) {\n fs.copyFileSync(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n }\n}\n\n/**\n * Resolve pathname to absolute path (async)\n */\nexport async function realpath(path: string, options?: { encoding?: BufferEncoding }): Promise<string> {\n if (isNode) {\n return fsPromises.realpath(path, options);\n } else if (isBun) {\n // Bun supports fs.promises.realpath\n const fs = require('fs/promises');\n return fs.realpath(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return await Deno.realPath(path);\n }\n return path;\n}\n\n/**\n * Resolve pathname to absolute path (sync)\n */\nexport function realpathSync(path: string, options?: { encoding?: BufferEncoding }): string {\n if (isNode) {\n return fs.realpathSync(path, options);\n } else if (isBun) {\n // Bun supports fs.realpathSync\n const fs = require('fs');\n return fs.realpathSync(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return Deno.realPathSync(path);\n }\n return path;\n}\n\n/**\n * Helper: Create Stats object\n */\nfunction createStatsObject(_path: string, size: number, isDir: boolean): Stats {\n const now = Date.now();\n return {\n isFile: () => !isDir,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: isDir ? 16877 : 33188,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs: now,\n mtimeMs: now,\n ctimeMs: now,\n birthtimeMs: now,\n atime: new Date(now),\n mtime: new Date(now),\n ctime: new Date(now),\n birthtime: new Date(now),\n };\n}\n\n/**\n * Helper: Create Stats from Deno FileInfo\n */\nfunction createStatsFromDenoFileInfo(info: any): Stats {\n return {\n isFile: () => info.isFile,\n isDirectory: () => info.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => info.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: info.dev || 0,\n ino: info.ino || 0,\n mode: info.mode || 0,\n nlink: info.nlink || 1,\n uid: info.uid || 0,\n gid: info.gid || 0,\n rdev: 0,\n size: info.size,\n blksize: info.blksize || 4096,\n blocks: info.blocks || Math.ceil(info.size / 512),\n atimeMs: info.atime?.getTime() || Date.now(),\n mtimeMs: info.mtime?.getTime() || Date.now(),\n ctimeMs: info.birthtime?.getTime() || Date.now(),\n birthtimeMs: info.birthtime?.getTime() || Date.now(),\n atime: info.atime || new Date(),\n mtime: info.mtime || new Date(),\n ctime: info.birthtime || new Date(),\n birthtime: info.birthtime || new Date(),\n };\n}\n\n/**\n * Helper: Create Dirent from Deno DirEntry\n */\nfunction createDirentFromDenoEntry(entry: any): Dirent {\n return {\n name: entry.name,\n isFile: () => entry.isFile,\n isDirectory: () => entry.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => entry.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Promises API (re-export for compatibility)\n */\nexport const promises = {\n readFile,\n writeFile,\n appendFile,\n stat,\n mkdir,\n readdir,\n unlink,\n rmdir,\n rename,\n copyFile,\n realpath,\n};\n\n/**\n * Default export\n */\nexport default {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync,\n appendFile,\n appendFileSync,\n exists,\n existsSync,\n stat,\n statSync,\n mkdir,\n mkdirSync,\n readdir,\n readdirSync,\n unlink,\n unlinkSync,\n rmdir,\n rmdirSync,\n rename,\n renameSync,\n copyFile,\n copyFileSync,\n realpath,\n realpathSync,\n promises,\n getRuntime,\n};\n","/**\n * Development server with HMR support\n * Cross-runtime transpilation support\n * - Node.js: uses esbuild\n * - Bun: uses Bun.Transpiler\n * - Deno: uses Deno.emit\n */\n\nimport { createServer, IncomingMessage, ServerResponse, request as httpRequest } from './http';\nimport { request as httpsRequest } from './https';\nimport { WebSocketServer, WebSocket, ReadyState } from './ws';\nimport { watch } from './chokidar';\nimport { readFile, stat, realpath } from './fs';\nimport { join, extname, relative, resolve, normalize, sep } from './path';\nimport { lookup } from './mime-types';\nimport { isBun, isDeno } from './runtime';\nimport type { DevServerOptions, DevServer, HMRMessage, Child, VNode, ProxyConfig } from './types';\nimport { dom } from './dom';\n\n// ===== Router =====\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'HEAD' | 'ALL';\n\nexport interface ElitRequest extends IncomingMessage {\n body?: any;\n query?: Record<string, string>;\n params?: Record<string, string>;\n}\n\nexport interface ElitResponse extends ServerResponse {\n json(data: any, statusCode?: number): this;\n send(data: any): this;\n status(code: number): this;\n}\n\nexport interface ServerRouteContext {\n req: ElitRequest;\n res: ElitResponse;\n params: Record<string, string>;\n query: Record<string, string>;\n body: any;\n headers: Record<string, string | string[] | undefined>;\n user?: any;\n}\n\nexport type ServerRouteHandler = (ctx: ServerRouteContext, next?: () => Promise<void>) => void | Promise<void>;\nexport type Middleware = (ctx: ServerRouteContext, next: () => Promise<void>) => void | Promise<void>;\n\ninterface ServerRoute {\n method: HttpMethod;\n pattern: RegExp;\n paramNames: string[];\n handler: ServerRouteHandler;\n middlewares: Middleware[];\n}\n\n\nexport class ServerRouter {\n private routes: ServerRoute[] = [];\n private middlewares: Middleware[] = [];\n\n // Accept both internal Middleware and Express-style `(req, res, next?)` functions\n // Also support path-based middleware like Express: use(path, middleware)\n use(...args: Array<any>): this {\n if (typeof args[0] === 'string') {\n // Path-based middleware: use(path, ...middlewares)\n const path = args[0];\n const middlewares = args.slice(1);\n return this.addRoute('ALL', path, middlewares);\n }\n // Global middleware\n const mw = args[0];\n this.middlewares.push(this.toMiddleware(mw));\n return this;\n }\n\n // Express-like .all() method - matches all HTTP methods\n all = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('ALL', path, handlers as any);\n\n // Support per-route middleware: accept middleware(s) before the final handler\n get = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('GET', path, handlers as any);\n post = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('POST', path, handlers as any);\n put = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('PUT', path, handlers as any);\n delete = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('DELETE', path, handlers as any);\n patch = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('PATCH', path, handlers as any);\n options = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('OPTIONS', path, handlers as any);\n head = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('HEAD', path, handlers as any);\n\n // Convert Express-like handler/middleware to internal Middleware\n private toMiddleware(fn: Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)): Middleware {\n // If it's already our Middleware, return as-is\n if ((fn as Middleware).length === 2 && (fn as any).name !== 'bound ') {\n // Cannot reliably detect, so always wrap to normalize behavior\n }\n\n return async (ctx: ServerRouteContext, next: () => Promise<void>) => {\n const f: any = fn;\n\n // Express-style with (req, res, next)\n if (f.length >= 3) {\n // Provide a next that triggers our next\n const expressNext = () => {\n // call our next but don't await here\n void next();\n };\n\n const res = f(ctx.req, ctx.res, expressNext);\n if (res && typeof res.then === 'function') await res;\n // If express middleware didn't call next(), we simply return and stop the chain\n return;\n }\n\n // Express-style with (req, res) - treat as middleware that continues after completion\n if (f.length === 2) {\n const res = f(ctx.req, ctx.res);\n if (res && typeof res.then === 'function') await res;\n await next();\n return;\n }\n\n // Our internal handler style (ctx) => ... - call it and continue\n const out = (fn as ServerRouteHandler)(ctx);\n if (out && typeof out.then === 'function') await out;\n await next();\n };\n }\n\n private addRoute(method: HttpMethod, path: string, handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this {\n const { pattern, paramNames } = this.pathToRegex(path);\n // Last item is the actual route handler, preceding items are middlewares\n if (!handlers || handlers.length === 0) throw new Error('Route must include a handler');\n const rawMiddlewares = handlers.slice(0, handlers.length - 1);\n const rawLast = handlers[handlers.length - 1];\n\n const middlewares = rawMiddlewares.map(h => this.toMiddleware(h as any));\n\n // Normalize last handler: if it's express-like, wrap into ServerRouteHandler\n const last = ((): ServerRouteHandler => {\n const f: any = rawLast;\n if (typeof f !== 'function') throw new Error('Route handler must be a function');\n\n if (f.length >= 2) {\n // Express-style final handler\n return async (ctx: ServerRouteContext) => {\n if (f.length >= 3) {\n // expects next\n await new Promise<void>((resolve) => {\n try {\n f(ctx.req, ctx.res, () => resolve());\n } catch (e) { resolve(); }\n });\n } else {\n const res = f(ctx.req, ctx.res);\n if (res && typeof res.then === 'function') await res;\n }\n };\n }\n\n // Already a ServerRouteHandler (ctx)\n return f as ServerRouteHandler;\n })();\n\n this.routes.push({ method, pattern, paramNames, handler: last, middlewares });\n return this;\n }\n\n private pathToRegex(path: string): { pattern: RegExp; paramNames: string[] } {\n const paramNames: string[] = [];\n const pattern = path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\//g, '\\\\/').replace(/:(\\w+)/g, (_, name) => (paramNames.push(name), '([^\\\\/]+)'));\n return { pattern: new RegExp(`^${pattern}$`), paramNames };\n }\n\n private parseQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n queryString.split('&').forEach(p => {\n const [k, v] = p.split('=');\n if (k) {\n query[k] = v !== undefined ? v : '';\n }\n });\n return query;\n }\n\n /**\n * List all registered routes for debugging\n */\n listRoutes(): Array<{ method: string; pattern: string; paramNames: string[]; handler: string }> {\n return this.routes.map(route => ({\n method: route.method,\n pattern: route.pattern.source,\n paramNames: route.paramNames,\n handler: route.handler.name || '(anonymous)'\n }));\n }\n\n private async parseBody(req: IncomingMessage): Promise<any> {\n // Bun compatibility: Check if req has text() method (Bun Request)\n if (typeof (req as any).text === 'function') {\n try {\n const text = await (req as any).text();\n if (!text) return {};\n\n const contentType = req.headers['content-type'];\n const ct = (Array.isArray(contentType) ? contentType[0] : (contentType || '')).toLowerCase();\n\n // Parse JSON (either by content-type or if it looks like JSON)\n if (ct.includes('application/json') || ct.includes('json') || text.trim().startsWith('{') || text.trim().startsWith('[')) {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n\n // Parse URL-encoded\n if (ct.includes('application/x-www-form-urlencoded') || ct.includes('urlencoded')) {\n return Object.fromEntries(new URLSearchParams(text));\n }\n\n // Return raw text\n return text;\n } catch (e) {\n console.log('[ServerRouter] Bun body parse error:', e);\n return {};\n }\n }\n\n // Node.js stream-based parsing\n return new Promise((resolve, reject) => {\n const contentLengthHeader = req.headers['content-length'];\n const contentLength = parseInt(Array.isArray(contentLengthHeader) ? contentLengthHeader[0] : (contentLengthHeader || '0'), 10);\n\n if (contentLength === 0) {\n resolve({});\n return;\n }\n\n const chunks: Buffer[] = [];\n\n req.on('data', chunk => {\n chunks.push(Buffer.from(chunk));\n });\n\n req.on('end', () => {\n const body = Buffer.concat(chunks).toString();\n try {\n const ct = req.headers['content-type'] || '';\n resolve(ct.includes('json') ? (body ? JSON.parse(body) : {}) : ct.includes('urlencoded') ? Object.fromEntries(new URLSearchParams(body)) : body);\n } catch (e) {\n reject(e);\n }\n });\n\n req.on('error', reject);\n });\n }\n\n async handle(req: IncomingMessage, res: ServerResponse): Promise<boolean> {\n const method = req.method as HttpMethod, url = req.url || '/', path = url.split('?')[0];\n\n for (const route of this.routes) {\n if (route.method !== 'ALL' && route.method !== method) continue;\n if (!route.pattern.test(path)) continue;\n const match = path.match(route.pattern)!;\n const params = Object.fromEntries(route.paramNames.map((name, i) => [name, match[i + 1]]));\n\n let body: any = {};\n if (['POST', 'PUT', 'PATCH'].includes(method)) {\n try {\n body = await this.parseBody(req);\n // Attach body to req for Express-like compatibility\n (req as ElitRequest).body = body;\n }\n catch (e) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end('{\"error\":\"Invalid request body\"}');\n return true;\n }\n }\n\n // Parse query string and attach to req for Express-like compatibility\n const query = this.parseQuery(url);\n (req as ElitRequest).query = query;\n\n // Attach params to req for Express-like compatibility\n (req as ElitRequest).params = params;\n\n // Add Express-like response helpers to context\n const ctx: ServerRouteContext = {\n req: req as ElitRequest,\n res: res as ElitResponse,\n params,\n query,\n body,\n headers: req.headers as any\n };\n\n // Build middleware chain: global middlewares -> route middlewares -> final handler\n // Pass `next` to the final handler so it can optionally call await next()\n const routeMiddlewares = route.middlewares || [];\n const chain: Middleware[] = [\n ...this.middlewares,\n ...routeMiddlewares,\n async (c, n) => { await route.handler(c, n); }\n ];\n\n let i = 0;\n const next = async () => {\n if (i >= chain.length) return;\n const mw = chain[i++];\n await mw(ctx, next);\n };\n\n try {\n await next();\n }\n catch (e) {\n console.error('[ServerRouter] Route error:', e);\n !res.headersSent && (res.writeHead(500, { 'Content-Type': 'application/json' }), res.end(JSON.stringify({ error: 'Internal Server Error', message: e instanceof Error ? e.message : 'Unknown' })));\n }\n return true;\n }\n\n // No route matched\n return false;\n }\n}\n\nexport const json = (res: ServerResponse, data: any, status = 200) => (res.writeHead(status, { 'Content-Type': 'application/json' }), res.end(JSON.stringify(data)));\nexport const text = (res: ServerResponse, data: string, status = 200) => (res.writeHead(status, { 'Content-Type': 'text/plain' }), res.end(data));\nexport const html = (res: ServerResponse, data: string, status = 200) => (res.writeHead(status, { 'Content-Type': 'text/html' }), res.end(data));\nexport const status = (res: ServerResponse, code: number, message = '') => (res.writeHead(code, { 'Content-Type': 'application/json' }), res.end(JSON.stringify({ status: code, message })));\n\n// Helper functions for common responses\nconst sendError = (res: ServerResponse, code: number, msg: string): void => { res.writeHead(code, { 'Content-Type': 'text/plain' }); res.end(msg); };\nconst send404 = (res: ServerResponse, msg = 'Not Found'): void => sendError(res, 404, msg);\nconst send403 = (res: ServerResponse, msg = 'Forbidden'): void => sendError(res, 403, msg);\nconst send500 = (res: ServerResponse, msg = 'Internal Server Error'): void => sendError(res, 500, msg);\n\n// Import map for all Elit client-side modules (reused in serveFile and serveSSR)\nconst createElitImportMap = async (rootDir: string, basePath: string = '', mode: 'dev' | 'preview' = 'dev'): Promise<string> => {\n // In dev mode, use built files from node_modules/elit/dist\n // In preview mode, use built files from dist\n const srcPath = mode === 'dev'\n ? (basePath ? `${basePath}/node_modules/elit/src` : '/node_modules/elit/src')\n : (basePath ? `${basePath}/node_modules/elit/dist` : '/node_modules/elit/dist');\n\n const fileExt = mode === 'dev' ? '.ts' : '.mjs';\n\n // Base Elit imports\n const elitImports: ImportMapEntry = {\n \"elit\": `${srcPath}/index${fileExt}`,\n \"elit/\": `${srcPath}/`,\n \"elit/dom\": `${srcPath}/dom${fileExt}`,\n \"elit/state\": `${srcPath}/state${fileExt}`,\n \"elit/style\": `${srcPath}/style${fileExt}`,\n \"elit/el\": `${srcPath}/el${fileExt}`,\n \"elit/router\": `${srcPath}/router${fileExt}`,\n \"elit/hmr\": `${srcPath}/hmr${fileExt}`,\n \"elit/types\": `${srcPath}/types${fileExt}`\n };\n\n // Generate external library imports\n const externalImports = await generateExternalImportMaps(rootDir, basePath);\n\n // Merge imports (Elit imports take precedence)\n const allImports = { ...externalImports, ...elitImports };\n\n return `<script type=\"importmap\">${JSON.stringify({ imports: allImports }, null, 2)}</script>`;\n};\n\n// Helper function to generate HMR script (reused in serveFile and serveSSR)\nconst createHMRScript = (port: number, wsPath: string): string =>\n `<script>(function(){let ws;let retries=0;let maxRetries=5;function connect(){ws=new WebSocket('ws://'+window.location.hostname+':${port}${wsPath}');ws.onopen=()=>{console.log('[Elit HMR] Connected');retries=0};ws.onmessage=(e)=>{const d=JSON.parse(e.data);if(d.type==='update'){console.log('[Elit HMR] File updated:',d.path);window.location.reload()}else if(d.type==='reload'){console.log('[Elit HMR] Reloading...');window.location.reload()}else if(d.type==='error')console.error('[Elit HMR] Error:',d.error)};ws.onclose=()=>{if(retries<maxRetries){retries++;setTimeout(connect,1000*retries)}else if(retries===maxRetries){console.log('[Elit HMR] Connection closed. Start dev server to reconnect.')}};ws.onerror=()=>{ws.close()}}connect()})();</script>`;\n\n// Helper function to rewrite relative paths with basePath (reused in serveFile and serveSSR)\nconst rewriteRelativePaths = (html: string, basePath: string): string => {\n if (!basePath) return html;\n // Rewrite paths starting with ./ or just relative paths (not starting with /, http://, https://)\n html = html.replace(/(<script[^>]+src=[\"'])(?!https?:\\/\\/|\\/)(\\.\\/)?([^\"']+)([\"'])/g, `$1${basePath}/$3$4`);\n html = html.replace(/(<link[^>]+href=[\"'])(?!https?:\\/\\/|\\/)(\\.\\/)?([^\"']+)([\"'])/g, `$1${basePath}/$3$4`);\n return html;\n};\n\n// Helper function to normalize basePath (reused in serveFile and serveSSR)\nconst normalizeBasePath = (basePath?: string): string => basePath && basePath !== '/' ? basePath : '';\n\n// Helper function to find dist or node_modules directory by walking up the directory tree\nasync function findSpecialDir(startDir: string, targetDir: string): Promise<string | null> {\n let currentDir = startDir;\n const maxLevels = 5; // Prevent infinite loop\n\n for (let i = 0; i < maxLevels; i++) {\n const targetPath = resolve(currentDir, targetDir);\n try {\n const stats = await stat(targetPath);\n if (stats.isDirectory()) {\n return currentDir; // Return the parent directory containing the target\n }\n } catch {\n // Directory doesn't exist, try parent\n }\n\n const parentDir = resolve(currentDir, '..');\n if (parentDir === currentDir) break; // Reached filesystem root\n currentDir = parentDir;\n }\n\n return null;\n}\n\n// ===== External Library Import Maps =====\n\ninterface PackageExports {\n [key: string]: string | PackageExports;\n}\n\ninterface PackageJson {\n name?: string;\n main?: string;\n module?: string;\n browser?: string | Record<string, string | false>;\n exports?: string | PackageExports | { [key: string]: any };\n type?: 'module' | 'commonjs';\n sideEffects?: boolean | string[];\n}\n\ninterface ImportMapEntry {\n [importName: string]: string;\n}\n\n// Cache for generated import maps to avoid re-scanning\nconst importMapCache = new Map<string, ImportMapEntry>();\n\n/**\n * Clear import map cache (useful when packages are added/removed)\n */\nexport function clearImportMapCache(): void {\n importMapCache.clear();\n}\n\n/**\n * Scan node_modules and generate import maps for external libraries\n */\nasync function generateExternalImportMaps(rootDir: string, basePath: string = ''): Promise<ImportMapEntry> {\n const cacheKey = `${rootDir}:${basePath}`;\n if (importMapCache.has(cacheKey)) {\n return importMapCache.get(cacheKey)!;\n }\n\n const importMap: ImportMapEntry = {};\n const nodeModulesPath = await findNodeModules(rootDir);\n\n if (!nodeModulesPath) {\n importMapCache.set(cacheKey, importMap);\n return importMap;\n }\n\n try {\n const { readdir } = await import('./fs');\n const packages = await readdir(nodeModulesPath);\n\n for (const pkgEntry of packages) {\n // Convert Dirent to string\n const pkg = typeof pkgEntry === 'string' ? pkgEntry : pkgEntry.name;\n\n // Skip special directories\n if (pkg.startsWith('.')) continue;\n\n // Handle scoped packages (@org/package)\n if (pkg.startsWith('@')) {\n try {\n const scopedPackages = await readdir(join(nodeModulesPath, pkg));\n for (const scopedEntry of scopedPackages) {\n const scopedPkg = typeof scopedEntry === 'string' ? scopedEntry : scopedEntry.name;\n const fullPkgName = `${pkg}/${scopedPkg}`;\n await processPackage(nodeModulesPath, fullPkgName, importMap, basePath);\n }\n } catch {\n // Skip if can't read scoped directory\n }\n } else {\n await processPackage(nodeModulesPath, pkg, importMap, basePath);\n }\n }\n } catch (error) {\n console.error('[Import Maps] Error scanning node_modules:', error);\n }\n\n importMapCache.set(cacheKey, importMap);\n return importMap;\n}\n\n/**\n * Find node_modules directory by walking up the directory tree\n */\nasync function findNodeModules(startDir: string): Promise<string | null> {\n const foundDir = await findSpecialDir(startDir, 'node_modules');\n return foundDir ? join(foundDir, 'node_modules') : null;\n}\n\n/**\n * Check if a package is browser-compatible\n */\nfunction isBrowserCompatible(pkgName: string, pkgJson: PackageJson): boolean {\n // Skip build tools, compilers, and Node.js-only packages\n const buildTools = [\n 'typescript', 'esbuild', '@esbuild/',\n 'tsx', 'tsup', 'rollup', 'vite', 'webpack', 'parcel',\n 'terser', 'uglify', 'babel', '@babel/',\n 'postcss', 'autoprefixer', 'cssnano',\n 'sass', 'less', 'stylus'\n ];\n\n const nodeOnly = [\n 'node-', '@node-', 'fsevents', 'chokidar',\n 'express', 'koa', 'fastify', 'nest',\n 'commander', 'yargs', 'inquirer', 'chalk', 'ora',\n 'nodemon', 'pm2', 'dotenv'\n ];\n\n const testingTools = [\n 'jest', 'vitest', 'mocha', 'chai', 'jasmine',\n '@jest/', '@testing-library/', '@vitest/',\n 'playwright', 'puppeteer', 'cypress'\n ];\n\n const linters = [\n 'eslint', '@eslint/', 'prettier', 'tslint',\n 'stylelint', 'commitlint'\n ];\n\n const typeDefinitions = [\n '@types/', '@typescript-eslint/'\n ];\n\n const utilities = [\n 'get-tsconfig', 'resolve-pkg-maps', 'pkg-types',\n 'fast-glob', 'globby', 'micromatch',\n 'execa', 'cross-spawn', 'shelljs'\n ];\n\n // Combine all skip lists\n const skipPatterns = [\n ...buildTools,\n ...nodeOnly,\n ...testingTools,\n ...linters,\n ...typeDefinitions,\n ...utilities\n ];\n\n // Check if package name matches skip patterns\n if (skipPatterns.some(pattern => pkgName.startsWith(pattern))) {\n return false;\n }\n\n // Skip CommonJS-only lodash (prefer lodash-es)\n if (pkgName === 'lodash') {\n return false;\n }\n\n // Prefer packages with explicit browser field or module field (ESM)\n if (pkgJson.browser || pkgJson.module) {\n return true;\n }\n\n // Prefer packages with exports field that includes \"import\" or \"browser\"\n if (pkgJson.exports) {\n const exportsStr = JSON.stringify(pkgJson.exports);\n if (exportsStr.includes('\"import\"') || exportsStr.includes('\"browser\"')) {\n return true;\n }\n }\n\n // Skip packages that are explicitly marked as type: \"commonjs\" without module/browser fields\n if (pkgJson.type === 'commonjs' && !pkgJson.module && !pkgJson.browser) {\n return false;\n }\n\n // Default: allow if it has exports or is type: \"module\"\n return !!(pkgJson.exports || pkgJson.type === 'module' || pkgJson.module);\n}\n\n/**\n * Process a single package and add its exports to the import map\n */\nasync function processPackage(\n nodeModulesPath: string,\n pkgName: string,\n importMap: ImportMapEntry,\n basePath: string\n): Promise<void> {\n const pkgPath = join(nodeModulesPath, pkgName);\n const pkgJsonPath = join(pkgPath, 'package.json');\n\n try {\n const pkgJsonContent = await readFile(pkgJsonPath);\n const pkgJson: PackageJson = JSON.parse(pkgJsonContent.toString());\n\n // Check if package is browser-compatible\n if (!isBrowserCompatible(pkgName, pkgJson)) {\n return;\n }\n\n const baseUrl = basePath ? `${basePath}/node_modules/${pkgName}` : `/node_modules/${pkgName}`;\n\n // Handle exports field (modern)\n if (pkgJson.exports) {\n processExportsField(pkgName, pkgJson.exports, baseUrl, importMap);\n }\n // Fallback to main/module/browser fields (legacy)\n else {\n const entryPoint = pkgJson.browser || pkgJson.module || pkgJson.main || 'index.js';\n importMap[pkgName] = `${baseUrl}/${entryPoint}`;\n\n // Add trailing slash for subpath imports\n importMap[`${pkgName}/`] = `${baseUrl}/`;\n }\n } catch {\n // Skip packages without package.json or invalid JSON\n }\n}\n\n/**\n * Process package.json exports field and add to import map\n */\nfunction processExportsField(\n pkgName: string,\n exports: string | PackageExports | { [key: string]: any },\n baseUrl: string,\n importMap: ImportMapEntry\n): void {\n // Simple string export\n if (typeof exports === 'string') {\n importMap[pkgName] = `${baseUrl}/${exports}`;\n importMap[`${pkgName}/`] = `${baseUrl}/`;\n return;\n }\n\n // Object exports\n if (typeof exports === 'object' && exports !== null) {\n // Handle \".\" export (main entry)\n if ('.' in exports) {\n const dotExport = exports['.'];\n const resolved = resolveExport(dotExport);\n if (resolved) {\n importMap[pkgName] = `${baseUrl}/${resolved}`;\n }\n } else if ('import' in exports) {\n // Root-level import/require\n const resolved = resolveExport(exports);\n if (resolved) {\n importMap[pkgName] = `${baseUrl}/${resolved}`;\n }\n }\n\n // Handle subpath exports\n for (const [key, value] of Object.entries(exports)) {\n if (key === '.' || key === 'import' || key === 'require' || key === 'types' || key === 'default') {\n continue;\n }\n\n const resolved = resolveExport(value);\n if (resolved) {\n // Remove leading ./ from key\n const cleanKey = key.startsWith('./') ? key.slice(2) : key;\n const importName = cleanKey ? `${pkgName}/${cleanKey}` : pkgName;\n importMap[importName] = `${baseUrl}/${resolved}`;\n }\n }\n\n // Always add trailing slash for subpath imports\n importMap[`${pkgName}/`] = `${baseUrl}/`;\n }\n}\n\n/**\n * Resolve export value to actual file path\n * Handles conditional exports (import/require/default)\n */\nfunction resolveExport(exportValue: any): string | null {\n if (typeof exportValue === 'string') {\n // Remove leading ./\n return exportValue.startsWith('./') ? exportValue.slice(2) : exportValue;\n }\n\n if (typeof exportValue === 'object' && exportValue !== null) {\n // Prefer import over require over default\n const resolved = exportValue.import || exportValue.browser || exportValue.default || exportValue.require;\n\n // Handle nested objects recursively (e.g., TypeScript's complex exports)\n if (typeof resolved === 'object' && resolved !== null) {\n return resolveExport(resolved);\n }\n\n if (typeof resolved === 'string') {\n return resolved.startsWith('./') ? resolved.slice(2) : resolved;\n }\n }\n\n return null;\n}\n\n// ===== Middleware =====\n\nexport function cors(options: {\n origin?: string | string[];\n methods?: string[];\n credentials?: boolean;\n maxAge?: number;\n} = {}): Middleware {\n const { origin = '*', methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], credentials = true, maxAge = 86400 } = options;\n\n return async (ctx, next) => {\n const requestOriginHeader = ctx.req.headers.origin;\n const requestOrigin = Array.isArray(requestOriginHeader) ? requestOriginHeader[0] : (requestOriginHeader || '');\n const allowOrigin = Array.isArray(origin) && origin.includes(requestOrigin) ? requestOrigin : (Array.isArray(origin) ? '' : origin);\n\n if (allowOrigin) ctx.res.setHeader('Access-Control-Allow-Origin', allowOrigin);\n ctx.res.setHeader('Access-Control-Allow-Methods', methods.join(', '));\n ctx.res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n if (credentials) ctx.res.setHeader('Access-Control-Allow-Credentials', 'true');\n ctx.res.setHeader('Access-Control-Max-Age', String(maxAge));\n\n if (ctx.req.method === 'OPTIONS') {\n ctx.res.writeHead(204);\n ctx.res.end();\n return;\n }\n await next();\n };\n}\n\nexport function logger(options: { format?: 'simple' | 'detailed' } = {}): Middleware {\n const { format = 'simple' } = options;\n return async (ctx, next) => {\n const start = Date.now();\n const { method, url } = ctx.req;\n await next();\n const duration = Date.now() - start;\n const status = ctx.res.statusCode;\n console.log(format === 'detailed' ? `[${new Date().toISOString()}] ${method} ${url} ${status} - ${duration}ms` : `${method} ${url} - ${status} (${duration}ms)`);\n };\n}\n\nexport function errorHandler(): Middleware {\n return async (ctx, next) => {\n try {\n await next();\n } catch (error) {\n console.error('Error:', error);\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Internal Server Error', message: error instanceof Error ? error.message : 'Unknown error' }));\n }\n }\n };\n}\n\nexport function rateLimit(options: { windowMs?: number; max?: number; message?: string } = {}): Middleware {\n const { windowMs = 60000, max = 100, message = 'Too many requests' } = options;\n const clients = new Map<string, { count: number; resetTime: number }>();\n\n return async (ctx, next) => {\n const ip = ctx.req.socket.remoteAddress || 'unknown';\n const now = Date.now();\n let clientData = clients.get(ip);\n\n if (!clientData || now > clientData.resetTime) {\n clientData = { count: 0, resetTime: now + windowMs };\n clients.set(ip, clientData);\n }\n\n if (++clientData.count > max) {\n ctx.res.writeHead(429, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: message }));\n return;\n }\n await next();\n };\n}\n\nexport function bodyLimit(options: { limit?: number } = {}): Middleware {\n const { limit = 1024 * 1024 } = options;\n return async (ctx, next) => {\n const contentLength = ctx.req.headers['content-length'];\n const contentLengthStr = Array.isArray(contentLength) ? contentLength[0] : (contentLength || '0');\n if (parseInt(contentLengthStr, 10) > limit) {\n ctx.res.writeHead(413, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Request body too large' }));\n return;\n }\n await next();\n };\n}\n\nexport function cacheControl(options: { maxAge?: number; public?: boolean } = {}): Middleware {\n const { maxAge = 3600, public: isPublic = true } = options;\n return async (ctx, next) => {\n ctx.res.setHeader('Cache-Control', `${isPublic ? 'public' : 'private'}, max-age=${maxAge}`);\n await next();\n };\n}\n\nexport function compress(): Middleware {\n return async (ctx, next) => {\n const acceptEncoding = ctx.req.headers['accept-encoding'] || '';\n if (!acceptEncoding.includes('gzip')) {\n await next();\n return;\n }\n\n // Store original end method\n const originalEnd = ctx.res.end.bind(ctx.res);\n const chunks: Buffer[] = [];\n\n // Intercept response data\n ctx.res.write = ((chunk: any) => {\n chunks.push(Buffer.from(chunk));\n return true;\n }) as any;\n\n ctx.res.end = ((chunk?: any) => {\n if (chunk) chunks.push(Buffer.from(chunk));\n\n const buffer = Buffer.concat(chunks);\n const { gzipSync } = require('zlib');\n const compressed = gzipSync(buffer);\n\n ctx.res.setHeader('Content-Encoding', 'gzip');\n ctx.res.setHeader('Content-Length', compressed.length);\n originalEnd(compressed);\n return ctx.res;\n }) as any;\n\n await next();\n };\n}\n\nexport function security(): Middleware {\n return async (ctx, next) => {\n ctx.res.setHeader('X-Content-Type-Options', 'nosniff');\n ctx.res.setHeader('X-Frame-Options', 'DENY');\n ctx.res.setHeader('X-XSS-Protection', '1; mode=block');\n ctx.res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');\n await next();\n };\n}\n\n// ===== Proxy Handler =====\n\nfunction rewritePath(path: string, pathRewrite?: Record<string, string>): string {\n if (!pathRewrite) return path;\n\n for (const [from, to] of Object.entries(pathRewrite)) {\n const regex = new RegExp(from);\n if (regex.test(path)) {\n return path.replace(regex, to);\n }\n }\n return path;\n}\n\nexport function createProxyHandler(proxyConfigs: ProxyConfig[]) {\n return async (req: IncomingMessage, res: ServerResponse): Promise<boolean> => {\n const url = req.url || '/';\n const path = url.split('?')[0];\n\n // Find matching proxy configuration (first match wins)\n const proxy = proxyConfigs.find(p => path.startsWith(p.context));\n if (!proxy) return false;\n\n const { target, changeOrigin, pathRewrite, headers } = proxy;\n\n try {\n const targetUrl = new URL(target);\n const isHttps = targetUrl.protocol === 'https:';\n const requestLib = isHttps ? httpsRequest : httpRequest;\n\n // Rewrite path if needed\n let proxyPath = rewritePath(url, pathRewrite);\n\n // Build the full proxy URL\n const proxyUrl = `${isHttps ? 'https' : 'http'}://${targetUrl.hostname}:${targetUrl.port || (isHttps ? 443 : 80)}${proxyPath}`;\n\n // Build proxy request options\n const proxyReqHeaders: Record<string, string | number | string[]> = {};\n for (const [key, value] of Object.entries(req.headers)) {\n if (value !== undefined) {\n proxyReqHeaders[key] = value;\n }\n }\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n proxyReqHeaders[key] = value;\n }\n }\n }\n\n // Change origin if requested (or remove host header if not)\n if (changeOrigin) {\n proxyReqHeaders.host = targetUrl.host;\n } else {\n delete proxyReqHeaders['host'];\n }\n\n const proxyReqOptions = {\n method: req.method,\n headers: proxyReqHeaders\n };\n\n // Create proxy request\n const proxyReq = requestLib(proxyUrl, proxyReqOptions, (proxyRes) => {\n // Forward status code and headers - convert incoming headers properly\n const outgoingHeaders: Record<string, string | number | string[]> = {};\n for (const [key, value] of Object.entries(proxyRes.headers)) {\n if (value !== undefined) {\n outgoingHeaders[key] = value;\n }\n }\n res.writeHead(proxyRes.statusCode || 200, outgoingHeaders);\n\n // Pipe response using read/write instead of pipe\n proxyRes.on('data', (chunk) => res.write(chunk));\n proxyRes.on('end', () => res.end());\n });\n\n // Handle errors\n proxyReq.on('error', (error) => {\n console.error('[Proxy] Error proxying %s to %s:', url, target, error.message);\n if (!res.headersSent) {\n json(res, { error: 'Bad Gateway', message: 'Proxy error' }, 502);\n }\n });\n\n // Forward request body\n req.on('data', (chunk) => proxyReq.write(chunk));\n req.on('end', () => proxyReq.end());\n\n return true;\n } catch (error) {\n console.error('[Proxy] Invalid proxy configuration for %s:', path, error);\n return false;\n }\n };\n}\n\n// ===== State Management =====\n\nexport type StateChangeHandler<T = any> = (value: T, oldValue: T) => void;\n\nexport interface SharedStateOptions<T = any> {\n initial: T;\n persist?: boolean;\n validate?: (value: T) => boolean;\n}\n\nexport class SharedState<T = any> {\n private _value: T;\n private listeners = new Set<WebSocket>();\n private changeHandlers = new Set<StateChangeHandler<T>>();\n private options: SharedStateOptions<T>;\n\n constructor(\n public readonly key: string,\n options: SharedStateOptions<T>\n ) {\n this.options = options;\n this._value = options.initial;\n }\n\n get value(): T {\n return this._value;\n }\n\n set value(newValue: T) {\n if (this.options.validate && !this.options.validate(newValue)) {\n throw new Error(`Invalid state value for \"${this.key}\"`);\n }\n\n const oldValue = this._value;\n this._value = newValue;\n\n this.changeHandlers.forEach(handler => {\n handler(newValue, oldValue);\n });\n\n this.broadcast();\n }\n\n update(updater: (current: T) => T): void {\n this.value = updater(this._value);\n }\n\n subscribe(ws: WebSocket): void {\n this.listeners.add(ws);\n this.sendTo(ws);\n }\n\n unsubscribe(ws: WebSocket): void {\n this.listeners.delete(ws);\n }\n\n onChange(handler: StateChangeHandler<T>): () => void {\n this.changeHandlers.add(handler);\n return () => this.changeHandlers.delete(handler);\n }\n\n private broadcast(): void {\n const message = JSON.stringify({ type: 'state:update', key: this.key, value: this._value, timestamp: Date.now() });\n this.listeners.forEach(ws => ws.readyState === ReadyState.OPEN && ws.send(message));\n }\n\n private sendTo(ws: WebSocket): void {\n if (ws.readyState === ReadyState.OPEN) {\n ws.send(JSON.stringify({ type: 'state:init', key: this.key, value: this._value, timestamp: Date.now() }));\n }\n }\n\n get subscriberCount(): number {\n return this.listeners.size;\n }\n\n clear(): void {\n this.listeners.clear();\n this.changeHandlers.clear();\n }\n}\n\nexport class StateManager {\n private states = new Map<string, SharedState<any>>();\n\n create<T>(key: string, options: SharedStateOptions<T>): SharedState<T> {\n if (this.states.has(key)) return this.states.get(key) as SharedState<T>;\n const state = new SharedState<T>(key, options);\n this.states.set(key, state);\n return state;\n }\n\n get<T>(key: string): SharedState<T> | undefined {\n return this.states.get(key) as SharedState<T>;\n }\n\n has(key: string): boolean {\n return this.states.has(key);\n }\n\n delete(key: string): boolean {\n const state = this.states.get(key);\n if (state) {\n state.clear();\n return this.states.delete(key);\n }\n return false;\n }\n\n subscribe(key: string, ws: WebSocket): void {\n this.states.get(key)?.subscribe(ws);\n }\n\n unsubscribe(key: string, ws: WebSocket): void {\n this.states.get(key)?.unsubscribe(ws);\n }\n\n unsubscribeAll(ws: WebSocket): void {\n this.states.forEach(state => state.unsubscribe(ws));\n }\n\n handleStateChange(key: string, value: any): void {\n const state = this.states.get(key);\n if (state) state.value = value;\n }\n\n keys(): string[] {\n return Array.from(this.states.keys());\n }\n\n clear(): void {\n this.states.forEach(state => state.clear());\n this.states.clear();\n }\n}\n\n// ===== Development Server =====\n\nconst defaultOptions: Omit<Required<DevServerOptions>, 'api' | 'clients' | 'root' | 'basePath' | 'ssr' | 'proxy' | 'index' | 'env' | 'domain'> = {\n port: 3000,\n host: 'localhost',\n https: false,\n open: true,\n watch: ['**/*.ts', '**/*.js', '**/*.html', '**/*.css'],\n ignore: ['node_modules/**', 'dist/**', '.git/**', '**/*.d.ts'],\n logging: true,\n worker: [],\n mode: 'dev'\n};\n\ninterface NormalizedClient {\n root: string;\n basePath: string;\n index?: string;\n ssr?: () => Child | string;\n api?: ServerRouter;\n proxyHandler?: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;\n mode: 'dev' | 'preview';\n}\n\nexport function createDevServer(options: DevServerOptions): DevServer {\n const config = { ...defaultOptions, ...options };\n const wsClients = new Set<WebSocket>();\n const stateManager = new StateManager();\n\n // Clear import map cache in dev mode to ensure fresh scans\n if (config.mode === 'dev') {\n clearImportMapCache();\n }\n\n // Normalize clients configuration - support both new API (clients array) and legacy API (root/basePath)\n const clientsToNormalize = config.clients?.length ? config.clients : config.root ? [{ root: config.root, basePath: config.basePath || '', index: config.index, ssr: config.ssr, api: config.api, proxy: config.proxy, mode: config.mode }] : null;\n if (!clientsToNormalize) throw new Error('DevServerOptions must include either \"clients\" array or \"root\" directory');\n\n const normalizedClients: NormalizedClient[] = clientsToNormalize.map(client => {\n let basePath = client.basePath || '';\n if (basePath) {\n // Remove leading/trailing slashes safely without ReDoS vulnerability\n while (basePath.startsWith('/')) basePath = basePath.slice(1);\n while (basePath.endsWith('/')) basePath = basePath.slice(0, -1);\n basePath = basePath ? '/' + basePath : '';\n }\n\n // Normalize index path - convert ./path to /path\n let indexPath = client.index;\n if (indexPath) {\n // Remove leading ./ and ensure it starts with /\n indexPath = indexPath.replace(/^\\.\\//, '/');\n if (!indexPath.startsWith('/')) {\n indexPath = '/' + indexPath;\n }\n }\n\n return {\n root: client.root,\n basePath,\n index: indexPath,\n ssr: client.ssr,\n api: client.api,\n proxyHandler: client.proxy ? createProxyHandler(client.proxy) : undefined,\n mode: client.mode || 'dev'\n };\n });\n\n // Create global proxy handler if proxy config exists\n const globalProxyHandler = config.proxy ? createProxyHandler(config.proxy) : null;\n\n // HTTP Server\n const server = createServer(async (req: IncomingMessage, res: ServerResponse) => {\n const originalUrl = req.url || '/';\n const hostHeader = req.headers.host;\n const hostName = hostHeader ? (Array.isArray(hostHeader) ? hostHeader[0] : hostHeader).split(':')[0] : '';\n\n // Handle domain mapping: redirect localhost:port to configured domain\n if (config.domain && hostName === (config.host || 'localhost')) {\n const redirectUrl = `http://${config.domain}${originalUrl}`;\n if (config.logging) {\n console.log(`[Domain Map] ${hostName}:${config.port}${originalUrl} -> ${redirectUrl}`);\n }\n res.writeHead(302, { Location: redirectUrl });\n res.end();\n return;\n }\n\n // Find matching client based on basePath\n const matchedClient = normalizedClients.find(c => c.basePath && originalUrl.startsWith(c.basePath)) || normalizedClients.find(c => !c.basePath);\n if (!matchedClient) return send404(res, '404 Not Found');\n\n // Try client-specific proxy first\n if (matchedClient.proxyHandler) {\n try {\n const proxied = await matchedClient.proxyHandler(req, res);\n if (proxied) {\n if (config.logging) console.log(`[Proxy] ${req.method} ${originalUrl} -> proxied (client-specific)`);\n return;\n }\n } catch (error) {\n console.error('[Proxy] Error (client-specific):', error);\n }\n }\n\n // Try global proxy if client-specific didn't match\n if (globalProxyHandler) {\n try {\n const proxied = await globalProxyHandler(req, res);\n if (proxied) {\n if (config.logging) console.log(`[Proxy] ${req.method} ${originalUrl} -> proxied (global)`);\n return;\n }\n } catch (error) {\n console.error('[Proxy] Error (global):', error);\n }\n }\n\n const url = matchedClient.basePath ? (originalUrl.slice(matchedClient.basePath.length) || '/') : originalUrl;\n\n // Try client-specific API routes first\n if (matchedClient.api && url.startsWith('/api')) {\n const handled = await matchedClient.api.handle(req, res);\n if (handled) return;\n }\n\n // Try global API routes (fallback)\n if (config.api && url.startsWith('/api')) {\n const handled = await config.api.handle(req, res);\n if (handled) return;\n }\n\n // If we reach here and it's a POST/PUT/PATCH to /api/*, return 405\n if (url.startsWith('/api') && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method || '')) {\n if (!res.headersSent) {\n if (config.logging) console.log(`[405] ${req.method} ${url} - Method not allowed`);\n res.writeHead(405, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Method Not Allowed', message: 'No API route found for this request' }));\n }\n return;\n }\n\n // For root path requests, prioritize SSR over index files if SSR is configured\n let filePath: string;\n if (url === '/' && matchedClient.ssr && !matchedClient.index) {\n // Use SSR directly when configured and no custom index specified\n return await serveSSR(res, matchedClient);\n } else {\n // Use custom index file if specified, otherwise default to /index.html\n filePath = url === '/' ? (matchedClient.index || '/index.html') : url;\n }\n\n // Remove query string\n filePath = filePath.split('?')[0];\n\n if (config.logging && filePath === '/src/pages') {\n console.log(`[DEBUG] Request for /src/pages received`);\n }\n\n // Security: Check for null bytes early\n if (filePath.includes('\\0')) {\n if (config.logging) console.log(`[403] Rejected path with null byte: ${filePath}`);\n return send403(res, '403 Forbidden');\n }\n\n // Handle /dist/* and /node_modules/* requests - serve from parent folder\n const isDistRequest = filePath.startsWith('/dist/');\n const isNodeModulesRequest = filePath.startsWith('/node_modules/');\n let normalizedPath: string;\n\n // Normalize and validate the path for both /dist/* and regular requests\n const tempPath = normalize(filePath).replace(/\\\\/g, '/').replace(/^\\/+/, '');\n if (tempPath.includes('..')) {\n if (config.logging) console.log(`[403] Path traversal attempt: ${filePath}`);\n return send403(res, '403 Forbidden');\n }\n normalizedPath = tempPath;\n\n // Resolve file path\n const rootDir = await realpath(resolve(matchedClient.root));\n let baseDir = rootDir;\n\n // Auto-detect base directory for /dist/* and /node_modules/* requests\n if (isDistRequest || isNodeModulesRequest) {\n const targetDir = isDistRequest ? 'dist' : 'node_modules';\n const foundDir = await findSpecialDir(matchedClient.root, targetDir);\n baseDir = foundDir ? await realpath(foundDir) : rootDir;\n }\n\n let fullPath;\n\n try {\n // First check path without resolving symlinks for security\n const unresolvedPath = resolve(join(baseDir, normalizedPath));\n if (!unresolvedPath.startsWith(baseDir.endsWith(sep) ? baseDir : baseDir + sep)) {\n if (config.logging) console.log(`[403] File access outside of root (before symlink): ${unresolvedPath}`);\n return send403(res, '403 Forbidden');\n }\n\n // Then resolve symlinks to get actual file\n fullPath = await realpath(unresolvedPath);\n if (config.logging && filePath === '/src/pages') {\n console.log(`[DEBUG] Initial resolve succeeded: ${fullPath}`);\n }\n } catch (firstError) {\n // If file not found, try different extensions\n let resolvedPath: string | undefined;\n\n if (config.logging && !normalizedPath.includes('.')) {\n console.log(`[DEBUG] File not found: ${normalizedPath}, trying extensions...`);\n }\n\n // If .js file not found, try .ts file\n if (normalizedPath.endsWith('.js')) {\n const tsPath = normalizedPath.replace(/\\.js$/, '.ts');\n try {\n const tsFullPath = await realpath(resolve(join(baseDir, tsPath)));\n // Security: Ensure path is strictly within the allowed root directory\n if (!tsFullPath.startsWith(baseDir.endsWith(sep) ? baseDir : baseDir + sep)) {\n if (config.logging) console.log(`[403] Fallback TS path outside of root: ${tsFullPath}`);\n return send403(res, '403 Forbidden');\n }\n resolvedPath = tsFullPath;\n } catch {\n // Continue to next attempt\n }\n }\n\n // If no extension, try adding .ts or .js, or index files\n if (!resolvedPath && !normalizedPath.includes('.')) {\n // Try .ts first\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath + '.ts')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}.ts`);\n } catch {\n // Try .js\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath + '.js')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}.js`);\n } catch {\n // Try index.ts in directory\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath, 'index.ts')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}/index.ts`);\n } catch {\n // Try index.js in directory\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath, 'index.js')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}/index.js`);\n } catch {\n if (config.logging) console.log(`[DEBUG] Not found: all attempts failed for ${normalizedPath}`);\n }\n }\n }\n }\n }\n\n if (!resolvedPath) {\n if (!res.headersSent) {\n // If index.html not found but SSR function exists, use SSR\n if (filePath === '/index.html' && matchedClient.ssr) {\n return await serveSSR(res, matchedClient);\n }\n if (config.logging) console.log(`[404] ${filePath}`);\n return send404(res, '404 Not Found');\n }\n return;\n }\n\n fullPath = resolvedPath;\n }\n\n // Check if resolved path is a directory, try index files\n try {\n const stats = await stat(fullPath);\n if (stats.isDirectory()) {\n if (config.logging) console.log(`[DEBUG] Path is directory: ${fullPath}, trying index files...`);\n let indexPath: string | undefined;\n\n // Try index.ts first\n try {\n indexPath = await realpath(resolve(join(fullPath, 'index.ts')));\n if (config.logging) console.log(`[DEBUG] Found index.ts in directory`);\n } catch {\n // Try index.js\n try {\n indexPath = await realpath(resolve(join(fullPath, 'index.js')));\n if (config.logging) console.log(`[DEBUG] Found index.js in directory`);\n } catch {\n if (config.logging) console.log(`[DEBUG] No index file found in directory`);\n // If index.html not found in directory but SSR function exists, use SSR\n if (matchedClient.ssr) {\n return await serveSSR(res, matchedClient);\n }\n return send404(res, '404 Not Found');\n }\n }\n\n fullPath = indexPath;\n }\n } catch (statError) {\n if (config.logging) console.log(`[404] ${filePath}`);\n return send404(res, '404 Not Found');\n }\n\n // Security check already done before resolving symlinks (line 733)\n // No need to check again after symlink resolution as that would block legitimate symlinks\n\n try {\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n try {\n const indexPath = await realpath(resolve(join(fullPath, 'index.html')));\n if (!indexPath.startsWith(rootDir + sep) && indexPath !== rootDir) {\n return send403(res, '403 Forbidden');\n }\n await stat(indexPath);\n return serveFile(indexPath, req, res, matchedClient, isDistRequest || isNodeModulesRequest);\n } catch {\n return send404(res, '404 Not Found');\n }\n }\n\n await serveFile(fullPath, req, res, matchedClient, isDistRequest || isNodeModulesRequest);\n } catch (error) {\n // Only send 404 if response hasn't been sent yet\n if (!res.headersSent) {\n if (config.logging) console.log(`[404] ${filePath}`);\n send404(res, '404 Not Found');\n }\n }\n });\n\n // Serve file helper\n async function serveFile(filePath: string, req: IncomingMessage, res: ServerResponse, client: NormalizedClient, isNodeModulesOrDist: boolean = false) {\n // Escape arbitrary text for safe embedding inside a JavaScript template literal.\n // This ensures that backslashes, backticks and `${` sequences are correctly escaped.\n function escapeForTemplateLiteral(input: string): string {\n return input\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/`/g, '\\\\`')\n .replace(/\\$\\{/g, '\\\\${');\n }\n\n try {\n const rootDir = await realpath(resolve(client.root));\n\n // Security: Check path before resolving symlinks\n const unresolvedPath = resolve(filePath);\n\n // Skip security check for node_modules and dist (these may be symlinks)\n if (!isNodeModulesOrDist) {\n // Check if path is within project root\n if (!unresolvedPath.startsWith(rootDir + sep) && unresolvedPath !== rootDir) {\n if (config.logging) console.log(`[403] Attempted to serve file outside allowed directories: ${filePath}`);\n return send403(res, '403 Forbidden');\n }\n }\n\n // Resolve symlinks to get actual file path\n let resolvedPath;\n try {\n resolvedPath = await realpath(unresolvedPath);\n\n // For symlinked packages (like node_modules/elit), allow serving from outside rootDir\n if (isNodeModulesOrDist && resolvedPath) {\n // Allow it - this is a symlinked package\n if (config.logging && !resolvedPath.startsWith(rootDir + sep)) {\n console.log(`[DEBUG] Serving symlinked file: ${resolvedPath}`);\n }\n }\n } catch {\n // If index.html not found but SSR function exists, use SSR\n if (filePath.endsWith('index.html') && client.ssr) {\n return await serveSSR(res, client);\n }\n return send404(res, '404 Not Found');\n }\n\n let content = await readFile(resolvedPath);\n const ext = extname(resolvedPath);\n let mimeType = lookup(resolvedPath) || 'application/octet-stream';\n\n // Handle CSS imports as JavaScript modules (like Vite)\n // When CSS is imported in JS/TS with ?inline query, transform it to a JS module that injects styles\n const urlQuery = req.url?.split('?')[1] || '';\n const isInlineCSS = urlQuery.includes('inline');\n\n if (ext === '.css' && isInlineCSS) {\n // Transform CSS to JavaScript module that injects styles\n const cssContent = escapeForTemplateLiteral(content.toString());\n const jsModule = `\nconst css = \\`${cssContent}\\`;\nconst style = document.createElement('style');\nstyle.setAttribute('data-file', '${filePath}');\nstyle.textContent = css;\ndocument.head.appendChild(style);\nexport default css;\n`;\n content = Buffer.from(jsModule);\n mimeType = 'application/javascript';\n }\n\n // Handle TypeScript files - transpile only (no bundling)\n if (ext === '.ts' || ext === '.tsx') {\n try {\n let transpiled: string;\n\n if (isDeno) {\n // Deno - use Deno.emit\n // @ts-ignore\n const result = await Deno.emit(resolvedPath, {\n check: false,\n compilerOptions: {\n sourceMap: true,\n inlineSourceMap: true,\n target: 'ES2020',\n module: 'esnext'\n },\n sources: {\n [resolvedPath]: content.toString()\n }\n });\n\n transpiled = result.files[resolvedPath.replace(/\\.tsx?$/, '.js')] || '';\n\n } else if (isBun) {\n // Bun - use Bun.Transpiler\n // @ts-ignore\n const transpiler = new Bun.Transpiler({\n loader: ext === '.tsx' ? 'tsx' : 'ts',\n target: 'browser'\n });\n\n // @ts-ignore\n transpiled = transpiler.transformSync(content.toString());\n } else {\n // Node.js - use esbuild\n const { transformSync } = await import('esbuild');\n const loader = ext === '.tsx' ? 'tsx' : 'ts';\n const result = transformSync(content.toString(), {\n loader: loader as any,\n format: 'esm',\n target: 'es2020',\n sourcemap: 'inline'\n });\n\n transpiled = result.code;\n }\n\n // Rewrite .ts imports to .js for browser compatibility\n // This allows developers to write import './file.ts' in their source code\n // and the dev server will automatically rewrite it to import './file.js'\n transpiled = transpiled.replace(\n /from\\s+[\"']([^\"']+)\\.ts(x?)[\"']/g,\n (_, path, tsx) => `from \"${path}.js${tsx}\"`\n );\n transpiled = transpiled.replace(\n /import\\s+[\"']([^\"']+)\\.ts(x?)[\"']/g,\n (_, path, tsx) => `import \"${path}.js${tsx}\"`\n );\n\n // Rewrite CSS imports to add ?inline query parameter\n // This tells the server to return CSS as a JavaScript module\n transpiled = transpiled.replace(\n /import\\s+[\"']([^\"']+\\.css)[\"']/g,\n (_, path) => `import \"${path}?inline\"`\n );\n transpiled = transpiled.replace(\n /from\\s+[\"']([^\"']+\\.css)[\"']/g,\n (_, path) => `from \"${path}?inline\"`\n );\n\n content = Buffer.from(transpiled);\n mimeType = 'application/javascript';\n } catch (error) {\n if (config.logging) console.error('[500] TypeScript compilation error:', error);\n return send500(res, `TypeScript compilation error:\\n${error}`);\n }\n }\n\n // Inject HMR client and import map for HTML files\n if (ext === '.html') {\n const wsPath = normalizeBasePath(client.basePath);\n const hmrScript = createHMRScript(config.port, wsPath);\n let html = content.toString();\n\n // If SSR is configured, extract and inject styles from SSR\n let ssrStyles = '';\n if (client.ssr) {\n try {\n const result = client.ssr();\n let ssrHtml: string;\n\n // Convert SSR result to string\n if (typeof result === 'string') {\n ssrHtml = result;\n } else if (typeof result === 'object' && result !== null && 'tagName' in result) {\n ssrHtml = dom.renderToString(result as VNode);\n } else {\n ssrHtml = String(result);\n }\n\n // Extract <style> tags from SSR output\n const styleMatches = ssrHtml.match(/<style[^>]*>[\\s\\S]*?<\\/style>/g);\n if (styleMatches) {\n ssrStyles = styleMatches.join('\\n');\n }\n } catch (error) {\n if (config.logging) console.error('[Warning] Failed to extract styles from SSR:', error);\n }\n }\n\n // Fix relative paths to use basePath\n const basePath = normalizeBasePath(client.basePath);\n html = rewriteRelativePaths(html, basePath);\n\n // Inject base tag if basePath is configured and not '/'\n if (client.basePath && client.basePath !== '/') {\n const baseTag = `<base href=\"${client.basePath}/\">`;\n // Check if base tag already exists\n if (!html.includes('<base')) {\n // Try to inject after viewport meta tag\n if (html.includes('<meta name=\"viewport\"')) {\n html = html.replace(\n /<meta name=\"viewport\"[^>]*>/,\n (match) => `${match}\\n ${baseTag}`\n );\n } else if (html.includes('<head>')) {\n // If no viewport, inject right after <head>\n html = html.replace('<head>', `<head>\\n ${baseTag}`);\n }\n }\n }\n\n // Inject import map and SSR styles into <head>\n const elitImportMap = await createElitImportMap(client.root, basePath, client.mode);\n const headInjection = ssrStyles ? `${ssrStyles}\\n${elitImportMap}` : elitImportMap;\n html = html.includes('</head>') ? html.replace('</head>', `${headInjection}</head>`) : html;\n html = html.includes('</body>') ? html.replace('</body>', `${hmrScript}</body>`) : html + hmrScript;\n content = Buffer.from(html);\n }\n\n // Set cache headers based on file type\n const cacheControl = ext === '.html' || ext === '.ts' || ext === '.tsx'\n ? 'no-cache, no-store, must-revalidate' // Don't cache HTML/TS files in dev\n : 'public, max-age=31536000, immutable'; // Cache static assets for 1 year\n\n const headers: any = {\n 'Content-Type': mimeType,\n 'Cache-Control': cacheControl\n };\n\n // Apply gzip compression for text-based files\n const compressible = /^(text\\/|application\\/(javascript|json|xml))/.test(mimeType);\n\n if (compressible && content.length > 1024) {\n const { gzipSync } = require('zlib');\n const compressed = gzipSync(content);\n headers['Content-Encoding'] = 'gzip';\n headers['Content-Length'] = compressed.length;\n res.writeHead(200, headers);\n res.end(compressed);\n } else {\n res.writeHead(200, headers);\n res.end(content);\n }\n\n if (config.logging) console.log(`[200] ${relative(client.root, filePath)}`);\n } catch (error) {\n if (config.logging) console.error('[500] Error reading file:', error);\n send500(res, '500 Internal Server Error');\n }\n }\n\n // SSR helper - Generate HTML from SSR function\n async function serveSSR(res: ServerResponse, client: NormalizedClient) {\n try {\n if (!client.ssr) {\n return send500(res, 'SSR function not configured');\n }\n\n const result = client.ssr();\n let html: string;\n\n // If result is a string, use it directly\n if (typeof result === 'string') {\n html = result;\n }\n // If result is a VNode, render it to HTML string\n else if (typeof result === 'object' && result !== null && 'tagName' in result) {\n const vnode = result as VNode;\n if (vnode.tagName === 'html') {\n html = dom.renderToString(vnode);\n } else {\n // Wrap in basic HTML structure if not html tag\n html = `<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></head><body>${dom.renderToString(vnode)}</body></html>`;\n }\n } else {\n html = String(result);\n }\n\n // Fix relative paths to use basePath\n const basePath = normalizeBasePath(client.basePath);\n html = rewriteRelativePaths(html, basePath);\n\n // Inject HMR script\n const hmrScript = createHMRScript(config.port, basePath);\n\n // Inject import map in head, HMR script in body\n const elitImportMap = await createElitImportMap(client.root, basePath, client.mode);\n html = html.includes('</head>') ? html.replace('</head>', `${elitImportMap}</head>`) : html;\n html = html.includes('</body>') ? html.replace('</body>', `${hmrScript}</body>`) : html + hmrScript;\n\n res.writeHead(200, { 'Content-Type': 'text/html', 'Cache-Control': 'no-cache, no-store, must-revalidate' });\n res.end(html);\n\n if (config.logging) console.log(`[200] SSR rendered`);\n } catch (error) {\n if (config.logging) console.error('[500] SSR Error:', error);\n send500(res, '500 SSR Error');\n }\n }\n\n // WebSocket Server for HMR\n const wss = new WebSocketServer({ server });\n\n if (config.logging) {\n console.log('[HMR] WebSocket server initialized');\n }\n\n wss.on('connection', (ws: WebSocket, req) => {\n wsClients.add(ws);\n\n const message: HMRMessage = { type: 'connected', timestamp: Date.now() };\n ws.send(JSON.stringify(message));\n\n if (config.logging) {\n console.log('[HMR] Client connected from', req.socket.remoteAddress);\n }\n\n // Handle incoming messages\n ws.on('message', (data: string) => {\n try {\n const msg = JSON.parse(data.toString());\n\n // Handle state subscription\n if (msg.type === 'state:subscribe') {\n stateManager.subscribe(msg.key, ws);\n if (config.logging) {\n console.log(`[State] Client subscribed to \"${msg.key}\"`);\n }\n }\n\n // Handle state unsubscribe\n else if (msg.type === 'state:unsubscribe') {\n stateManager.unsubscribe(msg.key, ws);\n if (config.logging) {\n console.log(`[State] Client unsubscribed from \"${msg.key}\"`);\n }\n }\n\n // Handle state change from client\n else if (msg.type === 'state:change') {\n stateManager.handleStateChange(msg.key, msg.value);\n if (config.logging) {\n console.log(`[State] Client updated \"${msg.key}\"`);\n }\n }\n } catch (error) {\n if (config.logging) {\n console.error('[WebSocket] Message parse error:', error);\n }\n }\n });\n\n ws.on('close', () => {\n wsClients.delete(ws);\n stateManager.unsubscribeAll(ws);\n if (config.logging) {\n console.log('[HMR] Client disconnected');\n }\n });\n });\n\n // File watcher - watch all client roots\n const watchPaths = normalizedClients.flatMap(client =>\n config.watch.map(pattern => join(client.root, pattern))\n );\n\n const watcher = watch(watchPaths, {\n ignored: (path: string) => config.ignore.some(pattern => path.includes(pattern.replace('/**', '').replace('**/', ''))),\n ignoreInitial: true,\n persistent: true\n });\n\n watcher.on('change', (path: string) => {\n if (config.logging) console.log(`[HMR] File changed: ${path}`);\n const message = JSON.stringify({ type: 'update', path, timestamp: Date.now() } as HMRMessage);\n // Broadcast to all open clients with error handling\n wsClients.forEach(client => {\n if (client.readyState === ReadyState.OPEN) {\n client.send(message, {}, (err?: Error) => {\n // Silently ignore connection errors during HMR\n const code = (err as any)?.code;\n if (code === 'ECONNABORTED' || code === 'ECONNRESET' || code === 'EPIPE' || code === 'WS_NOT_OPEN') {\n // Client disconnected - will be removed from clients set by close event\n return;\n }\n });\n }\n });\n });\n\n watcher.on('add', (path: string) => config.logging && console.log(`[HMR] File added: ${path}`));\n watcher.on('unlink', (path: string) => config.logging && console.log(`[HMR] File removed: ${path}`));\n\n // Increase max listeners to prevent warnings\n server.setMaxListeners(20);\n\n // Start server\n server.listen(config.port, config.host, () => {\n if (config.logging) {\n console.log('\\n🚀 Elit Dev Server');\n console.log(`\\n ➜ Local: http://${config.host}:${config.port}`);\n\n if (normalizedClients.length > 1) {\n console.log(` ➜ Clients:`);\n normalizedClients.forEach(client => {\n const clientUrl = `http://${config.host}:${config.port}${client.basePath}`;\n console.log(` - ${clientUrl} → ${client.root}`);\n });\n } else {\n const client = normalizedClients[0];\n console.log(` ➜ Root: ${client.root}`);\n if (client.basePath) {\n console.log(` ➜ Base: ${client.basePath}`);\n }\n }\n\n console.log(`\\n[HMR] Watching for file changes...\\n`);\n }\n\n // Open browser to first client\n if (config.open && normalizedClients.length > 0) {\n const firstClient = normalizedClients[0];\n const url = `http://${config.host}:${config.port}${firstClient.basePath}`;\n\n const open = async () => {\n const { default: openBrowser } = await import('open');\n await openBrowser(url);\n };\n open().catch(() => {\n // Fail silently if open package is not available\n });\n }\n });\n\n // Cleanup function\n let isClosing = false;\n const close = async () => {\n if (isClosing) return;\n isClosing = true;\n if (config.logging) console.log('\\n[Server] Shutting down...');\n await watcher.close();\n wss.close();\n wsClients.forEach(client => client.close());\n wsClients.clear();\n return new Promise<void>((resolve) => {\n server.close(() => {\n if (config.logging) console.log('[Server] Closed');\n resolve();\n });\n });\n };\n\n // Get the primary URL (first client's basePath)\n const primaryClient = normalizedClients[0];\n const primaryUrl = `http://${config.host}:${config.port}${primaryClient.basePath}`;\n\n return {\n server: server as any,\n wss: wss as any,\n url: primaryUrl,\n state: stateManager,\n close\n };\n}\n","/**\n * HTTPS module with unified API across runtimes\n * Optimized for maximum performance across Node.js, Bun, and Deno\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n IncomingMessage,\n ServerResponse,\n RequestListener,\n RequestOptions,\n} from './http';\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) queueMicrotask(callback);\n}\n\n/**\n * Helper: Create error Response (eliminates duplication in error handling)\n */\nfunction createErrorResponse(): Response {\n return new Response('Internal Server Error', { status: 500 });\n}\n\n/**\n * Helper: Create address object (eliminates duplication in address() method)\n */\nfunction createAddress(port: number, address: string, family = 'IPv4'): { port: number; family: string; address: string } {\n return { port, family, address };\n}\n\n/**\n * Helper: Emit listening and queue callback (eliminates duplication in Bun/Deno listen)\n */\nfunction emitListeningWithCallback(server: Server, callback?: () => void): void {\n server._listening = true;\n server.emit('listening');\n queueCallback(callback);\n}\n\n/**\n * Helper: Close server and emit events (eliminates duplication in Bun/Deno close)\n */\nfunction closeAndEmit(server: Server, callback?: (err?: Error) => void): void {\n server._listening = false;\n server.emit('close');\n if (callback) queueMicrotask(() => callback());\n}\n\n/**\n * Helper: Lazy-load http module classes (eliminates duplication in require('./http'))\n */\nfunction loadHttpClasses(): { IncomingMessage: any; ServerResponse: any } {\n const httpModule = require('./http');\n return {\n IncomingMessage: httpModule.IncomingMessage,\n ServerResponse: httpModule.ServerResponse\n };\n}\n\n// Lazy-load native https module for Node.js\nlet https: any;\n\n/**\n * HTTPS Server options\n */\nexport interface ServerOptions {\n IncomingMessage?: typeof IncomingMessage;\n ServerResponse?: typeof ServerResponse;\n // TLS/SSL options\n key?: string | Buffer | Array<string | Buffer>;\n cert?: string | Buffer | Array<string | Buffer>;\n ca?: string | Buffer | Array<string | Buffer>;\n passphrase?: string;\n pfx?: string | Buffer | Array<string | Buffer>;\n dhparam?: string | Buffer;\n ecdhCurve?: string;\n honorCipherOrder?: boolean;\n requestCert?: boolean;\n rejectUnauthorized?: boolean;\n NPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array;\n ALPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array;\n SNICallback?: (servername: string, cb: (err: Error | null, ctx?: any) => void) => void;\n sessionTimeout?: number;\n ticketKeys?: Buffer;\n // Bun-specific\n tls?: {\n key?: string | Buffer;\n cert?: string | Buffer;\n ca?: string | Buffer;\n passphrase?: string;\n dhParamsFile?: string;\n };\n}\n\n/**\n * HTTPS Server - Optimized for each runtime\n */\nexport class Server extends EventEmitter {\n private nativeServer?: any;\n private requestListener?: RequestListener;\n public _listening: boolean = false;\n private options: ServerOptions;\n\n constructor(options: ServerOptions, requestListener?: RequestListener) {\n super();\n this.options = options;\n this.requestListener = requestListener;\n }\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n listen(port?: number, hostname?: string, listeningListener?: () => void): this;\n listen(port?: number, listeningListener?: () => void): this;\n listen(options?: { port?: number; hostname?: string; backlog?: number }, listeningListener?: () => void): this;\n listen(...args: any[]): this {\n let port = 3000;\n let hostname = '0.0.0.0';\n let callback: (() => void) | undefined;\n\n // Optimized argument parsing\n const firstArg = args[0];\n if (typeof firstArg === 'number') {\n port = firstArg;\n const secondArg = args[1];\n if (typeof secondArg === 'string') {\n hostname = secondArg;\n callback = args[2] || args[3];\n } else if (typeof secondArg === 'function') {\n callback = secondArg;\n }\n } else if (firstArg && typeof firstArg === 'object') {\n port = firstArg.port || 3000;\n hostname = firstArg.hostname || '0.0.0.0';\n callback = args[1];\n }\n\n const self = this;\n\n if (isNode) {\n // Node.js - use native https module\n const { IncomingMessage, ServerResponse } = loadHttpClasses();\n if (!https) https = require('https');\n\n this.nativeServer = https.createServer(this.options, (req: any, res: any) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse(incomingMessage, res);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n\n this.nativeServer.listen(port, hostname, () => {\n this._listening = true;\n this.emit('listening');\n if (callback) callback();\n });\n\n this.nativeServer.on('error', (err: Error) => this.emit('error', err));\n this.nativeServer.on('close', () => {\n this._listening = false;\n this.emit('close');\n });\n } else if (isBun) {\n // Bun - use Bun.serve() with TLS\n const { IncomingMessage, ServerResponse } = loadHttpClasses();\n\n const tlsOptions: any = {\n port,\n hostname,\n fetch: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n error: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n };\n\n // Add TLS configuration\n if (this.options.key || this.options.cert) {\n tlsOptions.tls = {\n key: this.options.key,\n cert: this.options.cert,\n ca: this.options.ca,\n passphrase: this.options.passphrase,\n };\n } else if (this.options.tls) {\n tlsOptions.tls = this.options.tls;\n }\n\n // @ts-ignore\n this.nativeServer = Bun.serve(tlsOptions);\n\n emitListeningWithCallback(this, callback);\n } else if (isDeno) {\n // Deno - use Deno.serve() with TLS\n const { IncomingMessage, ServerResponse } = loadHttpClasses();\n\n const serveOptions: any = {\n port,\n hostname,\n handler: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n onError: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n };\n\n // Add TLS configuration for Deno\n if (this.options.key && this.options.cert) {\n // @ts-ignore\n serveOptions.cert = this.options.cert;\n // @ts-ignore\n serveOptions.key = this.options.key;\n }\n\n // @ts-ignore\n this.nativeServer = Deno.serve(serveOptions);\n\n emitListeningWithCallback(this, callback);\n }\n\n return this;\n }\n\n close(callback?: (err?: Error) => void): this {\n if (!this.nativeServer) {\n if (callback) queueMicrotask(() => callback());\n return this;\n }\n\n if (isNode) {\n this.nativeServer.close(callback);\n } else if (isBun) {\n this.nativeServer.stop();\n closeAndEmit(this, callback);\n } else if (isDeno) {\n // @ts-ignore\n this.nativeServer.shutdown();\n closeAndEmit(this, callback);\n }\n\n return this;\n }\n\n address(): { port: number; family: string; address: string } | null {\n if (!this.nativeServer) return null;\n\n if (isNode) {\n const addr = this.nativeServer.address();\n if (!addr) return null;\n if (typeof addr === 'string') {\n return createAddress(0, addr, 'unix');\n }\n return addr;\n } else if (isBun) {\n return createAddress(this.nativeServer.port, this.nativeServer.hostname);\n } else if (isDeno) {\n // @ts-ignore\n const addr = this.nativeServer.addr;\n return createAddress(addr.port, addr.hostname);\n }\n\n return null;\n }\n\n get listening(): boolean {\n return this._listening;\n }\n}\n\n/**\n * Client request\n */\nexport class ClientRequest extends EventEmitter {\n constructor(_url: string | URL, _options: RequestOptions = {}) {\n super();\n }\n\n write(_chunk: any): boolean {\n return true;\n }\n\n end(callback?: () => void): void {\n queueCallback(callback);\n }\n}\n\n/**\n * HTTPS Agent\n */\nexport class Agent {\n constructor(public options?: any) {}\n}\n\n/**\n * Create HTTPS server\n */\nexport function createServer(options: ServerOptions, requestListener?: RequestListener): Server {\n return new Server(options, requestListener);\n}\n\n/**\n * Make HTTPS request - optimized per runtime\n */\nexport function request(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n const urlString = typeof url === 'string' ? url : url.toString();\n const req = new ClientRequest(urlString, options);\n\n if (isNode) {\n const { IncomingMessage } = loadHttpClasses();\n if (!https) https = require('https');\n\n const nodeReq = https.request(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers,\n timeout: options?.timeout,\n signal: options?.signal,\n }, (res: any) => {\n const incomingMessage = new IncomingMessage(res);\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n });\n\n nodeReq.on('error', (error: Error) => req.emit('error', error));\n nodeReq.end();\n } else {\n // Bun/Deno - use fetch (automatically handles HTTPS)\n const { IncomingMessage } = loadHttpClasses();\n\n queueMicrotask(async () => {\n try {\n const response = await fetch(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers as HeadersInit,\n signal: options?.signal,\n });\n\n const fetchRequest = new Request(urlString);\n const incomingMessage = new IncomingMessage(fetchRequest);\n incomingMessage.statusCode = response.status;\n incomingMessage.statusMessage = response.statusText;\n\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n } catch (error) {\n req.emit('error', error);\n }\n });\n }\n\n return req;\n}\n\n/**\n * Make HTTPS GET request\n */\nexport function get(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n return request(url, { ...options, method: 'GET' }, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n createServer,\n request,\n get,\n Server,\n Agent,\n ClientRequest,\n getRuntime,\n};\n","/**\n * WebSocket module with unified API across runtimes\n * Pure implementation without external dependencies\n * - Node.js: uses native 'ws' module (built-in WebSocket implementation)\n * - Bun: uses native WebSocket\n * - Deno: uses native WebSocket\n */\n\nimport { EventEmitter } from 'events';\nimport type { IncomingMessage } from './http';\nimport { runtime } from './runtime';\n\n/**\n * WebSocket ready state\n */\nexport enum ReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3,\n}\n\n/**\n * WebSocket close codes\n */\nexport const CLOSE_CODES = {\n NORMAL: 1000,\n GOING_AWAY: 1001,\n PROTOCOL_ERROR: 1002,\n UNSUPPORTED_DATA: 1003,\n NO_STATUS: 1005,\n ABNORMAL: 1006,\n INVALID_DATA: 1007,\n POLICY_VIOLATION: 1008,\n MESSAGE_TOO_BIG: 1009,\n EXTENSION_REQUIRED: 1010,\n INTERNAL_ERROR: 1011,\n SERVICE_RESTART: 1012,\n TRY_AGAIN_LATER: 1013,\n BAD_GATEWAY: 1014,\n TLS_HANDSHAKE_FAIL: 1015,\n} as const;\n\n/**\n * WebSocket data types\n */\nexport type Data = string | Buffer | ArrayBuffer | Buffer[];\n\n/**\n * WebSocket send options\n */\nexport interface SendOptions {\n binary?: boolean;\n compress?: boolean;\n fin?: boolean;\n mask?: boolean;\n}\n\n/**\n * WebSocket server options\n */\nexport interface ServerOptions {\n host?: string;\n port?: number;\n backlog?: number;\n server?: any;\n verifyClient?: VerifyClientCallback;\n handleProtocols?: (protocols: Set<string>, request: IncomingMessage) => string | false;\n path?: string;\n noServer?: boolean;\n clientTracking?: boolean;\n perMessageDeflate?: boolean | object;\n maxPayload?: number;\n}\n\n/**\n * Verify client callback\n */\nexport type VerifyClientCallback = (\n info: {\n origin: string;\n secure: boolean;\n req: IncomingMessage;\n },\n callback?: (result: boolean, code?: number, message?: string) => void\n) => boolean | void;\n\n/**\n * Helper: Queue callback with optional error (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: (err?: Error) => void, error?: Error): void {\n if (callback) {\n queueMicrotask(() => callback(error));\n }\n}\n\n/**\n * Helper: Create native WebSocket instance (eliminates duplication in constructor)\n */\nfunction createNativeWebSocket(url: string, protocols?: string[]): any {\n // @ts-ignore - WebSocket is available in Node.js 18+ and all modern runtimes\n if (runtime === 'node' && typeof globalThis.WebSocket === 'undefined') {\n throw new Error('WebSocket is not available. Please use Node.js 18+ or install ws package.');\n }\n // @ts-ignore\n return new globalThis.WebSocket(url, protocols);\n}\n\n/**\n * WebSocket class - Pure implementation\n */\nexport class WebSocket extends EventEmitter {\n public readyState: ReadyState = ReadyState.CONNECTING;\n public url: string;\n public protocol: string = '';\n public extensions: string = '';\n public binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments' = 'nodebuffer';\n\n /** @internal */\n public _socket: any;\n\n constructor(address: string | URL, protocols?: string | string[], _options?: any) {\n super();\n this.url = typeof address === 'string' ? address : address.toString();\n const protocolsArray = Array.isArray(protocols) ? protocols : protocols ? [protocols] : undefined;\n this._socket = createNativeWebSocket(this.url, protocolsArray);\n this._setupNativeSocket();\n }\n\n private _setupNativeSocket(): void {\n this._socket.onopen = () => {\n this.readyState = ReadyState.OPEN;\n this.emit('open');\n };\n\n this._socket.onmessage = (event: MessageEvent) => {\n const isBinary = event.data instanceof ArrayBuffer || event.data instanceof Blob;\n this.emit('message', event.data, isBinary);\n };\n\n this._socket.onclose = (event: CloseEvent) => {\n this.readyState = ReadyState.CLOSED;\n this.emit('close', event.code, event.reason);\n };\n\n this._socket.onerror = () => {\n this.emit('error', new Error('WebSocket error'));\n };\n }\n\n /**\n * Send data through WebSocket\n */\n send(data: Data, options?: SendOptions | ((err?: Error) => void), callback?: (err?: Error) => void): void {\n const cb = typeof options === 'function' ? options : callback;\n\n if (this.readyState !== ReadyState.OPEN) {\n return queueCallback(cb, new Error('WebSocket is not open'));\n }\n\n try {\n this._socket.send(data);\n queueCallback(cb);\n } catch (error) {\n queueCallback(cb, error as Error);\n }\n }\n\n /**\n * Close the WebSocket connection\n */\n close(code?: number, reason?: string | Buffer): void {\n if (this.readyState === ReadyState.CLOSED || this.readyState === ReadyState.CLOSING) {\n return;\n }\n\n this.readyState = ReadyState.CLOSING;\n this._socket.close(code, typeof reason === 'string' ? reason : reason?.toString());\n }\n\n /**\n * Pause the socket (no-op for native WebSocket)\n */\n pause(): void {\n // Native WebSocket doesn't support pause\n }\n\n /**\n * Resume the socket (no-op for native WebSocket)\n */\n resume(): void {\n // Native WebSocket doesn't support resume\n }\n\n /**\n * Send a ping frame (no-op for native WebSocket)\n */\n ping(_data?: Data, _mask?: boolean, callback?: (err?: Error) => void): void {\n queueCallback(callback); // Native WebSocket doesn't expose ping\n }\n\n /**\n * Send a pong frame (no-op for native WebSocket)\n */\n pong(_data?: Data, _mask?: boolean, callback?: (err?: Error) => void): void {\n queueCallback(callback); // Native WebSocket doesn't expose pong\n }\n\n /**\n * Terminate the connection\n */\n terminate(): void {\n this._socket.close();\n this.readyState = ReadyState.CLOSED;\n }\n\n /**\n * Get buffered amount\n */\n get bufferedAmount(): number {\n return this._socket.bufferedAmount || 0;\n }\n}\n\n/**\n * WebSocket Server - Server-side WebSocket implementation\n */\nexport class WebSocketServer extends EventEmitter {\n public clients: Set<WebSocket> = new Set();\n public options: ServerOptions;\n public path: string;\n\n private _httpServer: any;\n\n constructor(options?: ServerOptions, callback?: () => void) {\n super();\n this.options = options || {};\n this.path = options?.path || '/';\n\n if (runtime === 'node') {\n // Node.js - create HTTP server with WebSocket upgrade\n if (options?.server) {\n this._httpServer = options.server;\n this._setupUpgradeHandler();\n } else if (options?.noServer) {\n // No server mode - user will call handleUpgrade manually\n } else {\n // Create new HTTP server\n const http = require('http');\n this._httpServer = http.createServer();\n this._setupUpgradeHandler();\n\n if (options?.port) {\n this._httpServer.listen(options.port, options.host, callback);\n }\n }\n } else {\n // Bun/Deno - WebSocket server setup\n queueCallback(callback as any);\n }\n }\n\n private _setupUpgradeHandler(): void {\n this._httpServer.on('upgrade', (request: any, socket: any, head: Buffer) => {\n console.log('[WebSocket] Upgrade request:', request.url, 'Expected:', this.path);\n if (this.path && this.path !== '/' && request.url !== this.path) {\n console.log('[WebSocket] Path mismatch, ignoring');\n return;\n }\n\n this.handleUpgrade(request, socket, head, (client) => {\n console.log('[WebSocket] Client connected');\n this.emit('connection', client, request);\n });\n });\n }\n\n /**\n * Handle HTTP upgrade for WebSocket\n */\n handleUpgrade(request: IncomingMessage, socket: any, _head: Buffer, callback: (client: WebSocket) => void): void {\n // Simple WebSocket handshake\n const key = request.headers['sec-websocket-key'];\n if (!key) {\n socket.end('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n return;\n }\n\n // Generate accept key\n const crypto = require('crypto');\n const acceptKey = crypto\n .createHash('sha1')\n .update(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')\n .digest('base64');\n\n // Send handshake response\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${acceptKey}`,\n '',\n ''\n ];\n\n socket.write(headers.join('\\r\\n'));\n\n // Create WebSocket client from raw socket\n const client = this._createClientFromSocket(socket);\n\n if (this.options.clientTracking !== false) {\n this.clients.add(client);\n client.on('close', () => {\n this.clients.delete(client);\n });\n }\n\n callback(client);\n }\n\n private _createClientFromSocket(socket: any): WebSocket {\n const client = Object.create(WebSocket.prototype);\n EventEmitter.call(client);\n\n client.readyState = ReadyState.OPEN;\n client.url = 'ws://localhost';\n client.protocol = '';\n client.extensions = '';\n client.binaryType = 'nodebuffer';\n client._socket = socket;\n\n // Handle incoming frames\n socket.on('data', (data: Buffer) => {\n // Simple frame parsing (minimal implementation)\n try {\n const message = this._parseFrame(data);\n if (message) {\n client.emit('message', message, false);\n }\n } catch (error) {\n client.emit('error', error);\n }\n });\n\n socket.on('end', () => {\n client.readyState = ReadyState.CLOSED;\n client.emit('close', CLOSE_CODES.NORMAL, '');\n });\n\n socket.on('error', (error: Error) => {\n // Silently ignore connection errors (ECONNABORTED, ECONNRESET, etc.)\n // These are normal when clients disconnect during HMR\n const errorCode = (error as any).code;\n if (errorCode === 'ECONNABORTED' || errorCode === 'ECONNRESET' || errorCode === 'EPIPE') {\n // Silently ignore - connection was closed by client\n return;\n }\n // Only emit other errors\n client.emit('error', error);\n });\n\n // Override send method\n client.send = (data: Data, _options?: any, callback?: (err?: Error) => void) => {\n // Check if socket is still writable\n if (!socket.writable || client.readyState !== ReadyState.OPEN) {\n const err = new Error('WebSocket is not open');\n (err as any).code = 'WS_NOT_OPEN';\n queueCallback(callback, err);\n return;\n }\n\n try {\n const frame = this._createFrame(data);\n socket.write(frame, (err?: Error) => {\n // Handle async write errors (ECONNABORTED, ECONNRESET, etc.)\n if (err) {\n const errorCode = (err as any).code;\n // Silently ignore connection errors - these are normal during HMR\n if (errorCode !== 'ECONNABORTED' && errorCode !== 'ECONNRESET' && errorCode !== 'EPIPE') {\n queueCallback(callback, err);\n } else {\n // Connection closed - mark client as closed\n client.readyState = ReadyState.CLOSED;\n queueCallback(callback); // Call without error for graceful handling\n }\n } else {\n queueCallback(callback);\n }\n });\n } catch (error) {\n queueCallback(callback, error as Error);\n }\n };\n\n // Override close method\n client.close = (_code?: number, _reason?: string) => {\n socket.end();\n client.readyState = ReadyState.CLOSED;\n };\n\n return client;\n }\n\n private _parseFrame(data: Buffer): string | null {\n // Minimal WebSocket frame parsing\n if (data.length < 2) return null;\n\n const firstByte = data[0];\n const secondByte = data[1];\n\n const opcode = firstByte & 0x0f;\n const isMasked = (secondByte & 0x80) === 0x80;\n let payloadLength = secondByte & 0x7f;\n let offset = 2;\n\n if (payloadLength === 126) {\n payloadLength = data.readUInt16BE(2);\n offset = 4;\n } else if (payloadLength === 127) {\n payloadLength = Number(data.readBigUInt64BE(2));\n offset = 10;\n }\n\n let payload = data.subarray(offset);\n\n if (isMasked) {\n const maskKey = data.subarray(offset, offset + 4);\n payload = data.subarray(offset + 4, offset + 4 + payloadLength);\n\n // Unmask payload\n for (let i = 0; i < payload.length; i++) {\n payload[i] ^= maskKey[i % 4];\n }\n }\n\n // Text frame (opcode 1)\n if (opcode === 1) {\n return payload.toString('utf8');\n }\n\n return null;\n }\n\n private _createFrame(data: Data): Buffer {\n // Create simple text frame (opcode 1, no masking)\n const payload = typeof data === 'string' ? Buffer.from(data) : data;\n const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;\n\n let frame: Buffer;\n let offset = 2;\n\n if (payloadLength < 126) {\n frame = Buffer.allocUnsafe(2 + payloadLength);\n frame[1] = payloadLength;\n } else if (payloadLength < 65536) {\n frame = Buffer.allocUnsafe(4 + payloadLength);\n frame[1] = 126;\n frame.writeUInt16BE(payloadLength, 2);\n offset = 4;\n } else {\n frame = Buffer.allocUnsafe(10 + payloadLength);\n frame[1] = 127;\n frame.writeBigUInt64BE(BigInt(payloadLength), 2);\n offset = 10;\n }\n\n frame[0] = 0x81; // FIN + text frame\n\n if (Buffer.isBuffer(payload)) {\n payload.copy(frame, offset);\n }\n\n return frame;\n }\n\n /**\n * Close the server\n */\n close(callback?: (err?: Error) => void): void {\n this.clients.forEach(client => client.close());\n this.clients.clear();\n\n if (this._httpServer) {\n this._httpServer.close(callback);\n } else {\n this.emit('close');\n queueCallback(callback);\n }\n }\n\n /**\n * Check if server should handle request\n */\n shouldHandle(request: IncomingMessage): boolean {\n if (this.path && request.url !== this.path) {\n return false;\n }\n return true;\n }\n\n /**\n * Get server address\n */\n address(): { port: number; family: string; address: string } | null {\n if (this._httpServer && this._httpServer.address) {\n return this._httpServer.address();\n }\n return null;\n }\n}\n\n/**\n * Create WebSocket server\n */\nexport function createWebSocketServer(options?: ServerOptions, callback?: () => void): WebSocketServer {\n return new WebSocketServer(options, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n WebSocket,\n WebSocketServer,\n createWebSocketServer,\n ReadyState,\n CLOSE_CODES,\n getRuntime,\n};\n","/**\n * File watcher module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with 'chokidar' package API\n * - Node.js: uses native fs.watch\n * - Bun: uses native fs.watch with enhancements\n * - Deno: uses Deno.watchFs\n */\n\nimport { EventEmitter } from 'events';\nimport { runtime } from './runtime';\n\n/**\n * Helper: Normalize path separators (eliminates duplication in path handling)\n */\nfunction normalizePath(path: string): string {\n return path.replace(/\\\\/g, '/');\n}\n\n/**\n * Helper: Emit event and all event (eliminates duplication in event emitting)\n */\nfunction emitEvent(watcher: FSWatcher, eventType: string, path: string): void {\n watcher.emit(eventType, path);\n watcher.emit('all', eventType, path);\n}\n\n/**\n * Helper: Check if path matches any pattern (eliminates duplication in pattern matching)\n */\nfunction matchesAnyPattern(path: string, patterns: string[]): boolean {\n return patterns.some(pattern => matchesPattern(path, pattern));\n}\n\n/**\n * Helper: Handle rename event (eliminates duplication in rename handling)\n */\nfunction handleRenameEvent(watcher: FSWatcher, fullPath: string, fs: any): void {\n try {\n fs.statSync(fullPath);\n emitEvent(watcher, 'add', fullPath);\n } catch {\n emitEvent(watcher, 'unlink', fullPath);\n }\n}\n\n/**\n * Helper: Setup fs.watch for Node.js/Bun (eliminates duplication in watcher setup)\n */\nfunction setupFsWatch(\n watcher: FSWatcher,\n baseDir: string,\n patterns: string[],\n fs: any\n): void {\n try {\n const nativeWatcher = fs.watch(baseDir, { recursive: true }, (eventType: string, filename: string) => {\n if (!filename) return;\n\n const fullPath = normalizePath(`${baseDir}/${filename}`);\n\n // Check if the file matches any of the patterns\n if (!matchesAnyPattern(fullPath, patterns)) return;\n\n if (eventType === 'rename') {\n handleRenameEvent(watcher, fullPath, fs);\n } else if (eventType === 'change') {\n emitEvent(watcher, 'change', fullPath);\n }\n });\n\n watcher._setWatcher(nativeWatcher);\n // Track watched paths directly\n watcher['_watched'].add(baseDir);\n\n // Emit ready after a short delay\n queueMicrotask(() => watcher.emit('ready'));\n } catch (error) {\n watcher.emit('error', error as Error);\n }\n}\n\n/**\n * Watch options\n */\nexport interface WatchOptions {\n /**\n * Indicates whether the process should continue to run as long as files are being watched.\n * If set to false, the process will continue running even if the watcher is closed.\n */\n persistent?: boolean;\n\n /**\n * Indicates whether to watch files that don't have read permissions.\n */\n ignorePermissionErrors?: boolean;\n\n /**\n * A function that takes one parameter (the path of the file/directory)\n * and returns true to ignore or false to watch.\n */\n ignored?: string | RegExp | ((path: string) => boolean);\n\n /**\n * If set to false, only the parent directory will be watched for new files.\n */\n ignoreInitial?: boolean;\n\n /**\n * If set to true, symlinks will be followed.\n */\n followSymlinks?: boolean;\n\n /**\n * Interval of file system polling (in milliseconds).\n */\n interval?: number;\n\n /**\n * Interval of file system polling for binary files (in milliseconds).\n */\n binaryInterval?: number;\n\n /**\n * If set to true, will provide fs.Stats object as second argument\n * in add, addDir, and change events.\n */\n alwaysStat?: boolean;\n\n /**\n * If set, limits how many levels of subdirectories will be traversed.\n */\n depth?: number;\n\n /**\n * By default, add event fires when a file first appears on disk.\n * Setting this will wait for the write to finish before firing.\n */\n awaitWriteFinish?: boolean | {\n stabilityThreshold?: number;\n pollInterval?: number;\n };\n\n /**\n * If set to true, will use fs.watchFile() (polling) instead of fs.watch().\n */\n usePolling?: boolean;\n\n /**\n * Whether to use fsevents watching on macOS (if available).\n */\n useFsEvents?: boolean;\n\n /**\n * The base path to watch.\n */\n cwd?: string;\n\n /**\n * Whether to disable globbing.\n */\n disableGlobbing?: boolean;\n\n /**\n * Automatically filter out artifacts that occur when using editors.\n */\n atomic?: boolean | number;\n}\n\n/**\n * FSWatcher class - Compatible with chokidar\n */\nexport class FSWatcher extends EventEmitter {\n private _watcher: any;\n private _closed: boolean = false;\n private _watched: Set<string> = new Set();\n\n constructor(options?: WatchOptions) {\n super();\n this.options = options || {};\n }\n\n public options: WatchOptions;\n\n /**\n * Add paths to be watched\n */\n add(paths: string | string[]): FSWatcher {\n if (this._closed) {\n throw new Error('Watcher has been closed');\n }\n\n const pathArray = Array.isArray(paths) ? paths : [paths];\n\n if (runtime === 'node') {\n if (this._watcher) {\n this._watcher.add(pathArray);\n }\n } else {\n pathArray.forEach(path => this._watched.add(path));\n }\n\n return this;\n }\n\n /**\n * Stop watching paths\n */\n unwatch(paths: string | string[]): FSWatcher {\n if (this._closed) {\n return this;\n }\n\n const pathArray = Array.isArray(paths) ? paths : [paths];\n\n if (runtime === 'node') {\n if (this._watcher) {\n this._watcher.unwatch(pathArray);\n }\n } else {\n pathArray.forEach(path => this._watched.delete(path));\n }\n\n return this;\n }\n\n /**\n * Close the watcher\n */\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n\n if (runtime === 'node') {\n if (this._watcher) {\n await this._watcher.close();\n }\n }\n\n this.removeAllListeners();\n }\n\n /**\n * Get watched paths\n */\n getWatched(): { [directory: string]: string[] } {\n if (runtime === 'node' && this._watcher) {\n return this._watcher.getWatched();\n }\n\n const result: { [directory: string]: string[] } = {};\n this._watched.forEach(path => {\n const dir = path.substring(0, path.lastIndexOf('/')) || '.';\n const file = path.substring(path.lastIndexOf('/') + 1);\n if (!result[dir]) {\n result[dir] = [];\n }\n result[dir].push(file);\n });\n\n return result;\n }\n\n /**\n * Internal method to set native watcher\n * @internal\n */\n _setWatcher(watcher: any): void {\n this._watcher = watcher;\n }\n}\n\n/**\n * Extract base directory from glob pattern\n * e.g., 'src/**\\/*.ts' -> 'src', '**\\/*.ts' -> '.'\n */\nfunction getBaseDirectory(pattern: string): string {\n // Remove glob patterns to get the base directory\n const parts = pattern.split(/[\\\\\\/]/);\n let baseDir = '';\n\n for (const part of parts) {\n if (part.includes('*') || part.includes('?')) {\n break;\n }\n baseDir = baseDir ? `${baseDir}/${part}` : part;\n }\n\n return baseDir || '.';\n}\n\n/**\n * Check if a path matches a glob pattern\n */\nfunction matchesPattern(filePath: string, pattern: string): boolean {\n // Simple glob matching - convert pattern to regex\n const regexPattern = normalizePath(pattern)\n .replace(/\\*\\*/g, '.*')\n .replace(/\\*/g, '[^/]*')\n .replace(/\\?/g, '.');\n\n const regex = new RegExp(`^${regexPattern}$`);\n const normalizedPath = normalizePath(filePath);\n\n return regex.test(normalizedPath);\n}\n\n/**\n * Watch files and directories\n */\nexport function watch(\n paths: string | string[],\n options?: WatchOptions\n): FSWatcher {\n const watcher = new FSWatcher(options);\n const pathArray = Array.isArray(paths) ? paths : [paths];\n\n // Extract patterns and their base directories\n const watchMap = new Map<string, string[]>();\n\n pathArray.forEach(path => {\n const baseDir = getBaseDirectory(path);\n if (!watchMap.has(baseDir)) {\n watchMap.set(baseDir, []);\n }\n watchMap.get(baseDir)!.push(path);\n });\n\n if (runtime === 'node') {\n // Node.js - use native fs.watch\n const fs = require('fs');\n watchMap.forEach((patterns, baseDir) => setupFsWatch(watcher, baseDir, patterns, fs));\n } else if (runtime === 'bun') {\n // Bun - use native fs.watch\n const fs = require('fs');\n watchMap.forEach((patterns, baseDir) => setupFsWatch(watcher, baseDir, patterns, fs));\n } else if (runtime === 'deno') {\n // Deno - use Deno.watchFs\n // Extract just the base directories for Deno\n const baseDirs = Array.from(watchMap.keys());\n const allPatterns = Array.from(watchMap.values()).flat();\n\n (async () => {\n try {\n // @ts-ignore\n const denoWatcher = Deno.watchFs(baseDirs);\n\n for await (const event of denoWatcher) {\n if (watcher['_closed']) break;\n\n for (const path of event.paths) {\n const normalizedPath = normalizePath(path);\n\n // Check if the file matches any of the patterns\n if (!matchesAnyPattern(normalizedPath, allPatterns)) continue;\n\n switch (event.kind) {\n case 'create':\n emitEvent(watcher, 'add', path);\n break;\n case 'modify':\n emitEvent(watcher, 'change', path);\n break;\n case 'remove':\n emitEvent(watcher, 'unlink', path);\n break;\n }\n }\n }\n } catch (error) {\n if (!watcher['_closed']) {\n watcher.emit('error', error as Error);\n }\n }\n })();\n\n pathArray.forEach(path => watcher.add(path));\n queueMicrotask(() => watcher.emit('ready'));\n }\n\n return watcher;\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n watch,\n FSWatcher,\n getRuntime,\n};\n","/**\n * Path module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with Node.js 'path' module API\n * Works on Node.js, Bun, and Deno\n */\n\nimport { isBun, isDeno, isNode, runtime } from './runtime';\n\n/**\n * Helper: Get path separator for platform (eliminates duplication in separator logic)\n */\nfunction getSeparator(isWin: boolean): string {\n return isWin ? '\\\\' : '/';\n}\n\n/**\n * Helper: Get current working directory (eliminates duplication in resolvePaths)\n */\nfunction getCwd(): string {\n if (isNode || isBun) {\n return process.cwd();\n } else if (isDeno) {\n // @ts-ignore\n return Deno.cwd();\n }\n return '/';\n}\n\n/**\n * Helper: Find last separator index (eliminates duplication in getExtname and getBasename)\n */\nfunction findLastSeparator(path: string): number {\n return Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'));\n}\n\n/**\n * Helper: Create path operation object (eliminates duplication in posix and win32)\n */\nfunction createPathOps(isWin: boolean) {\n return {\n sep: getSeparator(isWin),\n delimiter: isWin ? ';' : ':',\n normalize: (path: string) => normalizePath(path, isWin),\n join: (...paths: string[]) => joinPaths(paths, isWin),\n resolve: (...paths: string[]) => resolvePaths(paths, isWin),\n isAbsolute: (path: string) => isWin ? isAbsoluteWin(path) : isAbsolutePosix(path),\n relative: (from: string, to: string) => relativePath(from, to, isWin),\n dirname: (path: string) => getDirname(path, isWin),\n basename: (path: string, ext?: string) => getBasename(path, ext, isWin),\n extname: (path: string) => getExtname(path),\n parse: (path: string) => parsePath(path, isWin),\n format: (pathObject: FormatInputPathObject) => formatPath(pathObject, isWin)\n };\n}\n\n/**\n * Helper: Check if path is absolute (POSIX)\n */\nfunction isAbsolutePosix(path: string): boolean {\n return path.length > 0 && path[0] === '/';\n}\n\n/**\n * Helper: Check if path is absolute (Windows)\n */\nfunction isAbsoluteWin(path: string): boolean {\n const len = path.length;\n if (len === 0) return false;\n\n const code = path.charCodeAt(0);\n if (code === 47 /* / */ || code === 92 /* \\ */) {\n return true;\n }\n\n // Check for drive letter\n if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {\n if (len > 2 && path.charCodeAt(1) === 58 /* : */) {\n const code2 = path.charCodeAt(2);\n if (code2 === 47 /* / */ || code2 === 92 /* \\ */) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n/**\n * Platform detection\n */\nconst isWindows = (() => {\n if (isNode) {\n return process.platform === 'win32';\n } else if (isDeno) {\n // @ts-ignore\n return Deno.build.os === 'windows';\n }\n // Bun uses process.platform like Node\n return typeof process !== 'undefined' && process.platform === 'win32';\n})();\n\n/**\n * Path separator\n */\nexport const sep = isWindows ? '\\\\' : '/';\n\n/**\n * Path delimiter\n */\nexport const delimiter = isWindows ? ';' : ':';\n\n/**\n * POSIX path operations\n */\nconst posix = createPathOps(false);\n\n/**\n * Windows path operations\n */\nconst win32 = createPathOps(true);\n\n/**\n * Path object interface\n */\nexport interface ParsedPath {\n root: string;\n dir: string;\n base: string;\n ext: string;\n name: string;\n}\n\nexport interface FormatInputPathObject {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n}\n\n/**\n * Normalize a path\n */\nfunction normalizePath(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const isAbsolute = isWin ? isAbsoluteWin(path) : isAbsolutePosix(path);\n const trailingSeparator = path[path.length - 1] === separator || (isWin && path[path.length - 1] === '/');\n\n // Normalize slashes\n let normalized = path.replace(isWin ? /[\\/\\\\]+/g : /\\/+/g, separator);\n\n // Split path\n const parts = normalized.split(separator);\n const result: string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n if (part === '' || part === '.') {\n if (i === 0 && isAbsolute) result.push('');\n continue;\n }\n\n if (part === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n if (!(result.length === 1 && result[0] === '')) {\n result.pop();\n }\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else {\n result.push(part);\n }\n }\n\n let final = result.join(separator);\n\n if (final.length === 0) {\n return isAbsolute ? separator : '.';\n }\n\n if (trailingSeparator && final[final.length - 1] !== separator) {\n final += separator;\n }\n\n return final;\n}\n\n/**\n * Join paths\n */\nfunction joinPaths(paths: string[], isWin: boolean): string {\n if (paths.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n let joined = '';\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n if (path && path.length > 0) {\n if (joined.length === 0) {\n joined = path;\n } else {\n joined += separator + path;\n }\n }\n }\n\n if (joined.length === 0) return '.';\n\n return normalizePath(joined, isWin);\n}\n\n/**\n * Resolve paths to absolute path\n */\nfunction resolvePaths(paths: string[], isWin: boolean): string {\n const separator = getSeparator(isWin);\n let resolved = '';\n let isAbsolute = false;\n\n for (let i = paths.length - 1; i >= 0 && !isAbsolute; i--) {\n const path = paths[i];\n if (path && path.length > 0) {\n resolved = path + (resolved.length > 0 ? separator + resolved : '');\n isAbsolute = isWin ? isAbsoluteWin(resolved) : isAbsolutePosix(resolved);\n }\n }\n\n if (!isAbsolute) {\n const cwd = getCwd();\n resolved = cwd + (resolved.length > 0 ? separator + resolved : '');\n }\n\n return normalizePath(resolved, isWin);\n}\n\n/**\n * Get relative path\n */\nfunction relativePath(from: string, to: string, isWin: boolean): string {\n from = resolvePaths([from], isWin);\n to = resolvePaths([to], isWin);\n\n if (from === to) return '';\n\n const separator = getSeparator(isWin);\n const fromParts = from.split(separator).filter(p => p.length > 0);\n const toParts = to.split(separator).filter(p => p.length > 0);\n\n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n\n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] === toParts[i]) {\n commonLength++;\n } else {\n break;\n }\n }\n\n const upCount = fromParts.length - commonLength;\n const result: string[] = [];\n\n for (let i = 0; i < upCount; i++) {\n result.push('..');\n }\n\n for (let i = commonLength; i < toParts.length; i++) {\n result.push(toParts[i]);\n }\n\n return result.join(separator) || '.';\n}\n\n/**\n * Get directory name\n */\nfunction getDirname(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const normalized = normalizePath(path, isWin);\n const lastSepIndex = normalized.lastIndexOf(separator);\n\n if (lastSepIndex === -1) return '.';\n if (lastSepIndex === 0) return separator;\n\n return normalized.slice(0, lastSepIndex);\n}\n\n/**\n * Get base name\n */\nfunction getBasename(path: string, ext?: string, isWin?: boolean): string {\n if (path.length === 0) return '';\n\n const lastSepIndex = isWin ? findLastSeparator(path) : path.lastIndexOf('/');\n let base = lastSepIndex === -1 ? path : path.slice(lastSepIndex + 1);\n\n if (ext && base.endsWith(ext)) {\n base = base.slice(0, base.length - ext.length);\n }\n\n return base;\n}\n\n/**\n * Get extension name\n */\nfunction getExtname(path: string): string {\n const lastDotIndex = path.lastIndexOf('.');\n const lastSepIndex = findLastSeparator(path);\n\n if (lastDotIndex === -1 || lastDotIndex < lastSepIndex || lastDotIndex === path.length - 1) {\n return '';\n }\n\n return path.slice(lastDotIndex);\n}\n\n/**\n * Parse path into components\n */\nfunction parsePath(path: string, isWin: boolean): ParsedPath {\n let root = '';\n if (isWin) {\n // Check for Windows drive letter\n if (path.length >= 2 && path[1] === ':') {\n root = path.slice(0, 2);\n if (path.length > 2 && (path[2] === '\\\\' || path[2] === '/')) {\n root += '\\\\';\n }\n } else if (path[0] === '\\\\' || path[0] === '/') {\n root = '\\\\';\n }\n } else {\n if (path[0] === '/') {\n root = '/';\n }\n }\n\n const dir = getDirname(path, isWin);\n const base = getBasename(path, undefined, isWin);\n const ext = getExtname(path);\n const name = ext ? base.slice(0, base.length - ext.length) : base;\n\n return { root, dir, base, ext, name };\n}\n\n/**\n * Format path from components\n */\nfunction formatPath(pathObject: FormatInputPathObject, isWin: boolean): string {\n const separator = getSeparator(isWin);\n const dir = pathObject.dir || pathObject.root || '';\n const base = pathObject.base || ((pathObject.name || '') + (pathObject.ext || ''));\n\n if (!dir) return base;\n if (dir === pathObject.root) return dir + base;\n\n return dir + separator + base;\n}\n\n/**\n * Normalize a path (platform-specific)\n */\nexport function normalize(path: string): string {\n return normalizePath(path, isWindows);\n}\n\n/**\n * Join paths (platform-specific)\n */\nexport function join(...paths: string[]): string {\n return joinPaths(paths, isWindows);\n}\n\n/**\n * Resolve paths to absolute path (platform-specific)\n */\nexport function resolve(...paths: string[]): string {\n return resolvePaths(paths, isWindows);\n}\n\n/**\n * Check if path is absolute (platform-specific)\n */\nexport function isAbsolute(path: string): boolean {\n return isWindows ? win32.isAbsolute(path) : posix.isAbsolute(path);\n}\n\n/**\n * Get relative path (platform-specific)\n */\nexport function relative(from: string, to: string): string {\n return relativePath(from, to, isWindows);\n}\n\n/**\n * Get directory name (platform-specific)\n */\nexport function dirname(path: string): string {\n return getDirname(path, isWindows);\n}\n\n/**\n * Get base name (platform-specific)\n */\nexport function basename(path: string, ext?: string): string {\n return getBasename(path, ext, isWindows);\n}\n\n/**\n * Get extension name\n */\nexport function extname(path: string): string {\n return getExtname(path);\n}\n\n/**\n * Parse path into components (platform-specific)\n */\nexport function parse(path: string): ParsedPath {\n return parsePath(path, isWindows);\n}\n\n/**\n * Format path from components (platform-specific)\n */\nexport function format(pathObject: FormatInputPathObject): string {\n return formatPath(pathObject, isWindows);\n}\n\n/**\n * Convert to namespaced path (Windows only)\n */\nexport function toNamespacedPath(path: string): string {\n if (!isWindows || path.length === 0) return path;\n\n const resolved = resolve(path);\n\n if (resolved.length >= 3) {\n if (resolved[0] === '\\\\') {\n // UNC path\n if (resolved[1] === '\\\\' && resolved[2] !== '?') {\n return '\\\\\\\\?\\\\UNC\\\\' + resolved.slice(2);\n }\n } else if (resolved[1] === ':' && resolved[2] === '\\\\') {\n // Drive letter\n return '\\\\\\\\?\\\\' + resolved;\n }\n }\n\n return path;\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Export POSIX and Win32 implementations\n */\nexport { posix, win32 };\n\n/**\n * Default export\n */\nexport default {\n sep,\n delimiter,\n normalize,\n join,\n resolve,\n isAbsolute,\n relative,\n dirname,\n basename,\n extname,\n parse,\n format,\n toNamespacedPath,\n posix,\n win32,\n getRuntime,\n};\n","/**\n * MIME Types module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with 'mime-types' package API\n * Works on Node.js, Bun, and Deno\n */\n\nimport { runtime } from './runtime';\n\n/**\n * Common MIME type mappings (for Bun/Deno)\n * Lightweight version with most common types\n */\nconst MIME_TYPES: Record<string, string> = {\n // Text\n 'txt': 'text/plain',\n 'html': 'text/html',\n 'htm': 'text/html',\n 'css': 'text/css',\n 'js': 'text/javascript',\n 'mjs': 'text/javascript',\n 'json': 'application/json',\n 'xml': 'application/xml',\n 'csv': 'text/csv',\n 'md': 'text/markdown',\n 'markdown': 'text/x-markdown',\n\n // Images\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'gif': 'image/gif',\n 'svg': 'image/svg+xml',\n 'webp': 'image/webp',\n 'ico': 'image/x-icon',\n 'bmp': 'image/bmp',\n 'tiff': 'image/tiff',\n 'tif': 'image/tiff',\n\n // Audio\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'ogg': 'audio/ogg',\n 'aac': 'audio/aac',\n 'm4a': 'audio/mp4',\n 'flac': 'audio/flac',\n\n // Video\n 'mp4': 'video/mp4',\n 'webm': 'video/webm',\n 'avi': 'video/x-msvideo',\n 'mov': 'video/quicktime',\n 'mkv': 'video/x-matroska',\n 'flv': 'video/x-flv',\n\n // Application\n 'pdf': 'application/pdf',\n 'zip': 'application/zip',\n 'gz': 'application/gzip',\n 'tar': 'application/x-tar',\n 'rar': 'application/x-rar-compressed',\n '7z': 'application/x-7z-compressed',\n\n // Documents\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\n // Fonts\n 'woff': 'font/woff',\n 'woff2': 'font/woff2',\n 'ttf': 'font/ttf',\n 'otf': 'font/otf',\n 'eot': 'application/vnd.ms-fontobject',\n\n // Web\n 'wasm': 'application/wasm',\n 'manifest': 'application/manifest+json',\n\n // Binary\n 'bin': 'application/octet-stream',\n 'exe': 'application/x-msdownload',\n 'dll': 'application/x-msdownload',\n\n // TypeScript/Modern JS\n 'ts': 'text/typescript',\n 'tsx': 'text/tsx',\n 'jsx': 'text/jsx',\n};\n\n/**\n * Reverse mapping: MIME type to extensions\n */\nconst TYPE_TO_EXTENSIONS: Record<string, string[]> = {};\nfor (const ext in MIME_TYPES) {\n const type = MIME_TYPES[ext];\n if (!TYPE_TO_EXTENSIONS[type]) {\n TYPE_TO_EXTENSIONS[type] = [];\n }\n TYPE_TO_EXTENSIONS[type].push(ext);\n}\n\n/**\n * Charset mappings\n */\nconst CHARSETS: Record<string, string> = {\n 'text/plain': 'UTF-8',\n 'text/html': 'UTF-8',\n 'text/css': 'UTF-8',\n 'text/javascript': 'UTF-8',\n 'application/json': 'UTF-8',\n 'application/xml': 'UTF-8',\n 'text/csv': 'UTF-8',\n 'text/markdown': 'UTF-8',\n 'text/x-markdown': 'UTF-8',\n 'text/typescript': 'UTF-8',\n 'text/tsx': 'UTF-8',\n 'text/jsx': 'UTF-8',\n 'application/javascript': 'UTF-8',\n};\n\n/**\n * Get the extension from a path\n */\nfunction getExtension(path: string): string {\n const match = /\\.([^./\\\\]+)$/.exec(path);\n return match ? match[1].toLowerCase() : '';\n}\n\n/**\n * Normalize MIME type (remove parameters)\n */\nfunction normalizeMimeType(type: string): string {\n const match = /^([^;\\s]+)/.exec(type);\n return match ? match[1].toLowerCase() : '';\n}\n\n/**\n * Lookup MIME type from file path or extension\n */\nexport function lookup(path: string): string | false {\n const ext = getExtension(path) || path.toLowerCase();\n return MIME_TYPES[ext] || false;\n}\n\n/**\n * Get the default extension for a MIME type\n */\nexport function extension(type: string): string | false {\n const normalized = normalizeMimeType(type);\n const exts = TYPE_TO_EXTENSIONS[normalized];\n return exts && exts.length > 0 ? exts[0] : false;\n}\n\n/**\n * Get all extensions for a MIME type\n */\nexport function extensions(type: string): string[] | undefined {\n const normalized = normalizeMimeType(type);\n return TYPE_TO_EXTENSIONS[normalized];\n}\n\n/**\n * Get the default charset for a MIME type\n */\nexport function charset(type: string): string | false {\n const normalized = normalizeMimeType(type);\n return CHARSETS[normalized] || false;\n}\n\n/**\n * Create a full Content-Type header value\n */\nexport function contentType(typeOrExt: string): string | false {\n // Check if it's a file extension or path\n let type: string | false;\n if (typeOrExt.includes('/')) {\n // Already a MIME type\n type = typeOrExt;\n } else {\n // Lookup MIME type\n type = lookup(typeOrExt);\n if (!type) return false;\n }\n\n const normalized = normalizeMimeType(type);\n const charsetValue = CHARSETS[normalized];\n\n if (charsetValue) {\n return `${normalized}; charset=${charsetValue.toLowerCase()}`;\n }\n\n return normalized;\n}\n\n/**\n * Get all MIME types\n */\nexport const types = MIME_TYPES;\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n lookup,\n extension,\n extensions,\n charset,\n contentType,\n types,\n getRuntime,\n};\n","/**\n * Elit - DomNode Core Class\n */\n\nimport type { VNode, Child, Children, Props, State, StateOptions, VirtualListController, JsonNode, VNodeJson } from './types';\n\n/**\n * Helper: Resolve element from string ID or HTMLElement (eliminates duplication in render methods)\n */\nfunction resolveElement(rootElement: string | HTMLElement): HTMLElement | null {\n return typeof rootElement === 'string'\n ? document.getElementById(rootElement.replace('#', ''))\n : rootElement;\n}\n\n/**\n * Helper: Ensure element exists or throw error (eliminates duplication in validation)\n */\nfunction ensureElement(el: HTMLElement | null, rootElement: string | HTMLElement): HTMLElement {\n if (!el) {\n throw new Error(`Element not found: ${rootElement}`);\n }\n return el;\n}\n\n/**\n * Helper: Check if child should be skipped (eliminates duplication in child rendering)\n */\nfunction shouldSkipChild(child: any): boolean {\n return child == null || child === false;\n}\n\n/**\n * Helper: Check if value is primitive JSON type (eliminates duplication in JSON conversion)\n */\nfunction isPrimitiveJson(json: any): json is string | number | boolean | null | undefined {\n return json == null || typeof json === 'boolean' || typeof json === 'string' || typeof json === 'number';\n}\n\nexport class DomNode {\n private elementCache = new WeakMap<Element, boolean>();\n\n createElement(tagName: string, props: Props = {}, children: Children = []): VNode {\n return { tagName, props, children };\n }\n\n renderToDOM(vNode: Child, parent: HTMLElement | SVGElement | DocumentFragment): void {\n if (vNode == null || vNode === false) return;\n\n // Handle primitive values (strings, numbers)\n if (typeof vNode !== 'object') {\n parent.appendChild(document.createTextNode(String(vNode)));\n return;\n }\n\n // Handle arrays (Child[])\n if (Array.isArray(vNode)) {\n for (const child of vNode) {\n this.renderToDOM(child, parent);\n }\n return;\n }\n\n // Handle VNode\n const { tagName, props, children } = vNode;\n\n // Handle fragment (empty tagName) - render children directly to parent\n if (!tagName) {\n // Fragments don't have their own element, so skip ref handling\n // The ref will be handled by the wrapper element created by reactive()\n // Render children directly to parent\n for (const child of children) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n !shouldSkipChild(c) && this.renderToDOM(c, parent);\n }\n } else {\n this.renderToDOM(child, parent);\n }\n }\n return;\n }\n\n const isSVG = tagName === 'svg' || (tagName[0] === 's' && tagName[1] === 'v' && tagName[2] === 'g') ||\n (parent as any).namespaceURI === 'http://www.w3.org/2000/svg';\n\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', tagName.replace('svg', '').toLowerCase() || tagName)\n : document.createElement(tagName);\n\n for (const key in props) {\n const value = props[key];\n if (value == null || value === false) continue;\n\n const c = key.charCodeAt(0);\n // class or className (c=99)\n if (c === 99 && (key.length < 6 || key[5] === 'N')) {\n const classValue = Array.isArray(value) ? value.join(' ') : value;\n isSVG ? (el as SVGElement).setAttribute('class', classValue) : (el as HTMLElement).className = classValue;\n }\n // style (s=115)\n else if (c === 115 && key.length === 5) {\n if (typeof value === 'string') {\n (el as HTMLElement).style.cssText = value;\n } else {\n const s = (el as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n }\n }\n // on* events (o=111, n=110)\n else if (c === 111 && key.charCodeAt(1) === 110) {\n (el as any)[key.toLowerCase()] = value;\n }\n // dangerouslySetInnerHTML (d=100)\n else if (c === 100 && key.length > 20) {\n (el as HTMLElement).innerHTML = value.__html;\n }\n // ref (r=114)\n else if (c === 114 && key.length === 3) {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const len = children.length;\n if (!len) {\n parent.appendChild(el);\n return;\n }\n\n const renderChildren = (target: HTMLElement | SVGElement | DocumentFragment) => {\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n !shouldSkipChild(c) && this.renderToDOM(c, target);\n }\n } else {\n this.renderToDOM(child, target);\n }\n }\n };\n\n if (len > 30) {\n const fragment = document.createDocumentFragment();\n renderChildren(fragment);\n el.appendChild(fragment);\n } else {\n renderChildren(el);\n }\n\n parent.appendChild(el);\n }\n\n render(rootElement: string | HTMLElement, vNode: VNode): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n // Clear existing content before rendering\n el.innerHTML = '';\n\n if (vNode.children && vNode.children.length > 500) {\n const fragment = document.createDocumentFragment();\n this.renderToDOM(vNode, fragment);\n el.appendChild(fragment);\n } else {\n this.renderToDOM(vNode, el);\n }\n return el;\n }\n\n batchRender(rootElement: string | HTMLElement, vNodes: VNode[]): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n\n if (len > 3000) {\n const fragment = document.createDocumentFragment();\n let processed = 0;\n const chunkSize = 1500;\n\n const processChunk = (): void => {\n const end = Math.min(processed + chunkSize, len);\n for (let i = processed; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n processed = end;\n\n if (processed >= len) {\n el.appendChild(fragment);\n } else {\n requestAnimationFrame(processChunk);\n }\n };\n\n processChunk();\n } else {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < len; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n el.appendChild(fragment);\n }\n return el;\n }\n\n renderChunked(\n rootElement: string | HTMLElement,\n vNodes: VNode[],\n chunkSize = 5000,\n onProgress?: (current: number, total: number) => void\n ): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n let index = 0;\n\n const renderChunk = (): void => {\n const end = Math.min(index + chunkSize, len);\n const fragment = document.createDocumentFragment();\n\n for (let i = index; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n\n el.appendChild(fragment);\n index = end;\n\n if (onProgress) onProgress(index, len);\n\n if (index < len) {\n requestAnimationFrame(renderChunk);\n }\n };\n\n requestAnimationFrame(renderChunk);\n return el;\n }\n\n renderToHead(...vNodes: Array<VNode | VNode[]>): HTMLHeadElement | null {\n const head = document.head;\n if (head) {\n for (const vNode of vNodes.flat()) {\n vNode && this.renderToDOM(vNode, head);\n }\n }\n return head;\n }\n\n addStyle(cssText: string): HTMLStyleElement {\n const el = document.createElement('style');\n el.textContent = cssText;\n return document.head.appendChild(el);\n }\n\n addMeta(attrs: Record<string, string>): HTMLMetaElement {\n const el = document.createElement('meta');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n addLink(attrs: Record<string, string>): HTMLLinkElement {\n const el = document.createElement('link');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n setTitle(text: string): string {\n return document.title = text;\n }\n\n // Reactive State Management\n createState<T>(initialValue: T, options: StateOptions = {}): State<T> {\n let value = initialValue;\n const listeners = new Set<(value: T) => void>();\n let updateTimer: NodeJS.Timeout | null = null;\n const { throttle = 0, deep = false } = options;\n\n const notify = () => listeners.forEach(fn => fn(value));\n\n const scheduleUpdate = () => {\n if (throttle > 0) {\n if (!updateTimer) {\n updateTimer = setTimeout(() => {\n updateTimer = null;\n notify();\n }, throttle);\n }\n } else {\n notify();\n }\n };\n\n return {\n get value() { return value; },\n set value(newValue: T) {\n const changed = deep ? JSON.stringify(value) !== JSON.stringify(newValue) : value !== newValue;\n if (changed) {\n value = newValue;\n scheduleUpdate();\n }\n },\n subscribe(fn: (value: T) => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n },\n destroy() {\n listeners.clear();\n updateTimer && clearTimeout(updateTimer);\n }\n };\n }\n\n computed<T extends any[], R>(states: { [K in keyof T]: State<T[K]> }, computeFn: (...values: T) => R): State<R> {\n const values = states.map(s => s.value) as unknown as T;\n const result = this.createState(computeFn(...values));\n\n states.forEach((state, index) => {\n state.subscribe((newValue: any) => {\n values[index] = newValue;\n result.value = computeFn(...values);\n });\n });\n\n return result;\n }\n\n effect(stateFn: () => void): void {\n stateFn();\n }\n\n // Virtual scrolling helper for large lists\n createVirtualList<T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight = 50,\n bufferSize = 5\n ): VirtualListController {\n const viewportHeight = container.clientHeight;\n const totalHeight = items.length * itemHeight;\n let scrollTop = 0;\n\n const getVisibleRange = (): { start: number; end: number } => {\n const start = Math.max(0, Math.floor(scrollTop / itemHeight) - bufferSize);\n const end = Math.min(items.length, Math.ceil((scrollTop + viewportHeight) / itemHeight) + bufferSize);\n return { start, end };\n };\n\n const render = (): void => {\n const { start, end } = getVisibleRange();\n const wrapper = document.createElement('div');\n wrapper.style.cssText = `height:${totalHeight}px;position:relative`;\n\n for (let i = start; i < end; i++) {\n const itemEl = document.createElement('div');\n itemEl.style.cssText = `position:absolute;top:${i * itemHeight}px;height:${itemHeight}px;width:100%`;\n this.renderToDOM(renderItem(items[i], i), itemEl);\n wrapper.appendChild(itemEl);\n }\n\n container.innerHTML = '';\n container.appendChild(wrapper);\n };\n\n const scrollHandler = (): void => {\n scrollTop = container.scrollTop;\n requestAnimationFrame(render);\n };\n\n container.addEventListener('scroll', scrollHandler);\n\n render();\n return {\n render,\n destroy: () => {\n container.removeEventListener('scroll', scrollHandler);\n container.innerHTML = '';\n }\n };\n }\n\n // Lazy load components\n lazy<T extends any[], R>(loadFn: () => Promise<(...args: T) => R>): (...args: T) => Promise<R | VNode> {\n let component: ((...args: T) => R) | null = null;\n let loading = false;\n\n return async (...args: T): Promise<R | VNode> => {\n if (!component && !loading) {\n loading = true;\n component = await loadFn();\n loading = false;\n }\n return component ? component(...args) : { tagName: 'div', props: { class: 'loading' }, children: ['Loading...'] };\n };\n }\n\n // Memory management - cleanup unused elements\n cleanupUnusedElements(root: HTMLElement): number {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n const toRemove: Element[] = [];\n\n while (walker.nextNode()) {\n const node = walker.currentNode as Element;\n if (node.id && node.id.startsWith('r') && !this.elementCache.has(node)) {\n toRemove.push(node);\n }\n }\n\n toRemove.forEach(el => el.remove());\n return toRemove.length;\n }\n\n // Server-Side Rendering - convert VNode to HTML string\n renderToString(vNode: Child, options: { pretty?: boolean; indent?: number } = {}): string {\n const { pretty = false, indent = 0 } = options;\n const indentStr = pretty ? ' '.repeat(indent) : '';\n const newLine = pretty ? '\\n' : '';\n\n let resolvedVNode = this.resolveStateValue(vNode);\n resolvedVNode = this.unwrapReactive(resolvedVNode);\n\n if (Array.isArray(resolvedVNode)) {\n return resolvedVNode.map(child => this.renderToString(child, options)).join('');\n }\n\n if (typeof resolvedVNode !== 'object' || resolvedVNode === null) {\n if (resolvedVNode === null || resolvedVNode === undefined || resolvedVNode === false) {\n return '';\n }\n return this.escapeHtml(String(resolvedVNode));\n }\n\n const { tagName, props, children } = resolvedVNode;\n const isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\n\n if (props.dangerouslySetInnerHTML) {\n html += props.dangerouslySetInnerHTML.__html;\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (children && children.length > 0) {\n const resolvedChildren = children.map((c: Child) => {\n const resolved = this.resolveStateValue(c);\n return this.unwrapReactive(resolved);\n });\n\n const hasComplexChildren = resolvedChildren.some(\n (c: any) => typeof c === 'object' && c !== null && !Array.isArray(c) && 'tagName' in c\n );\n\n if (pretty && hasComplexChildren) {\n html += newLine;\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty, indent: indent + 1 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty, indent: indent + 1 });\n }\n }\n html += indentStr;\n } else {\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty: false, indent: 0 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty: false, indent: 0 });\n }\n }\n }\n }\n\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n private resolveStateValue(value: any): any {\n if (value && typeof value === 'object' && 'value' in value && 'subscribe' in value) {\n return value.value;\n }\n return value;\n }\n\n private isReactiveWrapper(vNode: any): boolean {\n if (!vNode || typeof vNode !== 'object' || !vNode.tagName) {\n return false;\n }\n return vNode.tagName === 'span' &&\n vNode.props?.id &&\n typeof vNode.props.id === 'string' &&\n vNode.props.id.match(/^r[a-z0-9]{9}$/);\n }\n\n private unwrapReactive(vNode: any): Child {\n if (!this.isReactiveWrapper(vNode)) {\n return vNode;\n }\n\n const children = vNode.children;\n if (!children || children.length === 0) {\n return '';\n }\n\n if (children.length === 1) {\n const child = children[0];\n\n if (child && typeof child === 'object' && child.tagName === 'span') {\n const props = child.props;\n const hasNoProps = !props || Object.keys(props).length === 0;\n const hasSingleStringChild = child.children &&\n child.children.length === 1 &&\n typeof child.children[0] === 'string';\n\n if (hasNoProps && hasSingleStringChild) {\n return child.children[0];\n }\n }\n\n return this.unwrapReactive(child);\n }\n\n return children.map((c: Child) => this.unwrapReactive(c));\n }\n\n private escapeHtml(text: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, char => htmlEscapes[char]);\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]);\n return selfClosingTags.has(tagName.toLowerCase());\n }\n\n private propsToAttributes(props: Props): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref') {\n continue;\n }\n\n let value = props[key];\n value = this.resolveStateValue(value);\n\n if (value == null || value === false) continue;\n\n if (key.startsWith('on') && typeof value === 'function') {\n continue;\n }\n\n if (key === 'className' || key === 'class') {\n const className = Array.isArray(value) ? value.join(' ') : value;\n if (className) {\n attrs.push(`class=\"${this.escapeHtml(String(className))}\"`);\n }\n continue;\n }\n\n if (key === 'style') {\n const styleStr = this.styleToString(value);\n if (styleStr) {\n attrs.push(`style=\"${this.escapeHtml(styleStr)}\"`);\n }\n continue;\n }\n\n if (value === true) {\n attrs.push(key);\n continue;\n }\n\n attrs.push(`${key}=\"${this.escapeHtml(String(value))}\"`);\n }\n\n return attrs.join(' ');\n }\n\n private styleToString(style: any): string {\n if (typeof style === 'string') {\n return style;\n }\n\n if (typeof style === 'object' && style !== null) {\n const styles: string[] = [];\n for (const key in style) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n styles.push(`${cssKey}:${style[key]}`);\n }\n return styles.join(';');\n }\n\n return '';\n }\n\n private isState(value: any): value is State<any> {\n return value && typeof value === 'object' && 'value' in value && 'subscribe' in value && typeof value.subscribe === 'function';\n }\n\n private reactiveNodes = new Map<State<any>, { node: Text | null, renderFn: (v: any) => Child }>();\n\n private createReactiveChild(state: State<any>, renderFn: (value: any) => Child): Child {\n const currentValue = renderFn(state.value);\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const entry = { node: null as Text | null, renderFn };\n this.reactiveNodes.set(state, entry);\n\n state.subscribe(() => {\n if (entry.node && entry.node.parentNode) {\n const newValue = renderFn(state.value);\n entry.node.textContent = String(newValue ?? '');\n }\n });\n }\n\n return currentValue;\n }\n\n jsonToVNode(json: JsonNode | string | number | boolean | null | undefined | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tag, attributes = {}, children } = json;\n\n const props: Props = {};\n for (const key in attributes) {\n const value = attributes[key];\n if (key === 'class') {\n props.className = this.isState(value) ? value.value : value;\n } else {\n props[key] = this.isState(value) ? value.value : value;\n }\n }\n\n const childrenArray: Children = [];\n if (children != null) {\n if (Array.isArray(children)) {\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.jsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n } else if (this.isState(children)) {\n childrenArray.push(this.createReactiveChild(children, (v: any) => v));\n } else if (typeof children === 'object' && 'tag' in children) {\n const converted = this.jsonToVNode(children);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n } else {\n childrenArray.push(children as Child);\n }\n }\n\n return { tagName: tag, props, children: childrenArray };\n }\n\n vNodeJsonToVNode(json: VNodeJson | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tagName, props = {}, children = [] } = json;\n\n const resolvedProps: Props = {};\n for (const key in props) {\n const value = props[key];\n resolvedProps[key] = this.isState(value) ? value.value : value;\n }\n\n const childrenArray: Children = [];\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.vNodeJsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n\n return { tagName, props: resolvedProps, children: childrenArray };\n }\n\n renderJson(rootElement: string | HTMLElement, json: JsonNode): HTMLElement {\n const vNode = this.jsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderVNode(rootElement: string | HTMLElement, json: VNodeJson): HTMLElement {\n const vNode = this.vNodeJsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid VNode JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderJsonToString(json: JsonNode, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.jsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n renderVNodeToString(json: VNodeJson, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.vNodeJsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n\n // Generate complete HTML document as string (for SSR)\n renderToHTMLDocument(vNode: Child, options: {\n title?: string;\n meta?: Array<Record<string, string>>;\n links?: Array<Record<string, string>>;\n scripts?: Array<{ src?: string; content?: string; async?: boolean; defer?: boolean; type?: string }>;\n styles?: Array<{ href?: string; content?: string }>;\n lang?: string;\n head?: string;\n bodyAttrs?: Record<string, string>;\n pretty?: boolean;\n } = {}): string {\n const { title = '', meta = [], links = [], scripts = [], styles = [], lang = 'en', head = '', bodyAttrs = {}, pretty = false } = options;\n const nl = pretty ? '\\n' : '';\n const indent = pretty ? ' ' : '';\n const indent2 = pretty ? ' ' : '';\n\n let html = `<!DOCTYPE html>${nl}<html lang=\"${lang}\">${nl}${indent}<head>${nl}${indent2}<meta charset=\"UTF-8\">${nl}${indent2}<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">${nl}`;\n if (title) html += `${indent2}<title>${this.escapeHtml(title)}</title>${nl}`;\n\n for (const m of meta) {\n html += `${indent2}<meta`;\n for (const k in m) html += ` ${k}=\"${this.escapeHtml(m[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const l of links) {\n html += `${indent2}<link`;\n for (const k in l) html += ` ${k}=\"${this.escapeHtml(l[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const s of styles) {\n if (s.href) {\n html += `${indent2}<link rel=\"stylesheet\" href=\"${this.escapeHtml(s.href)}\">${nl}`;\n } else if (s.content) {\n html += `${indent2}<style>${s.content}</style>${nl}`;\n }\n }\n\n if (head) html += head + nl;\n html += `${indent}</head>${nl}${indent}<body`;\n for (const k in bodyAttrs) html += ` ${k}=\"${this.escapeHtml(bodyAttrs[k])}\"`;\n html += `>${nl}`;\n html += this.renderToString(vNode, { pretty, indent: 2 });\n\n for (const script of scripts) {\n html += `${indent2}<script`;\n if (script.type) html += ` type=\"${this.escapeHtml(script.type)}\"`;\n if (script.async) html += ` async`;\n if (script.defer) html += ` defer`;\n if (script.src) {\n html += ` src=\"${this.escapeHtml(script.src)}\"></script>${nl}`;\n } else if (script.content) {\n html += `>${script.content}</script>${nl}`;\n } else {\n html += `></script>${nl}`;\n }\n }\n\n html += `${indent}</body>${nl}</html>`;\n return html;\n }\n\n // Expose elementCache for reactive updates\n getElementCache(): WeakMap<Element, boolean> {\n return this.elementCache;\n }\n}\n\nexport const dom = new DomNode();\n\n// Export helper functions for convenience\nexport const render = dom.render.bind(dom);\nexport const renderToString = dom.renderToString.bind(dom);\nexport const mount = render; // alias for render\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAQa,SAQA,QACA,OACA;AAlBb;AAAA;AAAA;AAQO,IAAM,WAAW,MAAM;AAE5B,UAAI,OAAO,SAAS,YAAa,QAAO;AAExC,UAAI,OAAO,QAAQ,YAAa,QAAO;AACvC,aAAO;AAAA,IACT,GAAG;AAEI,IAAM,SAAS,YAAY;AAC3B,IAAM,QAAQ,YAAY;AAC1B,IAAM,SAAS,YAAY;AAAA;AAAA;;;AClBlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA,SAAS,cAAc,UAA6B;AAClD,MAAI,SAAU,gBAAe,QAAQ;AACvC;AAKA,SAAS,cAAc,SAA2C;AAChE,QAAM,SAAsB,CAAC;AAC7B,aAAW,OAAO,SAAS;AACzB,UAAM,QAAQ,QAAQ,GAAG;AACzB,WAAO,GAAG,IAAI,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK;AAAA,EACtE;AACA,SAAO;AACT;AAKA,SAAS,cAAc,MAAc,SAAiB,SAAS,QAA2D;AACxH,SAAO,EAAE,MAAM,QAAQ,QAAQ;AACjC;AAKA,SAAS,sBAAgC;AACvC,SAAO,IAAI,SAAS,yBAAyB,EAAE,QAAQ,IAAI,CAAC;AAC9D;AAKA,SAAS,0BAA0B,QAAgB,UAA6B;AAC9E,SAAO,aAAa;AACpB,SAAO,KAAK,WAAW;AACvB,gBAAc,QAAQ;AACxB;AAKA,SAAS,aAAa,QAAgB,UAAwC;AAC5E,SAAO,aAAa;AACpB,SAAO,KAAK,OAAO;AACnB,MAAI,SAAU,gBAAe,MAAM,SAAS,CAAC;AAC/C;AAooBO,SAAS,aACd,mBACA,iBACQ;AACR,SAAO,IAAI,OAAO,OAAO,sBAAsB,aAAa,oBAAoB,eAAe;AACjG;AAKO,SAAS,QAAQ,KAAmB,SAA0B,UAA0D;AAC7H,QAAM,YAAY,OAAO,QAAQ,WAAW,MAAM,IAAI,SAAS;AAC/D,QAAM,MAAM,IAAI,cAAc,WAAW,OAAO;AAEhD,MAAI,QAAQ;AACV,UAAM,SAAS,IAAI,IAAI,SAAS;AAChC,UAAM,SAAS,OAAO,aAAa,WAAW,QAAQ;AAEtD,UAAM,UAAU,OAAO,QAAQ,WAAW;AAAA,MACxC,QAAQ,SAAS,UAAU;AAAA,MAC3B,SAAS,SAAS;AAAA,MAClB,SAAS,SAAS;AAAA,MAClB,QAAQ,SAAS;AAAA,IACnB,GAAG,CAAC,QAAa;AACf,YAAM,kBAAkB,IAAI,gBAAgB,GAAG;AAC/C,UAAI,SAAU,UAAS,eAAe;AACtC,UAAI,KAAK,YAAY,eAAe;AAAA,IACtC,CAAC;AAED,YAAQ,GAAG,SAAS,CAAC,UAAiB,IAAI,KAAK,SAAS,KAAK,CAAC;AAC9D,YAAQ,IAAI;AAAA,EACd,OAAO;AAEL,mBAAe,YAAY;AACzB,UAAI;AACF,cAAM,WAAW,MAAM,MAAM,WAAW;AAAA,UACtC,QAAQ,SAAS,UAAU;AAAA,UAC3B,SAAS,SAAS;AAAA,UAClB,QAAQ,SAAS;AAAA,QACnB,CAAC;AAED,cAAM,eAAe,IAAI,QAAQ,SAAS;AAC1C,cAAM,kBAAkB,IAAI,gBAAgB,YAAY;AACxD,wBAAgB,aAAa,SAAS;AACtC,wBAAgB,gBAAgB,SAAS;AAEzC,YAAI,SAAU,UAAS,eAAe;AACtC,YAAI,KAAK,YAAY,eAAe;AAAA,MACtC,SAAS,OAAO;AACd,YAAI,KAAK,SAAS,KAAK;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAKO,SAAS,IAAI,KAAmB,SAA0B,UAA0D;AACzH,SAAO,QAAQ,KAAK,EAAE,GAAG,SAAS,QAAQ,MAAM,GAAG,QAAQ;AAC7D;AAKO,SAAS,aAAsC;AACpD,SAAO;AACT;AA/wBA,IAaA,oBA4DI,MAAW,OAiBF,SAQA,cA8BA,iBAgEA,gBA0MA,QAsSA,eAiBA,OAmFN;AApxBP;AAAA;AAAA;AAaA,yBAA6B;AAC7B;AA8DA,QAAI,UAAU,OAAO,YAAY,aAAa;AAC5C,UAAI;AACF,eAAO,QAAQ,MAAW;AAC1B,gBAAQ,QAAQ,OAAY;AAAA,MAC9B,SAAS,GAAG;AAEV,eAAO,QAAQ,MAAM;AACrB,gBAAQ,QAAQ,OAAO;AAAA,MACzB;AAAA,IACF;AAKO,IAAM,UAAU;AAAA,MACrB;AAAA,MAAO;AAAA,MAAQ;AAAA,MAAO;AAAA,MAAU;AAAA,MAChC;AAAA,MAAQ;AAAA,MAAW;AAAA,MAAW;AAAA,IAChC;AAKO,IAAM,eAAuC;AAAA,MAClD,KAAK;AAAA,MAAY,KAAK;AAAA,MAAuB,KAAK;AAAA,MAClD,KAAK;AAAA,MAAM,KAAK;AAAA,MAAW,KAAK;AAAA,MAAY,KAAK;AAAA,MACjD,KAAK;AAAA,MAAc,KAAK;AAAA,MAAiB,KAAK;AAAA,MAC9C,KAAK;AAAA,MAAoB,KAAK;AAAA,MAAqB,KAAK;AAAA,MACxD,KAAK;AAAA,MAAa,KAAK;AAAA,MAAgB,KAAK;AAAA,MAAsB,KAAK;AAAA,MACvE,KAAK;AAAA,MAAe,KAAK;AAAA,MAAgB,KAAK;AAAA,MAAoB,KAAK;AAAA,MACvE,KAAK;AAAA,MAAa,KAAK;AAAA,MAAsB,KAAK;AAAA,MAClD,KAAK;AAAA,MAAiC,KAAK;AAAA,MAAmB,KAAK;AAAA,MACnE,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAmB,KAAK;AAAA,MAC1C,KAAK;AAAA,MAAqB,KAAK;AAAA,MAAgB,KAAK;AAAA,MACpD,KAAK;AAAA,MAAyB,KAAK;AAAA,MAAsB,KAAK;AAAA,MAC9D,KAAK;AAAA,MAAwB,KAAK;AAAA,MAAa,KAAK;AAAA,MACpD,KAAK;AAAA,MAAyB,KAAK;AAAA,MACnC,KAAK;AAAA,MAAmC,KAAK;AAAA,MAC7C,KAAK;AAAA,MAAyB,KAAK;AAAA,MAAmB,KAAK;AAAA,MAC3D,KAAK;AAAA,MAAuB,KAAK;AAAA,MAAmB,KAAK;AAAA,MACzD,KAAK;AAAA,MAA2B,KAAK;AAAA,MAAwB,KAAK;AAAA,MAClE,KAAK;AAAA,MAAgB,KAAK;AAAA,IAC5B;AAWO,IAAM,kBAAN,cAA8B,gCAAa;AAAA,MAYhD,YAAY,KAAU;AACpB,cAAM;AAPR,aAAO,cAAsB;AAC7B,aAAO,aAAuB,CAAC;AAO7B,aAAK,OAAO;AAEZ,YAAI,QAAQ;AAEV,eAAK,SAAS,IAAI;AAClB,eAAK,MAAM,IAAI;AACf,eAAK,UAAU,IAAI;AACnB,eAAK,aAAa,IAAI;AACtB,eAAK,gBAAgB,IAAI;AACzB,eAAK,cAAc,IAAI;AACvB,eAAK,aAAa,IAAI;AACtB,eAAK,SAAS,IAAI;AAAA,QACpB,OAAO;AAEL,eAAK,SAAS,IAAI;AAClB,gBAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAC9B,eAAK,MAAM,OAAO,WAAW,OAAO;AAGpC,eAAK,UAAU,IAAI;AACnB,eAAK,aAAa,CAAC;AAAA,QACrB;AAAA,MACF;AAAA,MAEA,MAAM,OAAwB;AAC5B,YAAI,QAAQ;AACV,iBAAO,IAAI,QAAQ,CAACA,UAAS,WAAW;AACtC,kBAAM,SAAmB,CAAC;AAC1B,iBAAK,KAAK,GAAG,QAAQ,CAAC,UAAkB,OAAO,KAAK,KAAK,CAAC;AAC1D,iBAAK,KAAK,GAAG,OAAO,MAAMA,SAAQ,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC;AACzE,iBAAK,KAAK,GAAG,SAAS,MAAM;AAAA,UAC9B,CAAC;AAAA,QACH;AAEA,eAAO,KAAK,KAAK,KAAK;AAAA,MACxB;AAAA,MAEA,MAAM,OAAqB;AACzB,YAAI,QAAQ;AACV,gBAAMC,QAAO,MAAM,KAAK,KAAK;AAC7B,iBAAO,KAAK,MAAMA,KAAI;AAAA,QACxB;AAEA,eAAO,KAAK,KAAK,KAAK;AAAA,MACxB;AAAA,IACF;AAKO,IAAM,iBAAN,cAA6B,gCAAa;AAAA,MAW/C,YAAY,MAAwB,SAAe;AACjD,cAAM;AAXR,aAAO,aAAqB;AAC5B,aAAO,gBAAwB;AAC/B,aAAO,cAAuB;AAG9B,aAAQ,QAAgB;AAExB,aAAQ,YAAqB;AAK3B,aAAK,WAAW;AAEhB,aAAK,WAAW,uBAAO,OAAO,IAAI;AAAA,MACpC;AAAA,MAEA,UAAU,MAAc,OAAyC;AAC/D,YAAI,KAAK,aAAa;AACpB,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAC1D;AAEA,YAAI,UAAU,KAAK,UAAU;AAC3B,eAAK,SAAS,UAAU,MAAM,KAAK;AAAA,QACrC;AAEA,aAAK,SAAS,KAAK,YAAY,CAAC,IAAI;AACpC,eAAO;AAAA,MACT;AAAA,MAEA,UAAU,MAAsD;AAC9D,YAAI,UAAU,KAAK,UAAU;AAC3B,iBAAO,KAAK,SAAS,UAAU,IAAI;AAAA,QACrC;AACA,eAAO,KAAK,SAAS,KAAK,YAAY,CAAC;AAAA,MACzC;AAAA,MAEA,aAAkC;AAChC,YAAI,UAAU,KAAK,UAAU;AAC3B,iBAAO,KAAK,SAAS,WAAW;AAAA,QAClC;AACA,eAAO,EAAE,GAAG,KAAK,SAAS;AAAA,MAC5B;AAAA,MAEA,iBAA2B;AACzB,YAAI,UAAU,KAAK,UAAU;AAC3B,iBAAO,KAAK,SAAS,eAAe;AAAA,QACtC;AACA,eAAO,OAAO,KAAK,KAAK,QAAQ;AAAA,MAClC;AAAA,MAEA,UAAU,MAAuB;AAC/B,YAAI,UAAU,KAAK,UAAU;AAC3B,iBAAO,KAAK,SAAS,UAAU,IAAI;AAAA,QACrC;AACA,eAAO,KAAK,YAAY,KAAK,KAAK;AAAA,MACpC;AAAA,MAEA,aAAa,MAAoB;AAC/B,YAAI,KAAK,aAAa;AACpB,gBAAM,IAAI,MAAM,2CAA2C;AAAA,QAC7D;AAEA,YAAI,UAAU,KAAK,UAAU;AAC3B,eAAK,SAAS,aAAa,IAAI;AAAA,QACjC;AAEA,eAAO,KAAK,SAAS,KAAK,YAAY,CAAC;AAAA,MACzC;AAAA,MAEA,UAAU,YAAoB,eAA8C,SAAqC;AAC/G,YAAI,KAAK,aAAa;AACpB,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AAEA,aAAK,aAAa;AAElB,YAAI,OAAO,kBAAkB,UAAU;AACrC,eAAK,gBAAgB;AACrB,cAAI,SAAS;AACX,uBAAW,OAAO,SAAS;AACzB,mBAAK,UAAU,KAAK,QAAQ,GAAG,CAAE;AAAA,YACnC;AAAA,UACF;AAAA,QACF,WAAW,eAAe;AACxB,qBAAW,OAAO,eAAe;AAC/B,iBAAK,UAAU,KAAK,cAAc,GAAG,CAAE;AAAA,UACzC;AAAA,QACF;AAEA,YAAI,UAAU,KAAK,UAAU;AAC3B,cAAI,OAAO,kBAAkB,UAAU;AACrC,iBAAK,SAAS,UAAU,YAAY,eAAe,OAAO;AAAA,UAC5D,OAAO;AACL,iBAAK,SAAS,UAAU,YAAY,aAAa;AAAA,UACnD;AAAA,QACF;AAEA,aAAK,cAAc;AACnB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,OAAY,UAA0C,UAAgC;AAC1F,YAAI,OAAO,aAAa,YAAY;AAClC,qBAAW;AACX,qBAAW;AAAA,QACb;AAEA,YAAI,CAAC,KAAK,aAAa;AACrB,eAAK,UAAU,KAAK,UAAU;AAAA,QAChC;AAEA,YAAI,UAAU,KAAK,UAAU;AAC3B,iBAAO,KAAK,SAAS,MAAM,OAAO,UAAU,QAAQ;AAAA,QACtD;AAEA,aAAK,SAAS;AACd,sBAAc,QAAQ;AAEtB,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,OAAa,UAA0C,UAA6B;AACtF,YAAI,KAAK,WAAW;AAClB,iBAAO;AAAA,QACT;AAEA,YAAI,OAAO,UAAU,YAAY;AAC/B,qBAAW;AACX,kBAAQ;AAAA,QACV,WAAW,OAAO,aAAa,YAAY;AACzC,qBAAW;AACX,qBAAW;AAAA,QACb;AAEA,YAAI,UAAU,QAAW;AACvB,eAAK,MAAM,OAAO,QAA0B;AAAA,QAC9C;AAEA,YAAI,CAAC,KAAK,aAAa;AACrB,eAAK,UAAU,KAAK,UAAU;AAAA,QAChC;AAEA,aAAK,YAAY;AAEjB,YAAI,UAAU,KAAK,UAAU;AAE3B,eAAK,SAAS,IAAI,QAAQ;AAC1B,eAAK,KAAK,QAAQ;AAAA,QACpB,OAAO;AAEL,gBAAM,WAAW,IAAI,SAAS,KAAK,OAAO;AAAA,YACxC,QAAQ,KAAK;AAAA,YACb,YAAY,KAAK;AAAA,YACjB,SAAS,cAAc,KAAK,QAAQ;AAAA,UACtC,CAAC;AAED,cAAI,KAAK,UAAU;AACjB,iBAAK,SAAS,QAAQ;AAAA,UACxB;AAEA,wBAAc,QAAQ;AAAA,QACxB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAaD,UAA6C;AACxD,aAAK,WAAWA;AAAA,MAClB;AAAA;AAAA,MAGA,KAAK,MAAW,aAAa,KAAW;AACtC,YAAI,CAAC,KAAK,aAAa;AACrB,eAAK,UAAU,gBAAgB,kBAAkB;AAAA,QACnD;AACA,aAAK,aAAa;AAClB,aAAK,IAAI,KAAK,UAAU,IAAI,CAAC;AAC7B,eAAO;AAAA,MACT;AAAA,MAEA,KAAK,MAAiB;AACpB,YAAI,OAAO,SAAS,UAAU;AAC5B,iBAAO,KAAK,KAAK,IAAI;AAAA,QACvB;AACA,YAAI,CAAC,KAAK,aAAa;AACrB,eAAK,UAAU,gBAAgB,YAAY;AAAA,QAC7C;AACA,aAAK,IAAI,OAAO,IAAI,CAAC;AACrB,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAoB;AACzB,aAAK,aAAa;AAClB,eAAO;AAAA,MACT;AAAA,IACF;AAKO,IAAM,SAAN,cAAqB,gCAAa;AAAA,MAKvC,YAAY,iBAAmC;AAC7C,cAAM;AAHR,aAAO,aAAsB;AAI3B,aAAK,kBAAkB;AAAA,MACzB;AAAA,MAMA,UAAU,MAAmB;AAC3B,YAAI,OAAO;AACX,YAAI,WAAW;AACf,YAAI;AAGJ,cAAM,WAAW,KAAK,CAAC;AACvB,YAAI,OAAO,aAAa,UAAU;AAChC,iBAAO;AACP,gBAAM,YAAY,KAAK,CAAC;AACxB,cAAI,OAAO,cAAc,UAAU;AACjC,uBAAW;AACX,uBAAW,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,UAC9B,WAAW,OAAO,cAAc,YAAY;AAC1C,uBAAW;AAAA,UACb;AAAA,QACF,WAAW,YAAY,OAAO,aAAa,UAAU;AACnD,iBAAO,SAAS,QAAQ;AACxB,qBAAW,SAAS,YAAY;AAChC,qBAAW,KAAK,CAAC;AAAA,QACnB;AAEA,cAAM,OAAO;AAEb,YAAI,QAAQ;AAEV,eAAK,eAAe,KAAK,aAAa,CAAC,KAAU,QAAa;AAC5D,kBAAM,kBAAkB,IAAI,gBAAgB,GAAG;AAC/C,kBAAM,iBAAiB,IAAI,eAAe,iBAAiB,GAAG;AAE9D,gBAAI,KAAK,iBAAiB;AACxB,mBAAK,gBAAgB,iBAAiB,cAAc;AAAA,YACtD,OAAO;AACL,mBAAK,KAAK,WAAW,iBAAiB,cAAc;AAAA,YACtD;AAAA,UACF,CAAC;AAGD,eAAK,aAAa,GAAG,WAAW,CAAC,KAAU,QAAa,SAAc;AACpE,iBAAK,KAAK,WAAW,KAAK,QAAQ,IAAI;AAAA,UACxC,CAAC;AAED,eAAK,aAAa,OAAO,MAAM,UAAU,MAAM;AAC7C,iBAAK,aAAa;AAClB,iBAAK,KAAK,WAAW;AACrB,gBAAI,SAAU,UAAS;AAAA,UACzB,CAAC;AAED,eAAK,aAAa,GAAG,SAAS,CAAC,QAAe,KAAK,KAAK,SAAS,GAAG,CAAC;AACrE,eAAK,aAAa,GAAG,SAAS,MAAM;AAClC,iBAAK,aAAa;AAClB,iBAAK,KAAK,OAAO;AAAA,UACnB,CAAC;AAAA,QACH,WAAW,OAAO;AAGhB,eAAK,eAAe,IAAI,MAAM;AAAA,YAC5B;AAAA,YACA;AAAA,YACA,OAAO,CAAC,QAAiB;AAEvB,oBAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAC9B,oBAAM,WAAW,OAAO,WAAW,OAAO;AAG1C,kBAAI,aAAa;AACjB,kBAAI,gBAAgB;AACpB,kBAAI,OAAO;AACX,oBAAM,UAAkC,uBAAO,OAAO,IAAI;AAC1D,kBAAI,gBAAgB;AAGpB,oBAAM,kBAAuB;AAAA,gBAC3B,QAAQ,IAAI;AAAA,gBACZ,KAAK;AAAA,gBACL,SAAS,IAAI;AAAA,gBACb,aAAa;AAAA,gBACb,YAAY,CAAC;AAAA,gBACb,MAAM;AAAA,gBACN,MAAM,MAAM,IAAI,KAAK;AAAA,gBACrB,MAAM,MAAM,IAAI,KAAK;AAAA,cACvB;AAGA,oBAAM,iBAAsB;AAAA,gBAC1B,YAAY;AAAA,gBACZ,eAAe;AAAA,gBACf,aAAa;AAAA,gBACb,UAAU;AAAA,gBAEV,UAAU,MAAc,OAAmC;AACzD,0BAAQ,KAAK,YAAY,CAAC,IAAI,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK;AACpF,yBAAO;AAAA,gBACT;AAAA,gBAEA,UAAU,MAAc;AACtB,yBAAO,QAAQ,KAAK,YAAY,CAAC;AAAA,gBACnC;AAAA,gBAEA,aAAa;AACX,yBAAO,EAAE,GAAG,QAAQ;AAAA,gBACtB;AAAA,gBAEA,UAAUE,SAAgB,MAAY,MAAY;AAChD,+BAAaA;AACb,uBAAK,aAAaA;AAClB,uBAAK,cAAc;AAEnB,sBAAI,OAAO,SAAS,UAAU;AAC5B,oCAAgB;AAChB,yBAAK,gBAAgB;AACrB,wBAAI,MAAM;AACR,iCAAW,OAAO,MAAM;AACtB,gCAAQ,IAAI,YAAY,CAAC,IAAI,KAAK,GAAG;AAAA,sBACvC;AAAA,oBACF;AAAA,kBACF,WAAW,MAAM;AACf,+BAAW,OAAO,MAAM;AACtB,8BAAQ,IAAI,YAAY,CAAC,IAAI,KAAK,GAAG;AAAA,oBACvC;AAAA,kBACF;AACA,yBAAO;AAAA,gBACT;AAAA,gBAEA,MAAM,OAAY;AAChB,sBAAI,CAAC,KAAK,aAAa;AACrB,yBAAK,UAAU,UAAU;AAAA,kBAC3B;AACA,0BAAQ;AACR,yBAAO;AAAA,gBACT;AAAA,gBAEA,IAAI,OAAa;AACf,sBAAI,UAAU,QAAW;AACvB,yBAAK,MAAM,KAAK;AAAA,kBAClB;AACA,sBAAI,CAAC,KAAK,aAAa;AACrB,yBAAK,UAAU,UAAU;AAAA,kBAC3B;AACA,kCAAgB;AAChB,yBAAO;AAAA,gBACT;AAAA,cACF;AAGA,kBAAI,KAAK,iBAAiB;AACxB,qBAAK,gBAAgB,iBAAiB,cAAc;AAAA,cACtD;AAGA,kBAAI,eAAe;AACjB,uBAAO,IAAI,SAAS,MAAM;AAAA,kBACxB,QAAQ;AAAA,kBACR,YAAY;AAAA,kBACZ;AAAA,gBACF,CAAC;AAAA,cACH;AAGA,qBAAO,IAAI,QAAkB,CAACF,aAAY;AACxC,+BAAe,MAAM,CAAC,UAAgB;AACpC,sBAAI,UAAU,QAAW;AACvB,4BAAQ;AAAA,kBACV;AACA,kBAAAA,SAAQ,IAAI,SAAS,MAAM;AAAA,oBACzB,QAAQ;AAAA,oBACR,YAAY;AAAA,oBACZ;AAAA,kBACF,CAAC,CAAC;AAAA,gBACJ;AAAA,cACF,CAAC;AAAA,YACH;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AAED,oCAA0B,MAAM,QAAQ;AAAA,QAC1C,WAAW,QAAQ;AAGjB,eAAK,eAAe,KAAK,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,YACA,SAAS,CAAC,QAAiB;AACzB,qBAAO,IAAI,QAAkB,CAACA,aAAY;AACxC,sBAAM,kBAAkB,IAAI,gBAAgB,GAAG;AAC/C,sBAAM,iBAAiB,IAAI,eAAe;AAE1C,+BAAe,aAAaA,QAAO;AAEnC,oBAAI,KAAK,iBAAiB;AACxB,uBAAK,gBAAgB,iBAAiB,cAAc;AAAA,gBACtD,OAAO;AACL,uBAAK,KAAK,WAAW,iBAAiB,cAAc;AAAA,gBACtD;AAAA,cACF,CAAC;AAAA,YACH;AAAA,YACA,SAAS,CAAC,UAAiB;AACzB,mBAAK,KAAK,SAAS,KAAK;AACxB,qBAAO,oBAAoB;AAAA,YAC7B;AAAA,UACF,CAAC;AAED,oCAA0B,MAAM,QAAQ;AAAA,QAC1C;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,UAAwC;AAC5C,YAAI,CAAC,KAAK,cAAc;AACtB,cAAI,SAAU,gBAAe,MAAM,SAAS,CAAC;AAC7C,iBAAO;AAAA,QACT;AAEA,YAAI,QAAQ;AACV,eAAK,aAAa,MAAM,QAAQ;AAAA,QAClC,WAAW,OAAO;AAChB,eAAK,aAAa,KAAK;AACvB,uBAAa,MAAM,QAAQ;AAAA,QAC7B,WAAW,QAAQ;AAEjB,eAAK,aAAa,SAAS;AAC3B,uBAAa,MAAM,QAAQ;AAAA,QAC7B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,UAAoE;AAClE,YAAI,CAAC,KAAK,aAAc,QAAO;AAE/B,YAAI,QAAQ;AACV,gBAAM,OAAO,KAAK,aAAa,QAAQ;AACvC,cAAI,CAAC,KAAM,QAAO;AAClB,cAAI,OAAO,SAAS,UAAU;AAC5B,mBAAO,cAAc,GAAG,MAAM,MAAM;AAAA,UACtC;AACA,iBAAO;AAAA,QACT,WAAW,OAAO;AAChB,iBAAO,cAAc,KAAK,aAAa,MAAM,KAAK,aAAa,QAAQ;AAAA,QACzE,WAAW,QAAQ;AAEjB,gBAAM,OAAO,KAAK,aAAa;AAC/B,iBAAO,cAAc,KAAK,MAAM,KAAK,QAAQ;AAAA,QAC/C;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,YAAqB;AACvB,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AA4BO,IAAM,gBAAN,cAA4B,gCAAa;AAAA,MAC9C,YAAY,MAAoB,WAA2B,CAAC,GAAG;AAC7D,cAAM;AAAA,MACR;AAAA,MAEA,MAAM,QAAsB;AAC1B,eAAO;AAAA,MACT;AAAA,MAEA,IAAI,UAA6B;AAC/B,sBAAc,QAAQ;AAAA,MACxB;AAAA,IACF;AAKO,IAAM,QAAN,MAAY;AAAA,MACjB,YAAmB,SAAe;AAAf;AAAA,MAAiB;AAAA,IACtC;AAiFA,IAAO,eAAQ;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AChyBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAG;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA,SAAS,aAAgB,SAAiC,cAAoB;AAC5E,SAAO,OAAO,YAAY,WAAW,EAAE,UAAU,QAAQ,IAAS,WAAW;AAC/E;AAKA,SAAS,cAAc,SAAmC,UAA2C;AACnG,MAAI,UAAU;AACZ,WAAO,IAAI,YAAY,QAAQ,EAAE,OAAO,OAAO;AAAA,EACjD;AACA,SAAO,OAAO,KAAK,mBAAmB,cAAc,IAAI,WAAW,OAAO,IAAI,OAAO;AACvF;AAKA,SAAS,iBAAiB,MAAgD;AACxE,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AAAA,EACtC;AACA,MAAI,gBAAgB,QAAQ;AAC1B,WAAO,IAAI,WAAW,IAAI;AAAA,EAC5B;AACA,SAAO;AACT;AAKA,SAAS,mBAAmB,UAAe,eAAgC;AACzE,QAAM,UAAiB,CAAC;AACxB,aAAW,SAAS,UAAU;AAC5B,QAAI,eAAe;AACjB,cAAQ,KAAK,0BAA0B,KAAK,CAAC;AAAA,IAC/C,OAAO;AACL,cAAQ,KAAK,MAAM,IAAI;AAAA,IACzB;AAAA,EACF;AACA,SAAO;AACT;AAKA,eAAe,wBAAwB,UAAe,eAAyC;AAC7F,QAAM,UAAiB,CAAC;AACxB,mBAAiB,SAAS,UAAU;AAClC,QAAI,eAAe;AACjB,cAAQ,KAAK,0BAA0B,KAAK,CAAC;AAAA,IAC/C,OAAO;AACL,cAAQ,KAAK,MAAM,IAAI;AAAA,IACzB;AAAA,EACF;AACA,SAAO;AACT;AAoGA,eAAsB,SAAS,MAAc,SAAsE;AACjH,QAAM,OAAO,aAA8B,SAAS,CAAC,CAAC;AAEtD,MAAI,QAAQ;AACV,WAAO,WAAW,SAAS,MAAM,IAAI;AAAA,EACvC,WAAW,OAAO;AAEhB,UAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,UAAM,UAAU,MAAM,KAAK,YAAY;AACvC,WAAO,cAAc,SAAS,KAAK,QAAQ;AAAA,EAC7C,WAAW,QAAQ;AAEjB,UAAM,UAAU,MAAM,KAAK,SAAS,IAAI;AACxC,WAAO,cAAc,SAAS,KAAK,QAAQ;AAAA,EAC7C;AAEA,QAAM,IAAI,MAAM,qBAAqB;AACvC;AAKO,SAAS,aAAa,MAAc,SAA6D;AACtG,QAAM,OAAO,aAA8B,SAAS,CAAC,CAAC;AAEtD,MAAI,QAAQ;AACV,WAAO,GAAG,aAAa,MAAM,IAAI;AAAA,EACnC,WAAW,OAAO;AAEhB,UAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,UAAM,UAAU,KAAK,YAAY;AACjC,WAAO,cAAc,SAAwB,KAAK,QAAQ;AAAA,EAC5D,WAAW,QAAQ;AAEjB,UAAM,UAAU,KAAK,aAAa,IAAI;AACtC,WAAO,cAAc,SAAS,KAAK,QAAQ;AAAA,EAC7C;AAEA,QAAM,IAAI,MAAM,qBAAqB;AACvC;AAKA,eAAsB,UAAU,MAAc,MAAoC,SAA4D;AAC5I,QAAM,OAAO,aAA+B,SAAS,CAAC,CAAC;AAEvD,MAAI,QAAQ;AACV,WAAO,WAAW,UAAU,MAAM,MAAM,IAAI;AAAA,EAC9C,WAAW,OAAO;AAEhB,UAAM,IAAI,MAAM,MAAM,IAAI;AAAA,EAC5B,WAAW,QAAQ;AAEjB,UAAM,KAAK,UAAU,MAAM,iBAAiB,IAAI,CAAC;AAAA,EACnD;AACF;AAKO,SAAS,cAAc,MAAc,MAAoC,SAAmD;AACjI,QAAM,OAAO,aAA+B,SAAS,CAAC,CAAC;AAEvD,MAAI,QAAQ;AACV,OAAG,cAAc,MAAM,MAAM,IAAI;AAAA,EACnC,WAAW,OAAO;AAEhB,QAAI,MAAM,MAAM,IAAI;AAAA,EACtB,WAAW,QAAQ;AAEjB,SAAK,cAAc,MAAM,iBAAiB,IAAI,CAAC;AAAA,EACjD;AACF;AAKA,eAAsB,WAAW,MAAc,MAAuB,SAA4D;AAChI,QAAM,OAAO,aAA+B,SAAS,CAAC,CAAC;AAEvD,MAAI,QAAQ;AACV,WAAO,WAAW,WAAW,MAAM,MAAM,IAAI;AAAA,EAC/C,OAAO;AACL,QAAI,MAAM,OAAO,IAAI,GAAG;AACtB,YAAM,WAAW,MAAM,SAAS,IAAI;AACpC,YAAM,WAAW,OAAO,SAAS,QAAQ,IACrC,OAAO,OAAO,CAAC,UAAU,OAAO,SAAS,IAAI,IAAI,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,IAC1E,YAAY,OAAO,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI;AAC1D,YAAM,UAAU,MAAM,UAAU,IAAI;AAAA,IACtC,OAAO;AACL,YAAM,UAAU,MAAM,MAAM,IAAI;AAAA,IAClC;AAAA,EACF;AACF;AAKO,SAAS,eAAe,MAAc,MAAuB,SAAmD;AACrH,QAAM,OAAO,aAA+B,SAAS,CAAC,CAAC;AAEvD,MAAI,QAAQ;AACV,OAAG,eAAe,MAAM,MAAM,IAAI;AAAA,EACpC,OAAO;AACL,QAAI,WAAW,IAAI,GAAG;AACpB,YAAM,WAAW,aAAa,IAAI;AAClC,YAAM,WAAW,OAAO,SAAS,QAAQ,IACrC,OAAO,OAAO,CAAC,UAAU,OAAO,SAAS,IAAI,IAAI,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,IAC1E,YAAY,OAAO,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI;AAC1D,oBAAc,MAAM,UAAU,IAAI;AAAA,IACpC,OAAO;AACL,oBAAc,MAAM,MAAM,IAAI;AAAA,IAChC;AAAA,EACF;AACF;AAKA,eAAsB,OAAO,MAAgC;AAC3D,MAAI;AACF,UAAM,KAAK,IAAI;AACf,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,WAAW,MAAuB;AAChD,MAAI;AACF,aAAS,IAAI;AACb,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,KAAK,MAA8B;AACvD,MAAI,QAAQ;AACV,WAAO,WAAW,KAAK,IAAI;AAAA,EAC7B,WAAW,OAAO;AAEhB,UAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,UAAM,OAAO,KAAK;AAClB,UAAMC,UAAS,MAAM,KAAK,OAAO;AAEjC,QAAI,CAACA,SAAQ;AACX,YAAM,IAAI,MAAM,4CAA4C,IAAI,GAAG;AAAA,IACrE;AAGA,WAAO,kBAAkB,MAAM,MAAM,KAAK;AAAA,EAC5C,WAAW,QAAQ;AAEjB,UAAM,OAAO,MAAM,KAAK,KAAK,IAAI;AACjC,WAAO,4BAA4B,IAAI;AAAA,EACzC;AAEA,QAAM,IAAI,MAAM,qBAAqB;AACvC;AAKO,SAAS,SAAS,MAAqB;AAC5C,MAAI,QAAQ;AACV,WAAO,GAAG,SAAS,IAAI;AAAA,EACzB,WAAW,OAAO;AAEhB,UAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,UAAM,OAAO,KAAK;AAGlB,QAAI;AACF,WAAK,YAAY;AAAA,IACnB,QAAQ;AACN,YAAM,IAAI,MAAM,4CAA4C,IAAI,GAAG;AAAA,IACrE;AAEA,WAAO,kBAAkB,MAAM,MAAM,KAAK;AAAA,EAC5C,WAAW,QAAQ;AAEjB,UAAM,OAAO,KAAK,SAAS,IAAI;AAC/B,WAAO,4BAA4B,IAAI;AAAA,EACzC;AAEA,QAAM,IAAI,MAAM,qBAAqB;AACvC;AAKA,eAAsB,MAAM,MAAc,SAAgD;AACxF,QAAM,OAAO,OAAO,YAAY,WAAW,EAAE,MAAM,QAAQ,IAAoB,WAAW,CAAC;AAE3F,MAAI,QAAQ;AACV,UAAM,WAAW,MAAM,MAAM,IAAI;AAAA,EACnC,WAAW,OAAO;AAEhB,UAAM,KAAK,MAAM,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC;AAAA,EACtD,WAAW,QAAQ;AAEjB,UAAM,KAAK,MAAM,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC;AAAA,EACtD;AACF;AAKO,SAAS,UAAU,MAAc,SAAuC;AAC7E,QAAM,OAAO,OAAO,YAAY,WAAW,EAAE,MAAM,QAAQ,IAAoB,WAAW,CAAC;AAE3F,MAAI,QAAQ;AACV,OAAG,UAAU,MAAM,IAAI;AAAA,EACzB,WAAW,OAAO;AAEhB,SAAK,UAAU,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC;AAAA,EACpD,WAAW,QAAQ;AAEjB,SAAK,UAAU,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC;AAAA,EACpD;AACF;AAKA,eAAsB,QAAQ,MAAc,SAAyE;AACnH,QAAM,OAAO,aAA6B,SAAS,CAAC,CAAC;AAErD,MAAI,QAAQ;AACV,WAAO,WAAW,QAAQ,MAAM,IAAI;AAAA,EACtC,WAAW,aAAa;AAEtB,WAAO,wBAAwB,KAAK,QAAQ,IAAI,GAAG,KAAK,aAAa;AAAA,EACvE;AAEA,QAAM,IAAI,MAAM,qBAAqB;AACvC;AAKO,SAAS,YAAY,MAAc,SAAgE;AACxG,QAAM,OAAO,aAA6B,SAAS,CAAC,CAAC;AAErD,MAAI,QAAQ;AACV,WAAO,GAAG,YAAY,MAAM,IAAI;AAAA,EAClC,WAAW,aAAa;AAEtB,WAAO,mBAAmB,KAAK,YAAY,IAAI,GAAG,KAAK,aAAa;AAAA,EACtE;AAEA,QAAM,IAAI,MAAM,qBAAqB;AACvC;AAKA,eAAsB,OAAO,MAA6B;AACxD,MAAI,QAAQ;AACV,WAAO,WAAW,OAAO,IAAI;AAAA,EAC/B,WAAW,OAAO;AAEhB,UAAM,KAAK,OAAO,IAAI;AAAA,EACxB,WAAW,QAAQ;AAEjB,UAAM,KAAK,OAAO,IAAI;AAAA,EACxB;AACF;AAKO,SAAS,WAAW,MAAoB;AAC7C,MAAI,QAAQ;AACV,OAAG,WAAW,IAAI;AAAA,EACpB,WAAW,OAAO;AAEhB,SAAK,WAAW,IAAI;AAAA,EACtB,WAAW,QAAQ;AAEjB,SAAK,WAAW,IAAI;AAAA,EACtB;AACF;AAKA,eAAsB,MAAM,MAAc,SAAkD;AAC1F,MAAI,QAAQ;AACV,WAAO,WAAW,MAAM,MAAM,OAAO;AAAA,EACvC,WAAW,OAAO;AAEhB,UAAM,KAAK,OAAO,MAAM,EAAE,WAAW,SAAS,UAAU,CAAC;AAAA,EAC3D,WAAW,QAAQ;AAEjB,UAAM,KAAK,OAAO,MAAM,EAAE,WAAW,SAAS,UAAU,CAAC;AAAA,EAC3D;AACF;AAKO,SAAS,UAAU,MAAc,SAAyC;AAC/E,MAAI,QAAQ;AACV,OAAG,UAAU,MAAM,OAAO;AAAA,EAC5B,WAAW,OAAO;AAEhB,SAAK,WAAW,MAAM,EAAE,WAAW,SAAS,UAAU,CAAC;AAAA,EACzD,WAAW,QAAQ;AAEjB,SAAK,WAAW,MAAM,EAAE,WAAW,SAAS,UAAU,CAAC;AAAA,EACzD;AACF;AAKA,eAAsB,OAAO,SAAiB,SAAgC;AAC5E,MAAI,QAAQ;AACV,WAAO,WAAW,OAAO,SAAS,OAAO;AAAA,EAC3C,WAAW,OAAO;AAEhB,UAAM,KAAK,OAAO,SAAS,OAAO;AAAA,EACpC,WAAW,QAAQ;AAEjB,UAAM,KAAK,OAAO,SAAS,OAAO;AAAA,EACpC;AACF;AAKO,SAAS,WAAW,SAAiB,SAAuB;AACjE,MAAI,QAAQ;AACV,OAAG,WAAW,SAAS,OAAO;AAAA,EAChC,WAAW,OAAO;AAEhB,SAAK,WAAW,SAAS,OAAO;AAAA,EAClC,WAAW,QAAQ;AAEjB,SAAK,WAAW,SAAS,OAAO;AAAA,EAClC;AACF;AAKA,eAAsB,SAAS,KAAa,MAAc,OAA+B;AACvF,MAAI,QAAQ;AACV,WAAO,WAAW,SAAS,KAAK,MAAM,KAAK;AAAA,EAC7C,WAAW,OAAO;AAEhB,UAAM,KAAK,SAAS,KAAK,IAAI;AAAA,EAC/B,WAAW,QAAQ;AAEjB,UAAM,KAAK,SAAS,KAAK,IAAI;AAAA,EAC/B;AACF;AAKO,SAAS,aAAa,KAAa,MAAc,OAAsB;AAC5E,MAAI,QAAQ;AACV,OAAG,aAAa,KAAK,MAAM,KAAK;AAAA,EAClC,WAAW,OAAO;AAEhB,SAAK,aAAa,KAAK,IAAI;AAAA,EAC7B,WAAW,QAAQ;AAEjB,SAAK,aAAa,KAAK,IAAI;AAAA,EAC7B;AACF;AAKA,eAAsB,SAAS,MAAc,SAA0D;AACrG,MAAI,QAAQ;AACV,WAAO,WAAW,SAAS,MAAM,OAAO;AAAA,EAC1C,WAAW,OAAO;AAEhB,UAAMC,MAAK,QAAQ,aAAa;AAChC,WAAOA,IAAG,SAAS,MAAM,OAAO;AAAA,EAClC,WAAW,QAAQ;AAEjB,WAAO,MAAM,KAAK,SAAS,IAAI;AAAA,EACjC;AACA,SAAO;AACT;AAKO,SAAS,aAAa,MAAc,SAAiD;AAC1F,MAAI,QAAQ;AACV,WAAO,GAAG,aAAa,MAAM,OAAO;AAAA,EACtC,WAAW,OAAO;AAEhB,UAAMA,MAAK,QAAQ,IAAI;AACvB,WAAOA,IAAG,aAAa,MAAM,OAAO;AAAA,EACtC,WAAW,QAAQ;AAEjB,WAAO,KAAK,aAAa,IAAI;AAAA,EAC/B;AACA,SAAO;AACT;AAKA,SAAS,kBAAkB,OAAe,MAAc,OAAuB;AAC7E,QAAM,MAAM,KAAK,IAAI;AACrB,SAAO;AAAA,IACL,QAAQ,MAAM,CAAC;AAAA,IACf,aAAa,MAAM;AAAA,IACnB,eAAe,MAAM;AAAA,IACrB,mBAAmB,MAAM;AAAA,IACzB,gBAAgB,MAAM;AAAA,IACtB,QAAQ,MAAM;AAAA,IACd,UAAU,MAAM;AAAA,IAChB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM,QAAQ,QAAQ;AAAA,IACtB,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,KAAK,KAAK,OAAO,GAAG;AAAA,IAC5B,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,OAAO,IAAI,KAAK,GAAG;AAAA,IACnB,OAAO,IAAI,KAAK,GAAG;AAAA,IACnB,OAAO,IAAI,KAAK,GAAG;AAAA,IACnB,WAAW,IAAI,KAAK,GAAG;AAAA,EACzB;AACF;AAKA,SAAS,4BAA4B,MAAkB;AACrD,SAAO;AAAA,IACL,QAAQ,MAAM,KAAK;AAAA,IACnB,aAAa,MAAM,KAAK;AAAA,IACxB,eAAe,MAAM;AAAA,IACrB,mBAAmB,MAAM;AAAA,IACzB,gBAAgB,MAAM,KAAK,aAAa;AAAA,IACxC,QAAQ,MAAM;AAAA,IACd,UAAU,MAAM;AAAA,IAChB,KAAK,KAAK,OAAO;AAAA,IACjB,KAAK,KAAK,OAAO;AAAA,IACjB,MAAM,KAAK,QAAQ;AAAA,IACnB,OAAO,KAAK,SAAS;AAAA,IACrB,KAAK,KAAK,OAAO;AAAA,IACjB,KAAK,KAAK,OAAO;AAAA,IACjB,MAAM;AAAA,IACN,MAAM,KAAK;AAAA,IACX,SAAS,KAAK,WAAW;AAAA,IACzB,QAAQ,KAAK,UAAU,KAAK,KAAK,KAAK,OAAO,GAAG;AAAA,IAChD,SAAS,KAAK,OAAO,QAAQ,KAAK,KAAK,IAAI;AAAA,IAC3C,SAAS,KAAK,OAAO,QAAQ,KAAK,KAAK,IAAI;AAAA,IAC3C,SAAS,KAAK,WAAW,QAAQ,KAAK,KAAK,IAAI;AAAA,IAC/C,aAAa,KAAK,WAAW,QAAQ,KAAK,KAAK,IAAI;AAAA,IACnD,OAAO,KAAK,SAAS,oBAAI,KAAK;AAAA,IAC9B,OAAO,KAAK,SAAS,oBAAI,KAAK;AAAA,IAC9B,OAAO,KAAK,aAAa,oBAAI,KAAK;AAAA,IAClC,WAAW,KAAK,aAAa,oBAAI,KAAK;AAAA,EACxC;AACF;AAKA,SAAS,0BAA0B,OAAoB;AACrD,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,QAAQ,MAAM,MAAM;AAAA,IACpB,aAAa,MAAM,MAAM;AAAA,IACzB,eAAe,MAAM;AAAA,IACrB,mBAAmB,MAAM;AAAA,IACzB,gBAAgB,MAAM,MAAM,aAAa;AAAA,IACzC,QAAQ,MAAM;AAAA,IACd,UAAU,MAAM;AAAA,EAClB;AACF;AAKO,SAASF,cAAsC;AACpD,SAAO;AACT;AArqBA,IAaM,aA+DF,IAAS,YA8lBA,UAiBN;AA3rBP;AAAA;AAAA;AAQA;AAKA,IAAM,cAAc,SAAS;AAgE7B,QAAI,QAAQ;AACV,WAAK,QAAQ,IAAI;AACjB,mBAAa,QAAQ,aAAa;AAAA,IACpC;AA0lBO,IAAM,WAAW;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAKA,IAAO,aAAQ;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAAA;AAAA,IACF;AAAA;AAAA;;;ACttBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;;;ACHA,oBAA6B;AAO7B;AAKA,SAASG,eAAc,UAA6B;AAClD,MAAI,SAAU,gBAAe,QAAQ;AACvC;AAqCA,SAAS,kBAAiE;AACxE,QAAM,aAAa;AACnB,SAAO;AAAA,IACL,iBAAiB,WAAW;AAAA,IAC5B,gBAAgB,WAAW;AAAA,EAC7B;AACF;AAGA,IAAIC;AAgPG,IAAMC,iBAAN,cAA4B,2BAAa;AAAA,EAC9C,YAAY,MAAoB,WAA2B,CAAC,GAAG;AAC7D,UAAM;AAAA,EACR;AAAA,EAEA,MAAM,QAAsB;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAA6B;AAC/B,IAAAC,eAAc,QAAQ;AAAA,EACxB;AACF;AAmBO,SAASC,SAAQ,KAAmB,SAA0B,UAA0D;AAC7H,QAAM,YAAY,OAAO,QAAQ,WAAW,MAAM,IAAI,SAAS;AAC/D,QAAM,MAAM,IAAIC,eAAc,WAAW,OAAO;AAEhD,MAAI,QAAQ;AACV,UAAM,EAAE,iBAAAC,iBAAgB,IAAI,gBAAgB;AAC5C,QAAI,CAACC,OAAO,CAAAA,SAAQ,QAAQ,OAAO;AAEnC,UAAM,UAAUA,OAAM,QAAQ,WAAW;AAAA,MACvC,QAAQ,SAAS,UAAU;AAAA,MAC3B,SAAS,SAAS;AAAA,MAClB,SAAS,SAAS;AAAA,MAClB,QAAQ,SAAS;AAAA,IACnB,GAAG,CAAC,QAAa;AACf,YAAM,kBAAkB,IAAID,iBAAgB,GAAG;AAC/C,UAAI,SAAU,UAAS,eAAe;AACtC,UAAI,KAAK,YAAY,eAAe;AAAA,IACtC,CAAC;AAED,YAAQ,GAAG,SAAS,CAAC,UAAiB,IAAI,KAAK,SAAS,KAAK,CAAC;AAC9D,YAAQ,IAAI;AAAA,EACd,OAAO;AAEL,UAAM,EAAE,iBAAAA,iBAAgB,IAAI,gBAAgB;AAE5C,mBAAe,YAAY;AACzB,UAAI;AACF,cAAM,WAAW,MAAM,MAAM,WAAW;AAAA,UACtC,QAAQ,SAAS,UAAU;AAAA,UAC3B,SAAS,SAAS;AAAA,UAClB,QAAQ,SAAS;AAAA,QACnB,CAAC;AAED,cAAM,eAAe,IAAI,QAAQ,SAAS;AAC1C,cAAM,kBAAkB,IAAIA,iBAAgB,YAAY;AACxD,wBAAgB,aAAa,SAAS;AACtC,wBAAgB,gBAAgB,SAAS;AAEzC,YAAI,SAAU,UAAS,eAAe;AACtC,YAAI,KAAK,YAAY,eAAe;AAAA,MACtC,SAAS,OAAO;AACd,YAAI,KAAK,SAAS,KAAK;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ACvXA,IAAAE,iBAA6B;AAE7B;AAeO,IAAM,cAAc;AAAA,EACzB,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,oBAAoB;AACtB;AAiDA,SAASC,eAAc,UAAkC,OAAqB;AAC5E,MAAI,UAAU;AACZ,mBAAe,MAAM,SAAS,KAAK,CAAC;AAAA,EACtC;AACF;AAKA,SAAS,sBAAsB,KAAa,WAA2B;AAErE,MAAI,YAAY,UAAU,OAAO,WAAW,cAAc,aAAa;AACrE,UAAM,IAAI,MAAM,2EAA2E;AAAA,EAC7F;AAEA,SAAO,IAAI,WAAW,UAAU,KAAK,SAAS;AAChD;AAKO,IAAM,YAAN,cAAwB,4BAAa;AAAA,EAU1C,YAAY,SAAuB,WAA+B,UAAgB;AAChF,UAAM;AAVR,SAAO,aAAyB;AAEhC,SAAO,WAAmB;AAC1B,SAAO,aAAqB;AAC5B,SAAO,aAAyD;AAO9D,SAAK,MAAM,OAAO,YAAY,WAAW,UAAU,QAAQ,SAAS;AACpE,UAAM,iBAAiB,MAAM,QAAQ,SAAS,IAAI,YAAY,YAAY,CAAC,SAAS,IAAI;AACxF,SAAK,UAAU,sBAAsB,KAAK,KAAK,cAAc;AAC7D,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEQ,qBAA2B;AACjC,SAAK,QAAQ,SAAS,MAAM;AAC1B,WAAK,aAAa;AAClB,WAAK,KAAK,MAAM;AAAA,IAClB;AAEA,SAAK,QAAQ,YAAY,CAAC,UAAwB;AAChD,YAAM,WAAW,MAAM,gBAAgB,eAAe,MAAM,gBAAgB;AAC5E,WAAK,KAAK,WAAW,MAAM,MAAM,QAAQ;AAAA,IAC3C;AAEA,SAAK,QAAQ,UAAU,CAAC,UAAsB;AAC5C,WAAK,aAAa;AAClB,WAAK,KAAK,SAAS,MAAM,MAAM,MAAM,MAAM;AAAA,IAC7C;AAEA,SAAK,QAAQ,UAAU,MAAM;AAC3B,WAAK,KAAK,SAAS,IAAI,MAAM,iBAAiB,CAAC;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAAY,SAAiD,UAAwC;AACxG,UAAM,KAAK,OAAO,YAAY,aAAa,UAAU;AAErD,QAAI,KAAK,eAAe,cAAiB;AACvC,aAAOA,eAAc,IAAI,IAAI,MAAM,uBAAuB,CAAC;AAAA,IAC7D;AAEA,QAAI;AACF,WAAK,QAAQ,KAAK,IAAI;AACtB,MAAAA,eAAc,EAAE;AAAA,IAClB,SAAS,OAAO;AACd,MAAAA,eAAc,IAAI,KAAc;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAe,QAAgC;AACnD,QAAI,KAAK,eAAe,kBAAqB,KAAK,eAAe,iBAAoB;AACnF;AAAA,IACF;AAEA,SAAK,aAAa;AAClB,SAAK,QAAQ,MAAM,MAAM,OAAO,WAAW,WAAW,SAAS,QAAQ,SAAS,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AAAA,EAEd;AAAA;AAAA;AAAA;AAAA,EAKA,SAAe;AAAA,EAEf;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,OAAc,OAAiB,UAAwC;AAC1E,IAAAA,eAAc,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,OAAc,OAAiB,UAAwC;AAC1E,IAAAA,eAAc,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAkB;AAChB,SAAK,QAAQ,MAAM;AACnB,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,iBAAyB;AAC3B,WAAO,KAAK,QAAQ,kBAAkB;AAAA,EACxC;AACF;AAKO,IAAM,kBAAN,cAA8B,4BAAa;AAAA,EAOhD,YAAY,SAAyB,UAAuB;AAC1D,UAAM;AAPR,SAAO,UAA0B,oBAAI,IAAI;AAQvC,SAAK,UAAU,WAAW,CAAC;AAC3B,SAAK,OAAO,SAAS,QAAQ;AAE7B,QAAI,YAAY,QAAQ;AAEtB,UAAI,SAAS,QAAQ;AACnB,aAAK,cAAc,QAAQ;AAC3B,aAAK,qBAAqB;AAAA,MAC5B,WAAW,SAAS,UAAU;AAAA,MAE9B,OAAO;AAEL,cAAMC,QAAO,QAAQ,MAAM;AAC3B,aAAK,cAAcA,MAAK,aAAa;AACrC,aAAK,qBAAqB;AAE1B,YAAI,SAAS,MAAM;AACjB,eAAK,YAAY,OAAO,QAAQ,MAAM,QAAQ,MAAM,QAAQ;AAAA,QAC9D;AAAA,MACF;AAAA,IACF,OAAO;AAEL,MAAAD,eAAc,QAAe;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,uBAA6B;AACnC,SAAK,YAAY,GAAG,WAAW,CAACE,UAAc,QAAa,SAAiB;AAC1E,cAAQ,IAAI,gCAAgCA,SAAQ,KAAK,aAAa,KAAK,IAAI;AAC/E,UAAI,KAAK,QAAQ,KAAK,SAAS,OAAOA,SAAQ,QAAQ,KAAK,MAAM;AAC/D,gBAAQ,IAAI,qCAAqC;AACjD;AAAA,MACF;AAEA,WAAK,cAAcA,UAAS,QAAQ,MAAM,CAAC,WAAW;AACpD,gBAAQ,IAAI,8BAA8B;AAC1C,aAAK,KAAK,cAAc,QAAQA,QAAO;AAAA,MACzC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,cAAcA,UAA0B,QAAa,OAAe,UAA6C;AAE/G,UAAM,MAAMA,SAAQ,QAAQ,mBAAmB;AAC/C,QAAI,CAAC,KAAK;AACR,aAAO,IAAI,kCAAkC;AAC7C;AAAA,IACF;AAGA,UAAM,SAAS,QAAQ,QAAQ;AAC/B,UAAM,YAAY,OACf,WAAW,MAAM,EACjB,OAAO,MAAM,sCAAsC,EACnD,OAAO,QAAQ;AAGlB,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,yBAAyB,SAAS;AAAA,MAClC;AAAA,MACA;AAAA,IACF;AAEA,WAAO,MAAM,QAAQ,KAAK,MAAM,CAAC;AAGjC,UAAM,SAAS,KAAK,wBAAwB,MAAM;AAElD,QAAI,KAAK,QAAQ,mBAAmB,OAAO;AACzC,WAAK,QAAQ,IAAI,MAAM;AACvB,aAAO,GAAG,SAAS,MAAM;AACvB,aAAK,QAAQ,OAAO,MAAM;AAAA,MAC5B,CAAC;AAAA,IACH;AAEA,aAAS,MAAM;AAAA,EACjB;AAAA,EAEQ,wBAAwB,QAAwB;AACtD,UAAM,SAAS,OAAO,OAAO,UAAU,SAAS;AAChD,gCAAa,KAAK,MAAM;AAExB,WAAO,aAAa;AACpB,WAAO,MAAM;AACb,WAAO,WAAW;AAClB,WAAO,aAAa;AACpB,WAAO,aAAa;AACpB,WAAO,UAAU;AAGjB,WAAO,GAAG,QAAQ,CAAC,SAAiB;AAElC,UAAI;AACF,cAAM,UAAU,KAAK,YAAY,IAAI;AACrC,YAAI,SAAS;AACX,iBAAO,KAAK,WAAW,SAAS,KAAK;AAAA,QACvC;AAAA,MACF,SAAS,OAAO;AACd,eAAO,KAAK,SAAS,KAAK;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,WAAO,GAAG,OAAO,MAAM;AACrB,aAAO,aAAa;AACpB,aAAO,KAAK,SAAS,YAAY,QAAQ,EAAE;AAAA,IAC7C,CAAC;AAED,WAAO,GAAG,SAAS,CAAC,UAAiB;AAGnC,YAAM,YAAa,MAAc;AACjC,UAAI,cAAc,kBAAkB,cAAc,gBAAgB,cAAc,SAAS;AAEvF;AAAA,MACF;AAEA,aAAO,KAAK,SAAS,KAAK;AAAA,IAC5B,CAAC;AAGD,WAAO,OAAO,CAAC,MAAY,UAAgB,aAAqC;AAE9E,UAAI,CAAC,OAAO,YAAY,OAAO,eAAe,cAAiB;AAC7D,cAAM,MAAM,IAAI,MAAM,uBAAuB;AAC7C,QAAC,IAAY,OAAO;AACpB,QAAAF,eAAc,UAAU,GAAG;AAC3B;AAAA,MACF;AAEA,UAAI;AACF,cAAM,QAAQ,KAAK,aAAa,IAAI;AACpC,eAAO,MAAM,OAAO,CAAC,QAAgB;AAEnC,cAAI,KAAK;AACP,kBAAM,YAAa,IAAY;AAE/B,gBAAI,cAAc,kBAAkB,cAAc,gBAAgB,cAAc,SAAS;AACvF,cAAAA,eAAc,UAAU,GAAG;AAAA,YAC7B,OAAO;AAEL,qBAAO,aAAa;AACpB,cAAAA,eAAc,QAAQ;AAAA,YACxB;AAAA,UACF,OAAO;AACL,YAAAA,eAAc,QAAQ;AAAA,UACxB;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,QAAAA,eAAc,UAAU,KAAc;AAAA,MACxC;AAAA,IACF;AAGA,WAAO,QAAQ,CAAC,OAAgB,YAAqB;AACnD,aAAO,IAAI;AACX,aAAO,aAAa;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,MAA6B;AAE/C,QAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,UAAM,YAAY,KAAK,CAAC;AACxB,UAAM,aAAa,KAAK,CAAC;AAEzB,UAAM,SAAS,YAAY;AAC3B,UAAM,YAAY,aAAa,SAAU;AACzC,QAAI,gBAAgB,aAAa;AACjC,QAAI,SAAS;AAEb,QAAI,kBAAkB,KAAK;AACzB,sBAAgB,KAAK,aAAa,CAAC;AACnC,eAAS;AAAA,IACX,WAAW,kBAAkB,KAAK;AAChC,sBAAgB,OAAO,KAAK,gBAAgB,CAAC,CAAC;AAC9C,eAAS;AAAA,IACX;AAEA,QAAI,UAAU,KAAK,SAAS,MAAM;AAElC,QAAI,UAAU;AACZ,YAAM,UAAU,KAAK,SAAS,QAAQ,SAAS,CAAC;AAChD,gBAAU,KAAK,SAAS,SAAS,GAAG,SAAS,IAAI,aAAa;AAG9D,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,gBAAQ,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,QAAI,WAAW,GAAG;AAChB,aAAO,QAAQ,SAAS,MAAM;AAAA,IAChC;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,MAAoB;AAEvC,UAAM,UAAU,OAAO,SAAS,WAAW,OAAO,KAAK,IAAI,IAAI;AAC/D,UAAM,gBAAgB,OAAO,SAAS,OAAO,IAAI,QAAQ,SAAS;AAElE,QAAI;AACJ,QAAI,SAAS;AAEb,QAAI,gBAAgB,KAAK;AACvB,cAAQ,OAAO,YAAY,IAAI,aAAa;AAC5C,YAAM,CAAC,IAAI;AAAA,IACb,WAAW,gBAAgB,OAAO;AAChC,cAAQ,OAAO,YAAY,IAAI,aAAa;AAC5C,YAAM,CAAC,IAAI;AACX,YAAM,cAAc,eAAe,CAAC;AACpC,eAAS;AAAA,IACX,OAAO;AACL,cAAQ,OAAO,YAAY,KAAK,aAAa;AAC7C,YAAM,CAAC,IAAI;AACX,YAAM,iBAAiB,OAAO,aAAa,GAAG,CAAC;AAC/C,eAAS;AAAA,IACX;AAEA,UAAM,CAAC,IAAI;AAEX,QAAI,OAAO,SAAS,OAAO,GAAG;AAC5B,cAAQ,KAAK,OAAO,MAAM;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAwC;AAC5C,SAAK,QAAQ,QAAQ,YAAU,OAAO,MAAM,CAAC;AAC7C,SAAK,QAAQ,MAAM;AAEnB,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,MAAM,QAAQ;AAAA,IACjC,OAAO;AACL,WAAK,KAAK,OAAO;AACjB,MAAAA,eAAc,QAAQ;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAaE,UAAmC;AAC9C,QAAI,KAAK,QAAQA,SAAQ,QAAQ,KAAK,MAAM;AAC1C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAoE;AAClE,QAAI,KAAK,eAAe,KAAK,YAAY,SAAS;AAChD,aAAO,KAAK,YAAY,QAAQ;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AACF;;;ACpfA,IAAAC,iBAA6B;AAC7B;AAKA,SAAS,cAAc,MAAsB;AAC3C,SAAO,KAAK,QAAQ,OAAO,GAAG;AAChC;AAKA,SAAS,UAAU,SAAoB,WAAmB,MAAoB;AAC5E,UAAQ,KAAK,WAAW,IAAI;AAC5B,UAAQ,KAAK,OAAO,WAAW,IAAI;AACrC;AAKA,SAAS,kBAAkB,MAAc,UAA6B;AACpE,SAAO,SAAS,KAAK,aAAW,eAAe,MAAM,OAAO,CAAC;AAC/D;AAKA,SAAS,kBAAkB,SAAoB,UAAkBC,KAAe;AAC9E,MAAI;AACF,IAAAA,IAAG,SAAS,QAAQ;AACpB,cAAU,SAAS,OAAO,QAAQ;AAAA,EACpC,QAAQ;AACN,cAAU,SAAS,UAAU,QAAQ;AAAA,EACvC;AACF;AAKA,SAAS,aACP,SACA,SACA,UACAA,KACM;AACN,MAAI;AACF,UAAM,gBAAgBA,IAAG,MAAM,SAAS,EAAE,WAAW,KAAK,GAAG,CAAC,WAAmB,aAAqB;AACpG,UAAI,CAAC,SAAU;AAEf,YAAM,WAAW,cAAc,GAAG,OAAO,IAAI,QAAQ,EAAE;AAGvD,UAAI,CAAC,kBAAkB,UAAU,QAAQ,EAAG;AAE5C,UAAI,cAAc,UAAU;AAC1B,0BAAkB,SAAS,UAAUA,GAAE;AAAA,MACzC,WAAW,cAAc,UAAU;AACjC,kBAAU,SAAS,UAAU,QAAQ;AAAA,MACvC;AAAA,IACF,CAAC;AAED,YAAQ,YAAY,aAAa;AAEjC,YAAQ,UAAU,EAAE,IAAI,OAAO;AAG/B,mBAAe,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,EAC5C,SAAS,OAAO;AACd,YAAQ,KAAK,SAAS,KAAc;AAAA,EACtC;AACF;AA4FO,IAAM,YAAN,cAAwB,4BAAa;AAAA,EAK1C,YAAY,SAAwB;AAClC,UAAM;AAJR,SAAQ,UAAmB;AAC3B,SAAQ,WAAwB,oBAAI,IAAI;AAItC,SAAK,UAAU,WAAW,CAAC;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,OAAqC;AACvC,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAEA,UAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAEvD,QAAI,YAAY,QAAQ;AACtB,UAAI,KAAK,UAAU;AACjB,aAAK,SAAS,IAAI,SAAS;AAAA,MAC7B;AAAA,IACF,OAAO;AACL,gBAAU,QAAQ,UAAQ,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,IACnD;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,OAAqC;AAC3C,QAAI,KAAK,SAAS;AAChB,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAEvD,QAAI,YAAY,QAAQ;AACtB,UAAI,KAAK,UAAU;AACjB,aAAK,SAAS,QAAQ,SAAS;AAAA,MACjC;AAAA,IACF,OAAO;AACL,gBAAU,QAAQ,UAAQ,KAAK,SAAS,OAAO,IAAI,CAAC;AAAA,IACtD;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,QAAI,KAAK,SAAS;AAChB;AAAA,IACF;AAEA,SAAK,UAAU;AAEf,QAAI,YAAY,QAAQ;AACtB,UAAI,KAAK,UAAU;AACjB,cAAM,KAAK,SAAS,MAAM;AAAA,MAC5B;AAAA,IACF;AAEA,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAgD;AAC9C,QAAI,YAAY,UAAU,KAAK,UAAU;AACvC,aAAO,KAAK,SAAS,WAAW;AAAA,IAClC;AAEA,UAAM,SAA4C,CAAC;AACnD,SAAK,SAAS,QAAQ,UAAQ;AAC5B,YAAM,MAAM,KAAK,UAAU,GAAG,KAAK,YAAY,GAAG,CAAC,KAAK;AACxD,YAAM,OAAO,KAAK,UAAU,KAAK,YAAY,GAAG,IAAI,CAAC;AACrD,UAAI,CAAC,OAAO,GAAG,GAAG;AAChB,eAAO,GAAG,IAAI,CAAC;AAAA,MACjB;AACA,aAAO,GAAG,EAAE,KAAK,IAAI;AAAA,IACvB,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,SAAoB;AAC9B,SAAK,WAAW;AAAA,EAClB;AACF;AAMA,SAAS,iBAAiB,SAAyB;AAEjD,QAAM,QAAQ,QAAQ,MAAM,QAAQ;AACpC,MAAI,UAAU;AAEd,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAC5C;AAAA,IACF;AACA,cAAU,UAAU,GAAG,OAAO,IAAI,IAAI,KAAK;AAAA,EAC7C;AAEA,SAAO,WAAW;AACpB;AAKA,SAAS,eAAe,UAAkB,SAA0B;AAElE,QAAM,eAAe,cAAc,OAAO,EACvC,QAAQ,SAAS,IAAI,EACrB,QAAQ,OAAO,OAAO,EACtB,QAAQ,OAAO,GAAG;AAErB,QAAM,QAAQ,IAAI,OAAO,IAAI,YAAY,GAAG;AAC5C,QAAM,iBAAiB,cAAc,QAAQ;AAE7C,SAAO,MAAM,KAAK,cAAc;AAClC;AAKO,SAAS,MACd,OACA,SACW;AACX,QAAM,UAAU,IAAI,UAAU,OAAO;AACrC,QAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAGvD,QAAM,WAAW,oBAAI,IAAsB;AAE3C,YAAU,QAAQ,UAAQ;AACxB,UAAM,UAAU,iBAAiB,IAAI;AACrC,QAAI,CAAC,SAAS,IAAI,OAAO,GAAG;AAC1B,eAAS,IAAI,SAAS,CAAC,CAAC;AAAA,IAC1B;AACA,aAAS,IAAI,OAAO,EAAG,KAAK,IAAI;AAAA,EAClC,CAAC;AAED,MAAI,YAAY,QAAQ;AAEtB,UAAMA,MAAK,QAAQ,IAAI;AACvB,aAAS,QAAQ,CAAC,UAAU,YAAY,aAAa,SAAS,SAAS,UAAUA,GAAE,CAAC;AAAA,EACtF,WAAW,YAAY,OAAO;AAE5B,UAAMA,MAAK,QAAQ,IAAI;AACvB,aAAS,QAAQ,CAAC,UAAU,YAAY,aAAa,SAAS,SAAS,UAAUA,GAAE,CAAC;AAAA,EACtF,WAAW,YAAY,QAAQ;AAG7B,UAAM,WAAW,MAAM,KAAK,SAAS,KAAK,CAAC;AAC3C,UAAM,cAAc,MAAM,KAAK,SAAS,OAAO,CAAC,EAAE,KAAK;AAEvD,KAAC,YAAY;AACX,UAAI;AAEF,cAAM,cAAc,KAAK,QAAQ,QAAQ;AAEzC,yBAAiB,SAAS,aAAa;AACrC,cAAI,QAAQ,SAAS,EAAG;AAExB,qBAAW,QAAQ,MAAM,OAAO;AAC9B,kBAAM,iBAAiB,cAAc,IAAI;AAGzC,gBAAI,CAAC,kBAAkB,gBAAgB,WAAW,EAAG;AAErD,oBAAQ,MAAM,MAAM;AAAA,cAClB,KAAK;AACH,0BAAU,SAAS,OAAO,IAAI;AAC9B;AAAA,cACF,KAAK;AACH,0BAAU,SAAS,UAAU,IAAI;AACjC;AAAA,cACF,KAAK;AACH,0BAAU,SAAS,UAAU,IAAI;AACjC;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,YAAI,CAAC,QAAQ,SAAS,GAAG;AACvB,kBAAQ,KAAK,SAAS,KAAc;AAAA,QACtC;AAAA,MACF;AAAA,IACF,GAAG;AAEH,cAAU,QAAQ,UAAQ,QAAQ,IAAI,IAAI,CAAC;AAC3C,mBAAe,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,EAC5C;AAEA,SAAO;AACT;;;AHpXA;;;AILA;AAKA,SAAS,aAAa,OAAwB;AAC5C,SAAO,QAAQ,OAAO;AACxB;AAKA,SAAS,SAAiB;AACxB,MAAI,UAAU,OAAO;AACnB,WAAO,QAAQ,IAAI;AAAA,EACrB,WAAW,QAAQ;AAEjB,WAAO,KAAK,IAAI;AAAA,EAClB;AACA,SAAO;AACT;AAKA,SAAS,kBAAkB,MAAsB;AAC/C,SAAO,KAAK,IAAI,KAAK,YAAY,GAAG,GAAG,KAAK,YAAY,IAAI,CAAC;AAC/D;AAKA,SAAS,cAAc,OAAgB;AACrC,SAAO;AAAA,IACL,KAAK,aAAa,KAAK;AAAA,IACvB,WAAW,QAAQ,MAAM;AAAA,IACzB,WAAW,CAAC,SAAiBC,eAAc,MAAM,KAAK;AAAA,IACtD,MAAM,IAAI,UAAoB,UAAU,OAAO,KAAK;AAAA,IACpD,SAAS,IAAI,UAAoB,aAAa,OAAO,KAAK;AAAA,IAC1D,YAAY,CAAC,SAAiB,QAAQ,cAAc,IAAI,IAAI,gBAAgB,IAAI;AAAA,IAChF,UAAU,CAAC,MAAc,OAAe,aAAa,MAAM,IAAI,KAAK;AAAA,IACpE,SAAS,CAAC,SAAiB,WAAW,MAAM,KAAK;AAAA,IACjD,UAAU,CAAC,MAAc,QAAiB,YAAY,MAAM,KAAK,KAAK;AAAA,IACtE,SAAS,CAAC,SAAiB,WAAW,IAAI;AAAA,IAC1C,OAAO,CAAC,SAAiB,UAAU,MAAM,KAAK;AAAA,IAC9C,QAAQ,CAAC,eAAsC,WAAW,YAAY,KAAK;AAAA,EAC7E;AACF;AAKA,SAAS,gBAAgB,MAAuB;AAC9C,SAAO,KAAK,SAAS,KAAK,KAAK,CAAC,MAAM;AACxC;AAKA,SAAS,cAAc,MAAuB;AAC5C,QAAM,MAAM,KAAK;AACjB,MAAI,QAAQ,EAAG,QAAO;AAEtB,QAAM,OAAO,KAAK,WAAW,CAAC;AAC9B,MAAI,SAAS,MAAc,SAAS,IAAY;AAC9C,WAAO;AAAA,EACT;AAGA,MAAK,QAAQ,MAAM,QAAQ,MAAQ,QAAQ,MAAM,QAAQ,KAAM;AAC7D,QAAI,MAAM,KAAK,KAAK,WAAW,CAAC,MAAM,IAAY;AAChD,YAAM,QAAQ,KAAK,WAAW,CAAC;AAC/B,UAAI,UAAU,MAAc,UAAU,IAAY;AAChD,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKA,IAAM,aAAa,MAAM;AACvB,MAAI,QAAQ;AACV,WAAO,QAAQ,aAAa;AAAA,EAC9B,WAAW,QAAQ;AAEjB,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B;AAEA,SAAO,OAAO,YAAY,eAAe,QAAQ,aAAa;AAChE,GAAG;AAKI,IAAM,MAAM,YAAY,OAAO;AAUtC,IAAM,QAAQ,cAAc,KAAK;AAKjC,IAAM,QAAQ,cAAc,IAAI;AAwBhC,SAASC,eAAc,MAAc,OAAwB;AAC3D,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,YAAY,aAAa,KAAK;AACpC,QAAM,aAAa,QAAQ,cAAc,IAAI,IAAI,gBAAgB,IAAI;AACrE,QAAM,oBAAoB,KAAK,KAAK,SAAS,CAAC,MAAM,aAAc,SAAS,KAAK,KAAK,SAAS,CAAC,MAAM;AAGrG,MAAI,aAAa,KAAK,QAAQ,QAAQ,aAAa,QAAQ,SAAS;AAGpE,QAAM,QAAQ,WAAW,MAAM,SAAS;AACxC,QAAM,SAAmB,CAAC;AAE1B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AAEpB,QAAI,SAAS,MAAM,SAAS,KAAK;AAC/B,UAAI,MAAM,KAAK,WAAY,QAAO,KAAK,EAAE;AACzC;AAAA,IACF;AAEA,QAAI,SAAS,MAAM;AACjB,UAAI,OAAO,SAAS,KAAK,OAAO,OAAO,SAAS,CAAC,MAAM,MAAM;AAC3D,YAAI,EAAE,OAAO,WAAW,KAAK,OAAO,CAAC,MAAM,KAAK;AAC9C,iBAAO,IAAI;AAAA,QACb;AAAA,MACF,WAAW,CAAC,YAAY;AACtB,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,MAAI,QAAQ,OAAO,KAAK,SAAS;AAEjC,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,aAAa,YAAY;AAAA,EAClC;AAEA,MAAI,qBAAqB,MAAM,MAAM,SAAS,CAAC,MAAM,WAAW;AAC9D,aAAS;AAAA,EACX;AAEA,SAAO;AACT;AAKA,SAAS,UAAU,OAAiB,OAAwB;AAC1D,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,QAAM,YAAY,aAAa,KAAK;AACpC,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,UAAI,OAAO,WAAW,GAAG;AACvB,iBAAS;AAAA,MACX,OAAO;AACL,kBAAU,YAAY;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,SAAOA,eAAc,QAAQ,KAAK;AACpC;AAKA,SAAS,aAAa,OAAiB,OAAwB;AAC7D,QAAM,YAAY,aAAa,KAAK;AACpC,MAAI,WAAW;AACf,MAAI,aAAa;AAEjB,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,KAAK,CAAC,YAAY,KAAK;AACzD,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,iBAAW,QAAQ,SAAS,SAAS,IAAI,YAAY,WAAW;AAChE,mBAAa,QAAQ,cAAc,QAAQ,IAAI,gBAAgB,QAAQ;AAAA,IACzE;AAAA,EACF;AAEA,MAAI,CAAC,YAAY;AACf,UAAM,MAAM,OAAO;AACnB,eAAW,OAAO,SAAS,SAAS,IAAI,YAAY,WAAW;AAAA,EACjE;AAEA,SAAOA,eAAc,UAAU,KAAK;AACtC;AAKA,SAAS,aAAa,MAAc,IAAY,OAAwB;AACtE,SAAO,aAAa,CAAC,IAAI,GAAG,KAAK;AACjC,OAAK,aAAa,CAAC,EAAE,GAAG,KAAK;AAE7B,MAAI,SAAS,GAAI,QAAO;AAExB,QAAM,YAAY,aAAa,KAAK;AACpC,QAAM,YAAY,KAAK,MAAM,SAAS,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC;AAChE,QAAM,UAAU,GAAG,MAAM,SAAS,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC;AAE5D,MAAI,eAAe;AACnB,QAAM,YAAY,KAAK,IAAI,UAAU,QAAQ,QAAQ,MAAM;AAE3D,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,QAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,GAAG;AAC/B;AAAA,IACF,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,UAAU,SAAS;AACnC,QAAM,SAAmB,CAAC;AAE1B,WAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,WAAO,KAAK,IAAI;AAAA,EAClB;AAEA,WAAS,IAAI,cAAc,IAAI,QAAQ,QAAQ,KAAK;AAClD,WAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,EACxB;AAEA,SAAO,OAAO,KAAK,SAAS,KAAK;AACnC;AAKA,SAAS,WAAW,MAAc,OAAwB;AACxD,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,YAAY,aAAa,KAAK;AACpC,QAAM,aAAaA,eAAc,MAAM,KAAK;AAC5C,QAAM,eAAe,WAAW,YAAY,SAAS;AAErD,MAAI,iBAAiB,GAAI,QAAO;AAChC,MAAI,iBAAiB,EAAG,QAAO;AAE/B,SAAO,WAAW,MAAM,GAAG,YAAY;AACzC;AAKA,SAAS,YAAY,MAAc,KAAc,OAAyB;AACxE,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,eAAe,QAAQ,kBAAkB,IAAI,IAAI,KAAK,YAAY,GAAG;AAC3E,MAAI,OAAO,iBAAiB,KAAK,OAAO,KAAK,MAAM,eAAe,CAAC;AAEnE,MAAI,OAAO,KAAK,SAAS,GAAG,GAAG;AAC7B,WAAO,KAAK,MAAM,GAAG,KAAK,SAAS,IAAI,MAAM;AAAA,EAC/C;AAEA,SAAO;AACT;AAKA,SAAS,WAAW,MAAsB;AACxC,QAAM,eAAe,KAAK,YAAY,GAAG;AACzC,QAAM,eAAe,kBAAkB,IAAI;AAE3C,MAAI,iBAAiB,MAAM,eAAe,gBAAgB,iBAAiB,KAAK,SAAS,GAAG;AAC1F,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,MAAM,YAAY;AAChC;AAKA,SAAS,UAAU,MAAc,OAA4B;AAC3D,MAAI,OAAO;AACX,MAAI,OAAO;AAET,QAAI,KAAK,UAAU,KAAK,KAAK,CAAC,MAAM,KAAK;AACvC,aAAO,KAAK,MAAM,GAAG,CAAC;AACtB,UAAI,KAAK,SAAS,MAAM,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,MAAM;AAC5D,gBAAQ;AAAA,MACV;AAAA,IACF,WAAW,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK;AAC9C,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,QAAI,KAAK,CAAC,MAAM,KAAK;AACnB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,MAAM,WAAW,MAAM,KAAK;AAClC,QAAM,OAAO,YAAY,MAAM,QAAW,KAAK;AAC/C,QAAM,MAAM,WAAW,IAAI;AAC3B,QAAM,OAAO,MAAM,KAAK,MAAM,GAAG,KAAK,SAAS,IAAI,MAAM,IAAI;AAE7D,SAAO,EAAE,MAAM,KAAK,MAAM,KAAK,KAAK;AACtC;AAKA,SAAS,WAAW,YAAmC,OAAwB;AAC7E,QAAM,YAAY,aAAa,KAAK;AACpC,QAAM,MAAM,WAAW,OAAO,WAAW,QAAQ;AACjD,QAAM,OAAO,WAAW,SAAU,WAAW,QAAQ,OAAO,WAAW,OAAO;AAE9E,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,QAAQ,WAAW,KAAM,QAAO,MAAM;AAE1C,SAAO,MAAM,YAAY;AAC3B;AAKO,SAAS,UAAU,MAAsB;AAC9C,SAAOA,eAAc,MAAM,SAAS;AACtC;AAKO,SAAS,QAAQ,OAAyB;AAC/C,SAAO,UAAU,OAAO,SAAS;AACnC;AAKO,SAAS,WAAW,OAAyB;AAClD,SAAO,aAAa,OAAO,SAAS;AACtC;AAYO,SAAS,SAAS,MAAc,IAAoB;AACzD,SAAO,aAAa,MAAM,IAAI,SAAS;AACzC;AAmBO,SAAS,QAAQ,MAAsB;AAC5C,SAAO,WAAW,IAAI;AACxB;;;AC9ZA;AAMA,IAAM,aAAqC;AAAA;AAAA,EAEzC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,YAAY;AAAA;AAAA,EAGZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA;AAAA,EAGP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA;AAAA,EAGR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAGP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA;AAAA,EAGN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA;AAAA,EAGR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAGP,QAAQ;AAAA,EACR,YAAY;AAAA;AAAA,EAGZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAGP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAKA,IAAM,qBAA+C,CAAC;AACtD,WAAW,OAAO,YAAY;AAC5B,QAAM,OAAO,WAAW,GAAG;AAC3B,MAAI,CAAC,mBAAmB,IAAI,GAAG;AAC7B,uBAAmB,IAAI,IAAI,CAAC;AAAA,EAC9B;AACA,qBAAmB,IAAI,EAAE,KAAK,GAAG;AACnC;AAwBA,SAAS,aAAa,MAAsB;AAC1C,QAAM,QAAQ,gBAAgB,KAAK,IAAI;AACvC,SAAO,QAAQ,MAAM,CAAC,EAAE,YAAY,IAAI;AAC1C;AAaO,SAAS,OAAO,MAA8B;AACnD,QAAM,MAAM,aAAa,IAAI,KAAK,KAAK,YAAY;AACnD,SAAO,WAAW,GAAG,KAAK;AAC5B;;;ALnIA;;;AMNA,SAAS,eAAe,aAAuD;AAC3E,SAAO,OAAO,gBAAgB,WACxB,SAAS,eAAe,YAAY,QAAQ,KAAK,EAAE,CAAC,IACpD;AACV;AAKA,SAAS,cAAc,IAAwB,aAAgD;AAC3F,MAAI,CAAC,IAAI;AACL,UAAM,IAAI,MAAM,sBAAsB,WAAW,EAAE;AAAA,EACvD;AACA,SAAO;AACX;AAKA,SAAS,gBAAgB,OAAqB;AAC1C,SAAO,SAAS,QAAQ,UAAU;AACtC;AAKA,SAAS,gBAAgBC,OAAiE;AACtF,SAAOA,SAAQ,QAAQ,OAAOA,UAAS,aAAa,OAAOA,UAAS,YAAY,OAAOA,UAAS;AACpG;AAEO,IAAM,UAAN,MAAc;AAAA,EAAd;AACH,SAAQ,eAAe,oBAAI,QAA0B;AA2lBrD,SAAQ,gBAAgB,oBAAI,IAAoE;AAAA;AAAA,EAzlBhG,cAAc,SAAiB,QAAe,CAAC,GAAG,WAAqB,CAAC,GAAU;AAC9E,WAAO,EAAE,SAAS,OAAO,SAAS;AAAA,EACtC;AAAA,EAEA,YAAY,OAAc,QAA2D;AACjF,QAAI,SAAS,QAAQ,UAAU,MAAO;AAGtC,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO,YAAY,SAAS,eAAe,OAAO,KAAK,CAAC,CAAC;AACzD;AAAA,IACJ;AAGA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,iBAAW,SAAS,OAAO;AACvB,aAAK,YAAY,OAAO,MAAM;AAAA,MAClC;AACA;AAAA,IACJ;AAGA,UAAM,EAAE,SAAS,OAAO,SAAS,IAAI;AAGrC,QAAI,CAAC,SAAS;AAIV,iBAAW,SAAS,UAAU;AAC1B,YAAI,gBAAgB,KAAK,EAAG;AAE5B,YAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,qBAAW,KAAK,OAAO;AACnB,aAAC,gBAAgB,CAAC,KAAK,KAAK,YAAY,GAAG,MAAM;AAAA,UACrD;AAAA,QACJ,OAAO;AACH,eAAK,YAAY,OAAO,MAAM;AAAA,QAClC;AAAA,MACJ;AACA;AAAA,IACJ;AAEA,UAAM,QAAQ,YAAY,SAAU,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,MAAM,OAC1F,OAAe,iBAAiB;AAErC,UAAM,KAAK,QACL,SAAS,gBAAgB,8BAA8B,QAAQ,QAAQ,OAAO,EAAE,EAAE,YAAY,KAAK,OAAO,IAC1G,SAAS,cAAc,OAAO;AAEpC,eAAW,OAAO,OAAO;AACrB,YAAM,QAAQ,MAAM,GAAG;AACvB,UAAI,SAAS,QAAQ,UAAU,MAAO;AAEtC,YAAM,IAAI,IAAI,WAAW,CAAC;AAE1B,UAAI,MAAM,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,MAAM;AAChD,cAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI;AAC5D,gBAAS,GAAkB,aAAa,SAAS,UAAU,IAAK,GAAmB,YAAY;AAAA,MACnG,WAES,MAAM,OAAO,IAAI,WAAW,GAAG;AACpC,YAAI,OAAO,UAAU,UAAU;AAC3B,UAAC,GAAmB,MAAM,UAAU;AAAA,QACxC,OAAO;AACH,gBAAM,IAAK,GAAmB;AAC9B,qBAAW,KAAK,MAAO,CAAC,EAAU,CAAC,IAAI,MAAM,CAAC;AAAA,QAClD;AAAA,MACJ,WAES,MAAM,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK;AAC7C,QAAC,GAAW,IAAI,YAAY,CAAC,IAAI;AAAA,MACrC,WAES,MAAM,OAAO,IAAI,SAAS,IAAI;AACnC,QAAC,GAAmB,YAAY,MAAM;AAAA,MAC1C,WAES,MAAM,OAAO,IAAI,WAAW,GAAG;AACpC,mBAAW,MAAM;AACb,iBAAO,UAAU,aAAa,MAAM,EAAiB,IAAK,MAAM,UAAU;AAAA,QAC9E,GAAG,CAAC;AAAA,MACR,OACK;AACD,WAAG,aAAa,KAAK,UAAU,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MAC5D;AAAA,IACJ;AAEA,UAAM,MAAM,SAAS;AACrB,QAAI,CAAC,KAAK;AACN,aAAO,YAAY,EAAE;AACrB;AAAA,IACJ;AAEA,UAAM,iBAAiB,CAAC,WAAwD;AAC5E,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,cAAM,QAAQ,SAAS,CAAC;AACxB,YAAI,gBAAgB,KAAK,EAAG;AAE5B,YAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,mBAAS,IAAI,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK;AAChD,kBAAM,IAAI,MAAM,CAAC;AACjB,aAAC,gBAAgB,CAAC,KAAK,KAAK,YAAY,GAAG,MAAM;AAAA,UACrD;AAAA,QACJ,OAAO;AACH,eAAK,YAAY,OAAO,MAAM;AAAA,QAClC;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,MAAM,IAAI;AACV,YAAM,WAAW,SAAS,uBAAuB;AACjD,qBAAe,QAAQ;AACvB,SAAG,YAAY,QAAQ;AAAA,IAC3B,OAAO;AACH,qBAAe,EAAE;AAAA,IACrB;AAEA,WAAO,YAAY,EAAE;AAAA,EACzB;AAAA,EAEA,OAAO,aAAmC,OAA2B;AACjE,UAAM,KAAK,cAAc,eAAe,WAAW,GAAG,WAAW;AAGjE,OAAG,YAAY;AAEf,QAAI,MAAM,YAAY,MAAM,SAAS,SAAS,KAAK;AAC/C,YAAM,WAAW,SAAS,uBAAuB;AACjD,WAAK,YAAY,OAAO,QAAQ;AAChC,SAAG,YAAY,QAAQ;AAAA,IAC3B,OAAO;AACH,WAAK,YAAY,OAAO,EAAE;AAAA,IAC9B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,aAAmC,QAA8B;AACzE,UAAM,KAAK,cAAc,eAAe,WAAW,GAAG,WAAW;AAEjE,UAAM,MAAM,OAAO;AAEnB,QAAI,MAAM,KAAM;AACZ,YAAM,WAAW,SAAS,uBAAuB;AACjD,UAAI,YAAY;AAChB,YAAM,YAAY;AAElB,YAAM,eAAe,MAAY;AAC7B,cAAM,MAAM,KAAK,IAAI,YAAY,WAAW,GAAG;AAC/C,iBAAS,IAAI,WAAW,IAAI,KAAK,KAAK;AAClC,eAAK,YAAY,OAAO,CAAC,GAAG,QAAQ;AAAA,QACxC;AACA,oBAAY;AAEZ,YAAI,aAAa,KAAK;AAClB,aAAG,YAAY,QAAQ;AAAA,QAC3B,OAAO;AACH,gCAAsB,YAAY;AAAA,QACtC;AAAA,MACJ;AAEA,mBAAa;AAAA,IACjB,OAAO;AACH,YAAM,WAAW,SAAS,uBAAuB;AACjD,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,aAAK,YAAY,OAAO,CAAC,GAAG,QAAQ;AAAA,MACxC;AACA,SAAG,YAAY,QAAQ;AAAA,IAC3B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,cACI,aACA,QACA,YAAY,KACZ,YACW;AACX,UAAM,KAAK,cAAc,eAAe,WAAW,GAAG,WAAW;AAEjE,UAAM,MAAM,OAAO;AACnB,QAAI,QAAQ;AAEZ,UAAM,cAAc,MAAY;AAC5B,YAAM,MAAM,KAAK,IAAI,QAAQ,WAAW,GAAG;AAC3C,YAAM,WAAW,SAAS,uBAAuB;AAEjD,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAC9B,aAAK,YAAY,OAAO,CAAC,GAAG,QAAQ;AAAA,MACxC;AAEA,SAAG,YAAY,QAAQ;AACvB,cAAQ;AAER,UAAI,WAAY,YAAW,OAAO,GAAG;AAErC,UAAI,QAAQ,KAAK;AACb,8BAAsB,WAAW;AAAA,MACrC;AAAA,IACJ;AAEA,0BAAsB,WAAW;AACjC,WAAO;AAAA,EACX;AAAA,EAEA,gBAAgB,QAAwD;AACpE,UAAM,OAAO,SAAS;AACtB,QAAI,MAAM;AACN,iBAAW,SAAS,OAAO,KAAK,GAAG;AAC/B,iBAAS,KAAK,YAAY,OAAO,IAAI;AAAA,MACzC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,SAAS,SAAmC;AACxC,UAAM,KAAK,SAAS,cAAc,OAAO;AACzC,OAAG,cAAc;AACjB,WAAO,SAAS,KAAK,YAAY,EAAE;AAAA,EACvC;AAAA,EAEA,QAAQ,OAAgD;AACpD,UAAM,KAAK,SAAS,cAAc,MAAM;AACxC,eAAW,KAAK,MAAO,IAAG,aAAa,GAAG,MAAM,CAAC,CAAC;AAClD,WAAO,SAAS,KAAK,YAAY,EAAE;AAAA,EACvC;AAAA,EAEA,QAAQ,OAAgD;AACpD,UAAM,KAAK,SAAS,cAAc,MAAM;AACxC,eAAW,KAAK,MAAO,IAAG,aAAa,GAAG,MAAM,CAAC,CAAC;AAClD,WAAO,SAAS,KAAK,YAAY,EAAE;AAAA,EACvC;AAAA,EAEA,SAASC,OAAsB;AAC3B,WAAO,SAAS,QAAQA;AAAA,EAC5B;AAAA;AAAA,EAGA,YAAe,cAAiB,UAAwB,CAAC,GAAa;AAClE,QAAI,QAAQ;AACZ,UAAM,YAAY,oBAAI,IAAwB;AAC9C,QAAI,cAAqC;AACzC,UAAM,EAAE,WAAW,GAAG,OAAO,MAAM,IAAI;AAEvC,UAAM,SAAS,MAAM,UAAU,QAAQ,QAAM,GAAG,KAAK,CAAC;AAEtD,UAAM,iBAAiB,MAAM;AACzB,UAAI,WAAW,GAAG;AACd,YAAI,CAAC,aAAa;AACd,wBAAc,WAAW,MAAM;AAC3B,0BAAc;AACd,mBAAO;AAAA,UACX,GAAG,QAAQ;AAAA,QACf;AAAA,MACJ,OAAO;AACH,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,MACH,IAAI,QAAQ;AAAE,eAAO;AAAA,MAAO;AAAA,MAC5B,IAAI,MAAM,UAAa;AACnB,cAAM,UAAU,OAAO,KAAK,UAAU,KAAK,MAAM,KAAK,UAAU,QAAQ,IAAI,UAAU;AACtF,YAAI,SAAS;AACT,kBAAQ;AACR,yBAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,UAAU,IAAwB;AAC9B,kBAAU,IAAI,EAAE;AAChB,eAAO,MAAM,UAAU,OAAO,EAAE;AAAA,MACpC;AAAA,MACA,UAAU;AACN,kBAAU,MAAM;AAChB,uBAAe,aAAa,WAAW;AAAA,MAC3C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,SAA6B,QAAyC,WAA0C;AAC5G,UAAM,SAAS,OAAO,IAAI,OAAK,EAAE,KAAK;AACtC,UAAM,SAAS,KAAK,YAAY,UAAU,GAAG,MAAM,CAAC;AAEpD,WAAO,QAAQ,CAAC,OAAO,UAAU;AAC7B,YAAM,UAAU,CAAC,aAAkB;AAC/B,eAAO,KAAK,IAAI;AAChB,eAAO,QAAQ,UAAU,GAAG,MAAM;AAAA,MACtC,CAAC;AAAA,IACL,CAAC;AAED,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,SAA2B;AAC9B,YAAQ;AAAA,EACZ;AAAA;AAAA,EAGA,kBACI,WACA,OACA,YACA,aAAa,IACb,aAAa,GACQ;AACrB,UAAM,iBAAiB,UAAU;AACjC,UAAM,cAAc,MAAM,SAAS;AACnC,QAAI,YAAY;AAEhB,UAAM,kBAAkB,MAAsC;AAC1D,YAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,UAAU,IAAI,UAAU;AACzE,YAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,KAAK,MAAM,YAAY,kBAAkB,UAAU,IAAI,UAAU;AACpG,aAAO,EAAE,OAAO,IAAI;AAAA,IACxB;AAEA,UAAMC,UAAS,MAAY;AACvB,YAAM,EAAE,OAAO,IAAI,IAAI,gBAAgB;AACvC,YAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,cAAQ,MAAM,UAAU,UAAU,WAAW;AAE7C,eAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAC9B,cAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,eAAO,MAAM,UAAU,yBAAyB,IAAI,UAAU,aAAa,UAAU;AACrF,aAAK,YAAY,WAAW,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;AAChD,gBAAQ,YAAY,MAAM;AAAA,MAC9B;AAEA,gBAAU,YAAY;AACtB,gBAAU,YAAY,OAAO;AAAA,IACjC;AAEA,UAAM,gBAAgB,MAAY;AAC9B,kBAAY,UAAU;AACtB,4BAAsBA,OAAM;AAAA,IAChC;AAEA,cAAU,iBAAiB,UAAU,aAAa;AAElD,IAAAA,QAAO;AACP,WAAO;AAAA,MACH,QAAAA;AAAA,MACA,SAAS,MAAM;AACX,kBAAU,oBAAoB,UAAU,aAAa;AACrD,kBAAU,YAAY;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAGA,KAAyB,QAA8E;AACnG,QAAI,YAAwC;AAC5C,QAAI,UAAU;AAEd,WAAO,UAAU,SAAgC;AAC7C,UAAI,CAAC,aAAa,CAAC,SAAS;AACxB,kBAAU;AACV,oBAAY,MAAM,OAAO;AACzB,kBAAU;AAAA,MACd;AACA,aAAO,YAAY,UAAU,GAAG,IAAI,IAAI,EAAE,SAAS,OAAO,OAAO,EAAE,OAAO,UAAU,GAAG,UAAU,CAAC,YAAY,EAAE;AAAA,IACpH;AAAA,EACJ;AAAA;AAAA,EAGA,sBAAsB,MAA2B;AAC7C,UAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,YAAY;AACtE,UAAM,WAAsB,CAAC;AAE7B,WAAO,OAAO,SAAS,GAAG;AACtB,YAAM,OAAO,OAAO;AACpB,UAAI,KAAK,MAAM,KAAK,GAAG,WAAW,GAAG,KAAK,CAAC,KAAK,aAAa,IAAI,IAAI,GAAG;AACpE,iBAAS,KAAK,IAAI;AAAA,MACtB;AAAA,IACJ;AAEA,aAAS,QAAQ,QAAM,GAAG,OAAO,CAAC;AAClC,WAAO,SAAS;AAAA,EACpB;AAAA;AAAA,EAGA,eAAe,OAAc,UAAiD,CAAC,GAAW;AACtF,UAAM,EAAE,SAAS,OAAO,SAAS,EAAE,IAAI;AACvC,UAAM,YAAY,SAAS,KAAK,OAAO,MAAM,IAAI;AACjD,UAAM,UAAU,SAAS,OAAO;AAEhC,QAAI,gBAAgB,KAAK,kBAAkB,KAAK;AAChD,oBAAgB,KAAK,eAAe,aAAa;AAEjD,QAAI,MAAM,QAAQ,aAAa,GAAG;AAC9B,aAAO,cAAc,IAAI,WAAS,KAAK,eAAe,OAAO,OAAO,CAAC,EAAE,KAAK,EAAE;AAAA,IAClF;AAEA,QAAI,OAAO,kBAAkB,YAAY,kBAAkB,MAAM;AAC7D,UAAI,kBAAkB,QAAQ,kBAAkB,UAAa,kBAAkB,OAAO;AAClF,eAAO;AAAA,MACX;AACA,aAAO,KAAK,WAAW,OAAO,aAAa,CAAC;AAAA,IAChD;AAEA,UAAM,EAAE,SAAS,OAAO,SAAS,IAAI;AACrC,UAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAEnD,QAAIC,QAAO,GAAG,SAAS,IAAI,OAAO;AAElC,UAAM,QAAQ,KAAK,kBAAkB,KAAK;AAC1C,QAAI,OAAO;AACP,MAAAA,SAAQ,IAAI,KAAK;AAAA,IACrB;AAEA,QAAI,eAAe;AACf,MAAAA,SAAQ,MAAM,OAAO;AACrB,aAAOA;AAAA,IACX;AAEA,IAAAA,SAAQ;AAER,QAAI,MAAM,yBAAyB;AAC/B,MAAAA,SAAQ,MAAM,wBAAwB;AACtC,MAAAA,SAAQ,KAAK,OAAO,IAAI,OAAO;AAC/B,aAAOA;AAAA,IACX;AAEA,QAAI,YAAY,SAAS,SAAS,GAAG;AACjC,YAAM,mBAAmB,SAAS,IAAI,CAAC,MAAa;AAChD,cAAM,WAAW,KAAK,kBAAkB,CAAC;AACzC,eAAO,KAAK,eAAe,QAAQ;AAAA,MACvC,CAAC;AAED,YAAM,qBAAqB,iBAAiB;AAAA,QACxC,CAAC,MAAW,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC,KAAK,aAAa;AAAA,MACzF;AAEA,UAAI,UAAU,oBAAoB;AAC9B,QAAAA,SAAQ;AACR,mBAAW,SAAS,kBAAkB;AAClC,cAAI,gBAAgB,KAAK,EAAG;AAE5B,cAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,uBAAW,KAAK,OAAO;AACnB,kBAAI,CAAC,gBAAgB,CAAC,GAAG;AACrB,gBAAAA,SAAQ,KAAK,eAAe,GAAG,EAAE,QAAQ,QAAQ,SAAS,EAAE,CAAC;AAAA,cACjE;AAAA,YACJ;AAAA,UACJ,OAAO;AACH,YAAAA,SAAQ,KAAK,eAAe,OAAO,EAAE,QAAQ,QAAQ,SAAS,EAAE,CAAC;AAAA,UACrE;AAAA,QACJ;AACA,QAAAA,SAAQ;AAAA,MACZ,OAAO;AACH,mBAAW,SAAS,kBAAkB;AAClC,cAAI,gBAAgB,KAAK,EAAG;AAE5B,cAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,uBAAW,KAAK,OAAO;AACnB,kBAAI,CAAC,gBAAgB,CAAC,GAAG;AACrB,gBAAAA,SAAQ,KAAK,eAAe,GAAG,EAAE,QAAQ,OAAO,QAAQ,EAAE,CAAC;AAAA,cAC/D;AAAA,YACJ;AAAA,UACJ,OAAO;AACH,YAAAA,SAAQ,KAAK,eAAe,OAAO,EAAE,QAAQ,OAAO,QAAQ,EAAE,CAAC;AAAA,UACnE;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,IAAAA,SAAQ,KAAK,OAAO,IAAI,OAAO;AAC/B,WAAOA;AAAA,EACX;AAAA,EAEQ,kBAAkB,OAAiB;AACvC,QAAI,SAAS,OAAO,UAAU,YAAY,WAAW,SAAS,eAAe,OAAO;AAChF,aAAO,MAAM;AAAA,IACjB;AACA,WAAO;AAAA,EACX;AAAA,EAEQ,kBAAkB,OAAqB;AAC3C,QAAI,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,SAAS;AACvD,aAAO;AAAA,IACX;AACA,WAAO,MAAM,YAAY,UACrB,MAAM,OAAO,MACb,OAAO,MAAM,MAAM,OAAO,YAC1B,MAAM,MAAM,GAAG,MAAM,gBAAgB;AAAA,EAC7C;AAAA,EAEQ,eAAe,OAAmB;AACtC,QAAI,CAAC,KAAK,kBAAkB,KAAK,GAAG;AAChC,aAAO;AAAA,IACX;AAEA,UAAM,WAAW,MAAM;AACvB,QAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACpC,aAAO;AAAA,IACX;AAEA,QAAI,SAAS,WAAW,GAAG;AACvB,YAAM,QAAQ,SAAS,CAAC;AAExB,UAAI,SAAS,OAAO,UAAU,YAAY,MAAM,YAAY,QAAQ;AAChE,cAAM,QAAQ,MAAM;AACpB,cAAM,aAAa,CAAC,SAAS,OAAO,KAAK,KAAK,EAAE,WAAW;AAC3D,cAAM,uBAAuB,MAAM,YAC/B,MAAM,SAAS,WAAW,KAC1B,OAAO,MAAM,SAAS,CAAC,MAAM;AAEjC,YAAI,cAAc,sBAAsB;AACpC,iBAAO,MAAM,SAAS,CAAC;AAAA,QAC3B;AAAA,MACJ;AAEA,aAAO,KAAK,eAAe,KAAK;AAAA,IACpC;AAEA,WAAO,SAAS,IAAI,CAAC,MAAa,KAAK,eAAe,CAAC,CAAC;AAAA,EAC5D;AAAA,EAEQ,WAAWF,OAAsB;AACrC,UAAM,cAAsC;AAAA,MACxC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AACA,WAAOA,MAAK,QAAQ,YAAY,UAAQ,YAAY,IAAI,CAAC;AAAA,EAC7D;AAAA,EAEQ,iBAAiB,SAA0B;AAC/C,UAAM,kBAAkB,oBAAI,IAAI;AAAA,MAC5B;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAM;AAAA,MAAO;AAAA,MAAS;AAAA,MAAM;AAAA,MAAO;AAAA,MACnD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAS;AAAA,MAAU;AAAA,MAAS;AAAA,IAChD,CAAC;AACD,WAAO,gBAAgB,IAAI,QAAQ,YAAY,CAAC;AAAA,EACpD;AAAA,EAEQ,kBAAkB,OAAsB;AAC5C,UAAM,QAAkB,CAAC;AAEzB,eAAW,OAAO,OAAO;AACrB,UAAI,QAAQ,cAAc,QAAQ,6BAA6B,QAAQ,OAAO;AAC1E;AAAA,MACJ;AAEA,UAAI,QAAQ,MAAM,GAAG;AACrB,cAAQ,KAAK,kBAAkB,KAAK;AAEpC,UAAI,SAAS,QAAQ,UAAU,MAAO;AAEtC,UAAI,IAAI,WAAW,IAAI,KAAK,OAAO,UAAU,YAAY;AACrD;AAAA,MACJ;AAEA,UAAI,QAAQ,eAAe,QAAQ,SAAS;AACxC,cAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI;AAC3D,YAAI,WAAW;AACX,gBAAM,KAAK,UAAU,KAAK,WAAW,OAAO,SAAS,CAAC,CAAC,GAAG;AAAA,QAC9D;AACA;AAAA,MACJ;AAEA,UAAI,QAAQ,SAAS;AACjB,cAAM,WAAW,KAAK,cAAc,KAAK;AACzC,YAAI,UAAU;AACV,gBAAM,KAAK,UAAU,KAAK,WAAW,QAAQ,CAAC,GAAG;AAAA,QACrD;AACA;AAAA,MACJ;AAEA,UAAI,UAAU,MAAM;AAChB,cAAM,KAAK,GAAG;AACd;AAAA,MACJ;AAEA,YAAM,KAAK,GAAG,GAAG,KAAK,KAAK,WAAW,OAAO,KAAK,CAAC,CAAC,GAAG;AAAA,IAC3D;AAEA,WAAO,MAAM,KAAK,GAAG;AAAA,EACzB;AAAA,EAEQ,cAAc,OAAoB;AACtC,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO;AAAA,IACX;AAEA,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,YAAM,SAAmB,CAAC;AAC1B,iBAAW,OAAO,OAAO;AACrB,cAAM,SAAS,IAAI,QAAQ,YAAY,KAAK,EAAE,YAAY;AAC1D,eAAO,KAAK,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE;AAAA,MACzC;AACA,aAAO,OAAO,KAAK,GAAG;AAAA,IAC1B;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,QAAQ,OAAiC;AAC7C,WAAO,SAAS,OAAO,UAAU,YAAY,WAAW,SAAS,eAAe,SAAS,OAAO,MAAM,cAAc;AAAA,EACxH;AAAA,EAIQ,oBAAoB,OAAmB,UAAwC;AACnF,UAAM,eAAe,SAAS,MAAM,KAAK;AAEzC,QAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AAClE,YAAM,QAAQ,EAAE,MAAM,MAAqB,SAAS;AACpD,WAAK,cAAc,IAAI,OAAO,KAAK;AAEnC,YAAM,UAAU,MAAM;AAClB,YAAI,MAAM,QAAQ,MAAM,KAAK,YAAY;AACrC,gBAAM,WAAW,SAAS,MAAM,KAAK;AACrC,gBAAM,KAAK,cAAc,OAAO,YAAY,EAAE;AAAA,QAClD;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,YAAYD,OAAmF;AAC3F,QAAI,KAAK,QAAQA,KAAI,GAAG;AACpB,aAAO,KAAK,oBAAoBA,OAAM,CAAC,MAAW,CAAC;AAAA,IACvD;AAEA,QAAI,gBAAgBA,KAAI,GAAG;AACvB,aAAOA;AAAA,IACX;AAEA,UAAM,EAAE,KAAK,aAAa,CAAC,GAAG,SAAS,IAAIA;AAE3C,UAAM,QAAe,CAAC;AACtB,eAAW,OAAO,YAAY;AAC1B,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,QAAQ,SAAS;AACjB,cAAM,YAAY,KAAK,QAAQ,KAAK,IAAI,MAAM,QAAQ;AAAA,MAC1D,OAAO;AACH,cAAM,GAAG,IAAI,KAAK,QAAQ,KAAK,IAAI,MAAM,QAAQ;AAAA,MACrD;AAAA,IACJ;AAEA,UAAM,gBAA0B,CAAC;AACjC,QAAI,YAAY,MAAM;AAClB,UAAI,MAAM,QAAQ,QAAQ,GAAG;AACzB,mBAAW,SAAS,UAAU;AAC1B,cAAI,KAAK,QAAQ,KAAK,GAAG;AACrB,0BAAc,KAAK,KAAK,oBAAoB,OAAO,CAAC,MAAW,CAAC,CAAC;AAAA,UACrE,OAAO;AACH,kBAAM,YAAY,KAAK,YAAY,KAAK;AACxC,gBAAI,aAAa,QAAQ,cAAc,OAAO;AAC1C,4BAAc,KAAK,SAAS;AAAA,YAChC;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,WAAW,KAAK,QAAQ,QAAQ,GAAG;AAC/B,sBAAc,KAAK,KAAK,oBAAoB,UAAU,CAAC,MAAW,CAAC,CAAC;AAAA,MACxE,WAAW,OAAO,aAAa,YAAY,SAAS,UAAU;AAC1D,cAAM,YAAY,KAAK,YAAY,QAAQ;AAC3C,YAAI,aAAa,QAAQ,cAAc,OAAO;AAC1C,wBAAc,KAAK,SAAS;AAAA,QAChC;AAAA,MACJ,OAAO;AACH,sBAAc,KAAK,QAAiB;AAAA,MACxC;AAAA,IACJ;AAEA,WAAO,EAAE,SAAS,KAAK,OAAO,UAAU,cAAc;AAAA,EAC1D;AAAA,EAEA,iBAAiBA,OAAqC;AAClD,QAAI,KAAK,QAAQA,KAAI,GAAG;AACpB,aAAO,KAAK,oBAAoBA,OAAM,CAAC,MAAW,CAAC;AAAA,IACvD;AAEA,QAAI,gBAAgBA,KAAI,GAAG;AACvB,aAAOA;AAAA,IACX;AAEA,UAAM,EAAE,SAAS,QAAQ,CAAC,GAAG,WAAW,CAAC,EAAE,IAAIA;AAE/C,UAAM,gBAAuB,CAAC;AAC9B,eAAW,OAAO,OAAO;AACrB,YAAM,QAAQ,MAAM,GAAG;AACvB,oBAAc,GAAG,IAAI,KAAK,QAAQ,KAAK,IAAI,MAAM,QAAQ;AAAA,IAC7D;AAEA,UAAM,gBAA0B,CAAC;AACjC,eAAW,SAAS,UAAU;AAC1B,UAAI,KAAK,QAAQ,KAAK,GAAG;AACrB,sBAAc,KAAK,KAAK,oBAAoB,OAAO,CAAC,MAAW,CAAC,CAAC;AAAA,MACrE,OAAO;AACH,cAAM,YAAY,KAAK,iBAAiB,KAAK;AAC7C,YAAI,aAAa,QAAQ,cAAc,OAAO;AAC1C,wBAAc,KAAK,SAAS;AAAA,QAChC;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,EAAE,SAAS,OAAO,eAAe,UAAU,cAAc;AAAA,EACpE;AAAA,EAEA,WAAW,aAAmCA,OAA6B;AACvE,UAAM,QAAQ,KAAK,YAAYA,KAAI;AACnC,QAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,aAAa,QAAQ;AAC9D,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC5C;AACA,WAAO,KAAK,OAAO,aAAa,KAAc;AAAA,EAClD;AAAA,EAEA,YAAY,aAAmCA,OAA8B;AACzE,UAAM,QAAQ,KAAK,iBAAiBA,KAAI;AACxC,QAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,aAAa,QAAQ;AAC9D,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAClD;AACA,WAAO,KAAK,OAAO,aAAa,KAAc;AAAA,EAClD;AAAA,EAEA,mBAAmBA,OAAgB,UAAiD,CAAC,GAAW;AAC5F,UAAM,QAAQ,KAAK,YAAYA,KAAI;AACnC,WAAO,KAAK,eAAe,OAAO,OAAO;AAAA,EAC7C;AAAA,EAEA,oBAAoBA,OAAiB,UAAiD,CAAC,GAAW;AAC9F,UAAM,QAAQ,KAAK,iBAAiBA,KAAI;AACxC,WAAO,KAAK,eAAe,OAAO,OAAO;AAAA,EAC7C;AAAA;AAAA,EAIA,qBAAqB,OAAc,UAU/B,CAAC,GAAW;AACZ,UAAM,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC,GAAG,OAAO,MAAM,OAAO,IAAI,YAAY,CAAC,GAAG,SAAS,MAAM,IAAI;AACjI,UAAM,KAAK,SAAS,OAAO;AAC3B,UAAM,SAAS,SAAS,OAAO;AAC/B,UAAM,UAAU,SAAS,SAAS;AAElC,QAAIG,QAAO,kBAAkB,EAAE,eAAe,IAAI,KAAK,EAAE,GAAG,MAAM,SAAS,EAAE,GAAG,OAAO,yBAAyB,EAAE,GAAG,OAAO,yEAAyE,EAAE;AACvM,QAAI,MAAO,CAAAA,SAAQ,GAAG,OAAO,UAAU,KAAK,WAAW,KAAK,CAAC,WAAW,EAAE;AAE1E,eAAW,KAAK,MAAM;AAClB,MAAAA,SAAQ,GAAG,OAAO;AAClB,iBAAW,KAAK,EAAG,CAAAA,SAAQ,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAAA,SAAQ,IAAI,EAAE;AAAA,IAClB;AAEA,eAAW,KAAK,OAAO;AACnB,MAAAA,SAAQ,GAAG,OAAO;AAClB,iBAAW,KAAK,EAAG,CAAAA,SAAQ,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAAA,SAAQ,IAAI,EAAE;AAAA,IAClB;AAEA,eAAW,KAAK,QAAQ;AACpB,UAAI,EAAE,MAAM;AACR,QAAAA,SAAQ,GAAG,OAAO,gCAAgC,KAAK,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE;AAAA,MACpF,WAAW,EAAE,SAAS;AAClB,QAAAA,SAAQ,GAAG,OAAO,UAAU,EAAE,OAAO,WAAW,EAAE;AAAA,MACtD;AAAA,IACJ;AAEA,QAAI,KAAM,CAAAA,SAAQ,OAAO;AACzB,IAAAA,SAAQ,GAAG,MAAM,UAAU,EAAE,GAAG,MAAM;AACtC,eAAW,KAAK,UAAW,CAAAA,SAAQ,IAAI,CAAC,KAAK,KAAK,WAAW,UAAU,CAAC,CAAC,CAAC;AAC1E,IAAAA,SAAQ,IAAI,EAAE;AACd,IAAAA,SAAQ,KAAK,eAAe,OAAO,EAAE,QAAQ,QAAQ,EAAE,CAAC;AAExD,eAAW,UAAU,SAAS;AAC1B,MAAAA,SAAQ,GAAG,OAAO;AAClB,UAAI,OAAO,KAAM,CAAAA,SAAQ,UAAU,KAAK,WAAW,OAAO,IAAI,CAAC;AAC/D,UAAI,OAAO,MAAO,CAAAA,SAAQ;AAC1B,UAAI,OAAO,MAAO,CAAAA,SAAQ;AAC1B,UAAI,OAAO,KAAK;AACZ,QAAAA,SAAQ,SAAS,KAAK,WAAW,OAAO,GAAG,CAAC,cAAc,EAAE;AAAA,MAChE,WAAW,OAAO,SAAS;AACvB,QAAAA,SAAQ,IAAI,OAAO,OAAO,YAAY,EAAE;AAAA,MAC5C,OAAO;AACH,QAAAA,SAAQ,aAAa,EAAE;AAAA,MAC3B;AAAA,IACJ;AAEA,IAAAA,SAAQ,GAAG,MAAM,UAAU,EAAE;AAC7B,WAAOA;AAAA,EACX;AAAA;AAAA,EAGA,kBAA6C;AACzC,WAAO,KAAK;AAAA,EAChB;AACJ;AAEO,IAAM,MAAM,IAAI,QAAQ;AAGxB,IAAM,SAAS,IAAI,OAAO,KAAK,GAAG;AAClC,IAAM,iBAAiB,IAAI,eAAe,KAAK,GAAG;;;ANpxBlD,IAAM,eAAN,MAAmB;AAAA,EAAnB;AACL,SAAQ,SAAwB,CAAC;AACjC,SAAQ,cAA4B,CAAC;AAkBrC;AAAA,eAAM,CAAC,SAAiB,aAAiI,KAAK,SAAS,OAAO,MAAM,QAAe;AAGnM;AAAA,eAAM,CAAC,SAAiB,aAAiI,KAAK,SAAS,OAAO,MAAM,QAAe;AACnM,gBAAO,CAAC,SAAiB,aAAiI,KAAK,SAAS,QAAQ,MAAM,QAAe;AACrM,eAAM,CAAC,SAAiB,aAAiI,KAAK,SAAS,OAAO,MAAM,QAAe;AACnM,kBAAS,CAAC,SAAiB,aAAiI,KAAK,SAAS,UAAU,MAAM,QAAe;AACzM,iBAAQ,CAAC,SAAiB,aAAiI,KAAK,SAAS,SAAS,MAAM,QAAe;AACvM,mBAAU,CAAC,SAAiB,aAAiI,KAAK,SAAS,WAAW,MAAM,QAAe;AAC3M,gBAAO,CAAC,SAAiB,aAAiI,KAAK,SAAS,QAAQ,MAAM,QAAe;AAAA;AAAA;AAAA;AAAA,EAvBrM,OAAO,MAAwB;AAC7B,QAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAE/B,YAAM,OAAO,KAAK,CAAC;AACnB,YAAM,cAAc,KAAK,MAAM,CAAC;AAChC,aAAO,KAAK,SAAS,OAAO,MAAM,WAAW;AAAA,IAC/C;AAEA,UAAM,KAAK,KAAK,CAAC;AACjB,SAAK,YAAY,KAAK,KAAK,aAAa,EAAE,CAAC;AAC3C,WAAO;AAAA,EACT;AAAA;AAAA,EAeQ,aAAa,IAAuH;AAE1I,QAAK,GAAkB,WAAW,KAAM,GAAW,SAAS,UAAU;AAAA,IAEtE;AAEA,WAAO,OAAO,KAAyB,SAA8B;AACnE,YAAM,IAAS;AAGf,UAAI,EAAE,UAAU,GAAG;AAEjB,cAAM,cAAc,MAAM;AAExB,eAAK,KAAK;AAAA,QACZ;AAEA,cAAM,MAAM,EAAE,IAAI,KAAK,IAAI,KAAK,WAAW;AAC3C,YAAI,OAAO,OAAO,IAAI,SAAS,WAAY,OAAM;AAEjD;AAAA,MACF;AAGA,UAAI,EAAE,WAAW,GAAG;AAClB,cAAM,MAAM,EAAE,IAAI,KAAK,IAAI,GAAG;AAC9B,YAAI,OAAO,OAAO,IAAI,SAAS,WAAY,OAAM;AACjD,cAAM,KAAK;AACX;AAAA,MACF;AAGA,YAAM,MAAO,GAA0B,GAAG;AAC1C,UAAI,OAAO,OAAO,IAAI,SAAS,WAAY,OAAM;AACjD,YAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EAEQ,SAAS,QAAoB,MAAc,UAA8H;AAC/K,UAAM,EAAE,SAAS,WAAW,IAAI,KAAK,YAAY,IAAI;AAErD,QAAI,CAAC,YAAY,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,8BAA8B;AACtF,UAAM,iBAAiB,SAAS,MAAM,GAAG,SAAS,SAAS,CAAC;AAC5D,UAAM,UAAU,SAAS,SAAS,SAAS,CAAC;AAE5C,UAAM,cAAc,eAAe,IAAI,OAAK,KAAK,aAAa,CAAQ,CAAC;AAGvE,UAAM,QAAQ,MAA0B;AACtC,YAAM,IAAS;AACf,UAAI,OAAO,MAAM,WAAY,OAAM,IAAI,MAAM,kCAAkC;AAE/E,UAAI,EAAE,UAAU,GAAG;AAEjB,eAAO,OAAO,QAA4B;AACxC,cAAI,EAAE,UAAU,GAAG;AAEjB,kBAAM,IAAI,QAAc,CAACC,aAAY;AACnC,kBAAI;AACF,kBAAE,IAAI,KAAK,IAAI,KAAK,MAAMA,SAAQ,CAAC;AAAA,cACrC,SAAS,GAAG;AAAE,gBAAAA,SAAQ;AAAA,cAAG;AAAA,YAC3B,CAAC;AAAA,UACH,OAAO;AACL,kBAAM,MAAM,EAAE,IAAI,KAAK,IAAI,GAAG;AAC9B,gBAAI,OAAO,OAAO,IAAI,SAAS,WAAY,OAAM;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAGA,aAAO;AAAA,IACT,GAAG;AAEH,SAAK,OAAO,KAAK,EAAE,QAAQ,SAAS,YAAY,SAAS,MAAM,YAAY,CAAC;AAC5E,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,MAAyD;AAC3E,UAAM,aAAuB,CAAC;AAC9B,UAAM,UAAU,KAAK,QAAQ,uBAAuB,MAAM,EAAE,QAAQ,OAAO,KAAK,EAAE,QAAQ,WAAW,CAAC,GAAG,UAAU,WAAW,KAAK,IAAI,GAAG,YAAY;AACtJ,WAAO,EAAE,SAAS,IAAI,OAAO,IAAI,OAAO,GAAG,GAAG,WAAW;AAAA,EAC3D;AAAA,EAEQ,WAAW,KAAqC;AACtD,UAAM,QAAgC,CAAC;AACvC,UAAM,cAAc,IAAI,MAAM,GAAG,EAAE,CAAC;AACpC,QAAI,CAAC,YAAa,QAAO;AAEzB,gBAAY,MAAM,GAAG,EAAE,QAAQ,OAAK;AAClC,YAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG;AAC1B,UAAI,GAAG;AACL,cAAM,CAAC,IAAI,MAAM,SAAY,IAAI;AAAA,MACnC;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAgG;AAC9F,WAAO,KAAK,OAAO,IAAI,YAAU;AAAA,MAC/B,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM,QAAQ;AAAA,MACvB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM,QAAQ,QAAQ;AAAA,IACjC,EAAE;AAAA,EACJ;AAAA,EAEA,MAAc,UAAU,KAAoC;AAE1D,QAAI,OAAQ,IAAY,SAAS,YAAY;AAC3C,UAAI;AACF,cAAMC,QAAO,MAAO,IAAY,KAAK;AACrC,YAAI,CAACA,MAAM,QAAO,CAAC;AAEnB,cAAM,cAAc,IAAI,QAAQ,cAAc;AAC9C,cAAM,MAAM,MAAM,QAAQ,WAAW,IAAI,YAAY,CAAC,IAAK,eAAe,IAAK,YAAY;AAG3F,YAAI,GAAG,SAAS,kBAAkB,KAAK,GAAG,SAAS,MAAM,KAAKA,MAAK,KAAK,EAAE,WAAW,GAAG,KAAKA,MAAK,KAAK,EAAE,WAAW,GAAG,GAAG;AACxH,cAAI;AACF,mBAAO,KAAK,MAAMA,KAAI;AAAA,UACxB,QAAQ;AACN,mBAAOA;AAAA,UACT;AAAA,QACF;AAGA,YAAI,GAAG,SAAS,mCAAmC,KAAK,GAAG,SAAS,YAAY,GAAG;AACjF,iBAAO,OAAO,YAAY,IAAI,gBAAgBA,KAAI,CAAC;AAAA,QACrD;AAGA,eAAOA;AAAA,MACT,SAAS,GAAG;AACV,gBAAQ,IAAI,wCAAwC,CAAC;AACrD,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAGA,WAAO,IAAI,QAAQ,CAACD,UAAS,WAAW;AACtC,YAAM,sBAAsB,IAAI,QAAQ,gBAAgB;AACxD,YAAM,gBAAgB,SAAS,MAAM,QAAQ,mBAAmB,IAAI,oBAAoB,CAAC,IAAK,uBAAuB,KAAM,EAAE;AAE7H,UAAI,kBAAkB,GAAG;AACvB,QAAAA,SAAQ,CAAC,CAAC;AACV;AAAA,MACF;AAEA,YAAM,SAAmB,CAAC;AAE1B,UAAI,GAAG,QAAQ,WAAS;AACtB,eAAO,KAAK,OAAO,KAAK,KAAK,CAAC;AAAA,MAChC,CAAC;AAED,UAAI,GAAG,OAAO,MAAM;AAClB,cAAM,OAAO,OAAO,OAAO,MAAM,EAAE,SAAS;AAC5C,YAAI;AACF,gBAAM,KAAK,IAAI,QAAQ,cAAc,KAAK;AAC1C,UAAAA,SAAQ,GAAG,SAAS,MAAM,IAAK,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,IAAK,GAAG,SAAS,YAAY,IAAI,OAAO,YAAY,IAAI,gBAAgB,IAAI,CAAC,IAAI,IAAI;AAAA,QACjJ,SAAS,GAAG;AACV,iBAAO,CAAC;AAAA,QACV;AAAA,MACF,CAAC;AAED,UAAI,GAAG,SAAS,MAAM;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,KAAsB,KAAuC;AACxE,UAAM,SAAS,IAAI,QAAsB,MAAM,IAAI,OAAO,KAAK,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAEtF,eAAW,SAAS,KAAK,QAAQ;AAC/B,UAAI,MAAM,WAAW,SAAS,MAAM,WAAW,OAAQ;AACvD,UAAI,CAAC,MAAM,QAAQ,KAAK,IAAI,EAAG;AAC/B,YAAM,QAAQ,KAAK,MAAM,MAAM,OAAO;AACtC,YAAM,SAAS,OAAO,YAAY,MAAM,WAAW,IAAI,CAAC,MAAME,OAAM,CAAC,MAAM,MAAMA,KAAI,CAAC,CAAC,CAAC,CAAC;AAEzF,UAAI,OAAY,CAAC;AACjB,UAAI,CAAC,QAAQ,OAAO,OAAO,EAAE,SAAS,MAAM,GAAG;AAC7C,YAAI;AACF,iBAAO,MAAM,KAAK,UAAU,GAAG;AAE/B,UAAC,IAAoB,OAAO;AAAA,QAC9B,SACO,GAAG;AACR,cAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,cAAI,IAAI,kCAAkC;AAC1C,iBAAO;AAAA,QACT;AAAA,MACF;AAGA,YAAM,QAAQ,KAAK,WAAW,GAAG;AACjC,MAAC,IAAoB,QAAQ;AAG7B,MAAC,IAAoB,SAAS;AAG9B,YAAM,MAA0B;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,IAAI;AAAA,MACf;AAIA,YAAM,mBAAmB,MAAM,eAAe,CAAC;AAC/C,YAAM,QAAsB;AAAA,QAC1B,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,QACH,OAAO,GAAG,MAAM;AAAE,gBAAM,MAAM,QAAQ,GAAG,CAAC;AAAA,QAAG;AAAA,MAC/C;AAEA,UAAI,IAAI;AACR,YAAM,OAAO,YAAY;AACvB,YAAI,KAAK,MAAM,OAAQ;AACvB,cAAM,KAAK,MAAM,GAAG;AACpB,cAAM,GAAG,KAAK,IAAI;AAAA,MACpB;AAEA,UAAI;AACF,cAAM,KAAK;AAAA,MACb,SACO,GAAG;AACR,gBAAQ,MAAM,+BAA+B,CAAC;AAC9C,SAAC,IAAI,gBAAgB,IAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC,GAAG,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,yBAAyB,SAAS,aAAa,QAAQ,EAAE,UAAU,UAAU,CAAC,CAAC;AAAA,MAClM;AACA,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,OAAO,CAAC,KAAqB,MAAWC,UAAS,SAAS,IAAI,UAAUA,SAAQ,EAAE,gBAAgB,mBAAmB,CAAC,GAAG,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC;AAC3J,IAAM,OAAO,CAAC,KAAqB,MAAcA,UAAS,SAAS,IAAI,UAAUA,SAAQ,EAAE,gBAAgB,aAAa,CAAC,GAAG,IAAI,IAAI,IAAI;AACxI,IAAM,OAAO,CAAC,KAAqB,MAAcA,UAAS,SAAS,IAAI,UAAUA,SAAQ,EAAE,gBAAgB,YAAY,CAAC,GAAG,IAAI,IAAI,IAAI;AACvI,IAAM,SAAS,CAAC,KAAqB,MAAc,UAAU,QAAQ,IAAI,UAAU,MAAM,EAAE,gBAAgB,mBAAmB,CAAC,GAAG,IAAI,IAAI,KAAK,UAAU,EAAE,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAG1L,IAAM,YAAY,CAAC,KAAqB,MAAc,QAAsB;AAAE,MAAI,UAAU,MAAM,EAAE,gBAAgB,aAAa,CAAC;AAAG,MAAI,IAAI,GAAG;AAAG;AACnJ,IAAM,UAAU,CAAC,KAAqB,MAAM,gBAAsB,UAAU,KAAK,KAAK,GAAG;AACzF,IAAM,UAAU,CAAC,KAAqB,MAAM,gBAAsB,UAAU,KAAK,KAAK,GAAG;AACzF,IAAM,UAAU,CAAC,KAAqB,MAAM,4BAAkC,UAAU,KAAK,KAAK,GAAG;AAGrG,IAAM,sBAAsB,OAAO,SAAiB,WAAmB,IAAI,OAA0B,UAA2B;AAG9H,QAAM,UAAU,SAAS,QACpB,WAAW,GAAG,QAAQ,2BAA2B,2BACjD,WAAW,GAAG,QAAQ,4BAA4B;AAEvD,QAAM,UAAU,SAAS,QAAQ,QAAQ;AAGzC,QAAM,cAA8B;AAAA,IAClC,QAAQ,GAAG,OAAO,SAAS,OAAO;AAAA,IAClC,SAAS,GAAG,OAAO;AAAA,IACnB,YAAY,GAAG,OAAO,OAAO,OAAO;AAAA,IACpC,cAAc,GAAG,OAAO,SAAS,OAAO;AAAA,IACxC,cAAc,GAAG,OAAO,SAAS,OAAO;AAAA,IACxC,WAAW,GAAG,OAAO,MAAM,OAAO;AAAA,IAClC,eAAe,GAAG,OAAO,UAAU,OAAO;AAAA,IAC1C,YAAY,GAAG,OAAO,OAAO,OAAO;AAAA,IACpC,cAAc,GAAG,OAAO,SAAS,OAAO;AAAA,EAC1C;AAGA,QAAM,kBAAkB,MAAM,2BAA2B,SAAS,QAAQ;AAG1E,QAAM,aAAa,EAAE,GAAG,iBAAiB,GAAG,YAAY;AAExD,SAAO,4BAA4B,KAAK,UAAU,EAAE,SAAS,WAAW,GAAG,MAAM,CAAC,CAAC;AACrF;AAGA,IAAM,kBAAkB,CAAC,MAAc,WACrC,oIAAoI,IAAI,GAAG,MAAM;AAGnJ,IAAM,uBAAuB,CAACC,OAAc,aAA6B;AACvE,MAAI,CAAC,SAAU,QAAOA;AAEtB,EAAAA,QAAOA,MAAK,QAAQ,kEAAkE,KAAK,QAAQ,OAAO;AAC1G,EAAAA,QAAOA,MAAK,QAAQ,iEAAiE,KAAK,QAAQ,OAAO;AACzG,SAAOA;AACT;AAGA,IAAM,oBAAoB,CAAC,aAA8B,YAAY,aAAa,MAAM,WAAW;AAGnG,eAAe,eAAe,UAAkB,WAA2C;AACzF,MAAI,aAAa;AACjB,QAAM,YAAY;AAElB,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,UAAM,aAAa,QAAQ,YAAY,SAAS;AAChD,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,UAAU;AACnC,UAAI,MAAM,YAAY,GAAG;AACvB,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,UAAM,YAAY,QAAQ,YAAY,IAAI;AAC1C,QAAI,cAAc,WAAY;AAC9B,iBAAa;AAAA,EACf;AAEA,SAAO;AACT;AAuBA,IAAM,iBAAiB,oBAAI,IAA4B;AAKhD,SAAS,sBAA4B;AAC1C,iBAAe,MAAM;AACvB;AAKA,eAAe,2BAA2B,SAAiB,WAAmB,IAA6B;AACzG,QAAM,WAAW,GAAG,OAAO,IAAI,QAAQ;AACvC,MAAI,eAAe,IAAI,QAAQ,GAAG;AAChC,WAAO,eAAe,IAAI,QAAQ;AAAA,EACpC;AAEA,QAAM,YAA4B,CAAC;AACnC,QAAM,kBAAkB,MAAM,gBAAgB,OAAO;AAErD,MAAI,CAAC,iBAAiB;AACpB,mBAAe,IAAI,UAAU,SAAS;AACtC,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,EAAE,SAAAC,SAAQ,IAAI,MAAM;AAC1B,UAAM,WAAW,MAAMA,SAAQ,eAAe;AAE9C,eAAW,YAAY,UAAU;AAE/B,YAAM,MAAM,OAAO,aAAa,WAAW,WAAW,SAAS;AAG/D,UAAI,IAAI,WAAW,GAAG,EAAG;AAGzB,UAAI,IAAI,WAAW,GAAG,GAAG;AACvB,YAAI;AACF,gBAAM,iBAAiB,MAAMA,SAAQ,KAAK,iBAAiB,GAAG,CAAC;AAC/D,qBAAW,eAAe,gBAAgB;AACxC,kBAAM,YAAY,OAAO,gBAAgB,WAAW,cAAc,YAAY;AAC9E,kBAAM,cAAc,GAAG,GAAG,IAAI,SAAS;AACvC,kBAAM,eAAe,iBAAiB,aAAa,WAAW,QAAQ;AAAA,UACxE;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF,OAAO;AACL,cAAM,eAAe,iBAAiB,KAAK,WAAW,QAAQ;AAAA,MAChE;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,8CAA8C,KAAK;AAAA,EACnE;AAEA,iBAAe,IAAI,UAAU,SAAS;AACtC,SAAO;AACT;AAKA,eAAe,gBAAgB,UAA0C;AACvE,QAAM,WAAW,MAAM,eAAe,UAAU,cAAc;AAC9D,SAAO,WAAW,KAAK,UAAU,cAAc,IAAI;AACrD;AAKA,SAAS,oBAAoB,SAAiB,SAA+B;AAE3E,QAAM,aAAa;AAAA,IACjB;AAAA,IAAc;AAAA,IAAW;AAAA,IACzB;AAAA,IAAO;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAQ;AAAA,IAAW;AAAA,IAC5C;AAAA,IAAU;AAAA,IAAU;AAAA,IAAS;AAAA,IAC7B;AAAA,IAAW;AAAA,IAAgB;AAAA,IAC3B;AAAA,IAAQ;AAAA,IAAQ;AAAA,EAClB;AAEA,QAAM,WAAW;AAAA,IACf;AAAA,IAAS;AAAA,IAAU;AAAA,IAAY;AAAA,IAC/B;AAAA,IAAW;AAAA,IAAO;AAAA,IAAW;AAAA,IAC7B;AAAA,IAAa;AAAA,IAAS;AAAA,IAAY;AAAA,IAAS;AAAA,IAC3C;AAAA,IAAW;AAAA,IAAO;AAAA,EACpB;AAEA,QAAM,eAAe;AAAA,IACnB;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAS;AAAA,IAAQ;AAAA,IACnC;AAAA,IAAU;AAAA,IAAqB;AAAA,IAC/B;AAAA,IAAc;AAAA,IAAa;AAAA,EAC7B;AAEA,QAAM,UAAU;AAAA,IACd;AAAA,IAAU;AAAA,IAAY;AAAA,IAAY;AAAA,IAClC;AAAA,IAAa;AAAA,EACf;AAEA,QAAM,kBAAkB;AAAA,IACtB;AAAA,IAAW;AAAA,EACb;AAEA,QAAM,YAAY;AAAA,IAChB;AAAA,IAAgB;AAAA,IAAoB;AAAA,IACpC;AAAA,IAAa;AAAA,IAAU;AAAA,IACvB;AAAA,IAAS;AAAA,IAAe;AAAA,EAC1B;AAGA,QAAM,eAAe;AAAA,IACnB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAGA,MAAI,aAAa,KAAK,aAAW,QAAQ,WAAW,OAAO,CAAC,GAAG;AAC7D,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,UAAU;AACxB,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ,WAAW,QAAQ,QAAQ;AACrC,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ,SAAS;AACnB,UAAM,aAAa,KAAK,UAAU,QAAQ,OAAO;AACjD,QAAI,WAAW,SAAS,UAAU,KAAK,WAAW,SAAS,WAAW,GAAG;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,QAAQ,SAAS,cAAc,CAAC,QAAQ,UAAU,CAAC,QAAQ,SAAS;AACtE,WAAO;AAAA,EACT;AAGA,SAAO,CAAC,EAAE,QAAQ,WAAW,QAAQ,SAAS,YAAY,QAAQ;AACpE;AAKA,eAAe,eACb,iBACA,SACA,WACA,UACe;AACf,QAAM,UAAU,KAAK,iBAAiB,OAAO;AAC7C,QAAM,cAAc,KAAK,SAAS,cAAc;AAEhD,MAAI;AACF,UAAM,iBAAiB,MAAM,SAAS,WAAW;AACjD,UAAM,UAAuB,KAAK,MAAM,eAAe,SAAS,CAAC;AAGjE,QAAI,CAAC,oBAAoB,SAAS,OAAO,GAAG;AAC1C;AAAA,IACF;AAEA,UAAM,UAAU,WAAW,GAAG,QAAQ,iBAAiB,OAAO,KAAK,iBAAiB,OAAO;AAG3F,QAAI,QAAQ,SAAS;AACnB,0BAAoB,SAAS,QAAQ,SAAS,SAAS,SAAS;AAAA,IAClE,OAEK;AACH,YAAM,aAAa,QAAQ,WAAW,QAAQ,UAAU,QAAQ,QAAQ;AACxE,gBAAU,OAAO,IAAI,GAAG,OAAO,IAAI,UAAU;AAG7C,gBAAU,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO;AAAA,IACvC;AAAA,EACF,QAAQ;AAAA,EAER;AACF;AAKA,SAAS,oBACP,SACAC,UACA,SACA,WACM;AAEN,MAAI,OAAOA,aAAY,UAAU;AAC/B,cAAU,OAAO,IAAI,GAAG,OAAO,IAAIA,QAAO;AAC1C,cAAU,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO;AACrC;AAAA,EACF;AAGA,MAAI,OAAOA,aAAY,YAAYA,aAAY,MAAM;AAEnD,QAAI,OAAOA,UAAS;AAClB,YAAM,YAAYA,SAAQ,GAAG;AAC7B,YAAM,WAAW,cAAc,SAAS;AACxC,UAAI,UAAU;AACZ,kBAAU,OAAO,IAAI,GAAG,OAAO,IAAI,QAAQ;AAAA,MAC7C;AAAA,IACF,WAAW,YAAYA,UAAS;AAE9B,YAAM,WAAW,cAAcA,QAAO;AACtC,UAAI,UAAU;AACZ,kBAAU,OAAO,IAAI,GAAG,OAAO,IAAI,QAAQ;AAAA,MAC7C;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,QAAO,GAAG;AAClD,UAAI,QAAQ,OAAO,QAAQ,YAAY,QAAQ,aAAa,QAAQ,WAAW,QAAQ,WAAW;AAChG;AAAA,MACF;AAEA,YAAM,WAAW,cAAc,KAAK;AACpC,UAAI,UAAU;AAEZ,cAAM,WAAW,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AACvD,cAAM,aAAa,WAAW,GAAG,OAAO,IAAI,QAAQ,KAAK;AACzD,kBAAU,UAAU,IAAI,GAAG,OAAO,IAAI,QAAQ;AAAA,MAChD;AAAA,IACF;AAGA,cAAU,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO;AAAA,EACvC;AACF;AAMA,SAAS,cAAc,aAAiC;AACtD,MAAI,OAAO,gBAAgB,UAAU;AAEnC,WAAO,YAAY,WAAW,IAAI,IAAI,YAAY,MAAM,CAAC,IAAI;AAAA,EAC/D;AAEA,MAAI,OAAO,gBAAgB,YAAY,gBAAgB,MAAM;AAE3D,UAAM,WAAW,YAAY,UAAU,YAAY,WAAW,YAAY,WAAW,YAAY;AAGjG,QAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AACrD,aAAO,cAAc,QAAQ;AAAA,IAC/B;AAEA,QAAI,OAAO,aAAa,UAAU;AAChC,aAAO,SAAS,WAAW,IAAI,IAAI,SAAS,MAAM,CAAC,IAAI;AAAA,IACzD;AAAA,EACF;AAEA,SAAO;AACT;AAIO,SAAS,KAAK,UAKjB,CAAC,GAAe;AAClB,QAAM,EAAE,SAAS,KAAK,UAAU,CAAC,OAAO,QAAQ,OAAO,UAAU,SAAS,SAAS,GAAG,cAAc,MAAM,SAAS,MAAM,IAAI;AAE7H,SAAO,OAAO,KAAK,SAAS;AAC1B,UAAM,sBAAsB,IAAI,IAAI,QAAQ;AAC5C,UAAM,gBAAgB,MAAM,QAAQ,mBAAmB,IAAI,oBAAoB,CAAC,IAAK,uBAAuB;AAC5G,UAAM,cAAc,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,aAAa,IAAI,gBAAiB,MAAM,QAAQ,MAAM,IAAI,KAAK;AAE5H,QAAI,YAAa,KAAI,IAAI,UAAU,+BAA+B,WAAW;AAC7E,QAAI,IAAI,UAAU,gCAAgC,QAAQ,KAAK,IAAI,CAAC;AACpE,QAAI,IAAI,UAAU,gCAAgC,6BAA6B;AAC/E,QAAI,YAAa,KAAI,IAAI,UAAU,oCAAoC,MAAM;AAC7E,QAAI,IAAI,UAAU,0BAA0B,OAAO,MAAM,CAAC;AAE1D,QAAI,IAAI,IAAI,WAAW,WAAW;AAChC,UAAI,IAAI,UAAU,GAAG;AACrB,UAAI,IAAI,IAAI;AACZ;AAAA,IACF;AACA,UAAM,KAAK;AAAA,EACb;AACF;AAEO,SAAS,OAAO,UAA8C,CAAC,GAAe;AACnF,QAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,SAAO,OAAO,KAAK,SAAS;AAC1B,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,EAAE,QAAQ,IAAI,IAAI,IAAI;AAC5B,UAAM,KAAK;AACX,UAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,UAAMH,UAAS,IAAI,IAAI;AACvB,YAAQ,IAAI,WAAW,aAAa,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC,KAAK,MAAM,IAAI,GAAG,IAAIA,OAAM,MAAM,QAAQ,OAAO,GAAG,MAAM,IAAI,GAAG,MAAMA,OAAM,KAAK,QAAQ,KAAK;AAAA,EACjK;AACF;AAEO,SAAS,eAA2B;AACzC,SAAO,OAAO,KAAK,SAAS;AAC1B,QAAI;AACF,YAAM,KAAK;AAAA,IACb,SAAS,OAAO;AACd,cAAQ,MAAM,UAAU,KAAK;AAC7B,UAAI,CAAC,IAAI,IAAI,aAAa;AACxB,YAAI,IAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AAC7D,YAAI,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,yBAAyB,SAAS,iBAAiB,QAAQ,MAAM,UAAU,gBAAgB,CAAC,CAAC;AAAA,MACnI;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,UAAU,UAAiE,CAAC,GAAe;AACzG,QAAM,EAAE,WAAW,KAAO,MAAM,KAAK,UAAU,oBAAoB,IAAI;AACvE,QAAM,UAAU,oBAAI,IAAkD;AAEtE,SAAO,OAAO,KAAK,SAAS;AAC1B,UAAM,KAAK,IAAI,IAAI,OAAO,iBAAiB;AAC3C,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,aAAa,QAAQ,IAAI,EAAE;AAE/B,QAAI,CAAC,cAAc,MAAM,WAAW,WAAW;AAC7C,mBAAa,EAAE,OAAO,GAAG,WAAW,MAAM,SAAS;AACnD,cAAQ,IAAI,IAAI,UAAU;AAAA,IAC5B;AAEA,QAAI,EAAE,WAAW,QAAQ,KAAK;AAC5B,UAAI,IAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AAC7D,UAAI,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,QAAQ,CAAC,CAAC;AAC9C;AAAA,IACF;AACA,UAAM,KAAK;AAAA,EACb;AACF;AAEO,SAAS,UAAU,UAA8B,CAAC,GAAe;AACtE,QAAM,EAAE,QAAQ,OAAO,KAAK,IAAI;AAChC,SAAO,OAAO,KAAK,SAAS;AAC1B,UAAM,gBAAgB,IAAI,IAAI,QAAQ,gBAAgB;AACtD,UAAM,mBAAmB,MAAM,QAAQ,aAAa,IAAI,cAAc,CAAC,IAAK,iBAAiB;AAC7F,QAAI,SAAS,kBAAkB,EAAE,IAAI,OAAO;AAC1C,UAAI,IAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AAC7D,UAAI,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,yBAAyB,CAAC,CAAC;AAC/D;AAAA,IACF;AACA,UAAM,KAAK;AAAA,EACb;AACF;AAEO,SAAS,aAAa,UAAiD,CAAC,GAAe;AAC5F,QAAM,EAAE,SAAS,MAAM,QAAQ,WAAW,KAAK,IAAI;AACnD,SAAO,OAAO,KAAK,SAAS;AAC1B,QAAI,IAAI,UAAU,iBAAiB,GAAG,WAAW,WAAW,SAAS,aAAa,MAAM,EAAE;AAC1F,UAAM,KAAK;AAAA,EACb;AACF;AAEO,SAAS,WAAuB;AACrC,SAAO,OAAO,KAAK,SAAS;AAC1B,UAAM,iBAAiB,IAAI,IAAI,QAAQ,iBAAiB,KAAK;AAC7D,QAAI,CAAC,eAAe,SAAS,MAAM,GAAG;AACpC,YAAM,KAAK;AACX;AAAA,IACF;AAGA,UAAM,cAAc,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG;AAC5C,UAAM,SAAmB,CAAC;AAG1B,QAAI,IAAI,SAAS,CAAC,UAAe;AAC/B,aAAO,KAAK,OAAO,KAAK,KAAK,CAAC;AAC9B,aAAO;AAAA,IACT;AAEA,QAAI,IAAI,OAAO,CAAC,UAAgB;AAC9B,UAAI,MAAO,QAAO,KAAK,OAAO,KAAK,KAAK,CAAC;AAEzC,YAAM,SAAS,OAAO,OAAO,MAAM;AACnC,YAAM,EAAE,SAAS,IAAI,QAAQ,MAAM;AACnC,YAAM,aAAa,SAAS,MAAM;AAElC,UAAI,IAAI,UAAU,oBAAoB,MAAM;AAC5C,UAAI,IAAI,UAAU,kBAAkB,WAAW,MAAM;AACrD,kBAAY,UAAU;AACtB,aAAO,IAAI;AAAA,IACb;AAEA,UAAM,KAAK;AAAA,EACb;AACF;AAEO,SAAS,WAAuB;AACrC,SAAO,OAAO,KAAK,SAAS;AAC1B,QAAI,IAAI,UAAU,0BAA0B,SAAS;AACrD,QAAI,IAAI,UAAU,mBAAmB,MAAM;AAC3C,QAAI,IAAI,UAAU,oBAAoB,eAAe;AACrD,QAAI,IAAI,UAAU,6BAA6B,qCAAqC;AACpF,UAAM,KAAK;AAAA,EACb;AACF;AAIA,SAAS,YAAY,MAAc,aAA8C;AAC/E,MAAI,CAAC,YAAa,QAAO;AAEzB,aAAW,CAAC,MAAM,EAAE,KAAK,OAAO,QAAQ,WAAW,GAAG;AACpD,UAAM,QAAQ,IAAI,OAAO,IAAI;AAC7B,QAAI,MAAM,KAAK,IAAI,GAAG;AACpB,aAAO,KAAK,QAAQ,OAAO,EAAE;AAAA,IAC/B;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,cAA6B;AAC9D,SAAO,OAAO,KAAsB,QAA0C;AAC5E,UAAM,MAAM,IAAI,OAAO;AACvB,UAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAG7B,UAAM,QAAQ,aAAa,KAAK,OAAK,KAAK,WAAW,EAAE,OAAO,CAAC;AAC/D,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,EAAE,QAAQ,cAAc,aAAa,QAAQ,IAAI;AAEvD,QAAI;AACF,YAAM,YAAY,IAAI,IAAI,MAAM;AAChC,YAAM,UAAU,UAAU,aAAa;AACvC,YAAM,aAAa,UAAUI,WAAe;AAG5C,UAAI,YAAY,YAAY,KAAK,WAAW;AAG5C,YAAM,WAAW,GAAG,UAAU,UAAU,MAAM,MAAM,UAAU,QAAQ,IAAI,UAAU,SAAS,UAAU,MAAM,GAAG,GAAG,SAAS;AAG5H,YAAM,kBAA8D,CAAC;AACrE,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,OAAO,GAAG;AACtD,YAAI,UAAU,QAAW;AACvB,0BAAgB,GAAG,IAAI;AAAA,QACzB;AAAA,MACF;AACA,UAAI,SAAS;AACX,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,cAAI,UAAU,QAAW;AACvB,4BAAgB,GAAG,IAAI;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAGA,UAAI,cAAc;AAChB,wBAAgB,OAAO,UAAU;AAAA,MACnC,OAAO;AACL,eAAO,gBAAgB,MAAM;AAAA,MAC/B;AAEA,YAAM,kBAAkB;AAAA,QACtB,QAAQ,IAAI;AAAA,QACZ,SAAS;AAAA,MACX;AAGA,YAAM,WAAW,WAAW,UAAU,iBAAiB,CAAC,aAAa;AAEnE,cAAM,kBAA8D,CAAC;AACrE,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,OAAO,GAAG;AAC3D,cAAI,UAAU,QAAW;AACvB,4BAAgB,GAAG,IAAI;AAAA,UACzB;AAAA,QACF;AACA,YAAI,UAAU,SAAS,cAAc,KAAK,eAAe;AAGzD,iBAAS,GAAG,QAAQ,CAAC,UAAU,IAAI,MAAM,KAAK,CAAC;AAC/C,iBAAS,GAAG,OAAO,MAAM,IAAI,IAAI,CAAC;AAAA,MACpC,CAAC;AAGD,eAAS,GAAG,SAAS,CAAC,UAAU;AAC9B,gBAAQ,MAAM,oCAAoC,KAAK,QAAQ,MAAM,OAAO;AAC5E,YAAI,CAAC,IAAI,aAAa;AACpB,eAAK,KAAK,EAAE,OAAO,eAAe,SAAS,cAAc,GAAG,GAAG;AAAA,QACjE;AAAA,MACF,CAAC;AAGD,UAAI,GAAG,QAAQ,CAAC,UAAU,SAAS,MAAM,KAAK,CAAC;AAC/C,UAAI,GAAG,OAAO,MAAM,SAAS,IAAI,CAAC;AAElC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAM,+CAA+C,MAAM,KAAK;AACxE,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAYO,IAAM,cAAN,MAA2B;AAAA,EAMhC,YACkB,KAChB,SACA;AAFgB;AALlB,SAAQ,YAAY,oBAAI,IAAe;AACvC,SAAQ,iBAAiB,oBAAI,IAA2B;AAOtD,SAAK,UAAU;AACf,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,QAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,UAAa;AACrB,QAAI,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ,SAAS,QAAQ,GAAG;AAC7D,YAAM,IAAI,MAAM,4BAA4B,KAAK,GAAG,GAAG;AAAA,IACzD;AAEA,UAAM,WAAW,KAAK;AACtB,SAAK,SAAS;AAEd,SAAK,eAAe,QAAQ,aAAW;AACrC,cAAQ,UAAU,QAAQ;AAAA,IAC5B,CAAC;AAED,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,SAAkC;AACvC,SAAK,QAAQ,QAAQ,KAAK,MAAM;AAAA,EAClC;AAAA,EAEA,UAAU,IAAqB;AAC7B,SAAK,UAAU,IAAI,EAAE;AACrB,SAAK,OAAO,EAAE;AAAA,EAChB;AAAA,EAEA,YAAY,IAAqB;AAC/B,SAAK,UAAU,OAAO,EAAE;AAAA,EAC1B;AAAA,EAEA,SAAS,SAA4C;AACnD,SAAK,eAAe,IAAI,OAAO;AAC/B,WAAO,MAAM,KAAK,eAAe,OAAO,OAAO;AAAA,EACjD;AAAA,EAEQ,YAAkB;AACxB,UAAM,UAAU,KAAK,UAAU,EAAE,MAAM,gBAAgB,KAAK,KAAK,KAAK,OAAO,KAAK,QAAQ,WAAW,KAAK,IAAI,EAAE,CAAC;AACjH,SAAK,UAAU,QAAQ,QAAM,GAAG,+BAAkC,GAAG,KAAK,OAAO,CAAC;AAAA,EACpF;AAAA,EAEQ,OAAO,IAAqB;AAClC,QAAI,GAAG,6BAAgC;AACrC,SAAG,KAAK,KAAK,UAAU,EAAE,MAAM,cAAc,KAAK,KAAK,KAAK,OAAO,KAAK,QAAQ,WAAW,KAAK,IAAI,EAAE,CAAC,CAAC;AAAA,IAC1G;AAAA,EACF;AAAA,EAEA,IAAI,kBAA0B;AAC5B,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,QAAc;AACZ,SAAK,UAAU,MAAM;AACrB,SAAK,eAAe,MAAM;AAAA,EAC5B;AACF;AAEO,IAAM,eAAN,MAAmB;AAAA,EAAnB;AACL,SAAQ,SAAS,oBAAI,IAA8B;AAAA;AAAA,EAEnD,OAAU,KAAa,SAAgD;AACrE,QAAI,KAAK,OAAO,IAAI,GAAG,EAAG,QAAO,KAAK,OAAO,IAAI,GAAG;AACpD,UAAM,QAAQ,IAAI,YAAe,KAAK,OAAO;AAC7C,SAAK,OAAO,IAAI,KAAK,KAAK;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,IAAO,KAAyC;AAC9C,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC5B;AAAA,EAEA,IAAI,KAAsB;AACxB,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC5B;AAAA,EAEA,OAAO,KAAsB;AAC3B,UAAM,QAAQ,KAAK,OAAO,IAAI,GAAG;AACjC,QAAI,OAAO;AACT,YAAM,MAAM;AACZ,aAAO,KAAK,OAAO,OAAO,GAAG;AAAA,IAC/B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,KAAa,IAAqB;AAC1C,SAAK,OAAO,IAAI,GAAG,GAAG,UAAU,EAAE;AAAA,EACpC;AAAA,EAEA,YAAY,KAAa,IAAqB;AAC5C,SAAK,OAAO,IAAI,GAAG,GAAG,YAAY,EAAE;AAAA,EACtC;AAAA,EAEA,eAAe,IAAqB;AAClC,SAAK,OAAO,QAAQ,WAAS,MAAM,YAAY,EAAE,CAAC;AAAA,EACpD;AAAA,EAEA,kBAAkB,KAAa,OAAkB;AAC/C,UAAM,QAAQ,KAAK,OAAO,IAAI,GAAG;AACjC,QAAI,MAAO,OAAM,QAAQ;AAAA,EAC3B;AAAA,EAEA,OAAiB;AACf,WAAO,MAAM,KAAK,KAAK,OAAO,KAAK,CAAC;AAAA,EACtC;AAAA,EAEA,QAAc;AACZ,SAAK,OAAO,QAAQ,WAAS,MAAM,MAAM,CAAC;AAC1C,SAAK,OAAO,MAAM;AAAA,EACpB;AACF;AAIA,IAAM,iBAA2I;AAAA,EAC/I,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO,CAAC,WAAW,WAAW,aAAa,UAAU;AAAA,EACrD,QAAQ,CAAC,mBAAmB,WAAW,WAAW,WAAW;AAAA,EAC7D,SAAS;AAAA,EACT,QAAQ,CAAC;AAAA,EACT,MAAM;AACR;AAYO,SAAS,gBAAgB,SAAsC;AACpE,QAAM,SAAS,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAC/C,QAAM,YAAY,oBAAI,IAAe;AACrC,QAAM,eAAe,IAAI,aAAa;AAGtC,MAAI,OAAO,SAAS,OAAO;AACzB,wBAAoB;AAAA,EACtB;AAGA,QAAM,qBAAqB,OAAO,SAAS,SAAS,OAAO,UAAU,OAAO,OAAO,CAAC,EAAE,MAAM,OAAO,MAAM,UAAU,OAAO,YAAY,IAAI,OAAO,OAAO,OAAO,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,CAAC,IAAI;AAC7O,MAAI,CAAC,mBAAoB,OAAM,IAAI,MAAM,0EAA0E;AAEnH,QAAM,oBAAwC,mBAAmB,IAAI,YAAU;AAC7E,QAAI,WAAW,OAAO,YAAY;AAClC,QAAI,UAAU;AAEZ,aAAO,SAAS,WAAW,GAAG,EAAG,YAAW,SAAS,MAAM,CAAC;AAC5D,aAAO,SAAS,SAAS,GAAG,EAAG,YAAW,SAAS,MAAM,GAAG,EAAE;AAC9D,iBAAW,WAAW,MAAM,WAAW;AAAA,IACzC;AAGA,QAAI,YAAY,OAAO;AACvB,QAAI,WAAW;AAEb,kBAAY,UAAU,QAAQ,SAAS,GAAG;AAC1C,UAAI,CAAC,UAAU,WAAW,GAAG,GAAG;AAC9B,oBAAY,MAAM;AAAA,MACpB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb;AAAA,MACA,OAAO;AAAA,MACP,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO;AAAA,MACZ,cAAc,OAAO,QAAQ,mBAAmB,OAAO,KAAK,IAAI;AAAA,MAChE,MAAM,OAAO,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AAGD,QAAM,qBAAqB,OAAO,QAAQ,mBAAmB,OAAO,KAAK,IAAI;AAG7E,QAAM,SAAS,aAAa,OAAO,KAAsB,QAAwB;AAC/E,UAAM,cAAc,IAAI,OAAO;AAC/B,UAAM,aAAa,IAAI,QAAQ;AAC/B,UAAM,WAAW,cAAc,MAAM,QAAQ,UAAU,IAAI,WAAW,CAAC,IAAI,YAAY,MAAM,GAAG,EAAE,CAAC,IAAI;AAGvG,QAAI,OAAO,UAAU,cAAc,OAAO,QAAQ,cAAc;AAC9D,YAAM,cAAc,UAAU,OAAO,MAAM,GAAG,WAAW;AACzD,UAAI,OAAO,SAAS;AAClB,gBAAQ,IAAI,gBAAgB,QAAQ,IAAI,OAAO,IAAI,GAAG,WAAW,OAAO,WAAW,EAAE;AAAA,MACvF;AACA,UAAI,UAAU,KAAK,EAAE,UAAU,YAAY,CAAC;AAC5C,UAAI,IAAI;AACR;AAAA,IACF;AAGA,UAAM,gBAAgB,kBAAkB,KAAK,OAAK,EAAE,YAAY,YAAY,WAAW,EAAE,QAAQ,CAAC,KAAK,kBAAkB,KAAK,OAAK,CAAC,EAAE,QAAQ;AAC9I,QAAI,CAAC,cAAe,QAAO,QAAQ,KAAK,eAAe;AAGvD,QAAI,cAAc,cAAc;AAC9B,UAAI;AACF,cAAM,UAAU,MAAM,cAAc,aAAa,KAAK,GAAG;AACzD,YAAI,SAAS;AACX,cAAI,OAAO,QAAS,SAAQ,IAAI,WAAW,IAAI,MAAM,IAAI,WAAW,+BAA+B;AACnG;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,oCAAoC,KAAK;AAAA,MACzD;AAAA,IACF;AAGA,QAAI,oBAAoB;AACtB,UAAI;AACF,cAAM,UAAU,MAAM,mBAAmB,KAAK,GAAG;AACjD,YAAI,SAAS;AACX,cAAI,OAAO,QAAS,SAAQ,IAAI,WAAW,IAAI,MAAM,IAAI,WAAW,sBAAsB;AAC1F;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,2BAA2B,KAAK;AAAA,MAChD;AAAA,IACF;AAEA,UAAM,MAAM,cAAc,WAAY,YAAY,MAAM,cAAc,SAAS,MAAM,KAAK,MAAO;AAGjG,QAAI,cAAc,OAAO,IAAI,WAAW,MAAM,GAAG;AAC/C,YAAM,UAAU,MAAM,cAAc,IAAI,OAAO,KAAK,GAAG;AACvD,UAAI,QAAS;AAAA,IACf;AAGA,QAAI,OAAO,OAAO,IAAI,WAAW,MAAM,GAAG;AACxC,YAAM,UAAU,MAAM,OAAO,IAAI,OAAO,KAAK,GAAG;AAChD,UAAI,QAAS;AAAA,IACf;AAGA,QAAI,IAAI,WAAW,MAAM,KAAK,CAAC,QAAQ,OAAO,SAAS,QAAQ,EAAE,SAAS,IAAI,UAAU,EAAE,GAAG;AAC3F,UAAI,CAAC,IAAI,aAAa;AACpB,YAAI,OAAO,QAAS,SAAQ,IAAI,SAAS,IAAI,MAAM,IAAI,GAAG,uBAAuB;AACjF,YAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,YAAI,IAAI,KAAK,UAAU,EAAE,OAAO,sBAAsB,SAAS,sCAAsC,CAAC,CAAC;AAAA,MACzG;AACA;AAAA,IACF;AAGA,QAAI;AACJ,QAAI,QAAQ,OAAO,cAAc,OAAO,CAAC,cAAc,OAAO;AAE5D,aAAO,MAAM,SAAS,KAAK,aAAa;AAAA,IAC1C,OAAO;AAEL,iBAAW,QAAQ,MAAO,cAAc,SAAS,gBAAiB;AAAA,IACpE;AAGA,eAAW,SAAS,MAAM,GAAG,EAAE,CAAC;AAEhC,QAAI,OAAO,WAAW,aAAa,cAAc;AAC/C,cAAQ,IAAI,yCAAyC;AAAA,IACvD;AAGA,QAAI,SAAS,SAAS,IAAI,GAAG;AAC3B,UAAI,OAAO,QAAS,SAAQ,IAAI,uCAAuC,QAAQ,EAAE;AACjF,aAAO,QAAQ,KAAK,eAAe;AAAA,IACrC;AAGA,UAAM,gBAAgB,SAAS,WAAW,QAAQ;AAClD,UAAM,uBAAuB,SAAS,WAAW,gBAAgB;AACjE,QAAI;AAGJ,UAAM,WAAW,UAAU,QAAQ,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,EAAE;AAC3E,QAAI,SAAS,SAAS,IAAI,GAAG;AAC3B,UAAI,OAAO,QAAS,SAAQ,IAAI,iCAAiC,QAAQ,EAAE;AAC3E,aAAO,QAAQ,KAAK,eAAe;AAAA,IACrC;AACA,qBAAiB;AAGjB,UAAM,UAAU,MAAM,SAAS,QAAQ,cAAc,IAAI,CAAC;AAC1D,QAAI,UAAU;AAGd,QAAI,iBAAiB,sBAAsB;AACzC,YAAM,YAAY,gBAAgB,SAAS;AAC3C,YAAM,WAAW,MAAM,eAAe,cAAc,MAAM,SAAS;AACnE,gBAAU,WAAW,MAAM,SAAS,QAAQ,IAAI;AAAA,IAClD;AAEA,QAAI;AAEJ,QAAI;AAEF,YAAM,iBAAiB,QAAQ,KAAK,SAAS,cAAc,CAAC;AAC5D,UAAI,CAAC,eAAe,WAAW,QAAQ,SAAS,GAAG,IAAI,UAAU,UAAU,GAAG,GAAG;AAC/E,YAAI,OAAO,QAAS,SAAQ,IAAI,uDAAuD,cAAc,EAAE;AACvG,eAAO,QAAQ,KAAK,eAAe;AAAA,MACrC;AAGA,iBAAW,MAAM,SAAS,cAAc;AACxC,UAAI,OAAO,WAAW,aAAa,cAAc;AAC/C,gBAAQ,IAAI,sCAAsC,QAAQ,EAAE;AAAA,MAC9D;AAAA,IACF,SAAS,YAAY;AAEnB,UAAI;AAEJ,UAAI,OAAO,WAAW,CAAC,eAAe,SAAS,GAAG,GAAG;AACnD,gBAAQ,IAAI,2BAA2B,cAAc,wBAAwB;AAAA,MAC/E;AAGA,UAAI,eAAe,SAAS,KAAK,GAAG;AAClC,cAAM,SAAS,eAAe,QAAQ,SAAS,KAAK;AACpD,YAAI;AACF,gBAAM,aAAa,MAAM,SAAS,QAAQ,KAAK,SAAS,MAAM,CAAC,CAAC;AAEhE,cAAI,CAAC,WAAW,WAAW,QAAQ,SAAS,GAAG,IAAI,UAAU,UAAU,GAAG,GAAG;AAC3E,gBAAI,OAAO,QAAS,SAAQ,IAAI,2CAA2C,UAAU,EAAE;AACvF,mBAAO,QAAQ,KAAK,eAAe;AAAA,UACrC;AACA,yBAAe;AAAA,QACjB,QAAQ;AAAA,QAER;AAAA,MACF;AAGA,UAAI,CAAC,gBAAgB,CAAC,eAAe,SAAS,GAAG,GAAG;AAElD,YAAI;AACF,yBAAe,MAAM,SAAS,QAAQ,KAAK,SAAS,iBAAiB,KAAK,CAAC,CAAC;AAC5E,cAAI,OAAO,QAAS,SAAQ,IAAI,kBAAkB,cAAc,KAAK;AAAA,QACvE,QAAQ;AAEN,cAAI;AACF,2BAAe,MAAM,SAAS,QAAQ,KAAK,SAAS,iBAAiB,KAAK,CAAC,CAAC;AAC5E,gBAAI,OAAO,QAAS,SAAQ,IAAI,kBAAkB,cAAc,KAAK;AAAA,UACvE,QAAQ;AAEN,gBAAI;AACF,6BAAe,MAAM,SAAS,QAAQ,KAAK,SAAS,gBAAgB,UAAU,CAAC,CAAC;AAChF,kBAAI,OAAO,QAAS,SAAQ,IAAI,kBAAkB,cAAc,WAAW;AAAA,YAC7E,QAAQ;AAEN,kBAAI;AACF,+BAAe,MAAM,SAAS,QAAQ,KAAK,SAAS,gBAAgB,UAAU,CAAC,CAAC;AAChF,oBAAI,OAAO,QAAS,SAAQ,IAAI,kBAAkB,cAAc,WAAW;AAAA,cAC7E,QAAQ;AACN,oBAAI,OAAO,QAAS,SAAQ,IAAI,8CAA8C,cAAc,EAAE;AAAA,cAChG;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,cAAc;AACjB,YAAI,CAAC,IAAI,aAAa;AAEpB,cAAI,aAAa,iBAAiB,cAAc,KAAK;AACnD,mBAAO,MAAM,SAAS,KAAK,aAAa;AAAA,UAC1C;AACA,cAAI,OAAO,QAAS,SAAQ,IAAI,SAAS,QAAQ,EAAE;AACnD,iBAAO,QAAQ,KAAK,eAAe;AAAA,QACrC;AACA;AAAA,MACF;AAEA,iBAAW;AAAA,IACb;AAGA,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,QAAQ;AACjC,UAAI,MAAM,YAAY,GAAG;AACvB,YAAI,OAAO,QAAS,SAAQ,IAAI,8BAA8B,QAAQ,yBAAyB;AAC/F,YAAI;AAGJ,YAAI;AACF,sBAAY,MAAM,SAAS,QAAQ,KAAK,UAAU,UAAU,CAAC,CAAC;AAC9D,cAAI,OAAO,QAAS,SAAQ,IAAI,qCAAqC;AAAA,QACvE,QAAQ;AAEN,cAAI;AACF,wBAAY,MAAM,SAAS,QAAQ,KAAK,UAAU,UAAU,CAAC,CAAC;AAC9D,gBAAI,OAAO,QAAS,SAAQ,IAAI,qCAAqC;AAAA,UACvE,QAAQ;AACN,gBAAI,OAAO,QAAS,SAAQ,IAAI,0CAA0C;AAE1E,gBAAI,cAAc,KAAK;AACrB,qBAAO,MAAM,SAAS,KAAK,aAAa;AAAA,YAC1C;AACA,mBAAO,QAAQ,KAAK,eAAe;AAAA,UACrC;AAAA,QACF;AAEA,mBAAW;AAAA,MACb;AAAA,IACF,SAAS,WAAW;AAClB,UAAI,OAAO,QAAS,SAAQ,IAAI,SAAS,QAAQ,EAAE;AACnD,aAAO,QAAQ,KAAK,eAAe;AAAA,IACrC;AAKA,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,QAAQ;AAEjC,UAAI,MAAM,YAAY,GAAG;AACvB,YAAI;AACF,gBAAM,YAAY,MAAM,SAAS,QAAQ,KAAK,UAAU,YAAY,CAAC,CAAC;AACtE,cAAI,CAAC,UAAU,WAAW,UAAU,GAAG,KAAK,cAAc,SAAS;AACjE,mBAAO,QAAQ,KAAK,eAAe;AAAA,UACrC;AACA,gBAAM,KAAK,SAAS;AACpB,iBAAO,UAAU,WAAW,KAAK,KAAK,eAAe,iBAAiB,oBAAoB;AAAA,QAC5F,QAAQ;AACN,iBAAO,QAAQ,KAAK,eAAe;AAAA,QACrC;AAAA,MACF;AAEA,YAAM,UAAU,UAAU,KAAK,KAAK,eAAe,iBAAiB,oBAAoB;AAAA,IAC1F,SAAS,OAAO;AAEd,UAAI,CAAC,IAAI,aAAa;AACpB,YAAI,OAAO,QAAS,SAAQ,IAAI,SAAS,QAAQ,EAAE;AACnD,gBAAQ,KAAK,eAAe;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,CAAC;AAGD,iBAAe,UAAU,UAAkB,KAAsB,KAAqB,QAA0B,sBAA+B,OAAO;AAGpJ,aAAS,yBAAyB,OAAuB;AACvD,aAAO,MACJ,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,KAAK,EACnB,QAAQ,SAAS,MAAM;AAAA,IAC5B;AAEA,QAAI;AACF,YAAM,UAAU,MAAM,SAAS,QAAQ,OAAO,IAAI,CAAC;AAGnD,YAAM,iBAAiB,QAAQ,QAAQ;AAGvC,UAAI,CAAC,qBAAqB;AAExB,YAAI,CAAC,eAAe,WAAW,UAAU,GAAG,KAAK,mBAAmB,SAAS;AAC3E,cAAI,OAAO,QAAS,SAAQ,IAAI,8DAA8D,QAAQ,EAAE;AACxG,iBAAO,QAAQ,KAAK,eAAe;AAAA,QACrC;AAAA,MACF;AAGA,UAAI;AACJ,UAAI;AACF,uBAAe,MAAM,SAAS,cAAc;AAG5C,YAAI,uBAAuB,cAAc;AAEvC,cAAI,OAAO,WAAW,CAAC,aAAa,WAAW,UAAU,GAAG,GAAG;AAC7D,oBAAQ,IAAI,mCAAmC,YAAY,EAAE;AAAA,UAC/D;AAAA,QACF;AAAA,MACF,QAAQ;AAEN,YAAI,SAAS,SAAS,YAAY,KAAK,OAAO,KAAK;AACjD,iBAAO,MAAM,SAAS,KAAK,MAAM;AAAA,QACnC;AACA,eAAO,QAAQ,KAAK,eAAe;AAAA,MACrC;AAEA,UAAI,UAAU,MAAM,SAAS,YAAY;AACzC,YAAM,MAAM,QAAQ,YAAY;AAChC,UAAI,WAAW,OAAO,YAAY,KAAK;AAIvC,YAAM,WAAW,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK;AAC3C,YAAM,cAAc,SAAS,SAAS,QAAQ;AAE9C,UAAI,QAAQ,UAAU,aAAa;AAEjC,cAAM,aAAa,yBAAyB,QAAQ,SAAS,CAAC;AAC9D,cAAM,WAAW;AAAA,gBACT,UAAU;AAAA;AAAA,mCAES,QAAQ;AAAA;AAAA;AAAA;AAAA;AAKnC,kBAAU,OAAO,KAAK,QAAQ;AAC9B,mBAAW;AAAA,MACb;AAGA,UAAI,QAAQ,SAAS,QAAQ,QAAQ;AACnC,YAAI;AACF,cAAI;AAEJ,cAAI,QAAQ;AAGV,kBAAM,SAAS,MAAM,KAAK,KAAK,cAAc;AAAA,cAC3C,OAAO;AAAA,cACP,iBAAiB;AAAA,gBACf,WAAW;AAAA,gBACX,iBAAiB;AAAA,gBACjB,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACV;AAAA,cACA,SAAS;AAAA,gBACP,CAAC,YAAY,GAAG,QAAQ,SAAS;AAAA,cACnC;AAAA,YACF,CAAC;AAED,yBAAa,OAAO,MAAM,aAAa,QAAQ,WAAW,KAAK,CAAC,KAAK;AAAA,UAEvE,WAAW,OAAO;AAGhB,kBAAM,aAAa,IAAI,IAAI,WAAW;AAAA,cACpC,QAAQ,QAAQ,SAAS,QAAQ;AAAA,cACjC,QAAQ;AAAA,YACV,CAAC;AAGD,yBAAa,WAAW,cAAc,QAAQ,SAAS,CAAC;AAAA,UAC1D,OAAO;AAEL,kBAAM,EAAE,cAAc,IAAI,MAAM,OAAO,SAAS;AAChD,kBAAM,SAAS,QAAQ,SAAS,QAAQ;AACxC,kBAAM,SAAS,cAAc,QAAQ,SAAS,GAAG;AAAA,cAC/C;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,WAAW;AAAA,YACb,CAAC;AAED,yBAAa,OAAO;AAAA,UACtB;AAKA,uBAAa,WAAW;AAAA,YACtB;AAAA,YACA,CAAC,GAAG,MAAM,QAAQ,SAAS,IAAI,MAAM,GAAG;AAAA,UAC1C;AACA,uBAAa,WAAW;AAAA,YACtB;AAAA,YACA,CAAC,GAAG,MAAM,QAAQ,WAAW,IAAI,MAAM,GAAG;AAAA,UAC5C;AAIA,uBAAa,WAAW;AAAA,YACtB;AAAA,YACA,CAAC,GAAG,SAAS,WAAW,IAAI;AAAA,UAC9B;AACA,uBAAa,WAAW;AAAA,YACtB;AAAA,YACA,CAAC,GAAG,SAAS,SAAS,IAAI;AAAA,UAC5B;AAEA,oBAAU,OAAO,KAAK,UAAU;AAChC,qBAAW;AAAA,QACb,SAAS,OAAO;AACd,cAAI,OAAO,QAAS,SAAQ,MAAM,uCAAuC,KAAK;AAC9E,iBAAO,QAAQ,KAAK;AAAA,EAAkC,KAAK,EAAE;AAAA,QAC/D;AAAA,MACF;AAGA,UAAI,QAAQ,SAAS;AACnB,cAAM,SAAS,kBAAkB,OAAO,QAAQ;AAChD,cAAM,YAAY,gBAAgB,OAAO,MAAM,MAAM;AACrD,YAAIH,QAAO,QAAQ,SAAS;AAG5B,YAAI,YAAY;AAChB,YAAI,OAAO,KAAK;AACd,cAAI;AACF,kBAAM,SAAS,OAAO,IAAI;AAC1B,gBAAI;AAGJ,gBAAI,OAAO,WAAW,UAAU;AAC9B,wBAAU;AAAA,YACZ,WAAW,OAAO,WAAW,YAAY,WAAW,QAAQ,aAAa,QAAQ;AAC/E,wBAAU,IAAI,eAAe,MAAe;AAAA,YAC9C,OAAO;AACL,wBAAU,OAAO,MAAM;AAAA,YACzB;AAGA,kBAAM,eAAe,QAAQ,MAAM,gCAAgC;AACnE,gBAAI,cAAc;AAChB,0BAAY,aAAa,KAAK,IAAI;AAAA,YACpC;AAAA,UACF,SAAS,OAAO;AACd,gBAAI,OAAO,QAAS,SAAQ,MAAM,gDAAgD,KAAK;AAAA,UACzF;AAAA,QACF;AAGA,cAAM,WAAW,kBAAkB,OAAO,QAAQ;AAClD,QAAAA,QAAO,qBAAqBA,OAAM,QAAQ;AAG1C,YAAI,OAAO,YAAY,OAAO,aAAa,KAAK;AAC9C,gBAAM,UAAU,eAAe,OAAO,QAAQ;AAE9C,cAAI,CAACA,MAAK,SAAS,OAAO,GAAG;AAE3B,gBAAIA,MAAK,SAAS,uBAAuB,GAAG;AAC1C,cAAAA,QAAOA,MAAK;AAAA,gBACV;AAAA,gBACA,CAAC,UAAU,GAAG,KAAK;AAAA,IAAO,OAAO;AAAA,cACnC;AAAA,YACF,WAAWA,MAAK,SAAS,QAAQ,GAAG;AAElC,cAAAA,QAAOA,MAAK,QAAQ,UAAU;AAAA,IAAa,OAAO,EAAE;AAAA,YACtD;AAAA,UACF;AAAA,QACF;AAGA,cAAM,gBAAgB,MAAM,oBAAoB,OAAO,MAAM,UAAU,OAAO,IAAI;AAClF,cAAM,gBAAgB,YAAY,GAAG,SAAS;AAAA,EAAK,aAAa,KAAK;AACrE,QAAAA,QAAOA,MAAK,SAAS,SAAS,IAAIA,MAAK,QAAQ,WAAW,GAAG,aAAa,SAAS,IAAIA;AACvF,QAAAA,QAAOA,MAAK,SAAS,SAAS,IAAIA,MAAK,QAAQ,WAAW,GAAG,SAAS,SAAS,IAAIA,QAAO;AAC1F,kBAAU,OAAO,KAAKA,KAAI;AAAA,MAC5B;AAGA,YAAMI,gBAAe,QAAQ,WAAW,QAAQ,SAAS,QAAQ,SAC7D,wCACA;AAEJ,YAAM,UAAe;AAAA,QACnB,gBAAgB;AAAA,QAChB,iBAAiBA;AAAA,MACnB;AAGA,YAAM,eAAe,+CAA+C,KAAK,QAAQ;AAEjF,UAAI,gBAAgB,QAAQ,SAAS,MAAM;AACzC,cAAM,EAAE,SAAS,IAAI,QAAQ,MAAM;AACnC,cAAM,aAAa,SAAS,OAAO;AACnC,gBAAQ,kBAAkB,IAAI;AAC9B,gBAAQ,gBAAgB,IAAI,WAAW;AACvC,YAAI,UAAU,KAAK,OAAO;AAC1B,YAAI,IAAI,UAAU;AAAA,MACpB,OAAO;AACL,YAAI,UAAU,KAAK,OAAO;AAC1B,YAAI,IAAI,OAAO;AAAA,MACjB;AAEA,UAAI,OAAO,QAAS,SAAQ,IAAI,SAAS,SAAS,OAAO,MAAM,QAAQ,CAAC,EAAE;AAAA,IAC5E,SAAS,OAAO;AACd,UAAI,OAAO,QAAS,SAAQ,MAAM,6BAA6B,KAAK;AACpE,cAAQ,KAAK,2BAA2B;AAAA,IAC1C;AAAA,EACF;AAGA,iBAAe,SAAS,KAAqB,QAA0B;AACrE,QAAI;AACF,UAAI,CAAC,OAAO,KAAK;AACf,eAAO,QAAQ,KAAK,6BAA6B;AAAA,MACnD;AAEA,YAAM,SAAS,OAAO,IAAI;AAC1B,UAAIJ;AAGJ,UAAI,OAAO,WAAW,UAAU;AAC9B,QAAAA,QAAO;AAAA,MACT,WAES,OAAO,WAAW,YAAY,WAAW,QAAQ,aAAa,QAAQ;AAC7E,cAAM,QAAQ;AACd,YAAI,MAAM,YAAY,QAAQ;AAC5B,UAAAA,QAAO,IAAI,eAAe,KAAK;AAAA,QACjC,OAAO;AAEL,UAAAA,QAAO,uIAAuI,IAAI,eAAe,KAAK,CAAC;AAAA,QACzK;AAAA,MACF,OAAO;AACL,QAAAA,QAAO,OAAO,MAAM;AAAA,MACtB;AAGA,YAAM,WAAW,kBAAkB,OAAO,QAAQ;AAClD,MAAAA,QAAO,qBAAqBA,OAAM,QAAQ;AAG1C,YAAM,YAAY,gBAAgB,OAAO,MAAM,QAAQ;AAGvD,YAAM,gBAAgB,MAAM,oBAAoB,OAAO,MAAM,UAAU,OAAO,IAAI;AAClF,MAAAA,QAAOA,MAAK,SAAS,SAAS,IAAIA,MAAK,QAAQ,WAAW,GAAG,aAAa,SAAS,IAAIA;AACvF,MAAAA,QAAOA,MAAK,SAAS,SAAS,IAAIA,MAAK,QAAQ,WAAW,GAAG,SAAS,SAAS,IAAIA,QAAO;AAE1F,UAAI,UAAU,KAAK,EAAE,gBAAgB,aAAa,iBAAiB,sCAAsC,CAAC;AAC1G,UAAI,IAAIA,KAAI;AAEZ,UAAI,OAAO,QAAS,SAAQ,IAAI,oBAAoB;AAAA,IACtD,SAAS,OAAO;AACd,UAAI,OAAO,QAAS,SAAQ,MAAM,oBAAoB,KAAK;AAC3D,cAAQ,KAAK,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,QAAM,MAAM,IAAI,gBAAgB,EAAE,OAAO,CAAC;AAE1C,MAAI,OAAO,SAAS;AAClB,YAAQ,IAAI,oCAAoC;AAAA,EAClD;AAEA,MAAI,GAAG,cAAc,CAAC,IAAe,QAAQ;AAC3C,cAAU,IAAI,EAAE;AAEhB,UAAM,UAAsB,EAAE,MAAM,aAAa,WAAW,KAAK,IAAI,EAAE;AACvE,OAAG,KAAK,KAAK,UAAU,OAAO,CAAC;AAE/B,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,+BAA+B,IAAI,OAAO,aAAa;AAAA,IACrE;AAGA,OAAG,GAAG,WAAW,CAAC,SAAiB;AACjC,UAAI;AACF,cAAM,MAAM,KAAK,MAAM,KAAK,SAAS,CAAC;AAGtC,YAAI,IAAI,SAAS,mBAAmB;AAClC,uBAAa,UAAU,IAAI,KAAK,EAAE;AAClC,cAAI,OAAO,SAAS;AAClB,oBAAQ,IAAI,iCAAiC,IAAI,GAAG,GAAG;AAAA,UACzD;AAAA,QACF,WAGS,IAAI,SAAS,qBAAqB;AACzC,uBAAa,YAAY,IAAI,KAAK,EAAE;AACpC,cAAI,OAAO,SAAS;AAClB,oBAAQ,IAAI,qCAAqC,IAAI,GAAG,GAAG;AAAA,UAC7D;AAAA,QACF,WAGS,IAAI,SAAS,gBAAgB;AACpC,uBAAa,kBAAkB,IAAI,KAAK,IAAI,KAAK;AACjD,cAAI,OAAO,SAAS;AAClB,oBAAQ,IAAI,2BAA2B,IAAI,GAAG,GAAG;AAAA,UACnD;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,YAAI,OAAO,SAAS;AAClB,kBAAQ,MAAM,oCAAoC,KAAK;AAAA,QACzD;AAAA,MACF;AAAA,IACF,CAAC;AAED,OAAG,GAAG,SAAS,MAAM;AACnB,gBAAU,OAAO,EAAE;AACnB,mBAAa,eAAe,EAAE;AAC9B,UAAI,OAAO,SAAS;AAClB,gBAAQ,IAAI,2BAA2B;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGD,QAAM,aAAa,kBAAkB;AAAA,IAAQ,YAC3C,OAAO,MAAM,IAAI,aAAW,KAAK,OAAO,MAAM,OAAO,CAAC;AAAA,EACxD;AAEA,QAAM,UAAU,MAAM,YAAY;AAAA,IAChC,SAAS,CAAC,SAAiB,OAAO,OAAO,KAAK,aAAW,KAAK,SAAS,QAAQ,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE,CAAC,CAAC;AAAA,IACrH,eAAe;AAAA,IACf,YAAY;AAAA,EACd,CAAC;AAED,UAAQ,GAAG,UAAU,CAAC,SAAiB;AACrC,QAAI,OAAO,QAAS,SAAQ,IAAI,uBAAuB,IAAI,EAAE;AAC7D,UAAM,UAAU,KAAK,UAAU,EAAE,MAAM,UAAU,MAAM,WAAW,KAAK,IAAI,EAAE,CAAe;AAE5F,cAAU,QAAQ,YAAU;AAC1B,UAAI,OAAO,6BAAgC;AACzC,eAAO,KAAK,SAAS,CAAC,GAAG,CAAC,QAAgB;AAExC,gBAAM,OAAQ,KAAa;AAC3B,cAAI,SAAS,kBAAkB,SAAS,gBAAgB,SAAS,WAAW,SAAS,eAAe;AAElG;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,UAAQ,GAAG,OAAO,CAAC,SAAiB,OAAO,WAAW,QAAQ,IAAI,qBAAqB,IAAI,EAAE,CAAC;AAC9F,UAAQ,GAAG,UAAU,CAAC,SAAiB,OAAO,WAAW,QAAQ,IAAI,uBAAuB,IAAI,EAAE,CAAC;AAGnG,SAAO,gBAAgB,EAAE;AAGzB,SAAO,OAAO,OAAO,MAAM,OAAO,MAAM,MAAM;AAC5C,QAAI,OAAO,SAAS;AAClB,cAAQ,IAAI,6BAAsB;AAClC,cAAQ,IAAI;AAAA,2BAAyB,OAAO,IAAI,IAAI,OAAO,IAAI,EAAE;AAEjE,UAAI,kBAAkB,SAAS,GAAG;AAChC,gBAAQ,IAAI,mBAAc;AAC1B,0BAAkB,QAAQ,YAAU;AAClC,gBAAM,YAAY,UAAU,OAAO,IAAI,IAAI,OAAO,IAAI,GAAG,OAAO,QAAQ;AACxE,kBAAQ,IAAI,UAAU,SAAS,WAAM,OAAO,IAAI,EAAE;AAAA,QACpD,CAAC;AAAA,MACH,OAAO;AACL,cAAM,SAAS,kBAAkB,CAAC;AAClC,gBAAQ,IAAI,qBAAgB,OAAO,IAAI,EAAE;AACzC,YAAI,OAAO,UAAU;AACnB,kBAAQ,IAAI,qBAAgB,OAAO,QAAQ,EAAE;AAAA,QAC/C;AAAA,MACF;AAEA,cAAQ,IAAI;AAAA;AAAA,CAAwC;AAAA,IACtD;AAGA,QAAI,OAAO,QAAQ,kBAAkB,SAAS,GAAG;AAC/C,YAAM,cAAc,kBAAkB,CAAC;AACvC,YAAM,MAAM,UAAU,OAAO,IAAI,IAAI,OAAO,IAAI,GAAG,YAAY,QAAQ;AAEvE,YAAM,OAAO,YAAY;AACvB,cAAM,EAAE,SAAS,YAAY,IAAI,MAAM,OAAO,MAAM;AACpD,cAAM,YAAY,GAAG;AAAA,MACvB;AACA,WAAK,EAAE,MAAM,MAAM;AAAA,MAEnB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAGD,MAAI,YAAY;AAChB,QAAM,QAAQ,YAAY;AACxB,QAAI,UAAW;AACf,gBAAY;AACZ,QAAI,OAAO,QAAS,SAAQ,IAAI,6BAA6B;AAC7D,UAAM,QAAQ,MAAM;AACpB,QAAI,MAAM;AACV,cAAU,QAAQ,YAAU,OAAO,MAAM,CAAC;AAC1C,cAAU,MAAM;AAChB,WAAO,IAAI,QAAc,CAACJ,aAAY;AACpC,aAAO,MAAM,MAAM;AACjB,YAAI,OAAO,QAAS,SAAQ,IAAI,iBAAiB;AACjD,QAAAA,SAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAGA,QAAM,gBAAgB,kBAAkB,CAAC;AACzC,QAAM,aAAa,UAAU,OAAO,IAAI,IAAI,OAAO,IAAI,GAAG,cAAc,QAAQ;AAEhF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,OAAO;AAAA,IACP;AAAA,EACF;AACF;","names":["resolve","text","status","getRuntime","exists","fs","queueCallback","https","ClientRequest","queueCallback","request","ClientRequest","IncomingMessage","https","import_events","queueCallback","http","request","import_events","fs","normalizePath","normalizePath","json","text","render","html","resolve","text","i","status","html","readdir","exports","request","cacheControl"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime.ts","../src/http.ts","../src/fs.ts","../src/server.ts","../src/https.ts","../src/ws.ts","../src/chokidar.ts","../src/path.ts","../src/mime-types.ts","../src/dom.ts"],"sourcesContent":["/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n","/**\n * HTTP module with unified API across runtimes\n * Ultra-optimized for maximum performance across Node.js, Bun, and Deno\n *\n * Performance optimizations:\n * - Bun fast path: Zero class instantiation (object literals only)\n * - Eliminated EventEmitter overhead for Bun/Deno\n * - Zero-copy headers conversion\n * - Inline response creation\n * - Reduced object allocations\n * - Direct closure capture (no resolver indirection)\n */\n\nimport { EventEmitter } from 'node:events';\nimport { runtime, isBun, isDeno, isNode } from './runtime';\n\n/**\n * Helper: Check if running on Node.js (eliminates duplication in runtime checks)\n */\n\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) queueMicrotask(callback);\n}\n\n/**\n * Helper: Convert headers to HeadersInit (eliminates duplication in Response creation)\n */\nfunction headersToInit(headers: OutgoingHttpHeaders): HeadersInit {\n const result: HeadersInit = {};\n for (const key in headers) {\n const value = headers[key];\n result[key] = Array.isArray(value) ? value.join(', ') : String(value);\n }\n return result;\n}\n\n/**\n * Helper: Create address object (eliminates duplication in address() method)\n */\nfunction createAddress(port: number, address: string, family = 'IPv4'): { port: number; family: string; address: string } {\n return { port, family, address };\n}\n\n/**\n * Helper: Create error Response (eliminates duplication in error handling)\n */\nfunction createErrorResponse(): Response {\n return new Response('Internal Server Error', { status: 500 });\n}\n\n/**\n * Helper: Emit listening and queue callback (eliminates duplication in Bun/Deno listen)\n */\nfunction emitListeningWithCallback(server: Server, callback?: () => void): void {\n server._listening = true;\n server.emit('listening');\n queueCallback(callback);\n}\n\n/**\n * Helper: Close server and emit events (eliminates duplication in Bun/Deno close)\n */\nfunction closeAndEmit(server: Server, callback?: (err?: Error) => void): void {\n server._listening = false;\n server.emit('close');\n if (callback) queueMicrotask(() => callback());\n}\n\n// Lazy-load native modules for Node.js\nlet http: any, https: any;\n\n// Initialize immediately for Node.js (synchronous require)\nif (isNode && typeof process !== 'undefined') {\n try {\n http = require('node:http');\n https = require('node:https');\n } catch (e) {\n // Fallback for older Node versions\n http = require('http');\n https = require('https');\n }\n}\n\n/**\n * HTTP Methods\n */\nexport const METHODS = [\n 'GET', 'POST', 'PUT', 'DELETE', 'PATCH',\n 'HEAD', 'OPTIONS', 'CONNECT', 'TRACE'\n] as const;\n\n/**\n * HTTP Status Codes (compact object)\n */\nexport const STATUS_CODES: Record<number, string> = {\n 100: 'Continue', 101: 'Switching Protocols', 102: 'Processing',\n 200: 'OK', 201: 'Created', 202: 'Accepted', 203: 'Non-Authoritative Information',\n 204: 'No Content', 205: 'Reset Content', 206: 'Partial Content',\n 300: 'Multiple Choices', 301: 'Moved Permanently', 302: 'Found',\n 303: 'See Other', 304: 'Not Modified', 307: 'Temporary Redirect', 308: 'Permanent Redirect',\n 400: 'Bad Request', 401: 'Unauthorized', 402: 'Payment Required', 403: 'Forbidden',\n 404: 'Not Found', 405: 'Method Not Allowed', 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required', 408: 'Request Timeout', 409: 'Conflict',\n 410: 'Gone', 411: 'Length Required', 412: 'Precondition Failed',\n 413: 'Payload Too Large', 414: 'URI Too Long', 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable', 417: 'Expectation Failed', 418: \"I'm a teapot\",\n 422: 'Unprocessable Entity', 425: 'Too Early', 426: 'Upgrade Required',\n 428: 'Precondition Required', 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large', 451: 'Unavailable For Legal Reasons',\n 500: 'Internal Server Error', 501: 'Not Implemented', 502: 'Bad Gateway',\n 503: 'Service Unavailable', 504: 'Gateway Timeout', 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates', 507: 'Insufficient Storage', 508: 'Loop Detected',\n 510: 'Not Extended', 511: 'Network Authentication Required',\n};\n\n/**\n * HTTP Headers type\n */\nexport type IncomingHttpHeaders = Record<string, string | string[] | undefined>;\nexport type OutgoingHttpHeaders = Record<string, string | string[] | number>;\n\n/**\n * IncomingMessage - Ultra-optimized for zero-copy operations\n */\nexport class IncomingMessage extends EventEmitter {\n public method: string;\n public url: string;\n public headers: IncomingHttpHeaders;\n public statusCode?: number;\n public statusMessage?: string;\n public httpVersion: string = '1.1';\n public rawHeaders: string[] = [];\n public socket: any;\n\n private _req: any;\n\n constructor(req: any) {\n super();\n this._req = req;\n\n if (isNode) {\n // Direct property access (fastest)\n this.method = req.method;\n this.url = req.url;\n this.headers = req.headers;\n this.statusCode = req.statusCode;\n this.statusMessage = req.statusMessage;\n this.httpVersion = req.httpVersion;\n this.rawHeaders = req.rawHeaders;\n this.socket = req.socket;\n } else {\n // Bun/Deno Request object - zero-copy parsing\n this.method = req.method;\n const urlObj = new URL(req.url);\n this.url = urlObj.pathname + urlObj.search;\n\n // Direct headers reference (zero-copy)\n this.headers = req.headers;\n this.rawHeaders = [];\n }\n }\n\n async text(): Promise<string> {\n if (isNode) {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n this._req.on('data', (chunk: Buffer) => chunks.push(chunk));\n this._req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n this._req.on('error', reject);\n });\n }\n // Bun/Deno - direct text() call\n return this._req.text();\n }\n\n async json(): Promise<any> {\n if (isNode) {\n const text = await this.text();\n return JSON.parse(text);\n }\n // Bun/Deno - optimized json() method\n return this._req.json();\n }\n}\n\n/**\n * ServerResponse - Ultra-optimized write operations\n */\nexport class ServerResponse extends EventEmitter {\n public statusCode: number = 200;\n public statusMessage: string = 'OK';\n public headersSent: boolean = false;\n\n private _headers: OutgoingHttpHeaders;\n private _body: string = '';\n private _resolve?: (response: Response) => void;\n private _finished: boolean = false;\n private _nodeRes?: any;\n\n constructor(_req?: IncomingMessage, nodeRes?: any) {\n super();\n this._nodeRes = nodeRes;\n // Use Object.create(null) for faster property access\n this._headers = Object.create(null);\n }\n\n setHeader(name: string, value: string | string[] | number): this {\n if (this.headersSent) {\n throw new Error('Cannot set headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.setHeader(name, value);\n }\n\n this._headers[name.toLowerCase()] = value;\n return this;\n }\n\n getHeader(name: string): string | string[] | number | undefined {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeader(name);\n }\n return this._headers[name.toLowerCase()];\n }\n\n getHeaders(): OutgoingHttpHeaders {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaders();\n }\n return { ...this._headers };\n }\n\n getHeaderNames(): string[] {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaderNames();\n }\n return Object.keys(this._headers);\n }\n\n hasHeader(name: string): boolean {\n if (isNode && this._nodeRes) {\n return this._nodeRes.hasHeader(name);\n }\n return name.toLowerCase() in this._headers;\n }\n\n removeHeader(name: string): void {\n if (this.headersSent) {\n throw new Error('Cannot remove headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.removeHeader(name);\n }\n\n delete this._headers[name.toLowerCase()];\n }\n\n writeHead(statusCode: number, statusMessage?: string | OutgoingHttpHeaders, headers?: OutgoingHttpHeaders): this {\n if (this.headersSent) {\n throw new Error('Cannot write headers after they are sent');\n }\n\n this.statusCode = statusCode;\n\n if (typeof statusMessage === 'string') {\n this.statusMessage = statusMessage;\n if (headers) {\n for (const key in headers) {\n this.setHeader(key, headers[key]!);\n }\n }\n } else if (statusMessage) {\n for (const key in statusMessage) {\n this.setHeader(key, statusMessage[key]!);\n }\n }\n\n if (isNode && this._nodeRes) {\n if (typeof statusMessage === 'string') {\n this._nodeRes.writeHead(statusCode, statusMessage, headers);\n } else {\n this._nodeRes.writeHead(statusCode, statusMessage);\n }\n }\n\n this.headersSent = true;\n return this;\n }\n\n write(chunk: any, encoding?: BufferEncoding | (() => void), callback?: () => void): boolean {\n if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n if (isNode && this._nodeRes) {\n return this._nodeRes.write(chunk, encoding, callback);\n }\n\n this._body += chunk;\n queueCallback(callback);\n\n return true;\n }\n\n end(chunk?: any, encoding?: BufferEncoding | (() => void), callback?: () => void): this {\n if (this._finished) {\n return this;\n }\n\n if (typeof chunk === 'function') {\n callback = chunk;\n chunk = undefined;\n } else if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (chunk !== undefined) {\n this.write(chunk, encoding as BufferEncoding);\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n this._finished = true;\n\n if (isNode && this._nodeRes) {\n // Don't pass chunk to end() since we already wrote it via this.write() above\n this._nodeRes.end(callback);\n this.emit('finish');\n } else {\n // Bun/Deno - ultra-optimized inline Response creation\n const response = new Response(this._body, {\n status: this.statusCode,\n statusText: this.statusMessage,\n headers: headersToInit(this._headers),\n });\n\n if (this._resolve) {\n this._resolve(response);\n }\n\n queueCallback(callback);\n }\n\n return this;\n }\n\n _setResolver(resolve: (response: Response) => void): void {\n this._resolve = resolve;\n }\n\n // Express.js-like methods\n json(data: any, statusCode = 200): this {\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'application/json');\n }\n this.statusCode = statusCode;\n this.end(JSON.stringify(data));\n return this;\n }\n\n send(data: any): this {\n if (typeof data === 'object') {\n return this.json(data);\n }\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'text/plain');\n }\n this.end(String(data));\n return this;\n }\n\n status(code: number): this {\n this.statusCode = code;\n return this;\n }\n}\n\n/**\n * Server - Optimized for each runtime\n */\nexport class Server extends EventEmitter {\n private nativeServer?: any;\n private requestListener?: RequestListener;\n public _listening: boolean = false;\n\n constructor(requestListener?: RequestListener) {\n super();\n this.requestListener = requestListener;\n }\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n listen(port?: number, hostname?: string, listeningListener?: () => void): this;\n listen(port?: number, listeningListener?: () => void): this;\n listen(options?: { port?: number; hostname?: string; backlog?: number }, listeningListener?: () => void): this;\n listen(...args: any[]): this {\n let port = 3000;\n let hostname = '0.0.0.0';\n let callback: (() => void) | undefined;\n\n // Optimized argument parsing\n const firstArg = args[0];\n if (typeof firstArg === 'number') {\n port = firstArg;\n const secondArg = args[1];\n if (typeof secondArg === 'string') {\n hostname = secondArg;\n callback = args[2] || args[3];\n } else if (typeof secondArg === 'function') {\n callback = secondArg;\n }\n } else if (firstArg && typeof firstArg === 'object') {\n port = firstArg.port || 3000;\n hostname = firstArg.hostname || '0.0.0.0';\n callback = args[1];\n }\n\n const self = this;\n\n if (isNode) {\n // Node.js - delegate directly to native http\n this.nativeServer = http.createServer((req: any, res: any) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse(incomingMessage, res);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n\n // Forward upgrade event for WebSocket support\n this.nativeServer.on('upgrade', (req: any, socket: any, head: any) => {\n self.emit('upgrade', req, socket, head);\n });\n\n this.nativeServer.listen(port, hostname, () => {\n this._listening = true;\n this.emit('listening');\n if (callback) callback();\n });\n\n this.nativeServer.on('error', (err: Error) => this.emit('error', err));\n this.nativeServer.on('close', () => {\n this._listening = false;\n this.emit('close');\n });\n } else if (isBun) {\n // Bun - ULTRA-OPTIMIZED direct fast path (zero wrapper overhead)\n // @ts-ignore\n this.nativeServer = Bun.serve({\n port,\n hostname,\n fetch: (req: Request) => {\n // Fast path: Create minimal context object to avoid wrapper classes\n const urlObj = new URL(req.url);\n const pathname = urlObj.pathname + urlObj.search;\n\n // Ultra-lightweight response builder (no class instantiation)\n let statusCode = 200;\n let statusMessage = 'OK';\n let body = '';\n const headers: Record<string, string> = Object.create(null);\n let responseReady = false;\n\n // Minimal IncomingMessage-compatible object (object literal is faster than class)\n const incomingMessage: any = {\n method: req.method,\n url: pathname,\n headers: req.headers,\n httpVersion: '1.1',\n rawHeaders: [],\n _req: req,\n text: () => req.text(),\n json: () => req.json(),\n };\n\n // Minimal ServerResponse-compatible object (inline methods, no inheritance)\n const serverResponse: any = {\n statusCode: 200,\n statusMessage: 'OK',\n headersSent: false,\n _headers: headers,\n\n setHeader(name: string, value: string | string[] | number) {\n headers[name.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value);\n return this;\n },\n\n getHeader(name: string) {\n return headers[name.toLowerCase()];\n },\n\n getHeaders() {\n return { ...headers };\n },\n\n writeHead(status: number, arg2?: any, arg3?: any) {\n statusCode = status;\n this.statusCode = status;\n this.headersSent = true;\n\n if (typeof arg2 === 'string') {\n statusMessage = arg2;\n this.statusMessage = arg2;\n if (arg3) {\n for (const key in arg3) {\n headers[key.toLowerCase()] = arg3[key];\n }\n }\n } else if (arg2) {\n for (const key in arg2) {\n headers[key.toLowerCase()] = arg2[key];\n }\n }\n return this;\n },\n\n write(chunk: any) {\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n body += chunk;\n return true;\n },\n\n end(chunk?: any) {\n if (chunk !== undefined) {\n this.write(chunk);\n }\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n responseReady = true;\n return this;\n },\n };\n\n // Execute handler\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n }\n\n // Inline Response creation (fastest path - no function calls)\n if (responseReady) {\n return new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n });\n }\n\n // Fallback for async (rare case)\n return new Promise<Response>((resolve) => {\n serverResponse.end = (chunk?: any) => {\n if (chunk !== undefined) {\n body += chunk;\n }\n resolve(new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n }));\n };\n });\n },\n error: createErrorResponse,\n });\n\n emitListeningWithCallback(this, callback);\n } else if (isDeno) {\n // Deno - use Deno.serve()\n // @ts-ignore\n this.nativeServer = Deno.serve({\n port,\n hostname,\n handler: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n onError: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n });\n\n emitListeningWithCallback(this, callback);\n }\n\n return this;\n }\n\n close(callback?: (err?: Error) => void): this {\n if (!this.nativeServer) {\n if (callback) queueMicrotask(() => callback());\n return this;\n }\n\n if (isNode) {\n this.nativeServer.close(callback);\n } else if (isBun) {\n this.nativeServer.stop();\n closeAndEmit(this, callback);\n } else if (isDeno) {\n // @ts-ignore\n this.nativeServer.shutdown();\n closeAndEmit(this, callback);\n }\n\n return this;\n }\n\n address(): { port: number; family: string; address: string } | null {\n if (!this.nativeServer) return null;\n\n if (isNode) {\n const addr = this.nativeServer.address();\n if (!addr) return null;\n if (typeof addr === 'string') {\n return createAddress(0, addr, 'unix');\n }\n return addr;\n } else if (isBun) {\n return createAddress(this.nativeServer.port, this.nativeServer.hostname);\n } else if (isDeno) {\n // @ts-ignore\n const addr = this.nativeServer.addr;\n return createAddress(addr.port, addr.hostname);\n }\n\n return null;\n }\n\n get listening(): boolean {\n return this._listening;\n }\n}\n\n/**\n * Request listener type\n */\nexport type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Request options\n */\nexport interface RequestOptions {\n method?: string;\n headers?: OutgoingHttpHeaders;\n timeout?: number;\n signal?: AbortSignal;\n}\n\n/**\n * Server options\n */\nexport interface ServerOptions {\n IncomingMessage?: typeof IncomingMessage;\n ServerResponse?: typeof ServerResponse;\n}\n\n/**\n * Client request - lightweight wrapper\n */\nexport class ClientRequest extends EventEmitter {\n constructor(_url: string | URL, _options: RequestOptions = {}) {\n super();\n }\n\n write(_chunk: any): boolean {\n return true;\n }\n\n end(callback?: () => void): void {\n queueCallback(callback);\n }\n}\n\n/**\n * HTTP Agent\n */\nexport class Agent {\n constructor(public options?: any) { }\n}\n\n/**\n * Create HTTP server\n */\nexport function createServer(requestListener?: RequestListener): Server;\nexport function createServer(options: ServerOptions, requestListener?: RequestListener): Server;\nexport function createServer(\n optionsOrListener?: ServerOptions | RequestListener,\n requestListener?: RequestListener\n): Server {\n return new Server(typeof optionsOrListener === 'function' ? optionsOrListener : requestListener);\n}\n\n/**\n * Make HTTP request - optimized per runtime\n */\nexport function request(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n const urlString = typeof url === 'string' ? url : url.toString();\n const req = new ClientRequest(urlString, options);\n\n if (isNode) {\n const urlObj = new URL(urlString);\n const client = urlObj.protocol === 'https:' ? https : http;\n\n const nodeReq = client.request(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers,\n timeout: options?.timeout,\n signal: options?.signal,\n }, (res: any) => {\n const incomingMessage = new IncomingMessage(res);\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n });\n\n nodeReq.on('error', (error: Error) => req.emit('error', error));\n nodeReq.end();\n } else {\n // Bun/Deno - use optimized fetch\n queueMicrotask(async () => {\n try {\n const response = await fetch(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers as HeadersInit,\n signal: options?.signal,\n });\n\n const fetchRequest = new Request(urlString);\n const incomingMessage = new IncomingMessage(fetchRequest);\n incomingMessage.statusCode = response.status;\n incomingMessage.statusMessage = response.statusText;\n\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n } catch (error) {\n req.emit('error', error);\n }\n });\n }\n\n return req;\n}\n\n/**\n * Make HTTP GET request\n */\nexport function get(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n return request(url, { ...options, method: 'GET' }, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n createServer,\n request,\n get,\n Server,\n IncomingMessage,\n ServerResponse,\n Agent,\n ClientRequest,\n METHODS,\n STATUS_CODES,\n getRuntime,\n};\n","/**\n * File System module with unified API across runtimes\n * Compatible with Node.js 'fs' module API\n * - Node.js: uses 'fs' module\n * - Bun: uses Bun.file() and native APIs\n * - Deno: uses Deno.readFile(), etc.\n */\n\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Check if runtime is Bun or Deno (eliminates duplication in Deno API calls)\n */\nconst isBunOrDeno = isBun || isDeno;\n\n/**\n * Helper: Parse options from string or object (eliminates duplication in options parsing)\n */\nfunction parseOptions<T>(options: T | string | undefined, defaultValue: T): T {\n return typeof options === 'string' ? { encoding: options } as T : options || defaultValue;\n}\n\n/**\n * Helper: Decode content with optional encoding (eliminates duplication in read operations)\n */\nfunction decodeContent(content: ArrayBuffer | Uint8Array, encoding?: string | null): string | Buffer {\n if (encoding) {\n return new TextDecoder(encoding).decode(content);\n }\n return Buffer.from(content instanceof ArrayBuffer ? new Uint8Array(content) : content);\n}\n\n/**\n * Helper: Convert data to Uint8Array (eliminates duplication in write operations)\n */\nfunction dataToUint8Array(data: string | Buffer | Uint8Array): Uint8Array {\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n if (data instanceof Buffer) {\n return new Uint8Array(data);\n }\n return data;\n}\n\n/**\n * Helper: Process directory entries (eliminates duplication in readdir operations)\n */\nfunction processDenoEntries(iterator: any, withFileTypes?: boolean): any[] {\n const entries: any[] = [];\n for (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n/**\n * Helper: Process directory entries async (eliminates duplication in async readdir)\n */\nasync function processDenoEntriesAsync(iterator: any, withFileTypes?: boolean): Promise<any[]> {\n const entries: any[] = [];\n for await (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n// Pre-load fs module for Node.js\nlet fs: any, fsPromises: any;\nif (isNode) {\n fs = require('fs');\n fsPromises = require('fs/promises');\n}\n\n/**\n * File encoding types\n */\nexport type BufferEncoding =\n | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2'\n | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';\n\n/**\n * Read file options\n */\nexport interface ReadFileOptions {\n encoding?: BufferEncoding | null;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Write file options\n */\nexport interface WriteFileOptions {\n encoding?: BufferEncoding | null;\n mode?: number;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Mkdir options\n */\nexport interface MkdirOptions {\n recursive?: boolean;\n mode?: number;\n}\n\n/**\n * Readdir options\n */\nexport interface ReaddirOptions {\n encoding?: BufferEncoding | null;\n withFileTypes?: boolean;\n recursive?: boolean;\n}\n\n/**\n * File stats\n */\nexport interface Stats {\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n dev: number;\n ino: number;\n mode: number;\n nlink: number;\n uid: number;\n gid: number;\n rdev: number;\n size: number;\n blksize: number;\n blocks: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n atime: Date;\n mtime: Date;\n ctime: Date;\n birthtime: Date;\n}\n\n/**\n * Directory entry\n */\nexport interface Dirent {\n name: string;\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n}\n\n/**\n * Read file (async)\n */\nexport async function readFile(path: string, options?: ReadFileOptions | BufferEncoding): Promise<string | Buffer> {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readFile(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = await file.arrayBuffer();\n return decodeContent(content, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = await Deno.readFile(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read file (sync)\n */\nexport function readFileSync(path: string, options?: ReadFileOptions | BufferEncoding): string | Buffer {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fs.readFileSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = file.arrayBuffer();\n return decodeContent(content as ArrayBuffer, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = Deno.readFileSync(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Write file (async)\n */\nexport async function writeFile(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.writeFile(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n await Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.writeFile(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Write file (sync)\n */\nexport function writeFileSync(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.writeFileSync(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n Deno.writeFileSync(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Append file (async)\n */\nexport async function appendFile(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.appendFile(path, data, opts);\n } else {\n if (await exists(path)) {\n const existing = await readFile(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n await writeFile(path, combined, opts);\n } else {\n await writeFile(path, data, opts);\n }\n }\n}\n\n/**\n * Append file (sync)\n */\nexport function appendFileSync(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.appendFileSync(path, data, opts);\n } else {\n if (existsSync(path)) {\n const existing = readFileSync(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n writeFileSync(path, combined, opts);\n } else {\n writeFileSync(path, data, opts);\n }\n }\n}\n\n/**\n * Check if file/directory exists (async)\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if file/directory exists (sync)\n */\nexport function existsSync(path: string): boolean {\n try {\n statSync(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get file stats (async)\n */\nexport async function stat(path: string): Promise<Stats> {\n if (isNode) {\n return fsPromises.stat(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n const exists = await file.exists();\n\n if (!exists) {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n // Create a Stats-like object\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = await Deno.stat(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Get file stats (sync)\n */\nexport function statSync(path: string): Stats {\n if (isNode) {\n return fs.statSync(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n\n // Bun doesn't have sync exists check, so we try to read\n try {\n file.arrayBuffer();\n } catch {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = Deno.statSync(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Create directory (async)\n */\nexport async function mkdir(path: string, options?: MkdirOptions | number): Promise<void> {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n await fsPromises.mkdir(path, opts);\n } else if (isBun) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Create directory (sync)\n */\nexport function mkdirSync(path: string, options?: MkdirOptions | number): void {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n fs.mkdirSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Read directory (async)\n */\nexport async function readdir(path: string, options?: ReaddirOptions | BufferEncoding): Promise<string[] | Dirent[]> {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readdir(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntriesAsync(Deno.readDir(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read directory (sync)\n */\nexport function readdirSync(path: string, options?: ReaddirOptions | BufferEncoding): string[] | Dirent[] {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fs.readdirSync(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntries(Deno.readDirSync(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Remove file (async)\n */\nexport async function unlink(path: string): Promise<void> {\n if (isNode) {\n return fsPromises.unlink(path);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path);\n }\n}\n\n/**\n * Remove file (sync)\n */\nexport function unlinkSync(path: string): void {\n if (isNode) {\n fs.unlinkSync(path);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path);\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path);\n }\n}\n\n/**\n * Remove directory (async)\n */\nexport async function rmdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n if (isNode) {\n return fsPromises.rmdir(path, options);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Remove directory (sync)\n */\nexport function rmdirSync(path: string, options?: { recursive?: boolean }): void {\n if (isNode) {\n fs.rmdirSync(path, options);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Rename/move file (async)\n */\nexport async function rename(oldPath: string, newPath: string): Promise<void> {\n if (isNode) {\n return fsPromises.rename(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n }\n}\n\n/**\n * Rename/move file (sync)\n */\nexport function renameSync(oldPath: string, newPath: string): void {\n if (isNode) {\n fs.renameSync(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n }\n}\n\n/**\n * Copy file (async)\n */\nexport async function copyFile(src: string, dest: string, flags?: number): Promise<void> {\n if (isNode) {\n return fsPromises.copyFile(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n }\n}\n\n/**\n * Copy file (sync)\n */\nexport function copyFileSync(src: string, dest: string, flags?: number): void {\n if (isNode) {\n fs.copyFileSync(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n }\n}\n\n/**\n * Resolve pathname to absolute path (async)\n */\nexport async function realpath(path: string, options?: { encoding?: BufferEncoding }): Promise<string> {\n if (isNode) {\n return fsPromises.realpath(path, options);\n } else if (isBun) {\n // Bun supports fs.promises.realpath\n const fs = require('fs/promises');\n return fs.realpath(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return await Deno.realPath(path);\n }\n return path;\n}\n\n/**\n * Resolve pathname to absolute path (sync)\n */\nexport function realpathSync(path: string, options?: { encoding?: BufferEncoding }): string {\n if (isNode) {\n return fs.realpathSync(path, options);\n } else if (isBun) {\n // Bun supports fs.realpathSync\n const fs = require('fs');\n return fs.realpathSync(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return Deno.realPathSync(path);\n }\n return path;\n}\n\n/**\n * Helper: Create Stats object\n */\nfunction createStatsObject(_path: string, size: number, isDir: boolean): Stats {\n const now = Date.now();\n return {\n isFile: () => !isDir,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: isDir ? 16877 : 33188,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs: now,\n mtimeMs: now,\n ctimeMs: now,\n birthtimeMs: now,\n atime: new Date(now),\n mtime: new Date(now),\n ctime: new Date(now),\n birthtime: new Date(now),\n };\n}\n\n/**\n * Helper: Create Stats from Deno FileInfo\n */\nfunction createStatsFromDenoFileInfo(info: any): Stats {\n return {\n isFile: () => info.isFile,\n isDirectory: () => info.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => info.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: info.dev || 0,\n ino: info.ino || 0,\n mode: info.mode || 0,\n nlink: info.nlink || 1,\n uid: info.uid || 0,\n gid: info.gid || 0,\n rdev: 0,\n size: info.size,\n blksize: info.blksize || 4096,\n blocks: info.blocks || Math.ceil(info.size / 512),\n atimeMs: info.atime?.getTime() || Date.now(),\n mtimeMs: info.mtime?.getTime() || Date.now(),\n ctimeMs: info.birthtime?.getTime() || Date.now(),\n birthtimeMs: info.birthtime?.getTime() || Date.now(),\n atime: info.atime || new Date(),\n mtime: info.mtime || new Date(),\n ctime: info.birthtime || new Date(),\n birthtime: info.birthtime || new Date(),\n };\n}\n\n/**\n * Helper: Create Dirent from Deno DirEntry\n */\nfunction createDirentFromDenoEntry(entry: any): Dirent {\n return {\n name: entry.name,\n isFile: () => entry.isFile,\n isDirectory: () => entry.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => entry.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Promises API (re-export for compatibility)\n */\nexport const promises = {\n readFile,\n writeFile,\n appendFile,\n stat,\n mkdir,\n readdir,\n unlink,\n rmdir,\n rename,\n copyFile,\n realpath,\n};\n\n/**\n * Default export\n */\nexport default {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync,\n appendFile,\n appendFileSync,\n exists,\n existsSync,\n stat,\n statSync,\n mkdir,\n mkdirSync,\n readdir,\n readdirSync,\n unlink,\n unlinkSync,\n rmdir,\n rmdirSync,\n rename,\n renameSync,\n copyFile,\n copyFileSync,\n realpath,\n realpathSync,\n promises,\n getRuntime,\n};\n","/**\n * Development server with HMR support\n * Cross-runtime transpilation support\n * - Node.js: uses esbuild\n * - Bun: uses Bun.Transpiler\n * - Deno: uses Deno.emit\n */\n\nimport { createServer, IncomingMessage, ServerResponse, request as httpRequest } from './http';\nimport { request as httpsRequest } from './https';\nimport { WebSocketServer, WebSocket, ReadyState } from './ws';\nimport { watch } from './chokidar';\nimport { readFile, stat, realpath } from './fs';\nimport { join, extname, relative, resolve, normalize, sep } from './path';\nimport { lookup } from './mime-types';\nimport { isBun, isDeno } from './runtime';\nimport type { DevServerOptions, DevServer, HMRMessage, Child, VNode, ProxyConfig } from './types';\nimport { dom } from './dom';\n\n// ===== Router =====\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'HEAD' | 'ALL';\n\nexport interface ElitRequest extends IncomingMessage {\n body?: any;\n query?: Record<string, string>;\n params?: Record<string, string>;\n}\n\nexport interface ElitResponse extends ServerResponse {\n json(data: any, statusCode?: number): this;\n send(data: any): this;\n status(code: number): this;\n}\n\nexport interface ServerRouteContext {\n req: ElitRequest;\n res: ElitResponse;\n params: Record<string, string>;\n query: Record<string, string>;\n body: any;\n headers: Record<string, string | string[] | undefined>;\n user?: any;\n}\n\nexport type ServerRouteHandler = (ctx: ServerRouteContext, next?: () => Promise<void>) => void | Promise<void>;\nexport type Middleware = (ctx: ServerRouteContext, next: () => Promise<void>) => void | Promise<void>;\n\ninterface ServerRoute {\n method: HttpMethod;\n pattern: RegExp;\n paramNames: string[];\n handler: ServerRouteHandler;\n middlewares: Middleware[];\n}\n\n\nexport class ServerRouter {\n private routes: ServerRoute[] = [];\n private middlewares: Middleware[] = [];\n\n // Accept both internal Middleware and Express-style `(req, res, next?)` functions\n // Also support path-based middleware like Express: use(path, middleware)\n use(...args: Array<any>): this {\n if (typeof args[0] === 'string') {\n // Path-based middleware: use(path, ...middlewares)\n const path = args[0];\n const middlewares = args.slice(1);\n return this.addRoute('ALL', path, middlewares);\n }\n // Global middleware\n const mw = args[0];\n this.middlewares.push(this.toMiddleware(mw));\n return this;\n }\n\n // Express-like .all() method - matches all HTTP methods\n all = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('ALL', path, handlers as any);\n\n // Support per-route middleware: accept middleware(s) before the final handler\n get = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('GET', path, handlers as any);\n post = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('POST', path, handlers as any);\n put = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('PUT', path, handlers as any);\n delete = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('DELETE', path, handlers as any);\n patch = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('PATCH', path, handlers as any);\n options = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('OPTIONS', path, handlers as any);\n head = (path: string, ...handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this => this.addRoute('HEAD', path, handlers as any);\n\n // Convert Express-like handler/middleware to internal Middleware\n private toMiddleware(fn: Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)): Middleware {\n // If it's already our Middleware, return as-is\n if ((fn as Middleware).length === 2 && (fn as any).name !== 'bound ') {\n // Cannot reliably detect, so always wrap to normalize behavior\n }\n\n return async (ctx: ServerRouteContext, next: () => Promise<void>) => {\n const f: any = fn;\n\n // Express-style with (req, res, next)\n if (f.length >= 3) {\n // Provide a next that triggers our next\n const expressNext = () => {\n // call our next but don't await here\n void next();\n };\n\n const res = f(ctx.req, ctx.res, expressNext);\n if (res && typeof res.then === 'function') await res;\n // If express middleware didn't call next(), we simply return and stop the chain\n return;\n }\n\n // Express-style with (req, res) - treat as middleware that continues after completion\n if (f.length === 2) {\n const res = f(ctx.req, ctx.res);\n if (res && typeof res.then === 'function') await res;\n await next();\n return;\n }\n\n // Our internal handler style (ctx) => ... - call it and continue\n const out = (fn as ServerRouteHandler)(ctx);\n if (out && typeof out.then === 'function') await out;\n await next();\n };\n }\n\n private addRoute(method: HttpMethod, path: string, handlers: Array<Middleware | ServerRouteHandler | ((req: ElitRequest, res: ServerResponse, next?: () => void) => any)>): this {\n const { pattern, paramNames } = this.pathToRegex(path);\n // Last item is the actual route handler, preceding items are middlewares\n if (!handlers || handlers.length === 0) throw new Error('Route must include a handler');\n const rawMiddlewares = handlers.slice(0, handlers.length - 1);\n const rawLast = handlers[handlers.length - 1];\n\n const middlewares = rawMiddlewares.map(h => this.toMiddleware(h as any));\n\n // Normalize last handler: if it's express-like, wrap into ServerRouteHandler\n const last = ((): ServerRouteHandler => {\n const f: any = rawLast;\n if (typeof f !== 'function') throw new Error('Route handler must be a function');\n\n if (f.length >= 2) {\n // Express-style final handler\n return async (ctx: ServerRouteContext) => {\n if (f.length >= 3) {\n // expects next\n await new Promise<void>((resolve) => {\n try {\n f(ctx.req, ctx.res, () => resolve());\n } catch (e) { resolve(); }\n });\n } else {\n const res = f(ctx.req, ctx.res);\n if (res && typeof res.then === 'function') await res;\n }\n };\n }\n\n // Already a ServerRouteHandler (ctx)\n return f as ServerRouteHandler;\n })();\n\n this.routes.push({ method, pattern, paramNames, handler: last, middlewares });\n return this;\n }\n\n private pathToRegex(path: string): { pattern: RegExp; paramNames: string[] } {\n const paramNames: string[] = [];\n const pattern = path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\//g, '\\\\/').replace(/:(\\w+)/g, (_, name) => (paramNames.push(name), '([^\\\\/]+)'));\n return { pattern: new RegExp(`^${pattern}$`), paramNames };\n }\n\n private parseQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n queryString.split('&').forEach(p => {\n const [k, v] = p.split('=');\n if (k) {\n query[k] = v !== undefined ? v : '';\n }\n });\n return query;\n }\n\n /**\n * List all registered routes for debugging\n */\n listRoutes(): Array<{ method: string; pattern: string; paramNames: string[]; handler: string }> {\n return this.routes.map(route => ({\n method: route.method,\n pattern: route.pattern.source,\n paramNames: route.paramNames,\n handler: route.handler.name || '(anonymous)'\n }));\n }\n\n private async parseBody(req: IncomingMessage): Promise<any> {\n // Bun compatibility: Check if req has text() method (Bun Request)\n if (typeof (req as any).text === 'function') {\n try {\n const text = await (req as any).text();\n if (!text) return {};\n\n const contentType = req.headers['content-type'];\n const ct = (Array.isArray(contentType) ? contentType[0] : (contentType || '')).toLowerCase();\n\n // Parse JSON (either by content-type or if it looks like JSON)\n if (ct.includes('application/json') || ct.includes('json') || text.trim().startsWith('{') || text.trim().startsWith('[')) {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n\n // Parse URL-encoded\n if (ct.includes('application/x-www-form-urlencoded') || ct.includes('urlencoded')) {\n return Object.fromEntries(new URLSearchParams(text));\n }\n\n // Return raw text\n return text;\n } catch (e) {\n console.log('[ServerRouter] Bun body parse error:', e);\n return {};\n }\n }\n\n // Node.js stream-based parsing\n return new Promise((resolve, reject) => {\n const contentLengthHeader = req.headers['content-length'];\n const contentLength = parseInt(Array.isArray(contentLengthHeader) ? contentLengthHeader[0] : (contentLengthHeader || '0'), 10);\n\n if (contentLength === 0) {\n resolve({});\n return;\n }\n\n const chunks: Buffer[] = [];\n\n req.on('data', chunk => {\n chunks.push(Buffer.from(chunk));\n });\n\n req.on('end', () => {\n const body = Buffer.concat(chunks).toString();\n try {\n const ct = req.headers['content-type'] || '';\n resolve(ct.includes('json') ? (body ? JSON.parse(body) : {}) : ct.includes('urlencoded') ? Object.fromEntries(new URLSearchParams(body)) : body);\n } catch (e) {\n reject(e);\n }\n });\n\n req.on('error', reject);\n });\n }\n\n async handle(req: IncomingMessage, res: ServerResponse): Promise<boolean> {\n const method = req.method as HttpMethod, url = req.url || '/', path = url.split('?')[0];\n\n for (const route of this.routes) {\n if (route.method !== 'ALL' && route.method !== method) continue;\n if (!route.pattern.test(path)) continue;\n const match = path.match(route.pattern)!;\n const params = Object.fromEntries(route.paramNames.map((name, i) => [name, match[i + 1]]));\n\n let body: any = {};\n if (['POST', 'PUT', 'PATCH'].includes(method)) {\n try {\n body = await this.parseBody(req);\n // Attach body to req for Express-like compatibility\n (req as ElitRequest).body = body;\n }\n catch (e) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end('{\"error\":\"Invalid request body\"}');\n return true;\n }\n }\n\n // Parse query string and attach to req for Express-like compatibility\n const query = this.parseQuery(url);\n (req as ElitRequest).query = query;\n\n // Attach params to req for Express-like compatibility\n (req as ElitRequest).params = params;\n\n // Add Express-like response helpers to res object\n let _statusCode = 200;\n const elitRes = res as ElitResponse;\n\n // Implement status() method\n elitRes.status = function(code: number): ElitResponse {\n _statusCode = code;\n return this;\n };\n\n // Implement json() method\n elitRes.json = function(data: any, statusCode?: number): ElitResponse {\n const code = statusCode !== undefined ? statusCode : _statusCode;\n this.writeHead(code, { 'Content-Type': 'application/json' });\n this.end(JSON.stringify(data));\n return this;\n };\n\n // Implement send() method\n elitRes.send = function(data: any): ElitResponse {\n if (typeof data === 'string') {\n this.writeHead(_statusCode, { 'Content-Type': 'text/html' });\n this.end(data);\n } else {\n this.writeHead(_statusCode, { 'Content-Type': 'application/json' });\n this.end(JSON.stringify(data));\n }\n return this;\n };\n\n // Add Express-like response helpers to context\n const ctx: ServerRouteContext = {\n req: req as ElitRequest,\n res: elitRes,\n params,\n query,\n body,\n headers: req.headers as any\n };\n\n // Build middleware chain: global middlewares -> route middlewares -> final handler\n // Pass `next` to the final handler so it can optionally call await next()\n const routeMiddlewares = route.middlewares || [];\n const chain: Middleware[] = [\n ...this.middlewares,\n ...routeMiddlewares,\n async (c, n) => { await route.handler(c, n); }\n ];\n\n let i = 0;\n const next = async () => {\n if (i >= chain.length) return;\n const mw = chain[i++];\n await mw(ctx, next);\n };\n\n try {\n await next();\n }\n catch (e) {\n console.error('[ServerRouter] Route error:', e);\n !res.headersSent && (res.writeHead(500, { 'Content-Type': 'application/json' }), res.end(JSON.stringify({ error: 'Internal Server Error', message: e instanceof Error ? e.message : 'Unknown' })));\n }\n return true;\n }\n\n // No route matched\n return false;\n }\n}\n\nexport const json = (res: ServerResponse, data: any, status = 200) => (res.writeHead(status, { 'Content-Type': 'application/json' }), res.end(JSON.stringify(data)));\nexport const text = (res: ServerResponse, data: string, status = 200) => (res.writeHead(status, { 'Content-Type': 'text/plain' }), res.end(data));\nexport const html = (res: ServerResponse, data: string, status = 200) => (res.writeHead(status, { 'Content-Type': 'text/html' }), res.end(data));\nexport const status = (res: ServerResponse, code: number, message = '') => (res.writeHead(code, { 'Content-Type': 'application/json' }), res.end(JSON.stringify({ status: code, message })));\n\n// Helper functions for common responses\nconst sendError = (res: ServerResponse, code: number, msg: string): void => { res.writeHead(code, { 'Content-Type': 'text/plain' }); res.end(msg); };\nconst send404 = (res: ServerResponse, msg = 'Not Found'): void => sendError(res, 404, msg);\nconst send403 = (res: ServerResponse, msg = 'Forbidden'): void => sendError(res, 403, msg);\nconst send500 = (res: ServerResponse, msg = 'Internal Server Error'): void => sendError(res, 500, msg);\n\n// Import map for all Elit client-side modules (reused in serveFile and serveSSR)\nconst createElitImportMap = async (rootDir: string, basePath: string = '', mode: 'dev' | 'preview' = 'dev'): Promise<string> => {\n // In dev mode, use built files from node_modules/elit/dist\n // In preview mode, use built files from dist\n const srcPath = mode === 'dev'\n ? (basePath ? `${basePath}/node_modules/elit/src` : '/node_modules/elit/src')\n : (basePath ? `${basePath}/node_modules/elit/dist` : '/node_modules/elit/dist');\n\n const fileExt = mode === 'dev' ? '.ts' : '.mjs';\n\n // Base Elit imports\n const elitImports: ImportMapEntry = {\n \"elit\": `${srcPath}/index${fileExt}`,\n \"elit/\": `${srcPath}/`,\n \"elit/dom\": `${srcPath}/dom${fileExt}`,\n \"elit/state\": `${srcPath}/state${fileExt}`,\n \"elit/style\": `${srcPath}/style${fileExt}`,\n \"elit/el\": `${srcPath}/el${fileExt}`,\n \"elit/router\": `${srcPath}/router${fileExt}`,\n \"elit/hmr\": `${srcPath}/hmr${fileExt}`,\n \"elit/types\": `${srcPath}/types${fileExt}`\n };\n\n // Generate external library imports\n const externalImports = await generateExternalImportMaps(rootDir, basePath);\n\n // Merge imports (Elit imports take precedence)\n const allImports = { ...externalImports, ...elitImports };\n\n return `<script type=\"importmap\">${JSON.stringify({ imports: allImports }, null, 2)}</script>`;\n};\n\n// Helper function to generate HMR script (reused in serveFile and serveSSR)\nconst createHMRScript = (port: number, wsPath: string): string =>\n `<script>(function(){let ws;let retries=0;let maxRetries=5;function connect(){ws=new WebSocket('ws://'+window.location.hostname+':${port}${wsPath}');ws.onopen=()=>{console.log('[Elit HMR] Connected');retries=0};ws.onmessage=(e)=>{const d=JSON.parse(e.data);if(d.type==='update'){console.log('[Elit HMR] File updated:',d.path);window.location.reload()}else if(d.type==='reload'){console.log('[Elit HMR] Reloading...');window.location.reload()}else if(d.type==='error')console.error('[Elit HMR] Error:',d.error)};ws.onclose=()=>{if(retries<maxRetries){retries++;setTimeout(connect,1000*retries)}else if(retries===maxRetries){console.log('[Elit HMR] Connection closed. Start dev server to reconnect.')}};ws.onerror=()=>{ws.close()}}connect()})();</script>`;\n\n// Helper function to rewrite relative paths with basePath (reused in serveFile and serveSSR)\nconst rewriteRelativePaths = (html: string, basePath: string): string => {\n if (!basePath) return html;\n // Rewrite paths starting with ./ or just relative paths (not starting with /, http://, https://)\n html = html.replace(/(<script[^>]+src=[\"'])(?!https?:\\/\\/|\\/)(\\.\\/)?([^\"']+)([\"'])/g, `$1${basePath}/$3$4`);\n html = html.replace(/(<link[^>]+href=[\"'])(?!https?:\\/\\/|\\/)(\\.\\/)?([^\"']+)([\"'])/g, `$1${basePath}/$3$4`);\n return html;\n};\n\n// Helper function to normalize basePath (reused in serveFile and serveSSR)\nconst normalizeBasePath = (basePath?: string): string => basePath && basePath !== '/' ? basePath : '';\n\n// Helper function to find dist or node_modules directory by walking up the directory tree\nasync function findSpecialDir(startDir: string, targetDir: string): Promise<string | null> {\n let currentDir = startDir;\n const maxLevels = 5; // Prevent infinite loop\n\n for (let i = 0; i < maxLevels; i++) {\n const targetPath = resolve(currentDir, targetDir);\n try {\n const stats = await stat(targetPath);\n if (stats.isDirectory()) {\n return currentDir; // Return the parent directory containing the target\n }\n } catch {\n // Directory doesn't exist, try parent\n }\n\n const parentDir = resolve(currentDir, '..');\n if (parentDir === currentDir) break; // Reached filesystem root\n currentDir = parentDir;\n }\n\n return null;\n}\n\n// ===== External Library Import Maps =====\n\ninterface PackageExports {\n [key: string]: string | PackageExports;\n}\n\ninterface PackageJson {\n name?: string;\n main?: string;\n module?: string;\n browser?: string | Record<string, string | false>;\n exports?: string | PackageExports | { [key: string]: any };\n type?: 'module' | 'commonjs';\n sideEffects?: boolean | string[];\n}\n\ninterface ImportMapEntry {\n [importName: string]: string;\n}\n\n// Cache for generated import maps to avoid re-scanning\nconst importMapCache = new Map<string, ImportMapEntry>();\n\n/**\n * Clear import map cache (useful when packages are added/removed)\n */\nexport function clearImportMapCache(): void {\n importMapCache.clear();\n}\n\n/**\n * Scan node_modules and generate import maps for external libraries\n */\nasync function generateExternalImportMaps(rootDir: string, basePath: string = ''): Promise<ImportMapEntry> {\n const cacheKey = `${rootDir}:${basePath}`;\n if (importMapCache.has(cacheKey)) {\n return importMapCache.get(cacheKey)!;\n }\n\n const importMap: ImportMapEntry = {};\n const nodeModulesPath = await findNodeModules(rootDir);\n\n if (!nodeModulesPath) {\n importMapCache.set(cacheKey, importMap);\n return importMap;\n }\n\n try {\n const { readdir } = await import('./fs');\n const packages = await readdir(nodeModulesPath);\n\n for (const pkgEntry of packages) {\n // Convert Dirent to string\n const pkg = typeof pkgEntry === 'string' ? pkgEntry : pkgEntry.name;\n\n // Skip special directories\n if (pkg.startsWith('.')) continue;\n\n // Handle scoped packages (@org/package)\n if (pkg.startsWith('@')) {\n try {\n const scopedPackages = await readdir(join(nodeModulesPath, pkg));\n for (const scopedEntry of scopedPackages) {\n const scopedPkg = typeof scopedEntry === 'string' ? scopedEntry : scopedEntry.name;\n const fullPkgName = `${pkg}/${scopedPkg}`;\n await processPackage(nodeModulesPath, fullPkgName, importMap, basePath);\n }\n } catch {\n // Skip if can't read scoped directory\n }\n } else {\n await processPackage(nodeModulesPath, pkg, importMap, basePath);\n }\n }\n } catch (error) {\n console.error('[Import Maps] Error scanning node_modules:', error);\n }\n\n importMapCache.set(cacheKey, importMap);\n return importMap;\n}\n\n/**\n * Find node_modules directory by walking up the directory tree\n */\nasync function findNodeModules(startDir: string): Promise<string | null> {\n const foundDir = await findSpecialDir(startDir, 'node_modules');\n return foundDir ? join(foundDir, 'node_modules') : null;\n}\n\n/**\n * Check if a package is browser-compatible\n */\nfunction isBrowserCompatible(pkgName: string, pkgJson: PackageJson): boolean {\n // Skip build tools, compilers, and Node.js-only packages\n const buildTools = [\n 'typescript', 'esbuild', '@esbuild/',\n 'tsx', 'tsup', 'rollup', 'vite', 'webpack', 'parcel',\n 'terser', 'uglify', 'babel', '@babel/',\n 'postcss', 'autoprefixer', 'cssnano',\n 'sass', 'less', 'stylus'\n ];\n\n const nodeOnly = [\n 'node-', '@node-', 'fsevents', 'chokidar',\n 'express', 'koa', 'fastify', 'nest',\n 'commander', 'yargs', 'inquirer', 'chalk', 'ora',\n 'nodemon', 'pm2', 'dotenv'\n ];\n\n const testingTools = [\n 'jest', 'vitest', 'mocha', 'chai', 'jasmine',\n '@jest/', '@testing-library/', '@vitest/',\n 'playwright', 'puppeteer', 'cypress'\n ];\n\n const linters = [\n 'eslint', '@eslint/', 'prettier', 'tslint',\n 'stylelint', 'commitlint'\n ];\n\n const typeDefinitions = [\n '@types/', '@typescript-eslint/'\n ];\n\n const utilities = [\n 'get-tsconfig', 'resolve-pkg-maps', 'pkg-types',\n 'fast-glob', 'globby', 'micromatch',\n 'execa', 'cross-spawn', 'shelljs'\n ];\n\n // Combine all skip lists\n const skipPatterns = [\n ...buildTools,\n ...nodeOnly,\n ...testingTools,\n ...linters,\n ...typeDefinitions,\n ...utilities\n ];\n\n // Check if package name matches skip patterns\n if (skipPatterns.some(pattern => pkgName.startsWith(pattern))) {\n return false;\n }\n\n // Skip CommonJS-only lodash (prefer lodash-es)\n if (pkgName === 'lodash') {\n return false;\n }\n\n // Prefer packages with explicit browser field or module field (ESM)\n if (pkgJson.browser || pkgJson.module) {\n return true;\n }\n\n // Prefer packages with exports field that includes \"import\" or \"browser\"\n if (pkgJson.exports) {\n const exportsStr = JSON.stringify(pkgJson.exports);\n if (exportsStr.includes('\"import\"') || exportsStr.includes('\"browser\"')) {\n return true;\n }\n }\n\n // Skip packages that are explicitly marked as type: \"commonjs\" without module/browser fields\n if (pkgJson.type === 'commonjs' && !pkgJson.module && !pkgJson.browser) {\n return false;\n }\n\n // Default: allow if it has exports or is type: \"module\"\n return !!(pkgJson.exports || pkgJson.type === 'module' || pkgJson.module);\n}\n\n/**\n * Process a single package and add its exports to the import map\n */\nasync function processPackage(\n nodeModulesPath: string,\n pkgName: string,\n importMap: ImportMapEntry,\n basePath: string\n): Promise<void> {\n const pkgPath = join(nodeModulesPath, pkgName);\n const pkgJsonPath = join(pkgPath, 'package.json');\n\n try {\n const pkgJsonContent = await readFile(pkgJsonPath);\n const pkgJson: PackageJson = JSON.parse(pkgJsonContent.toString());\n\n // Check if package is browser-compatible\n if (!isBrowserCompatible(pkgName, pkgJson)) {\n return;\n }\n\n const baseUrl = basePath ? `${basePath}/node_modules/${pkgName}` : `/node_modules/${pkgName}`;\n\n // Handle exports field (modern)\n if (pkgJson.exports) {\n processExportsField(pkgName, pkgJson.exports, baseUrl, importMap);\n }\n // Fallback to main/module/browser fields (legacy)\n else {\n const entryPoint = pkgJson.browser || pkgJson.module || pkgJson.main || 'index.js';\n importMap[pkgName] = `${baseUrl}/${entryPoint}`;\n\n // Add trailing slash for subpath imports\n importMap[`${pkgName}/`] = `${baseUrl}/`;\n }\n } catch {\n // Skip packages without package.json or invalid JSON\n }\n}\n\n/**\n * Process package.json exports field and add to import map\n */\nfunction processExportsField(\n pkgName: string,\n exports: string | PackageExports | { [key: string]: any },\n baseUrl: string,\n importMap: ImportMapEntry\n): void {\n // Simple string export\n if (typeof exports === 'string') {\n importMap[pkgName] = `${baseUrl}/${exports}`;\n importMap[`${pkgName}/`] = `${baseUrl}/`;\n return;\n }\n\n // Object exports\n if (typeof exports === 'object' && exports !== null) {\n // Handle \".\" export (main entry)\n if ('.' in exports) {\n const dotExport = exports['.'];\n const resolved = resolveExport(dotExport);\n if (resolved) {\n importMap[pkgName] = `${baseUrl}/${resolved}`;\n }\n } else if ('import' in exports) {\n // Root-level import/require\n const resolved = resolveExport(exports);\n if (resolved) {\n importMap[pkgName] = `${baseUrl}/${resolved}`;\n }\n }\n\n // Handle subpath exports\n for (const [key, value] of Object.entries(exports)) {\n if (key === '.' || key === 'import' || key === 'require' || key === 'types' || key === 'default') {\n continue;\n }\n\n const resolved = resolveExport(value);\n if (resolved) {\n // Remove leading ./ from key\n const cleanKey = key.startsWith('./') ? key.slice(2) : key;\n const importName = cleanKey ? `${pkgName}/${cleanKey}` : pkgName;\n importMap[importName] = `${baseUrl}/${resolved}`;\n }\n }\n\n // Always add trailing slash for subpath imports\n importMap[`${pkgName}/`] = `${baseUrl}/`;\n }\n}\n\n/**\n * Resolve export value to actual file path\n * Handles conditional exports (import/require/default)\n */\nfunction resolveExport(exportValue: any): string | null {\n if (typeof exportValue === 'string') {\n // Remove leading ./\n return exportValue.startsWith('./') ? exportValue.slice(2) : exportValue;\n }\n\n if (typeof exportValue === 'object' && exportValue !== null) {\n // Prefer import over require over default\n const resolved = exportValue.import || exportValue.browser || exportValue.default || exportValue.require;\n\n // Handle nested objects recursively (e.g., TypeScript's complex exports)\n if (typeof resolved === 'object' && resolved !== null) {\n return resolveExport(resolved);\n }\n\n if (typeof resolved === 'string') {\n return resolved.startsWith('./') ? resolved.slice(2) : resolved;\n }\n }\n\n return null;\n}\n\n// ===== Middleware =====\n\nexport function cors(options: {\n origin?: string | string[];\n methods?: string[];\n credentials?: boolean;\n maxAge?: number;\n} = {}): Middleware {\n const { origin = '*', methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], credentials = true, maxAge = 86400 } = options;\n\n return async (ctx, next) => {\n const requestOriginHeader = ctx.req.headers.origin;\n const requestOrigin = Array.isArray(requestOriginHeader) ? requestOriginHeader[0] : (requestOriginHeader || '');\n const allowOrigin = Array.isArray(origin) && origin.includes(requestOrigin) ? requestOrigin : (Array.isArray(origin) ? '' : origin);\n\n if (allowOrigin) ctx.res.setHeader('Access-Control-Allow-Origin', allowOrigin);\n ctx.res.setHeader('Access-Control-Allow-Methods', methods.join(', '));\n ctx.res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n if (credentials) ctx.res.setHeader('Access-Control-Allow-Credentials', 'true');\n ctx.res.setHeader('Access-Control-Max-Age', String(maxAge));\n\n if (ctx.req.method === 'OPTIONS') {\n ctx.res.writeHead(204);\n ctx.res.end();\n return;\n }\n await next();\n };\n}\n\nexport function logger(options: { format?: 'simple' | 'detailed' } = {}): Middleware {\n const { format = 'simple' } = options;\n return async (ctx, next) => {\n const start = Date.now();\n const { method, url } = ctx.req;\n await next();\n const duration = Date.now() - start;\n const status = ctx.res.statusCode;\n console.log(format === 'detailed' ? `[${new Date().toISOString()}] ${method} ${url} ${status} - ${duration}ms` : `${method} ${url} - ${status} (${duration}ms)`);\n };\n}\n\nexport function errorHandler(): Middleware {\n return async (ctx, next) => {\n try {\n await next();\n } catch (error) {\n console.error('Error:', error);\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Internal Server Error', message: error instanceof Error ? error.message : 'Unknown error' }));\n }\n }\n };\n}\n\nexport function rateLimit(options: { windowMs?: number; max?: number; message?: string } = {}): Middleware {\n const { windowMs = 60000, max = 100, message = 'Too many requests' } = options;\n const clients = new Map<string, { count: number; resetTime: number }>();\n\n return async (ctx, next) => {\n const ip = ctx.req.socket.remoteAddress || 'unknown';\n const now = Date.now();\n let clientData = clients.get(ip);\n\n if (!clientData || now > clientData.resetTime) {\n clientData = { count: 0, resetTime: now + windowMs };\n clients.set(ip, clientData);\n }\n\n if (++clientData.count > max) {\n ctx.res.writeHead(429, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: message }));\n return;\n }\n await next();\n };\n}\n\nexport function bodyLimit(options: { limit?: number } = {}): Middleware {\n const { limit = 1024 * 1024 } = options;\n return async (ctx, next) => {\n const contentLength = ctx.req.headers['content-length'];\n const contentLengthStr = Array.isArray(contentLength) ? contentLength[0] : (contentLength || '0');\n if (parseInt(contentLengthStr, 10) > limit) {\n ctx.res.writeHead(413, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Request body too large' }));\n return;\n }\n await next();\n };\n}\n\nexport function cacheControl(options: { maxAge?: number; public?: boolean } = {}): Middleware {\n const { maxAge = 3600, public: isPublic = true } = options;\n return async (ctx, next) => {\n ctx.res.setHeader('Cache-Control', `${isPublic ? 'public' : 'private'}, max-age=${maxAge}`);\n await next();\n };\n}\n\nexport function compress(): Middleware {\n return async (ctx, next) => {\n const acceptEncoding = ctx.req.headers['accept-encoding'] || '';\n if (!acceptEncoding.includes('gzip')) {\n await next();\n return;\n }\n\n // Store original end method\n const originalEnd = ctx.res.end.bind(ctx.res);\n const chunks: Buffer[] = [];\n\n // Intercept response data\n ctx.res.write = ((chunk: any) => {\n chunks.push(Buffer.from(chunk));\n return true;\n }) as any;\n\n ctx.res.end = ((chunk?: any) => {\n if (chunk) chunks.push(Buffer.from(chunk));\n\n const buffer = Buffer.concat(chunks);\n const { gzipSync } = require('zlib');\n const compressed = gzipSync(buffer);\n\n ctx.res.setHeader('Content-Encoding', 'gzip');\n ctx.res.setHeader('Content-Length', compressed.length);\n originalEnd(compressed);\n return ctx.res;\n }) as any;\n\n await next();\n };\n}\n\nexport function security(): Middleware {\n return async (ctx, next) => {\n ctx.res.setHeader('X-Content-Type-Options', 'nosniff');\n ctx.res.setHeader('X-Frame-Options', 'DENY');\n ctx.res.setHeader('X-XSS-Protection', '1; mode=block');\n ctx.res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');\n await next();\n };\n}\n\n// ===== Proxy Handler =====\n\nfunction rewritePath(path: string, pathRewrite?: Record<string, string>): string {\n if (!pathRewrite) return path;\n\n for (const [from, to] of Object.entries(pathRewrite)) {\n const regex = new RegExp(from);\n if (regex.test(path)) {\n return path.replace(regex, to);\n }\n }\n return path;\n}\n\nexport function createProxyHandler(proxyConfigs: ProxyConfig[]) {\n return async (req: IncomingMessage, res: ServerResponse): Promise<boolean> => {\n const url = req.url || '/';\n const path = url.split('?')[0];\n\n // Find matching proxy configuration (first match wins)\n const proxy = proxyConfigs.find(p => path.startsWith(p.context));\n if (!proxy) return false;\n\n const { target, changeOrigin, pathRewrite, headers } = proxy;\n\n try {\n const targetUrl = new URL(target);\n const isHttps = targetUrl.protocol === 'https:';\n const requestLib = isHttps ? httpsRequest : httpRequest;\n\n // Rewrite path if needed\n let proxyPath = rewritePath(url, pathRewrite);\n\n // Build the full proxy URL\n const proxyUrl = `${isHttps ? 'https' : 'http'}://${targetUrl.hostname}:${targetUrl.port || (isHttps ? 443 : 80)}${proxyPath}`;\n\n // Build proxy request options\n const proxyReqHeaders: Record<string, string | number | string[]> = {};\n for (const [key, value] of Object.entries(req.headers)) {\n if (value !== undefined) {\n proxyReqHeaders[key] = value;\n }\n }\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n proxyReqHeaders[key] = value;\n }\n }\n }\n\n // Change origin if requested (or remove host header if not)\n if (changeOrigin) {\n proxyReqHeaders.host = targetUrl.host;\n } else {\n delete proxyReqHeaders['host'];\n }\n\n const proxyReqOptions = {\n method: req.method,\n headers: proxyReqHeaders\n };\n\n // Create proxy request\n const proxyReq = requestLib(proxyUrl, proxyReqOptions, (proxyRes) => {\n // Forward status code and headers - convert incoming headers properly\n const outgoingHeaders: Record<string, string | number | string[]> = {};\n for (const [key, value] of Object.entries(proxyRes.headers)) {\n if (value !== undefined) {\n outgoingHeaders[key] = value;\n }\n }\n res.writeHead(proxyRes.statusCode || 200, outgoingHeaders);\n\n // Pipe response using read/write instead of pipe\n proxyRes.on('data', (chunk) => res.write(chunk));\n proxyRes.on('end', () => res.end());\n });\n\n // Handle errors\n proxyReq.on('error', (error) => {\n console.error('[Proxy] Error proxying %s to %s:', url, target, error.message);\n if (!res.headersSent) {\n json(res, { error: 'Bad Gateway', message: 'Proxy error' }, 502);\n }\n });\n\n // Forward request body\n req.on('data', (chunk) => proxyReq.write(chunk));\n req.on('end', () => proxyReq.end());\n\n return true;\n } catch (error) {\n console.error('[Proxy] Invalid proxy configuration for %s:', path, error);\n return false;\n }\n };\n}\n\n// ===== State Management =====\n\nexport type StateChangeHandler<T = any> = (value: T, oldValue: T) => void;\n\nexport interface SharedStateOptions<T = any> {\n initial: T;\n persist?: boolean;\n validate?: (value: T) => boolean;\n}\n\nexport class SharedState<T = any> {\n private _value: T;\n private listeners = new Set<WebSocket>();\n private changeHandlers = new Set<StateChangeHandler<T>>();\n private options: SharedStateOptions<T>;\n\n constructor(\n public readonly key: string,\n options: SharedStateOptions<T>\n ) {\n this.options = options;\n this._value = options.initial;\n }\n\n get value(): T {\n return this._value;\n }\n\n set value(newValue: T) {\n if (this.options.validate && !this.options.validate(newValue)) {\n throw new Error(`Invalid state value for \"${this.key}\"`);\n }\n\n const oldValue = this._value;\n this._value = newValue;\n\n this.changeHandlers.forEach(handler => {\n handler(newValue, oldValue);\n });\n\n this.broadcast();\n }\n\n update(updater: (current: T) => T): void {\n this.value = updater(this._value);\n }\n\n subscribe(ws: WebSocket): void {\n this.listeners.add(ws);\n this.sendTo(ws);\n }\n\n unsubscribe(ws: WebSocket): void {\n this.listeners.delete(ws);\n }\n\n onChange(handler: StateChangeHandler<T>): () => void {\n this.changeHandlers.add(handler);\n return () => this.changeHandlers.delete(handler);\n }\n\n private broadcast(): void {\n const message = JSON.stringify({ type: 'state:update', key: this.key, value: this._value, timestamp: Date.now() });\n this.listeners.forEach(ws => ws.readyState === ReadyState.OPEN && ws.send(message));\n }\n\n private sendTo(ws: WebSocket): void {\n if (ws.readyState === ReadyState.OPEN) {\n ws.send(JSON.stringify({ type: 'state:init', key: this.key, value: this._value, timestamp: Date.now() }));\n }\n }\n\n get subscriberCount(): number {\n return this.listeners.size;\n }\n\n clear(): void {\n this.listeners.clear();\n this.changeHandlers.clear();\n }\n}\n\nexport class StateManager {\n private states = new Map<string, SharedState<any>>();\n\n create<T>(key: string, options: SharedStateOptions<T>): SharedState<T> {\n if (this.states.has(key)) return this.states.get(key) as SharedState<T>;\n const state = new SharedState<T>(key, options);\n this.states.set(key, state);\n return state;\n }\n\n get<T>(key: string): SharedState<T> | undefined {\n return this.states.get(key) as SharedState<T>;\n }\n\n has(key: string): boolean {\n return this.states.has(key);\n }\n\n delete(key: string): boolean {\n const state = this.states.get(key);\n if (state) {\n state.clear();\n return this.states.delete(key);\n }\n return false;\n }\n\n subscribe(key: string, ws: WebSocket): void {\n this.states.get(key)?.subscribe(ws);\n }\n\n unsubscribe(key: string, ws: WebSocket): void {\n this.states.get(key)?.unsubscribe(ws);\n }\n\n unsubscribeAll(ws: WebSocket): void {\n this.states.forEach(state => state.unsubscribe(ws));\n }\n\n handleStateChange(key: string, value: any): void {\n const state = this.states.get(key);\n if (state) state.value = value;\n }\n\n keys(): string[] {\n return Array.from(this.states.keys());\n }\n\n clear(): void {\n this.states.forEach(state => state.clear());\n this.states.clear();\n }\n}\n\n// ===== Development Server =====\n\nconst defaultOptions: Omit<Required<DevServerOptions>, 'api' | 'clients' | 'root' | 'basePath' | 'ssr' | 'proxy' | 'index' | 'env' | 'domain'> = {\n port: 3000,\n host: 'localhost',\n https: false,\n open: true,\n watch: ['**/*.ts', '**/*.js', '**/*.html', '**/*.css'],\n ignore: ['node_modules/**', 'dist/**', '.git/**', '**/*.d.ts'],\n logging: true,\n worker: [],\n mode: 'dev'\n};\n\ninterface NormalizedClient {\n root: string;\n basePath: string;\n index?: string;\n ssr?: () => Child | string;\n api?: ServerRouter;\n proxyHandler?: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;\n mode: 'dev' | 'preview';\n}\n\nexport function createDevServer(options: DevServerOptions): DevServer {\n const config = { ...defaultOptions, ...options };\n const wsClients = new Set<WebSocket>();\n const stateManager = new StateManager();\n\n // Clear import map cache in dev mode to ensure fresh scans\n if (config.mode === 'dev') {\n clearImportMapCache();\n }\n\n // Normalize clients configuration - support both new API (clients array) and legacy API (root/basePath)\n const clientsToNormalize = config.clients?.length ? config.clients : config.root ? [{ root: config.root, basePath: config.basePath || '', index: config.index, ssr: config.ssr, api: config.api, proxy: config.proxy, mode: config.mode }] : null;\n if (!clientsToNormalize) throw new Error('DevServerOptions must include either \"clients\" array or \"root\" directory');\n\n const normalizedClients: NormalizedClient[] = clientsToNormalize.map(client => {\n let basePath = client.basePath || '';\n if (basePath) {\n // Remove leading/trailing slashes safely without ReDoS vulnerability\n while (basePath.startsWith('/')) basePath = basePath.slice(1);\n while (basePath.endsWith('/')) basePath = basePath.slice(0, -1);\n basePath = basePath ? '/' + basePath : '';\n }\n\n // Normalize index path - convert ./path to /path\n let indexPath = client.index;\n if (indexPath) {\n // Remove leading ./ and ensure it starts with /\n indexPath = indexPath.replace(/^\\.\\//, '/');\n if (!indexPath.startsWith('/')) {\n indexPath = '/' + indexPath;\n }\n }\n\n return {\n root: client.root,\n basePath,\n index: indexPath,\n ssr: client.ssr,\n api: client.api,\n proxyHandler: client.proxy ? createProxyHandler(client.proxy) : undefined,\n mode: client.mode || 'dev'\n };\n });\n\n // Create global proxy handler if proxy config exists\n const globalProxyHandler = config.proxy ? createProxyHandler(config.proxy) : null;\n\n // HTTP Server\n const server = createServer(async (req: IncomingMessage, res: ServerResponse) => {\n const originalUrl = req.url || '/';\n const hostHeader = req.headers.host;\n const hostName = hostHeader ? (Array.isArray(hostHeader) ? hostHeader[0] : hostHeader).split(':')[0] : '';\n\n // Handle domain mapping: redirect localhost:port to configured domain\n if (config.domain && hostName === (config.host || 'localhost')) {\n const redirectUrl = `http://${config.domain}${originalUrl}`;\n if (config.logging) {\n console.log(`[Domain Map] ${hostName}:${config.port}${originalUrl} -> ${redirectUrl}`);\n }\n res.writeHead(302, { Location: redirectUrl });\n res.end();\n return;\n }\n\n // Find matching client based on basePath\n const matchedClient = normalizedClients.find(c => c.basePath && originalUrl.startsWith(c.basePath)) || normalizedClients.find(c => !c.basePath);\n if (!matchedClient) return send404(res, '404 Not Found');\n\n // Try client-specific proxy first\n if (matchedClient.proxyHandler) {\n try {\n const proxied = await matchedClient.proxyHandler(req, res);\n if (proxied) {\n if (config.logging) console.log(`[Proxy] ${req.method} ${originalUrl} -> proxied (client-specific)`);\n return;\n }\n } catch (error) {\n console.error('[Proxy] Error (client-specific):', error);\n }\n }\n\n // Try global proxy if client-specific didn't match\n if (globalProxyHandler) {\n try {\n const proxied = await globalProxyHandler(req, res);\n if (proxied) {\n if (config.logging) console.log(`[Proxy] ${req.method} ${originalUrl} -> proxied (global)`);\n return;\n }\n } catch (error) {\n console.error('[Proxy] Error (global):', error);\n }\n }\n\n const url = matchedClient.basePath ? (originalUrl.slice(matchedClient.basePath.length) || '/') : originalUrl;\n\n // Try client-specific API routes first\n if (matchedClient.api && url.startsWith('/api')) {\n const handled = await matchedClient.api.handle(req, res);\n if (handled) return;\n }\n\n // Try global API routes (fallback)\n if (config.api && url.startsWith('/api')) {\n const handled = await config.api.handle(req, res);\n if (handled) return;\n }\n\n // If we reach here and it's a POST/PUT/PATCH to /api/*, return 405\n if (url.startsWith('/api') && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method || '')) {\n if (!res.headersSent) {\n if (config.logging) console.log(`[405] ${req.method} ${url} - Method not allowed`);\n res.writeHead(405, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Method Not Allowed', message: 'No API route found for this request' }));\n }\n return;\n }\n\n // For root path requests, prioritize SSR over index files if SSR is configured\n let filePath: string;\n if (url === '/' && matchedClient.ssr && !matchedClient.index) {\n // Use SSR directly when configured and no custom index specified\n return await serveSSR(res, matchedClient);\n } else {\n // Use custom index file if specified, otherwise default to /index.html\n filePath = url === '/' ? (matchedClient.index || '/index.html') : url;\n }\n\n // Remove query string\n filePath = filePath.split('?')[0];\n\n if (config.logging && filePath === '/src/pages') {\n console.log(`[DEBUG] Request for /src/pages received`);\n }\n\n // Security: Check for null bytes early\n if (filePath.includes('\\0')) {\n if (config.logging) console.log(`[403] Rejected path with null byte: ${filePath}`);\n return send403(res, '403 Forbidden');\n }\n\n // Handle /dist/* and /node_modules/* requests - serve from parent folder\n const isDistRequest = filePath.startsWith('/dist/');\n const isNodeModulesRequest = filePath.startsWith('/node_modules/');\n let normalizedPath: string;\n\n // Normalize and validate the path for both /dist/* and regular requests\n const tempPath = normalize(filePath).replace(/\\\\/g, '/').replace(/^\\/+/, '');\n if (tempPath.includes('..')) {\n if (config.logging) console.log(`[403] Path traversal attempt: ${filePath}`);\n return send403(res, '403 Forbidden');\n }\n normalizedPath = tempPath;\n\n // Resolve file path\n const rootDir = await realpath(resolve(matchedClient.root));\n let baseDir = rootDir;\n\n // Auto-detect base directory for /dist/* and /node_modules/* requests\n if (isDistRequest || isNodeModulesRequest) {\n const targetDir = isDistRequest ? 'dist' : 'node_modules';\n const foundDir = await findSpecialDir(matchedClient.root, targetDir);\n baseDir = foundDir ? await realpath(foundDir) : rootDir;\n }\n\n let fullPath;\n\n try {\n // First check path without resolving symlinks for security\n const unresolvedPath = resolve(join(baseDir, normalizedPath));\n if (!unresolvedPath.startsWith(baseDir.endsWith(sep) ? baseDir : baseDir + sep)) {\n if (config.logging) console.log(`[403] File access outside of root (before symlink): ${unresolvedPath}`);\n return send403(res, '403 Forbidden');\n }\n\n // Then resolve symlinks to get actual file\n fullPath = await realpath(unresolvedPath);\n if (config.logging && filePath === '/src/pages') {\n console.log(`[DEBUG] Initial resolve succeeded: ${fullPath}`);\n }\n } catch (firstError) {\n // If file not found, try different extensions\n let resolvedPath: string | undefined;\n\n if (config.logging && !normalizedPath.includes('.')) {\n console.log(`[DEBUG] File not found: ${normalizedPath}, trying extensions...`);\n }\n\n // If .js file not found, try .ts file\n if (normalizedPath.endsWith('.js')) {\n const tsPath = normalizedPath.replace(/\\.js$/, '.ts');\n try {\n const tsFullPath = await realpath(resolve(join(baseDir, tsPath)));\n // Security: Ensure path is strictly within the allowed root directory\n if (!tsFullPath.startsWith(baseDir.endsWith(sep) ? baseDir : baseDir + sep)) {\n if (config.logging) console.log(`[403] Fallback TS path outside of root: ${tsFullPath}`);\n return send403(res, '403 Forbidden');\n }\n resolvedPath = tsFullPath;\n } catch {\n // Continue to next attempt\n }\n }\n\n // If no extension, try adding .ts or .js, or index files\n if (!resolvedPath && !normalizedPath.includes('.')) {\n // Try .ts first\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath + '.ts')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}.ts`);\n } catch {\n // Try .js\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath + '.js')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}.js`);\n } catch {\n // Try index.ts in directory\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath, 'index.ts')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}/index.ts`);\n } catch {\n // Try index.js in directory\n try {\n resolvedPath = await realpath(resolve(join(baseDir, normalizedPath, 'index.js')));\n if (config.logging) console.log(`[DEBUG] Found: ${normalizedPath}/index.js`);\n } catch {\n if (config.logging) console.log(`[DEBUG] Not found: all attempts failed for ${normalizedPath}`);\n }\n }\n }\n }\n }\n\n if (!resolvedPath) {\n if (!res.headersSent) {\n // If index.html not found but SSR function exists, use SSR\n if (filePath === '/index.html' && matchedClient.ssr) {\n return await serveSSR(res, matchedClient);\n }\n if (config.logging) console.log(`[404] ${filePath}`);\n return send404(res, '404 Not Found');\n }\n return;\n }\n\n fullPath = resolvedPath;\n }\n\n // Check if resolved path is a directory, try index files\n try {\n const stats = await stat(fullPath);\n if (stats.isDirectory()) {\n if (config.logging) console.log(`[DEBUG] Path is directory: ${fullPath}, trying index files...`);\n let indexPath: string | undefined;\n\n // Try index.ts first\n try {\n indexPath = await realpath(resolve(join(fullPath, 'index.ts')));\n if (config.logging) console.log(`[DEBUG] Found index.ts in directory`);\n } catch {\n // Try index.js\n try {\n indexPath = await realpath(resolve(join(fullPath, 'index.js')));\n if (config.logging) console.log(`[DEBUG] Found index.js in directory`);\n } catch {\n if (config.logging) console.log(`[DEBUG] No index file found in directory`);\n // If index.html not found in directory but SSR function exists, use SSR\n if (matchedClient.ssr) {\n return await serveSSR(res, matchedClient);\n }\n return send404(res, '404 Not Found');\n }\n }\n\n fullPath = indexPath;\n }\n } catch (statError) {\n if (config.logging) console.log(`[404] ${filePath}`);\n return send404(res, '404 Not Found');\n }\n\n // Security check already done before resolving symlinks (line 733)\n // No need to check again after symlink resolution as that would block legitimate symlinks\n\n try {\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n try {\n const indexPath = await realpath(resolve(join(fullPath, 'index.html')));\n if (!indexPath.startsWith(rootDir + sep) && indexPath !== rootDir) {\n return send403(res, '403 Forbidden');\n }\n await stat(indexPath);\n return serveFile(indexPath, req, res, matchedClient, isDistRequest || isNodeModulesRequest);\n } catch {\n return send404(res, '404 Not Found');\n }\n }\n\n await serveFile(fullPath, req, res, matchedClient, isDistRequest || isNodeModulesRequest);\n } catch (error) {\n // Only send 404 if response hasn't been sent yet\n if (!res.headersSent) {\n if (config.logging) console.log(`[404] ${filePath}`);\n send404(res, '404 Not Found');\n }\n }\n });\n\n // Serve file helper\n async function serveFile(filePath: string, req: IncomingMessage, res: ServerResponse, client: NormalizedClient, isNodeModulesOrDist: boolean = false) {\n // Escape arbitrary text for safe embedding inside a JavaScript template literal.\n // This ensures that backslashes, backticks and `${` sequences are correctly escaped.\n function escapeForTemplateLiteral(input: string): string {\n return input\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/`/g, '\\\\`')\n .replace(/\\$\\{/g, '\\\\${');\n }\n\n try {\n const rootDir = await realpath(resolve(client.root));\n\n // Security: Check path before resolving symlinks\n const unresolvedPath = resolve(filePath);\n\n // Skip security check for node_modules and dist (these may be symlinks)\n if (!isNodeModulesOrDist) {\n // Check if path is within project root\n if (!unresolvedPath.startsWith(rootDir + sep) && unresolvedPath !== rootDir) {\n if (config.logging) console.log(`[403] Attempted to serve file outside allowed directories: ${filePath}`);\n return send403(res, '403 Forbidden');\n }\n }\n\n // Resolve symlinks to get actual file path\n let resolvedPath;\n try {\n resolvedPath = await realpath(unresolvedPath);\n\n // For symlinked packages (like node_modules/elit), allow serving from outside rootDir\n if (isNodeModulesOrDist && resolvedPath) {\n // Allow it - this is a symlinked package\n if (config.logging && !resolvedPath.startsWith(rootDir + sep)) {\n console.log(`[DEBUG] Serving symlinked file: ${resolvedPath}`);\n }\n }\n } catch {\n // If index.html not found but SSR function exists, use SSR\n if (filePath.endsWith('index.html') && client.ssr) {\n return await serveSSR(res, client);\n }\n return send404(res, '404 Not Found');\n }\n\n let content = await readFile(resolvedPath);\n const ext = extname(resolvedPath);\n let mimeType = lookup(resolvedPath) || 'application/octet-stream';\n\n // Handle CSS imports as JavaScript modules (like Vite)\n // When CSS is imported in JS/TS with ?inline query, transform it to a JS module that injects styles\n const urlQuery = req.url?.split('?')[1] || '';\n const isInlineCSS = urlQuery.includes('inline');\n\n if (ext === '.css' && isInlineCSS) {\n // Transform CSS to JavaScript module that injects styles\n const cssContent = escapeForTemplateLiteral(content.toString());\n const jsModule = `\nconst css = \\`${cssContent}\\`;\nconst style = document.createElement('style');\nstyle.setAttribute('data-file', '${filePath}');\nstyle.textContent = css;\ndocument.head.appendChild(style);\nexport default css;\n`;\n content = Buffer.from(jsModule);\n mimeType = 'application/javascript';\n }\n\n // Handle TypeScript files - transpile only (no bundling)\n if (ext === '.ts' || ext === '.tsx') {\n try {\n let transpiled: string;\n\n if (isDeno) {\n // Deno - use Deno.emit\n // @ts-ignore\n const result = await Deno.emit(resolvedPath, {\n check: false,\n compilerOptions: {\n sourceMap: true,\n inlineSourceMap: true,\n target: 'ES2020',\n module: 'esnext'\n },\n sources: {\n [resolvedPath]: content.toString()\n }\n });\n\n transpiled = result.files[resolvedPath.replace(/\\.tsx?$/, '.js')] || '';\n\n } else if (isBun) {\n // Bun - use Bun.Transpiler\n // @ts-ignore\n const transpiler = new Bun.Transpiler({\n loader: ext === '.tsx' ? 'tsx' : 'ts',\n target: 'browser'\n });\n\n // @ts-ignore\n transpiled = transpiler.transformSync(content.toString());\n } else {\n // Node.js - use esbuild\n const { transformSync } = await import('esbuild');\n const loader = ext === '.tsx' ? 'tsx' : 'ts';\n const result = transformSync(content.toString(), {\n loader: loader as any,\n format: 'esm',\n target: 'es2020',\n sourcemap: 'inline'\n });\n\n transpiled = result.code;\n }\n\n // Rewrite .ts imports to .js for browser compatibility\n // This allows developers to write import './file.ts' in their source code\n // and the dev server will automatically rewrite it to import './file.js'\n transpiled = transpiled.replace(\n /from\\s+[\"']([^\"']+)\\.ts(x?)[\"']/g,\n (_, path, tsx) => `from \"${path}.js${tsx}\"`\n );\n transpiled = transpiled.replace(\n /import\\s+[\"']([^\"']+)\\.ts(x?)[\"']/g,\n (_, path, tsx) => `import \"${path}.js${tsx}\"`\n );\n\n // Rewrite CSS imports to add ?inline query parameter\n // This tells the server to return CSS as a JavaScript module\n transpiled = transpiled.replace(\n /import\\s+[\"']([^\"']+\\.css)[\"']/g,\n (_, path) => `import \"${path}?inline\"`\n );\n transpiled = transpiled.replace(\n /from\\s+[\"']([^\"']+\\.css)[\"']/g,\n (_, path) => `from \"${path}?inline\"`\n );\n\n content = Buffer.from(transpiled);\n mimeType = 'application/javascript';\n } catch (error) {\n if (config.logging) console.error('[500] TypeScript compilation error:', error);\n return send500(res, `TypeScript compilation error:\\n${error}`);\n }\n }\n\n // Inject HMR client and import map for HTML files\n if (ext === '.html') {\n const wsPath = normalizeBasePath(client.basePath);\n const hmrScript = createHMRScript(config.port, wsPath);\n let html = content.toString();\n\n // If SSR is configured, extract and inject styles from SSR\n let ssrStyles = '';\n if (client.ssr) {\n try {\n const result = client.ssr();\n let ssrHtml: string;\n\n // Convert SSR result to string\n if (typeof result === 'string') {\n ssrHtml = result;\n } else if (typeof result === 'object' && result !== null && 'tagName' in result) {\n ssrHtml = dom.renderToString(result as VNode);\n } else {\n ssrHtml = String(result);\n }\n\n // Extract <style> tags from SSR output\n const styleMatches = ssrHtml.match(/<style[^>]*>[\\s\\S]*?<\\/style>/g);\n if (styleMatches) {\n ssrStyles = styleMatches.join('\\n');\n }\n } catch (error) {\n if (config.logging) console.error('[Warning] Failed to extract styles from SSR:', error);\n }\n }\n\n // Fix relative paths to use basePath\n const basePath = normalizeBasePath(client.basePath);\n html = rewriteRelativePaths(html, basePath);\n\n // Inject base tag if basePath is configured and not '/'\n if (client.basePath && client.basePath !== '/') {\n const baseTag = `<base href=\"${client.basePath}/\">`;\n // Check if base tag already exists\n if (!html.includes('<base')) {\n // Try to inject after viewport meta tag\n if (html.includes('<meta name=\"viewport\"')) {\n html = html.replace(\n /<meta name=\"viewport\"[^>]*>/,\n (match) => `${match}\\n ${baseTag}`\n );\n } else if (html.includes('<head>')) {\n // If no viewport, inject right after <head>\n html = html.replace('<head>', `<head>\\n ${baseTag}`);\n }\n }\n }\n\n // Inject import map and SSR styles into <head>\n const elitImportMap = await createElitImportMap(client.root, basePath, client.mode);\n const headInjection = ssrStyles ? `${ssrStyles}\\n${elitImportMap}` : elitImportMap;\n html = html.includes('</head>') ? html.replace('</head>', `${headInjection}</head>`) : html;\n html = html.includes('</body>') ? html.replace('</body>', `${hmrScript}</body>`) : html + hmrScript;\n content = Buffer.from(html);\n }\n\n // Set cache headers based on file type\n const cacheControl = ext === '.html' || ext === '.ts' || ext === '.tsx'\n ? 'no-cache, no-store, must-revalidate' // Don't cache HTML/TS files in dev\n : 'public, max-age=31536000, immutable'; // Cache static assets for 1 year\n\n const headers: any = {\n 'Content-Type': mimeType,\n 'Cache-Control': cacheControl\n };\n\n // Apply gzip compression for text-based files\n const compressible = /^(text\\/|application\\/(javascript|json|xml))/.test(mimeType);\n\n if (compressible && content.length > 1024) {\n const { gzipSync } = require('zlib');\n const compressed = gzipSync(content);\n headers['Content-Encoding'] = 'gzip';\n headers['Content-Length'] = compressed.length;\n res.writeHead(200, headers);\n res.end(compressed);\n } else {\n res.writeHead(200, headers);\n res.end(content);\n }\n\n if (config.logging) console.log(`[200] ${relative(client.root, filePath)}`);\n } catch (error) {\n if (config.logging) console.error('[500] Error reading file:', error);\n send500(res, '500 Internal Server Error');\n }\n }\n\n // SSR helper - Generate HTML from SSR function\n async function serveSSR(res: ServerResponse, client: NormalizedClient) {\n try {\n if (!client.ssr) {\n return send500(res, 'SSR function not configured');\n }\n\n const result = client.ssr();\n let html: string;\n\n // If result is a string, use it directly\n if (typeof result === 'string') {\n html = result;\n }\n // If result is a VNode, render it to HTML string\n else if (typeof result === 'object' && result !== null && 'tagName' in result) {\n const vnode = result as VNode;\n if (vnode.tagName === 'html') {\n html = dom.renderToString(vnode);\n } else {\n // Wrap in basic HTML structure if not html tag\n html = `<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></head><body>${dom.renderToString(vnode)}</body></html>`;\n }\n } else {\n html = String(result);\n }\n\n // Fix relative paths to use basePath\n const basePath = normalizeBasePath(client.basePath);\n html = rewriteRelativePaths(html, basePath);\n\n // Inject HMR script\n const hmrScript = createHMRScript(config.port, basePath);\n\n // Inject import map in head, HMR script in body\n const elitImportMap = await createElitImportMap(client.root, basePath, client.mode);\n html = html.includes('</head>') ? html.replace('</head>', `${elitImportMap}</head>`) : html;\n html = html.includes('</body>') ? html.replace('</body>', `${hmrScript}</body>`) : html + hmrScript;\n\n res.writeHead(200, { 'Content-Type': 'text/html', 'Cache-Control': 'no-cache, no-store, must-revalidate' });\n res.end(html);\n\n if (config.logging) console.log(`[200] SSR rendered`);\n } catch (error) {\n if (config.logging) console.error('[500] SSR Error:', error);\n send500(res, '500 SSR Error');\n }\n }\n\n // WebSocket Server for HMR\n const wss = new WebSocketServer({ server });\n\n if (config.logging) {\n console.log('[HMR] WebSocket server initialized');\n }\n\n wss.on('connection', (ws: WebSocket, req) => {\n wsClients.add(ws);\n\n const message: HMRMessage = { type: 'connected', timestamp: Date.now() };\n ws.send(JSON.stringify(message));\n\n if (config.logging) {\n console.log('[HMR] Client connected from', req.socket.remoteAddress);\n }\n\n // Handle incoming messages\n ws.on('message', (data: string) => {\n try {\n const msg = JSON.parse(data.toString());\n\n // Handle state subscription\n if (msg.type === 'state:subscribe') {\n stateManager.subscribe(msg.key, ws);\n if (config.logging) {\n console.log(`[State] Client subscribed to \"${msg.key}\"`);\n }\n }\n\n // Handle state unsubscribe\n else if (msg.type === 'state:unsubscribe') {\n stateManager.unsubscribe(msg.key, ws);\n if (config.logging) {\n console.log(`[State] Client unsubscribed from \"${msg.key}\"`);\n }\n }\n\n // Handle state change from client\n else if (msg.type === 'state:change') {\n stateManager.handleStateChange(msg.key, msg.value);\n if (config.logging) {\n console.log(`[State] Client updated \"${msg.key}\"`);\n }\n }\n } catch (error) {\n if (config.logging) {\n console.error('[WebSocket] Message parse error:', error);\n }\n }\n });\n\n ws.on('close', () => {\n wsClients.delete(ws);\n stateManager.unsubscribeAll(ws);\n if (config.logging) {\n console.log('[HMR] Client disconnected');\n }\n });\n });\n\n // File watcher - watch all client roots\n const watchPaths = normalizedClients.flatMap(client =>\n config.watch.map(pattern => join(client.root, pattern))\n );\n\n const watcher = watch(watchPaths, {\n ignored: (path: string) => config.ignore.some(pattern => path.includes(pattern.replace('/**', '').replace('**/', ''))),\n ignoreInitial: true,\n persistent: true\n });\n\n watcher.on('change', (path: string) => {\n if (config.logging) console.log(`[HMR] File changed: ${path}`);\n const message = JSON.stringify({ type: 'update', path, timestamp: Date.now() } as HMRMessage);\n // Broadcast to all open clients with error handling\n wsClients.forEach(client => {\n if (client.readyState === ReadyState.OPEN) {\n client.send(message, {}, (err?: Error) => {\n // Silently ignore connection errors during HMR\n const code = (err as any)?.code;\n if (code === 'ECONNABORTED' || code === 'ECONNRESET' || code === 'EPIPE' || code === 'WS_NOT_OPEN') {\n // Client disconnected - will be removed from clients set by close event\n return;\n }\n });\n }\n });\n });\n\n watcher.on('add', (path: string) => config.logging && console.log(`[HMR] File added: ${path}`));\n watcher.on('unlink', (path: string) => config.logging && console.log(`[HMR] File removed: ${path}`));\n\n // Increase max listeners to prevent warnings\n server.setMaxListeners(20);\n\n // Start server\n server.listen(config.port, config.host, () => {\n if (config.logging) {\n console.log('\\n🚀 Elit Dev Server');\n console.log(`\\n ➜ Local: http://${config.host}:${config.port}`);\n\n if (normalizedClients.length > 1) {\n console.log(` ➜ Clients:`);\n normalizedClients.forEach(client => {\n const clientUrl = `http://${config.host}:${config.port}${client.basePath}`;\n console.log(` - ${clientUrl} → ${client.root}`);\n });\n } else {\n const client = normalizedClients[0];\n console.log(` ➜ Root: ${client.root}`);\n if (client.basePath) {\n console.log(` ➜ Base: ${client.basePath}`);\n }\n }\n\n console.log(`\\n[HMR] Watching for file changes...\\n`);\n }\n\n // Open browser to first client\n if (config.open && normalizedClients.length > 0) {\n const firstClient = normalizedClients[0];\n const url = `http://${config.host}:${config.port}${firstClient.basePath}`;\n\n const open = async () => {\n const { default: openBrowser } = await import('open');\n await openBrowser(url);\n };\n open().catch(() => {\n // Fail silently if open package is not available\n });\n }\n });\n\n // Cleanup function\n let isClosing = false;\n const close = async () => {\n if (isClosing) return;\n isClosing = true;\n if (config.logging) console.log('\\n[Server] Shutting down...');\n await watcher.close();\n wss.close();\n wsClients.forEach(client => client.close());\n wsClients.clear();\n return new Promise<void>((resolve) => {\n server.close(() => {\n if (config.logging) console.log('[Server] Closed');\n resolve();\n });\n });\n };\n\n // Get the primary URL (first client's basePath)\n const primaryClient = normalizedClients[0];\n const primaryUrl = `http://${config.host}:${config.port}${primaryClient.basePath}`;\n\n return {\n server: server as any,\n wss: wss as any,\n url: primaryUrl,\n state: stateManager,\n close\n };\n}\n","/**\n * HTTPS module with unified API across runtimes\n * Optimized for maximum performance across Node.js, Bun, and Deno\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n IncomingMessage,\n ServerResponse,\n RequestListener,\n RequestOptions,\n} from './http';\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) queueMicrotask(callback);\n}\n\n/**\n * Helper: Create error Response (eliminates duplication in error handling)\n */\nfunction createErrorResponse(): Response {\n return new Response('Internal Server Error', { status: 500 });\n}\n\n/**\n * Helper: Create address object (eliminates duplication in address() method)\n */\nfunction createAddress(port: number, address: string, family = 'IPv4'): { port: number; family: string; address: string } {\n return { port, family, address };\n}\n\n/**\n * Helper: Emit listening and queue callback (eliminates duplication in Bun/Deno listen)\n */\nfunction emitListeningWithCallback(server: Server, callback?: () => void): void {\n server._listening = true;\n server.emit('listening');\n queueCallback(callback);\n}\n\n/**\n * Helper: Close server and emit events (eliminates duplication in Bun/Deno close)\n */\nfunction closeAndEmit(server: Server, callback?: (err?: Error) => void): void {\n server._listening = false;\n server.emit('close');\n if (callback) queueMicrotask(() => callback());\n}\n\n/**\n * Helper: Lazy-load http module classes (eliminates duplication in require('./http'))\n */\nfunction loadHttpClasses(): { IncomingMessage: any; ServerResponse: any } {\n const httpModule = require('./http');\n return {\n IncomingMessage: httpModule.IncomingMessage,\n ServerResponse: httpModule.ServerResponse\n };\n}\n\n// Lazy-load native https module for Node.js\nlet https: any;\n\n/**\n * HTTPS Server options\n */\nexport interface ServerOptions {\n IncomingMessage?: typeof IncomingMessage;\n ServerResponse?: typeof ServerResponse;\n // TLS/SSL options\n key?: string | Buffer | Array<string | Buffer>;\n cert?: string | Buffer | Array<string | Buffer>;\n ca?: string | Buffer | Array<string | Buffer>;\n passphrase?: string;\n pfx?: string | Buffer | Array<string | Buffer>;\n dhparam?: string | Buffer;\n ecdhCurve?: string;\n honorCipherOrder?: boolean;\n requestCert?: boolean;\n rejectUnauthorized?: boolean;\n NPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array;\n ALPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array;\n SNICallback?: (servername: string, cb: (err: Error | null, ctx?: any) => void) => void;\n sessionTimeout?: number;\n ticketKeys?: Buffer;\n // Bun-specific\n tls?: {\n key?: string | Buffer;\n cert?: string | Buffer;\n ca?: string | Buffer;\n passphrase?: string;\n dhParamsFile?: string;\n };\n}\n\n/**\n * HTTPS Server - Optimized for each runtime\n */\nexport class Server extends EventEmitter {\n private nativeServer?: any;\n private requestListener?: RequestListener;\n public _listening: boolean = false;\n private options: ServerOptions;\n\n constructor(options: ServerOptions, requestListener?: RequestListener) {\n super();\n this.options = options;\n this.requestListener = requestListener;\n }\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n listen(port?: number, hostname?: string, listeningListener?: () => void): this;\n listen(port?: number, listeningListener?: () => void): this;\n listen(options?: { port?: number; hostname?: string; backlog?: number }, listeningListener?: () => void): this;\n listen(...args: any[]): this {\n let port = 3000;\n let hostname = '0.0.0.0';\n let callback: (() => void) | undefined;\n\n // Optimized argument parsing\n const firstArg = args[0];\n if (typeof firstArg === 'number') {\n port = firstArg;\n const secondArg = args[1];\n if (typeof secondArg === 'string') {\n hostname = secondArg;\n callback = args[2] || args[3];\n } else if (typeof secondArg === 'function') {\n callback = secondArg;\n }\n } else if (firstArg && typeof firstArg === 'object') {\n port = firstArg.port || 3000;\n hostname = firstArg.hostname || '0.0.0.0';\n callback = args[1];\n }\n\n const self = this;\n\n if (isNode) {\n // Node.js - use native https module\n const { IncomingMessage, ServerResponse } = loadHttpClasses();\n if (!https) https = require('https');\n\n this.nativeServer = https.createServer(this.options, (req: any, res: any) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse(incomingMessage, res);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n\n this.nativeServer.listen(port, hostname, () => {\n this._listening = true;\n this.emit('listening');\n if (callback) callback();\n });\n\n this.nativeServer.on('error', (err: Error) => this.emit('error', err));\n this.nativeServer.on('close', () => {\n this._listening = false;\n this.emit('close');\n });\n } else if (isBun) {\n // Bun - use Bun.serve() with TLS\n const { IncomingMessage, ServerResponse } = loadHttpClasses();\n\n const tlsOptions: any = {\n port,\n hostname,\n fetch: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n error: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n };\n\n // Add TLS configuration\n if (this.options.key || this.options.cert) {\n tlsOptions.tls = {\n key: this.options.key,\n cert: this.options.cert,\n ca: this.options.ca,\n passphrase: this.options.passphrase,\n };\n } else if (this.options.tls) {\n tlsOptions.tls = this.options.tls;\n }\n\n // @ts-ignore\n this.nativeServer = Bun.serve(tlsOptions);\n\n emitListeningWithCallback(this, callback);\n } else if (isDeno) {\n // Deno - use Deno.serve() with TLS\n const { IncomingMessage, ServerResponse } = loadHttpClasses();\n\n const serveOptions: any = {\n port,\n hostname,\n handler: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n onError: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n };\n\n // Add TLS configuration for Deno\n if (this.options.key && this.options.cert) {\n // @ts-ignore\n serveOptions.cert = this.options.cert;\n // @ts-ignore\n serveOptions.key = this.options.key;\n }\n\n // @ts-ignore\n this.nativeServer = Deno.serve(serveOptions);\n\n emitListeningWithCallback(this, callback);\n }\n\n return this;\n }\n\n close(callback?: (err?: Error) => void): this {\n if (!this.nativeServer) {\n if (callback) queueMicrotask(() => callback());\n return this;\n }\n\n if (isNode) {\n this.nativeServer.close(callback);\n } else if (isBun) {\n this.nativeServer.stop();\n closeAndEmit(this, callback);\n } else if (isDeno) {\n // @ts-ignore\n this.nativeServer.shutdown();\n closeAndEmit(this, callback);\n }\n\n return this;\n }\n\n address(): { port: number; family: string; address: string } | null {\n if (!this.nativeServer) return null;\n\n if (isNode) {\n const addr = this.nativeServer.address();\n if (!addr) return null;\n if (typeof addr === 'string') {\n return createAddress(0, addr, 'unix');\n }\n return addr;\n } else if (isBun) {\n return createAddress(this.nativeServer.port, this.nativeServer.hostname);\n } else if (isDeno) {\n // @ts-ignore\n const addr = this.nativeServer.addr;\n return createAddress(addr.port, addr.hostname);\n }\n\n return null;\n }\n\n get listening(): boolean {\n return this._listening;\n }\n}\n\n/**\n * Client request\n */\nexport class ClientRequest extends EventEmitter {\n constructor(_url: string | URL, _options: RequestOptions = {}) {\n super();\n }\n\n write(_chunk: any): boolean {\n return true;\n }\n\n end(callback?: () => void): void {\n queueCallback(callback);\n }\n}\n\n/**\n * HTTPS Agent\n */\nexport class Agent {\n constructor(public options?: any) {}\n}\n\n/**\n * Create HTTPS server\n */\nexport function createServer(options: ServerOptions, requestListener?: RequestListener): Server {\n return new Server(options, requestListener);\n}\n\n/**\n * Make HTTPS request - optimized per runtime\n */\nexport function request(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n const urlString = typeof url === 'string' ? url : url.toString();\n const req = new ClientRequest(urlString, options);\n\n if (isNode) {\n const { IncomingMessage } = loadHttpClasses();\n if (!https) https = require('https');\n\n const nodeReq = https.request(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers,\n timeout: options?.timeout,\n signal: options?.signal,\n }, (res: any) => {\n const incomingMessage = new IncomingMessage(res);\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n });\n\n nodeReq.on('error', (error: Error) => req.emit('error', error));\n nodeReq.end();\n } else {\n // Bun/Deno - use fetch (automatically handles HTTPS)\n const { IncomingMessage } = loadHttpClasses();\n\n queueMicrotask(async () => {\n try {\n const response = await fetch(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers as HeadersInit,\n signal: options?.signal,\n });\n\n const fetchRequest = new Request(urlString);\n const incomingMessage = new IncomingMessage(fetchRequest);\n incomingMessage.statusCode = response.status;\n incomingMessage.statusMessage = response.statusText;\n\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n } catch (error) {\n req.emit('error', error);\n }\n });\n }\n\n return req;\n}\n\n/**\n * Make HTTPS GET request\n */\nexport function get(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n return request(url, { ...options, method: 'GET' }, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n createServer,\n request,\n get,\n Server,\n Agent,\n ClientRequest,\n getRuntime,\n};\n","/**\n * WebSocket module with unified API across runtimes\n * Pure implementation without external dependencies\n * - Node.js: uses native 'ws' module (built-in WebSocket implementation)\n * - Bun: uses native WebSocket\n * - Deno: uses native WebSocket\n */\n\nimport { EventEmitter } from 'events';\nimport type { IncomingMessage } from './http';\nimport { runtime } from './runtime';\n\n/**\n * WebSocket ready state\n */\nexport enum ReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3,\n}\n\n/**\n * WebSocket close codes\n */\nexport const CLOSE_CODES = {\n NORMAL: 1000,\n GOING_AWAY: 1001,\n PROTOCOL_ERROR: 1002,\n UNSUPPORTED_DATA: 1003,\n NO_STATUS: 1005,\n ABNORMAL: 1006,\n INVALID_DATA: 1007,\n POLICY_VIOLATION: 1008,\n MESSAGE_TOO_BIG: 1009,\n EXTENSION_REQUIRED: 1010,\n INTERNAL_ERROR: 1011,\n SERVICE_RESTART: 1012,\n TRY_AGAIN_LATER: 1013,\n BAD_GATEWAY: 1014,\n TLS_HANDSHAKE_FAIL: 1015,\n} as const;\n\n/**\n * WebSocket data types\n */\nexport type Data = string | Buffer | ArrayBuffer | Buffer[];\n\n/**\n * WebSocket send options\n */\nexport interface SendOptions {\n binary?: boolean;\n compress?: boolean;\n fin?: boolean;\n mask?: boolean;\n}\n\n/**\n * WebSocket server options\n */\nexport interface ServerOptions {\n host?: string;\n port?: number;\n backlog?: number;\n server?: any;\n verifyClient?: VerifyClientCallback;\n handleProtocols?: (protocols: Set<string>, request: IncomingMessage) => string | false;\n path?: string;\n noServer?: boolean;\n clientTracking?: boolean;\n perMessageDeflate?: boolean | object;\n maxPayload?: number;\n}\n\n/**\n * Verify client callback\n */\nexport type VerifyClientCallback = (\n info: {\n origin: string;\n secure: boolean;\n req: IncomingMessage;\n },\n callback?: (result: boolean, code?: number, message?: string) => void\n) => boolean | void;\n\n/**\n * Helper: Queue callback with optional error (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: (err?: Error) => void, error?: Error): void {\n if (callback) {\n queueMicrotask(() => callback(error));\n }\n}\n\n/**\n * Helper: Create native WebSocket instance (eliminates duplication in constructor)\n */\nfunction createNativeWebSocket(url: string, protocols?: string[]): any {\n // @ts-ignore - WebSocket is available in Node.js 18+ and all modern runtimes\n if (runtime === 'node' && typeof globalThis.WebSocket === 'undefined') {\n throw new Error('WebSocket is not available. Please use Node.js 18+ or install ws package.');\n }\n // @ts-ignore\n return new globalThis.WebSocket(url, protocols);\n}\n\n/**\n * WebSocket class - Pure implementation\n */\nexport class WebSocket extends EventEmitter {\n public readyState: ReadyState = ReadyState.CONNECTING;\n public url: string;\n public protocol: string = '';\n public extensions: string = '';\n public binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments' = 'nodebuffer';\n\n /** @internal */\n public _socket: any;\n\n constructor(address: string | URL, protocols?: string | string[], _options?: any) {\n super();\n this.url = typeof address === 'string' ? address : address.toString();\n const protocolsArray = Array.isArray(protocols) ? protocols : protocols ? [protocols] : undefined;\n this._socket = createNativeWebSocket(this.url, protocolsArray);\n this._setupNativeSocket();\n }\n\n private _setupNativeSocket(): void {\n this._socket.onopen = () => {\n this.readyState = ReadyState.OPEN;\n this.emit('open');\n };\n\n this._socket.onmessage = (event: MessageEvent) => {\n const isBinary = event.data instanceof ArrayBuffer || event.data instanceof Blob;\n this.emit('message', event.data, isBinary);\n };\n\n this._socket.onclose = (event: CloseEvent) => {\n this.readyState = ReadyState.CLOSED;\n this.emit('close', event.code, event.reason);\n };\n\n this._socket.onerror = () => {\n this.emit('error', new Error('WebSocket error'));\n };\n }\n\n /**\n * Send data through WebSocket\n */\n send(data: Data, options?: SendOptions | ((err?: Error) => void), callback?: (err?: Error) => void): void {\n const cb = typeof options === 'function' ? options : callback;\n\n if (this.readyState !== ReadyState.OPEN) {\n return queueCallback(cb, new Error('WebSocket is not open'));\n }\n\n try {\n this._socket.send(data);\n queueCallback(cb);\n } catch (error) {\n queueCallback(cb, error as Error);\n }\n }\n\n /**\n * Close the WebSocket connection\n */\n close(code?: number, reason?: string | Buffer): void {\n if (this.readyState === ReadyState.CLOSED || this.readyState === ReadyState.CLOSING) {\n return;\n }\n\n this.readyState = ReadyState.CLOSING;\n this._socket.close(code, typeof reason === 'string' ? reason : reason?.toString());\n }\n\n /**\n * Pause the socket (no-op for native WebSocket)\n */\n pause(): void {\n // Native WebSocket doesn't support pause\n }\n\n /**\n * Resume the socket (no-op for native WebSocket)\n */\n resume(): void {\n // Native WebSocket doesn't support resume\n }\n\n /**\n * Send a ping frame (no-op for native WebSocket)\n */\n ping(_data?: Data, _mask?: boolean, callback?: (err?: Error) => void): void {\n queueCallback(callback); // Native WebSocket doesn't expose ping\n }\n\n /**\n * Send a pong frame (no-op for native WebSocket)\n */\n pong(_data?: Data, _mask?: boolean, callback?: (err?: Error) => void): void {\n queueCallback(callback); // Native WebSocket doesn't expose pong\n }\n\n /**\n * Terminate the connection\n */\n terminate(): void {\n this._socket.close();\n this.readyState = ReadyState.CLOSED;\n }\n\n /**\n * Get buffered amount\n */\n get bufferedAmount(): number {\n return this._socket.bufferedAmount || 0;\n }\n}\n\n/**\n * WebSocket Server - Server-side WebSocket implementation\n */\nexport class WebSocketServer extends EventEmitter {\n public clients: Set<WebSocket> = new Set();\n public options: ServerOptions;\n public path: string;\n\n private _httpServer: any;\n\n constructor(options?: ServerOptions, callback?: () => void) {\n super();\n this.options = options || {};\n this.path = options?.path || '/';\n\n if (runtime === 'node') {\n // Node.js - create HTTP server with WebSocket upgrade\n if (options?.server) {\n this._httpServer = options.server;\n this._setupUpgradeHandler();\n } else if (options?.noServer) {\n // No server mode - user will call handleUpgrade manually\n } else {\n // Create new HTTP server\n const http = require('http');\n this._httpServer = http.createServer();\n this._setupUpgradeHandler();\n\n if (options?.port) {\n this._httpServer.listen(options.port, options.host, callback);\n }\n }\n } else {\n // Bun/Deno - WebSocket server setup\n queueCallback(callback as any);\n }\n }\n\n private _setupUpgradeHandler(): void {\n this._httpServer.on('upgrade', (request: any, socket: any, head: Buffer) => {\n console.log('[WebSocket] Upgrade request:', request.url, 'Expected:', this.path);\n if (this.path && this.path !== '/' && request.url !== this.path) {\n console.log('[WebSocket] Path mismatch, ignoring');\n return;\n }\n\n this.handleUpgrade(request, socket, head, (client) => {\n console.log('[WebSocket] Client connected');\n this.emit('connection', client, request);\n });\n });\n }\n\n /**\n * Handle HTTP upgrade for WebSocket\n */\n handleUpgrade(request: IncomingMessage, socket: any, _head: Buffer, callback: (client: WebSocket) => void): void {\n // Simple WebSocket handshake\n const key = request.headers['sec-websocket-key'];\n if (!key) {\n socket.end('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n return;\n }\n\n // Generate accept key\n const crypto = require('crypto');\n const acceptKey = crypto\n .createHash('sha1')\n .update(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')\n .digest('base64');\n\n // Send handshake response\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${acceptKey}`,\n '',\n ''\n ];\n\n socket.write(headers.join('\\r\\n'));\n\n // Create WebSocket client from raw socket\n const client = this._createClientFromSocket(socket);\n\n if (this.options.clientTracking !== false) {\n this.clients.add(client);\n client.on('close', () => {\n this.clients.delete(client);\n });\n }\n\n callback(client);\n }\n\n private _createClientFromSocket(socket: any): WebSocket {\n const client = Object.create(WebSocket.prototype);\n EventEmitter.call(client);\n\n client.readyState = ReadyState.OPEN;\n client.url = 'ws://localhost';\n client.protocol = '';\n client.extensions = '';\n client.binaryType = 'nodebuffer';\n client._socket = socket;\n\n // Handle incoming frames\n socket.on('data', (data: Buffer) => {\n // Simple frame parsing (minimal implementation)\n try {\n const message = this._parseFrame(data);\n if (message) {\n client.emit('message', message, false);\n }\n } catch (error) {\n client.emit('error', error);\n }\n });\n\n socket.on('end', () => {\n client.readyState = ReadyState.CLOSED;\n client.emit('close', CLOSE_CODES.NORMAL, '');\n });\n\n socket.on('error', (error: Error) => {\n // Silently ignore connection errors (ECONNABORTED, ECONNRESET, etc.)\n // These are normal when clients disconnect during HMR\n const errorCode = (error as any).code;\n if (errorCode === 'ECONNABORTED' || errorCode === 'ECONNRESET' || errorCode === 'EPIPE') {\n // Silently ignore - connection was closed by client\n return;\n }\n // Only emit other errors\n client.emit('error', error);\n });\n\n // Override send method\n client.send = (data: Data, _options?: any, callback?: (err?: Error) => void) => {\n // Check if socket is still writable\n if (!socket.writable || client.readyState !== ReadyState.OPEN) {\n const err = new Error('WebSocket is not open');\n (err as any).code = 'WS_NOT_OPEN';\n queueCallback(callback, err);\n return;\n }\n\n try {\n const frame = this._createFrame(data);\n socket.write(frame, (err?: Error) => {\n // Handle async write errors (ECONNABORTED, ECONNRESET, etc.)\n if (err) {\n const errorCode = (err as any).code;\n // Silently ignore connection errors - these are normal during HMR\n if (errorCode !== 'ECONNABORTED' && errorCode !== 'ECONNRESET' && errorCode !== 'EPIPE') {\n queueCallback(callback, err);\n } else {\n // Connection closed - mark client as closed\n client.readyState = ReadyState.CLOSED;\n queueCallback(callback); // Call without error for graceful handling\n }\n } else {\n queueCallback(callback);\n }\n });\n } catch (error) {\n queueCallback(callback, error as Error);\n }\n };\n\n // Override close method\n client.close = (_code?: number, _reason?: string) => {\n socket.end();\n client.readyState = ReadyState.CLOSED;\n };\n\n return client;\n }\n\n private _parseFrame(data: Buffer): string | null {\n // Minimal WebSocket frame parsing\n if (data.length < 2) return null;\n\n const firstByte = data[0];\n const secondByte = data[1];\n\n const opcode = firstByte & 0x0f;\n const isMasked = (secondByte & 0x80) === 0x80;\n let payloadLength = secondByte & 0x7f;\n let offset = 2;\n\n if (payloadLength === 126) {\n payloadLength = data.readUInt16BE(2);\n offset = 4;\n } else if (payloadLength === 127) {\n payloadLength = Number(data.readBigUInt64BE(2));\n offset = 10;\n }\n\n let payload = data.subarray(offset);\n\n if (isMasked) {\n const maskKey = data.subarray(offset, offset + 4);\n payload = data.subarray(offset + 4, offset + 4 + payloadLength);\n\n // Unmask payload\n for (let i = 0; i < payload.length; i++) {\n payload[i] ^= maskKey[i % 4];\n }\n }\n\n // Text frame (opcode 1)\n if (opcode === 1) {\n return payload.toString('utf8');\n }\n\n return null;\n }\n\n private _createFrame(data: Data): Buffer {\n // Create simple text frame (opcode 1, no masking)\n const payload = typeof data === 'string' ? Buffer.from(data) : data;\n const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;\n\n let frame: Buffer;\n let offset = 2;\n\n if (payloadLength < 126) {\n frame = Buffer.allocUnsafe(2 + payloadLength);\n frame[1] = payloadLength;\n } else if (payloadLength < 65536) {\n frame = Buffer.allocUnsafe(4 + payloadLength);\n frame[1] = 126;\n frame.writeUInt16BE(payloadLength, 2);\n offset = 4;\n } else {\n frame = Buffer.allocUnsafe(10 + payloadLength);\n frame[1] = 127;\n frame.writeBigUInt64BE(BigInt(payloadLength), 2);\n offset = 10;\n }\n\n frame[0] = 0x81; // FIN + text frame\n\n if (Buffer.isBuffer(payload)) {\n payload.copy(frame, offset);\n }\n\n return frame;\n }\n\n /**\n * Close the server\n */\n close(callback?: (err?: Error) => void): void {\n this.clients.forEach(client => client.close());\n this.clients.clear();\n\n if (this._httpServer) {\n this._httpServer.close(callback);\n } else {\n this.emit('close');\n queueCallback(callback);\n }\n }\n\n /**\n * Check if server should handle request\n */\n shouldHandle(request: IncomingMessage): boolean {\n if (this.path && request.url !== this.path) {\n return false;\n }\n return true;\n }\n\n /**\n * Get server address\n */\n address(): { port: number; family: string; address: string } | null {\n if (this._httpServer && this._httpServer.address) {\n return this._httpServer.address();\n }\n return null;\n }\n}\n\n/**\n * Create WebSocket server\n */\nexport function createWebSocketServer(options?: ServerOptions, callback?: () => void): WebSocketServer {\n return new WebSocketServer(options, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n WebSocket,\n WebSocketServer,\n createWebSocketServer,\n ReadyState,\n CLOSE_CODES,\n getRuntime,\n};\n","/**\n * File watcher module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with 'chokidar' package API\n * - Node.js: uses native fs.watch\n * - Bun: uses native fs.watch with enhancements\n * - Deno: uses Deno.watchFs\n */\n\nimport { EventEmitter } from 'events';\nimport { runtime } from './runtime';\n\n/**\n * Helper: Normalize path separators (eliminates duplication in path handling)\n */\nfunction normalizePath(path: string): string {\n return path.replace(/\\\\/g, '/');\n}\n\n/**\n * Helper: Emit event and all event (eliminates duplication in event emitting)\n */\nfunction emitEvent(watcher: FSWatcher, eventType: string, path: string): void {\n watcher.emit(eventType, path);\n watcher.emit('all', eventType, path);\n}\n\n/**\n * Helper: Check if path matches any pattern (eliminates duplication in pattern matching)\n */\nfunction matchesAnyPattern(path: string, patterns: string[]): boolean {\n return patterns.some(pattern => matchesPattern(path, pattern));\n}\n\n/**\n * Helper: Handle rename event (eliminates duplication in rename handling)\n */\nfunction handleRenameEvent(watcher: FSWatcher, fullPath: string, fs: any): void {\n try {\n fs.statSync(fullPath);\n emitEvent(watcher, 'add', fullPath);\n } catch {\n emitEvent(watcher, 'unlink', fullPath);\n }\n}\n\n/**\n * Helper: Setup fs.watch for Node.js/Bun (eliminates duplication in watcher setup)\n */\nfunction setupFsWatch(\n watcher: FSWatcher,\n baseDir: string,\n patterns: string[],\n fs: any\n): void {\n try {\n const nativeWatcher = fs.watch(baseDir, { recursive: true }, (eventType: string, filename: string) => {\n if (!filename) return;\n\n const fullPath = normalizePath(`${baseDir}/${filename}`);\n\n // Check if the file matches any of the patterns\n if (!matchesAnyPattern(fullPath, patterns)) return;\n\n if (eventType === 'rename') {\n handleRenameEvent(watcher, fullPath, fs);\n } else if (eventType === 'change') {\n emitEvent(watcher, 'change', fullPath);\n }\n });\n\n watcher._setWatcher(nativeWatcher);\n // Track watched paths directly\n watcher['_watched'].add(baseDir);\n\n // Emit ready after a short delay\n queueMicrotask(() => watcher.emit('ready'));\n } catch (error) {\n watcher.emit('error', error as Error);\n }\n}\n\n/**\n * Watch options\n */\nexport interface WatchOptions {\n /**\n * Indicates whether the process should continue to run as long as files are being watched.\n * If set to false, the process will continue running even if the watcher is closed.\n */\n persistent?: boolean;\n\n /**\n * Indicates whether to watch files that don't have read permissions.\n */\n ignorePermissionErrors?: boolean;\n\n /**\n * A function that takes one parameter (the path of the file/directory)\n * and returns true to ignore or false to watch.\n */\n ignored?: string | RegExp | ((path: string) => boolean);\n\n /**\n * If set to false, only the parent directory will be watched for new files.\n */\n ignoreInitial?: boolean;\n\n /**\n * If set to true, symlinks will be followed.\n */\n followSymlinks?: boolean;\n\n /**\n * Interval of file system polling (in milliseconds).\n */\n interval?: number;\n\n /**\n * Interval of file system polling for binary files (in milliseconds).\n */\n binaryInterval?: number;\n\n /**\n * If set to true, will provide fs.Stats object as second argument\n * in add, addDir, and change events.\n */\n alwaysStat?: boolean;\n\n /**\n * If set, limits how many levels of subdirectories will be traversed.\n */\n depth?: number;\n\n /**\n * By default, add event fires when a file first appears on disk.\n * Setting this will wait for the write to finish before firing.\n */\n awaitWriteFinish?: boolean | {\n stabilityThreshold?: number;\n pollInterval?: number;\n };\n\n /**\n * If set to true, will use fs.watchFile() (polling) instead of fs.watch().\n */\n usePolling?: boolean;\n\n /**\n * Whether to use fsevents watching on macOS (if available).\n */\n useFsEvents?: boolean;\n\n /**\n * The base path to watch.\n */\n cwd?: string;\n\n /**\n * Whether to disable globbing.\n */\n disableGlobbing?: boolean;\n\n /**\n * Automatically filter out artifacts that occur when using editors.\n */\n atomic?: boolean | number;\n}\n\n/**\n * FSWatcher class - Compatible with chokidar\n */\nexport class FSWatcher extends EventEmitter {\n private _watcher: any;\n private _closed: boolean = false;\n private _watched: Set<string> = new Set();\n\n constructor(options?: WatchOptions) {\n super();\n this.options = options || {};\n }\n\n public options: WatchOptions;\n\n /**\n * Add paths to be watched\n */\n add(paths: string | string[]): FSWatcher {\n if (this._closed) {\n throw new Error('Watcher has been closed');\n }\n\n const pathArray = Array.isArray(paths) ? paths : [paths];\n\n if (runtime === 'node') {\n if (this._watcher) {\n this._watcher.add(pathArray);\n }\n } else {\n pathArray.forEach(path => this._watched.add(path));\n }\n\n return this;\n }\n\n /**\n * Stop watching paths\n */\n unwatch(paths: string | string[]): FSWatcher {\n if (this._closed) {\n return this;\n }\n\n const pathArray = Array.isArray(paths) ? paths : [paths];\n\n if (runtime === 'node') {\n if (this._watcher) {\n this._watcher.unwatch(pathArray);\n }\n } else {\n pathArray.forEach(path => this._watched.delete(path));\n }\n\n return this;\n }\n\n /**\n * Close the watcher\n */\n async close(): Promise<void> {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n\n if (runtime === 'node') {\n if (this._watcher) {\n await this._watcher.close();\n }\n }\n\n this.removeAllListeners();\n }\n\n /**\n * Get watched paths\n */\n getWatched(): { [directory: string]: string[] } {\n if (runtime === 'node' && this._watcher) {\n return this._watcher.getWatched();\n }\n\n const result: { [directory: string]: string[] } = {};\n this._watched.forEach(path => {\n const dir = path.substring(0, path.lastIndexOf('/')) || '.';\n const file = path.substring(path.lastIndexOf('/') + 1);\n if (!result[dir]) {\n result[dir] = [];\n }\n result[dir].push(file);\n });\n\n return result;\n }\n\n /**\n * Internal method to set native watcher\n * @internal\n */\n _setWatcher(watcher: any): void {\n this._watcher = watcher;\n }\n}\n\n/**\n * Extract base directory from glob pattern\n * e.g., 'src/**\\/*.ts' -> 'src', '**\\/*.ts' -> '.'\n */\nfunction getBaseDirectory(pattern: string): string {\n // Remove glob patterns to get the base directory\n const parts = pattern.split(/[\\\\\\/]/);\n let baseDir = '';\n\n for (const part of parts) {\n if (part.includes('*') || part.includes('?')) {\n break;\n }\n baseDir = baseDir ? `${baseDir}/${part}` : part;\n }\n\n return baseDir || '.';\n}\n\n/**\n * Check if a path matches a glob pattern\n */\nfunction matchesPattern(filePath: string, pattern: string): boolean {\n // Simple glob matching - convert pattern to regex\n const regexPattern = normalizePath(pattern)\n .replace(/\\*\\*/g, '.*')\n .replace(/\\*/g, '[^/]*')\n .replace(/\\?/g, '.');\n\n const regex = new RegExp(`^${regexPattern}$`);\n const normalizedPath = normalizePath(filePath);\n\n return regex.test(normalizedPath);\n}\n\n/**\n * Watch files and directories\n */\nexport function watch(\n paths: string | string[],\n options?: WatchOptions\n): FSWatcher {\n const watcher = new FSWatcher(options);\n const pathArray = Array.isArray(paths) ? paths : [paths];\n\n // Extract patterns and their base directories\n const watchMap = new Map<string, string[]>();\n\n pathArray.forEach(path => {\n const baseDir = getBaseDirectory(path);\n if (!watchMap.has(baseDir)) {\n watchMap.set(baseDir, []);\n }\n watchMap.get(baseDir)!.push(path);\n });\n\n if (runtime === 'node') {\n // Node.js - use native fs.watch\n const fs = require('fs');\n watchMap.forEach((patterns, baseDir) => setupFsWatch(watcher, baseDir, patterns, fs));\n } else if (runtime === 'bun') {\n // Bun - use native fs.watch\n const fs = require('fs');\n watchMap.forEach((patterns, baseDir) => setupFsWatch(watcher, baseDir, patterns, fs));\n } else if (runtime === 'deno') {\n // Deno - use Deno.watchFs\n // Extract just the base directories for Deno\n const baseDirs = Array.from(watchMap.keys());\n const allPatterns = Array.from(watchMap.values()).flat();\n\n (async () => {\n try {\n // @ts-ignore\n const denoWatcher = Deno.watchFs(baseDirs);\n\n for await (const event of denoWatcher) {\n if (watcher['_closed']) break;\n\n for (const path of event.paths) {\n const normalizedPath = normalizePath(path);\n\n // Check if the file matches any of the patterns\n if (!matchesAnyPattern(normalizedPath, allPatterns)) continue;\n\n switch (event.kind) {\n case 'create':\n emitEvent(watcher, 'add', path);\n break;\n case 'modify':\n emitEvent(watcher, 'change', path);\n break;\n case 'remove':\n emitEvent(watcher, 'unlink', path);\n break;\n }\n }\n }\n } catch (error) {\n if (!watcher['_closed']) {\n watcher.emit('error', error as Error);\n }\n }\n })();\n\n pathArray.forEach(path => watcher.add(path));\n queueMicrotask(() => watcher.emit('ready'));\n }\n\n return watcher;\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n watch,\n FSWatcher,\n getRuntime,\n};\n","/**\n * Path module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with Node.js 'path' module API\n * Works on Node.js, Bun, and Deno\n */\n\nimport { isBun, isDeno, isNode, runtime } from './runtime';\n\n/**\n * Helper: Get path separator for platform (eliminates duplication in separator logic)\n */\nfunction getSeparator(isWin: boolean): string {\n return isWin ? '\\\\' : '/';\n}\n\n/**\n * Helper: Get current working directory (eliminates duplication in resolvePaths)\n */\nfunction getCwd(): string {\n if (isNode || isBun) {\n return process.cwd();\n } else if (isDeno) {\n // @ts-ignore\n return Deno.cwd();\n }\n return '/';\n}\n\n/**\n * Helper: Find last separator index (eliminates duplication in getExtname and getBasename)\n */\nfunction findLastSeparator(path: string): number {\n return Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'));\n}\n\n/**\n * Helper: Create path operation object (eliminates duplication in posix and win32)\n */\nfunction createPathOps(isWin: boolean) {\n return {\n sep: getSeparator(isWin),\n delimiter: isWin ? ';' : ':',\n normalize: (path: string) => normalizePath(path, isWin),\n join: (...paths: string[]) => joinPaths(paths, isWin),\n resolve: (...paths: string[]) => resolvePaths(paths, isWin),\n isAbsolute: (path: string) => isWin ? isAbsoluteWin(path) : isAbsolutePosix(path),\n relative: (from: string, to: string) => relativePath(from, to, isWin),\n dirname: (path: string) => getDirname(path, isWin),\n basename: (path: string, ext?: string) => getBasename(path, ext, isWin),\n extname: (path: string) => getExtname(path),\n parse: (path: string) => parsePath(path, isWin),\n format: (pathObject: FormatInputPathObject) => formatPath(pathObject, isWin)\n };\n}\n\n/**\n * Helper: Check if path is absolute (POSIX)\n */\nfunction isAbsolutePosix(path: string): boolean {\n return path.length > 0 && path[0] === '/';\n}\n\n/**\n * Helper: Check if path is absolute (Windows)\n */\nfunction isAbsoluteWin(path: string): boolean {\n const len = path.length;\n if (len === 0) return false;\n\n const code = path.charCodeAt(0);\n if (code === 47 /* / */ || code === 92 /* \\ */) {\n return true;\n }\n\n // Check for drive letter\n if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {\n if (len > 2 && path.charCodeAt(1) === 58 /* : */) {\n const code2 = path.charCodeAt(2);\n if (code2 === 47 /* / */ || code2 === 92 /* \\ */) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n/**\n * Platform detection\n */\nconst isWindows = (() => {\n if (isNode) {\n return process.platform === 'win32';\n } else if (isDeno) {\n // @ts-ignore\n return Deno.build.os === 'windows';\n }\n // Bun uses process.platform like Node\n return typeof process !== 'undefined' && process.platform === 'win32';\n})();\n\n/**\n * Path separator\n */\nexport const sep = isWindows ? '\\\\' : '/';\n\n/**\n * Path delimiter\n */\nexport const delimiter = isWindows ? ';' : ':';\n\n/**\n * POSIX path operations\n */\nconst posix = createPathOps(false);\n\n/**\n * Windows path operations\n */\nconst win32 = createPathOps(true);\n\n/**\n * Path object interface\n */\nexport interface ParsedPath {\n root: string;\n dir: string;\n base: string;\n ext: string;\n name: string;\n}\n\nexport interface FormatInputPathObject {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n}\n\n/**\n * Normalize a path\n */\nfunction normalizePath(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const isAbsolute = isWin ? isAbsoluteWin(path) : isAbsolutePosix(path);\n const trailingSeparator = path[path.length - 1] === separator || (isWin && path[path.length - 1] === '/');\n\n // Normalize slashes\n let normalized = path.replace(isWin ? /[\\/\\\\]+/g : /\\/+/g, separator);\n\n // Split path\n const parts = normalized.split(separator);\n const result: string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n if (part === '' || part === '.') {\n if (i === 0 && isAbsolute) result.push('');\n continue;\n }\n\n if (part === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n if (!(result.length === 1 && result[0] === '')) {\n result.pop();\n }\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else {\n result.push(part);\n }\n }\n\n let final = result.join(separator);\n\n if (final.length === 0) {\n return isAbsolute ? separator : '.';\n }\n\n if (trailingSeparator && final[final.length - 1] !== separator) {\n final += separator;\n }\n\n return final;\n}\n\n/**\n * Join paths\n */\nfunction joinPaths(paths: string[], isWin: boolean): string {\n if (paths.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n let joined = '';\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n if (path && path.length > 0) {\n if (joined.length === 0) {\n joined = path;\n } else {\n joined += separator + path;\n }\n }\n }\n\n if (joined.length === 0) return '.';\n\n return normalizePath(joined, isWin);\n}\n\n/**\n * Resolve paths to absolute path\n */\nfunction resolvePaths(paths: string[], isWin: boolean): string {\n const separator = getSeparator(isWin);\n let resolved = '';\n let isAbsolute = false;\n\n for (let i = paths.length - 1; i >= 0 && !isAbsolute; i--) {\n const path = paths[i];\n if (path && path.length > 0) {\n resolved = path + (resolved.length > 0 ? separator + resolved : '');\n isAbsolute = isWin ? isAbsoluteWin(resolved) : isAbsolutePosix(resolved);\n }\n }\n\n if (!isAbsolute) {\n const cwd = getCwd();\n resolved = cwd + (resolved.length > 0 ? separator + resolved : '');\n }\n\n return normalizePath(resolved, isWin);\n}\n\n/**\n * Get relative path\n */\nfunction relativePath(from: string, to: string, isWin: boolean): string {\n from = resolvePaths([from], isWin);\n to = resolvePaths([to], isWin);\n\n if (from === to) return '';\n\n const separator = getSeparator(isWin);\n const fromParts = from.split(separator).filter(p => p.length > 0);\n const toParts = to.split(separator).filter(p => p.length > 0);\n\n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n\n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] === toParts[i]) {\n commonLength++;\n } else {\n break;\n }\n }\n\n const upCount = fromParts.length - commonLength;\n const result: string[] = [];\n\n for (let i = 0; i < upCount; i++) {\n result.push('..');\n }\n\n for (let i = commonLength; i < toParts.length; i++) {\n result.push(toParts[i]);\n }\n\n return result.join(separator) || '.';\n}\n\n/**\n * Get directory name\n */\nfunction getDirname(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const normalized = normalizePath(path, isWin);\n const lastSepIndex = normalized.lastIndexOf(separator);\n\n if (lastSepIndex === -1) return '.';\n if (lastSepIndex === 0) return separator;\n\n return normalized.slice(0, lastSepIndex);\n}\n\n/**\n * Get base name\n */\nfunction getBasename(path: string, ext?: string, isWin?: boolean): string {\n if (path.length === 0) return '';\n\n const lastSepIndex = isWin ? findLastSeparator(path) : path.lastIndexOf('/');\n let base = lastSepIndex === -1 ? path : path.slice(lastSepIndex + 1);\n\n if (ext && base.endsWith(ext)) {\n base = base.slice(0, base.length - ext.length);\n }\n\n return base;\n}\n\n/**\n * Get extension name\n */\nfunction getExtname(path: string): string {\n const lastDotIndex = path.lastIndexOf('.');\n const lastSepIndex = findLastSeparator(path);\n\n if (lastDotIndex === -1 || lastDotIndex < lastSepIndex || lastDotIndex === path.length - 1) {\n return '';\n }\n\n return path.slice(lastDotIndex);\n}\n\n/**\n * Parse path into components\n */\nfunction parsePath(path: string, isWin: boolean): ParsedPath {\n let root = '';\n if (isWin) {\n // Check for Windows drive letter\n if (path.length >= 2 && path[1] === ':') {\n root = path.slice(0, 2);\n if (path.length > 2 && (path[2] === '\\\\' || path[2] === '/')) {\n root += '\\\\';\n }\n } else if (path[0] === '\\\\' || path[0] === '/') {\n root = '\\\\';\n }\n } else {\n if (path[0] === '/') {\n root = '/';\n }\n }\n\n const dir = getDirname(path, isWin);\n const base = getBasename(path, undefined, isWin);\n const ext = getExtname(path);\n const name = ext ? base.slice(0, base.length - ext.length) : base;\n\n return { root, dir, base, ext, name };\n}\n\n/**\n * Format path from components\n */\nfunction formatPath(pathObject: FormatInputPathObject, isWin: boolean): string {\n const separator = getSeparator(isWin);\n const dir = pathObject.dir || pathObject.root || '';\n const base = pathObject.base || ((pathObject.name || '') + (pathObject.ext || ''));\n\n if (!dir) return base;\n if (dir === pathObject.root) return dir + base;\n\n return dir + separator + base;\n}\n\n/**\n * Normalize a path (platform-specific)\n */\nexport function normalize(path: string): string {\n return normalizePath(path, isWindows);\n}\n\n/**\n * Join paths (platform-specific)\n */\nexport function join(...paths: string[]): string {\n return joinPaths(paths, isWindows);\n}\n\n/**\n * Resolve paths to absolute path (platform-specific)\n */\nexport function resolve(...paths: string[]): string {\n return resolvePaths(paths, isWindows);\n}\n\n/**\n * Check if path is absolute (platform-specific)\n */\nexport function isAbsolute(path: string): boolean {\n return isWindows ? win32.isAbsolute(path) : posix.isAbsolute(path);\n}\n\n/**\n * Get relative path (platform-specific)\n */\nexport function relative(from: string, to: string): string {\n return relativePath(from, to, isWindows);\n}\n\n/**\n * Get directory name (platform-specific)\n */\nexport function dirname(path: string): string {\n return getDirname(path, isWindows);\n}\n\n/**\n * Get base name (platform-specific)\n */\nexport function basename(path: string, ext?: string): string {\n return getBasename(path, ext, isWindows);\n}\n\n/**\n * Get extension name\n */\nexport function extname(path: string): string {\n return getExtname(path);\n}\n\n/**\n * Parse path into components (platform-specific)\n */\nexport function parse(path: string): ParsedPath {\n return parsePath(path, isWindows);\n}\n\n/**\n * Format path from components (platform-specific)\n */\nexport function format(pathObject: FormatInputPathObject): string {\n return formatPath(pathObject, isWindows);\n}\n\n/**\n * Convert to namespaced path (Windows only)\n */\nexport function toNamespacedPath(path: string): string {\n if (!isWindows || path.length === 0) return path;\n\n const resolved = resolve(path);\n\n if (resolved.length >= 3) {\n if (resolved[0] === '\\\\') {\n // UNC path\n if (resolved[1] === '\\\\' && resolved[2] !== '?') {\n return '\\\\\\\\?\\\\UNC\\\\' + resolved.slice(2);\n }\n } else if (resolved[1] === ':' && resolved[2] === '\\\\') {\n // Drive letter\n return '\\\\\\\\?\\\\' + resolved;\n }\n }\n\n return path;\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Export POSIX and Win32 implementations\n */\nexport { posix, win32 };\n\n/**\n * Default export\n */\nexport default {\n sep,\n delimiter,\n normalize,\n join,\n resolve,\n isAbsolute,\n relative,\n dirname,\n basename,\n extname,\n parse,\n format,\n toNamespacedPath,\n posix,\n win32,\n getRuntime,\n};\n","/**\n * MIME Types module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with 'mime-types' package API\n * Works on Node.js, Bun, and Deno\n */\n\nimport { runtime } from './runtime';\n\n/**\n * Common MIME type mappings (for Bun/Deno)\n * Lightweight version with most common types\n */\nconst MIME_TYPES: Record<string, string> = {\n // Text\n 'txt': 'text/plain',\n 'html': 'text/html',\n 'htm': 'text/html',\n 'css': 'text/css',\n 'js': 'text/javascript',\n 'mjs': 'text/javascript',\n 'json': 'application/json',\n 'xml': 'application/xml',\n 'csv': 'text/csv',\n 'md': 'text/markdown',\n 'markdown': 'text/x-markdown',\n\n // Images\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'gif': 'image/gif',\n 'svg': 'image/svg+xml',\n 'webp': 'image/webp',\n 'ico': 'image/x-icon',\n 'bmp': 'image/bmp',\n 'tiff': 'image/tiff',\n 'tif': 'image/tiff',\n\n // Audio\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'ogg': 'audio/ogg',\n 'aac': 'audio/aac',\n 'm4a': 'audio/mp4',\n 'flac': 'audio/flac',\n\n // Video\n 'mp4': 'video/mp4',\n 'webm': 'video/webm',\n 'avi': 'video/x-msvideo',\n 'mov': 'video/quicktime',\n 'mkv': 'video/x-matroska',\n 'flv': 'video/x-flv',\n\n // Application\n 'pdf': 'application/pdf',\n 'zip': 'application/zip',\n 'gz': 'application/gzip',\n 'tar': 'application/x-tar',\n 'rar': 'application/x-rar-compressed',\n '7z': 'application/x-7z-compressed',\n\n // Documents\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\n // Fonts\n 'woff': 'font/woff',\n 'woff2': 'font/woff2',\n 'ttf': 'font/ttf',\n 'otf': 'font/otf',\n 'eot': 'application/vnd.ms-fontobject',\n\n // Web\n 'wasm': 'application/wasm',\n 'manifest': 'application/manifest+json',\n\n // Binary\n 'bin': 'application/octet-stream',\n 'exe': 'application/x-msdownload',\n 'dll': 'application/x-msdownload',\n\n // TypeScript/Modern JS\n 'ts': 'text/typescript',\n 'tsx': 'text/tsx',\n 'jsx': 'text/jsx',\n};\n\n/**\n * Reverse mapping: MIME type to extensions\n */\nconst TYPE_TO_EXTENSIONS: Record<string, string[]> = {};\nfor (const ext in MIME_TYPES) {\n const type = MIME_TYPES[ext];\n if (!TYPE_TO_EXTENSIONS[type]) {\n TYPE_TO_EXTENSIONS[type] = [];\n }\n TYPE_TO_EXTENSIONS[type].push(ext);\n}\n\n/**\n * Charset mappings\n */\nconst CHARSETS: Record<string, string> = {\n 'text/plain': 'UTF-8',\n 'text/html': 'UTF-8',\n 'text/css': 'UTF-8',\n 'text/javascript': 'UTF-8',\n 'application/json': 'UTF-8',\n 'application/xml': 'UTF-8',\n 'text/csv': 'UTF-8',\n 'text/markdown': 'UTF-8',\n 'text/x-markdown': 'UTF-8',\n 'text/typescript': 'UTF-8',\n 'text/tsx': 'UTF-8',\n 'text/jsx': 'UTF-8',\n 'application/javascript': 'UTF-8',\n};\n\n/**\n * Get the extension from a path\n */\nfunction getExtension(path: string): string {\n const match = /\\.([^./\\\\]+)$/.exec(path);\n return match ? match[1].toLowerCase() : '';\n}\n\n/**\n * Normalize MIME type (remove parameters)\n */\nfunction normalizeMimeType(type: string): string {\n const match = /^([^;\\s]+)/.exec(type);\n return match ? match[1].toLowerCase() : '';\n}\n\n/**\n * Lookup MIME type from file path or extension\n */\nexport function lookup(path: string): string | false {\n const ext = getExtension(path) || path.toLowerCase();\n return MIME_TYPES[ext] || false;\n}\n\n/**\n * Get the default extension for a MIME type\n */\nexport function extension(type: string): string | false {\n const normalized = normalizeMimeType(type);\n const exts = TYPE_TO_EXTENSIONS[normalized];\n return exts && exts.length > 0 ? exts[0] : false;\n}\n\n/**\n * Get all extensions for a MIME type\n */\nexport function extensions(type: string): string[] | undefined {\n const normalized = normalizeMimeType(type);\n return TYPE_TO_EXTENSIONS[normalized];\n}\n\n/**\n * Get the default charset for a MIME type\n */\nexport function charset(type: string): string | false {\n const normalized = normalizeMimeType(type);\n return CHARSETS[normalized] || false;\n}\n\n/**\n * Create a full Content-Type header value\n */\nexport function contentType(typeOrExt: string): string | false {\n // Check if it's a file extension or path\n let type: string | false;\n if (typeOrExt.includes('/')) {\n // Already a MIME type\n type = typeOrExt;\n } else {\n // Lookup MIME type\n type = lookup(typeOrExt);\n if (!type) return false;\n }\n\n const normalized = normalizeMimeType(type);\n const charsetValue = CHARSETS[normalized];\n\n if (charsetValue) {\n return `${normalized}; charset=${charsetValue.toLowerCase()}`;\n }\n\n return normalized;\n}\n\n/**\n * Get all MIME types\n */\nexport const types = MIME_TYPES;\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n lookup,\n extension,\n extensions,\n charset,\n contentType,\n types,\n getRuntime,\n};\n","/**\n * Elit - DomNode Core Class\n */\n\nimport type { VNode, Child, Children, Props, State, StateOptions, VirtualListController, JsonNode, VNodeJson } from './types';\n\n/**\n * Helper: Resolve element from string ID or HTMLElement (eliminates duplication in render methods)\n */\nfunction resolveElement(rootElement: string | HTMLElement): HTMLElement | null {\n return typeof rootElement === 'string'\n ? document.getElementById(rootElement.replace('#', ''))\n : rootElement;\n}\n\n/**\n * Helper: Ensure element exists or throw error (eliminates duplication in validation)\n */\nfunction ensureElement(el: HTMLElement | null, rootElement: string | HTMLElement): HTMLElement {\n if (!el) {\n throw new Error(`Element not found: ${rootElement}`);\n }\n return el;\n}\n\n/**\n * Helper: Check if child should be skipped (eliminates duplication in child rendering)\n */\nfunction shouldSkipChild(child: any): boolean {\n return child == null || child === false;\n}\n\n/**\n * Helper: Check if value is primitive JSON type (eliminates duplication in JSON conversion)\n */\nfunction isPrimitiveJson(json: any): json is string | number | boolean | null | undefined {\n return json == null || typeof json === 'boolean' || typeof json === 'string' || typeof json === 'number';\n}\n\nexport class DomNode {\n private elementCache = new WeakMap<Element, boolean>();\n\n createElement(tagName: string, props: Props = {}, children: Children = []): VNode {\n return { tagName, props, children };\n }\n\n renderToDOM(vNode: Child, parent: HTMLElement | SVGElement | DocumentFragment): void {\n if (vNode == null || vNode === false) return;\n\n // Handle primitive values (strings, numbers)\n if (typeof vNode !== 'object') {\n parent.appendChild(document.createTextNode(String(vNode)));\n return;\n }\n\n // Handle arrays (Child[])\n if (Array.isArray(vNode)) {\n for (const child of vNode) {\n this.renderToDOM(child, parent);\n }\n return;\n }\n\n // Handle VNode\n const { tagName, props, children } = vNode;\n\n // Handle fragment (empty tagName) - render children directly to parent\n if (!tagName) {\n // Fragments don't have their own element, so skip ref handling\n // The ref will be handled by the wrapper element created by reactive()\n // Render children directly to parent\n for (const child of children) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n !shouldSkipChild(c) && this.renderToDOM(c, parent);\n }\n } else {\n this.renderToDOM(child, parent);\n }\n }\n return;\n }\n\n const isSVG = tagName === 'svg' || (tagName[0] === 's' && tagName[1] === 'v' && tagName[2] === 'g') ||\n (parent as any).namespaceURI === 'http://www.w3.org/2000/svg';\n\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', tagName.replace('svg', '').toLowerCase() || tagName)\n : document.createElement(tagName);\n\n for (const key in props) {\n const value = props[key];\n if (value == null || value === false) continue;\n\n const c = key.charCodeAt(0);\n // class or className (c=99)\n if (c === 99 && (key.length < 6 || key[5] === 'N')) {\n const classValue = Array.isArray(value) ? value.join(' ') : value;\n isSVG ? (el as SVGElement).setAttribute('class', classValue) : (el as HTMLElement).className = classValue;\n }\n // style (s=115)\n else if (c === 115 && key.length === 5) {\n if (typeof value === 'string') {\n (el as HTMLElement).style.cssText = value;\n } else {\n const s = (el as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n }\n }\n // on* events (o=111, n=110)\n else if (c === 111 && key.charCodeAt(1) === 110) {\n (el as any)[key.toLowerCase()] = value;\n }\n // dangerouslySetInnerHTML (d=100)\n else if (c === 100 && key.length > 20) {\n (el as HTMLElement).innerHTML = value.__html;\n }\n // ref (r=114)\n else if (c === 114 && key.length === 3) {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const len = children.length;\n if (!len) {\n parent.appendChild(el);\n return;\n }\n\n const renderChildren = (target: HTMLElement | SVGElement | DocumentFragment) => {\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n !shouldSkipChild(c) && this.renderToDOM(c, target);\n }\n } else {\n this.renderToDOM(child, target);\n }\n }\n };\n\n if (len > 30) {\n const fragment = document.createDocumentFragment();\n renderChildren(fragment);\n el.appendChild(fragment);\n } else {\n renderChildren(el);\n }\n\n parent.appendChild(el);\n }\n\n render(rootElement: string | HTMLElement, vNode: VNode): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n // Clear existing content before rendering\n el.innerHTML = '';\n\n if (vNode.children && vNode.children.length > 500) {\n const fragment = document.createDocumentFragment();\n this.renderToDOM(vNode, fragment);\n el.appendChild(fragment);\n } else {\n this.renderToDOM(vNode, el);\n }\n return el;\n }\n\n batchRender(rootElement: string | HTMLElement, vNodes: VNode[]): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n\n if (len > 3000) {\n const fragment = document.createDocumentFragment();\n let processed = 0;\n const chunkSize = 1500;\n\n const processChunk = (): void => {\n const end = Math.min(processed + chunkSize, len);\n for (let i = processed; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n processed = end;\n\n if (processed >= len) {\n el.appendChild(fragment);\n } else {\n requestAnimationFrame(processChunk);\n }\n };\n\n processChunk();\n } else {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < len; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n el.appendChild(fragment);\n }\n return el;\n }\n\n renderChunked(\n rootElement: string | HTMLElement,\n vNodes: VNode[],\n chunkSize = 5000,\n onProgress?: (current: number, total: number) => void\n ): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n let index = 0;\n\n const renderChunk = (): void => {\n const end = Math.min(index + chunkSize, len);\n const fragment = document.createDocumentFragment();\n\n for (let i = index; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n\n el.appendChild(fragment);\n index = end;\n\n if (onProgress) onProgress(index, len);\n\n if (index < len) {\n requestAnimationFrame(renderChunk);\n }\n };\n\n requestAnimationFrame(renderChunk);\n return el;\n }\n\n renderToHead(...vNodes: Array<VNode | VNode[]>): HTMLHeadElement | null {\n const head = document.head;\n if (head) {\n for (const vNode of vNodes.flat()) {\n vNode && this.renderToDOM(vNode, head);\n }\n }\n return head;\n }\n\n addStyle(cssText: string): HTMLStyleElement {\n const el = document.createElement('style');\n el.textContent = cssText;\n return document.head.appendChild(el);\n }\n\n addMeta(attrs: Record<string, string>): HTMLMetaElement {\n const el = document.createElement('meta');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n addLink(attrs: Record<string, string>): HTMLLinkElement {\n const el = document.createElement('link');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n setTitle(text: string): string {\n return document.title = text;\n }\n\n // Reactive State Management\n createState<T>(initialValue: T, options: StateOptions = {}): State<T> {\n let value = initialValue;\n const listeners = new Set<(value: T) => void>();\n let updateTimer: NodeJS.Timeout | null = null;\n const { throttle = 0, deep = false } = options;\n\n const notify = () => listeners.forEach(fn => fn(value));\n\n const scheduleUpdate = () => {\n if (throttle > 0) {\n if (!updateTimer) {\n updateTimer = setTimeout(() => {\n updateTimer = null;\n notify();\n }, throttle);\n }\n } else {\n notify();\n }\n };\n\n return {\n get value() { return value; },\n set value(newValue: T) {\n const changed = deep ? JSON.stringify(value) !== JSON.stringify(newValue) : value !== newValue;\n if (changed) {\n value = newValue;\n scheduleUpdate();\n }\n },\n subscribe(fn: (value: T) => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n },\n destroy() {\n listeners.clear();\n updateTimer && clearTimeout(updateTimer);\n }\n };\n }\n\n computed<T extends any[], R>(states: { [K in keyof T]: State<T[K]> }, computeFn: (...values: T) => R): State<R> {\n const values = states.map(s => s.value) as unknown as T;\n const result = this.createState(computeFn(...values));\n\n states.forEach((state, index) => {\n state.subscribe((newValue: any) => {\n values[index] = newValue;\n result.value = computeFn(...values);\n });\n });\n\n return result;\n }\n\n effect(stateFn: () => void): void {\n stateFn();\n }\n\n // Virtual scrolling helper for large lists\n createVirtualList<T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight = 50,\n bufferSize = 5\n ): VirtualListController {\n const viewportHeight = container.clientHeight;\n const totalHeight = items.length * itemHeight;\n let scrollTop = 0;\n\n const getVisibleRange = (): { start: number; end: number } => {\n const start = Math.max(0, Math.floor(scrollTop / itemHeight) - bufferSize);\n const end = Math.min(items.length, Math.ceil((scrollTop + viewportHeight) / itemHeight) + bufferSize);\n return { start, end };\n };\n\n const render = (): void => {\n const { start, end } = getVisibleRange();\n const wrapper = document.createElement('div');\n wrapper.style.cssText = `height:${totalHeight}px;position:relative`;\n\n for (let i = start; i < end; i++) {\n const itemEl = document.createElement('div');\n itemEl.style.cssText = `position:absolute;top:${i * itemHeight}px;height:${itemHeight}px;width:100%`;\n this.renderToDOM(renderItem(items[i], i), itemEl);\n wrapper.appendChild(itemEl);\n }\n\n container.innerHTML = '';\n container.appendChild(wrapper);\n };\n\n const scrollHandler = (): void => {\n scrollTop = container.scrollTop;\n requestAnimationFrame(render);\n };\n\n container.addEventListener('scroll', scrollHandler);\n\n render();\n return {\n render,\n destroy: () => {\n container.removeEventListener('scroll', scrollHandler);\n container.innerHTML = '';\n }\n };\n }\n\n // Lazy load components\n lazy<T extends any[], R>(loadFn: () => Promise<(...args: T) => R>): (...args: T) => Promise<R | VNode> {\n let component: ((...args: T) => R) | null = null;\n let loading = false;\n\n return async (...args: T): Promise<R | VNode> => {\n if (!component && !loading) {\n loading = true;\n component = await loadFn();\n loading = false;\n }\n return component ? component(...args) : { tagName: 'div', props: { class: 'loading' }, children: ['Loading...'] };\n };\n }\n\n // Memory management - cleanup unused elements\n cleanupUnusedElements(root: HTMLElement): number {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n const toRemove: Element[] = [];\n\n while (walker.nextNode()) {\n const node = walker.currentNode as Element;\n if (node.id && node.id.startsWith('r') && !this.elementCache.has(node)) {\n toRemove.push(node);\n }\n }\n\n toRemove.forEach(el => el.remove());\n return toRemove.length;\n }\n\n // Server-Side Rendering - convert VNode to HTML string\n renderToString(vNode: Child, options: { pretty?: boolean; indent?: number } = {}): string {\n const { pretty = false, indent = 0 } = options;\n const indentStr = pretty ? ' '.repeat(indent) : '';\n const newLine = pretty ? '\\n' : '';\n\n let resolvedVNode = this.resolveStateValue(vNode);\n resolvedVNode = this.unwrapReactive(resolvedVNode);\n\n if (Array.isArray(resolvedVNode)) {\n return resolvedVNode.map(child => this.renderToString(child, options)).join('');\n }\n\n if (typeof resolvedVNode !== 'object' || resolvedVNode === null) {\n if (resolvedVNode === null || resolvedVNode === undefined || resolvedVNode === false) {\n return '';\n }\n return this.escapeHtml(String(resolvedVNode));\n }\n\n const { tagName, props, children } = resolvedVNode;\n const isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\n\n if (props.dangerouslySetInnerHTML) {\n html += props.dangerouslySetInnerHTML.__html;\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (children && children.length > 0) {\n const resolvedChildren = children.map((c: Child) => {\n const resolved = this.resolveStateValue(c);\n return this.unwrapReactive(resolved);\n });\n\n const hasComplexChildren = resolvedChildren.some(\n (c: any) => typeof c === 'object' && c !== null && !Array.isArray(c) && 'tagName' in c\n );\n\n if (pretty && hasComplexChildren) {\n html += newLine;\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty, indent: indent + 1 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty, indent: indent + 1 });\n }\n }\n html += indentStr;\n } else {\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty: false, indent: 0 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty: false, indent: 0 });\n }\n }\n }\n }\n\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n private resolveStateValue(value: any): any {\n if (value && typeof value === 'object' && 'value' in value && 'subscribe' in value) {\n return value.value;\n }\n return value;\n }\n\n private isReactiveWrapper(vNode: any): boolean {\n if (!vNode || typeof vNode !== 'object' || !vNode.tagName) {\n return false;\n }\n return vNode.tagName === 'span' &&\n vNode.props?.id &&\n typeof vNode.props.id === 'string' &&\n vNode.props.id.match(/^r[a-z0-9]{9}$/);\n }\n\n private unwrapReactive(vNode: any): Child {\n if (!this.isReactiveWrapper(vNode)) {\n return vNode;\n }\n\n const children = vNode.children;\n if (!children || children.length === 0) {\n return '';\n }\n\n if (children.length === 1) {\n const child = children[0];\n\n if (child && typeof child === 'object' && child.tagName === 'span') {\n const props = child.props;\n const hasNoProps = !props || Object.keys(props).length === 0;\n const hasSingleStringChild = child.children &&\n child.children.length === 1 &&\n typeof child.children[0] === 'string';\n\n if (hasNoProps && hasSingleStringChild) {\n return child.children[0];\n }\n }\n\n return this.unwrapReactive(child);\n }\n\n return children.map((c: Child) => this.unwrapReactive(c));\n }\n\n private escapeHtml(text: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, char => htmlEscapes[char]);\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]);\n return selfClosingTags.has(tagName.toLowerCase());\n }\n\n private propsToAttributes(props: Props): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref') {\n continue;\n }\n\n let value = props[key];\n value = this.resolveStateValue(value);\n\n if (value == null || value === false) continue;\n\n if (key.startsWith('on') && typeof value === 'function') {\n continue;\n }\n\n if (key === 'className' || key === 'class') {\n const className = Array.isArray(value) ? value.join(' ') : value;\n if (className) {\n attrs.push(`class=\"${this.escapeHtml(String(className))}\"`);\n }\n continue;\n }\n\n if (key === 'style') {\n const styleStr = this.styleToString(value);\n if (styleStr) {\n attrs.push(`style=\"${this.escapeHtml(styleStr)}\"`);\n }\n continue;\n }\n\n if (value === true) {\n attrs.push(key);\n continue;\n }\n\n attrs.push(`${key}=\"${this.escapeHtml(String(value))}\"`);\n }\n\n return attrs.join(' ');\n }\n\n private styleToString(style: any): string {\n if (typeof style === 'string') {\n return style;\n }\n\n if (typeof style === 'object' && style !== null) {\n const styles: string[] = [];\n for (const key in style) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n styles.push(`${cssKey}:${style[key]}`);\n }\n return styles.join(';');\n }\n\n return '';\n }\n\n private isState(value: any): value is State<any> {\n return value && typeof value === 'object' && 'value' in value && 'subscribe' in value && typeof value.subscribe === 'function';\n }\n\n private reactiveNodes = new Map<State<any>, { node: Text | null, renderFn: (v: any) => Child }>();\n\n private createReactiveChild(state: State<any>, renderFn: (value: any) => Child): Child {\n const currentValue = renderFn(state.value);\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const entry = { node: null as Text | null, renderFn };\n this.reactiveNodes.set(state, entry);\n\n state.subscribe(() => {\n if (entry.node && entry.node.parentNode) {\n const newValue = renderFn(state.value);\n entry.node.textContent = String(newValue ?? '');\n }\n });\n }\n\n return currentValue;\n }\n\n jsonToVNode(json: JsonNode | string | number | boolean | null | undefined | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tag, attributes = {}, children } = json;\n\n const props: Props = {};\n for (const key in attributes) {\n const value = attributes[key];\n if (key === 'class') {\n props.className = this.isState(value) ? value.value : value;\n } else {\n props[key] = this.isState(value) ? value.value : value;\n }\n }\n\n const childrenArray: Children = [];\n if (children != null) {\n if (Array.isArray(children)) {\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.jsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n } else if (this.isState(children)) {\n childrenArray.push(this.createReactiveChild(children, (v: any) => v));\n } else if (typeof children === 'object' && 'tag' in children) {\n const converted = this.jsonToVNode(children);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n } else {\n childrenArray.push(children as Child);\n }\n }\n\n return { tagName: tag, props, children: childrenArray };\n }\n\n vNodeJsonToVNode(json: VNodeJson | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tagName, props = {}, children = [] } = json;\n\n const resolvedProps: Props = {};\n for (const key in props) {\n const value = props[key];\n resolvedProps[key] = this.isState(value) ? value.value : value;\n }\n\n const childrenArray: Children = [];\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.vNodeJsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n\n return { tagName, props: resolvedProps, children: childrenArray };\n }\n\n renderJson(rootElement: string | HTMLElement, json: JsonNode): HTMLElement {\n const vNode = this.jsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderVNode(rootElement: string | HTMLElement, json: VNodeJson): HTMLElement {\n const vNode = this.vNodeJsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid VNode JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderJsonToString(json: JsonNode, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.jsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n renderVNodeToString(json: VNodeJson, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.vNodeJsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n\n // Generate complete HTML document as string (for SSR)\n renderToHTMLDocument(vNode: Child, options: {\n title?: string;\n meta?: Array<Record<string, string>>;\n links?: Array<Record<string, string>>;\n scripts?: Array<{ src?: string; content?: string; async?: boolean; defer?: boolean; type?: string }>;\n styles?: Array<{ href?: string; content?: string }>;\n lang?: string;\n head?: string;\n bodyAttrs?: Record<string, string>;\n pretty?: boolean;\n } = {}): string {\n const { title = '', meta = [], links = [], scripts = [], styles = [], lang = 'en', head = '', bodyAttrs = {}, pretty = false } = options;\n const nl = pretty ? '\\n' : '';\n const indent = pretty ? ' ' : '';\n const indent2 = pretty ? ' ' : '';\n\n let html = `<!DOCTYPE html>${nl}<html lang=\"${lang}\">${nl}${indent}<head>${nl}${indent2}<meta charset=\"UTF-8\">${nl}${indent2}<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">${nl}`;\n if (title) html += `${indent2}<title>${this.escapeHtml(title)}</title>${nl}`;\n\n for (const m of meta) {\n html += `${indent2}<meta`;\n for (const k in m) html += ` ${k}=\"${this.escapeHtml(m[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const l of links) {\n html += `${indent2}<link`;\n for (const k in l) html += ` ${k}=\"${this.escapeHtml(l[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const s of styles) {\n if (s.href) {\n html += `${indent2}<link rel=\"stylesheet\" href=\"${this.escapeHtml(s.href)}\">${nl}`;\n } else if (s.content) {\n html += `${indent2}<style>${s.content}</style>${nl}`;\n }\n }\n\n if (head) html += head + nl;\n html += `${indent}</head>${nl}${indent}<body`;\n for (const k in bodyAttrs) html += ` ${k}=\"${this.escapeHtml(bodyAttrs[k])}\"`;\n html += `>${nl}`;\n html += this.renderToString(vNode, { pretty, indent: 2 });\n\n for (const script of scripts) {\n html += `${indent2}<script`;\n if (script.type) html += ` type=\"${this.escapeHtml(script.type)}\"`;\n if (script.async) html += ` async`;\n if (script.defer) html += ` defer`;\n if (script.src) {\n html += ` src=\"${this.escapeHtml(script.src)}\"></script>${nl}`;\n } else if (script.content) {\n html += `>${script.content}</script>${nl}`;\n } else {\n html += `></script>${nl}`;\n }\n }\n\n html += `${indent}</body>${nl}</html>`;\n return html;\n }\n\n // Expose elementCache for reactive updates\n getElementCache(): WeakMap<Element, boolean> {\n return this.elementCache;\n }\n}\n\nexport const dom = new DomNode();\n\n// Export helper functions for convenience\nexport const render = dom.render.bind(dom);\nexport const renderToString = dom.renderToString.bind(dom);\nexport const mount = render; // alias for render\n"],"mappings":"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","names":["resolve","text","status","getRuntime","exists","fs","queueCallback","https","ClientRequest","queueCallback","request","ClientRequest","IncomingMessage","https","import_events","queueCallback","http","request","import_events","fs","normalizePath","normalizePath","json","text","render","html","resolve","text","i","status","html","readdir","exports","request","cacheControl"]}
|