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.cjs CHANGED
@@ -20,10 +20,10 @@ var __copyProps = (to, from, except, desc) => {
20
20
  };
21
21
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
22
 
23
- // src/runtime.ts
23
+ // src/shares/runtime.ts
24
24
  var runtime, isNode, isBun, isDeno;
25
25
  var init_runtime = __esm({
26
- "src/runtime.ts"() {
26
+ "src/shares/runtime.ts"() {
27
27
  "use strict";
28
28
  runtime = (() => {
29
29
  if (typeof Deno !== "undefined") return "deno";
@@ -36,25 +36,78 @@ var init_runtime = __esm({
36
36
  }
37
37
  });
38
38
 
39
- // src/http.ts
40
- var http_exports = {};
41
- __export(http_exports, {
42
- Agent: () => Agent,
43
- ClientRequest: () => ClientRequest,
44
- IncomingMessage: () => IncomingMessage,
45
- METHODS: () => METHODS,
46
- STATUS_CODES: () => STATUS_CODES,
47
- Server: () => Server,
48
- ServerResponse: () => ServerResponse,
49
- createServer: () => createServer,
50
- default: () => http_default,
51
- get: () => get,
52
- getRuntime: () => getRuntime,
53
- request: () => request
54
- });
55
- function queueCallback(callback) {
39
+ // src/server/http/utils.ts
40
+ function queueCallback2(callback) {
56
41
  if (callback) queueMicrotask(callback);
57
42
  }
43
+ function getRequestPath2(url) {
44
+ if (!url) return "";
45
+ try {
46
+ const urlObj = new URL(url);
47
+ return urlObj.pathname + urlObj.search;
48
+ } catch {
49
+ return url;
50
+ }
51
+ }
52
+ function headersToRecord(headers) {
53
+ const result = /* @__PURE__ */ Object.create(null);
54
+ headers.forEach((value, key) => {
55
+ result[key] = value;
56
+ });
57
+ return result;
58
+ }
59
+ function headersToRawHeaders(headers) {
60
+ const rawHeaders = [];
61
+ headers.forEach((value, key) => {
62
+ rawHeaders.push(key, value);
63
+ });
64
+ return rawHeaders;
65
+ }
66
+ function normalizeRequestBodyChunk(chunk, encoding = "utf8") {
67
+ if (typeof chunk === "string") {
68
+ if (encoding !== "utf8" && typeof Buffer !== "undefined") {
69
+ return Buffer.from(chunk, encoding);
70
+ }
71
+ return chunk;
72
+ }
73
+ if (chunk instanceof Uint8Array) {
74
+ return chunk;
75
+ }
76
+ if (chunk instanceof ArrayBuffer) {
77
+ return new Uint8Array(chunk);
78
+ }
79
+ if (ArrayBuffer.isView(chunk)) {
80
+ return new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);
81
+ }
82
+ return new TextEncoder().encode(String(chunk));
83
+ }
84
+ function buildRequestBody(chunks) {
85
+ if (chunks.length === 0) {
86
+ return void 0;
87
+ }
88
+ if (chunks.length === 1) {
89
+ return chunks[0];
90
+ }
91
+ if (chunks.every((chunk) => typeof chunk === "string")) {
92
+ return chunks.join("");
93
+ }
94
+ const encoder = new TextEncoder();
95
+ const bodyParts = chunks.map((chunk) => typeof chunk === "string" ? encoder.encode(chunk) : chunk);
96
+ const totalLength = bodyParts.reduce((sum, part) => sum + part.byteLength, 0);
97
+ const body = new Uint8Array(totalLength);
98
+ let offset = 0;
99
+ for (const part of bodyParts) {
100
+ body.set(part, offset);
101
+ offset += part.byteLength;
102
+ }
103
+ return body;
104
+ }
105
+ function isFetchResponse(value) {
106
+ return typeof value?.status === "number" && typeof value?.statusText === "string" && typeof value?.headers?.forEach === "function";
107
+ }
108
+ function isNodeIncomingMessage(value) {
109
+ return typeof value?.on === "function" && typeof value?.headers === "object" && (typeof value?.httpVersion === "string" || value?.socket !== void 0);
110
+ }
58
111
  function headersToInit(headers) {
59
112
  const result = {};
60
113
  for (const key in headers) {
@@ -72,76 +125,110 @@ function createErrorResponse() {
72
125
  function emitListeningWithCallback(server, callback) {
73
126
  server._listening = true;
74
127
  server.emit("listening");
75
- queueCallback(callback);
128
+ queueCallback2(callback);
76
129
  }
77
130
  function closeAndEmit(server, callback) {
78
131
  server._listening = false;
79
132
  server.emit("close");
80
133
  if (callback) queueMicrotask(() => callback());
81
134
  }
82
- function createServer(optionsOrListener, requestListener) {
83
- return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
84
- }
85
- function request(url, options, callback) {
86
- const urlString = typeof url === "string" ? url : url.toString();
87
- const req = new ClientRequest(urlString, options);
88
- if (isNode) {
89
- const urlObj = new URL(urlString);
90
- const client = urlObj.protocol === "https:" ? https : http;
91
- const nodeReq = client.request(urlString, {
92
- method: options?.method || "GET",
93
- headers: options?.headers,
94
- timeout: options?.timeout,
95
- signal: options?.signal
96
- }, (res) => {
97
- const incomingMessage = new IncomingMessage(res);
98
- if (callback) callback(incomingMessage);
99
- req.emit("response", incomingMessage);
100
- });
101
- nodeReq.on("error", (error) => req.emit("error", error));
102
- nodeReq.end();
103
- } else {
104
- queueMicrotask(async () => {
105
- try {
106
- const response = await fetch(urlString, {
107
- method: options?.method || "GET",
108
- headers: options?.headers,
109
- signal: options?.signal
110
- });
111
- const fetchRequest = new Request(urlString);
112
- const incomingMessage = new IncomingMessage(fetchRequest);
113
- incomingMessage.statusCode = response.status;
114
- incomingMessage.statusMessage = response.statusText;
115
- if (callback) callback(incomingMessage);
116
- req.emit("response", incomingMessage);
117
- } catch (error) {
118
- req.emit("error", error);
135
+ var init_utils = __esm({
136
+ "src/server/http/utils.ts"() {
137
+ "use strict";
138
+ }
139
+ });
140
+
141
+ // src/server/http/agent.ts
142
+ var Agent;
143
+ var init_agent = __esm({
144
+ "src/server/http/agent.ts"() {
145
+ "use strict";
146
+ Agent = class {
147
+ constructor(options) {
148
+ this.options = options;
119
149
  }
120
- });
150
+ };
121
151
  }
122
- return req;
123
- }
124
- function get(url, options, callback) {
125
- return request(url, { ...options, method: "GET" }, callback);
126
- }
127
- function getRuntime() {
128
- return runtime;
129
- }
130
- var import_node_events, http, https, METHODS, STATUS_CODES, IncomingMessage, ServerResponse, Server, ClientRequest, Agent, http_default;
131
- var init_http = __esm({
132
- "src/http.ts"() {
152
+ });
153
+
154
+ // src/server/http/client-request.ts
155
+ var import_node_events2, ClientRequest;
156
+ var init_client_request = __esm({
157
+ "src/server/http/client-request.ts"() {
133
158
  "use strict";
134
- import_node_events = require("events");
135
- init_runtime();
136
- if (isNode && typeof process !== "undefined") {
137
- try {
138
- http = require("http");
139
- https = require("https");
140
- } catch (e) {
141
- http = require("http");
142
- https = require("https");
159
+ import_node_events2 = require("events");
160
+ init_utils();
161
+ ClientRequest = class extends import_node_events2.EventEmitter {
162
+ constructor(_url, _options = {}) {
163
+ super();
164
+ this._bodyChunks = [];
165
+ this._ended = false;
143
166
  }
144
- }
167
+ _setNativeRequest(nativeRequest) {
168
+ this._nativeRequest = nativeRequest;
169
+ }
170
+ _setExecutor(executor) {
171
+ this._executor = executor;
172
+ }
173
+ write(chunk, encoding, callback) {
174
+ if (this._ended) {
175
+ throw new Error("Cannot write after end");
176
+ }
177
+ if (typeof encoding === "function") {
178
+ callback = encoding;
179
+ encoding = void 0;
180
+ }
181
+ if (this._nativeRequest) {
182
+ const actualEncoding2 = typeof encoding === "string" ? encoding : void 0;
183
+ return this._nativeRequest.write(chunk, actualEncoding2, callback);
184
+ }
185
+ const actualEncoding = typeof encoding === "string" ? encoding : "utf8";
186
+ this._bodyChunks.push(normalizeRequestBodyChunk(chunk, actualEncoding));
187
+ queueCallback2(callback);
188
+ return true;
189
+ }
190
+ end(chunk, encoding, callback) {
191
+ if (typeof chunk === "function") {
192
+ callback = chunk;
193
+ chunk = void 0;
194
+ encoding = void 0;
195
+ } else if (typeof encoding === "function") {
196
+ callback = encoding;
197
+ encoding = void 0;
198
+ }
199
+ if (this._ended) {
200
+ queueCallback2(callback);
201
+ return;
202
+ }
203
+ this._ended = true;
204
+ if (this._nativeRequest) {
205
+ const actualEncoding = typeof encoding === "string" ? encoding : void 0;
206
+ if (chunk !== void 0) {
207
+ this._nativeRequest.end(chunk, actualEncoding, callback);
208
+ } else {
209
+ this._nativeRequest.end(callback);
210
+ }
211
+ return;
212
+ }
213
+ if (chunk !== void 0) {
214
+ this._bodyChunks.push(normalizeRequestBodyChunk(chunk, typeof encoding === "string" ? encoding : "utf8"));
215
+ }
216
+ const executor = this._executor;
217
+ const body = buildRequestBody(this._bodyChunks);
218
+ if (executor) {
219
+ Promise.resolve().then(() => executor(body)).catch((error) => this.emit("error", error));
220
+ }
221
+ queueCallback2(callback);
222
+ }
223
+ };
224
+ }
225
+ });
226
+
227
+ // src/server/http/constants.ts
228
+ var METHODS, STATUS_CODES;
229
+ var init_constants = __esm({
230
+ "src/server/http/constants.ts"() {
231
+ "use strict";
145
232
  METHODS = [
146
233
  "GET",
147
234
  "POST",
@@ -209,13 +296,30 @@ var init_http = __esm({
209
296
  510: "Not Extended",
210
297
  511: "Network Authentication Required"
211
298
  };
212
- IncomingMessage = class extends import_node_events.EventEmitter {
213
- constructor(req) {
299
+ }
300
+ });
301
+
302
+ // src/server/http/incoming-message.ts
303
+ var import_node_events3, IncomingMessage;
304
+ var init_incoming_message = __esm({
305
+ "src/server/http/incoming-message.ts"() {
306
+ "use strict";
307
+ import_node_events3 = require("events");
308
+ init_utils();
309
+ IncomingMessage = class extends import_node_events3.EventEmitter {
310
+ constructor(req, requestMethod) {
214
311
  super();
215
312
  this.httpVersion = "1.1";
216
313
  this.rawHeaders = [];
217
314
  this._req = req;
218
- if (isNode) {
315
+ if (isFetchResponse(req)) {
316
+ this.method = requestMethod || "GET";
317
+ this.url = getRequestPath2(req.url);
318
+ this.headers = headersToRecord(req.headers);
319
+ this.statusCode = req.status;
320
+ this.statusMessage = req.statusText;
321
+ this.rawHeaders = headersToRawHeaders(req.headers);
322
+ } else if (isNodeIncomingMessage(req)) {
219
323
  this.method = req.method;
220
324
  this.url = req.url;
221
325
  this.headers = req.headers;
@@ -226,14 +330,13 @@ var init_http = __esm({
226
330
  this.socket = req.socket;
227
331
  } else {
228
332
  this.method = req.method;
229
- const urlObj = new URL(req.url);
230
- this.url = urlObj.pathname + urlObj.search;
231
- this.headers = req.headers;
232
- this.rawHeaders = [];
333
+ this.url = getRequestPath2(req.url);
334
+ this.headers = headersToRecord(req.headers);
335
+ this.rawHeaders = headersToRawHeaders(req.headers);
233
336
  }
234
337
  }
235
338
  async text() {
236
- if (isNode) {
339
+ if (isNodeIncomingMessage(this._req)) {
237
340
  return new Promise((resolve, reject) => {
238
341
  const chunks = [];
239
342
  this._req.on("data", (chunk) => chunks.push(chunk));
@@ -244,14 +347,92 @@ var init_http = __esm({
244
347
  return this._req.text();
245
348
  }
246
349
  async json() {
247
- if (isNode) {
350
+ if (isNodeIncomingMessage(this._req)) {
248
351
  const text = await this.text();
249
352
  return JSON.parse(text);
250
353
  }
251
354
  return this._req.json();
252
355
  }
253
356
  };
254
- ServerResponse = class extends import_node_events.EventEmitter {
357
+ }
358
+ });
359
+
360
+ // src/server/http/node-modules.ts
361
+ var http, https;
362
+ var init_node_modules = __esm({
363
+ "src/server/http/node-modules.ts"() {
364
+ "use strict";
365
+ init_runtime();
366
+ if (isNode && typeof process !== "undefined") {
367
+ try {
368
+ http = require("http");
369
+ https = require("https");
370
+ } catch {
371
+ http = require("http");
372
+ https = require("https");
373
+ }
374
+ }
375
+ }
376
+ });
377
+
378
+ // src/server/http/request-api.ts
379
+ function request(url, options, callback) {
380
+ const urlString = typeof url === "string" ? url : url.toString();
381
+ const req = new ClientRequest(urlString, options);
382
+ if (isNode) {
383
+ const urlObj = new URL(urlString);
384
+ const client = urlObj.protocol === "https:" ? https : http;
385
+ const nodeReq = client.request(urlString, {
386
+ method: options?.method || "GET",
387
+ headers: options?.headers,
388
+ timeout: options?.timeout,
389
+ signal: options?.signal
390
+ }, (res) => {
391
+ const incomingMessage = new IncomingMessage(res);
392
+ if (callback) callback(incomingMessage);
393
+ req.emit("response", incomingMessage);
394
+ });
395
+ req._setNativeRequest(nodeReq);
396
+ nodeReq.on("error", (error) => req.emit("error", error));
397
+ } else {
398
+ req._setExecutor(async (body) => {
399
+ const response = await fetch(urlString, {
400
+ method: options?.method || "GET",
401
+ headers: options?.headers,
402
+ body,
403
+ signal: options?.signal
404
+ });
405
+ const incomingMessage = new IncomingMessage(response, options?.method || "GET");
406
+ if (callback) callback(incomingMessage);
407
+ req.emit("response", incomingMessage);
408
+ });
409
+ }
410
+ return req;
411
+ }
412
+ function get(url, options, callback) {
413
+ const req = request(url, { ...options, method: "GET" }, callback);
414
+ req.end();
415
+ return req;
416
+ }
417
+ var init_request_api = __esm({
418
+ "src/server/http/request-api.ts"() {
419
+ "use strict";
420
+ init_runtime();
421
+ init_client_request();
422
+ init_incoming_message();
423
+ init_node_modules();
424
+ }
425
+ });
426
+
427
+ // src/server/http/response.ts
428
+ var import_node_events4, ServerResponse;
429
+ var init_response = __esm({
430
+ "src/server/http/response.ts"() {
431
+ "use strict";
432
+ import_node_events4 = require("events");
433
+ init_runtime();
434
+ init_utils();
435
+ ServerResponse = class extends import_node_events4.EventEmitter {
255
436
  constructor(_req, nodeRes) {
256
437
  super();
257
438
  this.statusCode = 200;
@@ -344,7 +525,7 @@ var init_http = __esm({
344
525
  return this._nodeRes.write(chunk, encoding, callback);
345
526
  }
346
527
  this._body += chunk;
347
- queueCallback(callback);
528
+ queueCallback2(callback);
348
529
  return true;
349
530
  }
350
531
  end(chunk, encoding, callback) {
@@ -377,14 +558,13 @@ var init_http = __esm({
377
558
  if (this._resolve) {
378
559
  this._resolve(response);
379
560
  }
380
- queueCallback(callback);
561
+ queueCallback2(callback);
381
562
  }
382
563
  return this;
383
564
  }
384
565
  _setResolver(resolve) {
385
566
  this._resolve = resolve;
386
567
  }
387
- // Express.js-like methods
388
568
  json(data, statusCode = 200) {
389
569
  if (!this.headersSent) {
390
570
  this.setHeader("Content-Type", "application/json");
@@ -408,7 +588,36 @@ var init_http = __esm({
408
588
  return this;
409
589
  }
410
590
  };
411
- Server = class extends import_node_events.EventEmitter {
591
+ }
592
+ });
593
+
594
+ // src/server/http/runtime.ts
595
+ function getRuntime3() {
596
+ return runtime;
597
+ }
598
+ var init_runtime2 = __esm({
599
+ "src/server/http/runtime.ts"() {
600
+ "use strict";
601
+ init_runtime();
602
+ }
603
+ });
604
+
605
+ // src/server/http/server-runtime.ts
606
+ function createServer(arg1, arg2) {
607
+ const requestListener = typeof arg1 === "function" ? arg1 : arg2;
608
+ return new Server(requestListener);
609
+ }
610
+ var import_node_events5, Server;
611
+ var init_server_runtime = __esm({
612
+ "src/server/http/server-runtime.ts"() {
613
+ "use strict";
614
+ import_node_events5 = require("events");
615
+ init_runtime();
616
+ init_node_modules();
617
+ init_incoming_message();
618
+ init_response();
619
+ init_utils();
620
+ Server = class extends import_node_events5.EventEmitter {
412
621
  constructor(requestListener) {
413
622
  super();
414
623
  this._bunWebSocketServers = /* @__PURE__ */ new Set();
@@ -421,9 +630,28 @@ var init_http = __esm({
421
630
  unregisterWebSocketServer(wsServer) {
422
631
  this._bunWebSocketServers.delete(wsServer);
423
632
  }
633
+ resolvePmInheritedFd(explicitPort, explicitFd) {
634
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
635
+ return explicitFd;
636
+ }
637
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
638
+ if (!fdValue) {
639
+ return void 0;
640
+ }
641
+ const parsedFd = Number.parseInt(fdValue, 10);
642
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
643
+ return void 0;
644
+ }
645
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
646
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
647
+ return void 0;
648
+ }
649
+ return parsedFd;
650
+ }
424
651
  listen(...args) {
425
652
  let port = 3e3;
426
653
  let hostname = "0.0.0.0";
654
+ let fd;
427
655
  let callback;
428
656
  const firstArg = args[0];
429
657
  if (typeof firstArg === "number") {
@@ -438,8 +666,10 @@ var init_http = __esm({
438
666
  } else if (firstArg && typeof firstArg === "object") {
439
667
  port = firstArg.port || 3e3;
440
668
  hostname = firstArg.hostname || "0.0.0.0";
669
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
441
670
  callback = args[1];
442
671
  }
672
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
443
673
  const self = this;
444
674
  if (isNode) {
445
675
  this.nativeServer = http.createServer((req, res) => {
@@ -454,11 +684,19 @@ var init_http = __esm({
454
684
  this.nativeServer.on("upgrade", (req, socket, head) => {
455
685
  self.emit("upgrade", req, socket, head);
456
686
  });
457
- this.nativeServer.listen(port, hostname, () => {
458
- this._listening = true;
459
- this.emit("listening");
460
- if (callback) callback();
461
- });
687
+ if (fd !== void 0) {
688
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
689
+ this._listening = true;
690
+ this.emit("listening");
691
+ if (callback) callback();
692
+ });
693
+ } else {
694
+ this.nativeServer.listen(port, hostname, () => {
695
+ this._listening = true;
696
+ this.emit("listening");
697
+ if (callback) callback();
698
+ });
699
+ }
462
700
  this.nativeServer.on("error", (err) => this.emit("error", err));
463
701
  this.nativeServer.on("close", () => {
464
702
  this._listening = false;
@@ -483,6 +721,8 @@ var init_http = __esm({
483
721
  const urlObj = new URL(req.url);
484
722
  const pathname = urlObj.pathname;
485
723
  const requestUrl = urlObj.pathname + urlObj.search;
724
+ const incomingHeaders = headersToRecord(req.headers);
725
+ const rawHeaders = headersToRawHeaders(req.headers);
486
726
  const upgradeHeader = req.headers.get("upgrade");
487
727
  if (upgradeHeader && upgradeHeader.toLowerCase() === "websocket") {
488
728
  const matchingWebSocketServer = Array.from(this._bunWebSocketServers).find((wsServer) => {
@@ -519,9 +759,9 @@ var init_http = __esm({
519
759
  const incomingMessage = {
520
760
  method: req.method,
521
761
  url: requestUrl,
522
- headers: req.headers,
762
+ headers: incomingHeaders,
523
763
  httpVersion: "1.1",
524
- rawHeaders: [],
764
+ rawHeaders,
525
765
  _req: req,
526
766
  text: () => req.text(),
527
767
  json: () => req.json()
@@ -575,57 +815,148 @@ var init_http = __esm({
575
815
  this.writeHead(statusCode);
576
816
  }
577
817
  responseReady = true;
578
- return this;
579
818
  }
580
819
  };
581
820
  if (self.requestListener) {
582
821
  self.requestListener(incomingMessage, serverResponse);
822
+ } else {
823
+ self.emit("request", incomingMessage, serverResponse);
583
824
  }
584
- if (responseReady) {
585
- return new Response(body, {
586
- status: statusCode,
587
- statusText: statusMessage,
588
- headers
589
- });
825
+ if (!responseReady) {
826
+ serverResponse.end();
590
827
  }
591
- return new Promise((resolve) => {
592
- serverResponse.end = (chunk) => {
593
- if (chunk !== void 0) {
594
- body += chunk;
595
- }
596
- resolve(new Response(body, {
597
- status: statusCode,
598
- statusText: statusMessage,
599
- headers
600
- }));
601
- };
828
+ return new Response(body, {
829
+ status: statusCode,
830
+ statusText: statusMessage,
831
+ headers
602
832
  });
603
833
  },
604
- error: createErrorResponse
834
+ error: (err) => {
835
+ this.emit("error", err);
836
+ return createErrorResponse();
837
+ }
605
838
  });
839
+ this._listening = true;
606
840
  emitListeningWithCallback(this, callback);
841
+ this.nativeServer.stop = this.nativeServer.stop || this.nativeServer.close;
842
+ this.nativeServer.close = this.nativeServer.close || this.nativeServer.stop;
843
+ this.nativeServer.on?.("close", () => {
844
+ this._listening = false;
845
+ this.emit("close");
846
+ });
607
847
  } else if (isDeno) {
848
+ const server = this;
608
849
  this.nativeServer = Deno.serve({
609
850
  port,
610
- hostname,
611
- handler: (req) => {
612
- return new Promise((resolve) => {
613
- const incomingMessage = new IncomingMessage(req);
614
- const serverResponse = new ServerResponse();
615
- serverResponse._setResolver(resolve);
616
- if (self.requestListener) {
617
- self.requestListener(incomingMessage, serverResponse);
618
- } else {
619
- self.emit("request", incomingMessage, serverResponse);
851
+ hostname
852
+ }, async (req) => {
853
+ const urlObj = new URL(req.url);
854
+ const requestUrl = urlObj.pathname + urlObj.search;
855
+ const incomingHeaders = headersToRecord(req.headers);
856
+ const rawHeaders = headersToRawHeaders(req.headers);
857
+ const bodyChunks = [];
858
+ const responseHeaders = new Headers();
859
+ let statusCode = 200;
860
+ let statusText = "OK";
861
+ let responseClosed = false;
862
+ const incomingMessage = {
863
+ method: req.method,
864
+ url: requestUrl,
865
+ headers: incomingHeaders,
866
+ httpVersion: "1.1",
867
+ rawHeaders,
868
+ _req: req,
869
+ text: () => req.text(),
870
+ json: () => req.json()
871
+ };
872
+ const serverResponse = {
873
+ statusCode: 200,
874
+ statusMessage: "OK",
875
+ headersSent: false,
876
+ setHeader(name, value) {
877
+ responseHeaders.set(name, Array.isArray(value) ? value.join(", ") : String(value));
878
+ return this;
879
+ },
880
+ getHeader(name) {
881
+ return responseHeaders.get(name) ?? void 0;
882
+ },
883
+ getHeaders() {
884
+ const headers = {};
885
+ responseHeaders.forEach((value, key) => {
886
+ headers[key] = value;
887
+ });
888
+ return headers;
889
+ },
890
+ writeHead(status, arg2, arg3) {
891
+ statusCode = status;
892
+ this.statusCode = status;
893
+ this.headersSent = true;
894
+ if (typeof arg2 === "string") {
895
+ statusText = arg2;
896
+ this.statusMessage = arg2;
897
+ if (arg3) {
898
+ Object.entries(arg3).forEach(([key, value]) => {
899
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
900
+ });
901
+ }
902
+ } else if (arg2) {
903
+ Object.entries(arg2).forEach(([key, value]) => {
904
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
905
+ });
620
906
  }
621
- });
622
- },
623
- onError: (error) => {
624
- this.emit("error", error);
625
- return createErrorResponse();
907
+ return this;
908
+ },
909
+ write(chunk) {
910
+ if (!this.headersSent) {
911
+ this.writeHead(statusCode);
912
+ }
913
+ if (typeof chunk === "string") {
914
+ bodyChunks.push(new TextEncoder().encode(chunk));
915
+ } else if (chunk instanceof Uint8Array) {
916
+ bodyChunks.push(chunk);
917
+ } else if (chunk !== void 0 && chunk !== null) {
918
+ bodyChunks.push(new TextEncoder().encode(String(chunk)));
919
+ }
920
+ return true;
921
+ },
922
+ end(chunk) {
923
+ if (chunk !== void 0) {
924
+ this.write(chunk);
925
+ }
926
+ if (!this.headersSent) {
927
+ this.writeHead(statusCode);
928
+ }
929
+ responseClosed = true;
930
+ }
931
+ };
932
+ if (server.requestListener) {
933
+ server.requestListener(incomingMessage, serverResponse);
934
+ } else {
935
+ server.emit("request", incomingMessage, serverResponse);
626
936
  }
937
+ if (!responseClosed) {
938
+ serverResponse.end();
939
+ }
940
+ const body = bodyChunks.length === 0 ? void 0 : (() => {
941
+ const totalLength = bodyChunks.reduce((sum, chunk) => sum + chunk.length, 0);
942
+ const output = new ArrayBuffer(totalLength);
943
+ const combined = new Uint8Array(output);
944
+ let offset = 0;
945
+ for (const chunk of bodyChunks) {
946
+ combined.set(chunk, offset);
947
+ offset += chunk.length;
948
+ }
949
+ return output;
950
+ })();
951
+ return new Response(body, {
952
+ status: statusCode,
953
+ statusText,
954
+ headers: responseHeaders
955
+ });
627
956
  });
957
+ this._listening = true;
628
958
  emitListeningWithCallback(this, callback);
959
+ this.nativeServer.finished.then(() => closeAndEmit(this)).catch((err) => this.emit("error", err));
629
960
  }
630
961
  return this;
631
962
  }
@@ -654,9 +985,11 @@ var init_http = __esm({
654
985
  return createAddress(0, addr, "unix");
655
986
  }
656
987
  return addr;
657
- } else if (isBun) {
988
+ }
989
+ if (isBun) {
658
990
  return createAddress(this.nativeServer.port, this.nativeServer.hostname);
659
- } else if (isDeno) {
991
+ }
992
+ if (isDeno) {
660
993
  const addr = this.nativeServer.addr;
661
994
  return createAddress(addr.port, addr.hostname);
662
995
  }
@@ -666,42 +999,65 @@ var init_http = __esm({
666
999
  return this._listening;
667
1000
  }
668
1001
  };
669
- ClientRequest = class extends import_node_events.EventEmitter {
670
- constructor(_url, _options = {}) {
671
- super();
672
- }
673
- write(_chunk) {
674
- return true;
675
- }
676
- end(callback) {
677
- queueCallback(callback);
678
- }
679
- };
680
- Agent = class {
681
- constructor(options) {
682
- this.options = options;
683
- }
684
- };
685
- http_default = {
686
- createServer,
687
- request,
688
- get,
689
- Server,
690
- IncomingMessage,
691
- ServerResponse,
692
- Agent,
693
- ClientRequest,
694
- METHODS,
695
- STATUS_CODES,
696
- getRuntime
697
- };
698
1002
  }
699
1003
  });
700
1004
 
701
- // src/wss.ts
702
- var wss_exports = {};
703
- __export(wss_exports, {
704
- CLOSE_CODES: () => CLOSE_CODES,
1005
+ // src/server/http/index.ts
1006
+ var http_exports = {};
1007
+ __export(http_exports, {
1008
+ Agent: () => Agent,
1009
+ ClientRequest: () => ClientRequest,
1010
+ IncomingMessage: () => IncomingMessage,
1011
+ METHODS: () => METHODS,
1012
+ STATUS_CODES: () => STATUS_CODES,
1013
+ Server: () => Server,
1014
+ ServerResponse: () => ServerResponse,
1015
+ createServer: () => createServer,
1016
+ default: () => http_default,
1017
+ get: () => get,
1018
+ getRuntime: () => getRuntime3,
1019
+ request: () => request
1020
+ });
1021
+ var http_default;
1022
+ var init_http = __esm({
1023
+ "src/server/http/index.ts"() {
1024
+ "use strict";
1025
+ init_agent();
1026
+ init_client_request();
1027
+ init_constants();
1028
+ init_incoming_message();
1029
+ init_request_api();
1030
+ init_response();
1031
+ init_runtime2();
1032
+ init_server_runtime();
1033
+ init_agent();
1034
+ init_client_request();
1035
+ init_constants();
1036
+ init_incoming_message();
1037
+ init_request_api();
1038
+ init_response();
1039
+ init_runtime2();
1040
+ init_server_runtime();
1041
+ http_default = {
1042
+ createServer,
1043
+ request,
1044
+ get,
1045
+ Server,
1046
+ IncomingMessage,
1047
+ ServerResponse,
1048
+ Agent,
1049
+ ClientRequest,
1050
+ METHODS,
1051
+ STATUS_CODES,
1052
+ getRuntime: getRuntime3
1053
+ };
1054
+ }
1055
+ });
1056
+
1057
+ // src/server/wss/index.ts
1058
+ var wss_exports = {};
1059
+ __export(wss_exports, {
1060
+ CLOSE_CODES: () => CLOSE_CODES,
705
1061
  ReadyState: () => ReadyState,
706
1062
  WSSClient: () => WSSClient,
707
1063
  WSSServer: () => WSSServer,
@@ -711,196 +1067,8 @@ __export(wss_exports, {
711
1067
  getRuntime: () => getRuntime2
712
1068
  });
713
1069
  module.exports = __toCommonJS(wss_exports);
714
- var import_events3 = require("events");
715
1070
 
716
- // src/https.ts
717
- var import_events = require("events");
718
- init_runtime();
719
- function queueCallback2(callback) {
720
- if (callback) queueMicrotask(callback);
721
- }
722
- function createErrorResponse2() {
723
- return new Response("Internal Server Error", { status: 500 });
724
- }
725
- function createAddress2(port, address, family = "IPv4") {
726
- return { port, family, address };
727
- }
728
- function emitListeningWithCallback2(server, callback) {
729
- server._listening = true;
730
- server.emit("listening");
731
- queueCallback2(callback);
732
- }
733
- function closeAndEmit2(server, callback) {
734
- server._listening = false;
735
- server.emit("close");
736
- if (callback) queueMicrotask(() => callback());
737
- }
738
- function loadHttpClasses() {
739
- const httpModule = (init_http(), __toCommonJS(http_exports));
740
- return {
741
- IncomingMessage: httpModule.IncomingMessage,
742
- ServerResponse: httpModule.ServerResponse
743
- };
744
- }
745
- var https2;
746
- var Server2 = class extends import_events.EventEmitter {
747
- constructor(options, requestListener) {
748
- super();
749
- this._listening = false;
750
- this.options = options;
751
- this.requestListener = requestListener;
752
- }
753
- listen(...args) {
754
- let port = 3e3;
755
- let hostname = "0.0.0.0";
756
- let callback;
757
- const firstArg = args[0];
758
- if (typeof firstArg === "number") {
759
- port = firstArg;
760
- const secondArg = args[1];
761
- if (typeof secondArg === "string") {
762
- hostname = secondArg;
763
- callback = args[2] || args[3];
764
- } else if (typeof secondArg === "function") {
765
- callback = secondArg;
766
- }
767
- } else if (firstArg && typeof firstArg === "object") {
768
- port = firstArg.port || 3e3;
769
- hostname = firstArg.hostname || "0.0.0.0";
770
- callback = args[1];
771
- }
772
- const self = this;
773
- if (isNode) {
774
- const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
775
- if (!https2) https2 = require("https");
776
- this.nativeServer = https2.createServer(this.options, (req, res) => {
777
- const incomingMessage = new IncomingMessage2(req);
778
- const serverResponse = new ServerResponse2(incomingMessage, res);
779
- if (self.requestListener) {
780
- self.requestListener(incomingMessage, serverResponse);
781
- } else {
782
- self.emit("request", incomingMessage, serverResponse);
783
- }
784
- });
785
- this.nativeServer.listen(port, hostname, () => {
786
- this._listening = true;
787
- this.emit("listening");
788
- if (callback) callback();
789
- });
790
- this.nativeServer.on("error", (err) => this.emit("error", err));
791
- this.nativeServer.on("close", () => {
792
- this._listening = false;
793
- this.emit("close");
794
- });
795
- } else if (isBun) {
796
- const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
797
- const tlsOptions = {
798
- port,
799
- hostname,
800
- fetch: (req) => {
801
- return new Promise((resolve) => {
802
- const incomingMessage = new IncomingMessage2(req);
803
- const serverResponse = new ServerResponse2();
804
- serverResponse._setResolver(resolve);
805
- if (self.requestListener) {
806
- self.requestListener(incomingMessage, serverResponse);
807
- } else {
808
- self.emit("request", incomingMessage, serverResponse);
809
- }
810
- });
811
- },
812
- error: (error) => {
813
- this.emit("error", error);
814
- return createErrorResponse2();
815
- }
816
- };
817
- if (this.options.key || this.options.cert) {
818
- tlsOptions.tls = {
819
- key: this.options.key,
820
- cert: this.options.cert,
821
- ca: this.options.ca,
822
- passphrase: this.options.passphrase
823
- };
824
- } else if (this.options.tls) {
825
- tlsOptions.tls = this.options.tls;
826
- }
827
- this.nativeServer = Bun.serve(tlsOptions);
828
- emitListeningWithCallback2(this, callback);
829
- } else if (isDeno) {
830
- const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
831
- const serveOptions = {
832
- port,
833
- hostname,
834
- handler: (req) => {
835
- return new Promise((resolve) => {
836
- const incomingMessage = new IncomingMessage2(req);
837
- const serverResponse = new ServerResponse2();
838
- serverResponse._setResolver(resolve);
839
- if (self.requestListener) {
840
- self.requestListener(incomingMessage, serverResponse);
841
- } else {
842
- self.emit("request", incomingMessage, serverResponse);
843
- }
844
- });
845
- },
846
- onError: (error) => {
847
- this.emit("error", error);
848
- return createErrorResponse2();
849
- }
850
- };
851
- if (this.options.key && this.options.cert) {
852
- serveOptions.cert = this.options.cert;
853
- serveOptions.key = this.options.key;
854
- }
855
- this.nativeServer = Deno.serve(serveOptions);
856
- emitListeningWithCallback2(this, callback);
857
- }
858
- return this;
859
- }
860
- close(callback) {
861
- if (!this.nativeServer) {
862
- if (callback) queueMicrotask(() => callback());
863
- return this;
864
- }
865
- if (isNode) {
866
- this.nativeServer.close(callback);
867
- } else if (isBun) {
868
- this.nativeServer.stop();
869
- closeAndEmit2(this, callback);
870
- } else if (isDeno) {
871
- this.nativeServer.shutdown();
872
- closeAndEmit2(this, callback);
873
- }
874
- return this;
875
- }
876
- address() {
877
- if (!this.nativeServer) return null;
878
- if (isNode) {
879
- const addr = this.nativeServer.address();
880
- if (!addr) return null;
881
- if (typeof addr === "string") {
882
- return createAddress2(0, addr, "unix");
883
- }
884
- return addr;
885
- } else if (isBun) {
886
- return createAddress2(this.nativeServer.port, this.nativeServer.hostname);
887
- } else if (isDeno) {
888
- const addr = this.nativeServer.addr;
889
- return createAddress2(addr.port, addr.hostname);
890
- }
891
- return null;
892
- }
893
- get listening() {
894
- return this._listening;
895
- }
896
- };
897
- function createServer2(options, requestListener) {
898
- return new Server2(options, requestListener);
899
- }
900
-
901
- // src/ws.ts
902
- var import_events2 = require("events");
903
- init_runtime();
1071
+ // src/server/ws/constants.ts
904
1072
  var ReadyState = /* @__PURE__ */ ((ReadyState2) => {
905
1073
  ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
906
1074
  ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
@@ -925,7 +1093,14 @@ var CLOSE_CODES = {
925
1093
  BAD_GATEWAY: 1014,
926
1094
  TLS_HANDSHAKE_FAIL: 1015
927
1095
  };
928
- function queueCallback3(callback, error) {
1096
+
1097
+ // src/server/ws/server.ts
1098
+ var import_events2 = require("events");
1099
+ init_runtime();
1100
+
1101
+ // src/server/ws/utils.ts
1102
+ init_runtime();
1103
+ function queueCallback(callback, error) {
929
1104
  if (callback) {
930
1105
  queueMicrotask(() => callback(error));
931
1106
  }
@@ -940,7 +1115,74 @@ function getRequestPath(url) {
940
1115
  const [pathname = "/"] = (url || "/").split("?");
941
1116
  return pathname || "/";
942
1117
  }
943
- var WebSocket = class extends import_events2.EventEmitter {
1118
+ function isIgnorableConnectionError(error) {
1119
+ const errorCode = error?.code;
1120
+ return errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE";
1121
+ }
1122
+ function coerceBunMessage(message) {
1123
+ const isBinary = typeof message !== "string";
1124
+ 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));
1125
+ return { payload, isBinary };
1126
+ }
1127
+ function parseFrame(data) {
1128
+ if (data.length < 2) {
1129
+ return null;
1130
+ }
1131
+ const firstByte = data[0];
1132
+ const secondByte = data[1];
1133
+ const opcode = firstByte & 15;
1134
+ const isMasked = (secondByte & 128) === 128;
1135
+ let payloadLength = secondByte & 127;
1136
+ let offset = 2;
1137
+ if (payloadLength === 126) {
1138
+ payloadLength = data.readUInt16BE(2);
1139
+ offset = 4;
1140
+ } else if (payloadLength === 127) {
1141
+ payloadLength = Number(data.readBigUInt64BE(2));
1142
+ offset = 10;
1143
+ }
1144
+ let payload = data.subarray(offset);
1145
+ if (isMasked) {
1146
+ const maskKey = data.subarray(offset, offset + 4);
1147
+ payload = data.subarray(offset + 4, offset + 4 + payloadLength);
1148
+ for (let index = 0; index < payload.length; index += 1) {
1149
+ payload[index] ^= maskKey[index % 4];
1150
+ }
1151
+ }
1152
+ if (opcode === 1) {
1153
+ return payload.toString("utf8");
1154
+ }
1155
+ return null;
1156
+ }
1157
+ function createFrame(data) {
1158
+ const payload = typeof data === "string" ? Buffer.from(data) : data;
1159
+ const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
1160
+ let frame;
1161
+ let offset = 2;
1162
+ if (payloadLength < 126) {
1163
+ frame = Buffer.allocUnsafe(2 + payloadLength);
1164
+ frame[1] = payloadLength;
1165
+ } else if (payloadLength < 65536) {
1166
+ frame = Buffer.allocUnsafe(4 + payloadLength);
1167
+ frame[1] = 126;
1168
+ frame.writeUInt16BE(payloadLength, 2);
1169
+ offset = 4;
1170
+ } else {
1171
+ frame = Buffer.allocUnsafe(10 + payloadLength);
1172
+ frame[1] = 127;
1173
+ frame.writeBigUInt64BE(BigInt(payloadLength), 2);
1174
+ offset = 10;
1175
+ }
1176
+ frame[0] = 129;
1177
+ if (Buffer.isBuffer(payload)) {
1178
+ payload.copy(frame, offset);
1179
+ }
1180
+ return frame;
1181
+ }
1182
+
1183
+ // src/server/ws/websocket.ts
1184
+ var import_events = require("events");
1185
+ var WebSocket = class extends import_events.EventEmitter {
944
1186
  constructor(address, protocols, _options) {
945
1187
  super();
946
1188
  this.readyState = 0 /* CONNECTING */;
@@ -970,22 +1212,23 @@ var WebSocket = class extends import_events2.EventEmitter {
970
1212
  };
971
1213
  }
972
1214
  /**
973
- * Send data through WebSocket
1215
+ * Send data through WebSocket.
974
1216
  */
975
1217
  send(data, options, callback) {
976
1218
  const cb = typeof options === "function" ? options : callback;
977
1219
  if (this.readyState !== 1 /* OPEN */) {
978
- return queueCallback3(cb, new Error("WebSocket is not open"));
1220
+ queueCallback(cb, new Error("WebSocket is not open"));
1221
+ return;
979
1222
  }
980
1223
  try {
981
1224
  this._socket.send(data);
982
- queueCallback3(cb);
1225
+ queueCallback(cb);
983
1226
  } catch (error) {
984
- queueCallback3(cb, error);
1227
+ queueCallback(cb, error);
985
1228
  }
986
1229
  }
987
1230
  /**
988
- * Close the WebSocket connection
1231
+ * Close the WebSocket connection.
989
1232
  */
990
1233
  close(code, reason) {
991
1234
  if (this.readyState === 3 /* CLOSED */ || this.readyState === 2 /* CLOSING */) {
@@ -995,41 +1238,43 @@ var WebSocket = class extends import_events2.EventEmitter {
995
1238
  this._socket.close(code, typeof reason === "string" ? reason : reason?.toString());
996
1239
  }
997
1240
  /**
998
- * Pause the socket (no-op for native WebSocket)
1241
+ * Pause the socket (no-op for native WebSocket).
999
1242
  */
1000
1243
  pause() {
1001
1244
  }
1002
1245
  /**
1003
- * Resume the socket (no-op for native WebSocket)
1246
+ * Resume the socket (no-op for native WebSocket).
1004
1247
  */
1005
1248
  resume() {
1006
1249
  }
1007
1250
  /**
1008
- * Send a ping frame (no-op for native WebSocket)
1251
+ * Send a ping frame (no-op for native WebSocket).
1009
1252
  */
1010
1253
  ping(_data, _mask, callback) {
1011
- queueCallback3(callback);
1254
+ queueCallback(callback);
1012
1255
  }
1013
1256
  /**
1014
- * Send a pong frame (no-op for native WebSocket)
1257
+ * Send a pong frame (no-op for native WebSocket).
1015
1258
  */
1016
1259
  pong(_data, _mask, callback) {
1017
- queueCallback3(callback);
1260
+ queueCallback(callback);
1018
1261
  }
1019
1262
  /**
1020
- * Terminate the connection
1263
+ * Terminate the connection.
1021
1264
  */
1022
1265
  terminate() {
1023
1266
  this._socket.close();
1024
1267
  this.readyState = 3 /* CLOSED */;
1025
1268
  }
1026
1269
  /**
1027
- * Get buffered amount
1270
+ * Get buffered amount.
1028
1271
  */
1029
1272
  get bufferedAmount() {
1030
1273
  return this._socket.bufferedAmount || 0;
1031
1274
  }
1032
1275
  };
1276
+
1277
+ // src/server/ws/server.ts
1033
1278
  var WebSocketServer = class extends import_events2.EventEmitter {
1034
1279
  constructor(options, callback) {
1035
1280
  super();
@@ -1041,8 +1286,7 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1041
1286
  if (options?.server) {
1042
1287
  this._httpServer = options.server;
1043
1288
  this._setupUpgradeHandler();
1044
- } else if (options?.noServer) {
1045
- } else {
1289
+ } else if (!options?.noServer) {
1046
1290
  const http2 = require("http");
1047
1291
  this._httpServer = http2.createServer();
1048
1292
  this._ownsHttpServer = true;
@@ -1056,30 +1300,30 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1056
1300
  this._httpServer = options.server;
1057
1301
  options.server.registerWebSocketServer(this);
1058
1302
  }
1059
- queueCallback3(callback);
1303
+ queueCallback(callback);
1060
1304
  } else {
1061
- queueCallback3(callback);
1305
+ queueCallback(callback);
1062
1306
  }
1063
1307
  }
1064
1308
  _setupUpgradeHandler() {
1065
- this._httpServer.on("upgrade", (request2, socket, head) => {
1066
- const requestPath = getRequestPath(request2.url);
1309
+ this._httpServer.on("upgrade", (request3, socket, head) => {
1310
+ const requestPath = getRequestPath(request3.url);
1067
1311
  console.log("[WebSocket] Upgrade request:", requestPath, "Expected:", this.path || "(any)");
1068
1312
  if (this.path && requestPath !== this.path) {
1069
1313
  console.log("[WebSocket] Path mismatch, ignoring");
1070
1314
  return;
1071
1315
  }
1072
- this.handleUpgrade(request2, socket, head, (client) => {
1316
+ this.handleUpgrade(request3, socket, head, (client) => {
1073
1317
  console.log("[WebSocket] Client connected");
1074
- this.emit("connection", client, request2);
1318
+ this.emit("connection", client, request3);
1075
1319
  });
1076
1320
  });
1077
1321
  }
1078
1322
  /**
1079
- * Handle HTTP upgrade for WebSocket
1323
+ * Handle HTTP upgrade for WebSocket.
1080
1324
  */
1081
- handleUpgrade(request2, socket, _head, callback) {
1082
- const key = request2.headers["sec-websocket-key"];
1325
+ handleUpgrade(request3, socket, _head, callback) {
1326
+ const key = request3.headers["sec-websocket-key"];
1083
1327
  if (!key) {
1084
1328
  socket.end("HTTP/1.1 400 Bad Request\r\n\r\n");
1085
1329
  return;
@@ -1115,7 +1359,7 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1115
1359
  client._socket = socket;
1116
1360
  socket.on("data", (data) => {
1117
1361
  try {
1118
- const message = this._parseFrame(data);
1362
+ const message = parseFrame(data);
1119
1363
  if (message) {
1120
1364
  client.emit("message", message, false);
1121
1365
  }
@@ -1128,36 +1372,34 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1128
1372
  client.emit("close", CLOSE_CODES.NORMAL, "");
1129
1373
  });
1130
1374
  socket.on("error", (error) => {
1131
- const errorCode = error.code;
1132
- if (errorCode === "ECONNABORTED" || errorCode === "ECONNRESET" || errorCode === "EPIPE") {
1375
+ if (isIgnorableConnectionError(error)) {
1133
1376
  return;
1134
1377
  }
1135
1378
  client.emit("error", error);
1136
1379
  });
1137
1380
  client.send = (data, _options, callback) => {
1138
1381
  if (!socket.writable || client.readyState !== 1 /* OPEN */) {
1139
- const err = new Error("WebSocket is not open");
1140
- err.code = "WS_NOT_OPEN";
1141
- queueCallback3(callback, err);
1382
+ const error = new Error("WebSocket is not open");
1383
+ error.code = "WS_NOT_OPEN";
1384
+ queueCallback(callback, error);
1142
1385
  return;
1143
1386
  }
1144
1387
  try {
1145
- const frame = this._createFrame(data);
1146
- socket.write(frame, (err) => {
1147
- if (err) {
1148
- const errorCode = err.code;
1149
- if (errorCode !== "ECONNABORTED" && errorCode !== "ECONNRESET" && errorCode !== "EPIPE") {
1150
- queueCallback3(callback, err);
1151
- } else {
1152
- client.readyState = 3 /* CLOSED */;
1153
- queueCallback3(callback);
1154
- }
1155
- } else {
1156
- queueCallback3(callback);
1388
+ const frame = createFrame(data);
1389
+ socket.write(frame, (error) => {
1390
+ if (!error) {
1391
+ queueCallback(callback);
1392
+ return;
1393
+ }
1394
+ if (isIgnorableConnectionError(error)) {
1395
+ client.readyState = 3 /* CLOSED */;
1396
+ queueCallback(callback);
1397
+ return;
1157
1398
  }
1399
+ queueCallback(callback, error);
1158
1400
  });
1159
1401
  } catch (error) {
1160
- queueCallback3(callback, error);
1402
+ queueCallback(callback, error);
1161
1403
  }
1162
1404
  };
1163
1405
  client.close = (_code, _reason) => {
@@ -1177,14 +1419,14 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1177
1419
  client._socket = socket;
1178
1420
  client.send = (data, _options, callback) => {
1179
1421
  if (client.readyState !== 1 /* OPEN */) {
1180
- queueCallback3(callback, new Error("WebSocket is not open"));
1422
+ queueCallback(callback, new Error("WebSocket is not open"));
1181
1423
  return;
1182
1424
  }
1183
1425
  try {
1184
1426
  socket.send(data);
1185
- queueCallback3(callback);
1427
+ queueCallback(callback);
1186
1428
  } catch (error) {
1187
- queueCallback3(callback, error);
1429
+ queueCallback(callback, error);
1188
1430
  }
1189
1431
  };
1190
1432
  client.close = (code, reason) => {
@@ -1192,7 +1434,7 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1192
1434
  return;
1193
1435
  }
1194
1436
  client.readyState = 2 /* CLOSING */;
1195
- socket.close(code ?? CLOSE_CODES.NORMAL, reason);
1437
+ socket.close(code ?? CLOSE_CODES.NORMAL, typeof reason === "string" ? reason : reason?.toString());
1196
1438
  };
1197
1439
  client.terminate = () => {
1198
1440
  socket.close();
@@ -1200,7 +1442,7 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1200
1442
  };
1201
1443
  return client;
1202
1444
  }
1203
- _handleBunOpen(socket, request2 = {}) {
1445
+ _handleBunOpen(socket, request3 = {}) {
1204
1446
  const client = this._createClientFromBunSocket(socket);
1205
1447
  if (socket.data) {
1206
1448
  socket.data.client = client;
@@ -1212,9 +1454,9 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1212
1454
  });
1213
1455
  }
1214
1456
  const incomingRequest = {
1215
- url: request2.url || this.path,
1216
- headers: request2.headers || {},
1217
- socket: request2.socket || { remoteAddress: void 0 }
1457
+ url: request3.url || this.path,
1458
+ headers: request3.headers || {},
1459
+ socket: request3.socket || { remoteAddress: void 0 }
1218
1460
  };
1219
1461
  this.emit("connection", client, incomingRequest);
1220
1462
  }
@@ -1223,8 +1465,7 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1223
1465
  if (!client) {
1224
1466
  return;
1225
1467
  }
1226
- const isBinary = typeof message !== "string";
1227
- 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));
1468
+ const { payload, isBinary } = coerceBunMessage(message);
1228
1469
  client.emit("message", payload, isBinary);
1229
1470
  }
1230
1471
  _handleBunClose(socket, code, reason) {
@@ -1236,98 +1477,290 @@ var WebSocketServer = class extends import_events2.EventEmitter {
1236
1477
  client.emit("close", code, typeof reason === "string" ? reason : reason?.toString() || "");
1237
1478
  this.clients.delete(client);
1238
1479
  }
1239
- _parseFrame(data) {
1240
- if (data.length < 2) return null;
1241
- const firstByte = data[0];
1242
- const secondByte = data[1];
1243
- const opcode = firstByte & 15;
1244
- const isMasked = (secondByte & 128) === 128;
1245
- let payloadLength = secondByte & 127;
1246
- let offset = 2;
1247
- if (payloadLength === 126) {
1248
- payloadLength = data.readUInt16BE(2);
1249
- offset = 4;
1250
- } else if (payloadLength === 127) {
1251
- payloadLength = Number(data.readBigUInt64BE(2));
1252
- offset = 10;
1253
- }
1254
- let payload = data.subarray(offset);
1255
- if (isMasked) {
1256
- const maskKey = data.subarray(offset, offset + 4);
1257
- payload = data.subarray(offset + 4, offset + 4 + payloadLength);
1258
- for (let i = 0; i < payload.length; i++) {
1259
- payload[i] ^= maskKey[i % 4];
1260
- }
1261
- }
1262
- if (opcode === 1) {
1263
- return payload.toString("utf8");
1264
- }
1265
- return null;
1266
- }
1267
- _createFrame(data) {
1268
- const payload = typeof data === "string" ? Buffer.from(data) : data;
1269
- const payloadLength = Buffer.isBuffer(payload) ? payload.length : 0;
1270
- let frame;
1271
- let offset = 2;
1272
- if (payloadLength < 126) {
1273
- frame = Buffer.allocUnsafe(2 + payloadLength);
1274
- frame[1] = payloadLength;
1275
- } else if (payloadLength < 65536) {
1276
- frame = Buffer.allocUnsafe(4 + payloadLength);
1277
- frame[1] = 126;
1278
- frame.writeUInt16BE(payloadLength, 2);
1279
- offset = 4;
1280
- } else {
1281
- frame = Buffer.allocUnsafe(10 + payloadLength);
1282
- frame[1] = 127;
1283
- frame.writeBigUInt64BE(BigInt(payloadLength), 2);
1284
- offset = 10;
1285
- }
1286
- frame[0] = 129;
1287
- if (Buffer.isBuffer(payload)) {
1288
- payload.copy(frame, offset);
1289
- }
1290
- return frame;
1291
- }
1292
1480
  /**
1293
- * Close the server
1481
+ * Close the server.
1294
1482
  */
1295
1483
  close(callback) {
1296
1484
  this.clients.forEach((client) => client.close());
1297
1485
  this.clients.clear();
1298
1486
  if (this._httpServer && this._ownsHttpServer) {
1299
1487
  this._httpServer.close(callback);
1300
- } else {
1301
- if (runtime === "bun" && this._httpServer?.unregisterWebSocketServer) {
1302
- this._httpServer.unregisterWebSocketServer(this);
1303
- }
1304
- this.emit("close");
1305
- queueCallback3(callback);
1488
+ return;
1489
+ }
1490
+ if (runtime === "bun" && this._httpServer?.unregisterWebSocketServer) {
1491
+ this._httpServer.unregisterWebSocketServer(this);
1306
1492
  }
1493
+ this.emit("close");
1494
+ queueCallback(callback);
1307
1495
  }
1308
1496
  /**
1309
- * Check if server should handle request
1497
+ * Check if server should handle request.
1310
1498
  */
1311
- shouldHandle(request2) {
1312
- if (this.path && getRequestPath(request2.url) !== this.path) {
1499
+ shouldHandle(request3) {
1500
+ if (this.path && getRequestPath(request3.url) !== this.path) {
1313
1501
  return false;
1314
1502
  }
1315
1503
  return true;
1316
1504
  }
1317
1505
  /**
1318
- * Get server address
1506
+ * Get server address.
1319
1507
  */
1320
1508
  address() {
1321
- if (this._httpServer && this._httpServer.address) {
1509
+ if (this._httpServer?.address) {
1322
1510
  return this._httpServer.address();
1323
1511
  }
1324
1512
  return null;
1325
1513
  }
1326
1514
  };
1327
1515
 
1328
- // src/wss.ts
1516
+ // src/server/ws/runtime.ts
1517
+ init_runtime();
1518
+
1519
+ // src/server/wss/client.ts
1520
+ var WSSClient = class extends WebSocket {
1521
+ constructor(address, protocols, options) {
1522
+ const urlString = typeof address === "string" ? address : address.toString();
1523
+ const secureUrl = urlString.replace(/^ws:\/\//i, "wss://");
1524
+ super(secureUrl, protocols, options);
1525
+ }
1526
+ };
1527
+ function createWSSClient(address, protocols, options) {
1528
+ return new WSSClient(address, protocols, options);
1529
+ }
1530
+
1531
+ // src/server/wss/runtime.ts
1532
+ init_runtime();
1533
+ function getRuntime2() {
1534
+ return runtime;
1535
+ }
1536
+
1537
+ // src/server/wss/server.ts
1538
+ var import_events3 = require("events");
1539
+
1540
+ // src/server/https/client-request.ts
1541
+ var import_node_events = require("events");
1542
+ init_utils();
1543
+
1544
+ // src/server/https/request-api.ts
1545
+ init_runtime();
1546
+
1547
+ // src/server/https/http-classes.ts
1548
+ function loadHttpClasses() {
1549
+ const httpModule = (init_http(), __toCommonJS(http_exports));
1550
+ return {
1551
+ IncomingMessage: httpModule.IncomingMessage,
1552
+ ServerResponse: httpModule.ServerResponse
1553
+ };
1554
+ }
1555
+
1556
+ // src/server/https/node-modules.ts
1557
+ init_runtime();
1558
+ var https2;
1559
+ if (isNode && typeof process !== "undefined") {
1560
+ try {
1561
+ https2 = require("https");
1562
+ } catch {
1563
+ https2 = require("https");
1564
+ }
1565
+ }
1566
+
1567
+ // src/server/https/runtime.ts
1568
+ init_runtime();
1569
+
1570
+ // src/server/https/server-runtime.ts
1571
+ var import_node_events6 = require("events");
1572
+ init_runtime();
1573
+ init_utils();
1574
+ var Server2 = class extends import_node_events6.EventEmitter {
1575
+ constructor(options = {}, requestListener) {
1576
+ super();
1577
+ this._listening = false;
1578
+ this.options = options;
1579
+ this.requestListener = requestListener;
1580
+ }
1581
+ resolvePmInheritedFd(explicitPort, explicitFd) {
1582
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
1583
+ return explicitFd;
1584
+ }
1585
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
1586
+ if (!fdValue) {
1587
+ return void 0;
1588
+ }
1589
+ const parsedFd = Number.parseInt(fdValue, 10);
1590
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
1591
+ return void 0;
1592
+ }
1593
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
1594
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
1595
+ return void 0;
1596
+ }
1597
+ return parsedFd;
1598
+ }
1599
+ listen(...args) {
1600
+ let port = 3e3;
1601
+ let hostname = "0.0.0.0";
1602
+ let fd;
1603
+ let callback;
1604
+ const firstArg = args[0];
1605
+ if (typeof firstArg === "number") {
1606
+ port = firstArg;
1607
+ const secondArg = args[1];
1608
+ if (typeof secondArg === "string") {
1609
+ hostname = secondArg;
1610
+ callback = args[2] || args[3];
1611
+ } else if (typeof secondArg === "function") {
1612
+ callback = secondArg;
1613
+ }
1614
+ } else if (firstArg && typeof firstArg === "object") {
1615
+ port = firstArg.port || 3e3;
1616
+ hostname = firstArg.hostname || "0.0.0.0";
1617
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
1618
+ callback = args[1];
1619
+ }
1620
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
1621
+ const self = this;
1622
+ if (isNode) {
1623
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1624
+ this.nativeServer = https2.createServer(this.options, (req, res) => {
1625
+ const incomingMessage = new IncomingMessage2(req);
1626
+ const serverResponse = new ServerResponse2(incomingMessage, res);
1627
+ if (self.requestListener) {
1628
+ self.requestListener(incomingMessage, serverResponse);
1629
+ } else {
1630
+ self.emit("request", incomingMessage, serverResponse);
1631
+ }
1632
+ });
1633
+ if (fd !== void 0) {
1634
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
1635
+ this._listening = true;
1636
+ this.emit("listening");
1637
+ if (callback) callback();
1638
+ });
1639
+ } else {
1640
+ this.nativeServer.listen(port, hostname, () => {
1641
+ this._listening = true;
1642
+ this.emit("listening");
1643
+ if (callback) callback();
1644
+ });
1645
+ }
1646
+ this.nativeServer.on("error", (err) => this.emit("error", err));
1647
+ this.nativeServer.on("close", () => {
1648
+ this._listening = false;
1649
+ this.emit("close");
1650
+ });
1651
+ } else if (isBun) {
1652
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1653
+ const tlsOptions = {
1654
+ port,
1655
+ hostname,
1656
+ fetch: (req) => {
1657
+ return new Promise((resolve) => {
1658
+ const incomingMessage = new IncomingMessage2(req);
1659
+ const serverResponse = new ServerResponse2();
1660
+ serverResponse._setResolver(resolve);
1661
+ if (self.requestListener) {
1662
+ self.requestListener(incomingMessage, serverResponse);
1663
+ } else {
1664
+ self.emit("request", incomingMessage, serverResponse);
1665
+ }
1666
+ });
1667
+ },
1668
+ error: (error) => {
1669
+ this.emit("error", error);
1670
+ return createErrorResponse();
1671
+ }
1672
+ };
1673
+ if (this.options.key || this.options.cert) {
1674
+ tlsOptions.tls = {
1675
+ key: this.options.key,
1676
+ cert: this.options.cert,
1677
+ ca: this.options.ca,
1678
+ passphrase: this.options.passphrase
1679
+ };
1680
+ } else if (this.options.tls) {
1681
+ tlsOptions.tls = this.options.tls;
1682
+ }
1683
+ this.nativeServer = Bun.serve(tlsOptions);
1684
+ emitListeningWithCallback(this, callback);
1685
+ } else if (isDeno) {
1686
+ const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
1687
+ const serveOptions = {
1688
+ port,
1689
+ hostname,
1690
+ handler: (req) => {
1691
+ return new Promise((resolve) => {
1692
+ const incomingMessage = new IncomingMessage2(req);
1693
+ const serverResponse = new ServerResponse2();
1694
+ serverResponse._setResolver(resolve);
1695
+ if (self.requestListener) {
1696
+ self.requestListener(incomingMessage, serverResponse);
1697
+ } else {
1698
+ self.emit("request", incomingMessage, serverResponse);
1699
+ }
1700
+ });
1701
+ },
1702
+ onError: (error) => {
1703
+ this.emit("error", error);
1704
+ return createErrorResponse();
1705
+ }
1706
+ };
1707
+ if (this.options.key && this.options.cert) {
1708
+ serveOptions.cert = this.options.cert;
1709
+ serveOptions.key = this.options.key;
1710
+ }
1711
+ this.nativeServer = Deno.serve(serveOptions);
1712
+ emitListeningWithCallback(this, callback);
1713
+ }
1714
+ return this;
1715
+ }
1716
+ close(callback) {
1717
+ if (!this.nativeServer) {
1718
+ if (callback) queueCallback2(() => callback());
1719
+ return this;
1720
+ }
1721
+ if (isNode) {
1722
+ this.nativeServer.close(callback);
1723
+ } else if (isBun) {
1724
+ this.nativeServer.stop();
1725
+ closeAndEmit(this, callback);
1726
+ } else if (isDeno) {
1727
+ this.nativeServer.shutdown();
1728
+ closeAndEmit(this, callback);
1729
+ }
1730
+ return this;
1731
+ }
1732
+ address() {
1733
+ if (!this.nativeServer) return null;
1734
+ if (isNode) {
1735
+ const addr = this.nativeServer.address();
1736
+ if (!addr) return null;
1737
+ if (typeof addr === "string") {
1738
+ return createAddress(0, addr, "unix");
1739
+ }
1740
+ return addr;
1741
+ }
1742
+ if (isBun) {
1743
+ return createAddress(this.nativeServer.port, this.nativeServer.hostname);
1744
+ }
1745
+ if (isDeno) {
1746
+ const addr = this.nativeServer.addr;
1747
+ return createAddress(addr.port, addr.hostname);
1748
+ }
1749
+ return null;
1750
+ }
1751
+ get listening() {
1752
+ return this._listening;
1753
+ }
1754
+ };
1755
+ function createServer2(options = {}, requestListener) {
1756
+ return new Server2(options, requestListener);
1757
+ }
1758
+
1759
+ // src/server/wss/server.ts
1329
1760
  init_runtime();
1330
- function queueCallback4(callback) {
1761
+
1762
+ // src/server/wss/utils.ts
1763
+ function queueCallback3(callback) {
1331
1764
  if (callback) {
1332
1765
  queueMicrotask(callback);
1333
1766
  }
@@ -1344,15 +1777,10 @@ function buildHttpsOptions(options) {
1344
1777
  }
1345
1778
  function emitCloseWithCallback(emitter, callback) {
1346
1779
  emitter.emit("close");
1347
- queueCallback4(callback);
1780
+ queueCallback3(callback);
1348
1781
  }
1349
- var WSSClient = class extends WebSocket {
1350
- constructor(address, protocols, options) {
1351
- const urlString = typeof address === "string" ? address : address.toString();
1352
- const secureUrl = urlString.replace(/^ws:\/\//i, "wss://");
1353
- super(secureUrl, protocols, options);
1354
- }
1355
- };
1782
+
1783
+ // src/server/wss/server.ts
1356
1784
  var WSSServer = class extends import_events3.EventEmitter {
1357
1785
  constructor(options, callback) {
1358
1786
  super();
@@ -1365,7 +1793,7 @@ var WSSServer = class extends import_events3.EventEmitter {
1365
1793
  this._setupServer(callback);
1366
1794
  } else if (options?.noServer) {
1367
1795
  this._wsServer = new WebSocketServer({ noServer: true });
1368
- queueCallback4(callback);
1796
+ queueCallback3(callback);
1369
1797
  } else {
1370
1798
  this._httpsServer = createServer2(buildHttpsOptions(options));
1371
1799
  this._setupServer(callback);
@@ -1375,7 +1803,7 @@ var WSSServer = class extends import_events3.EventEmitter {
1375
1803
  }
1376
1804
  } else {
1377
1805
  this._wsServer = new WebSocketServer(options);
1378
- queueCallback4(callback);
1806
+ queueCallback3(callback);
1379
1807
  }
1380
1808
  }
1381
1809
  _setupServer(callback) {
@@ -1384,44 +1812,44 @@ var WSSServer = class extends import_events3.EventEmitter {
1384
1812
  server: this._httpsServer,
1385
1813
  noServer: false
1386
1814
  });
1387
- this._wsServer.on("connection", (client, request2) => {
1815
+ this._wsServer.on("connection", (client, request3) => {
1388
1816
  if (this.options.clientTracking !== false) {
1389
1817
  this.clients.add(client);
1390
1818
  client.on("close", () => {
1391
1819
  this.clients.delete(client);
1392
1820
  });
1393
1821
  }
1394
- this.emit("connection", client, request2);
1822
+ this.emit("connection", client, request3);
1395
1823
  });
1396
1824
  this._wsServer.on("error", (error) => {
1397
1825
  this.emit("error", error);
1398
1826
  });
1399
1827
  if (!this.options?.port) {
1400
- queueCallback4(callback);
1828
+ queueCallback3(callback);
1401
1829
  }
1402
1830
  }
1403
1831
  /**
1404
- * Handle HTTP upgrade for WebSocket
1832
+ * Handle HTTP upgrade for WebSocket.
1405
1833
  */
1406
- handleUpgrade(request2, socket, head, callback) {
1834
+ handleUpgrade(request3, socket, head, callback) {
1407
1835
  if (this._wsServer) {
1408
- this._wsServer.handleUpgrade(request2, socket, head, callback);
1836
+ this._wsServer.handleUpgrade(request3, socket, head, callback);
1409
1837
  }
1410
1838
  }
1411
1839
  /**
1412
- * Check if server should handle request
1840
+ * Check if server should handle request.
1413
1841
  */
1414
- shouldHandle(request2) {
1842
+ shouldHandle(request3) {
1415
1843
  if (this._wsServer) {
1416
- return this._wsServer.shouldHandle(request2);
1844
+ return this._wsServer.shouldHandle(request3);
1417
1845
  }
1418
- if (this.path && request2.url !== this.path) {
1846
+ if (this.path && request3.url !== this.path) {
1419
1847
  return false;
1420
1848
  }
1421
1849
  return true;
1422
1850
  }
1423
1851
  /**
1424
- * Close the server
1852
+ * Close the server.
1425
1853
  */
1426
1854
  close(callback) {
1427
1855
  this.clients.forEach((client) => client.close());
@@ -1434,17 +1862,19 @@ var WSSServer = class extends import_events3.EventEmitter {
1434
1862
  emitCloseWithCallback(this, callback);
1435
1863
  }
1436
1864
  });
1437
- } else if (this._httpsServer) {
1865
+ return;
1866
+ }
1867
+ if (this._httpsServer) {
1438
1868
  this._httpsServer.close(callback);
1439
- } else {
1440
- emitCloseWithCallback(this, callback);
1869
+ return;
1441
1870
  }
1871
+ emitCloseWithCallback(this, callback);
1442
1872
  }
1443
1873
  /**
1444
- * Get server address
1874
+ * Get server address.
1445
1875
  */
1446
1876
  address() {
1447
- if (this._httpsServer && this._httpsServer.address) {
1877
+ if (this._httpsServer?.address) {
1448
1878
  return this._httpsServer.address();
1449
1879
  }
1450
1880
  if (this._wsServer) {
@@ -1453,15 +1883,11 @@ var WSSServer = class extends import_events3.EventEmitter {
1453
1883
  return null;
1454
1884
  }
1455
1885
  };
1456
- function createWSSClient(address, protocols, options) {
1457
- return new WSSClient(address, protocols, options);
1458
- }
1459
1886
  function createWSSServer(options, callback) {
1460
1887
  return new WSSServer(options, callback);
1461
1888
  }
1462
- function getRuntime2() {
1463
- return runtime;
1464
- }
1889
+
1890
+ // src/server/wss/index.ts
1465
1891
  var wss_default = {
1466
1892
  WSSClient,
1467
1893
  WSSServer,