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/https.js CHANGED
@@ -610,8 +610,9 @@
610
610
  });
611
611
 
612
612
  // src/server/http/server-runtime.ts
613
- function createServer(optionsOrListener, requestListener) {
614
- return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
613
+ function createServer(arg1, arg2) {
614
+ const requestListener = typeof arg1 === "function" ? arg1 : arg2;
615
+ return new Server(requestListener);
615
616
  }
616
617
  var import_node_events5, Server;
617
618
  var init_server_runtime = __esm({
@@ -636,9 +637,28 @@
636
637
  unregisterWebSocketServer(wsServer) {
637
638
  this._bunWebSocketServers.delete(wsServer);
638
639
  }
640
+ resolvePmInheritedFd(explicitPort, explicitFd) {
641
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
642
+ return explicitFd;
643
+ }
644
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
645
+ if (!fdValue) {
646
+ return void 0;
647
+ }
648
+ const parsedFd = Number.parseInt(fdValue, 10);
649
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
650
+ return void 0;
651
+ }
652
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
653
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
654
+ return void 0;
655
+ }
656
+ return parsedFd;
657
+ }
639
658
  listen(...args) {
640
659
  let port = 3e3;
641
660
  let hostname = "0.0.0.0";
661
+ let fd;
642
662
  let callback;
643
663
  const firstArg = args[0];
644
664
  if (typeof firstArg === "number") {
@@ -653,8 +673,10 @@
653
673
  } else if (firstArg && typeof firstArg === "object") {
654
674
  port = firstArg.port || 3e3;
655
675
  hostname = firstArg.hostname || "0.0.0.0";
676
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
656
677
  callback = args[1];
657
678
  }
679
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
658
680
  const self = this;
659
681
  if (isNode) {
660
682
  this.nativeServer = http.createServer((req, res) => {
@@ -669,11 +691,19 @@
669
691
  this.nativeServer.on("upgrade", (req, socket, head) => {
670
692
  self.emit("upgrade", req, socket, head);
671
693
  });
672
- this.nativeServer.listen(port, hostname, () => {
673
- this._listening = true;
674
- this.emit("listening");
675
- if (callback) callback();
676
- });
694
+ if (fd !== void 0) {
695
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
696
+ this._listening = true;
697
+ this.emit("listening");
698
+ if (callback) callback();
699
+ });
700
+ } else {
701
+ this.nativeServer.listen(port, hostname, () => {
702
+ this._listening = true;
703
+ this.emit("listening");
704
+ if (callback) callback();
705
+ });
706
+ }
677
707
  this.nativeServer.on("error", (err) => this.emit("error", err));
678
708
  this.nativeServer.on("close", () => {
679
709
  this._listening = false;
@@ -792,7 +822,6 @@
792
822
  this.writeHead(statusCode);
793
823
  }
794
824
  responseReady = true;
795
- return this;
796
825
  }
797
826
  };
798
827
  if (self.requestListener) {
@@ -800,51 +829,141 @@
800
829
  } else {
801
830
  self.emit("request", incomingMessage, serverResponse);
802
831
  }
803
- if (responseReady) {
804
- return new Response(body, {
805
- status: statusCode,
806
- statusText: statusMessage,
807
- headers
808
- });
832
+ if (!responseReady) {
833
+ serverResponse.end();
809
834
  }
810
- return new Promise((resolve) => {
811
- serverResponse.end = (chunk) => {
812
- if (chunk !== void 0) {
813
- body += chunk;
814
- }
815
- resolve(new Response(body, {
816
- status: statusCode,
817
- statusText: statusMessage,
818
- headers
819
- }));
820
- };
835
+ return new Response(body, {
836
+ status: statusCode,
837
+ statusText: statusMessage,
838
+ headers
821
839
  });
822
840
  },
823
- error: createErrorResponse
841
+ error: (err) => {
842
+ this.emit("error", err);
843
+ return createErrorResponse();
844
+ }
824
845
  });
846
+ this._listening = true;
825
847
  emitListeningWithCallback(this, callback);
848
+ this.nativeServer.stop = this.nativeServer.stop || this.nativeServer.close;
849
+ this.nativeServer.close = this.nativeServer.close || this.nativeServer.stop;
850
+ this.nativeServer.on?.("close", () => {
851
+ this._listening = false;
852
+ this.emit("close");
853
+ });
826
854
  } else if (isDeno) {
855
+ const server = this;
827
856
  this.nativeServer = Deno.serve({
828
857
  port,
829
- hostname,
830
- handler: (req) => {
831
- return new Promise((resolve) => {
832
- const incomingMessage = new IncomingMessage(req);
833
- const serverResponse = new ServerResponse();
834
- serverResponse._setResolver(resolve);
835
- if (self.requestListener) {
836
- self.requestListener(incomingMessage, serverResponse);
837
- } else {
838
- self.emit("request", incomingMessage, serverResponse);
858
+ hostname
859
+ }, async (req) => {
860
+ const urlObj = new URL(req.url);
861
+ const requestUrl = urlObj.pathname + urlObj.search;
862
+ const incomingHeaders = headersToRecord(req.headers);
863
+ const rawHeaders = headersToRawHeaders(req.headers);
864
+ const bodyChunks = [];
865
+ const responseHeaders = new Headers();
866
+ let statusCode = 200;
867
+ let statusText = "OK";
868
+ let responseClosed = false;
869
+ const incomingMessage = {
870
+ method: req.method,
871
+ url: requestUrl,
872
+ headers: incomingHeaders,
873
+ httpVersion: "1.1",
874
+ rawHeaders,
875
+ _req: req,
876
+ text: () => req.text(),
877
+ json: () => req.json()
878
+ };
879
+ const serverResponse = {
880
+ statusCode: 200,
881
+ statusMessage: "OK",
882
+ headersSent: false,
883
+ setHeader(name, value) {
884
+ responseHeaders.set(name, Array.isArray(value) ? value.join(", ") : String(value));
885
+ return this;
886
+ },
887
+ getHeader(name) {
888
+ return responseHeaders.get(name) ?? void 0;
889
+ },
890
+ getHeaders() {
891
+ const headers = {};
892
+ responseHeaders.forEach((value, key) => {
893
+ headers[key] = value;
894
+ });
895
+ return headers;
896
+ },
897
+ writeHead(status, arg2, arg3) {
898
+ statusCode = status;
899
+ this.statusCode = status;
900
+ this.headersSent = true;
901
+ if (typeof arg2 === "string") {
902
+ statusText = arg2;
903
+ this.statusMessage = arg2;
904
+ if (arg3) {
905
+ Object.entries(arg3).forEach(([key, value]) => {
906
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
907
+ });
908
+ }
909
+ } else if (arg2) {
910
+ Object.entries(arg2).forEach(([key, value]) => {
911
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
912
+ });
839
913
  }
840
- });
841
- },
842
- onError: (error) => {
843
- this.emit("error", error);
844
- return createErrorResponse();
914
+ return this;
915
+ },
916
+ write(chunk) {
917
+ if (!this.headersSent) {
918
+ this.writeHead(statusCode);
919
+ }
920
+ if (typeof chunk === "string") {
921
+ bodyChunks.push(new TextEncoder().encode(chunk));
922
+ } else if (chunk instanceof Uint8Array) {
923
+ bodyChunks.push(chunk);
924
+ } else if (chunk !== void 0 && chunk !== null) {
925
+ bodyChunks.push(new TextEncoder().encode(String(chunk)));
926
+ }
927
+ return true;
928
+ },
929
+ end(chunk) {
930
+ if (chunk !== void 0) {
931
+ this.write(chunk);
932
+ }
933
+ if (!this.headersSent) {
934
+ this.writeHead(statusCode);
935
+ }
936
+ responseClosed = true;
937
+ }
938
+ };
939
+ if (server.requestListener) {
940
+ server.requestListener(incomingMessage, serverResponse);
941
+ } else {
942
+ server.emit("request", incomingMessage, serverResponse);
943
+ }
944
+ if (!responseClosed) {
945
+ serverResponse.end();
845
946
  }
947
+ const body = bodyChunks.length === 0 ? void 0 : (() => {
948
+ const totalLength = bodyChunks.reduce((sum, chunk) => sum + chunk.length, 0);
949
+ const output = new ArrayBuffer(totalLength);
950
+ const combined = new Uint8Array(output);
951
+ let offset = 0;
952
+ for (const chunk of bodyChunks) {
953
+ combined.set(chunk, offset);
954
+ offset += chunk.length;
955
+ }
956
+ return output;
957
+ })();
958
+ return new Response(body, {
959
+ status: statusCode,
960
+ statusText,
961
+ headers: responseHeaders
962
+ });
846
963
  });
964
+ this._listening = true;
847
965
  emitListeningWithCallback(this, callback);
966
+ this.nativeServer.finished.then(() => closeAndEmit(this)).catch((err) => this.emit("error", err));
848
967
  }
849
968
  return this;
850
969
  }
@@ -1095,9 +1214,28 @@
1095
1214
  this.options = options;
1096
1215
  this.requestListener = requestListener;
1097
1216
  }
