elit 3.5.0 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +88 -11
  2. package/dist/build.d.mts +1 -1
  3. package/dist/cli.d.ts +8 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +223 -109
  6. package/dist/config.d.mts +2 -4
  7. package/dist/config.d.ts +1 -3
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js.map +1 -1
  10. package/dist/config.mjs.map +1 -1
  11. package/dist/coverage.d.mts +1 -1
  12. package/dist/desktop-cli.d.ts.map +1 -1
  13. package/dist/http.d.ts.map +1 -1
  14. package/dist/http.js +5 -4
  15. package/dist/http.js.map +1 -1
  16. package/dist/http.mjs +5 -4
  17. package/dist/http.mjs.map +1 -1
  18. package/dist/https.js +5 -4
  19. package/dist/https.js.map +1 -1
  20. package/dist/https.mjs +5 -4
  21. package/dist/https.mjs.map +1 -1
  22. package/dist/index.d.mts +1 -1
  23. package/dist/index.js +20 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/index.mjs +20 -1
  26. package/dist/index.mjs.map +1 -1
  27. package/dist/native.js +20 -1
  28. package/dist/native.js.map +1 -1
  29. package/dist/native.mjs +20 -1
  30. package/dist/native.mjs.map +1 -1
  31. package/dist/{server-DpnTyF7I.d.mts → server--YFoC6ln.d.mts} +27 -0
  32. package/dist/{server-BU71N4fk.d.ts → server-DacsdjFJ.d.ts} +27 -0
  33. package/dist/server.d.mts +1 -1
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +141 -52
  36. package/dist/server.js.map +1 -1
  37. package/dist/server.mjs +141 -52
  38. package/dist/server.mjs.map +1 -1
  39. package/dist/state.d.ts.map +1 -1
  40. package/dist/state.js +20 -1
  41. package/dist/state.js.map +1 -1
  42. package/dist/state.mjs +20 -1
  43. package/dist/state.mjs.map +1 -1
  44. package/dist/types.d.mts +28 -1
  45. package/dist/types.d.ts +27 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js.map +1 -1
  48. package/dist/wapk-cli.d.ts +0 -1
  49. package/dist/wapk-cli.d.ts.map +1 -1
  50. package/dist/ws.d.mts +1 -1
  51. package/dist/ws.d.ts +1 -1
  52. package/dist/ws.d.ts.map +1 -1
  53. package/dist/ws.js +9 -4
  54. package/dist/ws.js.map +1 -1
  55. package/dist/ws.mjs +9 -4
  56. package/dist/ws.mjs.map +1 -1
  57. package/dist/wss.js +14 -8
  58. package/dist/wss.js.map +1 -1
  59. package/dist/wss.mjs +14 -8
  60. package/dist/wss.mjs.map +1 -1
  61. package/package.json +1 -1
  62. package/src/cli.ts +26 -8
  63. package/src/config.ts +1 -3
  64. package/src/desktop-cli.ts +0 -9
  65. package/src/http.ts +5 -4
  66. package/src/server.ts +182 -56
  67. package/src/state.ts +25 -1
  68. package/src/types.ts +30 -0
  69. package/src/wapk-cli.ts +20 -55
  70. package/src/ws.ts +12 -5
