elit 3.6.6 → 3.6.8

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 (155) hide show
  1. package/Cargo.lock +1 -1
  2. package/Cargo.toml +1 -1
  3. package/README.md +20 -1
  4. package/dist/build.cjs +421 -331
  5. package/dist/build.d.ts +1 -19
  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 +25197 -22128
  13. package/dist/cli.d.ts +19 -37
  14. package/dist/cli.mjs +26668 -23614
  15. package/dist/config.cjs +357 -350
  16. package/dist/config.d.ts +17 -245
  17. package/dist/config.js +520 -515
  18. package/dist/config.mjs +346 -341
  19. package/dist/contracts-D7KIS-TK.d.ts +36 -0
  20. package/dist/contracts-_0p1-15U.d.ts +54 -0
  21. package/dist/coverage.cjs +448 -485
  22. package/dist/coverage.d.ts +13 -62
  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 -1523
  30. package/dist/desktop-auto-render.d.ts +4 -12
  31. package/dist/desktop-auto-render.js +1695 -1518
  32. package/dist/desktop-auto-render.mjs +1696 -1519
  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 -591
  42. package/dist/dom.d.ts +2 -17
  43. package/dist/dom.js +714 -588
  44. package/dist/dom.mjs +716 -590
  45. package/dist/el.cjs +62 -52
  46. package/dist/el.d.ts +5 -12
  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 +411 -140
  58. package/dist/http.d.ts +40 -112
  59. package/dist/http.js +409 -140
  60. package/dist/http.mjs +409 -140
  61. package/dist/https.cjs +716 -272
  62. package/dist/https.d.ts +46 -41
  63. package/dist/https.js +712 -270
  64. package/dist/https.mjs +714 -272
  65. package/dist/index.cjs +7502 -7691
  66. package/dist/index.d.ts +6 -3
  67. package/dist/index.js +7486 -7677
  68. package/dist/index.mjs +7497 -7687
  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 -8870
  74. package/dist/native.d.ts +7 -10
  75. package/dist/native.js +8682 -8936
  76. package/dist/native.mjs +8615 -8869
  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-node-shared-listener-bootstrap.cjs +75 -0
  82. package/dist/pm.cjs +5267 -0
  83. package/dist/pm.d.ts +331 -0
  84. package/dist/pm.js +7575 -0
  85. package/dist/pm.mjs +5148 -0
  86. package/dist/preview-build.cjs +712 -0
  87. package/dist/preview-build.d.ts +59 -0
  88. package/dist/preview-build.js +3194 -0
  89. package/dist/preview-build.mjs +676 -0
  90. package/dist/render-context.cjs +13 -2
  91. package/dist/render-context.d.ts +9 -34
  92. package/dist/render-context.js +11 -2
  93. package/dist/render-context.mjs +11 -2
  94. package/dist/router.cjs +787 -646
  95. package/dist/router.d.ts +8 -14
  96. package/dist/router.js +786 -645
  97. package/dist/router.mjs +786 -645
  98. package/dist/runtime.cjs +1 -1
  99. package/dist/runtime.js +1 -1
  100. package/dist/runtime.mjs +1 -1
  101. package/dist/server.cjs +3702 -2883
  102. package/dist/server.d.ts +47 -5
  103. package/dist/server.js +4007 -3165
  104. package/dist/server.mjs +3665 -2848
  105. package/dist/smtp-server.cjs +16 -3
  106. package/dist/smtp-server.d.ts +12 -26
  107. package/dist/smtp-server.js +55 -17
  108. package/dist/smtp-server.mjs +16 -3
  109. package/dist/state.cjs +768 -659
  110. package/dist/state.d.ts +11 -71
  111. package/dist/state.js +760 -651
  112. package/dist/state.mjs +767 -658
  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-BayMVo_k.d.ts +278 -0
  132. package/dist/types-C4gKykuG.d.ts +23 -0
  133. package/dist/types-C70T-42Z.d.ts +64 -0
  134. package/dist/types-Ckj8md_j.d.ts +84 -0
  135. package/dist/types-CpjQTAkX.d.ts +24 -0
  136. package/dist/types-D0LjrYjS.d.ts +14 -0
  137. package/dist/types-DPOgoGs-.d.ts +81 -0
  138. package/dist/types-fiLday0L.d.ts +199 -0
  139. package/dist/types.d.ts +54 -237
  140. package/dist/universal.cjs +1 -1
  141. package/dist/universal.d.ts +1 -7
  142. package/dist/universal.js +1 -1
  143. package/dist/universal.mjs +1 -1
  144. package/dist/websocket-BLBEAnhp.d.ts +119 -0
  145. package/dist/ws.cjs +129 -108
  146. package/dist/ws.d.ts +21 -131
  147. package/dist/ws.js +128 -109
  148. package/dist/ws.mjs +128 -109
  149. package/dist/wss.cjs +938 -512
  150. package/dist/wss.d.ts +31 -28
  151. package/dist/wss.js +932 -508
  152. package/dist/wss.mjs +936 -512
  153. package/package.json +18 -6
  154. package/vendor/epaint-0.31.1/src/image.rs +418 -0
  155. 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,36 @@
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(arg1, arg2) {
614
+ const requestListener = typeof arg1 === "function" ? arg1 : arg2;
615
+ return new Server(requestListener);
616
+ }
617
+ var import_node_events5, Server;
618
+ var init_server_runtime = __esm({
619
+ "src/server/http/server-runtime.ts"() {
620
+ "use strict";
621
+ import_node_events5 = __require("events");
622
+ init_runtime();
623
+ init_node_modules();
624
+ init_incoming_message();
625
+ init_response();
626
+ init_utils();
627
+ Server = class extends import_node_events5.EventEmitter {
419
628
  constructor(requestListener) {
420
629
  super();
421
630
  this._bunWebSocketServers = /* @__PURE__ */ new Set();
@@ -428,9 +637,28 @@
428
637
  unregisterWebSocketServer(wsServer) {
429
638
  this._bunWebSocketServers.delete(wsServer);
430
639
  }
640
+ resolvePmInheritedFd(explicitPort, explicitFd) {
641
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
642
+ return explicitFd;
643
+ }
644
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
645
+ if (!fdValue) {
646
+ return void 0;
647
+ }
648
+ const parsedFd = Number.parseInt(fdValue, 10);
649
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
650
+ return void 0;
651
+ }
652
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
653
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
654
+ return void 0;
655
+ }
656
+ return parsedFd;
657
+ }
431
658
  listen(...args) {
432
659
  let port = 3e3;
433
660
  let hostname = "0.0.0.0";
661
+ let fd;
434
662
  let callback;
435
663
  const firstArg = args[0];
436
664
  if (typeof firstArg === "number") {
@@ -445,8 +673,10 @@
445
673
  } else if (firstArg && typeof firstArg === "object") {
446
674
  port = firstArg.port || 3e3;
447
675
  hostname = firstArg.hostname || "0.0.0.0";
676
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
448
677
  callback = args[1];
449
678
  }
679
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
450
680
  const self = this;
451
681
  if (isNode) {
452
682
  this.nativeServer = http.createServer((req, res) => {
@@ -461,11 +691,19 @@
461
691
  this.nativeServer.on("upgrade", (req, socket, head) => {
462
692
  self.emit("upgrade", req, socket, head);
463
693
  });
464
- this.nativeServer.listen(port, hostname, () => {
465
- this._listening = true;
466
- this.emit("listening");
467
- if (callback) callback();
468
- });
694
+ if (fd !== void 0) {
695
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
696
+ this._listening = true;
697
+ this.emit("listening");
698
+ if (callback) callback();
699
+ });
700
+ } else {
701
+ this.nativeServer.listen(port, hostname, () => {
702
+ this._listening = true;
703
+ this.emit("listening");
704
+ if (callback) callback();
705
+ });
706
+ }
469
707
  this.nativeServer.on("error", (err) => this.emit("error", err));
470
708
  this.nativeServer.on("close", () => {
471
709
  this._listening = false;
@@ -490,6 +728,8 @@
490
728
  const urlObj = new URL(req.url);
491
729
  const pathname = urlObj.pathname;
492
730
  const requestUrl = urlObj.pathname + urlObj.search;
731
+ const incomingHeaders = headersToRecord(req.headers);
732
+ const rawHeaders = headersToRawHeaders(req.headers);
493
733
  const upgradeHeader = req.headers.get("upgrade");
494
734
  if (upgradeHeader && upgradeHeader.toLowerCase() === "websocket") {
495
735
  const matchingWebSocketServer = Array.from(this._bunWebSocketServers).find((wsServer) => {
@@ -526,9 +766,9 @@
526
766
  const incomingMessage = {
527
767
  method: req.method,
528
768
  url: requestUrl,
529
- headers: req.headers,
769
+ headers: incomingHeaders,
530
770
  httpVersion: "1.1",
531
- rawHeaders: [],
771
+ rawHeaders,
532
772
  _req: req,
533
773
  text: () => req.text(),
534
774
  json: () => req.json()
@@ -582,57 +822,148 @@
582
822
  this.writeHead(statusCode);
583
823
  }
584
824
  responseReady = true;
585
- return this;
586
825
  }
587
826
  };
588
827
  if (self.requestListener) {
589
828
  self.requestListener(incomingMessage, serverResponse);
829
+ } else {
830
+ self.emit("request", incomingMessage, serverResponse);
590
831
  }
591
- if (responseReady) {
592
- return new Response(body, {
593
- status: statusCode,
594
- statusText: statusMessage,
595
- headers
596
- });
832
+ if (!responseReady) {
833
+ serverResponse.end();
597
834
  }
598
- return new Promise((resolve) => {
599
- serverResponse.end = (chunk) => {
600
- if (chunk !== void 0) {
601
- body += chunk;
602
- }
603
- resolve(new Response(body, {
604
- status: statusCode,
605
- statusText: statusMessage,
606
- headers
607
- }));
608
- };
835
+ return new Response(body, {
836
+ status: statusCode,
837
+ statusText: statusMessage,
838
+ headers
609
839
  });
610
840
  },
611
- error: createErrorResponse
841
+ error: (err) => {
842
+ this.emit("error", err);
843
+ return createErrorResponse();
844
+ }
612
845
  });
846
+ this._listening = true;
613
847
  emitListeningWithCallback(this, callback);
848
+ this.nativeServer.stop = this.nativeServer.stop || this.nativeServer.close;
849
+ this.nativeServer.close = this.nativeServer.close || this.nativeServer.stop;
850
+ this.nativeServer.on?.("close", () => {
851
+ this._listening = false;
852
+ this.emit("close");
853
+ });
614
854
  } else if (isDeno) {
855
+ const server = this;
615
856
  this.nativeServer = Deno.serve({
616
857
  port,
617
- hostname,
618
- handler: (req) => {
619
- return new Promise((resolve) => {
620
- const incomingMessage = new IncomingMessage(req);
621
- const serverResponse = new ServerResponse();
622
- serverResponse._setResolver(resolve);
623
- if (self.requestListener) {
624
- self.requestListener(incomingMessage, serverResponse);
625
- } else {
626
- self.emit("request", incomingMessage, serverResponse);
858
+ hostname
859
+ }, async (req) => {
860
+ const urlObj = new URL(req.url);
861
+ const requestUrl = urlObj.pathname + urlObj.search;
862
+ const incomingHeaders = headersToRecord(req.headers);
863
+ const rawHeaders = headersToRawHeaders(req.headers);
864
+ const bodyChunks = [];
865
+ const responseHeaders = new Headers();
866
+ let statusCode = 200;
867
+ let statusText = "OK";
868
+ let responseClosed = false;
869
+ const incomingMessage = {
870
+ method: req.method,
871
+ url: requestUrl,
872
+ headers: incomingHeaders,
873
+ httpVersion: "1.1",
874
+ rawHeaders,
875
+ _req: req,
876
+ text: () => req.text(),
877
+ json: () => req.json()
878
+ };
879
+ const serverResponse = {
880
+ statusCode: 200,
881
+ statusMessage: "OK",
882
+ headersSent: false,
883
+ setHeader(name, value) {
884
+ responseHeaders.set(name, Array.isArray(value) ? value.join(", ") : String(value));
885
+ return this;
886
+ },
887
+ getHeader(name) {
888
+ return responseHeaders.get(name) ?? void 0;
889
+ },
890
+ getHeaders() {
891
+ const headers = {};
892
+ responseHeaders.forEach((value, key) => {
893
+ headers[key] = value;
894
+ });
895
+ return headers;
896
+ },
897
+ writeHead(status, arg2, arg3) {
898
+ statusCode = status;
899
+ this.statusCode = status;
900
+ this.headersSent = true;
901
+ if (typeof arg2 === "string") {
902
+ statusText = arg2;
903
+ this.statusMessage = arg2;
904
+ if (arg3) {
905
+ Object.entries(arg3).forEach(([key, value]) => {
906
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
907
+ });
908
+ }
909
+ } else if (arg2) {
910
+ Object.entries(arg2).forEach(([key, value]) => {
911
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
912
+ });
627
913
  }
628
- });
629
- },
630
- onError: (error) => {
631
- this.emit("error", error);
632
- return createErrorResponse();
914
+ return this;
915
+ },
916
+ write(chunk) {
917
+ if (!this.headersSent) {
918
+ this.writeHead(statusCode);
919
+ }
920
+ if (typeof chunk === "string") {
921
+ bodyChunks.push(new TextEncoder().encode(chunk));
922
+ } else if (chunk instanceof Uint8Array) {
923
+ bodyChunks.push(chunk);
924
+ } else if (chunk !== void 0 && chunk !== null) {
925
+ bodyChunks.push(new TextEncoder().encode(String(chunk)));
926
+ }
927
+ return true;
928
+ },
929
+ end(chunk) {
930
+ if (chunk !== void 0) {
931
+ this.write(chunk);
932
+ }
933
+ if (!this.headersSent) {
934
+ this.writeHead(statusCode);
935
+ }
936
+ responseClosed = true;
937
+ }
938
+ };
939
+ if (server.requestListener) {
940
+ server.requestListener(incomingMessage, serverResponse);
941
+ } else {
942
+ server.emit("request", incomingMessage, serverResponse);
633
943
  }
944
+ if (!responseClosed) {
945
+ serverResponse.end();
946
+ }
947
+ const body = bodyChunks.length === 0 ? void 0 : (() => {
948
+ const totalLength = bodyChunks.reduce((sum, chunk) => sum + chunk.length, 0);
949
+ const output = new ArrayBuffer(totalLength);
950
+ const combined = new Uint8Array(output);
951
+ let offset = 0;
952
+ for (const chunk of bodyChunks) {
953
+ combined.set(chunk, offset);
954
+ offset += chunk.length;
955
+ }
956
+ return output;
957
+ })();
958
+ return new Response(body, {
959
+ status: statusCode,
960
+ statusText,
961
+ headers: responseHeaders
962
+ });
634
963
  });
964
+ this._listening = true;
635
965
  emitListeningWithCallback(this, callback);
966
+ this.nativeServer.finished.then(() => closeAndEmit(this)).catch((err) => this.emit("error", err));
636
967
  }
637
968
  return this;
638
969
  }
@@ -661,9 +992,11 @@
661
992
  return createAddress(0, addr, "unix");
662
993
  }
663
994
  return addr;
664
- } else if (isBun) {
995
+ }
996
+ if (isBun) {
665
997
  return createAddress(this.nativeServer.port, this.nativeServer.hostname);
666
- } else if (isDeno) {
998
+ }
999
+ if (isDeno) {
667
1000
  const addr = this.nativeServer.addr;
668
1001
  return createAddress(addr.port, addr.hostname);
669
1002
  }
@@ -673,229 +1006,62 @@
673
1006
  return this._listening;
674
1007
  }
675
1008
  };
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
- };
692
- http_default = {
693
- createServer,
694
- request,
695
- get,
696
- Server,
697
- IncomingMessage,
698
- ServerResponse,
699
- Agent,
700
- ClientRequest,
701
- METHODS,
702
- STATUS_CODES,
703
- getRuntime
704
- };
705
1009
  }
706
1010
  });
