elit 3.6.5 → 3.6.7

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 (154) hide show
  1. package/Cargo.lock +1 -1
  2. package/Cargo.toml +1 -1
  3. package/README.md +6 -0
  4. package/dist/build.cjs +421 -331
  5. package/dist/build.d.ts +1 -16
  6. package/dist/build.js +420 -330
  7. package/dist/build.mjs +420 -330
  8. package/dist/chokidar.cjs +219 -182
  9. package/dist/chokidar.d.ts +25 -10
  10. package/dist/chokidar.js +217 -182
  11. package/dist/chokidar.mjs +218 -183
  12. package/dist/cli.cjs +21608 -20241
  13. package/dist/cli.d.ts +19 -37
  14. package/dist/cli.mjs +21262 -19910
  15. package/dist/config.cjs +357 -350
  16. package/dist/config.d.ts +19 -240
  17. package/dist/config.js +520 -515
  18. package/dist/config.mjs +346 -341
  19. package/dist/contracts-BeW9k0yZ.d.ts +54 -0
  20. package/dist/contracts-D7KIS-TK.d.ts +36 -0
  21. package/dist/coverage.cjs +448 -485
  22. package/dist/coverage.d.ts +13 -59
  23. package/dist/coverage.js +447 -484
  24. package/dist/coverage.mjs +447 -484
  25. package/dist/database.cjs +819 -828
  26. package/dist/database.d.ts +8 -24
  27. package/dist/database.js +818 -829
  28. package/dist/database.mjs +818 -829
  29. package/dist/desktop-auto-render.cjs +1700 -1522
  30. package/dist/desktop-auto-render.d.ts +4 -9
  31. package/dist/desktop-auto-render.js +1695 -1517
  32. package/dist/desktop-auto-render.mjs +1696 -1518
  33. package/dist/desktop.cjs +3 -1
  34. package/dist/desktop.d.ts +4 -1
  35. package/dist/desktop.js +1 -1
  36. package/dist/desktop.mjs +1 -1
  37. package/dist/dev-build.cjs +830 -0
  38. package/dist/dev-build.d.ts +53 -0
  39. package/dist/dev-build.js +3318 -0
  40. package/dist/dev-build.mjs +797 -0
  41. package/dist/dom.cjs +717 -590
  42. package/dist/dom.d.ts +2 -15
  43. package/dist/dom.js +714 -587
  44. package/dist/dom.mjs +716 -589
  45. package/dist/el.cjs +62 -52
  46. package/dist/el.d.ts +5 -10
  47. package/dist/el.js +60 -52
  48. package/dist/el.mjs +60 -52
  49. package/dist/fs.cjs +72 -63
  50. package/dist/fs.d.ts +22 -19
  51. package/dist/fs.js +71 -62
  52. package/dist/fs.mjs +71 -62
  53. package/dist/hmr.cjs +40 -14
  54. package/dist/hmr.d.ts +11 -23
  55. package/dist/hmr.js +38 -14
  56. package/dist/hmr.mjs +38 -14
  57. package/dist/http.cjs +251 -99
  58. package/dist/http.d.ts +38 -104
  59. package/dist/http.js +249 -99
  60. package/dist/http.mjs +249 -99
  61. package/dist/https.cjs +524 -228
  62. package/dist/https.d.ts +44 -36
  63. package/dist/https.js +520 -226
  64. package/dist/https.mjs +522 -228
  65. package/dist/index.cjs +7502 -7690
  66. package/dist/index.d.ts +8 -3
  67. package/dist/index.js +7486 -7676
  68. package/dist/index.mjs +7497 -7686
  69. package/dist/mime-types.cjs +10 -4
  70. package/dist/mime-types.d.ts +8 -11
  71. package/dist/mime-types.js +9 -3
  72. package/dist/mime-types.mjs +9 -3
  73. package/dist/native.cjs +8616 -8869
  74. package/dist/native.d.ts +7 -8
  75. package/dist/native.js +8682 -8935
  76. package/dist/native.mjs +8615 -8868
  77. package/dist/path.cjs +83 -77
  78. package/dist/path.d.ts +29 -29
  79. package/dist/path.js +82 -76
  80. package/dist/path.mjs +82 -76
  81. package/dist/pm.cjs +3300 -0
  82. package/dist/pm.d.ts +256 -0
  83. package/dist/pm.js +5638 -0
  84. package/dist/pm.mjs +3196 -0
  85. package/dist/preview-build.cjs +712 -0
  86. package/dist/preview-build.d.ts +59 -0
  87. package/dist/preview-build.js +3194 -0
  88. package/dist/preview-build.mjs +676 -0
  89. package/dist/render-context.cjs +13 -2
  90. package/dist/render-context.d.ts +9 -31
  91. package/dist/render-context.js +11 -2
  92. package/dist/render-context.mjs +11 -2
  93. package/dist/router.cjs +787 -645
  94. package/dist/router.d.ts +8 -12
  95. package/dist/router.js +786 -644
  96. package/dist/router.mjs +786 -644
  97. package/dist/runtime.cjs +1 -1
  98. package/dist/runtime.js +1 -1
  99. package/dist/runtime.mjs +1 -1
  100. package/dist/server.cjs +3315 -2603
  101. package/dist/server.d.ts +49 -4
  102. package/dist/server.js +7611 -2834
  103. package/dist/server.mjs +3317 -2607
  104. package/dist/smtp-server.cjs +128 -0
  105. package/dist/smtp-server.d.ts +27 -0
  106. package/dist/smtp-server.js +4199 -0
  107. package/dist/smtp-server.mjs +100 -0
  108. package/dist/state-DvEkDehk.d.ts +195 -0
  109. package/dist/state.cjs +768 -658
  110. package/dist/state.d.ts +11 -69
  111. package/dist/state.js +760 -650
  112. package/dist/state.mjs +767 -657
  113. package/dist/style.cjs +1011 -968
  114. package/dist/style.d.ts +13 -127
  115. package/dist/style.js +1009 -970
  116. package/dist/style.mjs +1011 -971
  117. package/dist/test-reporter.cjs +332 -316
  118. package/dist/test-reporter.d.ts +28 -33
  119. package/dist/test-reporter.js +328 -312
  120. package/dist/test-reporter.mjs +328 -312
  121. package/dist/test-runtime.cjs +927 -968
  122. package/dist/test-runtime.d.ts +24 -99
  123. package/dist/test-runtime.js +922 -965
  124. package/dist/test-runtime.mjs +922 -965
  125. package/dist/test.cjs +4428 -4273
  126. package/dist/test.d.ts +2 -8
  127. package/dist/test.js +4307 -4154
  128. package/dist/test.mjs +4419 -4267
  129. package/dist/types-BONVzPtp.d.ts +59 -0
  130. package/dist/types-BR4wMiVx.d.ts +32 -0
  131. package/dist/types-C4gKykuG.d.ts +23 -0
  132. package/dist/types-CIhpN1-K.d.ts +64 -0
  133. package/dist/types-Ckj8md_j.d.ts +84 -0
  134. package/dist/types-CpjQTAkX.d.ts +24 -0
  135. package/dist/types-D0LjrYjS.d.ts +14 -0
  136. package/dist/types-DAisuVr5.d.ts +75 -0
  137. package/dist/types-tJn88E1N.d.ts +242 -0
  138. package/dist/types.d.ts +71 -226
  139. package/dist/universal.cjs +1 -1
  140. package/dist/universal.d.ts +1 -5
  141. package/dist/universal.js +1 -1
  142. package/dist/universal.mjs +1 -1
  143. package/dist/websocket-XfyK23zD.d.ts +119 -0
  144. package/dist/ws.cjs +129 -108
  145. package/dist/ws.d.ts +21 -131
  146. package/dist/ws.js +128 -109
  147. package/dist/ws.mjs +128 -109
  148. package/dist/wss.cjs +757 -479
  149. package/dist/wss.d.ts +31 -28
  150. package/dist/wss.js +755 -479
  151. package/dist/wss.mjs +758 -482
  152. package/package.json +16 -1
  153. package/vendor/epaint-0.31.1/src/image.rs +418 -0
  154. package/dist/server-CcBFc2F5.d.ts +0 -449
package/dist/wss.mjs CHANGED
@@ -26,10 +26,10 @@ var __copyProps = (to, from, except, desc) => {
26
26
  };
27
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
28
 
29
- // src/runtime.ts
29
+ // src/shares/runtime.ts
30
30
  var runtime, isNode, isBun, isDeno;
