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