707
1011
 
708
- // src/wss.ts
709
- var import_events3 = __require("events");
710
-
711
- // src/https.ts
712
- var import_events = __require("events");
713
- 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;
1012
+ // src/server/http/index.ts
1013
+ var http_exports = {};
1014
+ __export(http_exports, {
1015
+ Agent: () => Agent,
1016
+ ClientRequest: () => ClientRequest,
1017
+ IncomingMessage: () => IncomingMessage,
1018
+ METHODS: () => METHODS,
1019
+ STATUS_CODES: () => STATUS_CODES,
1020
+ Server: () => Server,
1021
+ ServerResponse: () => ServerResponse,
1022
+ createServer: () => createServer,
1023
+ default: () => http_default,
1024
+ get: () => get,
1025
+ getRuntime: () => getRuntime3,
1026
+ request: () => request
1027
+ });
1028
+ var http_default;
1029
+ var init_http = __esm({
1030
+ "src/server/http/index.ts"() {
1031
+ "use strict";
1032
+ init_agent();
1033
+ init_client_request();
1034
+ init_constants();
1035
+ init_incoming_message();
1036
+ init_request_api();
1037
+ init_response();
1038
+ init_runtime2();
1039
+ init_server_runtime();
1040
+ init_agent();
1041
+ init_client_request();
1042
+ init_constants();
1043
+ init_incoming_message();
1044
+ init_request_api();
1045
+ init_response();
1046
+ init_runtime2();
1047
+ init_server_runtime();
1048
+ http_default = {
1049
+ createServer,
1050
+ request,
1051
+ get,
1052
+ Server,
1053
+ IncomingMessage,
1054
+ ServerResponse,
1055
+ Agent,
1056
+ ClientRequest,
1057
+ METHODS,
1058
+ STATUS_CODES,
1059
+ getRuntime: getRuntime3
1060
+ };
890
1061
  }
891
- };
892
- function createServer2(options, requestListener) {
893
- return new Server2(options, requestListener);
894
- }
1062
+ });
895
1063
 