1217
+ resolvePmInheritedFd(explicitPort, explicitFd) {
1218
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
1219
+ return explicitFd;
1220
+ }
1221
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
1222
+ if (!fdValue) {
1223
+ return void 0;
1224
+ }
1225
+ const parsedFd = Number.parseInt(fdValue, 10);
1226
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
1227
+ return void 0;
1228
+ }
1229
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
1230
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
1231
+ return void 0;
1232
+ }
1233
+ return parsedFd;
1234
+ }
1098
1235
  listen(...args) {
1099
1236
  let port = 3e3;
1100
1237
  let hostname = "0.0.0.0";
1238
+ let fd;
1101
1239
  let callback;
1102
1240
  const firstArg = args[0];
1103
1241
  if (typeof firstArg === "number") {
@@ -1112,8 +1250,10 @@
1112
1250
  } else if (firstArg && typeof firstArg === "object") {
1113
1251
  port = firstArg.port || 3e3;
1114
1252
  hostname = firstArg.hostname || "0.0.0.0";
1253
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
1115
1254
  callback = args[1];
1116
1255
  }
1256
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
1117
1257
  const self = this;
1118
1258
  if (isNode) {
1119
1259
  const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
@@ -1126,11 +1266,19 @@
1126
1266
  self.emit("request", incomingMessage, serverResponse);
1127
1267
  }
1128
1268
  });
