exisjs 0.5.3 → 0.5.4
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/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +38 -0
- package/dist/router/router.js.map +1 -1
- package/dist/server/app.d.ts +0 -9
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +0 -11
- package/dist/server/app.js.map +1 -1
- package/dist/server/bootstrapper.d.ts +4 -5
- package/dist/server/bootstrapper.d.ts.map +1 -1
- package/dist/server/bootstrapper.js +35 -40
- package/dist/server/bootstrapper.js.map +1 -1
- package/dist/server/bun-adapter.d.ts +49 -0
- package/dist/server/bun-adapter.d.ts.map +1 -0
- package/dist/server/bun-adapter.js +213 -0
- package/dist/server/bun-adapter.js.map +1 -0
- package/dist/server/request-handler.d.ts +0 -2
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +8 -48
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js.map +1 -1
- package/dist/server/ws-orchestrator.d.ts +1 -6
- package/dist/server/ws-orchestrator.d.ts.map +1 -1
- package/dist/server/ws-orchestrator.js +69 -56
- package/dist/server/ws-orchestrator.js.map +1 -1
- package/dist/types.d.ts +5 -5
- package/dist/utils/config.js +1 -1
- package/package.json +3 -6
- package/dist/server/uws-adapter.d.ts +0 -106
- package/dist/server/uws-adapter.d.ts.map +0 -1
- package/dist/server/uws-adapter.js +0 -419
- package/dist/server/uws-adapter.js.map +0 -1
|
@@ -6,19 +6,18 @@ const request_1 = require("./request");
|
|
|
6
6
|
const response_1 = require("./response");
|
|
7
7
|
const router_1 = require("../router/router");
|
|
8
8
|
const socket_1 = require("../websocket/socket");
|
|
9
|
-
const uws_adapter_1 = require("./uws-adapter");
|
|
10
9
|
class WsOrchestrator {
|
|
11
10
|
constructor(app) {
|
|
12
11
|
this.app = app;
|
|
13
12
|
}
|
|
14
|
-
//
|
|
13
|
+
// --- Node.js WebSocket Upgrade Handler --------------------------------------
|
|
15
14
|
async handleUpgrade(rawReq, socket, head) {
|
|
16
15
|
this.app.applyBuiltins();
|
|
17
16
|
// Match route
|
|
18
17
|
const reqPath = (rawReq.url || '').split('?')[0];
|
|
19
18
|
const matched = this.app.getRouter().match('WS', reqPath);
|
|
20
19
|
if (!matched) {
|
|
21
|
-
socket.write('HTTP/1.1 404 Not Found
|
|
20
|
+
socket.write('HTTP/1.1 404 Not Found\r\n\r\n');
|
|
22
21
|
socket.destroy();
|
|
23
22
|
return;
|
|
24
23
|
}
|
|
@@ -48,7 +47,7 @@ class WsOrchestrator {
|
|
|
48
47
|
await (0, router_1.runHandlers)(pipeline, req, res, async (err) => {
|
|
49
48
|
if (err) {
|
|
50
49
|
this.app.log.error({ err }, 'Error during WebSocket upgrade middleware');
|
|
51
|
-
socket.write('HTTP/1.1 500 Internal Server Error
|
|
50
|
+
socket.write('HTTP/1.1 500 Internal Server Error\r\n\r\n');
|
|
52
51
|
socket.destroy();
|
|
53
52
|
return;
|
|
54
53
|
}
|
|
@@ -74,33 +73,50 @@ class WsOrchestrator {
|
|
|
74
73
|
});
|
|
75
74
|
});
|
|
76
75
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
* Runs the middleware pipeline and if successful, upgrades the connection.
|
|
80
|
-
*/
|
|
81
|
-
async handleUwsUpgrade(shimReq, uwsRes, context) {
|
|
76
|
+
// --- Bun WebSocket Upgrade Handler ------------------------------------------
|
|
77
|
+
async handleBunUpgrade(bunReq, resolve, server) {
|
|
82
78
|
this.app.applyBuiltins();
|
|
83
|
-
const
|
|
79
|
+
const urlObj = new URL(bunReq.url);
|
|
80
|
+
const reqPath = urlObj.pathname;
|
|
84
81
|
const matched = this.app.getRouter().match('WS', reqPath);
|
|
85
82
|
if (!matched) {
|
|
86
|
-
|
|
87
|
-
uwsRes.cork(() => {
|
|
88
|
-
uwsRes.writeStatus('404 Not Found');
|
|
89
|
-
uwsRes.end();
|
|
90
|
-
});
|
|
83
|
+
resolve(new Response('Not Found', { status: 404 }));
|
|
91
84
|
return;
|
|
92
85
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
86
|
+
// We create an ExisRequest/ExisResponse pipeline using mock Node APIs
|
|
87
|
+
// But since this is purely for middleware execution, we can use an empty object
|
|
88
|
+
// Or we could reuse BunIncomingMessage / BunServerResponse if we wanted
|
|
89
|
+
// For now, we will construct a mock for middleware execution
|
|
90
|
+
const reqMock = {
|
|
91
|
+
method: 'WS',
|
|
92
|
+
url: bunReq.url,
|
|
93
|
+
headers: {},
|
|
94
|
+
params: matched.params,
|
|
95
|
+
log: this.app.log,
|
|
96
|
+
};
|
|
97
|
+
bunReq.headers.forEach((v, k) => {
|
|
98
|
+
;
|
|
99
|
+
reqMock.headers[k] = v;
|
|
96
100
|
});
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
let responseSent = false;
|
|
102
|
+
let responseStatus = 200;
|
|
103
|
+
let responseBody = '';
|
|
104
|
+
const resMock = {
|
|
105
|
+
headersSent: false,
|
|
106
|
+
statusCode: 200,
|
|
107
|
+
status(code) {
|
|
108
|
+
this.statusCode = code;
|
|
109
|
+
return this;
|
|
110
|
+
},
|
|
111
|
+
send(body) {
|
|
112
|
+
responseSent = true;
|
|
113
|
+
responseBody = body;
|
|
114
|
+
responseStatus = this.statusCode;
|
|
115
|
+
},
|
|
116
|
+
json(body) {
|
|
117
|
+
this.send(JSON.stringify(body));
|
|
118
|
+
},
|
|
119
|
+
};
|
|
104
120
|
const pipeline = [
|
|
105
121
|
...this.app.globalMiddleware,
|
|
106
122
|
async (req, res, next) => {
|
|
@@ -112,38 +128,35 @@ class WsOrchestrator {
|
|
|
112
128
|
});
|
|
113
129
|
},
|
|
114
130
|
];
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const secWebSocketKey = shimReq.headers['sec-websocket-key'] || '';
|
|
132
|
-
const secWebSocketProtocol = shimReq.headers['sec-websocket-protocol'] || '';
|
|
133
|
-
const secWebSocketExtensions = shimReq.headers['sec-websocket-extensions'] || '';
|
|
134
|
-
// Prepare user data for the upgraded websocket
|
|
135
|
-
const userData = {
|
|
136
|
-
req,
|
|
137
|
-
res,
|
|
138
|
-
exisWs: new socket_1.ExisWebSocket(null, req, this.app.wsServer), // the raw will be set to shim in open()
|
|
139
|
-
finalHandler: matched.route.handlers[matched.route.handlers.length - 1],
|
|
140
|
-
};
|
|
141
|
-
this.app.wsServer.track(userData.exisWs);
|
|
142
|
-
req.ws = userData.exisWs;
|
|
143
|
-
uwsRes.cork(() => {
|
|
144
|
-
uwsRes.upgrade(userData, secWebSocketKey, secWebSocketProtocol, secWebSocketExtensions, context);
|
|
145
|
-
});
|
|
131
|
+
await (0, router_1.runHandlers)(pipeline, reqMock, resMock, async (err) => {
|
|
132
|
+
if (err) {
|
|
133
|
+
this.app.log.error({ err }, 'Error during Bun WebSocket upgrade middleware');
|
|
134
|
+
resolve(new Response('Internal Server Error', { status: 500 }));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (responseSent || resMock.headersSent) {
|
|
138
|
+
resolve(new Response(responseBody, { status: responseStatus }));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// Upgrade to WebSocket
|
|
142
|
+
const exisWs = new socket_1.ExisWebSocket(null, reqMock, this.app.wsServer);
|
|
143
|
+
const success = server.upgrade(bunReq, {
|
|
144
|
+
data: {
|
|
145
|
+
exisWs,
|
|
146
|
+
},
|
|
146
147
|
});
|
|
148
|
+
if (success) {
|
|
149
|
+
this.app.wsServer.track(exisWs);
|
|
150
|
+
reqMock.ws = exisWs;
|
|
151
|
+
const finalHandler = matched.route.handlers[matched.route.handlers.length - 1];
|
|
152
|
+
Promise.resolve(finalHandler(reqMock, resMock, () => {
|
|
153
|
+
/* noop */
|
|
154
|
+
})).catch((err) => {
|
|
155
|
+
this.app.log.error({ err }, 'Error in Bun WebSocket handler');
|
|
156
|
+
});
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
resolve(new Response('WebSocket upgrade failed', { status: 400 }));
|
|
147
160
|
});
|
|
148
161
|
}
|
|
149
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-orchestrator.js","sourceRoot":"","sources":["../../src/server/ws-orchestrator.ts"],"names":[],"mappings":";;;AAAA,yCAA2D;AAE3D,uCAAuC;AACvC,yCAAyC;AACzC,6CAA8C;AAC9C,gDAAmD;
|
|
1
|
+
{"version":3,"file":"ws-orchestrator.js","sourceRoot":"","sources":["../../src/server/ws-orchestrator.ts"],"names":[],"mappings":";;;AAAA,yCAA2D;AAE3D,uCAAuC;AACvC,yCAAyC;AACzC,6CAA8C;AAC9C,gDAAmD;AAInD,MAAa,cAAc;IAGzB,YAAY,GAAa;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,+EAA+E;IAExE,KAAK,CAAC,aAAa,CACxB,MAAuB,EACvB,MAAc,EACd,IAAY;QAEZ,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;QAExB,cAAc;QACd,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;YAC9C,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,OAAM;QACR,CAAC;QAED,yFAAyF;QACzF,MAAM,MAAM,GAAG,IAAI,0BAAc,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,CAAC,YAAY,CAAC,MAA8C,CAAC,CAAA;QACnE,MAAM,GAAG,GAAG,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAA;QACpC,MAAM,GAAG,GAAG,IAAI,qBAAW,CACzB,MAAM,EACN,GAAG,EACH,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAC3B,CAAA;QACD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;QACb,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;QACjB,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC3B,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;QAEtB,sEAAsE;QACtE,MAAM,QAAQ,GAAc;YAC1B,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB;YAC5B,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBACvB,iEAAiE;gBACjE,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzD,IAAA,oBAAW,EAAC,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC3C,IAAI,GAAG;wBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;oBACzB,IAAI,EAAE,CAAA;gBACR,CAAC,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;QAED,MAAM,IAAA,oBAAW,EAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAClD,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,2CAA2C,CAAC,CAAA;gBACxE,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;gBAC1D,MAAM,CAAC,OAAO,EAAE,CAAA;gBAChB,OAAM;YACR,CAAC;YAED,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpB,6EAA6E;gBAC7E,MAAM,CAAC,OAAO,EAAE,CAAA;gBAChB,OAAM;YACR,CAAC;YAED,2FAA2F;YAC3F,MAAM,CAAC,MAAM,GAAG,cAAc,CAAA;YAE9B,qCAAqC;YACrC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC9D,MAAM,MAAM,GAAG,IAAI,sBAAa,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAC5D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAE9B;gBAAC,GAAwC,CAAC,EAAE,GAAG,MAAM,CAAA;gBAEtD,MAAM,YAAY,GAChB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAC3D,OAAO,CAAC,OAAO,CACb,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;oBAC1B,UAAU;gBACZ,CAAC,CAAC,CACH,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACd,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAA;oBACzD,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;gBACzC,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,+EAA+E;IAExE,KAAK,CAAC,gBAAgB,CAC3B,MAAW,EACX,OAA2B,EAC3B,MAAW;QAEX,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;QAExB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;QAED,sEAAsE;QACtE,gFAAgF;QAChF,wEAAwE;QACxE,6DAA6D;QAE7D,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;SAClB,CAAA;QAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YAC9C,CAAC;YAAC,OAAO,CAAC,OAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,IAAI,cAAc,GAAG,GAAG,CAAA;QACxB,IAAI,YAAY,GAAG,EAAE,CAAA;QAErB,MAAM,OAAO,GAAG;YACd,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,GAAG;YACf,MAAM,CAAC,IAAY;gBACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;gBACtB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,CAAC,IAAY;gBACf,YAAY,GAAG,IAAI,CAAA;gBACnB,YAAY,GAAG,IAAI,CAAA;gBACnB,cAAc,GAAG,IAAI,CAAC,UAAU,CAAA;YAClC,CAAC;YACD,IAAI,CAAC,IAAS;gBACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;YACjC,CAAC;SACF,CAAA;QAED,MAAM,QAAQ,GAAc;YAC1B,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB;YAC5B,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBACvB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzD,IAAA,oBAAW,EAAC,aAAa,EAAE,GAAU,EAAE,GAAU,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzD,IAAI,GAAG;wBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;oBACzB,IAAI,EAAE,CAAA;gBACR,CAAC,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;QAED,MAAM,IAAA,oBAAW,EAAC,QAAQ,EAAE,OAAc,EAAE,OAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACxE,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAChB,EAAE,GAAG,EAAE,EACP,+CAA+C,CAChD,CAAA;gBACD,OAAO,CAAC,IAAI,QAAQ,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;gBAC/D,OAAM;YACR,CAAC;YAED,IAAI,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;gBAC/D,OAAM;YACR,CAAC;YAED,uBAAuB;YACvB,MAAM,MAAM,GAAG,IAAI,sBAAa,CAC9B,IAAW,EACX,OAAc,EACd,IAAI,CAAC,GAAG,CAAC,QAAQ,CAClB,CAAA;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;gBACrC,IAAI,EAAE;oBACJ,MAAM;iBACP;aACF,CAAC,CAAA;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAC9B;gBAAC,OAAe,CAAC,EAAE,GAAG,MAAM,CAAA;gBAE7B,MAAM,YAAY,GAChB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAC3D,OAAO,CAAC,OAAO,CACb,YAAY,CAAC,OAAc,EAAE,OAAc,EAAE,GAAG,EAAE;oBAChD,UAAU;gBACZ,CAAC,CAAC,CACH,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACd,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,gCAAgC,CAAC,CAAA;gBAC/D,CAAC,CAAC,CAAA;gBAEF,OAAM;YACR,CAAC;YAED,OAAO,CAAC,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QACpE,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AA/MD,wCA+MC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -147,12 +147,12 @@ export interface ExisConfig {
|
|
|
147
147
|
debugRouting?: boolean;
|
|
148
148
|
asyncContext?: boolean;
|
|
149
149
|
/**
|
|
150
|
-
*
|
|
151
|
-
* 'node'
|
|
152
|
-
* '
|
|
153
|
-
* 'auto' will use
|
|
150
|
+
* Defines the HTTP server backend.
|
|
151
|
+
* 'node' uses the native Node.js HTTP module.
|
|
152
|
+
* 'bun' uses Bun's native HTTP module for significantly higher throughput.
|
|
153
|
+
* 'auto' will use Bun if detected, otherwise Node.
|
|
154
154
|
*/
|
|
155
|
-
server?: 'auto' | 'node' | '
|
|
155
|
+
server?: 'auto' | 'node' | 'bun';
|
|
156
156
|
queue?: import('./queue/types').QueueConfig;
|
|
157
157
|
plugins?: ExisPlugin[];
|
|
158
158
|
test?: {
|
package/dist/utils/config.js
CHANGED
|
@@ -131,7 +131,7 @@ const configSchema = validator_1.v.object({
|
|
|
131
131
|
])
|
|
132
132
|
.optional(),
|
|
133
133
|
keepAlive: validator_1.v.union([validator_1.v.boolean(), validator_1.v.number()]).optional(),
|
|
134
|
-
server: validator_1.v.enum(['node', '
|
|
134
|
+
server: validator_1.v.enum(['node', 'bun']).optional(),
|
|
135
135
|
workers: validator_1.v
|
|
136
136
|
.union([validator_1.v.number(), validator_1.v.literal('safe'), validator_1.v.literal('max')])
|
|
137
137
|
.optional(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "exisjs",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "Zero-configuration full-stack framework with integrated Queue, Cron, MongoDB, and Next.js support",
|
|
5
5
|
"author": "V25 Group <support@v25group.com>",
|
|
6
6
|
"keywords": [
|
|
@@ -211,9 +211,6 @@
|
|
|
211
211
|
"resend": "*"
|
|
212
212
|
},
|
|
213
213
|
"peerDependenciesMeta": {
|
|
214
|
-
"uWebSockets.js": {
|
|
215
|
-
"optional": true
|
|
216
|
-
},
|
|
217
214
|
"drizzle-orm": {
|
|
218
215
|
"optional": true
|
|
219
216
|
},
|
|
@@ -251,6 +248,7 @@
|
|
|
251
248
|
"devDependencies": {
|
|
252
249
|
"@types/accepts": "^1.3.7",
|
|
253
250
|
"@types/autocannon": "^7.12.7",
|
|
251
|
+
"@types/bun": "^1.3.14",
|
|
254
252
|
"@types/busboy": "^1.5.4",
|
|
255
253
|
"@types/content-disposition": "^0.5.9",
|
|
256
254
|
"@types/fresh": "^0.5.3",
|
|
@@ -263,7 +261,6 @@
|
|
|
263
261
|
"mitata": "^1.0.34"
|
|
264
262
|
},
|
|
265
263
|
"optionalDependencies": {
|
|
266
|
-
"ioredis": "^5.11.1"
|
|
267
|
-
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.51.0"
|
|
264
|
+
"ioredis": "^5.11.1"
|
|
268
265
|
}
|
|
269
266
|
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* uWebSockets.js Server Adapter for Exis
|
|
3
|
-
*
|
|
4
|
-
* This module provides a high-performance server backend using uWebSockets.js
|
|
5
|
-
* as a drop-in replacement for Node's native HTTP module. When uWebSockets.js
|
|
6
|
-
* is installed, Exis will auto-detect and use it for dramatically higher throughput.
|
|
7
|
-
*
|
|
8
|
-
* uWebSockets.js bypasses Node's network layer entirely, using optimized C++
|
|
9
|
-
* for socket handling, I/O batching, and direct V8 memory access.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Returns true if uWebSockets.js is available on this platform.
|
|
13
|
-
*/
|
|
14
|
-
export declare function isUwsAvailable(): boolean;
|
|
15
|
-
/**
|
|
16
|
-
* Returns the uWS module if available.
|
|
17
|
-
*/
|
|
18
|
-
export declare function getUws(): any;
|
|
19
|
-
/**
|
|
20
|
-
* A lightweight shim that wraps a uWS.HttpRequest to provide the same interface
|
|
21
|
-
* that ExisRequest expects from Node's IncomingMessage.
|
|
22
|
-
*
|
|
23
|
-
* IMPORTANT: uWS HttpRequest is only valid during the initial synchronous callback.
|
|
24
|
-
* All headers, URL, and method MUST be copied synchronously before any async work.
|
|
25
|
-
*/
|
|
26
|
-
export declare class UwsIncomingMessage {
|
|
27
|
-
method: string;
|
|
28
|
-
url: string;
|
|
29
|
-
headers: Record<string, string | undefined>;
|
|
30
|
-
socket: {
|
|
31
|
-
remoteAddress: string;
|
|
32
|
-
encrypted?: boolean;
|
|
33
|
-
};
|
|
34
|
-
complete: boolean;
|
|
35
|
-
private _listeners;
|
|
36
|
-
private _bufferedData;
|
|
37
|
-
private _hasEnded;
|
|
38
|
-
constructor(req: any, res: any);
|
|
39
|
-
on(event: string, listener: (...args: any[]) => void): this;
|
|
40
|
-
once(event: string, listener: (...args: any[]) => void): this;
|
|
41
|
-
off(event: string, listener: (...args: any[]) => void): this;
|
|
42
|
-
removeAllListeners(event?: string): this;
|
|
43
|
-
emit(event: string, ...args: any[]): boolean;
|
|
44
|
-
destroy(): void;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* A lightweight shim that wraps a uWS.HttpResponse to provide the same interface
|
|
48
|
-
* that ExisResponse expects from Node's ServerResponse.
|
|
49
|
-
*
|
|
50
|
-
* Uses uWS cork() for I/O batching — all header and body writes happen in a
|
|
51
|
-
* single syscall for maximum throughput.
|
|
52
|
-
*/
|
|
53
|
-
export declare class UwsServerResponse {
|
|
54
|
-
readonly _uwsRes: any;
|
|
55
|
-
statusCode: number;
|
|
56
|
-
headersSent: boolean;
|
|
57
|
-
writableEnded: boolean;
|
|
58
|
-
private _headers;
|
|
59
|
-
private _aborted;
|
|
60
|
-
private _listeners;
|
|
61
|
-
constructor(_uwsRes: any);
|
|
62
|
-
setHeader(name: string, value: string | number | readonly string[]): void;
|
|
63
|
-
getHeader(name: string): string | undefined;
|
|
64
|
-
hasHeader(name: string): boolean;
|
|
65
|
-
removeHeader(name: string): void;
|
|
66
|
-
write(chunk: string | Buffer): boolean;
|
|
67
|
-
end(data?: any, callback?: () => void): void;
|
|
68
|
-
on(event: string, listener: (...args: any[]) => void): this;
|
|
69
|
-
emit(event: string, ...args: any[]): boolean;
|
|
70
|
-
assignSocket(): void;
|
|
71
|
-
}
|
|
72
|
-
export declare class UwsWebSocketShim {
|
|
73
|
-
readonly _uwsWs: any;
|
|
74
|
-
readyState: number;
|
|
75
|
-
private _listeners;
|
|
76
|
-
constructor(_uwsWs: any);
|
|
77
|
-
send(data: any): void;
|
|
78
|
-
close(code?: number, data?: string | Buffer): void;
|
|
79
|
-
terminate(): void;
|
|
80
|
-
ping(message?: Buffer): void;
|
|
81
|
-
on(event: string, listener: (...args: any[]) => void): this;
|
|
82
|
-
once(event: string, listener: (...args: any[]) => void): this;
|
|
83
|
-
off(event: string, listener: (...args: any[]) => void): this;
|
|
84
|
-
emit(event: string, ...args: any[]): boolean;
|
|
85
|
-
}
|
|
86
|
-
export interface UwsListenToken {
|
|
87
|
-
token: any;
|
|
88
|
-
port: number;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Creates a uWebSockets.js HTTP server that delegates request handling to Exis.
|
|
92
|
-
*
|
|
93
|
-
* @param handler - The request handler function (typically App.handleUws)
|
|
94
|
-
* @param wsHandler - The websocket upgrade handler function (typically App.handleUwsUpgrade)
|
|
95
|
-
* @param ssl - Optional SSL configuration
|
|
96
|
-
* @returns The uWS App instance and helper methods
|
|
97
|
-
*/
|
|
98
|
-
export declare function createUwsApp(handler: (req: UwsIncomingMessage, res: UwsServerResponse) => void, wsHandler: (req: UwsIncomingMessage, res: any, context: any) => void, ssl?: {
|
|
99
|
-
key: string | Buffer;
|
|
100
|
-
cert: string | Buffer;
|
|
101
|
-
}): {
|
|
102
|
-
app: any;
|
|
103
|
-
listen(port: number, host: string, cb: (token: UwsListenToken | null) => void): void;
|
|
104
|
-
close(token: unknown): void;
|
|
105
|
-
};
|
|
106
|
-
//# sourceMappingURL=uws-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uws-adapter.d.ts","sourceRoot":"","sources":["../../src/server/uws-adapter.ts"],"names":[],"mappings":"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"}
|