896
- // src/ws.ts
897
- var import_events2 = __require("events");
898
- init_runtime();
1064
+ // src/server/ws/constants.ts
899
1065
  var ReadyState = /* @__PURE__ */ ((ReadyState2) => {
900
1066
  ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
901
1067
  ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
@@ -920,7 +1086,14 @@
920
1086
  BAD_GATEWAY: 1014,
921
1087
  TLS_HANDSHAKE_FAIL: 1015
922
1088
  };
923
- function queueCallback3(callback, error) {
1089
+
1090
+ // src/server/ws/server.ts
1091
+ var import_events2 = __require("events");
1092
+ init_runtime();
1093
+
1094
+ // src/server/ws/utils.ts
1095
+ init_runtime();
1096
+ function queueCallback(callback, error) {
924
1097
  if (callback) {
925
1098
  queueMicrotask(() => callback(error));
926
1099
  }
@@ -935,7 +1108,74 @@
935
1108
  const [pathname = "/"] = (url || "/").split("?");
936
1109
  return pathname || "/";
937
1110
  }
938
- var WebSocket = class extends import_events2.EventEmitter {
1111
+ function isIgnorableConnectionError(error) {
1112
+ const errorCode = error?.code;
1113
+ return errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE";
1114
+ }
1115
+ function coerceBunMessage(message) {
1116
+ const isBinary = typeof message !== "string";
1117
+ 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));
1118
+ return { payload, isBinary };
1119
+ }
1120
+ function parseFrame(data) {
1121
+ if (data.length < 2) {
1122
+ return null;
1123
+ }
1124
+ const firstByte = data[0];
1125
+ const secondByte = data[1];
1126
+ const opcode = firstByte & 15;
1127
+ const isMasked = (secondByte & 128) === 128;
1128
+ let payloadLength = secondByte & 127;
1129
+ let offset = 2;
1130
+ if (payloadLength === 126) {
1131
+ payloadLength = data.readUInt16BE(2);
1132
+ offset = 4;
1133
+ } else if (payloadLength === 127) {
1134
+ payloadLength = Number(data.readBigUInt64BE(2));
1135
+ offset = 10;
1136
+ }
1137
+ let payload = data.subarray(offset);
1138
+ if (isMasked) {
1139
+ const maskKey = data.subarray(offset, offset + 4);
1140
+ payload = data.subarray(offset + 4, offset + 4 + payloadLength);
1141
+ for (let index = 0; index < payload.length; index += 1) {
1142
+ payload[index] ^= maskKey[index % 4];
1143
+ }
1144
+ }
1145
+ if (opcode === 1) {
1146
+ return payload.toString("utf8");
1147
+ }
1148
+ return null;
1149
+ }
1150
+ function createFrame(data) {
1151
+ const payload = typeof data === "string" ? Buffer.from(data) : data;
1152
+ const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
1153
+ let frame;
1154
+ let offset = 2;
1155
+ if (payloadLength < 126) {
1156
+ frame = Buffer.allocUnsafe(2 + payloadLength);
1157
+ frame[1] = payloadLength;
1158
+ } else if (payloadLength < 65536) {
1159
+ frame = Buffer.allocUnsafe(4 + payloadLength);
1160
+ frame[1] = 126;
1161
+ frame.writeUInt16BE(payloadLength, 2);
1162
+ offset = 4;
1163
+ } else {
1164
+ frame = Buffer.allocUnsafe(10 + payloadLength);
1165
+ frame[1] = 127;
1166
+ frame.writeBigUInt64BE(BigInt(payloadLength), 2);
1167
+ offset = 10;
1168
+ }
1169
+ frame[0] = 129;
1170
+ if (Buffer.isBuffer(payload)) {
1171
+ payload.copy(frame, offset);
1172
+ }
1173
+ return frame;
1174
+ }
1175
+
1176
+ // src/server/ws/websocket.ts
1177
+ var import_events = __require("events");
1178
+ var WebSocket = class extends import_events.EventEmitter {
939
1179
  constructor(address, protocols, _options) {
940
1180
  super();
941
1181
  this.readyState = 0 /* CONNECTING */;
@@ -965,22 +1205,23 @@
965
1205
  };
966
1206
  }
967
1207
  /**
968
- * Send data through WebSocket
1208
+ * Send data through WebSocket.
969
1209
  */
970
1210
  send(data, options, callback) {
971
1211
  const cb = typeof options === "function" ? options : callback;
972
1212
  if (this.readyState !== 1 /* OPEN */) {
973
- return queueCallback3(cb, new Error("WebSocket is not open"));
1213
+ queueCallback(cb, new Error("WebSocket is not open"));
1214
+ return;
974
1215
  }
975
1216
  try {
976
1217
  this._socket.send(data);
977
- queueCallback3(cb);
1218
+ queueCallback(cb);
978
1219
  } catch (error) {
979
- queueCallback3(cb, error);
1220
+ queueCallback(cb, error);
980
1221
  }
981
1222
  }
982
1223
  /**
983
- * Close the WebSocket connection
1224
+ * Close the WebSocket connection.
984
1225
  */
985
1226
  close(code, reason) {
986
1227
  if (this.readyState === 3 /* CLOSED */ || this.readyState === 2 /* CLOSING */) {
@@ -990,41 +1231,43 @@
990
1231
  this._socket.close(code, typeof reason === "string" ? reason : reason?.toString());
991
1232
  }
992
1233
  /**
993
- * Pause the socket (no-op for native WebSocket)
1234
+ * Pause the socket (no-op for native WebSocket).
994
1235
  */
995
1236
  pause() {
996
1237
  }
997
1238
  /**
998
- * Resume the socket (no-op for native WebSocket)
1239
+ * Resume the socket (no-op for native WebSocket).
999
1240
  */
1000
1241
  resume() {
1001
1242
  }
1002
1243
  /**
1003
- * Send a ping frame (no-op for native WebSocket)
1244
+ * Send a ping frame (no-op for native WebSocket).
1004
1245
  */
1005
1246
  ping(_data, _mask, callback) {
1006
- queueCallback3(callback);
1247
+ queueCallback(callback);
1007
1248
  }
1008
1249
  /**
1009
- * Send a pong frame (no-op for native WebSocket)
1250
+ * Send a pong frame (no-op for native WebSocket).
1010
1251
  */
1011
1252
  pong(_data, _mask, callback) {
1012
- queueCallback3(callback);
1253
+ queueCallback(callback);
1013
1254
  }
1014
1255
  /**
1015
- * Terminate the connection
1256
+ * Terminate the connection.
1016
1257
  */
1017
1258
  terminate() {
1018
1259
  this._socket.close();
1019
1260
  this.readyState = 3 /* CLOSED */;
1020
1261
  }
1021
1262
  /**
1022
- * Get buffered amount
1263
+ * Get buffered amount.
1023
1264
  */
1024
1265
  get bufferedAmount() {
1025
1266
  return this._socket.bufferedAmount || 0;
1026
1267
  }
1027
1268
  };
1269
+
1270
+ // src/server/ws/server.ts
1028
1271
  var WebSocketServer = class extends import_events2.EventEmitter {
1029
1272
  constructor(options, callback) {
1030
1273
  super();
@@ -1036,8 +1279,7 @@
1036
1279
  if (options?.server) {
1037
1280
  this._httpServer = options.server;
1038
1281
  this._setupUpgradeHandler();
1039
- } else if (options?.noServer) {
1040
- } else {
1282
+ } else if (!options?.noServer) {
1041
1283
  const http2 = __require("http");
1042
1284
  this._httpServer = http2.createServer();
1043
1285
  this._ownsHttpServer = true;
@@ -1051,30 +1293,30 @@
1051
1293
  this._httpServer = options.server;
1052
1294
  options.server.registerWebSocketServer(this);
1053
1295
  }
1054
- queueCallback3(callback);
1296
+ queueCallback(callback);
1055
1297
  } else {
1056
- queueCallback3(callback);
1298
+ queueCallback(callback);
1057
1299
  }
1058
1300
  }
1059
1301
  _setupUpgradeHandler() {
1060
- this._httpServer.on("upgrade", (request2, socket, head) => {
1061
- const requestPath = getRequestPath(request2.url);
1302
+ this._httpServer.on("upgrade", (request3, socket, head) => {
1303
+ const requestPath = getRequestPath(request3.url);
1062
1304
  console.log("[WebSocket] Upgrade request:", requestPath, "Expected:", this.path || "(any)");
1063
1305
  if (this.path && requestPath !== this.path) {
1064
1306
  console.log("[WebSocket] Path mismatch, ignoring");
1065
1307
  return;
1066
1308
  }
1067
- this.handleUpgrade(request2, socket, head, (client) => {
1309
+ this.handleUpgrade(request3, socket, head, (client) => {
1068
1310
  console.log("[WebSocket] Client connected");
1069
- this.emit("connection", client, request2);
1311
+ this.emit("connection", client, request3);
1070
1312
  });
1071
1313
  });
1072
1314
  }
1073
1315
  /**
1074
- * Handle HTTP upgrade for WebSocket
1316
+ * Handle HTTP upgrade for WebSocket.
1075
1317
  */
1076
- handleUpgrade(request2, socket, _head, callback) {
1077
- const key = request2.headers["sec-websocket-key"];
1318
+ handleUpgrade(request3, socket, _head, callback) {
1319
+ const key = request3.headers["sec-websocket-key"];
1078
1320
  if (!key) {
1079
1321
  socket.end("HTTP/1.1 400 Bad Request\r\n\r\n");
1080
1322
  return;
@@ -1110,7 +1352,7 @@
1110
1352
  client._socket = socket;
1111
1353
  socket.on("data", (data) => {
1112
1354
  try {
1113
- const message = this._parseFrame(data);
1355
+ const message = parseFrame(data);
1114
1356
  if (message) {
1115
1357
  client.emit("message", message, false);
1116
1358
  }
@@ -1123,36 +1365,34 @@
1123
1365
  client.emit("close", CLOSE_CODES.NORMAL, "");
1124
1366
  });
1125
1367
  socket.on("error", (error) => {
1126
- const errorCode = error.code;
1127
- if (errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE") {
1368
+ if (isIgnorableConnectionError(error)) {
1128
1369
  return;
1129
1370
  }
1130
1371
  client.emit("error", error);
1131
1372
  });
1132
1373
  client.send = (data, _options, callback) => {
1133
1374
  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);
1375
+ const error = new Error("WebSocket is not open");
1376
+ error.code = "WS_NOT_OPEN";
1377
+ queueCallback(callback, error);
1137
1378
  return;
1138
1379
  }
1139
1380
  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);
1381
+ const frame = createFrame(data);
1382
+ socket.write(frame, (error) => {
1383
+ if (!error) {
1384
+ queueCallback(callback);
1385
+ return;
1152
1386
  }
1387
+ if (isIgnorableConnectionError(error)) {
1388
+ client.readyState = 3 /* CLOSED */;
1389
+ queueCallback(callback);
1390
+ return;
1391
+ }
1392
+ queueCallback(callback, error);
1153
1393
  });
1154
1394
  } catch (error) {
1155
- queueCallback3(callback, error);
1395
+ queueCallback(callback, error);
1156
1396
  }
1157
1397
  };
1158
1398
  client.close = (_code, _reason) => {
@@ -1172,14 +1412,14 @@
1172
1412
  client._socket = socket;
1173
1413
  client.send = (data, _options, callback) => {
1174
1414
  if (client.readyState !== 1 /* OPEN */) {
1175
- queueCallback3(callback, new Error("WebSocket is not open"));
1415
+ queueCallback(callback, new Error("WebSocket is not open"));
1176
1416
  return;
1177
1417
  }
1178
1418
  try {
1179
1419
  socket.send(data);
1180
- queueCallback3(callback);
1420
+ queueCallback(callback);
1181
1421
  } catch (error) {
1182
- queueCallback3(callback, error);
1422
+ queueCallback(callback, error);
1183
1423
  }
1184
1424
  };
1185
1425
  client.close = (code, reason) => {
@@ -1187,7 +1427,7 @@
1187
1427
  return;
1188
1428
  }
1189
1429
  client.readyState = 2 /* CLOSING */;
1190
- socket.close(code ?? CLOSE_CODES.NORMAL, reason);
1430
+ socket.close(code ?? CLOSE_CODES.NORMAL, typeof reason === "string" ? reason : reason?.toString());
1191
1431
  };
1192
1432
  client.terminate = () => {
1193
1433
  socket.close();
@@ -1195,7 +1435,7 @@
1195
1435
  };
1196
1436
  return client;
1197
1437
  }
1198
- _handleBunOpen(socket, request2 = {}) {
1438
+ _handleBunOpen(socket, request3 = {}) {
1199
1439
  const client = this._createClientFromBunSocket(socket);
1200
1440
  if (socket.data) {
1201
1441
  socket.data.client = client;
@@ -1207,9 +1447,9 @@
1207
1447
  });
1208
1448
  }
1209
1449
  const incomingRequest = {
1210
- url: request2.url || this.path,
1211
- headers: request2.headers || {},
1212
- socket: request2.socket || { remoteAddress: void 0 }
1450
+ url: request3.url || this.path,
1451
+ headers: request3.headers || {},
1452
+ socket: request3.socket || { remoteAddress: void 0 }
1213
1453
  };
1214
1454
  this.emit("connection", client, incomingRequest);
1215
1455
  }
@@ -1218,8 +1458,7 @@
1218
1458
  if (!client) {
1219
1459
  return;
1220
1460
  }
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));
1461
+ const { payload, isBinary } = coerceBunMessage(message);
1223
1462
  client.emit("message", payload, isBinary);
1224
1463
  }
1225
1464
  _handleBunClose(socket, code, reason) {
@@ -1231,98 +1470,290 @@
1231
1470
  client.emit("close", code, typeof reason === "string" ? reason : reason?.toString() || "");
1232
1471
  this.clients.delete(client);
1233
1472
  }
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
1473
  /**
1288
- * Close the server
1474
+ * Close the server.
1289
1475
  */
1290
1476
  close(callback) {
1291
1477
  this.clients.forEach((client) => client.close());
1292
1478
  this.clients.clear();
1293
1479
  if (this._httpServer && this._ownsHttpServer) {
1294
1480
  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);
1481
+ return;
1301
1482
  }
1483
+ if (runtime === "bun" && this._httpServer?.unregisterWebSocketServer) {
1484
+ this._httpServer.unregisterWebSocketServer(this);
1485
+ }
1486
+ this.emit("close");
1487
+ queueCallback(callback);
1302
1488
  }