31
31
  var init_runtime = __esm({
32
- "src/runtime.ts"() {
32
+ "src/shares/runtime.ts"() {
33
33
  "use strict";
34
34
  runtime = (() => {
35
35
  if (typeof Deno !== "undefined") return "deno";
@@ -42,26 +42,78 @@ var init_runtime = __esm({
42
42
  }
43
43
  });
44
44
 
45
- // src/http.ts
46
- var http_exports = {};
47
- __export(http_exports, {
48
- Agent: () => Agent,
49
- ClientRequest: () => ClientRequest,
50
- IncomingMessage: () => IncomingMessage,
51
- METHODS: () => METHODS,
52
- STATUS_CODES: () => STATUS_CODES,
53
- Server: () => Server,
54
- ServerResponse: () => ServerResponse,
55
- createServer: () => createServer,
56
- default: () => http_default,
57
- get: () => get,
58
- getRuntime: () => getRuntime,
59
- request: () => request
60
- });
61
- import { EventEmitter } from "events";
62
- function queueCallback(callback) {
45
+ // src/server/http/utils.ts
46
+ function queueCallback2(callback) {
63
47
  if (callback) queueMicrotask(callback);
64
48
  }
49
+ function getRequestPath2(url) {
50
+ if (!url) return "";
51
+ try {
52
+ const urlObj = new URL(url);
53
+ return urlObj.pathname + urlObj.search;
54
+ } catch {
55
+ return url;
56
+ }
57
+ }
58
+ function headersToRecord(headers) {
59
+ const result = /* @__PURE__ */ Object.create(null);
60
+ headers.forEach((value, key) => {
61
+ result[key] = value;
62
+ });
63
+ return result;
64
+ }
65
+ function headersToRawHeaders(headers) {
66
+ const rawHeaders = [];
67
+ headers.forEach((value, key) => {
68
+ rawHeaders.push(key, value);
69
+ });
70
+ return rawHeaders;
71
+ }
72
+ function normalizeRequestBodyChunk(chunk, encoding = "utf8") {
73
+ if (typeof chunk === "string") {
74
+ if (encoding !== "utf8" && typeof Buffer !== "undefined") {
75
+ return Buffer.from(chunk, encoding);
76
+ }
77
+ return chunk;
78
+ }
79
+ if (chunk instanceof Uint8Array) {
80
+ return chunk;
81
+ }
82
+ if (chunk instanceof ArrayBuffer) {
83
+ return new Uint8Array(chunk);
84
+ }
85
+ if (ArrayBuffer.isView(chunk)) {
86
+ return new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);
87
+ }
88
+ return new TextEncoder().encode(String(chunk));
89
+ }
90
+ function buildRequestBody(chunks) {
91
+ if (chunks.length === 0) {
92
+ return void 0;
93
+ }
94
+ if (chunks.length === 1) {
95
+ return chunks[0];
96
+ }
97
+ if (chunks.every((chunk) => typeof chunk === "string")) {
98
+ return chunks.join("");
99
+ }
100
+ const encoder = new TextEncoder();
101
+ const bodyParts = chunks.map((chunk) => typeof chunk === "string" ? encoder.encode(chunk) : chunk);
102
+ const totalLength = bodyParts.reduce((sum, part) => sum + part.byteLength, 0);
103
+ const body = new Uint8Array(totalLength);
104
+ let offset = 0;
105
+ for (const part of bodyParts) {
106
+ body.set(part, offset);
107
+ offset += part.byteLength;
108
+ }
109
+ return body;
110
+ }
111
+ function isFetchResponse(value) {
112
+ return typeof value?.status === "number" && typeof value?.statusText === "string" && typeof value?.headers?.forEach === "function";
113
+ }
114
+ function isNodeIncomingMessage(value) {
115
+ return typeof value?.on === "function" && typeof value?.headers === "object" && (typeof value?.httpVersion === "string" || value?.socket !== void 0);
116
+ }
65
117
  function headersToInit(headers) {
66
118
  const result = {};
67
119
  for (const key in headers) {
@@ -79,75 +131,110 @@ function createErrorResponse() {
79
131
  function emitListeningWithCallback(server, callback) {
80
132
  server._listening = true;
81
133
  server.emit("listening");
82
- queueCallback(callback);
134
+ queueCallback2(callback);
83
135
  }
84
136
  function closeAndEmit(server, callback) {
85
137
  server._listening = false;
86
138
  server.emit("close");
87
139
  if (callback) queueMicrotask(() => callback());
88
140
  }
89
- function createServer(optionsOrListener, requestListener) {
90
- return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
91
- }
92
- function request(url, options, callback) {
93
- const urlString = typeof url === "string" ? url : url.toString();
94
- const req = new ClientRequest(urlString, options);
95
- if (isNode) {
96
- const urlObj = new URL(urlString);
97
- const client = urlObj.protocol === "https:" ? https : http;
98
- const nodeReq = client.request(urlString, {
99
- method: options?.method || "GET",
100
- headers: options?.headers,
101
- timeout: options?.timeout,
102
- signal: options?.signal
103
- }, (res) => {
104
- const incomingMessage = new IncomingMessage(res);
105
- if (callback) callback(incomingMessage);
106
- req.emit("response", incomingMessage);
107
- });
108
- nodeReq.on("error", (error) => req.emit("error", error));
109
- nodeReq.end();
110
- } else {
111
- queueMicrotask(async () => {
112
- try {
113
- const response = await fetch(urlString, {
114
- method: options?.method || "GET",
115
- headers: options?.headers,
116
- signal: options?.signal
117
- });
118
- const fetchRequest = new Request(urlString);
119
- const incomingMessage = new IncomingMessage(fetchRequest);
120
- incomingMessage.statusCode = response.status;
121
- incomingMessage.statusMessage = response.statusText;
122
- if (callback) callback(incomingMessage);
123
- req.emit("response", incomingMessage);
124
- } catch (error) {
125
- req.emit("error", error);
141
+ var init_utils = __esm({
142
+ "src/server/http/utils.ts"() {
143
+ "use strict";
144
+ }
145
+ });
146
+
147
+ // src/server/http/agent.ts
148
+ var Agent;
149
+ var init_agent = __esm({
150
+ "src/server/http/agent.ts"() {
151
+ "use strict";
152
+ Agent = class {
153
+ constructor(options) {
154
+ this.options = options;
126
155
  }
127
- });
156
+ };
128
157
  }
129
- return req;
130
- }
131
- function get(url, options, callback) {
132
- return request(url, { ...options, method: "GET" }, callback);
133
- }
134
- function getRuntime() {
135
- return runtime;
136
- }
137
- var http, https, METHODS, STATUS_CODES, IncomingMessage, ServerResponse, Server, ClientRequest, Agent, http_default;
138
- var init_http = __esm({
139
- "src/http.ts"() {
158
+ });
159
+
160
+ // src/server/http/client-request.ts
161
+ import { EventEmitter as EventEmitter4 } from "events";
162
+ var ClientRequest;
163
+ var init_client_request = __esm({
164
+ "src/server/http/client-request.ts"() {
140
165
  "use strict";
141
- init_runtime();
142
- if (isNode && typeof process !== "undefined") {
143
- try {
144
- http = __require("http");
145
- https = __require("https");
146
- } catch (e) {
147
- http = __require("http");
148
- https = __require("https");
166
+ init_utils();
167
+ ClientRequest = class extends EventEmitter4 {
168
+ constructor(_url, _options = {}) {
169
+ super();
170
+ this._bodyChunks = [];
171
+ this._ended = false;
149
172
  }
150
- }
173
+ _setNativeRequest(nativeRequest) {
174
+ this._nativeRequest = nativeRequest;
175
+ }
176
+ _setExecutor(executor) {
177
+ this._executor = executor;
178
+ }
179
+ write(chunk, encoding, callback) {
180
+ if (this._ended) {
181
+ throw new Error("Cannot write after end");
182
+ }
183
+ if (typeof encoding === "function") {
184
+ callback = encoding;
185
+ encoding = void 0;
186
+ }
187
+ if (this._nativeRequest) {
188
+ const actualEncoding2 = typeof encoding === "string" ? encoding : void 0;
189
+ return this._nativeRequest.write(chunk, actualEncoding2, callback);
190
+ }
191
+ const actualEncoding = typeof encoding === "string" ? encoding : "utf8";
192
+ this._bodyChunks.push(normalizeRequestBodyChunk(chunk, actualEncoding));
193
+ queueCallback2(callback);
194
+ return true;
195
+ }
196
+ end(chunk, encoding, callback) {
197
+ if (typeof chunk === "function") {
198
+ callback = chunk;
199
+ chunk = void 0;
200
+ encoding = void 0;
201
+ } else if (typeof encoding === "function") {
202
+ callback = encoding;
203
+ encoding = void 0;
204
+ }
205
+ if (this._ended) {
206
+ queueCallback2(callback);
207
+ return;
208
+ }
209
+ this._ended = true;
210
+ if (this._nativeRequest) {
211
+ const actualEncoding = typeof encoding === "string" ? encoding : void 0;
212
+ if (chunk !== void 0) {
213
+ this._nativeRequest.end(chunk, actualEncoding, callback);
214
+ } else {
215
+ this._nativeRequest.end(callback);
216
+ }
217
+ return;
218
+ }
219
+ if (chunk !== void 0) {
220
+ this._bodyChunks.push(normalizeRequestBodyChunk(chunk, typeof encoding === "string" ? encoding : "utf8"));
221
+ }
222
+ const executor = this._executor;
223
+ const body = buildRequestBody(this._bodyChunks);
224
+ if (executor) {
225
+ Promise.resolve().then(() => executor(body)).catch((error) => this.emit("error", error));
226
+ }
227
+ queueCallback2(callback);
228
+ }
229
+ };
230
+ }
231
+ });
232
+
233
+ // src/server/http/constants.ts
234
+ var METHODS, STATUS_CODES;
235
+ var init_constants = __esm({
236
+ "src/server/http/constants.ts"() {
237
+ "use strict";
151
238
  METHODS = [
152
239
  "GET",
153
240
  "POST",
@@ -215,13 +302,30 @@ var init_http = __esm({
215
302
  510: "Not Extended",
216
303
  511: "Network Authentication Required"
217
304
  };
218
- IncomingMessage = class extends EventEmitter {
219
- constructor(req) {
305
+ }
306
+ });
307
+
308
+ // src/server/http/incoming-message.ts
309
+ import { EventEmitter as EventEmitter5 } from "events";
310
+ var IncomingMessage;
311
+ var init_incoming_message = __esm({
312
+ "src/server/http/incoming-message.ts"() {
313
+ "use strict";
314
+ init_utils();
315
+ IncomingMessage = class extends EventEmitter5 {
316
+ constructor(req, requestMethod) {
220
317
  super();
221
318
  this.httpVersion = "1.1";
222
319
  this.rawHeaders = [];
223
320
  this._req = req;
224
- if (isNode) {
321
+ if (isFetchResponse(req)) {
322
+ this.method = requestMethod || "GET";
323
+ this.url = getRequestPath2(req.url);
324
+ this.headers = headersToRecord(req.headers);
325
+ this.statusCode = req.status;
326
+ this.statusMessage = req.statusText;
327
+ this.rawHeaders = headersToRawHeaders(req.headers);
328
+ } else if (isNodeIncomingMessage(req)) {
225
329
  this.method = req.method;
226
330
  this.url = req.url;
227
331
  this.headers = req.headers;
@@ -232,14 +336,13 @@ var init_http = __esm({
232
336
  this.socket = req.socket;
233
337
  } else {
234
338
  this.method = req.method;
235
- const urlObj = new URL(req.url);
236
- this.url = urlObj.pathname + urlObj.search;
237
- this.headers = req.headers;
238
- this.rawHeaders = [];
339
+ this.url = getRequestPath2(req.url);
340
+ this.headers = headersToRecord(req.headers);
341
+ this.rawHeaders = headersToRawHeaders(req.headers);
239
342
  }
240
343
  }
241
344
  async text() {
242
- if (isNode) {
345
+ if (isNodeIncomingMessage(this._req)) {
243
346
  return new Promise((resolve, reject) => {
244
347
  const chunks = [];
245
348
  this._req.on("data", (chunk) => chunks.push(chunk));
@@ -250,14 +353,92 @@ var init_http = __esm({
250
353
  return this._req.text();
251
354
  }
252
355
  async json() {
253
- if (isNode) {
356
+ if (isNodeIncomingMessage(this._req)) {
254
357
  const text = await this.text();
255
358
  return JSON.parse(text);
256
359
  }
257
360
  return this._req.json();
258
361
  }
259
362
  };
260
- ServerResponse = class extends EventEmitter {
363
+ }
364
+ });
365
+
366
+ // src/server/http/node-modules.ts
367
+ var http, https;
368
+ var init_node_modules = __esm({
369
+ "src/server/http/node-modules.ts"() {
370
+ "use strict";
371
+ init_runtime();
372
+ if (isNode && typeof process !== "undefined") {
373
+ try {
374
+ http = __require("http");
375
+ https = __require("https");
376
+ } catch {
377
+ http = __require("http");
378
+ https = __require("https");
379
+ }
380
+ }
381
+ }
382
+ });
383
+
384
+ // src/server/http/request-api.ts
385
+ function request(url, options, callback) {
386
+ const urlString = typeof url === "string" ? url : url.toString();
387
+ const req = new ClientRequest(urlString, options);
388
+ if (isNode) {
389
+ const urlObj = new URL(urlString);
390
+ const client = urlObj.protocol === "https:" ? https : http;
391
+ const nodeReq = client.request(urlString, {
392
+ method: options?.method || "GET",
393
+ headers: options?.headers,
394
+ timeout: options?.timeout,
395
+ signal: options?.signal
396
+ }, (res) => {
397
+ const incomingMessage = new IncomingMessage(res);
398
+ if (callback) callback(incomingMessage);
399
+ req.emit("response", incomingMessage);
400
+ });
401
+ req._setNativeRequest(nodeReq);
402
+ nodeReq.on("error", (error) => req.emit("error", error));
403
+ } else {
404
+ req._setExecutor(async (body) => {
405
+ const response = await fetch(urlString, {
406
+ method: options?.method || "GET",
407
+ headers: options?.headers,
408
+ body,
409
+ signal: options?.signal
410
+ });
411
+ const incomingMessage = new IncomingMessage(response, options?.method || "GET");
412
+ if (callback) callback(incomingMessage);
413
+ req.emit("response", incomingMessage);
414
+ });
415
+ }
416
+ return req;
417
+ }
418
+ function get(url, options, callback) {
419
+ const req = request(url, { ...options, method: "GET" }, callback);
420
+ req.end();
421
+ return req;
422
+ }
423
+ var init_request_api = __esm({
424
+ "src/server/http/request-api.ts"() {
425
+ "use strict";
426
+ init_runtime();
427
+ init_client_request();
428
+ init_incoming_message();
429
+ init_node_modules();
430
+ }
431
+ });
432
+
433
+ // src/server/http/response.ts
434
+ import { EventEmitter as EventEmitter6 } from "events";
435
+ var ServerResponse;
436
+ var init_response = __esm({
437
+ "src/server/http/response.ts"() {
438
+ "use strict";
439
+ init_runtime();
440
+ init_utils();
441
+ ServerResponse = class extends EventEmitter6 {
261
442
  constructor(_req, nodeRes) {
262
443
  super();
263
444
  this.statusCode = 200;
@@ -350,7 +531,7 @@ var init_http = __esm({
350
531
  return this._nodeRes.write(chunk, encoding, callback);
351
532
  }
352
533
  this._body += chunk;
353
- queueCallback(callback);
534
+ queueCallback2(callback);
354
535
  return true;
355
536
  }
356
537
  end(chunk, encoding, callback) {
@@ -383,14 +564,13 @@ var init_http = __esm({
383
564
  if (this._resolve) {
384
565
  this._resolve(response);
385
566
  }
386
- queueCallback(callback);
567
+ queueCallback2(callback);
387
568
  }
388
569
  return this;
389
570
  }
390
571
  _setResolver(resolve) {
391
572
  this._resolve = resolve;
392
573
  }
393
- // Express.js-like methods
394
574
  json(data, statusCode = 200) {
395
575
  if (!this.headersSent) {
396
576
  this.setHeader("Content-Type", "application/json");
@@ -414,7 +594,35 @@ var init_http = __esm({
414
594
  return this;
415
595
  }
416
596
  };
417
- Server = class extends EventEmitter {
597
+ }
598
+ });
599
+
600
+ // src/server/http/runtime.ts
601
+ function getRuntime3() {
602
+ return runtime;
603
+ }
604
+ var init_runtime2 = __esm({
605
+ "src/server/http/runtime.ts"() {
606
+ "use strict";
607
+ init_runtime();
608
+ }
609
+ });
610
+
611
+ // src/server/http/server-runtime.ts
612
+ import { EventEmitter as EventEmitter7 } from "events";
613
+ function createServer(optionsOrListener, requestListener) {
614
+ return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
615
+ }
616
+ var Server;
617
+ var init_server_runtime = __esm({
618
+ "src/server/http/server-runtime.ts"() {
619
+ "use strict";
620
+ init_runtime();
621
+ init_node_modules();
622
+ init_incoming_message();
623
+ init_response();
624
+ init_utils();
625
+ Server = class extends EventEmitter7 {
418
626
  constructor(requestListener) {
419
627
  super();
420
628
  this._bunWebSocketServers = /* @__PURE__ */ new Set();
@@ -489,6 +697,8 @@ var init_http = __esm({
489
697
  const urlObj = new URL(req.url);
490
698
  const pathname = urlObj.pathname;
491
699
  const requestUrl = urlObj.pathname + urlObj.search;
700
+ const incomingHeaders = headersToRecord(req.headers);
701
+ const rawHeaders = headersToRawHeaders(req.headers);
492
702
  const upgradeHeader = req.headers.get("upgrade");
493
703
  if (upgradeHeader && upgradeHeader.toLowerCase() === "websocket") {
494
704
  const matchingWebSocketServer = Array.from(this._bunWebSocketServers).find((wsServer) => {
@@ -525,9 +735,9 @@ var init_http = __esm({
525
735
  const incomingMessage = {
526
736
  method: req.method,
527
737
  url: requestUrl,
528
- headers: req.headers,
738
+ headers: incomingHeaders,
529
739
  httpVersion: "1.1",
530
- rawHeaders: [],
740
+ rawHeaders,
531
741
  _req: req,
532
742
  text: () => req.text(),
533
743
  json: () => req.json()
@@ -586,6 +796,8 @@ var init_http = __esm({
586
796
  };
587
797
  if (self.requestListener) {
588
798
  self.requestListener(incomingMessage, serverResponse);
799
+ } else {
800
+ self.emit("request", incomingMessage, serverResponse);
589
801
  }
590
802
  if (responseReady) {
591
803
  return new Response(body, {
@@ -660,9 +872,11 @@ var init_http = __esm({
660
872
  return createAddress(0, addr, "unix");
661
873
  }
662
874
  return addr;
663
- } else if (isBun) {
875
+ }
876
+ if (isBun) {
664
877
  return createAddress(this.nativeServer.port, this.nativeServer.hostname);
665
- } else if (isDeno) {
878
+ }
879
+ if (isDeno) {
666
880
  const addr = this.nativeServer.addr;
667
881
  return createAddress(addr.port, addr.hostname);
668
882
  }
@@ -672,22 +886,45 @@ var init_http = __esm({
672
886
  return this._listening;
673
887
  }
674
888
  };
675
- ClientRequest = class extends EventEmitter {
676
- constructor(_url, _options = {}) {
677
- super();
678
- }
679
- write(_chunk) {
680
- return true;
681
- }
682
- end(callback) {
683
- queueCallback(callback);
684
- }
685
- };
686
- Agent = class {
687
- constructor(options) {
688
- this.options = options;
689
- }
690
- };
889
+ }
890
+ });
891
+
892
+ // src/server/http/index.ts
893
+ var http_exports = {};
894
+ __export(http_exports, {
895
+ Agent: () => Agent,
896
+ ClientRequest: () => ClientRequest,
897
+ IncomingMessage: () => IncomingMessage,
898
+ METHODS: () => METHODS,
899
+ STATUS_CODES: () => STATUS_CODES,
900
+ Server: () => Server,
901
+ ServerResponse: () => ServerResponse,
902
+ createServer: () => createServer,
903
+ default: () => http_default,
904
+ get: () => get,
905
+ getRuntime: () => getRuntime3,
906
+ request: () => request
907
+ });
908
+ var http_default;
909
+ var init_http = __esm({
910
+ "src/server/http/index.ts"() {
911
+ "use strict";
912
+ init_agent();
913
+ init_client_request();
914
+ init_constants();
915
+ init_incoming_message();
916
+ init_request_api();
917
+ init_response();
918
+ init_runtime2();
919
+ init_server_runtime();
920
+ init_agent();
921
+ init_client_request();
922
+ init_constants();
923
+ init_incoming_message();
924
+ init_request_api();
925
+ init_response();
926
+ init_runtime2();
927
+ init_server_runtime();
691
928
  http_default = {
692
929
  createServer,
693
930
  request,
@@ -699,227 +936,44 @@ var init_http = __esm({
699
936
  ClientRequest,
700
937
  METHODS,
701
938
  STATUS_CODES,
702
- getRuntime
939
+ getRuntime: getRuntime3
703
940
  };
704
941
  }
705
942
  });
706
943
 
707
- // src/wss.ts
708
- import { EventEmitter as EventEmitter4 } from "events";
944
+ // src/server/ws/constants.ts
945
+ var ReadyState = /* @__PURE__ */ ((ReadyState2) => {
946
+ ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
947
+ ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
948
+ ReadyState2[ReadyState2["CLOSING"] = 2] = "CLOSING";
949
+ ReadyState2[ReadyState2["CLOSED"] = 3] = "CLOSED";
950
+ return ReadyState2;
951
+ })(ReadyState || {});
952
+ var CLOSE_CODES = {
953
+ NORMAL: 1e3,
954
+ GOING_AWAY: 1001,
955
+ PROTOCOL_ERROR: 1002,
956
+ UNSUPPORTED_DATA: 1003,
957
+ NO_STATUS: 1005,
958
+ ABNORMAL: 1006,
959
+ INVALID_DATA: 1007,
960
+ POLICY_VIOLATION: 1008,
961
+ MESSAGE_TOO_BIG: 1009,
962
+ EXTENSION_REQUIRED: 1010,
963
+ INTERNAL_ERROR: 1011,
964
+ SERVICE_RESTART: 1012,
965
+ TRY_AGAIN_LATER: 1013,
966
+ BAD_GATEWAY: 1014,
967
+ TLS_HANDSHAKE_FAIL: 1015
968
+ };
709
969
 
710
- // src/https.ts
970
+ // src/server/ws/server.ts
711
971
  init_runtime();
712
972
  import { EventEmitter as EventEmitter2 } from "events";
713
- function queueCallback2(callback) {
714
- if (callback) queueMicrotask(callback);
715
- }
716
- function createErrorResponse2() {
717
- return new Response("Internal Server Error", { status: 500 });
718
- }
719
- function createAddress2(port, address, family = "IPv4") {
720
- return { port, family, address };
721
- }
722
- function emitListeningWithCallback2(server, callback) {
723
- server._listening = true;
724
- server.emit("listening");
725
- queueCallback2(callback);
726
- }
727
- function closeAndEmit2(server, callback) {
728
- server._listening = false;
729
- server.emit("close");
730
- if (callback) queueMicrotask(() => callback());
731
- }
732
- function loadHttpClasses() {
733
- const httpModule = (init_http(), __toCommonJS(http_exports));
734
- return {
735
- IncomingMessage: httpModule.IncomingMessage,
736
- ServerResponse: httpModule.ServerResponse
737
- };
738
- }
739
- var https2;
740
- var Server2 = class extends EventEmitter2 {
741
- constructor(options, requestListener) {
742
- super();
743
- this._listening = false;
744
- this.options = options;
745
- this.requestListener = requestListener;
746
- }
747
- listen(...args) {
748
- let port = 3e3;
749
- let hostname = "0.0.0.0";
750
- let callback;
751
- const firstArg = args[0];
752
- if (typeof firstArg === "number") {
753
- port = firstArg;
754
- const secondArg = args[1];
755
- if (typeof secondArg === "string") {
756
- hostname = secondArg;
757
- callback = args[2] || args[3];
758
- } else if (typeof secondArg === "function") {
759
- callback = secondArg;
760
- }
761
- } else if (firstArg && typeof firstArg === "object") {
762
- port = firstArg.port || 3e3;
763
- hostname = firstArg.hostname || "0.0.0.0";
764
- callback = args[1];
765
- }
766
- const self = this;
767
- if (isNode) {
768
- const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
769
- if (!https2) https2 = __require("https");
770
- this.nativeServer = https2.createServer(this.options, (req, res) => {
771
- const incomingMessage = new IncomingMessage2(req);
772
- const serverResponse = new ServerResponse2(incomingMessage, res);
773
- if (self.requestListener) {
774
- self.requestListener(incomingMessage, serverResponse);
775
- } else {
776
- self.emit("request", incomingMessage, serverResponse);
777
- }
778
- });
779
- this.nativeServer.listen(port, hostname, () => {
780
- this._listening = true;
781
- this.emit("listening");
782
- if (callback) callback();
783
- });
784
- this.nativeServer.on("error", (err) => this.emit("error", err));
785
- this.nativeServer.on("close", () => {
786
- this._listening = false;
787
- this.emit("close");
788
- });
789
- } else if (isBun) {
790
- const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
791
- const tlsOptions = {
792
- port,
793
- hostname,
794
- fetch: (req) => {
795
- return new Promise((resolve) => {
796
- const incomingMessage = new IncomingMessage2(req);
797
- const serverResponse = new ServerResponse2();
798
- serverResponse._setResolver(resolve);
799
- if (self.requestListener) {
800
- self.requestListener(incomingMessage, serverResponse);
801
- } else {
802
- self.emit("request", incomingMessage, serverResponse);
803
- }
804
- });
805
- },
806
- error: (error) => {
807
- this.emit("error", error);
808
- return createErrorResponse2();
809
- }
810
- };
811
- if (this.options.key || this.options.cert) {
812
- tlsOptions.tls = {
813
- key: this.options.key,
814
- cert: this.options.cert,
815
- ca: this.options.ca,
816
- passphrase: this.options.passphrase
817
- };
818
- } else if (this.options.tls) {
819
- tlsOptions.tls = this.options.tls;
820
- }
821
- this.nativeServer = Bun.serve(tlsOptions);
822
- emitListeningWithCallback2(this, callback);
823
- } else if (isDeno) {
824
- const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
825
- const serveOptions = {
826
- port,
827
- hostname,
828
- handler: (req) => {
829
- return new Promise((resolve) => {
830
- const incomingMessage = new IncomingMessage2(req);
831
- const serverResponse = new ServerResponse2();
832
- serverResponse._setResolver(resolve);
833
- if (self.requestListener) {
834
- self.requestListener(incomingMessage, serverResponse);
835
- } else {
836
- self.emit("request", incomingMessage, serverResponse);
837
- }
838
- });
839
- },
840
- onError: (error) => {
841
- this.emit("error", error);
842
- return createErrorResponse2();
843
- }
844
- };
845
- if (this.options.key && this.options.cert) {
846
- serveOptions.cert = this.options.cert;
847
- serveOptions.key = this.options.key;
848
- }
849
- this.nativeServer = Deno.serve(serveOptions);
850
- emitListeningWithCallback2(this, callback);
851
- }
852
- return this;
853
- }
854
- close(callback) {
855
- if (!this.nativeServer) {
856
- if (callback) queueMicrotask(() => callback());
857
- return this;
858
- }
859
- if (isNode) {
860
- this.nativeServer.close(callback);
861
- } else if (isBun) {
862
- this.nativeServer.stop();
863
- closeAndEmit2(this, callback);
864
- } else if (isDeno) {
865
- this.nativeServer.shutdown();
866
- closeAndEmit2(this, callback);
867
- }
868
- return this;
869
- }
870
- address() {
871
- if (!this.nativeServer) return null;
872
- if (isNode) {
873
- const addr = this.nativeServer.address();
874
- if (!addr) return null;
875
- if (typeof addr === "string") {
876
- return createAddress2(0, addr, "unix");
877
- }
878
- return addr;
879
- } else if (isBun) {
880
- return createAddress2(this.nativeServer.port, this.nativeServer.hostname);
881
- } else if (isDeno) {
882
- const addr = this.nativeServer.addr;
883
- return createAddress2(addr.port, addr.hostname);
884
- }
885
- return null;
886
- }
887
- get listening() {
888
- return this._listening;
889
- }
890
- };
891
- function createServer2(options, requestListener) {
892
- return new Server2(options, requestListener);
893
- }
894
973
 
895
- // src/ws.ts
974
+ // src/server/ws/utils.ts
896
975
  init_runtime();
897
- import { EventEmitter as EventEmitter3 } from "events";
898
- var ReadyState = /* @__PURE__ */ ((ReadyState2) => {
899
- ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
900
- ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
901
- ReadyState2[ReadyState2["CLOSING"] = 2] = "CLOSING";
902
- ReadyState2[ReadyState2["CLOSED"] = 3] = "CLOSED";
903
- return ReadyState2;
904
- })(ReadyState || {});
905
- var CLOSE_CODES = {
906
- NORMAL: 1e3,
907
- GOING_AWAY: 1001,
908
- PROTOCOL_ERROR: 1002,
909
- UNSUPPORTED_DATA: 1003,
910
- NO_STATUS: 1005,
911
- ABNORMAL: 1006,
912
- INVALID_DATA: 1007,
913
- POLICY_VIOLATION: 1008,
914
- MESSAGE_TOO_BIG: 1009,
915
- EXTENSION_REQUIRED: 1010,
916
- INTERNAL_ERROR: 1011,
917
- SERVICE_RESTART: 1012,
918
- TRY_AGAIN_LATER: 1013,
919
- BAD_GATEWAY: 1014,
920
- TLS_HANDSHAKE_FAIL: 1015
921
- };
922
- function queueCallback3(callback, error) {
976
+ function queueCallback(callback, error) {
923
977
  if (callback) {
924
978
  queueMicrotask(() => callback(error));
925
979
  }
@@ -934,7 +988,74 @@ function getRequestPath(url) {
934
988
  const [pathname = "/"] = (url || "/").split("?");
935
989
  return pathname || "/";
936
990
  }
937
- var WebSocket = class extends EventEmitter3 {
991
+ function isIgnorableConnectionError(error) {
992
+ const errorCode = error?.code;
993
+ return errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE";
994
+ }
995
+ function coerceBunMessage(message) {
996
+ const isBinary = typeof message !== "string";
997
+ const payload = typeof message === "string" ? message : message instanceof ArrayBuffer ? Buffer.from(message) : ArrayBuffer.isView(message) ? Buffer.from(message.buffer, message.byteOffset, message.byteLength) : Buffer.from(String(message));
998
+ return { payload, isBinary };
999
+ }
1000
+ function parseFrame(data) {
1001
+ if (data.length < 2) {
1002
+ return null;
1003
+ }
1004
+ const firstByte = data[0];
1005
+ const secondByte = data[1];
1006
+ const opcode = firstByte & 15;
1007
+ const isMasked = (secondByte & 128) === 128;
1008
+ let payloadLength = secondByte & 127;
1009
+ let offset = 2;
1010
+ if (payloadLength === 126) {
1011
+ payloadLength = data.readUInt16BE(2);
1012
+ offset = 4;
1013
+ } else if (payloadLength === 127) {
1014
+ payloadLength = Number(data.readBigUInt64BE(2));
1015
+ offset = 10;
1016
+ }
1017
+ let payload = data.subarray(offset);
1018
+ if (isMasked) {
1019
+ const maskKey = data.subarray(offset, offset + 4);
1020
+ payload = data.subarray(offset + 4, offset + 4 + payloadLength);
1021
+ for (let index = 0; index < payload.length; index += 1) {
1022
+ payload[index] ^= maskKey[index % 4];
1023
+ }
1024
+ }
1025
+ if (opcode === 1) {
1026
+ return payload.toString("utf8");
1027
+ }
1028
+ return null;
1029
+ }
1030
+ function createFrame(data) {
1031
+ const payload = typeof data === "string" ? Buffer.from(data) : data;
1032
+ const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
1033
+ let frame;
1034
+ let offset = 2;
1035
+ if (payloadLength < 126) {
1036
+ frame = Buffer.allocUnsafe(2 + payloadLength);
1037
+ frame[1] = payloadLength;
1038
+ } else if (payloadLength < 65536) {
1039
+ frame = Buffer.allocUnsafe(4 + payloadLength);
1040
+ frame[1] = 126;
1041
+ frame.writeUInt16BE(payloadLength, 2);
1042
+ offset = 4;
1043
+ } else {
1044
+ frame = Buffer.allocUnsafe(10 + payloadLength);
1045
+ frame[1] = 127;
1046
+ frame.writeBigUInt64BE(BigInt(payloadLength), 2);
1047
+ offset = 10;
1048
+ }
1049
+ frame[0] = 129;
1050
+ if (Buffer.isBuffer(payload)) {
1051
+ payload.copy(frame, offset);
1052
+ }
1053
+ return frame;
1054
+ }
1055
+
1056
+ // src/server/ws/websocket.ts
1057
+ import { EventEmitter } from "events";
1058
+ var WebSocket = class extends EventEmitter {
938
1059
  constructor(address, protocols, _options) {
939
1060
  super();
940
1061
  this.readyState = 0 /* CONNECTING */;
@@ -964,22 +1085,23 @@ var WebSocket = class extends EventEmitter3 {
964
1085
  };
965
1086
  }
966
1087
  /**
967
- * Send data through WebSocket
1088
+ * Send data through WebSocket.
968
1089
  */
969
1090
  send(data, options, callback) {
970
1091
  const cb = typeof options === "function" ? options : callback;
971
1092
  if (this.readyState !== 1 /* OPEN */) {
972
- return queueCallback3(cb, new Error("WebSocket is not open"));
1093
+ queueCallback(cb, new Error("WebSocket is not open"));
1094
+ return;
973
1095
  }
974
1096
  try {
975
1097
  this._socket.send(data);
976
- queueCallback3(cb);
1098
+ queueCallback(cb);
977
1099
  } catch (error) {
978
- queueCallback3(cb, error);
1100
+ queueCallback(cb, error);
979
1101
  }
980
1102
  }
981
1103
  /**
982
- * Close the WebSocket connection
1104
+ * Close the WebSocket connection.
983
1105
  */
984
1106
  close(code, reason) {
985
1107
  if (this.readyState === 3 /* CLOSED */ || this.readyState === 2 /* CLOSING */) {
@@ -989,42 +1111,44 @@ var WebSocket = class extends EventEmitter3 {
989
1111
  this._socket.close(code, typeof reason === "string" ? reason : reason?.toString());
990
1112
  }
991
1113
  /**
992
- * Pause the socket (no-op for native WebSocket)
1114
+ * Pause the socket (no-op for native WebSocket).
993
1115
  */
994
1116
  pause() {
995
1117
  }
996
1118
  /**
997
- * Resume the socket (no-op for native WebSocket)
1119
+ * Resume the socket (no-op for native WebSocket).
998
1120
  */
999
1121
  resume() {
1000
1122
  }
1001
1123
  /**
1002
- * Send a ping frame (no-op for native WebSocket)
1124
+ * Send a ping frame (no-op for native WebSocket).
1003
1125
  */
1004
1126
  ping(_data, _mask, callback) {
1005
- queueCallback3(callback);
1127
+ queueCallback(callback);
1006
1128
  }
1007
1129
  /**
1008
- * Send a pong frame (no-op for native WebSocket)
1130
+ * Send a pong frame (no-op for native WebSocket).
1009
1131
  */
1010
1132
  pong(_data, _mask, callback) {
1011
- queueCallback3(callback);
1133
+ queueCallback(callback);
1012
1134
  }
1013
1135
  /**
1014
- * Terminate the connection
1136
+ * Terminate the connection.
1015
1137
  */
1016
1138
  terminate() {
1017
1139
  this._socket.close();
1018
1140
  this.readyState = 3 /* CLOSED */;
1019
1141
  }
1020
1142
  /**
1021
- * Get buffered amount
1143
+ * Get buffered amount.
1022
1144
  */
1023
1145
  get bufferedAmount() {
1024
1146
  return this._socket.bufferedAmount || 0;
1025
1147
  }
1026
1148
  };
1027
- var WebSocketServer = class extends EventEmitter3 {
1149
+
1150
+ // src/server/ws/server.ts
1151
+ var WebSocketServer = class extends EventEmitter2 {
1028
1152
  constructor(options, callback) {
1029
1153
  super();
1030
1154
  this.clients = /* @__PURE__ */ new Set();
@@ -1035,8 +1159,7 @@ var WebSocketServer = class extends EventEmitter3 {
1035
1159
  if (options?.server) {
1036
1160
  this._httpServer = options.server;
1037
1161
  this._setupUpgradeHandler();
1038
- } else if (options?.noServer) {
1039
- } else {
1162
+ } else if (!options?.noServer) {
1040
1163
  const http2 = __require("http");
1041
1164
  this._httpServer = http2.createServer();
1042
1165
  this._ownsHttpServer = true;
@@ -1050,30 +1173,30 @@ var WebSocketServer = class extends EventEmitter3 {
1050
1173
  this._httpServer = options.server;
1051
1174
  options.server.registerWebSocketServer(this);
1052
1175
  }
1053
- queueCallback3(callback);
1176
+ queueCallback(callback);
1054
1177
  } else {
1055
- queueCallback3(callback);
1178
+ queueCallback(callback);
1056
1179
  }
1057
1180
  }
1058
1181
  _setupUpgradeHandler() {
1059
- this._httpServer.on("upgrade", (request2, socket, head) => {
1060
- const requestPath = getRequestPath(request2.url);
1182
+ this._httpServer.on("upgrade", (request3, socket, head) => {
1183
+ const requestPath = getRequestPath(request3.url);
1061
1184
  console.log("[WebSocket] Upgrade request:", requestPath, "Expected:", this.path || "(any)");
1062
1185
  if (this.path && requestPath !== this.path) {
1063
1186
  console.log("[WebSocket] Path mismatch, ignoring");
1064
1187
  return;
1065
1188
  }
1066
- this.handleUpgrade(request2, socket, head, (client) => {
1189
+ this.handleUpgrade(request3, socket, head, (client) => {
1067
1190
  console.log("[WebSocket] Client connected");
1068
- this.emit("connection", client, request2);
1191
+ this.emit("connection", client, request3);
1069
1192
  });
1070
1193
  });
1071
1194
  }
1072
1195
  /**
1073
- * Handle HTTP upgrade for WebSocket
1196
+ * Handle HTTP upgrade for WebSocket.
1074
1197
  */
1075
- handleUpgrade(request2, socket, _head, callback) {
1076
- const key = request2.headers["sec-websocket-key"];
1198
+ handleUpgrade(request3, socket, _head, callback) {
1199
+ const key = request3.headers["sec-websocket-key"];
1077
1200
  if (!key) {
1078
1201
  socket.end("HTTP/1.1 400 Bad Request\r\n\r\n");
1079
1202
  return;
@@ -1100,7 +1223,7 @@ var WebSocketServer = class extends EventEmitter3 {
1100
1223
  }
1101
1224
  _createClientFromSocket(socket) {
1102
1225
  const client = Object.create(WebSocket.prototype);
1103
- EventEmitter3.call(client);
1226
+ EventEmitter2.call(client);
1104
1227
  client.readyState = 1 /* OPEN */;
1105
1228
  client.url = "ws://localhost";
1106
1229
  client.protocol = "";
@@ -1109,7 +1232,7 @@ var WebSocketServer = class extends EventEmitter3 {
1109
1232
  client._socket = socket;
1110
1233
  socket.on("data", (data) => {
1111
1234
  try {
1112
- const message = this._parseFrame(data);
1235
+ const message = parseFrame(data);
1113
1236
  if (message) {
1114
1237
  client.emit("message", message, false);
1115
1238
  }
@@ -1122,36 +1245,34 @@ var WebSocketServer = class extends EventEmitter3 {
1122
1245
  client.emit("close", CLOSE_CODES.NORMAL, "");
1123
1246
  });
1124
1247
  socket.on("error", (error) => {
1125
- const errorCode = error.code;
1126
- if (errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE") {
1248
+ if (isIgnorableConnectionError(error)) {
1127
1249
  return;
1128
1250
  }
1129
1251
  client.emit("error", error);
1130
1252
  });
1131
1253
  client.send = (data, _options, callback) => {
1132
1254
  if (!socket.writable || client.readyState !== 1 /* OPEN */) {
1133
- const err = new Error("WebSocket is not open");
1134
- err.code = "WS_NOT_OPEN";
1135
- queueCallback3(callback, err);
1255
+ const error = new Error("WebSocket is not open");
1256
+ error.code = "WS_NOT_OPEN";
1257
+ queueCallback(callback, error);
1136
1258
  return;
1137
1259
  }
1138
1260
  try {
1139
- const frame = this._createFrame(data);
1140
- socket.write(frame, (err) => {
1141
- if (err) {
1142
- const errorCode = err.code;
1143
- if (errorCode !== "ECONNABORTED" && errorCode !== "ECONNRESET" && errorCode !== "EPIPE") {
1144
- queueCallback3(callback, err);
1145
- } else {
1146
- client.readyState = 3 /* CLOSED */;
1147
- queueCallback3(callback);
1148
- }
1149
- } else {
1150
- queueCallback3(callback);
1261
+ const frame = createFrame(data);
1262
+ socket.write(frame, (error) => {
1263
+ if (!error) {
1264
+ queueCallback(callback);
1265
+ return;
1266
+ }
1267
+ if (isIgnorableConnectionError(error)) {
1268
+ client.readyState = 3 /* CLOSED */;
1269
+ queueCallback(callback);
1270
+ return;
1151
1271
  }
1272
+ queueCallback(callback, error);
1152
1273
  });
1153
1274
  } catch (error) {
1154
- queueCallback3(callback, error);
1275
+ queueCallback(callback, error);
1155
1276
  }
1156
1277
  };
1157
1278
  client.close = (_code, _reason) => {
@@ -1162,7 +1283,7 @@ var WebSocketServer = class extends EventEmitter3 {
1162
1283
  }
1163
1284
  _createClientFromBunSocket(socket) {
1164
1285
  const client = Object.create(WebSocket.prototype);
1165
- EventEmitter3.call(client);
1286
+ EventEmitter2.call(client);
1166
1287
  client.readyState = 1 /* OPEN */;
1167
1288
  client.url = "ws://localhost";
1168
1289
  client.protocol = "";
@@ -1171,14 +1292,14 @@ var WebSocketServer = class extends EventEmitter3 {
1171
1292
  client._socket = socket;
1172
1293
  client.send = (data, _options, callback) => {
1173
1294
  if (client.readyState !== 1 /* OPEN */) {
1174
- queueCallback3(callback, new Error("WebSocket is not open"));
1295
+ queueCallback(callback, new Error("WebSocket is not open"));
1175
1296
  return;
1176
1297
  }
1177
1298
  try {
1178
1299
  socket.send(data);
1179
- queueCallback3(callback);
1300
+ queueCallback(callback);
1180
1301
  } catch (error) {
1181
- queueCallback3(callback, error);
1302
+ queueCallback(callback, error);
1182
1303
  }
1183
1304
  };
1184
1305
  client.close = (code, reason) => {
@@ -1186,7 +1307,7 @@ var WebSocketServer = class extends EventEmitter3 {
1186
1307
  return;
1187
1308
  }
1188
1309
  client.readyState = 2 /* CLOSING */;
1189
- socket.close(code ?? CLOSE_CODES.NORMAL, reason);
1310
+ socket.close(code ?? CLOSE_CODES.NORMAL, typeof reason === "string" ? reason : reason?.toString());
1190
1311
  };
1191
1312
  client.terminate = () => {
1192
1313
  socket.close();
@@ -1194,7 +1315,7 @@ var WebSocketServer = class extends EventEmitter3 {
1194
1315
  };
1195
1316
  return client;
1196
1317
  }
1197
- _handleBunOpen(socket, request2 = {}) {
1318
+ _handleBunOpen(socket, request3 = {}) {
1198
1319
  const client = this._createClientFromBunSocket(socket);
1199
1320
  if (socket.data) {
1200
1321
  socket.data.client = client;
@@ -1206,9 +1327,9 @@ var WebSocketServer = class extends EventEmitter3 {
1206
1327
  });
1207
1328
  }
1208
1329
  const incomingRequest = {
1209
- url: request2.url || this.path,
1210
- headers: request2.headers || {},
1211
- socket: request2.socket || { remoteAddress: void 0 }
1330
+ url: request3.url || this.path,
1331
+ headers: request3.headers || {},
1332
+ socket: request3.socket || { remoteAddress: void 0 }
1212
1333
  };
1213
1334
  this.emit("connection", client, incomingRequest);
1214
1335
  }
@@ -1217,8 +1338,7 @@ var WebSocketServer = class extends EventEmitter3 {
1217
1338
  if (!client) {
1218
1339
  return;
1219
1340
  }
1220
- const isBinary = typeof message !== "string";
1221
- const payload = typeof message === "string" ? message : message instanceof ArrayBuffer ? Buffer.from(message) : ArrayBuffer.isView(message) ? Buffer.from(message.buffer, message.byteOffset, message.byteLength) : Buffer.from(String(message));
1341
+ const { payload, isBinary } = coerceBunMessage(message);
1222
1342
  client.emit("message", payload, isBinary);
1223
1343
  }
1224
1344
  _handleBunClose(socket, code, reason) {
@@ -1230,98 +1350,261 @@ var WebSocketServer = class extends EventEmitter3 {
1230
1350
  client.emit("close", code, typeof reason === "string" ? reason : reason?.toString() || "");
1231
1351
  this.clients.delete(client);
1232
1352
  }
1233
- _parseFrame(data) {
1234
- if (data.length < 2) return null;
1235
- const firstByte = data[0];
1236
- const secondByte = data[1];
1237
- const opcode = firstByte & 15;
1238
- const isMasked = (secondByte & 128) === 128;
1239
- let payloadLength = secondByte & 127;
1240
- let offset = 2;
1241
- if (payloadLength === 126) {
1242
- payloadLength = data.readUInt16BE(2);
1243
- offset = 4;
1244
- } else if (payloadLength === 127) {
1245
- payloadLength = Number(data.readBigUInt64BE(2));
1246
- offset = 10;
1247
- }
1248
- let payload = data.subarray(offset);
1249
- if (isMasked) {
1250
- const maskKey = data.subarray(offset, offset + 4);
1251
- payload = data.subarray(offset + 4, offset + 4 + payloadLength);
1252
- for (let i = 0; i < payload.length; i++) {
1253
- payload[i] ^= maskKey[i % 4];
1254
- }
1255
- }
1256
- if (opcode === 1) {
1257
- return payload.toString("utf8");
1258
- }
1259
- return null;
1260
- }
1261
- _createFrame(data) {
1262
- const payload = typeof data === "string" ? Buffer.from(data) : data;
1263
- const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
1264
- let frame;
1265
- let offset = 2;
1266
- if (payloadLength < 126) {
1267
- frame = Buffer.allocUnsafe(2 + payloadLength);
1268
- frame[1] = payloadLength;
1269
- } else if (payloadLength < 65536) {
1270
- frame = Buffer.allocUnsafe(4 + payloadLength);
1271
- frame[1] = 126;
1272
- frame.writeUInt16BE(payloadLength, 2);
1273
- offset = 4;
1274
- } else {
1275
- frame = Buffer.allocUnsafe(10 + payloadLength);
1276
- frame[1] = 127;
1277
- frame.writeBigUInt64BE(BigInt(payloadLength), 2);
1278
- offset = 10;
1279
- }
1280
- frame[0] = 129;
1281
- if (Buffer.isBuffer(payload)) {
1282
- payload.copy(frame, offset);
1283
- }
1284
- return frame;
1285
- }
1286
1353
  /**
1287
- * Close the server
1354
+ * Close the server.
1288
1355
  */
1289
1356
  close(callback) {
1290
1357
  this.clients.forEach((client) => client.close());
1291
1358
  this.clients.clear();
1292
1359
  if (this._httpServer && this._ownsHttpServer) {
1293
1360
  this._httpServer.close(callback);
1294
- } else {
1295
- if (runtime === "bun" && this._httpServer?.unregisterWebSocketServer) {
1296
- this._httpServer.unregisterWebSocketServer(this);
1297
- }
1298
- this.emit("close");
1299
- queueCallback3(callback);
1361
+ return;
1362
+ }
1363
+ if (runtime === "bun" && this._httpServer?.unregisterWebSocketServer) {
1364
+ this._httpServer.unregisterWebSocketServer(this);
1300
1365
  }
1366
+ this.emit("close");
1367
+ queueCallback(callback);
1301
1368
  }
1302
1369
  /**
1303
- * Check if server should handle request
1370
+ * Check if server should handle request.
1304
1371
  */
1305
- shouldHandle(request2) {
1306
- if (this.path && getRequestPath(request2.url) !== this.path) {
1372
+ shouldHandle(request3) {
1373
+ if (this.path && getRequestPath(request3.url) !== this.path) {
1307
1374
  return false;
1308
1375
  }
1309
1376
  return true;
1310
1377
  }
1311
1378
  /**
1312
- * Get server address
1379
+ * Get server address.
1313
1380
  */
1314
1381
  address() {
1315
- if (this._httpServer && this._httpServer.address) {
1382
+ if (this._httpServer?.address) {
1316
1383
  return this._httpServer.address();
1317
1384
  }
1318
1385
  return null;
1319
1386
  }
1320
1387
  };
1321
1388
 
1322
- // src/wss.ts
1389
+ // src/server/ws/runtime.ts
1390
+ init_runtime();
1391
+
1392
+ // src/server/wss/client.ts
1393
+ var WSSClient = class extends WebSocket {
1394
+ constructor(address, protocols, options) {
1395
+ const urlString = typeof address === "string" ? address : address.toString();
1396
+ const secureUrl = urlString.replace(/^ws:\/\//i, "wss://");
1397
+ super(secureUrl, protocols, options);
1398
+ }
1399
+ };
1400
+ function createWSSClient(address, protocols, options) {
1401
+ return new WSSClient(address, protocols, options);
1402
+ }
1403
+
1404
+ // src/server/wss/runtime.ts
1405
+ init_runtime();
1406
+ function getRuntime2() {
1407
+ return runtime;
1408
+ }
1409
+
1410
+ // src/server/wss/server.ts
1411
+ import { EventEmitter as EventEmitter9 } from "events";
1412
+
1413
+ // src/server/https/client-request.ts
1414
+ init_utils();
1415
+ import { EventEmitter as EventEmitter3 } from "events";
1416
+
1417
+ // src/server/https/request-api.ts
1418
+ init_runtime();
1419
+
1420
+ // src/server/https/http-classes.ts
1421
+ function loadHttpClasses() {
1422
+ const httpModule = (init_http(), __toCommonJS(http_exports));
1423
+ return {
1424
+ IncomingMessage: httpModule.IncomingMessage,
1425
+ ServerResponse: httpModule.ServerResponse
1426
+ };
1427
+ }
1428
+
1429
+ // src/server/https/node-modules.ts
1430
+ init_runtime();
1431
+ var https2;
1432
+ if (isNode && typeof process !== "undefined") {
1433
+ try {
1434
+ https2 = __require("https");
1435
+ } catch {
1436
+ https2 = __require("https");
1437
+ }
1438
+ }
1439
+
1440
+ // src/server/https/runtime.ts
1441
+ init_runtime();
1442
+
1443
+ // src/server/https/server-runtime.ts
1444
+ init_runtime();
1445
+ init_utils();
1446
+ import { EventEmitter as EventEmitter8 } from "events";
1447
+ var Server2 = class extends EventEmitter8 {
1448
+ constructor(options = {}, requestListener) {
1449
+ super();
1450
+ this._listening = false;
1451
+ this.options = options;
1452
+ this.requestListener = requestListener;
1453
+ }
1454
+ listen(...args) {
1455
+ let port = 3e3;
1456
+ let hostname = "0.0.0.0";
1457
+ let callback;
1458
+ const firstArg = args[0];
1459
+ if (typeof firstArg === "number") {
1460
+ port = firstArg;
1461
+ const secondArg = args[1];
1462
+ if (typeof secondArg === "string") {
1463
+ hostname = secondArg;
1464
+ callback = args[2] || args[3];
1465
+ } else if (typeof secondArg === "function") {
1466
+ callback = secondArg;
1467
+ }
1468
+ } else if (firstArg && typeof firstArg === "object") {
1469
+ port = firstArg.port || 3e3;
1470
+ hostname = firstArg.hostname || "0.0.0.0";
1471
+ callback = args[1];
1472
+ }
1473
+ const self = this;
1474
+ if (isNode) {
1475
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1476
+ this.nativeServer = https2.createServer(this.options, (req, res) => {
1477
+ const incomingMessage = new IncomingMessage2(req);
1478
+ const serverResponse = new ServerResponse2(incomingMessage, res);
1479
+ if (self.requestListener) {
1480
+ self.requestListener(incomingMessage, serverResponse);
1481
+ } else {
1482
+ self.emit("request", incomingMessage, serverResponse);
1483
+ }
1484
+ });
1485
+ this.nativeServer.listen(port, hostname, () => {
1486
+ this._listening = true;
1487
+ this.emit("listening");
1488
+ if (callback) callback();
1489
+ });
1490
+ this.nativeServer.on("error", (err) => this.emit("error", err));
1491
+ this.nativeServer.on("close", () => {
1492
+ this._listening = false;
1493
+ this.emit("close");
1494
+ });
1495
+ } else if (isBun) {
1496
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1497
+ const tlsOptions = {
1498
+ port,
1499
+ hostname,
1500
+ fetch: (req) => {
1501
+ return new Promise((resolve) => {
1502
+ const incomingMessage = new IncomingMessage2(req);
1503
+ const serverResponse = new ServerResponse2();
1504
+ serverResponse._setResolver(resolve);
1505
+ if (self.requestListener) {
1506
+ self.requestListener(incomingMessage, serverResponse);
1507
+ } else {
1508
+ self.emit("request", incomingMessage, serverResponse);
1509
+ }
1510
+ });
1511
+ },
1512
+ error: (error) => {
1513
+ this.emit("error", error);
1514
+ return createErrorResponse();
1515
+ }
1516
+ };
1517
+ if (this.options.key || this.options.cert) {
1518
+ tlsOptions.tls = {
1519
+ key: this.options.key,
1520
+ cert: this.options.cert,
1521
+ ca: this.options.ca,
1522
+ passphrase: this.options.passphrase
1523
+ };
1524
+ } else if (this.options.tls) {
1525
+ tlsOptions.tls = this.options.tls;
1526
+ }
1527
+ this.nativeServer = Bun.serve(tlsOptions);
1528
+ emitListeningWithCallback(this, callback);
1529
+ } else if (isDeno) {
1530
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1531
+ const serveOptions = {
1532
+ port,
1533
+ hostname,
1534
+ handler: (req) => {
1535
+ return new Promise((resolve) => {
1536
+ const incomingMessage = new IncomingMessage2(req);
1537
+ const serverResponse = new ServerResponse2();
1538
+ serverResponse._setResolver(resolve);
1539
+ if (self.requestListener) {
1540
+ self.requestListener(incomingMessage, serverResponse);
1541
+ } else {
1542
+ self.emit("request", incomingMessage, serverResponse);
1543
+ }
1544
+ });
1545
+ },
1546
+ onError: (error) => {
1547
+ this.emit("error", error);
1548
+ return createErrorResponse();
1549
+ }
1550
+ };
1551
+ if (this.options.key && this.options.cert) {
1552
+ serveOptions.cert = this.options.cert;
1553
+ serveOptions.key = this.options.key;
1554
+ }
1555
+ this.nativeServer = Deno.serve(serveOptions);
1556
+ emitListeningWithCallback(this, callback);
1557
+ }
1558
+ return this;
1559
+ }
1560
+ close(callback) {
1561
+ if (!this.nativeServer) {
1562
+ if (callback) queueCallback2(() => callback());
1563
+ return this;
1564
+ }
1565
+ if (isNode) {
1566
+ this.nativeServer.close(callback);
1567
+ } else if (isBun) {
1568
+ this.nativeServer.stop();
1569
+ closeAndEmit(this, callback);
1570
+ } else if (isDeno) {
1571
+ this.nativeServer.shutdown();
1572
+ closeAndEmit(this, callback);
1573
+ }
1574
+ return this;
1575
+ }
1576
+ address() {
1577
+ if (!this.nativeServer) return null;
1578
+ if (isNode) {
1579
+ const addr = this.nativeServer.address();
1580
+ if (!addr) return null;
1581
+ if (typeof addr === "string") {
1582
+ return createAddress(0, addr, "unix");
1583
+ }
1584
+ return addr;
1585
+ }
1586
+ if (isBun) {
1587
+ return createAddress(this.nativeServer.port, this.nativeServer.hostname);
1588
+ }
1589
+ if (isDeno) {
1590
+ const addr = this.nativeServer.addr;
1591
+ return createAddress(addr.port, addr.hostname);
1592
+ }
1593
+ return null;
1594
+ }
1595
+ get listening() {
1596
+ return this._listening;
1597
+ }
1598
+ };
1599
+ function createServer2(options = {}, requestListener) {
1600
+ return new Server2(options, requestListener);
1601
+ }
1602
+
1603
+ // src/server/wss/server.ts
1323
1604
  init_runtime();
1324
- function queueCallback4(callback) {
1605
+
1606
+ // src/server/wss/utils.ts
1607
+ function queueCallback3(callback) {
1325
1608
  if (callback) {
1326
1609
  queueMicrotask(callback);
1327
1610
  }
@@ -1338,16 +1621,11 @@ function buildHttpsOptions(options) {
1338
1621
  }
1339
1622
  function emitCloseWithCallback(emitter, callback) {
1340
1623
  emitter.emit("close");
1341
- queueCallback4(callback);
1624
+ queueCallback3(callback);
1342
1625
  }
1343
- var WSSClient = class extends WebSocket {
1344
- constructor(address, protocols, options) {
1345
- const urlString = typeof address === "string" ? address : address.toString();
1346
- const secureUrl = urlString.replace(/^ws:\/\//i, "wss://");
1347
- super(secureUrl, protocols, options);
1348
- }
1349
- };
1350
- var WSSServer = class extends EventEmitter4 {
1626
+
1627
+ // src/server/wss/server.ts
1628
+ var WSSServer = class extends EventEmitter9 {
1351
1629
  constructor(options, callback) {
1352
1630
  super();
1353
1631
  this.clients = /* @__PURE__ */ new Set();
@@ -1359,7 +1637,7 @@ var WSSServer = class extends EventEmitter4 {
1359
1637
  this._setupServer(callback);
1360
1638
  } else if (options?.noServer) {
1361
1639
  this._wsServer = new WebSocketServer({ noServer: true });
1362
- queueCallback4(callback);
1640
+ queueCallback3(callback);
1363
1641
  } else {
1364
1642
  this._httpsServer = createServer2(buildHttpsOptions(options));
1365
1643
  this._setupServer(callback);
@@ -1369,7 +1647,7 @@ var WSSServer = class extends EventEmitter4 {
1369
1647
  }
1370
1648
  } else {
1371
1649
  this._wsServer = new WebSocketServer(options);
1372
- queueCallback4(callback);
1650
+ queueCallback3(callback);
1373
1651
  }
1374
1652
  }
1375
1653
  _setupServer(callback) {
@@ -1378,44 +1656,44 @@ var WSSServer = class extends EventEmitter4 {
1378
1656
  server: this._httpsServer,
1379
1657
  noServer: false
1380
1658
  });
1381
- this._wsServer.on("connection", (client, request2) => {
1659
+ this._wsServer.on("connection", (client, request3) => {
1382
1660
  if (this.options.clientTracking !== false) {
1383
1661
  this.clients.add(client);
1384
1662
  client.on("close", () => {
1385
1663
  this.clients.delete(client);
1386
1664
  });
1387
1665
  }
1388
- this.emit("connection", client, request2);
1666
+ this.emit("connection", client, request3);
1389
1667
  });
1390
1668
  this._wsServer.on("error", (error) => {
1391
1669
  this.emit("error", error);
1392
1670
  });
1393
1671
  if (!this.options?.port) {
1394
- queueCallback4(callback);
1672
+ queueCallback3(callback);
1395
1673
  }
1396
1674
  }
1397
1675
  /**
1398
- * Handle HTTP upgrade for WebSocket
1676
+ * Handle HTTP upgrade for WebSocket.
1399
1677
  */
1400
- handleUpgrade(request2, socket, head, callback) {
1678
+ handleUpgrade(request3, socket, head, callback) {
1401
1679
  if (this._wsServer) {
1402
- this._wsServer.handleUpgrade(request2, socket, head, callback);
1680
+ this._wsServer.handleUpgrade(request3, socket, head, callback);
1403
1681
  }
1404
1682
  }
1405
1683
  /**
1406
- * Check if server should handle request
1684
+ * Check if server should handle request.
1407
1685
  */
1408
- shouldHandle(request2) {
1686
+ shouldHandle(request3) {
1409
1687
  if (this._wsServer) {
1410
- return this._wsServer.shouldHandle(request2);
1688
+ return this._wsServer.shouldHandle(request3);
1411
1689
  }
1412
- if (this.path && request2.url !== this.path) {
1690
+ if (this.path && request3.url !== this.path) {
1413
1691
  return false;
1414
1692
  }
1415
1693
  return true;
1416
1694
  }
1417
1695
  /**
1418
- * Close the server
1696
+ * Close the server.
1419
1697
  */
1420
1698
  close(callback) {
1421
1699
  this.clients.forEach((client) => client.close());
@@ -1428,17 +1706,19 @@ var WSSServer = class extends EventEmitter4 {
1428
1706
  emitCloseWithCallback(this, callback);
1429
1707
  }
1430
1708
  });
1431
- } else if (this._httpsServer) {
1709
+ return;
1710
+ }
1711
+ if (this._httpsServer) {
1432
1712
  this._httpsServer.close(callback);
1433
- } else {
1434
- emitCloseWithCallback(this, callback);
1713
+ return;
1435
1714
  }
1715
+ emitCloseWithCallback(this, callback);
1436
1716
  }
1437
1717
  /**
1438
- * Get server address
1718
+ * Get server address.
1439
1719
  */
1440
1720
  address() {
1441
- if (this._httpsServer && this._httpsServer.address) {
1721
+ if (this._httpsServer?.address) {
1442
1722
  return this._httpsServer.address();
1443
1723
  }
1444
1724
  if (this._wsServer) {
@@ -1447,15 +1727,11 @@ var WSSServer = class extends EventEmitter4 {
1447
1727
  return null;
1448
1728
  }
1449
1729
  };
1450
- function createWSSClient(address, protocols, options) {
1451
- return new WSSClient(address, protocols, options);
1452
- }
1453
1730
  function createWSSServer(options, callback) {
1454
1731
  return new WSSServer(options, callback);
1455
1732
  }
1456
- function getRuntime2() {
1457
- return runtime;
1458
- }
1733
+
1734
+ // src/server/wss/index.ts
1459
1735
  var wss_default = {
1460
1736
  WSSClient,
1461
1737
  WSSServer,