elit 3.6.7 → 3.6.9
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.
- package/Cargo.lock +1 -1
- package/Cargo.toml +1 -1
- package/README.md +20 -1
- package/dist/cli.cjs +2777 -321
- package/dist/cli.mjs +2764 -308
- package/dist/config.d.ts +6 -6
- package/dist/{contracts-BeW9k0yZ.d.ts → contracts-_0p1-15U.d.ts} +1 -1
- package/dist/coverage.d.ts +1 -1
- package/dist/dev-build.d.ts +3 -3
- package/dist/http.cjs +160 -41
- package/dist/http.d.ts +5 -11
- package/dist/http.js +160 -41
- package/dist/http.mjs +160 -41
- package/dist/https.cjs +194 -46
- package/dist/https.d.ts +3 -6
- package/dist/https.js +194 -46
- package/dist/https.mjs +194 -46
- package/dist/pm-node-shared-listener-bootstrap.cjs +75 -0
- package/dist/pm.cjs +2390 -160
- package/dist/pm.d.ts +83 -8
- package/dist/pm.js +2388 -188
- package/dist/pm.mjs +2380 -165
- package/dist/preview-build.d.ts +3 -3
- package/dist/server.cjs +417 -168
- package/dist/server.d.ts +4 -4
- package/dist/server.js +453 -179
- package/dist/server.mjs +417 -168
- package/dist/smtp-server.js +37 -12
- package/dist/test-reporter.d.ts +1 -1
- package/dist/test-runtime.d.ts +1 -1
- package/dist/{types-tJn88E1N.d.ts → types-BayMVo_k.d.ts} +39 -3
- package/dist/{types-CIhpN1-K.d.ts → types-C70T-42Z.d.ts} +1 -1
- package/dist/{types-DAisuVr5.d.ts → types-DPOgoGs-.d.ts} +7 -1
- package/dist/{state-DvEkDehk.d.ts → types-fiLday0L.d.ts} +96 -92
- package/dist/types.d.ts +4 -0
- package/dist/{websocket-XfyK23zD.d.ts → websocket-BLBEAnhp.d.ts} +1 -1
- package/dist/ws.d.ts +3 -3
- package/dist/wss.cjs +194 -46
- package/dist/wss.d.ts +3 -3
- package/dist/wss.js +194 -46
- package/dist/wss.mjs +194 -46
- package/package.json +11 -6
package/dist/config.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { E as ElitConfig } from './types-
|
|
2
|
-
export { D as DesktopConfig,
|
|
3
|
-
import './
|
|
4
|
-
import './types-
|
|
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-
|
|
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-
|
|
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
|
|
package/dist/coverage.d.ts
CHANGED
package/dist/dev-build.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D as DevServerOptions } from './
|
|
2
|
-
import './types-
|
|
1
|
+
import { D as DevServerOptions } from './types-fiLday0L.js';
|
|
2
|
+
import './types-DPOgoGs-.js';
|
|
3
3
|
import 'node:events';
|
|
4
|
-
import './websocket-
|
|
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
|
-
|
|
606
|
-
this.
|
|
607
|
-
|
|
608
|
-
|
|
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
|
-
|
|
738
|
-
status: statusCode,
|
|
739
|
-
statusText: statusMessage,
|
|
740
|
-
headers
|
|
741
|
-
});
|
|
764
|
+
if (!responseReady) {
|
|
765
|
+
serverResponse.end();
|
|
742
766
|
}
|
|
743
|
-
return new
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
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:
|
|
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
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
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
|
-
|
|
776
|
-
|
|
777
|
-
|
|
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(
|
|
824
|
-
|
|
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,
|
|
3
|
-
export {
|
|
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
|
-
|
|
578
|
-
this.
|
|
579
|
-
|
|
580
|
-
|
|
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
|
-
|
|
710
|
-
status: statusCode,
|
|
711
|
-
statusText: statusMessage,
|
|
712
|
-
headers
|
|
713
|
-
});
|
|
736
|
+
if (!responseReady) {
|
|
737
|
+
serverResponse.end();
|
|
714
738
|
}
|
|
715
|
-
return new
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
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:
|
|
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
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
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
|
-
|
|
748
|
-
|
|
749
|
-
|
|
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(
|
|
796
|
-
|
|
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
|