1303
1489
  /**
1304
- * Check if server should handle request
1490
+ * Check if server should handle request.
1305
1491
  */
1306
- shouldHandle(request2) {
1307
- if (this.path && getRequestPath(request2.url) !== this.path) {
1492
+ shouldHandle(request3) {
1493
+ if (this.path && getRequestPath(request3.url) !== this.path) {
1308
1494
  return false;
1309
1495
  }
1310
1496
  return true;
1311
1497
  }
1312
1498
  /**
1313
- * Get server address
1499
+ * Get server address.
1314
1500
  */
1315
1501
  address() {
1316
- if (this._httpServer && this._httpServer.address) {
1502
+ if (this._httpServer?.address) {
1317
1503
  return this._httpServer.address();
1318
1504
  }
1319
1505
  return null;
1320
1506
  }
1321
1507
  };
1322
1508
 
1323
- // src/wss.ts
1509
+ // src/server/ws/runtime.ts
1510
+ init_runtime();
1511
+
1512
+ // src/server/wss/client.ts
1513
+ var WSSClient = class extends WebSocket {
1514
+ constructor(address, protocols, options) {
1515
+ const urlString = typeof address === "string" ? address : address.toString();
1516
+ const secureUrl = urlString.replace(/^ws:\/\//i, "wss://");
1517
+ super(secureUrl, protocols, options);
1518
+ }
1519
+ };
1520
+ function createWSSClient(address, protocols, options) {
1521
+ return new WSSClient(address, protocols, options);
1522
+ }
1523
+
1524
+ // src/server/wss/runtime.ts
1525
+ init_runtime();
1526
+ function getRuntime2() {
1527
+ return runtime;
1528
+ }
1529
+
1530
+ // src/server/wss/server.ts
1531
+ var import_events3 = __require("events");
1532
+
1533
+ // src/server/https/client-request.ts
1534
+ var import_node_events = __require("events");
1535
+ init_utils();
1536
+
1537
+ // src/server/https/request-api.ts
1538
+ init_runtime();
1539
+
1540
+ // src/server/https/http-classes.ts
1541
+ function loadHttpClasses() {
1542
+ const httpModule = (init_http(), __toCommonJS(http_exports));
1543
+ return {
1544
+ IncomingMessage: httpModule.IncomingMessage,
1545
+ ServerResponse: httpModule.ServerResponse
1546
+ };
1547
+ }
1548
+
1549
+ // src/server/https/node-modules.ts
1550
+ init_runtime();
1551
+ var https2;
1552
+ if (isNode && typeof process !== "undefined") {
1553
+ try {
1554
+ https2 = __require("https");
1555
+ } catch {
1556
+ https2 = __require("https");
1557
+ }
1558
+ }
1559
+
1560
+ // src/server/https/runtime.ts
1561
+ init_runtime();
1562
+
1563
+ // src/server/https/server-runtime.ts
1564
+ var import_node_events6 = __require("events");
1565
+ init_runtime();
1566
+ init_utils();
1567
+ var Server2 = class extends import_node_events6.EventEmitter {
1568
+ constructor(options = {}, requestListener) {
1569
+ super();
1570
+ this._listening = false;
1571
+ this.options = options;
1572
+ this.requestListener = requestListener;
1573
+ }
1574
+ resolvePmInheritedFd(explicitPort, explicitFd) {
1575
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
1576
+ return explicitFd;
1577
+ }
1578
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
1579
+ if (!fdValue) {
1580
+ return void 0;
1581
+ }
1582
+ const parsedFd = Number.parseInt(fdValue, 10);
1583
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
1584
+ return void 0;
1585
+ }
1586
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
1587
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
1588
+ return void 0;
1589
+ }
1590
+ return parsedFd;
1591
+ }
1592
+ listen(...args) {
1593
+ let port = 3e3;
1594
+ let hostname = "0.0.0.0";
1595
+ let fd;
1596
+ let callback;
1597
+ const firstArg = args[0];
1598
+ if (typeof firstArg === "number") {
1599
+ port = firstArg;
1600
+ const secondArg = args[1];
1601
+ if (typeof secondArg === "string") {
1602
+ hostname = secondArg;
1603
+ callback = args[2] || args[3];
1604
+ } else if (typeof secondArg === "function") {
1605
+ callback = secondArg;
1606
+ }
1607
+ } else if (firstArg && typeof firstArg === "object") {
1608
+ port = firstArg.port || 3e3;
1609
+ hostname = firstArg.hostname || "0.0.0.0";
1610
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
1611
+ callback = args[1];
1612
+ }
1613
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
1614
+ const self = this;
1615
+ if (isNode) {
1616
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1617
+ this.nativeServer = https2.createServer(this.options, (req, res) => {
1618
+ const incomingMessage = new IncomingMessage2(req);
1619
+ const serverResponse = new ServerResponse2(incomingMessage, res);
1620
+ if (self.requestListener) {
1621
+ self.requestListener(incomingMessage, serverResponse);
1622
+ } else {
1623
+ self.emit("request", incomingMessage, serverResponse);
1624
+ }
1625
+ });
1626
+ if (fd !== void 0) {
1627
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
1628
+ this._listening = true;
1629
+ this.emit("listening");
1630
+ if (callback) callback();
1631
+ });
1632
+ } else {
1633
+ this.nativeServer.listen(port, hostname, () => {
1634
+ this._listening = true;
1635
+ this.emit("listening");
1636
+ if (callback) callback();
1637
+ });
1638
+ }
1639
+ this.nativeServer.on("error", (err) => this.emit("error", err));
1640
+ this.nativeServer.on("close", () => {
1641
+ this._listening = false;
1642
+ this.emit("close");
1643
+ });
1644
+ } else if (isBun) {
1645
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1646
+ const tlsOptions = {
1647
+ port,
1648
+ hostname,
1649
+ fetch: (req) => {
1650
+ return new Promise((resolve) => {
1651
+ const incomingMessage = new IncomingMessage2(req);
1652
+ const serverResponse = new ServerResponse2();
1653
+ serverResponse._setResolver(resolve);
1654
+ if (self.requestListener) {
1655
+ self.requestListener(incomingMessage, serverResponse);
1656
+ } else {
1657
+ self.emit("request", incomingMessage, serverResponse);
1658
+ }
1659
+ });
1660
+ },
1661
+ error: (error) => {
1662
+ this.emit("error", error);
1663
+ return createErrorResponse();
1664
+ }
1665
+ };
1666
+ if (this.options.key || this.options.cert) {
1667
+ tlsOptions.tls = {
1668
+ key: this.options.key,
1669
+ cert: this.options.cert,
1670
+ ca: this.options.ca,
1671
+ passphrase: this.options.passphrase
1672
+ };
1673
+ } else if (this.options.tls) {
1674
+ tlsOptions.tls = this.options.tls;
1675
+ }
1676
+ this.nativeServer = Bun.serve(tlsOptions);
1677
+ emitListeningWithCallback(this, callback);
1678
+ } else if (isDeno) {
1679
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1680
+ const serveOptions = {
1681
+ port,
1682
+ hostname,
1683
+ handler: (req) => {
1684
+ return new Promise((resolve) => {
1685
+ const incomingMessage = new IncomingMessage2(req);
1686
+ const serverResponse = new ServerResponse2();
1687
+ serverResponse._setResolver(resolve);
1688
+ if (self.requestListener) {
1689
+ self.requestListener(incomingMessage, serverResponse);
1690
+ } else {
1691
+ self.emit("request", incomingMessage, serverResponse);
1692
+ }
1693
+ });
1694
+ },
1695
+ onError: (error) => {
1696
+ this.emit("error", error);
1697
+ return createErrorResponse();
1698
+ }
1699
+ };
1700
+ if (this.options.key && this.options.cert) {
1701
+ serveOptions.cert = this.options.cert;
1702
+ serveOptions.key = this.options.key;
1703
+ }
1704
+ this.nativeServer = Deno.serve(serveOptions);
1705
+ emitListeningWithCallback(this, callback);
1706
+ }
1707
+ return this;
1708
+ }
1709
+ close(callback) {
1710
+ if (!this.nativeServer) {
1711
+ if (callback) queueCallback2(() => callback());
1712
+ return this;
1713
+ }
1714
+ if (isNode) {
1715
+ this.nativeServer.close(callback);
1716
+ } else if (isBun) {
1717
+ this.nativeServer.stop();
1718
+ closeAndEmit(this, callback);
1719
+ } else if (isDeno) {
1720
+ this.nativeServer.shutdown();
1721
+ closeAndEmit(this, callback);
1722
+ }
1723
+ return this;
1724
+ }
1725
+ address() {
1726
+ if (!this.nativeServer) return null;
1727
+ if (isNode) {
1728
+ const addr = this.nativeServer.address();
1729
+ if (!addr) return null;
1730
+ if (typeof addr === "string") {
1731
+ return createAddress(0, addr, "unix");
1732
+ }
1733
+ return addr;
1734
+ }
1735
+ if (isBun) {
1736
+ return createAddress(this.nativeServer.port, this.nativeServer.hostname);
1737
+ }
1738
+ if (isDeno) {
1739
+ const addr = this.nativeServer.addr;
1740
+ return createAddress(addr.port, addr.hostname);
1741
+ }
1742
+ return null;
1743
+ }
1744
+ get listening() {
1745
+ return this._listening;
1746
+ }
1747
+ };
1748
+ function createServer2(options = {}, requestListener) {
1749
+ return new Server2(options, requestListener);
1750
+ }
1751
+
1752
+ // src/server/wss/server.ts
1324
1753
  init_runtime();
