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.
@@ -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
- // ─── WebSocket Upgrade Handler ───────────────────────────────────────────────
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\\r\\n\\r\\n');
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\\r\\n\\r\\n');
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
- * WebSocket Upgrade Handler for uWebSockets.js
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 reqPath = (shimReq.url || '').split('?')[0];
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
- // 404
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
- let isAborted = false;
94
- uwsRes.onAborted(() => {
95
- isAborted = true;
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
- const shimRes = new uws_adapter_1.UwsServerResponse(uwsRes);
98
- const res = new response_1.ExisResponse(shimRes);
99
- const req = new request_1.ExisRequest(shimReq, res, this.app.options.trustProxy, this.app.options.bodyLimit);
100
- res.req = req;
101
- req.method = 'WS';
102
- req.params = matched.params;
103
- req.log = this.app.log;
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
- this.app.requestHandler._executeWithContext(req, res, async () => {
116
- (0, router_1.runHandlers)(pipeline, req, res, async (err) => {
117
- if (isAborted)
118
- return;
119
- if (err) {
120
- this.app.log.error({ err }, 'Error during uWS WebSocket upgrade middleware');
121
- uwsRes.cork(() => {
122
- uwsRes.writeStatus('500 Internal Server Error');
123
- uwsRes.end();
124
- });
125
- return;
126
- }
127
- if (res.headersSent) {
128
- return; // Middleware sent an HTTP response
129
- }
130
- // We need to fetch headers directly from the shimReq.headers
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":"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"}
1
+ {"version":3,"file":"ws-orchestrator.js","sourceRoot":"","sources":["../../src/server/ws-orchestrator.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -147,12 +147,12 @@ export interface ExisConfig {
147
147
  debugRouting?: boolean;
148
148
  asyncContext?: boolean;
149
149
  /**
150
- * Optional. Server backend to use.
151
- * 'node' (default fallback) uses Node's native HTTP/HTTPS modules.
152
- * 'uws' uses uWebSockets.js for significantly higher throughput.
153
- * 'auto' will use uWS if installed, otherwise Node.
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' | 'uws';
155
+ server?: 'auto' | 'node' | 'bun';
156
156
  queue?: import('./queue/types').QueueConfig;
157
157
  plugins?: ExisPlugin[];
158
158
  test?: {
@@ -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', 'uws']).optional(),
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",
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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"}