1129
- this.nativeServer.listen(port, hostname, () => {
1130
- this._listening = true;
1131
- this.emit("listening");
1132
- if (callback) callback();
1133
- });
1269
+ if (fd !== void 0) {
1270
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
1271
+ this._listening = true;
1272
+ this.emit("listening");
1273
+ if (callback) callback();
1274
+ });
1275
+ } else {
1276
+ this.nativeServer.listen(port, hostname, () => {
1277
+ this._listening = true;
1278
+ this.emit("listening");
1279
+ if (callback) callback();
1280
+ });
1281
+ }
1134
1282
  this.nativeServer.on("error", (err) => this.emit("error", err));
1135
1283
  this.nativeServer.on("close", () => {
1136
1284
  this._listening = false;
package/dist/https.mjs CHANGED
@@ -610,8 +610,9 @@ var init_runtime2 = __esm({
610
610
 
611
611
  // src/server/http/server-runtime.ts
612
612
  import { EventEmitter as EventEmitter5 } from "events";
613
- function createServer(optionsOrListener, requestListener) {
614
- return new Server(typeof optionsOrListener === "function" ? optionsOrListener : requestListener);
613
+ function createServer(arg1, arg2) {
614
+ const requestListener = typeof arg1 === "function" ? arg1 : arg2;
615
+ return new Server(requestListener);
615
616
  }
616
617
  var Server;
617
618
  var init_server_runtime = __esm({
@@ -635,9 +636,28 @@ var init_server_runtime = __esm({
635
636
  unregisterWebSocketServer(wsServer) {
636
637
  this._bunWebSocketServers.delete(wsServer);
637
638
  }
639
+ resolvePmInheritedFd(explicitPort, explicitFd) {
640
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
641
+ return explicitFd;
642
+ }
643
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
644
+ if (!fdValue) {
645
+ return void 0;
646
+ }
647
+ const parsedFd = Number.parseInt(fdValue, 10);
648
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
649
+ return void 0;
650
+ }
651
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
652
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
653
+ return void 0;
654
+ }
655
+ return parsedFd;
656
+ }
638
657
  listen(...args) {
639
658
  let port = 3e3;
640
659
  let hostname = "0.0.0.0";
660
+ let fd;
641
661
  let callback;
642
662
  const firstArg = args[0];
643
663
  if (typeof firstArg === "number") {
@@ -652,8 +672,10 @@ var init_server_runtime = __esm({
652
672
  } else if (firstArg && typeof firstArg === "object") {
653
673
  port = firstArg.port || 3e3;
654
674
  hostname = firstArg.hostname || "0.0.0.0";
675
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
655
676
  callback = args[1];
656
677
  }
678
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
657
679
  const self = this;
658
680
  if (isNode) {
659
681
  this.nativeServer = http.createServer((req, res) => {
@@ -668,11 +690,19 @@ var init_server_runtime = __esm({
668
690
  this.nativeServer.on("upgrade", (req, socket, head) => {
669
691
  self.emit("upgrade", req, socket, head);
670
692
  });
671
- this.nativeServer.listen(port, hostname, () => {
672
- this._listening = true;
673
- this.emit("listening");
674
- if (callback) callback();
675
- });
693
+ if (fd !== void 0) {
694
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
695
+ this._listening = true;
696
+ this.emit("listening");
697
+ if (callback) callback();
698
+ });
699
+ } else {
700
+ this.nativeServer.listen(port, hostname, () => {
701
+ this._listening = true;
702
+ this.emit("listening");
703
+ if (callback) callback();
704
+ });
705
+ }
676
706
  this.nativeServer.on("error", (err) => this.emit("error", err));
677
707
  this.nativeServer.on("close", () => {
678
708
  this._listening = false;
@@ -791,7 +821,6 @@ var init_server_runtime = __esm({
791
821
  this.writeHead(statusCode);
792
822
  }
793
823
  responseReady = true;
794
- return this;
795
824
  }
796
825
  };
797
826
  if (self.requestListener) {
@@ -799,51 +828,141 @@ var init_server_runtime = __esm({
799
828
  } else {
800
829
  self.emit("request", incomingMessage, serverResponse);
801
830
  }
802
- if (responseReady) {
803
- return new Response(body, {
804
- status: statusCode,
805
- statusText: statusMessage,
806
- headers
807
- });
831
+ if (!responseReady) {
832
+ serverResponse.end();
808
833
  }
809
- return new Promise((resolve) => {
810
- serverResponse.end = (chunk) => {
811
- if (chunk !== void 0) {
812
- body += chunk;
813
- }
814
- resolve(new Response(body, {
815
- status: statusCode,
816
- statusText: statusMessage,
817
- headers
818
- }));
819
- };
834
+ return new Response(body, {
835
+ status: statusCode,
836
+ statusText: statusMessage,
837
+ headers
820
838
  });
821
839
  },
822
- error: createErrorResponse
840
+ error: (err) => {
841
+ this.emit("error", err);
842
+ return createErrorResponse();
843
+ }
823
844
  });
845
+ this._listening = true;
824
846
  emitListeningWithCallback(this, callback);
847
+ this.nativeServer.stop = this.nativeServer.stop || this.nativeServer.close;
848
+ this.nativeServer.close = this.nativeServer.close || this.nativeServer.stop;
849
+ this.nativeServer.on?.("close", () => {
850
+ this._listening = false;
851
+ this.emit("close");
852
+ });
825
853
  } else if (isDeno) {
854
+ const server = this;
826
855
  this.nativeServer = Deno.serve({
827
856
  port,
828
- hostname,
829
- handler: (req) => {
830
- return new Promise((resolve) => {
831
- const incomingMessage = new IncomingMessage(req);
832
- const serverResponse = new ServerResponse();
833
- serverResponse._setResolver(resolve);
834
- if (self.requestListener) {
835
- self.requestListener(incomingMessage, serverResponse);
836
- } else {
837
- self.emit("request", incomingMessage, serverResponse);
857
+ hostname
858
+ }, async (req) => {
859
+ const urlObj = new URL(req.url);
860
+ const requestUrl = urlObj.pathname + urlObj.search;
861
+ const incomingHeaders = headersToRecord(req.headers);
862
+ const rawHeaders = headersToRawHeaders(req.headers);
863
+ const bodyChunks = [];
864
+ const responseHeaders = new Headers();
865
+ let statusCode = 200;
866
+ let statusText = "OK";
867
+ let responseClosed = false;
868
+ const incomingMessage = {
869
+ method: req.method,
870
+ url: requestUrl,
871
+ headers: incomingHeaders,
872
+ httpVersion: "1.1",
873
+ rawHeaders,
874
+ _req: req,
875
+ text: () => req.text(),
876
+ json: () => req.json()
877
+ };
878
+ const serverResponse = {
879
+ statusCode: 200,
880
+ statusMessage: "OK",
881
+ headersSent: false,
882
+ setHeader(name, value) {
883
+ responseHeaders.set(name, Array.isArray(value) ? value.join(", ") : String(value));
884
+ return this;
885
+ },
886
+ getHeader(name) {
887
+ return responseHeaders.get(name) ?? void 0;
888
+ },
889
+ getHeaders() {
890
+ const headers = {};
891
+ responseHeaders.forEach((value, key) => {
892
+ headers[key] = value;
893
+ });
894
+ return headers;
895
+ },
896
+ writeHead(status, arg2, arg3) {
897
+ statusCode = status;
898
+ this.statusCode = status;
899
+ this.headersSent = true;
900
+ if (typeof arg2 === "string") {
901
+ statusText = arg2;
902
+ this.statusMessage = arg2;
903
+ if (arg3) {
904
+ Object.entries(arg3).forEach(([key, value]) => {
905
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
906
+ });
907
+ }
908
+ } else if (arg2) {
909
+ Object.entries(arg2).forEach(([key, value]) => {
910
+ responseHeaders.set(key, Array.isArray(value) ? value.join(", ") : String(value));
911
+ });
838
912
  }
839
- });
840
- },
841
- onError: (error) => {
842
- this.emit("error", error);
843
- return createErrorResponse();
913
+ return this;
914
+ },
915
+ write(chunk) {
916
+ if (!this.headersSent) {
917
+ this.writeHead(statusCode);
918
+ }
919
+ if (typeof chunk === "string") {
920
+ bodyChunks.push(new TextEncoder().encode(chunk));
921
+ } else if (chunk instanceof Uint8Array) {
922
+ bodyChunks.push(chunk);
923
+ } else if (chunk !== void 0 && chunk !== null) {
924
+ bodyChunks.push(new TextEncoder().encode(String(chunk)));
925
+ }
926
+ return true;
927
+ },
928
+ end(chunk) {
929
+ if (chunk !== void 0) {
930
+ this.write(chunk);
931
+ }
932
+ if (!this.headersSent) {
933
+ this.writeHead(statusCode);
934
+ }
935
+ responseClosed = true;
936
+ }
937
+ };
938
+ if (server.requestListener) {
939
+ server.requestListener(incomingMessage, serverResponse);
940
+ } else {
941
+ server.emit("request", incomingMessage, serverResponse);
942
+ }
943
+ if (!responseClosed) {
944
+ serverResponse.end();
844
945
  }
946
+ const body = bodyChunks.length === 0 ? void 0 : (() => {
947
+ const totalLength = bodyChunks.reduce((sum, chunk) => sum + chunk.length, 0);
948
+ const output = new ArrayBuffer(totalLength);
949
+ const combined = new Uint8Array(output);
950
+ let offset = 0;
951
+ for (const chunk of bodyChunks) {
952
+ combined.set(chunk, offset);
953
+ offset += chunk.length;
954
+ }
955
+ return output;
956
+ })();
957
+ return new Response(body, {
958
+ status: statusCode,
959
+ statusText,
960
+ headers: responseHeaders
961
+ });
845
962
  });
963
+ this._listening = true;
846
964
  emitListeningWithCallback(this, callback);
965
+ this.nativeServer.finished.then(() => closeAndEmit(this)).catch((err) => this.emit("error", err));
847
966
  }
848
967
  return this;
849
968
  }
@@ -1094,9 +1213,28 @@ var Server2 = class extends EventEmitter6 {
1094
1213
  this.options = options;
1095
1214
  this.requestListener = requestListener;
1096
1215
  }
1216
+ resolvePmInheritedFd(explicitPort, explicitFd) {
1217
+ if (typeof explicitFd === "number" && Number.isInteger(explicitFd) && explicitFd >= 0) {
1218
+ return explicitFd;
1219
+ }
1220
+ const fdValue = process.env.ELIT_PM_LISTEN_FD;
1221
+ if (!fdValue) {
1222
+ return void 0;
1223
+ }
1224
+ const parsedFd = Number.parseInt(fdValue, 10);
1225
+ if (!Number.isInteger(parsedFd) || parsedFd < 0) {
1226
+ return void 0;
1227
+ }
1228
+ const publicPort = Number.parseInt(process.env.ELIT_PM_PUBLIC_PORT ?? process.env.ELIT_PM_PORT ?? "", 10);
1229
+ if (Number.isInteger(explicitPort) && Number.isInteger(publicPort) && explicitPort !== publicPort) {
1230
+ return void 0;
1231
+ }
1232
+ return parsedFd;
1233
+ }
1097
1234
  listen(...args) {
1098
1235
  let port = 3e3;
1099
1236
  let hostname = "0.0.0.0";
1237
+ let fd;
1100
1238
  let callback;
1101
1239
  const firstArg = args[0];
1102
1240
  if (typeof firstArg === "number") {
@@ -1111,8 +1249,10 @@ var Server2 = class extends EventEmitter6 {
1111
1249
  } else if (firstArg && typeof firstArg === "object") {
1112
1250
  port = firstArg.port || 3e3;
1113
1251
  hostname = firstArg.hostname || "0.0.0.0";
1252
+ fd = typeof firstArg.fd === "number" ? firstArg.fd : void 0;
1114
1253
  callback = args[1];
1115
1254
  }
1255
+ fd = this.resolvePmInheritedFd(firstArg && typeof firstArg === "object" ? firstArg.port : port, fd);
1116
1256
  const self = this;
1117
1257
  if (isNode) {
1118
1258
  const { IncomingMessage: IncomingMessage2, ServerResponse: ServerResponse2 } = loadHttpClasses();
@@ -1125,11 +1265,19 @@ var Server2 = class extends EventEmitter6 {
1125
1265
  self.emit("request", incomingMessage, serverResponse);
1126
1266
  }
1127
1267
  });
1128
- this.nativeServer.listen(port, hostname, () => {
1129
- this._listening = true;
1130
- this.emit("listening");
1131
- if (callback) callback();
1132
- });
1268
+ if (fd !== void 0) {
1269
+ this.nativeServer.listen({ fd, exclusive: false }, () => {
1270
+ this._listening = true;
1271
+ this.emit("listening");
1272
+ if (callback) callback();
1273
+ });
1274
+ } else {
1275
+ this.nativeServer.listen(port, hostname, () => {
1276
+ this._listening = true;
1277
+ this.emit("listening");
1278
+ if (callback) callback();
1279
+ });
1280
+ }
1133
1281
  this.nativeServer.on("error", (err) => this.emit("error", err));
1134
1282
  this.nativeServer.on("close", () => {
1135
1283
  this._listening = false;