1325
- function queueCallback4(callback) {
1754
+
1755
+ // src/server/wss/utils.ts
1756
+ function queueCallback3(callback) {
1326
1757
  if (callback) {
1327
1758
  queueMicrotask(callback);
1328
1759
  }
@@ -1339,15 +1770,10 @@
1339
1770
  }
1340
1771
  function emitCloseWithCallback(emitter, callback) {
1341
1772
  emitter.emit("close");
1342
- queueCallback4(callback);
1773
+ queueCallback3(callback);
1343
1774
  }
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
- };
1775
+
1776
+ // src/server/wss/server.ts
1351
1777
  var WSSServer = class extends import_events3.EventEmitter {
1352
1778
  constructor(options, callback) {
1353
1779
  super();
@@ -1360,7 +1786,7 @@
1360
1786
  this._setupServer(callback);
1361
1787
  } else if (options?.noServer) {
1362
1788
  this._wsServer = new WebSocketServer({ noServer: true });
1363
- queueCallback4(callback);
1789
+ queueCallback3(callback);
1364
1790
  } else {
1365
1791
  this._httpsServer = createServer2(buildHttpsOptions(options));
1366
1792
  this._setupServer(callback);
@@ -1370,7 +1796,7 @@
1370
1796
  }
1371
1797
  } else {
1372
1798
  this._wsServer = new WebSocketServer(options);
1373
- queueCallback4(callback);
1799
+ queueCallback3(callback);
1374
1800
  }
