elit 3.6.7 → 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 (42) hide show
  1. package/Cargo.lock +1 -1
  2. package/Cargo.toml +1 -1
  3. package/README.md +20 -1
  4. package/dist/cli.cjs +2496 -303
  5. package/dist/cli.mjs +2501 -308
  6. package/dist/config.d.ts +6 -6
  7. package/dist/{contracts-BeW9k0yZ.d.ts → contracts-_0p1-15U.d.ts} +1 -1
  8. package/dist/coverage.d.ts +1 -1
  9. package/dist/dev-build.d.ts +3 -3
  10. package/dist/http.cjs +160 -41
  11. package/dist/http.d.ts +5 -11
  12. package/dist/http.js +160 -41
  13. package/dist/http.mjs +160 -41
  14. package/dist/https.cjs +194 -46
  15. package/dist/https.d.ts +3 -6
  16. package/dist/https.js +194 -46
  17. package/dist/https.mjs +194 -46
  18. package/dist/pm-node-shared-listener-bootstrap.cjs +75 -0
  19. package/dist/pm.cjs +2101 -134
  20. package/dist/pm.d.ts +83 -8
  21. package/dist/pm.js +2095 -158
  22. package/dist/pm.mjs +2091 -139
  23. package/dist/preview-build.d.ts +3 -3
  24. package/dist/server.cjs +417 -168
  25. package/dist/server.d.ts +4 -4
  26. package/dist/server.js +453 -179
  27. package/dist/server.mjs +417 -168
  28. package/dist/smtp-server.js +37 -12
  29. package/dist/test-reporter.d.ts +1 -1
  30. package/dist/test-runtime.d.ts +1 -1
  31. package/dist/{types-tJn88E1N.d.ts → types-BayMVo_k.d.ts} +39 -3
  32. package/dist/{types-CIhpN1-K.d.ts → types-C70T-42Z.d.ts} +1 -1
  33. package/dist/{types-DAisuVr5.d.ts → types-DPOgoGs-.d.ts} +7 -1
  34. package/dist/{state-DvEkDehk.d.ts → types-fiLday0L.d.ts} +96 -92
  35. package/dist/types.d.ts +4 -0
  36. package/dist/{websocket-XfyK23zD.d.ts → websocket-BLBEAnhp.d.ts} +1 -1
  37. package/dist/ws.d.ts +3 -3
  38. package/dist/wss.cjs +194 -46
  39. package/dist/wss.d.ts +3 -3
  40. package/dist/wss.js +194 -46
  41. package/dist/wss.mjs +194 -46
  42. package/package.json +11 -6
package/dist/config.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { E as ElitConfig } from './types-tJn88E1N.js';
2
- export { D as DesktopConfig, a as DesktopMode, b as DesktopNativeConfig, M as MobileAndroidConfig, c as MobileConfig, d as MobileIosConfig, e as MobileMode, f as MobileNativeAndroidConfig, g as MobileNativeConfig, h as MobileNativeIosConfig, P as PmAppConfig, i as PmConfig, j as PmHealthCheckConfig, k as PmRestartPolicy, l as PmRuntimeName, W as WapkConfig, m as WapkGoogleDriveConfig, n as WapkLiveSyncConfig, o as WapkLockConfig, p as WapkRunConfig, q as defineConfig } from './types-tJn88E1N.js';
3
- import './state-DvEkDehk.js';
4
- import './types-DAisuVr5.js';
1
+ import { E as ElitConfig } from './types-BayMVo_k.js';
2
+ export { D as DesktopConfig, h as DesktopMode, i as DesktopNativeConfig, M as MobileAndroidConfig, j as MobileConfig, k as MobileIosConfig, l as MobileMode, m as MobileNativeAndroidConfig, n as MobileNativeConfig, o as MobileNativeIosConfig, g as PmAppConfig, f as PmConfig, p as PmHealthCheckConfig, d as PmMemoryAction, b as PmProxyConfig, a as PmProxyStrategy, c as PmRestartPolicy, P as PmRuntimeName, q as WapkConfig, e as WapkGoogleDriveConfig, r as WapkLiveSyncConfig, s as WapkLockConfig, W as WapkRunConfig, t as defineConfig } from './types-BayMVo_k.js';
3
+ import './types-fiLday0L.js';
4
+ import './types-DPOgoGs-.js';
5
5
  import 'node:events';