package/dist/wss.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime.ts","../src/http.ts","../src/wss.ts","../src/https.ts","../src/ws.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 private _bunWebSocketServers: Set<any> = new Set();\n public _listening: boolean = false;\n\n constructor(requestListener?: RequestListener) {\n super();\n this.requestListener = requestListener;\n }\n\n registerWebSocketServer(wsServer: any): void {\n this._bunWebSocketServers.add(wsServer);\n }\n\n unregisterWebSocketServer(wsServer: any): void {\n this._bunWebSocketServers.delete(wsServer);\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 websocket: {\n open: (ws: any) => {\n ws.data?.wsServer?._handleBunOpen(ws, ws.data?.request);\n },\n message: (ws: any, message: any) => {\n ws.data?.wsServer?._handleBunMessage(ws, message);\n },\n close: (ws: any, code: number, reason: any) => {\n ws.data?.wsServer?._handleBunClose(ws, code, reason);\n },\n },\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 const upgradeHeader = req.headers.get('upgrade');\n if (upgradeHeader && upgradeHeader.toLowerCase() === 'websocket') {\n const matchingWebSocketServer = Array.from(this._bunWebSocketServers).find((wsServer: any) => {\n return !wsServer.path || wsServer.path === '/' || wsServer.path === pathname;\n });\n\n if (!matchingWebSocketServer) {\n return new Response('WebSocket path not found', { status: 404 });\n }\n\n const requestHeaders: Record<string, string> = {};\n req.headers.forEach((value, key) => {\n requestHeaders[key] = value;\n });\n\n const upgraded = this.nativeServer.upgrade(req, {\n data: {\n wsServer: matchingWebSocketServer,\n request: {\n method: req.method,\n url: pathname,\n headers: requestHeaders,\n socket: { remoteAddress: undefined },\n },\n },\n });\n\n if (upgraded) {\n return undefined as any;\n }\n\n return new Response('WebSocket upgrade failed', { status: 400 });\n }\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 * WebSocket Secure (WSS) module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with 'ws' package WSS API\n * - Node.js: uses native WebSocket with HTTPS\n * - Bun: uses native WebSocket with TLS\n * - Deno: uses native WebSocket with TLS\n */\n\nimport { EventEmitter } from 'events';\nimport type { IncomingMessage } from './http';\nimport { createServer as createHttpsServer } from './https';\nimport { WebSocket, WebSocketServer, ServerOptions, Data, ReadyState, CLOSE_CODES } from './ws';\nimport { runtime } from './runtime';\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) {\n queueMicrotask(callback);\n }\n}\n\n/**\n * Helper: Build HTTPS options from WSS options (eliminates duplication in constructor)\n */\nfunction buildHttpsOptions(options?: WSSServerOptions): any {\n const httpsOptions: any = {};\n if (options?.key) httpsOptions.key = options.key;\n if (options?.cert) httpsOptions.cert = options.cert;\n if (options?.ca) httpsOptions.ca = options.ca;\n if (options?.passphrase) httpsOptions.passphrase = options.passphrase;\n if (options?.rejectUnauthorized !== undefined) httpsOptions.rejectUnauthorized = options.rejectUnauthorized;\n if (options?.requestCert !== undefined) httpsOptions.requestCert = options.requestCert;\n return httpsOptions;\n}\n\n/**\n * Helper: Emit close event with optional callback (eliminates duplication in close method)\n */\nfunction emitCloseWithCallback(emitter: EventEmitter, callback?: (err?: Error) => void): void {\n emitter.emit('close');\n queueCallback(callback as any);\n}\n\n/**\n * WSS Server options (extends WebSocket ServerOptions with TLS)\n */\nexport interface WSSServerOptions extends ServerOptions {\n // TLS/SSL options\n key?: string | Buffer;\n cert?: string | Buffer;\n ca?: string | Buffer;\n passphrase?: string;\n rejectUnauthorized?: boolean;\n requestCert?: boolean;\n\n // HTTPS server\n httpsServer?: any;\n}\n\n/**\n * WebSocket Secure client class\n */\nexport class WSSClient extends WebSocket {\n constructor(address: string | URL, protocols?: string | string[], options?: any) {\n // Convert ws:// to wss://\n const urlString = typeof address === 'string' ? address : address.toString();\n const secureUrl = urlString.replace(/^ws:\\/\\//i, 'wss://');\n\n super(secureUrl, protocols, options);\n }\n}\n\n/**\n * WebSocket Secure Server class\n */\nexport class WSSServer extends EventEmitter {\n public clients: Set<WebSocket> = new Set();\n public options: WSSServerOptions;\n public path: string;\n\n private _httpsServer: any;\n private _wsServer!: WebSocketServer;\n\n constructor(options?: WSSServerOptions, callback?: () => void) {\n super();\n this.options = options || {};\n this.path = options?.path || '/';\n\n if (runtime === 'node') {\n // Node.js - create HTTPS server with WebSocket upgrade\n if (options?.httpsServer) {\n this._httpsServer = options.httpsServer;\n this._setupServer(callback);\n } else if (options?.noServer) {\n // No server mode - user will call handleUpgrade manually\n this._wsServer = new WebSocketServer({ noServer: true });\n queueCallback(callback);\n } else {\n // Create new HTTPS server\n this._httpsServer = createHttpsServer(buildHttpsOptions(options));\n this._setupServer(callback);\n\n if (options?.port) {\n this._httpsServer.listen(options.port, options.host, callback);\n }\n }\n } else {\n // Bun/Deno - WebSocket server with TLS\n this._wsServer = new WebSocketServer(options);\n queueCallback(callback);\n }\n }\n\n private _setupServer(callback?: () => void): void {\n // Create WebSocket server attached to HTTPS server\n this._wsServer = new WebSocketServer({\n ...this.options,\n server: this._httpsServer,\n noServer: false\n });\n\n // Forward events from underlying WebSocket server\n this._wsServer.on('connection', (client: WebSocket, request: IncomingMessage) => {\n if (this.options.clientTracking !== false) {\n this.clients.add(client);\n client.on('close', () => {\n this.clients.delete(client);\n });\n }\n this.emit('connection', client, request);\n });\n\n this._wsServer.on('error', (error: Error) => {\n this.emit('error', error);\n });\n\n if (!this.options?.port) {\n queueCallback(callback);\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 if (this._wsServer) {\n this._wsServer.handleUpgrade(request, socket, head, callback);\n }\n }\n\n /**\n * Check if server should handle request\n */\n shouldHandle(request: IncomingMessage): boolean {\n if (this._wsServer) {\n return this._wsServer.shouldHandle(request);\n }\n if (this.path && request.url !== this.path) {\n return false;\n }\n return true;\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._wsServer) {\n this._wsServer.close(() => {\n if (this._httpsServer) {\n this._httpsServer.close(callback);\n } else {\n emitCloseWithCallback(this, callback);\n }\n });\n } else if (this._httpsServer) {\n this._httpsServer.close(callback);\n } else {\n emitCloseWithCallback(this, callback);\n }\n }\n\n /**\n * Get server address\n */\n address(): { port: number; family: string; address: string } | null {\n if (this._httpsServer && this._httpsServer.address) {\n return this._httpsServer.address();\n }\n if (this._wsServer) {\n return this._wsServer.address();\n }\n return null;\n }\n}\n\n/**\n * Create WebSocket Secure client\n */\nexport function createWSSClient(address: string | URL, protocols?: string | string[], options?: any): WSSClient {\n return new WSSClient(address, protocols, options);\n}\n\n/**\n * Create WebSocket Secure server\n */\nexport function createWSSServer(options?: WSSServerOptions, callback?: () => void): WSSServer {\n return new WSSServer(options, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Re-export types and constants from ws module\n */\nexport type { ServerOptions, Data };\nexport { ReadyState, CLOSE_CODES };\n\n/**\n * Default export\n */\nexport default {\n WSSClient,\n WSSServer,\n createWSSClient,\n createWSSServer,\n ReadyState,\n CLOSE_CODES,\n getRuntime,\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 private _ownsHttpServer: boolean = false;\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._ownsHttpServer = true;\n this._setupUpgradeHandler();\n\n if (options?.port) {\n this._httpServer.listen(options.port, options.host, callback);\n }\n }\n } else if (runtime === 'bun') {\n if (options?.server?.registerWebSocketServer) {\n this._httpServer = options.server;\n options.server.registerWebSocketServer(this);\n }\n queueCallback(callback as any);\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 _createClientFromBunSocket(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 client.send = (data: Data, _options?: any, callback?: (err?: Error) => void) => {\n if (client.readyState !== ReadyState.OPEN) {\n queueCallback(callback, new Error('WebSocket is not open'));\n return;\n }\n\n try {\n socket.send(data);\n queueCallback(callback);\n } catch (error) {\n queueCallback(callback, error as Error);\n }\n };\n\n client.close = (code?: number, reason?: string) => {\n if (client.readyState === ReadyState.CLOSED) {\n return;\n }\n\n client.readyState = ReadyState.CLOSING;\n socket.close(code ?? CLOSE_CODES.NORMAL, reason);\n };\n\n client.terminate = () => {\n socket.close();\n client.readyState = ReadyState.CLOSED;\n };\n\n return client;\n }\n\n _handleBunOpen(socket: any, request: Partial<IncomingMessage> = {}): void {\n const client = this._createClientFromBunSocket(socket);\n\n if (socket.data) {\n socket.data.client = client;\n }\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 const incomingRequest = {\n url: request.url || this.path,\n headers: request.headers || {},\n socket: request.socket || { remoteAddress: undefined },\n } as IncomingMessage;\n\n this.emit('connection', client, incomingRequest);\n }\n\n _handleBunMessage(socket: any, message: any): void {\n const client = socket.data?.client;\n if (!client) {\n return;\n }\n\n const isBinary = typeof message !== 'string';\n const payload = typeof message === 'string'\n ? message\n : message instanceof ArrayBuffer\n ? Buffer.from(message)\n : ArrayBuffer.isView(message)\n ? Buffer.from(message.buffer, message.byteOffset, message.byteLength)\n : Buffer.from(String(message));\n\n client.emit('message', payload, isBinary);\n }\n\n _handleBunClose(socket: any, code: number, reason: any): void {\n const client = socket.data?.client;\n if (!client) {\n return;\n }\n\n client.readyState = ReadyState.CLOSED;\n client.emit('close', code, typeof reason === 'string' ? reason : reason?.toString() || '');\n this.clients.delete(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 && this._ownsHttpServer) {\n this._httpServer.close(callback);\n } else {\n if (runtime === 'bun' && this._httpServer?.unregisterWebSocketServer) {\n this._httpServer.unregisterWebSocketServer(this);\n }\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"],"mappings":"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","names":["EventEmitter","EventEmitter","queueCallback","createErrorResponse","createAddress","emitListeningWithCallback","closeAndEmit","https","Server","IncomingMessage","ServerResponse","createServer","Server","EventEmitter","ReadyState","queueCallback","http","request","queueCallback","EventEmitter","createServer","request","getRuntime","getRuntime"]}
1
+ {"version":3,"sources":["../src/runtime.ts","../src/http.ts","../src/wss.ts","../src/https.ts","../src/ws.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 private _bunWebSocketServers: Set<any> = new Set();\n public _listening: boolean = false;\n\n constructor(requestListener?: RequestListener) {\n super();\n this.requestListener = requestListener;\n }\n\n registerWebSocketServer(wsServer: any): void {\n this._bunWebSocketServers.add(wsServer);\n }\n\n unregisterWebSocketServer(wsServer: any): void {\n this._bunWebSocketServers.delete(wsServer);\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 websocket: {\n open: (ws: any) => {\n ws.data?.wsServer?._handleBunOpen(ws, ws.data?.request);\n },\n message: (ws: any, message: any) => {\n ws.data?.wsServer?._handleBunMessage(ws, message);\n },\n close: (ws: any, code: number, reason: any) => {\n ws.data?.wsServer?._handleBunClose(ws, code, reason);\n },\n },\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;\n const requestUrl = urlObj.pathname + urlObj.search;\n\n const upgradeHeader = req.headers.get('upgrade');\n if (upgradeHeader && upgradeHeader.toLowerCase() === 'websocket') {\n const matchingWebSocketServer = Array.from(this._bunWebSocketServers).find((wsServer: any) => {\n return !wsServer.path || wsServer.path === pathname;\n });\n\n if (!matchingWebSocketServer) {\n return new Response('WebSocket path not found', { status: 404 });\n }\n\n const requestHeaders: Record<string, string> = {};\n req.headers.forEach((value, key) => {\n requestHeaders[key] = value;\n });\n\n const upgraded = this.nativeServer.upgrade(req, {\n data: {\n wsServer: matchingWebSocketServer,\n request: {\n method: req.method,\n url: requestUrl,\n headers: requestHeaders,\n socket: { remoteAddress: undefined },\n },\n },\n });\n\n if (upgraded) {\n return undefined as any;\n }\n\n return new Response('WebSocket upgrade failed', { status: 400 });\n }\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: requestUrl,\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 * WebSocket Secure (WSS) module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with 'ws' package WSS API\n * - Node.js: uses native WebSocket with HTTPS\n * - Bun: uses native WebSocket with TLS\n * - Deno: uses native WebSocket with TLS\n */\n\nimport { EventEmitter } from 'events';\nimport type { IncomingMessage } from './http';\nimport { createServer as createHttpsServer } from './https';\nimport { WebSocket, WebSocketServer, ServerOptions, Data, ReadyState, CLOSE_CODES } from './ws';\nimport { runtime } from './runtime';\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) {\n queueMicrotask(callback);\n }\n}\n\n/**\n * Helper: Build HTTPS options from WSS options (eliminates duplication in constructor)\n */\nfunction buildHttpsOptions(options?: WSSServerOptions): any {\n const httpsOptions: any = {};\n if (options?.key) httpsOptions.key = options.key;\n if (options?.cert) httpsOptions.cert = options.cert;\n if (options?.ca) httpsOptions.ca = options.ca;\n if (options?.passphrase) httpsOptions.passphrase = options.passphrase;\n if (options?.rejectUnauthorized !== undefined) httpsOptions.rejectUnauthorized = options.rejectUnauthorized;\n if (options?.requestCert !== undefined) httpsOptions.requestCert = options.requestCert;\n return httpsOptions;\n}\n\n/**\n * Helper: Emit close event with optional callback (eliminates duplication in close method)\n */\nfunction emitCloseWithCallback(emitter: EventEmitter, callback?: (err?: Error) => void): void {\n emitter.emit('close');\n queueCallback(callback as any);\n}\n\n/**\n * WSS Server options (extends WebSocket ServerOptions with TLS)\n */\nexport interface WSSServerOptions extends ServerOptions {\n // TLS/SSL options\n key?: string | Buffer;\n cert?: string | Buffer;\n ca?: string | Buffer;\n passphrase?: string;\n rejectUnauthorized?: boolean;\n requestCert?: boolean;\n\n // HTTPS server\n httpsServer?: any;\n}\n\n/**\n * WebSocket Secure client class\n */\nexport class WSSClient extends WebSocket {\n constructor(address: string | URL, protocols?: string | string[], options?: any) {\n // Convert ws:// to wss://\n const urlString = typeof address === 'string' ? address : address.toString();\n const secureUrl = urlString.replace(/^ws:\\/\\//i, 'wss://');\n\n super(secureUrl, protocols, options);\n }\n}\n\n/**\n * WebSocket Secure Server class\n */\nexport class WSSServer extends EventEmitter {\n public clients: Set<WebSocket> = new Set();\n public options: WSSServerOptions;\n public path: string;\n\n private _httpsServer: any;\n private _wsServer!: WebSocketServer;\n\n constructor(options?: WSSServerOptions, callback?: () => void) {\n super();\n this.options = options || {};\n this.path = options?.path || '/';\n\n if (runtime === 'node') {\n // Node.js - create HTTPS server with WebSocket upgrade\n if (options?.httpsServer) {\n this._httpsServer = options.httpsServer;\n this._setupServer(callback);\n } else if (options?.noServer) {\n // No server mode - user will call handleUpgrade manually\n this._wsServer = new WebSocketServer({ noServer: true });\n queueCallback(callback);\n } else {\n // Create new HTTPS server\n this._httpsServer = createHttpsServer(buildHttpsOptions(options));\n this._setupServer(callback);\n\n if (options?.port) {\n this._httpsServer.listen(options.port, options.host, callback);\n }\n }\n } else {\n // Bun/Deno - WebSocket server with TLS\n this._wsServer = new WebSocketServer(options);\n queueCallback(callback);\n }\n }\n\n private _setupServer(callback?: () => void): void {\n // Create WebSocket server attached to HTTPS server\n this._wsServer = new WebSocketServer({\n ...this.options,\n server: this._httpsServer,\n noServer: false\n });\n\n // Forward events from underlying WebSocket server\n this._wsServer.on('connection', (client: WebSocket, request: IncomingMessage) => {\n if (this.options.clientTracking !== false) {\n this.clients.add(client);\n client.on('close', () => {\n this.clients.delete(client);\n });\n }\n this.emit('connection', client, request);\n });\n\n this._wsServer.on('error', (error: Error) => {\n this.emit('error', error);\n });\n\n if (!this.options?.port) {\n queueCallback(callback);\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 if (this._wsServer) {\n this._wsServer.handleUpgrade(request, socket, head, callback);\n }\n }\n\n /**\n * Check if server should handle request\n */\n shouldHandle(request: IncomingMessage): boolean {\n if (this._wsServer) {\n return this._wsServer.shouldHandle(request);\n }\n if (this.path && request.url !== this.path) {\n return false;\n }\n return true;\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._wsServer) {\n this._wsServer.close(() => {\n if (this._httpsServer) {\n this._httpsServer.close(callback);\n } else {\n emitCloseWithCallback(this, callback);\n }\n });\n } else if (this._httpsServer) {\n this._httpsServer.close(callback);\n } else {\n emitCloseWithCallback(this, callback);\n }\n }\n\n /**\n * Get server address\n */\n address(): { port: number; family: string; address: string } | null {\n if (this._httpsServer && this._httpsServer.address) {\n return this._httpsServer.address();\n }\n if (this._wsServer) {\n return this._wsServer.address();\n }\n return null;\n }\n}\n\n/**\n * Create WebSocket Secure client\n */\nexport function createWSSClient(address: string | URL, protocols?: string | string[], options?: any): WSSClient {\n return new WSSClient(address, protocols, options);\n}\n\n/**\n * Create WebSocket Secure server\n */\nexport function createWSSServer(options?: WSSServerOptions, callback?: () => void): WSSServer {\n return new WSSServer(options, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Re-export types and constants from ws module\n */\nexport type { ServerOptions, Data };\nexport { ReadyState, CLOSE_CODES };\n\n/**\n * Default export\n */\nexport default {\n WSSClient,\n WSSServer,\n createWSSClient,\n createWSSServer,\n ReadyState,\n CLOSE_CODES,\n getRuntime,\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\nfunction getRequestPath(url?: string): string {\n const [pathname = '/'] = (url || '/').split('?');\n return pathname || '/';\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 private _ownsHttpServer: boolean = false;\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._ownsHttpServer = true;\n this._setupUpgradeHandler();\n\n if (options?.port) {\n this._httpServer.listen(options.port, options.host, callback);\n }\n }\n } else if (runtime === 'bun') {\n if (options?.server?.registerWebSocketServer) {\n this._httpServer = options.server;\n options.server.registerWebSocketServer(this);\n }\n queueCallback(callback as any);\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 const requestPath = getRequestPath(request.url);\n\n console.log('[WebSocket] Upgrade request:', requestPath, 'Expected:', this.path || '(any)');\n if (this.path && requestPath !== 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 _createClientFromBunSocket(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 client.send = (data: Data, _options?: any, callback?: (err?: Error) => void) => {\n if (client.readyState !== ReadyState.OPEN) {\n queueCallback(callback, new Error('WebSocket is not open'));\n return;\n }\n\n try {\n socket.send(data);\n queueCallback(callback);\n } catch (error) {\n queueCallback(callback, error as Error);\n }\n };\n\n client.close = (code?: number, reason?: string) => {\n if (client.readyState === ReadyState.CLOSED) {\n return;\n }\n\n client.readyState = ReadyState.CLOSING;\n socket.close(code ?? CLOSE_CODES.NORMAL, reason);\n };\n\n client.terminate = () => {\n socket.close();\n client.readyState = ReadyState.CLOSED;\n };\n\n return client;\n }\n\n _handleBunOpen(socket: any, request: Partial<IncomingMessage> = {}): void {\n const client = this._createClientFromBunSocket(socket);\n\n if (socket.data) {\n socket.data.client = client;\n }\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 const incomingRequest = {\n url: request.url || this.path,\n headers: request.headers || {},\n socket: request.socket || { remoteAddress: undefined },\n } as IncomingMessage;\n\n this.emit('connection', client, incomingRequest);\n }\n\n _handleBunMessage(socket: any, message: any): void {\n const client = socket.data?.client;\n if (!client) {\n return;\n }\n\n const isBinary = typeof message !== 'string';\n const payload = typeof message === 'string'\n ? message\n : message instanceof ArrayBuffer\n ? Buffer.from(message)\n : ArrayBuffer.isView(message)\n ? Buffer.from(message.buffer, message.byteOffset, message.byteLength)\n : Buffer.from(String(message));\n\n client.emit('message', payload, isBinary);\n }\n\n _handleBunClose(socket: any, code: number, reason: any): void {\n const client = socket.data?.client;\n if (!client) {\n return;\n }\n\n client.readyState = ReadyState.CLOSED;\n client.emit('close', code, typeof reason === 'string' ? reason : reason?.toString() || '');\n this.clients.delete(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 && this._ownsHttpServer) {\n this._httpServer.close(callback);\n } else {\n if (runtime === 'bun' && this._httpServer?.unregisterWebSocketServer) {\n this._httpServer.unregisterWebSocketServer(this);\n }\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 && getRequestPath(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"],"mappings":"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","names":["EventEmitter","EventEmitter","queueCallback","createErrorResponse","createAddress","emitListeningWithCallback","closeAndEmit","https","Server","IncomingMessage","ServerResponse","createServer","Server","EventEmitter","ReadyState","queueCallback","http","request","queueCallback","EventEmitter","createServer","request","getRuntime","getRuntime"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "elit",
3
- "version": "3.5.0",
3
+ "version": "3.5.2",
4
4
  "description": "Optimized lightweight library for creating DOM elements with reactive state",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
package/src/cli.ts CHANGED
@@ -126,7 +126,7 @@ async function main() {
126
126
  }
127
127
  }
128
128
 
129
- async function runDev(args: string[]) {
129
+ export async function runDev(args: string[]) {
130
130
  const cliOptions = parseDevArgs(args);
131
131
  const cwd = process.cwd();
132
132
 
@@ -181,7 +181,7 @@ async function runDev(args: string[]) {
181
181
  });
182
182
  }
183
183
 
184
- async function runBuild(args: string[]) {
184
+ export async function runBuild(args: string[]) {
185
185
  const cliOptions = parseBuildArgs(args);
186
186
  const config = await loadConfig();
187
187
 
@@ -242,7 +242,7 @@ async function runBuild(args: string[]) {
242
242
  }
243
243
  }
244
244
 
245
- async function runPreview(args: string[]) {
245
+ export async function runPreview(args: string[]) {
246
246
  const cliOptions = parsePreviewArgs(args);
247
247
  const config = await loadConfig();
248
248
 
@@ -298,6 +298,11 @@ async function runPreview(args: string[]) {
298
298
  options.api = mergedOptions.api;
299
299
  }
300
300
 
301
+ // Add WebSocket endpoints if configured
302
+ if (mergedOptions.ws && mergedOptions.ws.length > 0) {
303
+ options.ws = mergedOptions.ws;
304
+ }
305
+
301
306
  // Add HTTPS if configured
302
307
  if (mergedOptions.https) {
303
308
  options.https = mergedOptions.https;
@@ -323,7 +328,7 @@ async function runPreview(args: string[]) {
323
328
  setupShutdownHandlers(() => devServer.close());
324
329
  }
325
330
 
326
- async function runTest(args: string[]) {
331
+ export async function runTest(args: string[]) {
327
332
  const cliOptions = parseTestArgs(args);
328
333
  const config = await loadConfig();
329
334
 
@@ -371,7 +376,7 @@ async function runTest(args: string[]) {
371
376
  }
372
377
  }
373
378
 
374
- async function runDesktop(args: string[]) {
379
+ export async function runDesktop(args: string[]) {
375
380
  try {
376
381
  await runDesktopCommand(args);
377
382
  } catch (error) {
@@ -380,7 +385,7 @@ async function runDesktop(args: string[]) {
380
385
  }
381
386
  }
382
387
 
383
- async function runMobile(args: string[]) {
388
+ export async function runMobile(args: string[]) {
384
389
  try {
385
390
  await runMobileCommand(args);
386
391
  } catch (error) {
@@ -389,7 +394,7 @@ async function runMobile(args: string[]) {
389
394
  }
390
395
  }
391
396
 
392
- async function runNative(args: string[]) {
397
+ export async function runNative(args: string[]) {
393
398
  try {
394
399
  await runNativeCommand(args);
395
400
  } catch (error) {
@@ -398,7 +403,7 @@ async function runNative(args: string[]) {
398
403
  }
399
404
  }
400
405
 
401
- async function runWapk(args: string[]) {
406
+ export async function runWapk(args: string[]) {
402
407
  try {
403
408
  await runWapkCommand(args);
404
409
  } catch (error) {
@@ -642,6 +647,7 @@ Preview Options:
642
647
  Note: Preview mode has full feature parity with dev mode:
643
648
  - Single root and multi-client configurations (use clients[] in config)
644
649
  - REST API endpoints (use api option in config)
650
+ - WebSocket endpoints (use ws option in config)
645
651
  - Proxy forwarding and Web Workers
646
652
  - HTTPS support, custom middleware, and SSR
647
653
 
@@ -712,6 +718,18 @@ API Configuration:
712
718
  1. Client-specific API routes are matched first (defined in clients[].api)
713
719
  2. Global API routes are matched second (defined in dev.api or preview.api)
714
720
 
721
+ WebSocket Configuration:
722
+ Configure WebSocket endpoints per client or globally.
723
+ Supports both global configuration and client-specific configuration.
724
+
725
+ Options:
726
+ - path: Upgrade path to match (required, e.g., '/ws', '/chat')
727
+ - handler: Connection handler invoked with { ws, req, path, query, headers }
728
+
729
+ Priority:
730
+ 1. Client-specific endpoints are prefixed with the client's basePath (defined in clients[].ws)
731
+ 2. Global endpoints listen exactly as configured (defined in dev.ws or preview.ws)
732
+
715
733
  Examples:
716
734
  elit dev
717
735
  elit dev --port 8080
package/src/config.ts CHANGED
@@ -177,10 +177,8 @@ export interface DesktopNativeConfig {
177
177
  }
178
178
 
179
179
  export interface WapkLockConfig {
180
- /** Plain-text password used to encrypt the archive (prefer passwordEnv for real projects) */
180
+ /** Plain-text password used to encrypt the archive */
181
181
  password?: string;
182
- /** Environment variable name that contains the archive password */
183
- passwordEnv?: string;
184
182
  }
185
183
 
186
184
  export interface WapkConfig {