1375
1801
  }
1376
1802
  _setupServer(callback) {
@@ -1379,44 +1805,44 @@
1379
1805
  server: this._httpsServer,
1380
1806
  noServer: false
1381
1807
  });
1382
- this._wsServer.on("connection", (client, request2) => {
1808
+ this._wsServer.on("connection", (client, request3) => {
1383
1809
  if (this.options.clientTracking !== false) {
1384
1810
  this.clients.add(client);
1385
1811
  client.on("close", () => {
1386
1812
  this.clients.delete(client);
1387
1813
  });
1388
1814
  }
1389
- this.emit("connection", client, request2);
1815
+ this.emit("connection", client, request3);
1390
1816
  });
1391
1817
  this._wsServer.on("error", (error) => {
1392
1818
  this.emit("error", error);
1393
1819
  });
1394
1820
  if (!this.options?.port) {
1395
- queueCallback4(callback);
1821
+ queueCallback3(callback);
1396
1822
  }
1397
1823
  }
1398
1824
  /**
1399
- * Handle HTTP upgrade for WebSocket
1825
+ * Handle HTTP upgrade for WebSocket.
1400
1826
  */
1401
- handleUpgrade(request2, socket, head, callback) {
1827
+ handleUpgrade(request3, socket, head, callback) {
1402
1828
  if (this._wsServer) {
1403
- this._wsServer.handleUpgrade(request2, socket, head, callback);
1829
+ this._wsServer.handleUpgrade(request3, socket, head, callback);
1404
1830
  }
1405
1831
  }
1406
1832
  /**
1407
- * Check if server should handle request
1833
+ * Check if server should handle request.
1408
1834
  */
1409
- shouldHandle(request2) {
1835
+ shouldHandle(request3) {
1410
1836
  if (this._wsServer) {
1411
- return this._wsServer.shouldHandle(request2);
1837
+ return this._wsServer.shouldHandle(request3);
1412
1838
  }
1413
- if (this.path && request2.url !== this.path) {
1839
+ if (this.path && request3.url !== this.path) {
1414
1840
  return false;
1415
1841
  }
1416
1842
  return true;
1417
1843
  }
1418
1844
  /**
1419
- * Close the server
1845
+ * Close the server.
1420
1846
  */
1421
1847
  close(callback) {
1422
1848
  this.clients.forEach((client) => client.close());
@@ -1429,17 +1855,19 @@
1429
1855
  emitCloseWithCallback(this, callback);
1430
1856
  }
1431
1857
  });
1432
- } else if (this._httpsServer) {
1858
+ return;
1859
+ }
1860
+ if (this._httpsServer) {
1433
1861
  this._httpsServer.close(callback);
1434
- } else {
1435
- emitCloseWithCallback(this, callback);
1862
+ return;
1436
1863
  }
1864
+ emitCloseWithCallback(this, callback);
1437
1865
  }
1438
1866
  /**
1439
- * Get server address
1867
+ * Get server address.
1440
1868
  */
1441
1869
  address() {
1442
- if (this._httpsServer && this._httpsServer.address) {
1870
+ if (this._httpsServer?.address) {
1443
1871
  return this._httpsServer.address();
1444
1872
  }
1445
1873
  if (this._wsServer) {
@@ -1448,15 +1876,11 @@
1448
1876
  return null;
1449
1877
  }
1450
1878
  };
1451
- function createWSSClient(address, protocols, options) {
1452
- return new WSSClient(address, protocols, options);
1453
- }
1454
1879
  function createWSSServer(options, callback) {
1455
1880
  return new WSSServer(options, callback);
1456
1881
  }
1457
- function getRuntime2() {
1458
- return runtime;
1459
- }
1882
+
1883
+ // src/server/wss/index.ts
1460
1884
  var wss_default = {
1461
1885
  WSSClient,
1462
1886
  WSSServer,