6
- import './websocket-XfyK23zD.js';
6
+ import './websocket-BLBEAnhp.js';
7
7
  import 'events';
8
8
  import 'http';
9
9
  import 'ws';
@@ -12,7 +12,7 @@ import './types-C4gKykuG.js';
12
12
  import 'net';
13
13
  import 'smtp-server';
14
14
  import './contracts-D7KIS-TK.js';
15
- import './contracts-BeW9k0yZ.js';
15
+ import './contracts-_0p1-15U.js';
16
16
 
17
17
  declare const ELIT_CONFIG_FILES: readonly ["elit.config.ts", "elit.config.mts", "elit.config.js", "elit.config.mjs", "elit.config.cjs", "elit.config.json"];
18
18
 
@@ -51,4 +51,4 @@ interface TestOptions {
51
51
  env?: Record<string, string>;
52
52
  }
53
53
 
54
- export type { TestCoverageReporter as T, TestOptions as a };
54
+ export type { TestOptions as T, TestCoverageReporter as a };
@@ -1,4 +1,4 @@
1
- import { T as TestCoverageReporter } from './contracts-BeW9k0yZ.js';
1
+ import { a as TestCoverageReporter } from './contracts-_0p1-15U.js';
2
2
 
3
3
  interface CoverageOptions {
4
4
  reportsDirectory: string;
@@ -1,7 +1,7 @@
1
- import { D as DevServerOptions } from './state-DvEkDehk.js';
2
- import './types-DAisuVr5.js';
1
+ import { D as DevServerOptions } from './types-fiLday0L.js';
2
+ import './types-DPOgoGs-.js';
3
3
  import 'node:events';
4
- import './websocket-XfyK23zD.js';
4
+ import './websocket-BLBEAnhp.js';
5
5
  import 'events';
6
6
  import 'http';
7
7
  import 'ws';
package/dist/http.cjs CHANGED
@@ -569,9 +569,28 @@ var Server = class extends import_node_events4.EventEmitter {
569
569
  unregisterWebSocketServer(wsServer) {
570
570
  this._bunWebSocketServers.delete(wsServer);
571
571
  }
572
+ resolvePmInheritedFd(explicitPort, explicitFd) {
573
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
574
+ return explicitFd;
575
+ }
576
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
577
+ if (!fdValue) {
578
+ return void 0;
579
+ }
580
+ const parsedFd = Number.parseInt(fdValue, 10);
581
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
582
+ return void 0;
583
+ }
584
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
585
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
586
+ return void 0;
587
+ }
588
+ return parsedFd;
589
+ }
572
590
  listen(...args) {
573
591
  let port = 3e3;
574
592
  let hostname = "0.0.0.0";
593
+ let fd;
575
594
  let callback;
576
595
  const firstArg = args[0];
577
596
  if (typeof firstArg === "number") {
@@ -586,8 +605,10 @@ var Server = class extends import_node_events4.EventEmitter {
586
605
  } else if (firstArg && typeof firstArg === "object") {
587
606
  port = firstArg.port || 3e3;
588
607
  hostname = firstArg.hostname || "0.0.0.0";
608
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
589
609
  callback = args[1];
590
610
  }
611
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
591
612
  const self = this;
592
613
  if (isNode) {
593
614
  this.nativeServer = http.createServer((req, res) => {
@@ -602,11 +623,19 @@ var Server = class extends import_node_events4.EventEmitter {
602
623
  this.nativeServer.on("upgrade", (req, socket, head) => {
603
624
  self.emit("upgrade", req, socket, head);
604
625
  });
605
- this.nativeServer.listen(port, hostname, () => {
606
- this._listening = true;
607
- this.emit("listening");
608
- if (callback) callback();
609
- });
626
+ if (fd !== void 0) {
627
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
628
+ this._listening = true;
629
+ this.emit("listening");
630
+ if (callback) callback();
631
+ });
632
+ } else {
633
+ this.nativeServer.listen(port, hostname, () => {
634
+ this._listening = true;
635
+ this.emit("listening");
636
+ if (callback) callback();
637
+ });
638
+ }
610
639
  this.nativeServer.on("error", (err) => this.emit("error", err));
611
640
  this.nativeServer.on("close", () => {
612
641
  this._listening = false;
@@ -725,7 +754,6 @@ var Server = class extends import_node_events4.EventEmitter {
725
754
  this.writeHead(statusCode);
726
755
  }
727
756
  responseReady = true;
728
- return this;
729
757
  }
730
758
  };
731
759
  if (self.requestListener) {
@@ -733,51 +761,141 @@ var Server = class extends import_node_events4.EventEmitter {
733
761
  } else {
734
762
  self.emit("request", incomingMessage, serverResponse);
735
763
  }
736
- if (responseReady) {
737
- return new Response(body, {
738
- status: statusCode,
739
- statusText: statusMessage,
740
- headers
741
- });
764
+ if (!responseReady) {
765
+ serverResponse.end();
742
766
  }
743
- return new Promise((resolve) => {
744
- serverResponse.end = (chunk) => {
745
- if (chunk !== void 0) {
746
- body += chunk;
747
- }
748
- resolve(new Response(body, {
749
- status: statusCode,
750
- statusText: statusMessage,
751
- headers
752
- }));
753
- };
767
+ return new Response(body, {
768
+ status: statusCode,
769
+ statusText: statusMessage,
770
+ headers
754
771
  });
755
772
  },
756
- error: createErrorResponse
773
+ error: (err) => {
774
+ this.emit("error", err);
775
+ return createErrorResponse();
776
+ }
757
777
  });
778
+ this._listening = true;
758
779
  emitListeningWithCallback(this, callback);
780
+ this.nativeServer.stop = this.nativeServer.stop || this.nativeServer.close;
781
+ this.nativeServer.close = this.nativeServer.close || this.nativeServer.stop;
782
+ this.nativeServer.on?.("close", () => {
783
+ this._listening = false;
784
+ this.emit("close");
785
+ });
759
786
  } else if (isDeno) {
787
+ const server = this;
760
788
  this.nativeServer = Deno.serve({
761
789
  port,
762
- hostname,
763
- handler: (req) => {
764
- return new Promise((resolve) => {
765
- const incomingMessage = new IncomingMessage(req);
766
- const serverResponse = new ServerResponse();
767
- serverResponse._setResolver(resolve);
768
- if (self.requestListener) {
769
- self.requestListener(incomingMessage, serverResponse);
770
- } else {
771
- self.emit("request", incomingMessage, serverResponse);
790
+ hostname
791
+ }, async (req) => {
792
+ const urlObj = new URL(req.url);
793
+ const requestUrl = urlObj.pathname + urlObj.search;
794
+ const incomingHeaders = headersToRecord(req.headers);
795
+ const rawHeaders = headersToRawHeaders(req.headers);
796
+ const bodyChunks = [];
797
+ const responseHeaders = new Headers();
798
+ let statusCode = 200;
799
+ let statusText = "OK";
800
+ let responseClosed = false;
801
+ const incomingMessage = {
802
+ method: req.method,
803
+ url: requestUrl,
804
+ headers: incomingHeaders,
805
+ httpVersion: "1.1",
806
+ rawHeaders,
807
+ _req: req,
808
+ text: () => req.text(),
809
+ json: () => req.json()
810
+ };
811
+ const serverResponse = {
812
+ statusCode: 200,
813
+ statusMessage: "OK",
814
+ headersSent: false,
815
+ setHeader(name, value) {
816
+ responseHeaders.set(name, Array.isArray(value) ? value.join(", ") : String(value));
817
+ return this;
818
+ },
819
+ getHeader(name) {
820
+ return responseHeaders.get(name) ?? void 0;
821
+ },
822
+ getHeaders() {
823
+ const headers = {};
824
+ responseHeaders.forEach((value, key) => {
825
+ headers[key] = value;
826
+ });
827
+ return headers;
828
+ },
829
+ writeHead(status, arg2, arg3) {
830
+ statusCode = status;
831
+ this.statusCode = status;
832
+ this.headersSent = true;
833
+ if (typeof arg2 === "string") {
834
+ statusText = arg2;
835
+ this.statusMessage = arg2;
836
+ if (arg3) {
837
+ Object.entries(arg3).forEach(([key, value]) => {
838
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
839
+ });
840
+ }
841
+ } else if (arg2) {
842
+ Object.entries(arg2).forEach(([key, value]) => {
843
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
844
+ });
772
845
  }
773
- });
774
- },
775
- onError: (error) => {
776
- this.emit("error", error);
777
- return createErrorResponse();
846
+ return this;
847
+ },
848
+ write(chunk) {
849
+ if (!this.headersSent) {
850
+ this.writeHead(statusCode);
851
+ }
852
+ if (typeof chunk === "string") {
853
+ bodyChunks.push(new TextEncoder().encode(chunk));
854
+ } else if (chunk instanceof Uint8Array) {
855
+ bodyChunks.push(chunk);
856
+ } else if (chunk !== void 0 && chunk !== null) {
857
+ bodyChunks.push(new TextEncoder().encode(String(chunk)));
858
+ }
859
+ return true;
860
+ },
861
+ end(chunk) {
862
+ if (chunk !== void 0) {
863
+ this.write(chunk);
864
+ }
865
+ if (!this.headersSent) {
866
+ this.writeHead(statusCode);
867
+ }
868
+ responseClosed = true;
869
+ }
870
+ };
871
+ if (server.requestListener) {
872
+ server.requestListener(incomingMessage, serverResponse);
873
+ } else {
874
+ server.emit("request", incomingMessage, serverResponse);
778
875
  }
876
+ if (!responseClosed) {
877
+ serverResponse.end();
878
+ }
879
+ const body = bodyChunks.length === 0 ? void 0 : (() => {
880
+ const totalLength = bodyChunks.reduce((sum, chunk) => sum + chunk.length, 0);
881
+ const output = new ArrayBuffer(totalLength);
882
+ const combined = new Uint8Array(output);
883
+ let offset = 0;
884
+ for (const chunk of bodyChunks) {
885
+ combined.set(chunk, offset);
886
+ offset += chunk.length;
887
+ }
888
+ return output;
889
+ })();
890
+ return new Response(body, {
891
+ status: statusCode,
892
+ statusText,
893
+ headers: responseHeaders
894
+ });
779
895
  });
896
+ this._listening = true;
780
897
  emitListeningWithCallback(this, callback);
898
+ this.nativeServer.finished.then(() => closeAndEmit(this)).catch((err) => this.emit("error", err));
781
899
  }
782
900
  return this;
783
901
  }
@@ -820,8 +938,9 @@ var Server = class extends import_node_events4.EventEmitter {
820
938
  return this._listening;
821
939
  }
822
940
  };
823
- function createServer(optionsOrListener, requestListener) {
824
- return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
941
+ function createServer(arg1, arg2) {
942
+ const requestListener = typeof arg1 === "function" ? arg1 : arg2;
943
+ return new Server(requestListener);
825
944
  }
826
945
 
827
946
  // src/server/http/index.ts
package/dist/http.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from 'node:events';
2
- import { R as RequestOptions, I as IncomingMessage, a as RequestListener, b as ServerOptions, S as ServerResponse } from './types-DAisuVr5.js';
3
- export { c as IncomingHttpHeaders, O as OutgoingHttpHeaders } from './types-DAisuVr5.js';
2
+ import { R as RequestOptions, I as IncomingMessage, a as RequestListener, S as ServerListenOptions, b as ServerOptions, c as ServerResponse } from './types-DPOgoGs-.js';
3
+ export { d as IncomingHttpHeaders, O as OutgoingHttpHeaders } from './types-DPOgoGs-.js';
4
4
 
5
5
  /**
6
6
  * HTTP Agent
@@ -50,14 +50,11 @@ declare class Server extends EventEmitter {
50
50
  constructor(requestListener?: RequestListener);
51
51
  registerWebSocketServer(wsServer: any): void;
52
52
  unregisterWebSocketServer(wsServer: any): void;
53
+ private resolvePmInheritedFd;
53
54
  listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;
54
55
  listen(port?: number, hostname?: string, listeningListener?: () => void): this;
55
56
  listen(port?: number, listeningListener?: () => void): this;
56
- listen(options?: {
57
- port?: number;
58
- hostname?: string;
59
- backlog?: number;
60
- }, listeningListener?: () => void): this;
57
+ listen(options?: ServerListenOptions, listeningListener?: () => void): this;
61
58
  close(callback?: (err?: Error) => void): this;
62
59
  address(): {
63
60
  port: number;
@@ -66,9 +63,6 @@ declare class Server extends EventEmitter {
66
63
  } | null;
67
64
  get listening(): boolean;
68
65
  }
69
- /**
70
- * Create HTTP server
71
- */
72
66
  declare function createServer(requestListener?: RequestListener): Server;
73
67
  declare function createServer(options: ServerOptions, requestListener?: RequestListener): Server;
74
68
 
@@ -100,4 +94,4 @@ declare const _default: {
100
94
  getRuntime: typeof getRuntime;
101
95
  };
102
96
 
103
- export { Agent, ClientRequest, IncomingMessage, METHODS, RequestListener, RequestOptions, STATUS_CODES, Server, ServerOptions, ServerResponse, createServer, _default as default, get, getRuntime, request };
97
+ export { Agent, ClientRequest, IncomingMessage, METHODS, RequestListener, RequestOptions, STATUS_CODES, Server, ServerListenOptions, ServerOptions, ServerResponse, createServer, _default as default, get, getRuntime, request };
package/dist/http.js CHANGED
@@ -541,9 +541,28 @@
541
541
  unregisterWebSocketServer(wsServer) {
542
542
  this._bunWebSocketServers.delete(wsServer);
543
543
  }
544
+ resolvePmInheritedFd(explicitPort, explicitFd) {
545
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
546
+ return explicitFd;
547
+ }
548
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
549
+ if (!fdValue) {
550
+ return void 0;
551
+ }
552
+ const parsedFd = Number.parseInt(fdValue, 10);
553
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
554
+ return void 0;
555
+ }
556
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
557
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
558
+ return void 0;
559
+ }
560
+ return parsedFd;
561
+ }
544
562
  listen(...args) {
545
563
  let port = 3e3;
546
564
  let hostname = "0.0.0.0";
565
+ let fd;
547
566
  let callback;
548
567
  const firstArg = args[0];
549
568
  if (typeof firstArg === "number") {
@@ -558,8 +577,10 @@
558
577
  } else if (firstArg && typeof firstArg === "object") {
559
578
  port = firstArg.port || 3e3;
560
579
  hostname = firstArg.hostname || "0.0.0.0";
580
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
561
581
  callback = args[1];
562
582
  }
583
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
563
584
  const self = this;
564
585
  if (isNode) {
565
586
  this.nativeServer = http.createServer((req, res) => {
@@ -574,11 +595,19 @@
574
595
  this.nativeServer.on("upgrade", (req, socket, head) => {
575
596
  self.emit("upgrade", req, socket, head);
576
597
  });
577
- this.nativeServer.listen(port, hostname, () => {
578
- this._listening = true;
579
- this.emit("listening");
580
- if (callback) callback();
581
- });
598
+ if (fd !== void 0) {
599
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
600
+ this._listening = true;
601
+ this.emit("listening");
602
+ if (callback) callback();
603
+ });
604
+ } else {
605
+ this.nativeServer.listen(port, hostname, () => {
606
+ this._listening = true;
607
+ this.emit("listening");
608
+ if (callback) callback();
609
+ });
610
+ }
582
611
  this.nativeServer.on("error", (err) => this.emit("error", err));
583
612
  this.nativeServer.on("close", () => {
584
613
  this._listening = false;
@@ -697,7 +726,6 @@
697
726
  this.writeHead(statusCode);
698
727
  }
699
728
  responseReady = true;
700
- return this;
701
729
  }
702
730
  };
703
731
  if (self.requestListener) {
@@ -705,51 +733,141 @@
705
733
  } else {
706
734
  self.emit("request", incomingMessage, serverResponse);
707
735
  }
708
- if (responseReady) {
709
- return new Response(body, {
710
- status: statusCode,
711
- statusText: statusMessage,
712
- headers
713
- });
736
+ if (!responseReady) {
737
+ serverResponse.end();
714
738
  }
715
- return new Promise((resolve) => {
716
- serverResponse.end = (chunk) => {
717
- if (chunk !== void 0) {
718
- body += chunk;
719
- }
720
- resolve(new Response(body, {
721
- status: statusCode,
722
- statusText: statusMessage,
723
- headers
724
- }));
725
- };
739
+ return new Response(body, {
740
+ status: statusCode,
741
+ statusText: statusMessage,
742
+ headers
726
743
  });
727
744
  },
728
- error: createErrorResponse
745
+ error: (err) => {
746
+ this.emit("error", err);
747
+ return createErrorResponse();
748
+ }
729
749
  });
750
+ this._listening = true;
730
751
  emitListeningWithCallback(this, callback);
752
+ this.nativeServer.stop = this.nativeServer.stop || this.nativeServer.close;
753
+ this.nativeServer.close = this.nativeServer.close || this.nativeServer.stop;
754
+ this.nativeServer.on?.("close", () => {
755
+ this._listening = false;
756
+ this.emit("close");
757
+ });
731
758
  } else if (isDeno) {
759
+ const server = this;
732
760
  this.nativeServer = Deno.serve({
733
761
  port,
734
- hostname,
735
- handler: (req) => {
736
- return new Promise((resolve) => {
737
- const incomingMessage = new IncomingMessage(req);
738
- const serverResponse = new ServerResponse();
739
- serverResponse._setResolver(resolve);
740
- if (self.requestListener) {
741
- self.requestListener(incomingMessage, serverResponse);
742
- } else {
743
- self.emit("request", incomingMessage, serverResponse);
762
+ hostname
763
+ }, async (req) => {
764
+ const urlObj = new URL(req.url);
765
+ const requestUrl = urlObj.pathname + urlObj.search;
766
+ const incomingHeaders = headersToRecord(req.headers);
767
+ const rawHeaders = headersToRawHeaders(req.headers);
768
+ const bodyChunks = [];
769
+ const responseHeaders = new Headers();
770
+ let statusCode = 200;
771
+ let statusText = "OK";
772
+ let responseClosed = false;
773
+ const incomingMessage = {
774
+ method: req.method,
775
+ url: requestUrl,
776
+ headers: incomingHeaders,
777
+ httpVersion: "1.1",
778
+ rawHeaders,
779
+ _req: req,
780
+ text: () => req.text(),
781
+ json: () => req.json()
782
+ };
783
+ const serverResponse = {
784
+ statusCode: 200,
785
+ statusMessage: "OK",
786
+ headersSent: false,
787
+ setHeader(name, value) {
788
+ responseHeaders.set(name, Array.isArray(value) ? value.join(", ") : String(value));
789
+ return this;
790
+ },
791
+ getHeader(name) {
792
+ return responseHeaders.get(name) ?? void 0;
793
+ },
794
+ getHeaders() {
795
+ const headers = {};
796
+ responseHeaders.forEach((value, key) => {
797
+ headers[key] = value;
798
+ });
799
+ return headers;
800
+ },
801
+ writeHead(status, arg2, arg3) {
802
+ statusCode = status;
803
+ this.statusCode = status;
804
+ this.headersSent = true;
805
+ if (typeof arg2 === "string") {
806
+ statusText = arg2;
807
+ this.statusMessage = arg2;
808
+ if (arg3) {
809
+ Object.entries(arg3).forEach(([key, value]) => {
810
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
811
+ });
812
+ }
813
+ } else if (arg2) {
814
+ Object.entries(arg2).forEach(([key, value]) => {
815
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
816
+ });
744
817
  }
745
- });
746
- },
747
- onError: (error) => {
748
- this.emit("error", error);
749
- return createErrorResponse();
818
+ return this;
819
+ },
820
+ write(chunk) {
821
+ if (!this.headersSent) {
822
+ this.writeHead(statusCode);
823
+ }
824
+ if (typeof chunk === "string") {
825
+ bodyChunks.push(new TextEncoder().encode(chunk));
826
+ } else if (chunk instanceof Uint8Array) {
827
+ bodyChunks.push(chunk);
828
+ } else if (chunk !== void 0 && chunk !== null) {
829
+ bodyChunks.push(new TextEncoder().encode(String(chunk)));
830
+ }
831
+ return true;
832
+ },
833
+ end(chunk) {
834
+ if (chunk !== void 0) {
835
+ this.write(chunk);
836
+ }
837
+ if (!this.headersSent) {
838
+ this.writeHead(statusCode);
839
+ }
840
+ responseClosed = true;
841
+ }
842
+ };
843
+ if (server.requestListener) {
844
+ server.requestListener(incomingMessage, serverResponse);
845
+ } else {
846
+ server.emit("request", incomingMessage, serverResponse);
750
847
  }
848
+ if (!responseClosed) {
849
+ serverResponse.end();
850
+ }
851
+ const body = bodyChunks.length === 0 ? void 0 : (() => {
852
+ const totalLength = bodyChunks.reduce((sum, chunk) => sum + chunk.length, 0);
853
+ const output = new ArrayBuffer(totalLength);
854
+ const combined = new Uint8Array(output);
855
+ let offset = 0;
856
+ for (const chunk of bodyChunks) {
857
+ combined.set(chunk, offset);
858
+ offset += chunk.length;
859
+ }
860
+ return output;
861
+ })();
862
+ return new Response(body, {
863
+ status: statusCode,
864
+ statusText,
865
+ headers: responseHeaders
866
+ });
751
867
  });
868
+ this._listening = true;
752
869
  emitListeningWithCallback(this, callback);
870
+ this.nativeServer.finished.then(() => closeAndEmit(this)).catch((err) => this.emit("error", err));
753
871
  }
754
872
  return this;
755
873
  }
@@ -792,8 +910,9 @@
792
910
  return this._listening;
793
911
  }
794
912
  };
795
- function createServer(optionsOrListener, requestListener) {
796
- return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
913
+ function createServer(arg1, arg2) {
914
+ const requestListener = typeof arg1 === "function" ? arg1 : arg2;
915
+ return new Server(requestListener);
797
916
  }
798
917
 
799
918
  // src/server/http/index.ts