exisjs 0.5.3 → 0.5.5
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/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +18 -4
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/routes.d.ts.map +1 -1
- package/dist/cli/routes.js.map +1 -1
- package/dist/router/gateway.d.ts.map +1 -1
- package/dist/router/gateway.js.map +1 -1
- 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 +40 -42
- 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/dev-error-overlay.d.ts.map +1 -1
- package/dist/server/dev-error-overlay.js +3 -1
- package/dist/server/dev-error-overlay.js.map +1 -1
- 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/route-scanner.d.ts.map +1 -1
- package/dist/server/route-scanner.js +52 -48
- package/dist/server/route-scanner.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/testing/client.d.ts.map +1 -1
- package/dist/testing/client.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
|
@@ -1,419 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* uWebSockets.js Server Adapter for Exis
|
|
4
|
-
*
|
|
5
|
-
* This module provides a high-performance server backend using uWebSockets.js
|
|
6
|
-
* as a drop-in replacement for Node's native HTTP module. When uWebSockets.js
|
|
7
|
-
* is installed, Exis will auto-detect and use it for dramatically higher throughput.
|
|
8
|
-
*
|
|
9
|
-
* uWebSockets.js bypasses Node's network layer entirely, using optimized C++
|
|
10
|
-
* for socket handling, I/O batching, and direct V8 memory access.
|
|
11
|
-
*/
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.UwsWebSocketShim = exports.UwsServerResponse = exports.UwsIncomingMessage = void 0;
|
|
14
|
-
exports.isUwsAvailable = isUwsAvailable;
|
|
15
|
-
exports.getUws = getUws;
|
|
16
|
-
exports.createUwsApp = createUwsApp;
|
|
17
|
-
let uWS;
|
|
18
|
-
try {
|
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
20
|
-
uWS = require('uWebSockets.js');
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
// uWebSockets.js is optional — will be null if not installed
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Returns true if uWebSockets.js is available on this platform.
|
|
27
|
-
*/
|
|
28
|
-
function isUwsAvailable() {
|
|
29
|
-
return uWS !== undefined && uWS !== null;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Returns the uWS module if available.
|
|
33
|
-
*/
|
|
34
|
-
function getUws() {
|
|
35
|
-
return uWS;
|
|
36
|
-
}
|
|
37
|
-
// ─── Request Shim ────────────────────────────────────────────────────────────
|
|
38
|
-
/**
|
|
39
|
-
* A lightweight shim that wraps a uWS.HttpRequest to provide the same interface
|
|
40
|
-
* that ExisRequest expects from Node's IncomingMessage.
|
|
41
|
-
*
|
|
42
|
-
* IMPORTANT: uWS HttpRequest is only valid during the initial synchronous callback.
|
|
43
|
-
* All headers, URL, and method MUST be copied synchronously before any async work.
|
|
44
|
-
*/
|
|
45
|
-
class UwsIncomingMessage {
|
|
46
|
-
constructor(req, res) {
|
|
47
|
-
this.complete = false;
|
|
48
|
-
this._listeners = {};
|
|
49
|
-
this._bufferedData = [];
|
|
50
|
-
this._hasEnded = false;
|
|
51
|
-
// Copy everything synchronously — uWS.HttpRequest is invalidated after return
|
|
52
|
-
this.method = req.getMethod().toUpperCase();
|
|
53
|
-
this.url = req.getUrl() + (req.getQuery() ? '?' + req.getQuery() : '');
|
|
54
|
-
// Copy headers
|
|
55
|
-
this.headers = {};
|
|
56
|
-
req.forEach((key, value) => {
|
|
57
|
-
this.headers[key] = value;
|
|
58
|
-
});
|
|
59
|
-
// Extract remote address
|
|
60
|
-
const addrBuf = res.getRemoteAddressAsText();
|
|
61
|
-
this.socket = {
|
|
62
|
-
remoteAddress: Buffer.from(addrBuf).toString(),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
// Minimal EventEmitter-like interface for body parsing
|
|
66
|
-
on(event, listener) {
|
|
67
|
-
if (!this._listeners[event])
|
|
68
|
-
this._listeners[event] = [];
|
|
69
|
-
this._listeners[event].push(listener);
|
|
70
|
-
if (event === 'data' && this._bufferedData.length > 0) {
|
|
71
|
-
const chunksToFlush = [...this._bufferedData];
|
|
72
|
-
this._bufferedData = []; // Clear buffer immediately so it's not flushed twice
|
|
73
|
-
queueMicrotask(() => {
|
|
74
|
-
for (const chunk of chunksToFlush) {
|
|
75
|
-
listener(chunk);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
if (event === 'end' && this._hasEnded) {
|
|
80
|
-
queueMicrotask(() => {
|
|
81
|
-
listener();
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
return this;
|
|
85
|
-
}
|
|
86
|
-
once(event, listener) {
|
|
87
|
-
const wrapped = (...args) => {
|
|
88
|
-
this.off(event, wrapped);
|
|
89
|
-
listener(...args);
|
|
90
|
-
};
|
|
91
|
-
return this.on(event, wrapped);
|
|
92
|
-
}
|
|
93
|
-
off(event, listener) {
|
|
94
|
-
const listeners = this._listeners[event];
|
|
95
|
-
if (listeners) {
|
|
96
|
-
const idx = listeners.indexOf(listener);
|
|
97
|
-
if (idx !== -1)
|
|
98
|
-
listeners.splice(idx, 1);
|
|
99
|
-
}
|
|
100
|
-
return this;
|
|
101
|
-
}
|
|
102
|
-
removeAllListeners(event) {
|
|
103
|
-
if (event) {
|
|
104
|
-
delete this._listeners[event];
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
this._listeners = {};
|
|
108
|
-
}
|
|
109
|
-
return this;
|
|
110
|
-
}
|
|
111
|
-
emit(event, ...args) {
|
|
112
|
-
const listeners = this._listeners[event];
|
|
113
|
-
if (!listeners || listeners.length === 0) {
|
|
114
|
-
if (event === 'data')
|
|
115
|
-
this._bufferedData.push(args[0]);
|
|
116
|
-
if (event === 'end')
|
|
117
|
-
this._hasEnded = true;
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
for (const fn of listeners)
|
|
121
|
-
fn(...args);
|
|
122
|
-
return true;
|
|
123
|
-
}
|
|
124
|
-
destroy() {
|
|
125
|
-
this._listeners = {};
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
exports.UwsIncomingMessage = UwsIncomingMessage;
|
|
129
|
-
// ─── Response Shim ───────────────────────────────────────────────────────────
|
|
130
|
-
/**
|
|
131
|
-
* A lightweight shim that wraps a uWS.HttpResponse to provide the same interface
|
|
132
|
-
* that ExisResponse expects from Node's ServerResponse.
|
|
133
|
-
*
|
|
134
|
-
* Uses uWS cork() for I/O batching — all header and body writes happen in a
|
|
135
|
-
* single syscall for maximum throughput.
|
|
136
|
-
*/
|
|
137
|
-
class UwsServerResponse {
|
|
138
|
-
constructor(_uwsRes) {
|
|
139
|
-
this._uwsRes = _uwsRes;
|
|
140
|
-
this.statusCode = 200;
|
|
141
|
-
this.headersSent = false;
|
|
142
|
-
this.writableEnded = false;
|
|
143
|
-
this._headers = new Map();
|
|
144
|
-
this._aborted = false;
|
|
145
|
-
this._listeners = {};
|
|
146
|
-
// Track abort state
|
|
147
|
-
_uwsRes.onAborted(() => {
|
|
148
|
-
this._aborted = true;
|
|
149
|
-
this.emit('close');
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
setHeader(name, value) {
|
|
153
|
-
this._headers.set(name.toLowerCase(), String(value));
|
|
154
|
-
}
|
|
155
|
-
getHeader(name) {
|
|
156
|
-
return this._headers.get(name.toLowerCase());
|
|
157
|
-
}
|
|
158
|
-
hasHeader(name) {
|
|
159
|
-
return this._headers.has(name.toLowerCase());
|
|
160
|
-
}
|
|
161
|
-
removeHeader(name) {
|
|
162
|
-
this._headers.delete(name.toLowerCase());
|
|
163
|
-
}
|
|
164
|
-
write(chunk) {
|
|
165
|
-
if (this._aborted || this.writableEnded)
|
|
166
|
-
return false;
|
|
167
|
-
let result = false;
|
|
168
|
-
this._uwsRes.cork(() => {
|
|
169
|
-
if (!this.headersSent) {
|
|
170
|
-
this.headersSent = true;
|
|
171
|
-
this._uwsRes.writeStatus(String(this.statusCode));
|
|
172
|
-
for (const [key, value] of this._headers) {
|
|
173
|
-
this._uwsRes.writeHeader(key, value);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
result = this._uwsRes.write(chunk);
|
|
177
|
-
});
|
|
178
|
-
return result;
|
|
179
|
-
}
|
|
180
|
-
end(data, callback) {
|
|
181
|
-
if (typeof data === 'function') {
|
|
182
|
-
callback = data;
|
|
183
|
-
data = undefined;
|
|
184
|
-
}
|
|
185
|
-
if (this._aborted || this.writableEnded) {
|
|
186
|
-
if (callback)
|
|
187
|
-
callback();
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
this.writableEnded = true;
|
|
191
|
-
this._uwsRes.cork(() => {
|
|
192
|
-
if (!this.headersSent) {
|
|
193
|
-
this.headersSent = true;
|
|
194
|
-
// Write status
|
|
195
|
-
this._uwsRes.writeStatus(String(this.statusCode));
|
|
196
|
-
// Write all headers
|
|
197
|
-
for (const [key, value] of this._headers) {
|
|
198
|
-
if (key === 'content-length' && data !== undefined && data !== null) {
|
|
199
|
-
continue; // uWebSockets automatically adds Content-Length for data
|
|
200
|
-
}
|
|
201
|
-
this._uwsRes.writeHeader(key, value);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Write body and end
|
|
205
|
-
if (data !== undefined && data !== null) {
|
|
206
|
-
if (Buffer.isBuffer(data)) {
|
|
207
|
-
this._uwsRes.end(data);
|
|
208
|
-
}
|
|
209
|
-
else if (typeof data === 'string') {
|
|
210
|
-
this._uwsRes.end(data);
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
this._uwsRes.end(String(data));
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
this._uwsRes.end();
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
this.emit('finish');
|
|
221
|
-
if (callback)
|
|
222
|
-
callback();
|
|
223
|
-
}
|
|
224
|
-
// Minimal EventEmitter-like interface
|
|
225
|
-
on(event, listener) {
|
|
226
|
-
if (!this._listeners[event])
|
|
227
|
-
this._listeners[event] = [];
|
|
228
|
-
this._listeners[event].push(listener);
|
|
229
|
-
return this;
|
|
230
|
-
}
|
|
231
|
-
emit(event, ...args) {
|
|
232
|
-
const listeners = this._listeners[event];
|
|
233
|
-
if (!listeners || listeners.length === 0)
|
|
234
|
-
return false;
|
|
235
|
-
for (const fn of listeners)
|
|
236
|
-
fn(...args);
|
|
237
|
-
return true;
|
|
238
|
-
}
|
|
239
|
-
assignSocket() {
|
|
240
|
-
// no-op for compatibility
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
exports.UwsServerResponse = UwsServerResponse;
|
|
244
|
-
// ─── WebSocket Shim ────────────────────────────────────────────────────────────
|
|
245
|
-
class UwsWebSocketShim {
|
|
246
|
-
constructor(_uwsWs) {
|
|
247
|
-
this._uwsWs = _uwsWs;
|
|
248
|
-
this.readyState = 1; // OPEN
|
|
249
|
-
this._listeners = {};
|
|
250
|
-
}
|
|
251
|
-
send(data) {
|
|
252
|
-
if (this.readyState !== 1)
|
|
253
|
-
return;
|
|
254
|
-
const isBinary = Buffer.isBuffer(data) || data instanceof Uint8Array;
|
|
255
|
-
this._uwsWs.send(data, isBinary);
|
|
256
|
-
}
|
|
257
|
-
close(code, data) {
|
|
258
|
-
this.readyState = 3; // CLOSED
|
|
259
|
-
this._uwsWs.end(code, data);
|
|
260
|
-
}
|
|
261
|
-
terminate() {
|
|
262
|
-
this.readyState = 3; // CLOSED
|
|
263
|
-
this._uwsWs.close();
|
|
264
|
-
}
|
|
265
|
-
ping(message) {
|
|
266
|
-
if (this.readyState !== 1)
|
|
267
|
-
return;
|
|
268
|
-
this._uwsWs.ping(message);
|
|
269
|
-
}
|
|
270
|
-
on(event, listener) {
|
|
271
|
-
if (!this._listeners[event])
|
|
272
|
-
this._listeners[event] = [];
|
|
273
|
-
this._listeners[event].push(listener);
|
|
274
|
-
return this;
|
|
275
|
-
}
|
|
276
|
-
once(event, listener) {
|
|
277
|
-
const wrapped = (...args) => {
|
|
278
|
-
this.off(event, wrapped);
|
|
279
|
-
listener(...args);
|
|
280
|
-
};
|
|
281
|
-
return this.on(event, wrapped);
|
|
282
|
-
}
|
|
283
|
-
off(event, listener) {
|
|
284
|
-
const listeners = this._listeners[event];
|
|
285
|
-
if (listeners) {
|
|
286
|
-
const idx = listeners.indexOf(listener);
|
|
287
|
-
if (idx !== -1)
|
|
288
|
-
listeners.splice(idx, 1);
|
|
289
|
-
}
|
|
290
|
-
return this;
|
|
291
|
-
}
|
|
292
|
-
emit(event, ...args) {
|
|
293
|
-
const listeners = this._listeners[event];
|
|
294
|
-
if (!listeners || listeners.length === 0)
|
|
295
|
-
return false;
|
|
296
|
-
for (const fn of listeners)
|
|
297
|
-
fn(...args);
|
|
298
|
-
return true;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
exports.UwsWebSocketShim = UwsWebSocketShim;
|
|
302
|
-
/**
|
|
303
|
-
* Creates a uWebSockets.js HTTP server that delegates request handling to Exis.
|
|
304
|
-
*
|
|
305
|
-
* @param handler - The request handler function (typically App.handleUws)
|
|
306
|
-
* @param wsHandler - The websocket upgrade handler function (typically App.handleUwsUpgrade)
|
|
307
|
-
* @param ssl - Optional SSL configuration
|
|
308
|
-
* @returns The uWS App instance and helper methods
|
|
309
|
-
*/
|
|
310
|
-
function createUwsApp(handler, wsHandler, ssl) {
|
|
311
|
-
if (!uWS) {
|
|
312
|
-
throw new Error('uWebSockets.js is not installed. Install it with: npm install uWebSockets.js@github:uNetworking/uWebSockets.js#v20.51.0');
|
|
313
|
-
}
|
|
314
|
-
let app;
|
|
315
|
-
if (ssl) {
|
|
316
|
-
app = uWS.SSLApp({
|
|
317
|
-
key_file_name: typeof ssl.key === 'string' ? ssl.key : undefined,
|
|
318
|
-
cert_file_name: typeof ssl.cert === 'string' ? ssl.cert : undefined,
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
else {
|
|
322
|
-
app = uWS.App();
|
|
323
|
-
}
|
|
324
|
-
// Register WebSocket handler
|
|
325
|
-
app.ws('/*', {
|
|
326
|
-
idleTimeout: 30,
|
|
327
|
-
maxBackpressure: 1024 * 1024,
|
|
328
|
-
upgrade: (res, req, context) => {
|
|
329
|
-
const shimReq = new UwsIncomingMessage(req, res);
|
|
330
|
-
// Call into app.ts to handle middleware and then upgrade
|
|
331
|
-
wsHandler(shimReq, res, context);
|
|
332
|
-
},
|
|
333
|
-
open: (ws) => {
|
|
334
|
-
ws.shim = new UwsWebSocketShim(ws);
|
|
335
|
-
// ws.exisWs is attached during upgrade in app.ts
|
|
336
|
-
if (ws.exisWs) {
|
|
337
|
-
ws.exisWs.raw = ws.shim; // Make sure ExisWebSocket uses our shim
|
|
338
|
-
}
|
|
339
|
-
ws.shim.emit('open');
|
|
340
|
-
if (ws.finalHandler && ws.req && ws.res) {
|
|
341
|
-
Promise.resolve(ws.finalHandler(ws.req, ws.res, () => {
|
|
342
|
-
/* noop */
|
|
343
|
-
})).catch((err) => {
|
|
344
|
-
if (ws.req.log) {
|
|
345
|
-
ws.req.log.error({ err }, 'Error in uWS WebSocket handler');
|
|
346
|
-
}
|
|
347
|
-
else {
|
|
348
|
-
console.error('[Exis] Error in uWS WebSocket handler', err);
|
|
349
|
-
}
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
message: (ws, message, isBinary) => {
|
|
354
|
-
if (ws.shim) {
|
|
355
|
-
ws.shim.emit('message', Buffer.from(message), isBinary);
|
|
356
|
-
}
|
|
357
|
-
},
|
|
358
|
-
close: (ws, code, message) => {
|
|
359
|
-
if (ws.shim) {
|
|
360
|
-
ws.shim.emit('close', code, Buffer.from(message));
|
|
361
|
-
}
|
|
362
|
-
},
|
|
363
|
-
});
|
|
364
|
-
// Register a catch-all HTTP handler
|
|
365
|
-
app.any('/*', (uwsRes, uwsReq) => {
|
|
366
|
-
const shimReq = new UwsIncomingMessage(uwsReq, uwsRes);
|
|
367
|
-
const shimRes = new UwsServerResponse(uwsRes);
|
|
368
|
-
// Read body using uWS native onData/onAborted
|
|
369
|
-
const contentLength = shimReq.headers['content-length'];
|
|
370
|
-
if (contentLength && parseInt(contentLength, 10) > 0) {
|
|
371
|
-
const chunks = [];
|
|
372
|
-
uwsRes.onData((chunk, isLast) => {
|
|
373
|
-
// We MUST copy the ArrayBuffer because uWS frees the memory immediately
|
|
374
|
-
const copy = Buffer.alloc(chunk.byteLength);
|
|
375
|
-
Buffer.from(chunk).copy(copy);
|
|
376
|
-
chunks.push(copy);
|
|
377
|
-
if (isLast) {
|
|
378
|
-
shimReq.complete = true;
|
|
379
|
-
setImmediate(() => {
|
|
380
|
-
shimReq.emit('data', Buffer.concat(chunks));
|
|
381
|
-
shimReq.emit('end');
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
else {
|
|
387
|
-
// No body — emit end immediately
|
|
388
|
-
shimReq.complete = true;
|
|
389
|
-
// Use setImmediate to ensure handler has time to register listeners
|
|
390
|
-
setImmediate(() => shimReq.emit('end'));
|
|
391
|
-
}
|
|
392
|
-
handler(shimReq, shimRes);
|
|
393
|
-
});
|
|
394
|
-
return {
|
|
395
|
-
app,
|
|
396
|
-
listen(port, host, cb) {
|
|
397
|
-
const onListen = (token) => {
|
|
398
|
-
if (token) {
|
|
399
|
-
cb({ token, port });
|
|
400
|
-
}
|
|
401
|
-
else {
|
|
402
|
-
cb(null);
|
|
403
|
-
}
|
|
404
|
-
};
|
|
405
|
-
if (typeof uWS.LIBUS_LISTEN_EXCLUSIVE_PORT !== 'undefined') {
|
|
406
|
-
app.listen(host, port, uWS.LIBUS_LISTEN_EXCLUSIVE_PORT, onListen);
|
|
407
|
-
}
|
|
408
|
-
else {
|
|
409
|
-
app.listen(host, port, onListen);
|
|
410
|
-
}
|
|
411
|
-
},
|
|
412
|
-
close(token) {
|
|
413
|
-
if (token) {
|
|
414
|
-
uWS.us_listen_socket_close(token);
|
|
415
|
-
}
|
|
416
|
-
},
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
//# sourceMappingURL=uws-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uws-adapter.js","sourceRoot":"","sources":["../../src/server/uws-adapter.ts"],"names":[],"mappings":"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"}
|