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.
Files changed (49) hide show
  1. package/dist/cli/commands/dev.d.ts.map +1 -1
  2. package/dist/cli/commands/dev.js +18 -4
  3. package/dist/cli/commands/dev.js.map +1 -1
  4. package/dist/cli/commands/init.js +1 -1
  5. package/dist/cli/commands/init.js.map +1 -1
  6. package/dist/cli/routes.d.ts.map +1 -1
  7. package/dist/cli/routes.js.map +1 -1
  8. package/dist/router/gateway.d.ts.map +1 -1
  9. package/dist/router/gateway.js.map +1 -1
  10. package/dist/router/router.d.ts.map +1 -1
  11. package/dist/router/router.js +38 -0
  12. package/dist/router/router.js.map +1 -1
  13. package/dist/server/app.d.ts +0 -9
  14. package/dist/server/app.d.ts.map +1 -1
  15. package/dist/server/app.js +0 -11
  16. package/dist/server/app.js.map +1 -1
  17. package/dist/server/bootstrapper.d.ts +4 -5
  18. package/dist/server/bootstrapper.d.ts.map +1 -1
  19. package/dist/server/bootstrapper.js +40 -42
  20. package/dist/server/bootstrapper.js.map +1 -1
  21. package/dist/server/bun-adapter.d.ts +49 -0
  22. package/dist/server/bun-adapter.d.ts.map +1 -0
  23. package/dist/server/bun-adapter.js +213 -0
  24. package/dist/server/bun-adapter.js.map +1 -0
  25. package/dist/server/dev-error-overlay.d.ts.map +1 -1
  26. package/dist/server/dev-error-overlay.js +3 -1
  27. package/dist/server/dev-error-overlay.js.map +1 -1
  28. package/dist/server/request-handler.d.ts +0 -2
  29. package/dist/server/request-handler.d.ts.map +1 -1
  30. package/dist/server/request-handler.js +8 -48
  31. package/dist/server/request-handler.js.map +1 -1
  32. package/dist/server/request.d.ts.map +1 -1
  33. package/dist/server/request.js.map +1 -1
  34. package/dist/server/route-scanner.d.ts.map +1 -1
  35. package/dist/server/route-scanner.js +52 -48
  36. package/dist/server/route-scanner.js.map +1 -1
  37. package/dist/server/ws-orchestrator.d.ts +1 -6
  38. package/dist/server/ws-orchestrator.d.ts.map +1 -1
  39. package/dist/server/ws-orchestrator.js +69 -56
  40. package/dist/server/ws-orchestrator.js.map +1 -1
  41. package/dist/testing/client.d.ts.map +1 -1
  42. package/dist/testing/client.js.map +1 -1
  43. package/dist/types.d.ts +5 -5
  44. package/dist/utils/config.js +1 -1
  45. package/package.json +3 -6
  46. package/dist/server/uws-adapter.d.ts +0 -106
  47. package/dist/server/uws-adapter.d.ts.map +0 -1
  48. package/dist/server/uws-adapter.js +0 -419
  49. 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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"}